Example #1
0
        public void WriteToBuffer(ref ByteBuffer buffer)
        {
            ByteBuffer attrStart = buffer;                         // Make a copy that will retain the current position

            STUNTypeLengthValue.WriteTypeLength(0, 0, ref buffer); // write temporal values

            int length = 0;

            if (null != usernameInBuffer.data)
            {
                length = usernameInBuffer.Length;
                buffer.Put(usernameInBuffer);
            }
            else if (null != usernameInString)
            {
                length = Encoding.UTF8.GetBytes(usernameInString, 0, usernameInString.Length, buffer.data, buffer.absPosition);
            }
            if (length <= 512)
            {
                buffer.absPosition += length;
            }

            STUNTypeLengthValue.WriteTypeLength(TYPE, (ushort)length, ref attrStart);              // Write definitive values

            STUNTypeLengthValue.AddPadding(ref buffer);
        }
Example #2
0
        public void WriteToBuffer(ref ByteBuffer buffer)
        {
            ushort length = (ushort)(4 + (family == AddressFamily.IPv4 ? AddressLength.IPv4 : AddressLength.IPv6));

            STUNTypeLengthValue.WriteTypeLength(TYPE, length, ref buffer);

            ByteBuffer attr = new ByteBuffer(buffer.data, buffer.absPosition);

            // 4 bytes
            buffer.Put((byte)0);
            buffer.Put((byte)family);
            buffer.Put((ushort)port);

            if (AddressFamily.IPv4 == family)
            {
                ipv4.Write(ref buffer);
            }
            else
            {
                ipv6.Write(ref buffer);
            }

            // XOR
            attr[2] = (byte)(attr[2] ^ buffer[4]);
            attr[3] = (byte)(attr[3] ^ buffer[5]);
            for (int i = 4; i < length; i++)
            {
                attr[i] = (byte)(attr[i] ^ buffer[i]);
            }

            STUNTypeLengthValue.AddPadding(ref buffer);
        }
Example #3
0
 public void WriteToBuffer(ref ByteBuffer buffer)
 {
     STUNTypeLengthValue.WriteTypeLength(type, (ushort)data.Length, ref buffer);
     if (data.HasData())
     {
         buffer.Put(data);
     }
     buffer.Pad4();
 }
Example #4
0
        public STUNAttr(ref ByteBuffer buffer)
        {
            ushort attrLength;

            isValid          = STUNTypeLengthValue.ReadTypeLength(ref buffer, out type, out attrLength);
            data             = new ByteBuffer(buffer.data, buffer.absPosition, attrLength);
            stunMessage      = new ByteBuffer(buffer.data, buffer.absOffset, buffer.Length);
            buffer.Position += attrLength;
            buffer.Pad4();
        }
Example #5
0
        public void WriteToBuffer(ref ByteBuffer buffer)
        {
            int count = buffer.Position;

            STUNTypeLengthValue.WriteTypeLength(TYPE, 4, ref buffer);
            STUNMessageBuilder.UpdateHeaderAttributesLength(ref buffer, buffer.Position + 4);
            crc = Crc32.CRC32.Calculate(buffer.data, buffer.absOffset, count) ^ FINGERPRINT_XOR;
            buffer.Put(crc);
            STUNTypeLengthValue.AddPadding(ref buffer);
        }
Example #6
0
        public void WriteToBuffer(ref ByteBuffer buffer)
        {
            int count = buffer.Position;

            STUNTypeLengthValue.WriteTypeLength(TYPE, HMAC_LENGTH, ref buffer);
            STUNMessageBuilder.UpdateHeaderAttributesLength(ref buffer, buffer.Position + HMAC_LENGTH);
            hmacsha1Instance.ComputeHash(buffer.data, buffer.absOffset, count, buffer.data, buffer.absPosition);
            buffer.Position += HMAC_LENGTH;
            STUNTypeLengthValue.AddPadding(ref buffer);
        }
