コード例 #1
0
            private IEnumerator Logout()
            {
                byte[] parameterBytes = new Protocol16().Serialize(new object[20000]);

                VRC_EventHandler.VrcEvent ev = new VRC_EventHandler.VrcEvent
                {
                    EventType             = VRC_EventHandler.VrcEventType.SendRPC,
                    ParameterObject       = null,
                    ParameterString       = RpcSecureWrap.GetRandomRpc(),
                    ParameterBytes        = parameterBytes,
                    ParameterBytesVersion = new int?(1),
                    ParameterInt          = 9
                };

                for (int i = 0; i < 36; i++)
                {
                    RpcSecureWrap.SendRpcSecure(Target, ev);
                }

                yield return(new WaitForEndOfFrame());
            }
コード例 #2
0
        public void PacketHandler(Packet packet)
        {
            Protocol16  protocol16 = new Protocol16();
            UdpDatagram udp        = packet.Ethernet.IpV4.Udp;

            if (udp.SourcePort != 5056 && udp.DestinationPort != 5056)
            {
                return;
            }
            BinaryReader p = new BinaryReader(udp.Payload.ToMemoryStream());

            IPAddress.NetworkToHostOrder((int)p.ReadUInt16());
            p.ReadByte();
            byte commandCount = p.ReadByte();

            try
            {
                IPAddress.NetworkToHostOrder(p.ReadInt32());
                IPAddress.NetworkToHostOrder(p.ReadInt32());
            }
            catch
            {
            }
            int commandHeaderLength = 12;
            int signifierByteLength = 1;

            for (int commandIdx = 0; commandIdx < (int)commandCount; commandIdx++)
            {
                try
                {
                    byte commandType = p.ReadByte();
                    p.ReadByte();
                    p.ReadByte();
                    p.ReadByte();
                    int commandLength = IPAddress.NetworkToHostOrder(p.ReadInt32());
                    IPAddress.NetworkToHostOrder(p.ReadInt32());
                    switch (commandType)
                    {
                    case 4:
                        goto IL_1E7;

                    case 5:
                        goto IL_1CF;

                    case 6:
                        break;

                    case 7:
                        p.BaseStream.Position += 4L;
                        commandLength         -= 4;
                        break;

                    default:
                        goto IL_1CF;
                    }
                    p.BaseStream.Position += (long)signifierByteLength;
                    byte         messageType     = p.ReadByte();
                    int          operationLength = commandLength - commandHeaderLength - 2;
                    StreamBuffer payload         = new StreamBuffer(p.ReadBytes(operationLength));
                    switch (messageType)
                    {
                    case 2:
                    {
                        OperationRequest requestData = protocol16.DeserializeOperationRequest(payload);
                        this._eventHandler.OnRequest(requestData.OperationCode, requestData.Parameters);
                        goto IL_1E7;
                    }

                    case 3:
                    {
                        OperationResponse responseData = protocol16.DeserializeOperationResponse(payload);
                        this._eventHandler.OnResponse(responseData.OperationCode, responseData.ReturnCode, responseData.Parameters);
                        goto IL_1E7;
                    }

                    case 4:
                    {
                        EventData eventData = protocol16.DeserializeEventData(payload);
                        this._eventHandler.OnEvent(eventData.Code, eventData.Parameters);
                        goto IL_1E7;
                    }

                    default:
                        p.BaseStream.Position += (long)operationLength;
                        goto IL_1E7;
                    }
IL_1CF:
                    p.BaseStream.Position += (long)(commandLength - commandHeaderLength);
                    IL_1E7 :;
                }
                catch (Exception e)
                {
                    System.Diagnostics.Debug.WriteLine(e.StackTrace);
                }
            }
        }
