GetBytes() public method

public GetBytes ( ) : byte[]
return byte[]
Exemplo n.º 1
0
        public static IPAddress GetExternalAddress()
        {
            IPHostEntry entry = Dns.GetHostEntry (stunServer);
            IPEndPoint endPoint = new IPEndPoint (entry.AddressList [0], 3478);
            UdpClient client = new UdpClient ();
            client.Connect (endPoint);

            MessageHeader header = new MessageHeader ();
            header.MessageType = MessageType.BindingRequest;

            byte[] bytes = header.GetBytes ();
            client.Send (bytes, bytes.Length);

            bytes = client.Receive (ref endPoint);

            header = new MessageHeader (bytes);
            if (header.MessageType == MessageType.BindingResponse) {
                foreach (MessageAttribute attribute in header.MessageAttributes) {
                    if (attribute is MappedAddressAttribute) {
                        return (attribute as AddressAttributeBase).Address;
                    }
                }
                throw new Exception ("Resposne was missing Mapped-address!");
            } else {
                throw new Exception ("Wrong response message!");
            }
        }
Exemplo n.º 2
0
        public static async Task <IPAddress> GetExternalAddressAsync(string server = "stun.ekiga.net")
        {
            var entry = await Dns.GetHostEntryAsync(server);

            var       endPoint = new IPEndPoint(entry.AddressList[0], 3478);
            IPAddress result   = null;

            using (var client = new UdpClient())
            {
                client.Connect(endPoint);

                // send
                var header = new MessageHeader()
                {
                    MessageType = MessageType.BindingRequest
                };
                var bytes = header.GetBytes();
                await client.SendAsync(bytes, bytes.Length);

                // receive
                header = new MessageHeader((await client.ReceiveAsync()).Buffer);
                if (header.MessageType != MessageType.BindingResponse)
                {
                    throw new Exception("Wrong response message!");
                }

                // check message
                var attr = header.MessageAttributes.OfType <MappedAddressAttribute>().SingleOrDefault();
                if (attr == null)
                {
                    throw new Exception("Response was missing Mapped-address!");
                }

                result = attr.Address;
            }

            return(result);
        }