Example #7
0
        public void WriteToBuffer(ref ByteBuffer buffer)
        {
            int count = buffer.Position;

            STUNTypeLengthValue.WriteTypeLength(TYPE, HMAC_LENGTH, ref buffer);
            STUNMessageBuilder.UpdateHeaderAttributesLength(ref buffer, buffer.Position + HMAC_LENGTH);
            HMAC_SHA1.ComputeHmacSha1(key, new ByteBuffer(buffer.data, buffer.absOffset, count), buffer.data, buffer.absPosition);
            buffer.Position += HMAC_LENGTH;
            buffer.Pad4();
        }
Example #8
0
        public void WriteToBuffer(ref ByteBuffer buffer)
        {
            ByteBuffer attrStart = buffer;                         // Make a copy that will retain the current position

            STUNTypeLengthValue.WriteTypeLength(0, 0, ref buffer); // write temporal values

            int length = Encoding.UTF8.GetBytes(software, 0, Math.Min(128, software.Length), buffer.data, buffer.absPosition);

            buffer.absPosition += length;

            STUNTypeLengthValue.WriteTypeLength(TYPE, (ushort)length, ref attrStart);              // Write definitive values

            STUNTypeLengthValue.AddPadding(ref buffer);
        }
Example #9
0
        public void WriteToBuffer(ref ByteBuffer buffer)
        {
            ushort length = (ushort)(4 + (family == AddressFamily.IPv4 ? AddressLength.IPv4 : AddressLength.IPv6));

            STUNTypeLengthValue.WriteTypeLength(TYPE, length, ref buffer);

            // 4 bytes
            buffer.Put((byte)0);
            buffer.Put((byte)family);
            buffer.Put((ushort)port);

            ip.Write(ref buffer);

            buffer.Pad4();
        }
Example #10
0
        public void WriteToBuffer(ref ByteBuffer buffer)
        {
            ushort length = (ushort)(4 + (family == AddressFamily.IPv4 ? AddressLength.IPv4 : AddressLength.IPv6));

            STUNTypeLengthValue.WriteTypeLength(TYPE, length, ref buffer);

            // 4 bytes
            buffer.Put((byte)0);
            buffer.Put((byte)family);
            buffer.Put((ushort)port);

            if (AddressFamily.IPv4 == family)
            {
                ipv4.Write(ref buffer);
            }
            else
            {
                ipv6.Write(ref buffer);
            }

            STUNTypeLengthValue.AddPadding(ref buffer);
        }
Example #11
0
        public void WriteToBuffer(ref ByteBuffer buffer)
        {
            ByteBuffer attrStart = buffer;                         // Make a copy that will retain the current position

            STUNTypeLengthValue.WriteTypeLength(0, 0, ref buffer); // write temporal values

            int errorClass  = code / 100;
            int errorNumber = code % 100;

            // 4 bytes
            buffer.Put((byte)0);
            buffer.Put((byte)0);
            buffer.Put((byte)(errorClass & 0x7));
            buffer.Put((byte)errorNumber);

            int length = Encoding.UTF8.GetBytes(reason, 0, Math.Min(reason.Length, 128), buffer.data, buffer.absPosition);

            buffer.Position += length;

            STUNTypeLengthValue.WriteTypeLength(TYPE, (ushort)(4 + length), ref attrStart);              // Write definitive values

            buffer.Pad4();
        }
Example #12
0
 public void WriteToBuffer(ref ByteBuffer buffer)
 {
     STUNTypeLengthValue.WriteTypeLength(TYPE, 4, ref buffer);
     buffer.Put(priority);
     buffer.Pad4();
 }
Example #13
0
 public void WriteToBuffer(ref ByteBuffer buffer)
 {
     STUNTypeLengthValue.WriteTypeLength(TYPE, 0, ref buffer);
     STUNTypeLengthValue.AddPadding(ref buffer);
 }
Example #14
0
 public void WriteToBuffer(ref ByteBuffer buffer)
 {
     STUNTypeLengthValue.WriteTypeLength(TYPE, 8, ref buffer);
     buffer.Put(tieBreaker);
     buffer.Pad4();
 }