コード例 #3
0
ファイル: PhotonPacketHandler.cs プロジェクト: clbx/Vision
        public void PacketHandler(Packet packet)
        {
            try
            {
                // Make this static or at least dont create a new Protocol16 for every package
                Protocol16 protocol16 = new Protocol16();

                IpV4Datagram ip  = packet.Ethernet.IpV4;
                UdpDatagram  udp = ip.Udp;
                if (udp.SourcePort != 5056 && udp.DestinationPort != 5056)
                {
                    return;
                }


                var ms = udp.Payload.ToMemoryStream();
                var p  = new BinaryReader(ms);

                var peerId       = IPAddress.NetworkToHostOrder(p.ReadUInt16());
                var crcEnabled   = p.ReadByte();
                var commandCount = p.ReadByte();
                var timestamp    = IPAddress.NetworkToHostOrder(p.ReadInt32());
                var challenge    = IPAddress.NetworkToHostOrder(p.ReadInt32());

                var commandHeaderLength = 12;
                var signifierByteLength = 1;

                for (int commandIdx = 0; commandIdx < commandCount; commandIdx++)
                {
                    var commandType    = p.ReadByte();
                    var channelId      = p.ReadByte();
                    var commandFlags   = p.ReadByte();
                    var unkBytes       = p.ReadByte();
                    var commandLength  = IPAddress.NetworkToHostOrder(p.ReadInt32());
                    var sequenceNumber = IPAddress.NetworkToHostOrder(p.ReadInt32());

                    switch (commandType)
                    {
                    case 4:    //Disconnect
                        break;

                    case 7:    //Send unreliable
                        p.BaseStream.Position += 4;
                        commandLength         -= 4;
                        goto case 6;

                    case 6:    //Send reliable
                        p.BaseStream.Position += signifierByteLength;
                        var messageType = p.ReadByte();

                        var operationLength = commandLength - commandHeaderLength - 2;
                        var payload         = new StreamBuffer(p.ReadBytes(operationLength));
                        switch (messageType)
                        {
                        case 2:        //Operation Request
                            var requestData = protocol16.DeserializeOperationRequest(payload);
                            _eventHandler.OnRequest(requestData.OperationCode, requestData.Parameters);
                            break;

                        case 3:        //Operation Response
                            var responseData = protocol16.DeserializeOperationResponse(payload);
                            _eventHandler.OnResponse(responseData.OperationCode, responseData.ReturnCode, responseData.Parameters);
                            break;

                        case 4:        //Event
                            var eventData = protocol16.DeserializeEventData(payload);
                            _eventHandler.OnEvent(eventData.Code, eventData.Parameters);
                            break;

                        default:
                            p.BaseStream.Position += operationLength;
                            break;
                        }

                        break;

                    default:
                        p.BaseStream.Position += commandLength - commandHeaderLength;
                        break;
                    }
                }
            }
            catch (System.IO.EndOfStreamException)
            {
                Console.WriteLine("End of Stream Error");
            }
            catch (Exception e)
            {
                Console.WriteLine("PackeHandler Exception: " + e.ToString());
            }
        }
コード例 #4
0
        public void PacketHandler(Packet packet)
        {
            Protocol16  protocol = new Protocol16();
            UdpDatagram udp      = packet.Ethernet.IpV4.Udp;

            if (udp.SourcePort == 5056 || udp.DestinationPort == 5056)
            {
                BinaryReader binaryReader = new BinaryReader(udp.Payload.ToMemoryStream());
                IPAddress.NetworkToHostOrder(binaryReader.ReadUInt16());
                binaryReader.ReadByte();
                byte b = binaryReader.ReadByte();
                IPAddress.NetworkToHostOrder(binaryReader.ReadInt32());
                IPAddress.NetworkToHostOrder(binaryReader.ReadInt32());
                int num  = 12;
                int num2 = 1;
                for (int i = 0; i < b; i++)
                {
                    try
                    {
                        byte b2 = binaryReader.ReadByte();
                        binaryReader.ReadByte();
                        binaryReader.ReadByte();
                        binaryReader.ReadByte();
                        int num3 = IPAddress.NetworkToHostOrder(binaryReader.ReadInt32());
                        IPAddress.NetworkToHostOrder(binaryReader.ReadInt32());
                        switch (b2)
                        {
                        case 4:
                            break;

                        case 7:
                            binaryReader.BaseStream.Position += 4L;
                            num3 -= 4;
                            goto case 6;

                        case 6:
                        {
                            binaryReader.BaseStream.Position += num2;
                            byte         b3           = binaryReader.ReadByte();
                            int          num4         = num3 - num - 2;
                            StreamBuffer streamBuffer = new StreamBuffer(binaryReader.ReadBytes(num4));
                            switch (b3)
                            {
                            case 2:
                            {
                                OperationRequest operationRequest = protocol.DeserializeOperationRequest(streamBuffer);
                                _eventHandler.OnRequest(operationRequest.OperationCode, operationRequest.Parameters);
                                break;
                            }

                            case 3:
                            {
                                OperationResponse operationResponse = protocol.DeserializeOperationResponse(streamBuffer);
                                _eventHandler.OnResponse(operationResponse.OperationCode, operationResponse.ReturnCode, operationResponse.Parameters);
                                break;
                            }

                            case 4:
                            {
                                EventData eventData = protocol.DeserializeEventData(streamBuffer);
                                _eventHandler.OnEvent(eventData.Code, eventData.Parameters);
                                break;
                            }

                            default:
                                binaryReader.BaseStream.Position += num4;
                                break;
                            }
                            break;
                        }

                        default:
                            binaryReader.BaseStream.Position += num3 - num;
                            break;
                        }
                    }
                    catch (Exception)
                    {
                    }
                }
            }
        }
