Exemple #1
0
        private ReceivedUdpData GetMockNonNotifyRequest()
        {
            var data = String.Format(@"POST * HTTP/1.1
HOST: 239.255.255.250:1900
Date: {0}
NT: uuid: 1234
NTS: ssdp:alive
SERVER: TestOS/1.0 UPnP/1.0 RSSDP/1.0
USN: uuid:1234::test-schema:device:TestDeviceType:1
LOCATION: http://192.168.1.100:1701/devicedescription.xml
CACHE-CONTROL: public, max-age=1800

",
                                     DateTime.UtcNow.ToString("r")
                                     );

            var retVal = new ReceivedUdpData()
            {
                Buffer       = System.Text.UTF8Encoding.UTF8.GetBytes(data),
                ReceivedFrom = new UdpEndPoint()
                {
                    IPAddress = SsdpConstants.MulticastLocalAdminAddress,
                    Port      = 1900
                }
            };

            retVal.ReceivedBytes = retVal.Buffer.Length;

            return(retVal);
        }
Exemple #2
0
        public Task<ReceivedUdpData> ReceiveAsync()
        {
            ThrowIfDisposed();

            var taskCompletionSource = new System.Threading.Tasks.TaskCompletionSource<ReceivedUdpData>();

            byte[] buffer = new byte[SsdpConstants.DefaultUdpSocketBufferSize];
            _UdpClient.BeginReceiveFromGroup(buffer, 0, buffer.Length,
                (asyncResult) =>
                {
                    IPEndPoint receivedFromEndPoint;

                    _UdpClient.EndReceiveFromGroup(asyncResult, out receivedFromEndPoint);

                    var tcs = asyncResult.AsyncState as System.Threading.Tasks.TaskCompletionSource<ReceivedUdpData>;

                    var result = new ReceivedUdpData()
                    {
                        ReceivedFrom = new UdpEndPoint()
                        {
                            IPAddress = receivedFromEndPoint.Address.ToString(),
                            Port = receivedFromEndPoint.Port
                        },
                        Buffer = buffer,
                        ReceivedBytes = buffer.Length
                    };

                    tcs.SetResult(result);
                },
                taskCompletionSource
            );

            return taskCompletionSource.Task;
        }
Exemple #3
0
        private ReceivedUdpData GetMockByeByeNotification(SsdpDevice device)
        {
            var data = String.Format(@"NOTIFY * HTTP/1.1
HOST: 239.255.255.250:1900
DATE: {0}
NT: {1}
NTS: ssdp:byebye
SERVER: TestOS/1.0 UPnP/1.0 RSSDP/1.0
USN: {2}

",
                                     DateTime.UtcNow.ToString("r"),
                                     device.Udn,
                                     String.Format("{0}::{1}", device.Udn, device.FullDeviceType)
                                     );

            var retVal = new ReceivedUdpData()
            {
                Buffer       = System.Text.UTF8Encoding.UTF8.GetBytes(data),
                ReceivedFrom = new UdpEndPoint()
                {
                    IPAddress = SsdpConstants.MulticastLocalAdminAddress,
                    Port      = 1900
                }
            };

            retVal.ReceivedBytes = retVal.Buffer.Length;

            return(retVal);
        }
Exemple #4
0
        private ReceivedUdpData GetMockSearchResponseWithCustomCacheHeader(SsdpDevice device, string stHeader, string cacheHeader)
        {
            var responseText = String.Format(@"HTTP/1.1 200 OK
EXT:
DATE: {4}{0}
ST:{1}
SERVER: TestOS/1.0 UPnP/1.0 RSSDP/1.0
USN:{2}
LOCATION:{3}

", //Blank line at end important, do not remove.
                                             String.IsNullOrEmpty(cacheHeader) ? String.Empty : Environment.NewLine + cacheHeader,
                                             stHeader,
                                             String.Format("{0}:{1}", device.Udn, device.FullDeviceType),
                                             device.ToRootDevice().Location,
                                             DateTime.UtcNow.ToString("r")
                                             );

            var retVal = new ReceivedUdpData()
            {
                Buffer       = System.Text.ASCIIEncoding.UTF8.GetBytes(responseText),
                ReceivedFrom = new UdpEndPoint()
                {
                    IPAddress = SsdpConstants.MulticastLocalAdminAddress, Port = SsdpConstants.MulticastPort
                }
            };

            retVal.ReceivedBytes = retVal.Buffer.Length;

            return(retVal);
        }
