/// <summary> /// Initializes a new instance of the <see cref="SsdpServerPublisher"/> class. /// </summary> /// <param name="configuration">The <see cref="IConfigurationManager"/> instance.</param> /// <param name="logger">The <see cref="ILogger"/> instance.</param> /// <param name="loggerFactory">The <see cref="ILoggerFacory"/> instance.</param> /// <param name="networkManager">The <see cref="INetworkManager"/> instance.</param> /// <param name="interfaces">The interfaces IP's to advertise on.</param> /// <param name="messageInterval">The discovery message interval.</param> /// <param name="enableWindowsSupport">True to enable windows support.</param> public SsdpServerPublisher( IConfigurationManager configuration, ILogger logger, ILoggerFactory loggerFactory, INetworkManager networkManager, IPNetAddress[] interfaces, int messageInterval, bool enableWindowsSupport) { _aliveMessageInterval = messageInterval; _devices = new List <SsdpRootDevice>(); _logger = logger; _networkManager = networkManager; _random = new Random(); _readOnlyDevices = new ReadOnlyCollection <SsdpRootDevice>(_devices); _recentSearchRequests = new Dictionary <string, SearchRequest>(StringComparer.OrdinalIgnoreCase); Server = SsdpServer.GetOrCreateInstance( configuration, loggerFactory, interfaces, networkManager); DlnaServerPlugin.Instance !.ConfigurationChanging += UpdateConfiguration; _networkManager.NetworkChanged += NetworkChanged; EnableWindowsExplorerSupport = enableWindowsSupport; _logger.LogDebug("DLNA Server : Starting DLNA advertisements using DLNA version {Version}", Server.DlnaVersion.ToString()); }
static void Main(string[] args) { SsdpServer ssdp = new SsdpServer(); ssdp.Start(); //foreach (string deviceUrl in ssdp.Discover()) // Console.WriteLine(deviceUrl); string udn = "uuid:" + Guid.NewGuid(); ssdp.RegisterDevice(new SsdpDevice { Type = DeviceType.InternetGatewayDevice, Name = "MyControl" + DateTime.Now.Second, UDN = udn }); Thread.Sleep(5000); Console.WriteLine("Searching for all devices..."); foreach (string deviceUrl in ssdp.Discover()) { Console.WriteLine(deviceUrl); } Console.WriteLine("Waiting for requests (M-SEARCH)..."); Thread.Sleep(20 * 1000); ssdp.UnregisterDevice(udn); Console.WriteLine("Unregister done."); Console.ReadLine(); }
public void RootDeviceAsyncSearchTest() { using (var client = new SsdpClient()) using (var server = new SsdpServer()) { server.CreateAnnouncer("upnp:rootdevice", "uuid:979F4CE8-64AF-4653-B207-D7514908356F::upnp:rootdevice"); server.StartListening(); client.StartListening(); var search = client.CreateSearch(false); search.SearchType = "upnp:rootdevice"; search.ResultFound += RootResultFound; lock (mutex) { search.SearchAsync(); if (!Monitor.Wait(mutex, TimeSpan.FromSeconds(30))) { Assert.Fail("The announcement timed out."); } } } }
public void FilteredAnnouncementTest2() { using (var client = new SsdpClient()) using (var server = new SsdpServer()) { client.Filter = message => message.Type == "urn:schemas-upnp-org:service:test:1"; client.StartListening(); client.ServiceFound += (sender, args) => { lock (mutex) { if (args.Value.Type != "urn:schemas-upnp-org:service:test:1") { Monitor.Pulse(mutex); } } }; lock (mutex) { server.CreateAnnouncer("upnp:test:fail", "uuid:upnp-tests:test1"); server.CreateAnnouncer("upnp", "uuid:upnp-tests:test2"); server.CreateAnnouncer("urn:schemas-upnp-org:service:test:1", "uuid:979F4CE8-64AF-4653-B207-D7514908356F::urn:schemas-upnp-org:service:test:1"); server.StartListening(); if (Monitor.Wait(mutex, TimeSpan.FromSeconds(10))) { Assert.Fail("The client recieved invalid announcements."); } } } }
public void AsyncSearchTest() { using (var client = new SsdpClient()) using (var server = new SsdpServer()) { server.CreateAnnouncer("urn:schemas-upnp-org:service:test:1", "uuid:979F4CE8-64AF-4653-B207-D7514908356F::urn:schemas-upnp-org:service:test:1"); server.StartListening(); client.StartListening(); var search = client.CreateSearch(false); search.SearchType = "urn:schemas-upnp-org:service:test:1"; search.ResultFound += (sender, e) => { lock (mutex) { if (IsTestAnnouncement(e.Value)) { Monitor.Pulse(mutex); } } }; lock (mutex) { search.SearchAsync(); if (!Monitor.Wait(mutex, TimeSpan.FromSeconds(30))) { Assert.Fail("The announcement timed out."); } } } }
public UpnpServer(UpnpRoot root, SsdpServer ssdp = null, GenaServer gena = null) { this.Root = root; this.Root.ChildDeviceAdded += OnChildDeviceAdded; this.SsdpServer = ssdp ?? new SsdpServer(); this.GenaServer = gena ?? new GenaServer(); BuildAdvertisements(); }
public Task InitializeAsync(string serverAddress, string deviceAddress, IDataLibrary dataLibrary, IHttpServer httpServer) { return(Task.Factory.StartNew(() => { this.httpServer = httpServer as HttpServer; IPAddress pAddress = IPAddress.Parse(serverAddress); Uri uri = new Uri(string.Concat(httpServer.ServerUrl, "/description.xml")); this.ssdpServer = new SsdpServer(); this.ssdpServer.RegisterNotification(DlnaServer.ServerGuid, uri, pAddress); this.httpServer.AddHandler(new DescriptionHandler()); this.httpServer.AddHandler(new ContentDirectoryHandler()); this.httpServer.AddHandler(new ControlHandler(httpServer, dataLibrary)); this.httpServer.AddHandler(new FileHandler(dataLibrary)); this.httpServer.AddHandler(new CoverHandler(dataLibrary)); })); }
public void SearchTest() { using (var client = new SsdpClient()) using (var server = new SsdpServer()) { server.CreateAnnouncer("urn:schemas-upnp-org:service:test:1", "uuid:979F4CE8-64AF-4653-B207-D7514908356F::urn:schemas-upnp-org:service:test:1"); server.StartListening(); client.StartListening(); var search = client.CreateSearch(false); var results = search.Search(); Assert.That(results.Exists(IsTestAnnouncement)); } }
public void RootDeviceSearchTest() { using (var client = new SsdpClient()) using (var server = new SsdpServer()) { server.CreateAnnouncer("upnp:rootdevice", "uuid:979F4CE8-64AF-4653-B207-D7514908356F::upnp:rootdevice"); server.StartListening(); client.StartListening(); var search = client.CreateSearch(false); search.SearchType = "upnp:rootdevice"; var results = search.Search(); Assert.AreEqual(0, results.Count(msg => msg.Type != "upnp:rootdevice")); Assert.That(results.Exists(IsRootAnnouncement)); } }
public void SynchronousAnnouncementTest() { using (var client = new SsdpClient()) using (var server = new SsdpServer()) { client.Filter = message => message.Type == "urn:schemas-upnp-org:service:test:1"; client.StartListening(); server.CreateAnnouncer("urn:schemas-upnp-org:service:test:1", "uuid:979F4CE8-64AF-4653-B207-D7514908356F::urn:schemas-upnp-org:service:test:1"); server.StartListening(); var result = client.FindFirst(TimeSpan.FromSeconds(30)); Assert.IsNotNull(result); Assert.That(IsTestAnnouncement(result)); } }
public void AnnoucementTest() { using (var client = new SsdpClient()) using (var server = new SsdpServer()) { client.ServiceFound += TestResultFound; client.StartListening(); lock (mutex) { server.CreateAnnouncer("urn:schemas-upnp-org:service:test:1", "uuid:979F4CE8-64AF-4653-B207-D7514908356F::urn:schemas-upnp-org:service:test:1"); server.StartListening(); if (!Monitor.Wait(mutex, TimeSpan.FromSeconds(30))) { Assert.Fail("The announcement timed out."); } } } }
/// <summary> /// Initializes a new instance of the <see cref="SsdpServerPublisher"/> class. /// </summary> /// <param name="dlnaServerManager">The <see cref="IDlnaServerManager"/> instance.</param> /// <param name="configuration">The <see cref="IConfigurationManager"/> instance.</param> /// <param name="logger">The <see cref="ILogger"/> instance.</param> /// <param name="loggerFactory">The <see cref="ILoggerFacory"/> instance.</param> /// <param name="networkManager">The <see cref="INetworkManager"/> instance.</param> public SsdpServerPublisher( IDlnaServerManager dlnaServerManager, IConfigurationManager configuration, ILogger logger, ILoggerFactory loggerFactory, INetworkManager networkManager) { _dlnaServerManager = dlnaServerManager; _networkManager = networkManager; _logger = logger; _devices = new List <SsdpRootDevice>(); _readOnlyDevices = new ReadOnlyCollection <SsdpRootDevice>(_devices); _recentSearchRequests = new Dictionary <string, SearchRequest>(StringComparer.OrdinalIgnoreCase); _random = new Random(); Server = SsdpServer.GetOrCreateInstance( configuration, loggerFactory, networkManager.GetInternalBindAddresses(), networkManager); _dlnaServerManager.ConfigurationChanged += UpdateConfiguration; _networkManager.NetworkChanged += NetworkChanged; }
static void Main(string[] args) { using (var server = new SsdpServer()) { server.StartListening(); var announcer = server.CreateAnnouncer(); announcer.Location = "http://localhost/test"; announcer.NotificationType = "test"; announcer.MaxAge = 3; announcer.Start(); SsdpClient client = new SsdpClient(); using (var search = client.CreateSearch(true)) { search.SearchType = "upnp:rootdevice"; Console.WriteLine("Searching for first result:"); SsdpMessage first = search.FindFirst(Protocol.DiscoveryEndpoints.IPv4, Protocol.DiscoveryEndpoints.Broadcast); if (first == null) { Console.WriteLine("No results found from FindFirst."); } else { Console.WriteLine("First device found at: {0}", first.Location); } } using (var search = client.CreateSearch(true)) { search.SearchType = Protocol.SsdpAll; // Attach our events for async search search.ResultFound += new EventHandler <EventArgs <SsdpMessage> >(search_ResultFound); search.SearchComplete += new EventHandler(search_SearchComplete); Console.WriteLine(); Console.WriteLine("Performing asynchronous search:"); //search.SearchAsync(); search.SearchAsync(Protocol.DiscoveryEndpoints.IPv4, Protocol.DiscoveryEndpoints.Broadcast); // Wait for our async search to complete before doing the synchronous search search.WaitForSearch(); } using (var search = client.CreateSearch(true)) { search.SearchType = "upnp:rootdevice"; Console.WriteLine(); Console.WriteLine("Performing synchronous search:"); search.Search(Protocol.DiscoveryEndpoints.IPv4, Protocol.DiscoveryEndpoints.Broadcast).ForEach(msg => { Console.WriteLine(msg.Location); }); } Console.ReadLine(); } }