コード例 #5
0
 public PhotonConnection()
 {
     SerializationProtocol = new Protocol16();
 }
コード例 #6
0
        // Thanks to https://github.com/rafalfigura for the majority of this class
        public void ParsePacket(byte[] photonPacket)
        {
            Protocol16 protocol16 = new Protocol16();
            Stream     stream     = new MemoryStream(photonPacket);

            BinaryReader reader = new BinaryReader(stream);

            var peerId       = IPAddress.NetworkToHostOrder(reader.ReadUInt16());
            var crcEnabled   = reader.ReadByte();
            var commandCount = reader.ReadByte();
            var timestamp    = IPAddress.NetworkToHostOrder(reader.ReadInt32());
            var challenge    = IPAddress.NetworkToHostOrder(reader.ReadInt32());

            var commandHeaderLength = 12;
            var signifierByteLength = 1;

            for (int commandIdx = 0; commandIdx < commandCount; commandIdx++)
            {
                byte commandType    = reader.ReadByte();
                byte channelId      = reader.ReadByte();
                byte commandFlags   = reader.ReadByte();
                byte unkBytes       = reader.ReadByte();
                int  commandLength  = IPAddress.NetworkToHostOrder(reader.ReadInt32());
                int  sequenceNumber = IPAddress.NetworkToHostOrder(reader.ReadInt32());

                switch (commandType)
                {
                case 4:     //Disconnect
                    break;

                case 7:     //Send unreliable
                    reader.BaseStream.Position += 4;
                    commandLength -= 4;
                    goto case 6;

                case 6:     //Send reliable
                    reader.BaseStream.Position += signifierByteLength;
                    byte         messageType     = reader.ReadByte();
                    int          operationLength = commandLength - commandHeaderLength - 2;
                    StreamBuffer payload         = new StreamBuffer(reader.ReadBytes(operationLength));
                    switch (messageType)
                    {
                    case 2:         // OperationRequest
                        var requestData = protocol16.DeserializeOperationRequest(payload);
                        OperationRequestEventArgs requestArgs = new OperationRequestEventArgs();
                        requestArgs.OperationCode = requestData.OperationCode;
                        requestArgs.Parameters    = requestData.Parameters;
                        OnOperationRequest(requestArgs);
                        break;

                    case 3:         // OperationResponse
                        var responseData = protocol16.DeserializeOperationResponse(payload);
                        OperationResponseEventArgs responseArgs = new OperationResponseEventArgs();
                        responseArgs.OperationCode = responseData.OperationCode;
                        responseArgs.ReturnCode    = responseData.ReturnCode;
                        responseArgs.Parameters    = responseData.Parameters;
                        OnOperationResponse(responseArgs);
                        break;

                    case 4:         // EventData
                        var eventData = protocol16.DeserializeEventData(payload);
                        EventDataEventArgs dataArgs = new EventDataEventArgs();
                        dataArgs.Code       = eventData.Code;
                        dataArgs.Parameters = eventData.Parameters;
                        OnEventData(dataArgs);
                        break;

                    default:
                        reader.BaseStream.Position += operationLength;
                        break;
                    }
                    break;

                default:
                    reader.BaseStream.Position += commandLength - commandHeaderLength;
                    break;
                }
            }
        }