Exemple #5
0
        private void socketEventArg_ReceiveCompleted(object sender, SocketAsyncEventArgs e)
        {
            try
            {
                var ttcs = e.UserToken as TaskCompletionSource <ReceivedUdpData>;

                if (e.SocketError == SocketError.Success)
                {
                    var result = new ReceivedUdpData();
                    result.Buffer        = new byte[e.BytesTransferred];
                    result.ReceivedBytes = e.BytesTransferred;

                    var endPoint = e.RemoteEndPoint as IPEndPoint;
                    result.ReceivedFrom = new UdpEndPoint()
                    {
                        IPAddress = endPoint.Address.ToString(),
                        Port      = endPoint.Port
                    };

                    Array.Copy(e.Buffer, e.Offset, result.Buffer, 0, e.BytesTransferred);

                    ttcs.SetResult(result);
                }
                else
                {
                    ttcs.SetException(new System.Net.Sockets.SocketException((int)e.SocketError));
                }
            }
            finally
            {
                e.Dispose();
            }
        }
Exemple #6
0
        public Task <ReceivedUdpData> ReceiveAsync()
        {
            ThrowIfDisposed();

            var taskCompletionSource = new System.Threading.Tasks.TaskCompletionSource <ReceivedUdpData>();

            byte[] buffer = new byte[SsdpConstants.DefaultUdpSocketBufferSize];
            _UdpClient.BeginReceiveFromGroup(buffer, 0, buffer.Length,
                                             (asyncResult) =>
            {
                IPEndPoint receivedFromEndPoint;

                _UdpClient.EndReceiveFromGroup(asyncResult, out receivedFromEndPoint);

                var tcs = asyncResult.AsyncState as System.Threading.Tasks.TaskCompletionSource <ReceivedUdpData>;

                var result = new ReceivedUdpData()
                {
                    ReceivedFrom = new UdpEndPoint()
                    {
                        IPAddress = receivedFromEndPoint.Address.ToString(),
                        Port      = receivedFromEndPoint.Port
                    },
                    Buffer        = buffer,
                    ReceivedBytes = buffer.Length
                };

                tcs.SetResult(result);
            },
                                             taskCompletionSource
                                             );

            return(taskCompletionSource.Task);
        }
Exemple #7
0
        public void MockReceiveBroadcast(ReceivedUdpData broadcastMessage)
        {
            if (!_ReceivedBroadcastsQueue.Any())
                _BroadcastAvailableSignal.Reset();

            _ReceivedBroadcastsQueue.Enqueue(broadcastMessage);
            _BroadcastAvailableSignal.Set();
        }
