Ejemplo n.º 1
0
        public override void WriteRequest(NetworkPacket packet)
        {
            packet.Write(startPos);


            //first stream segment
            if (startPos == 0)
            {
                packet.Write((uint)byteData.Length);
                packet.Write(command);
            }

            //all stream segments
            int headerSize = packet.byteLength + 4;

            segmentLen = (uint)byteData.Length - startPos;
            uint remaining = segmentLen;
            int  maxLen    = NetworkConfig.BufferMaxLength - headerSize;

            if (remaining > maxLen)
            {
                segmentLen = (uint)maxLen;
            }

            packet.Write(segmentLen);
            packet.Write(byteData, startPos, segmentLen);
            startPos += segmentLen;
        }
Ejemplo n.º 2
0
        // 0000 0000
        // bits 1-4 => Channel Type (up to 16 channels)
        // bits 5 => Send Type
        // bits 6 => Reliable Flag
        // bits 7 => Endian Flag
        // bits 8 => ProtocolType Flag
        public override void WriteHeader(NetworkPacket packet, NetworkMessage message)
        {
            if (message.header.isSTUN)
            {
                return;
            }

            uint msgBits = (uint)message.header.channelType;

            if (msgBits < 0 || msgBits >= (uint)ChannelType.LAST)
            {
                msgBits = 0;
            }

            //add sendType to bit 5
            if (message.header.sendType == SendType.Response)
            {
                msgBits |= SendTypeFlag;
            }

            //add reliable to bit 6
            if (message.header.isReliable)
            {
                msgBits |= ReliableFlag;
            }

            //add little endian to bit 8
            if (message.header.isStream)
            {
                msgBits |= StreamFlag;
            }

            msgBits |= ProtocolTypeFlag;

            packet.Write((byte)msgBits);
            packet.Write(message.header.sequence);

            OnWriteHeader.Invoke(packet, message);

            if (message.header.isReliable)
            {
                if (message.header.sendType == SendType.Message && message.header.retryCount == 0)
                {
                    message.header.ackkey = GenerateAckKey(packet, message);
                }
            }
        }
Ejemplo n.º 3
0
            public void Write(NetworkPacket packet)
            {
                if (username.Length > MAX_NAME_LENGTH)
                {
                    username = username.Substring(0, MAX_NAME_LENGTH);
                }

                packet.Write(username);
            }
Ejemplo n.º 4
0
        public override void WriteRequest(NetworkPacket packet)
        {
            //method id
            packet.Write((ushort)method);

            //method length
            packet.Write((ushort)0);

            //transaction id
            header.ackkey = BitConverter.ToUInt32(transactionID, 0);
            packet.Write(transactionID);

            //attributes
            for (int i = 0; i < attributeBytes.Count; i++)
            {
                LogAttribute(i);
                packet.Write(attributeBytes[i]);
            }

            //update message length
            int totalLength = packet.byteLength - 20;
            int lastPos     = packet.byteLength;

            if (integrity)
            {
                totalLength += 24;
            }
            packet.byteLength = 2;
            packet.Write((ushort)totalLength);
            packet.byteLength = lastPos;

            //method integrity goes here
            if (integrity)
            {
                //GenerateMessageIntegrity(packet);
                AddMessageIntegrity(packet);
            }

            Console.WriteLine("Message Length = " + totalLength);
            Console.WriteLine("Total Bytes: " + packet.byteLength);

            //cleanup
            attributeBytes.Clear();
        }
Ejemplo n.º 5
0
        public void AddMessageIntegrity(NetworkPacket packet)
        {
            string saslPassword = new SASLprep().Prepare(password);

            MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
            string valueToHashMD5        = string.Format("{0}:{1}:{2}", username, realm, saslPassword);

            byte[] hmacSha1Key = md5.ComputeHash(Encoding.UTF8.GetBytes(valueToHashMD5));

            HMACSHA1 hmacSha1 = new HMACSHA1(hmacSha1Key);

            byte[] hmacBytes = hmacSha1.ComputeHash(packet.ByteBuffer, 0, packet.byteLength);

            packet.Write((ushort)STUNAttribute.MessageIntegrity);
            packet.Write((ushort)hmacBytes.Length);
            packet.Write(hmacBytes);

            Console.WriteLine("Write Attribute: MessageIntegrity(2) MD5 = " + NetworkSerializer.ByteArrayToHexString(hmacSha1Key));
            Console.WriteLine("Write Attribute: MessageIntegrity(2) HMAC = " + NetworkSerializer.ByteArrayToHexString(hmacBytes));
        }
Ejemplo n.º 6
0
        public override void WriteRequest(NetworkPacket packet)
        {
            packet.Write((byte)method);

            switch (method)
            {
            case ServerMethod.CONNECT:
                request.connect.Write(packet);
                break;

            case ServerMethod.HEARTBEAT:

                break;
            }
        }
Ejemplo n.º 7
0
 public override void WriteResponse(NetworkPacket packet)
 {
     packet.Write(responseTimestamp);
 }
Ejemplo n.º 8
0
 public override void WriteRequest(NetworkPacket packet)
 {
     packet.Write(timestamp);
 }
Ejemplo n.º 9
0
 public override void WriteResponse(NetworkPacket packet)
 {
     packet.Write(startPos);
     packet.Write(segmentLen);
 }
Ejemplo n.º 10
0
        public void OnWriteHeader(object sender, NetworkMessage message)
        {
            NetworkPacket packet = (NetworkPacket)sender;

            packet.Write(message.header.id);
        }
Ejemplo n.º 11
0
 public void Write(NetworkPacket packet)
 {
     packet.Write((byte)1);
     packet.Write(sendRate);
     packet.Write(peerId);
 }