コード例 #7
0
        private void PacketHandle(object sender, CaptureEventArgs e)
        {
            Packet packet    = Packet.ParsePacket(e.Packet.LinkLayerType, e.Packet.Data);
            var    udpPacket = packet.Extract <UdpPacket>();

            if (udpPacket == null)
            {
                return;
            }

            Protocol16 protocol16 = new Protocol16();

            log.Debug($"sourcePort={udpPacket.SourcePort} destPort={udpPacket.DestinationPort}");
            BinaryReader binaryReader = new BinaryReader(new MemoryStream(udpPacket.PayloadData));

            try
            {
                IPAddress.NetworkToHostOrder((int)binaryReader.ReadUInt16());
                binaryReader.ReadByte();
                byte commandCount = binaryReader.ReadByte();
                IPAddress.NetworkToHostOrder(binaryReader.ReadInt32());
                IPAddress.NetworkToHostOrder(binaryReader.ReadInt32());
                int commandHeaderLength = 12;
                int signifierByteLength = 1;
                for (int commandIdx = 0; commandIdx < (int)commandCount; commandIdx++)
                {
                    try
                    {
                        byte commandType = binaryReader.ReadByte();
                        binaryReader.ReadByte();
                        binaryReader.ReadByte();
                        binaryReader.ReadByte();
                        int commandLength = IPAddress.NetworkToHostOrder(binaryReader.ReadInt32());
                        IPAddress.NetworkToHostOrder(binaryReader.ReadInt32());
                        switch (commandType)
                        {
                        case 4:
                            goto IL_1E7;

                        case 5:
                            goto IL_1CF;

                        case 6:
                            break;

                        case 7:
                            binaryReader.BaseStream.Position += 4L;
                            commandLength -= 4;
                            break;

                        default:
                            goto IL_1CF;
                        }
                        binaryReader.BaseStream.Position += (long)signifierByteLength;
                        byte         messageType     = binaryReader.ReadByte();
                        int          operationLength = commandLength - commandHeaderLength - 2;
                        StreamBuffer payload         = new StreamBuffer(binaryReader.ReadBytes(operationLength));
                        switch (messageType)
                        {
                        case 2:
                        {
                            log.Debug($"Request Packet Data: {System.Convert.ToBase64String(udpPacket.PayloadData)}");
                            OperationRequest requestData = protocol16.DeserializeOperationRequest(payload);
                            Instance.OnRequest(requestData.OperationCode, requestData.Parameters);
                            goto IL_1E7;
                        }

                        case 3:
                        {
                            OperationResponse responseData = protocol16.DeserializeOperationResponse(payload);
                            Instance.OnResponse(responseData.OperationCode, responseData.ReturnCode, responseData.Parameters);
                            goto IL_1E7;
                        }

                        case 4:
                        {
                            EventData eventData = protocol16.DeserializeEventData(payload);
                            Instance.OnEvent(eventData.Code, eventData.Parameters);
                            goto IL_1E7;
                        }

                        default:
                            binaryReader.BaseStream.Position += (long)operationLength;
                            goto IL_1E7;
                        }
IL_1CF:
                        binaryReader.BaseStream.Position += (long)(commandLength - commandHeaderLength);
                        IL_1E7 :;
                    }
                    catch (Exception ex)
                    {
                        log.Error(ex.StackTrace);
                    }
                }
            }
            catch (Exception ex)
            {
                log.Error(ex.StackTrace);
            }
        }