Exemple #8
0
        public Task <ReceivedUdpData> ReceiveAsync()
        {
            ThrowIfDisposed();

            var taskCompletionSource = new System.Threading.Tasks.TaskCompletionSource <ReceivedUdpData>();

            byte[] buffer = new byte[SsdpConstants.DefaultUdpSocketBufferSize];
            try
            {
                _UdpClient.BeginReceiveFromGroup(buffer, 0, buffer.Length,
                                                 (asyncResult) =>
                {
                    IPEndPoint receivedFromEndPoint;

                    try
                    {
                        _UdpClient.EndReceiveFromGroup(asyncResult, out receivedFromEndPoint);

                        var tcs = asyncResult.AsyncState as System.Threading.Tasks.TaskCompletionSource <ReceivedUdpData>;

                        var result = new ReceivedUdpData()
                        {
                            ReceivedFrom = new UdpEndPoint()
                            {
                                IPAddress = receivedFromEndPoint.Address.ToString(),
                                Port      = receivedFromEndPoint.Port
                            },
                            Buffer        = buffer,
                            ReceivedBytes = buffer.Length
                        };

                        tcs.SetResult(result);
                    }
                    catch (SocketException se)
                    {
                        if (se.SocketErrorCode == SocketError.Shutdown || se.SocketErrorCode == SocketError.OperationAborted || se.SocketErrorCode == SocketError.NotConnected)
                        {
                            throw new SocketClosedException(se.Message, se);
                        }

                        throw;
                    }
                },
                                                 taskCompletionSource
                                                 );
            }
            catch (SocketException se)
            {
                if (se.SocketErrorCode == SocketError.Shutdown || se.SocketErrorCode == SocketError.OperationAborted || se.SocketErrorCode == SocketError.NotConnected)
                {
                    throw new SocketClosedException(se.Message, se);
                }

                throw;
            }

            return(taskCompletionSource.Task);
        }
Exemple #9
0
        public void MockReceiveBroadcast(ReceivedUdpData broadcastMessage)
        {
            if (!_ReceivedBroadcastsQueue.Any())
            {
                _BroadcastAvailableSignal.Reset();
            }

            _ReceivedBroadcastsQueue.Enqueue(broadcastMessage);
            _BroadcastAvailableSignal.Set();
        }
Exemple #10
0
        public void MockReceiveMessage(ReceivedUdpData message)
        {
            if (!_ReceivedMessageQueue.Any())
            {
                _MessageAvailableSignal.Reset();
            }

            _ReceivedMessageQueue.Enqueue(message);
            _MessageAvailableSignal.Set();
        }
Exemple #11
0
        public Task <ReceivedUdpData> ReceiveAsync()
        {
            return(Task.Run <ReceivedUdpData>(() =>
            {
                ReceivedUdpData data = null;

                while (!_ReceivedData.TryDequeue(out data))
                {
                    _DataAvailableSignal.WaitOne();
                }
                _DataAvailableSignal.Reset();

                return data;
            }));
        }
Exemple #12
0
        private void _Socket_MessageReceived(Windows.Networking.Sockets.DatagramSocket sender, Windows.Networking.Sockets.DatagramSocketMessageReceivedEventArgs args)
        {
            using (var reader = args.GetDataReader())
            {
                var data = new ReceivedUdpData()
                {
                    ReceivedBytes = Convert.ToInt32(reader.UnconsumedBufferLength),
                    ReceivedFrom  = new UdpEndPoint()
                    {
                        IPAddress = args.RemoteAddress.RawName,
                        Port      = Convert.ToInt32(args.RemotePort)
                    }
                };

                data.Buffer = new byte[data.ReceivedBytes];
                reader.ReadBytes(data.Buffer);

                _ReceivedData.Enqueue(data);
                _DataAvailableSignal.Set();
            }
        }
Exemple #13
0
        private ReceivedUdpData GetMockAliveNotification(SsdpDevice device)
        {
            var rootDevice = device.ToRootDevice();

            var data = String.Format(@"NOTIFY * HTTP/1.1
HOST: 239.255.255.250:1900
Date: {0}
NT: {1}
NTS: ssdp:alive
SERVER: TestOS/1.0 UPnP/1.0 RSSDP/1.0
USN: {2}
LOCATION: {3} 
CACHE-CONTROL: public, max-age={4}

",
                                     DateTime.UtcNow.ToString("r"),
                                     device.Udn,
                                     String.Format("{0}::{1}", device.Udn, device.FullDeviceType),
                                     rootDevice.Location,
                                     rootDevice.CacheLifetime.TotalSeconds
                                     );

            var retVal = new ReceivedUdpData()
            {
                Buffer       = System.Text.UTF8Encoding.UTF8.GetBytes(data),
                ReceivedFrom = new UdpEndPoint()
                {
                    IPAddress = SsdpConstants.MulticastLocalAdminAddress,
                    Port      = 1900
                }
            };

            retVal.ReceivedBytes = retVal.Buffer.Length;

            return(retVal);
        }
Exemple #14
0
        private ReceivedUdpData GetMockSearchResponseWithCustomCacheHeader(SsdpDevice device, string stHeader, string cacheHeader)
        {
            var responseText = String.Format(@"HTTP/1.1 200 OK
            EXT:
            DATE: {4}{0}
            ST:{1}
            SERVER: TestOS/1.0 UPnP/1.0 RSSDP/1.0
            USN:{2}
            LOCATION:{3}

            ", //Blank line at end important, do not remove.
             String.IsNullOrEmpty(cacheHeader) ? String.Empty : Environment.NewLine + cacheHeader,
             stHeader,
             String.Format("{0}:{1}", device.Udn, device.FullDeviceType),
             device.ToRootDevice().Location,
             DateTime.UtcNow.ToString("r")
             );

            var retVal = new ReceivedUdpData()
            {
                Buffer = System.Text.ASCIIEncoding.UTF8.GetBytes(responseText),
                ReceivedFrom = new UdpEndPoint() { IPAddress = SsdpConstants.MulticastLocalAdminAddress, Port = SsdpConstants.MulticastPort }
            };
            retVal.ReceivedBytes = retVal.Buffer.Length;

            return retVal;
        }
Exemple #15
0
        private ReceivedUdpData GetMockNonNotifyRequest()
        {
            var data = String.Format(@"POST * HTTP/1.1
            HOST: 239.255.255.250:1900
            Date: {0}
            NT: uuid: 1234
            NTS: ssdp:alive
            SERVER: TestOS/1.0 UPnP/1.0 RSSDP/1.0
            USN: uuid:1234::test-schema:device:TestDeviceType:1
            LOCATION: http://192.168.1.100:1701/devicedescription.xml
            CACHE-CONTROL: public, max-age=1800

            ",
             DateTime.UtcNow.ToString("r")
             );

            var retVal = new ReceivedUdpData()
            {
                Buffer = System.Text.UTF8Encoding.UTF8.GetBytes(data),
                ReceivedFrom = new UdpEndPoint()
                {
                    IPAddress = SsdpConstants.MulticastLocalAdminAddress,
                    Port = 1900
                }
            };
            retVal.ReceivedBytes = retVal.Buffer.Length;

            return retVal;
        }
Exemple #16
0
        private ReceivedUdpData GetMockByeByeNotification(SsdpDevice device)
        {
            var data = String.Format(@"NOTIFY * HTTP/1.1
            HOST: 239.255.255.250:1900
            DATE: {0}
            NT: {1}
            NTS: ssdp:byebye
            SERVER: TestOS/1.0 UPnP/1.0 RSSDP/1.0
            USN: {2}

            ",
            DateTime.UtcNow.ToString("r"),
            device.Udn,
            String.Format("{0}::{1}", device.Udn, device.FullDeviceType)
             );

            var retVal = new ReceivedUdpData()
            {
                Buffer = System.Text.UTF8Encoding.UTF8.GetBytes(data),
                ReceivedFrom = new UdpEndPoint()
                {
                    IPAddress = SsdpConstants.MulticastLocalAdminAddress,
                    Port = 1900
                }
            };
            retVal.ReceivedBytes = retVal.Buffer.Length;

            return retVal;
        }