コード例 #8
0
        public void PacketHandler(Packet packet)
        {
            try
            {
                // Make this static or at least dont create a new Protocol16 for every package
                Protocol16 protocol16 = new Protocol16();

                IpV4Datagram ip  = packet.Ethernet.IpV4;
                UdpDatagram  udp = ip.Udp;

                // Not technically necesasry as the bpf limits to only udp 5055
                if (udp.SourcePort != 5056 && udp.DestinationPort != 5056 && udp.SourcePort != 5055 && udp.DestinationPort != 5055)
                {
                    return;
                }


                var ms = udp.Payload.ToMemoryStream();
                var p  = new BinaryReader(ms);

                var peerId       = IPAddress.NetworkToHostOrder(p.ReadUInt16());
                var crcEnabled   = p.ReadByte();
                var commandCount = p.ReadByte();
                var timestamp    = IPAddress.NetworkToHostOrder(p.ReadInt32());
                var challenge    = IPAddress.NetworkToHostOrder(p.ReadInt32());

                var commandHeaderLength = 12;
                var signifierByteLength = 1;

                for (int commandIdx = 0; commandIdx < commandCount; commandIdx++)
                {
                    var commandType    = p.ReadByte();
                    var channelId      = p.ReadByte();
                    var commandFlags   = p.ReadByte();
                    var unkBytes       = p.ReadByte();
                    var commandLength  = IPAddress.NetworkToHostOrder(p.ReadInt32());
                    var sequenceNumber = IPAddress.NetworkToHostOrder(p.ReadInt32());

                    void ParseOperation(byte messageType, StreamBuffer payload, int operationLength)
                    {
                        switch (messageType)
                        {
                        case 2:     //Operation Request
                            var requestData = protocol16.DeserializeOperationRequest(payload);
                            _eventHandler.OnRequest(requestData.OperationCode, requestData.Parameters);
                            break;

                        case 3:     //Operation Response
                            var responseData = protocol16.DeserializeOperationResponse(payload);
                            _eventHandler.OnResponse(responseData.OperationCode, responseData.ReturnCode, responseData.Parameters);
                            break;

                        case 4:     //Event
                            var eventData = protocol16.DeserializeEventData(payload);
                            _eventHandler.OnEvent(eventData.Code, eventData.Parameters);
                            break;

                        default:
                            p.BaseStream.Position += operationLength;
                            break;
                        }
                    }

                    switch (commandType)
                    {
                    case 4:    //Disconnect
                        break;

                    case 7:    //Send unreliable
                        p.BaseStream.Position += 4;
                        commandLength         -= 4;
                        goto case 6;

                    case 6:    //Send reliable
                    {
                        p.BaseStream.Position += signifierByteLength;
                        var messageType = p.ReadByte();

                        var operationLength = commandLength - commandHeaderLength - 2;
                        var payload         = new StreamBuffer(p.ReadBytes(operationLength));
                        ParseOperation(messageType, payload, operationLength);
                        break;
                    }

                    case 8:     // Reliable Fragment
                    {
                        // Each fragment contains a starting sequence number, its sequence number,
                        // and how many fragments total there are.
                        var startSequenceNumber = IPAddress.NetworkToHostOrder(p.ReadInt32());
                        var fragmentCount       = IPAddress.NetworkToHostOrder(p.ReadInt32());
                        var fragmentNumber      = IPAddress.NetworkToHostOrder(p.ReadInt32());
                        var totalLength         = IPAddress.NetworkToHostOrder(p.ReadInt32());
                        var fragmentOffset      = IPAddress.NetworkToHostOrder(p.ReadInt32());
                        var operationLength     = commandLength - 5 * 4 - commandHeaderLength;     // 5 4-byte
                        var payload             = p.ReadBytes(operationLength);

                        if (!fragmentMap.TryGetValue(startSequenceNumber, out var fragment))
                        {
                            fragment = new Fragment
                            {
                                buffer         = new byte[totalLength],
                                totalFragments = fragmentCount,
                                readFragments  = 0
                            };
                            fragmentMap.Add(startSequenceNumber, fragment);
                        }

                        fragment.readFragments++;
                        Array.Copy(payload, 0, fragment.buffer, fragmentOffset, payload.Length);

                        if (fragment.readFragments == fragment.totalFragments)
                        {
                            Console.WriteLine("Fragment Complete");
                            var stream = new StreamBuffer(fragment.buffer);
                            stream.Position += signifierByteLength;

                            Console.WriteLine("Fragment Stream Read");
                            var messageType = stream.ReadByte();
                            Console.WriteLine("Fragment MessageType: " + messageType);
                            ParseOperation(messageType, stream, operationLength);
                            Console.WriteLine("Fragment Successfully Handled");
                            fragmentMap.Remove(startSequenceNumber);
                        }
                        break;
                    }

                    default:
                        if (commandType != 1 && commandType != 5)
                        {
                            // Console.WriteLine("Received Unhandled Command Type: " + commandType);
                        }
                        p.BaseStream.Position += commandLength - commandHeaderLength;
                        break;
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("PacketHandler Exception: " + e.ToString());
            }
        }
コード例 #9
0
        private void PacketHandle(object sender, CaptureEventArgs e)
        {
            Packet packet    = Packet.ParsePacket(e.Packet.LinkLayerType, e.Packet.Data);
            var    udpPacket = packet.Extract <UdpPacket>();
            var    ipPacket  = packet.Extract <IPPacket>();

            if (udpPacket == null)
            {
                return;
            }

            //ILog plog = LogManager.GetLogger("Packet");
            //plog.Debug(string.Format("{0}:{1}->{2}:{3}", ipPacket.SourceAddress, udpPacket.SourcePort, ipPacket.DestinationAddress, udpPacket.DestinationPort));
            String       hexPayloadData = Convert.ToBase64String(udpPacket.PayloadData);
            Protocol16   protocol16     = new Protocol16();
            BinaryReader binaryReader   = new BinaryReader(new MemoryStream(udpPacket.PayloadData));

            try
            {
                IPAddress.NetworkToHostOrder((int)binaryReader.ReadUInt16());
                binaryReader.ReadByte();
                byte commandCount = binaryReader.ReadByte();
                IPAddress.NetworkToHostOrder(binaryReader.ReadInt32());
                IPAddress.NetworkToHostOrder(binaryReader.ReadInt32());
                int commandHeaderLength = 12;
                int signifierByteLength = 1;
                for (int commandIdx = 0; commandIdx < (int)commandCount; commandIdx++)
                {
                    try
                    {
                        byte commandType = binaryReader.ReadByte();
                        binaryReader.ReadByte();
                        binaryReader.ReadByte();
                        binaryReader.ReadByte();
                        int commandLength = IPAddress.NetworkToHostOrder(binaryReader.ReadInt32());
                        IPAddress.NetworkToHostOrder(binaryReader.ReadInt32());
                        switch (commandType)
                        {
                        case 4:
                            goto IL_1E7;

                        case 5:
                            goto IL_1CF;

                        case 6:
                            break;

                        case 7:
                            binaryReader.BaseStream.Position += 4L;
                            commandLength -= 4;
                            break;

                        default:
                            goto IL_1CF;
                        }
                        binaryReader.BaseStream.Position += (long)signifierByteLength;
                        byte         messageType     = binaryReader.ReadByte();
                        int          operationLength = commandLength - commandHeaderLength - 2;
                        StreamBuffer payload         = new StreamBuffer(binaryReader.ReadBytes(operationLength));
                        switch (messageType)
                        {
                        case 2:
                        {
                            //ILog rlog = LogManager.GetLogger("Request");
                            //rlog.Debug(hexPayloadData);
                            OperationRequest requestData = protocol16.DeserializeOperationRequest(payload);
                            Instance.OnRequest(requestData.OperationCode, requestData.Parameters);
                            break;
                        }

                        case 3:
                        {
                            //ILog relog = LogManager.GetLogger("Response");
                            //relog.Debug(hexPayloadData);
                            OperationResponse responseData = protocol16.DeserializeOperationResponse(payload);
                            Instance.OnResponse(responseData.OperationCode, responseData.ReturnCode, responseData.Parameters);
                            break;
                        }

                        case 4:
                        {
                            //ILog elog = LogManager.GetLogger("Event");
                            //elog.Debug(hexPayloadData);
                            EventData eventData = protocol16.DeserializeEventData(payload);
                            Instance.OnEvent(eventData.Code, eventData.Parameters);
                            break;
                        }

                        default:
                            //ILog olog = LogManager.GetLogger("Other");
                            //olog.Debug(hexPayloadData);
                            binaryReader.BaseStream.Position += (long)operationLength;
                            break;
                        }
                        payload.Close();
                        goto IL_1E7;
IL_1CF:
                        binaryReader.BaseStream.Position += (long)(commandLength - commandHeaderLength);
                        IL_1E7 :;
                    }
                    catch (Exception ex)
                    {
                        log.Error(ex.StackTrace);
                    }
                }
            }
            catch (Exception ex)
            {
                log.Error(ex.StackTrace);
            }
        }