Exemple #17
0
        private ReceivedUdpData GetMockAliveNotification(SsdpDevice device)
        {
            var rootDevice = device.ToRootDevice();

            var data = String.Format(@"NOTIFY * HTTP/1.1
            HOST: 239.255.255.250:1900
            Date: {0}
            NT: {1}
            NTS: ssdp:alive
            SERVER: TestOS/1.0 UPnP/1.0 RSSDP/1.0
            USN: {2}
            LOCATION: {3}
            CACHE-CONTROL: public, max-age={4}

            ",
            DateTime.UtcNow.ToString("r"),
            device.Udn,
            String.Format("{0}::{1}", device.Udn, device.FullDeviceType),
            rootDevice.Location,
            rootDevice.CacheLifetime.TotalSeconds
             );

            var retVal = new ReceivedUdpData()
            {
                Buffer = System.Text.UTF8Encoding.UTF8.GetBytes(data),
                ReceivedFrom = new UdpEndPoint()
                {
                    IPAddress = SsdpConstants.MulticastLocalAdminAddress,
                    Port = 1900
                }
            };
            retVal.ReceivedBytes = retVal.Buffer.Length;

            return retVal;
        }
Exemple #18
0
        public void MockReceiveMessage(ReceivedUdpData message)
        {
            if (!_ReceivedMessageQueue.Any())
                _MessageAvailableSignal.Reset();

            _ReceivedMessageQueue.Enqueue(message);
            _MessageAvailableSignal.Set();
        }
Exemple #19
0
        private void _Socket_MessageReceived(Windows.Networking.Sockets.DatagramSocket sender, Windows.Networking.Sockets.DatagramSocketMessageReceivedEventArgs args)
        {
            using (var reader = args.GetDataReader())
            {
                var data = new ReceivedUdpData()
                {
                    ReceivedBytes = Convert.ToInt32(reader.UnconsumedBufferLength),
                    ReceivedFrom = new UdpEndPoint()
                    {
                        IPAddress = args.RemoteAddress.RawName,
                        Port = Convert.ToInt32(args.RemotePort)
                    }
                };

                data.Buffer = new byte[data.ReceivedBytes];
                reader.ReadBytes(data.Buffer);

                _ReceivedData.Enqueue(data);
                _DataAvailableSignal.Set();
            }
        }
Exemple #20
0
        private void socketEventArg_ReceiveCompleted(object sender, SocketAsyncEventArgs e)
        {
            try
            {
                var ttcs = e.UserToken as TaskCompletionSource<ReceivedUdpData>;

                if (e.SocketError == SocketError.Success)
                {
                    var result = new ReceivedUdpData();
                    result.Buffer = new byte[e.BytesTransferred];
                    result.ReceivedBytes = e.BytesTransferred;

                    var endPoint = e.RemoteEndPoint as IPEndPoint;
                    result.ReceivedFrom = new UdpEndPoint()
                    {
                        IPAddress = endPoint.Address.ToString(),
                        Port = endPoint.Port
                    };

                    Array.Copy(e.Buffer, e.Offset, result.Buffer, 0, e.BytesTransferred);

                    ttcs.SetResult(result);
                }
                else
                    ttcs.SetException(new System.Net.Sockets.SocketException((int)e.SocketError));
            }
            finally
            {
                e.Dispose();
            }
        }
Exemple #21
0
        private ReceivedUdpData GetSearchRequestMessageWithoutMXHeader(string searchTarget)
        {
            var retVal = new ReceivedUdpData();

            retVal.Buffer = System.Text.UTF8Encoding.UTF8.GetBytes(String.Format(@"M-SEARCH * HTTP/1.1
            HOST: {0}:{1}
            MAN: ""ssdp:discover""
            ST: {2}

            ",
             SsdpConstants.MulticastLocalAdminAddress,
             SsdpConstants.MulticastPort,
             searchTarget));

            retVal.ReceivedFrom = new UdpEndPoint()
            {
                IPAddress = "192.168.1.100",
                Port = 1701
            };
            retVal.ReceivedBytes = retVal.Buffer.Length;

            return retVal;
        }