public UPnPConfigPackage(IIpConfig ip, IUPnPConfig upnp, IXMLWriter xw, List<string>servicepath)
 {
     IpConf = ip;
     UpnpConf = upnp;
     XmlWr = xw;
     ServiceConfPaths = servicepath;
 }
        public MulticastSender(IIpConfig ipconf, IUPnPConfig upnpconf)
        {
            _UUID = ipconf.GUID;
            _cacheexpire = upnpconf.cacheExpire;
            _localip = ipconf.IP;
            _tcpport = ipconf.TCPPort;
            _upnPConfig = upnpconf;

            SetupMulticastSender();     //Setup

            notify = HTTPNotifygenerator(upnpconf.NT);
        }
        //Todo: Separate into UDPHandler and UDPServer
        //Explicit contructor that takes the UPnPConfig classes:
        public UDPHandler(IIpConfig ipconf, IUPnPConfig upnpconf)
        {
            sender = new MulticastSender(ipconf, upnpconf);          //Creates sender
            receiver = new MulticastReceiver();
            //receiver = new MulticastReceiver(IpConf, upnpconf);     //Creates receiver

            NotifyThread = new Thread(sender.NotifySender);     //Thread for notifier. Runs every _cacheexpire seconds
            ReceiveThread = new Thread(Run);                    //Run thread. The default UDP Thread

            _ip = ipconf;
            _upnPConfig = upnpconf;
        }
Пример #4
0
        public UPnP(IUPnPConfigPackage config)
        {
            IpConf = config.IpConf;
            UpnpConf = config.UpnpConf;
            XmlWriter = config.XmlWr;

            XmlWriter.GenDeviceDescription(UpnpConf);

            XMLServicesConfig ServiceConf = new XMLServicesConfig(config.ServiceConfPaths);

            TCPServer = new TcpServer(IpConf.IP, IpConf.TCPPort);
            UDPServer = new UDPHandler(IpConf, UpnpConf);
            UDPServer.Start();

            SubscribeToUpnpEvents();
        }
 /// <summary>
 /// constructor
 /// </summary>
 /// <param name="ip">IP of the upnp device that the device descriptions should be made for</param>
 /// <param name="upnp">UPnPConfig object that holds the needed data for the descriptions</param>
 public XMLWriter(IIpConfig ip, IUPnPConfig upnp)
 {
     _ip = ip;
     _upnp = upnp;
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="UPnP_Device.UDP.UDPHandler"/> class.
 /// </summary>
 /// <param name='send'>
 /// An instance of the MulticastSender
 /// </param>
 /// <param name='conf'>
 /// Configuration information about the UPnP Device
 /// </param>
 public UDPHandler(MulticastSender send, IUPnPConfig conf)
 {
     sender = send;
     _upnPConfig = conf;
 }
        //DeviceArchitecture s.51
        //generates device XML
        public void GenDeviceDescription(IUPnPConfig UPnPConfig)
        {
            #region setup

            //string path = @"Descriptions\desc.xml";
            XmlDocument doc = new XmlDocument();

            XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", null, null);
            doc.AppendChild(dec);

            XmlElement root = doc.CreateElement("root");
            doc.AppendChild(root);
            root.SetAttribute("xmlns", "urn:schemas-upnp-org:device-1-0");

            XmlElement specVersion = doc.CreateElement("specVersion");
            root.AppendChild(specVersion);

            XmlElement major = doc.CreateElement("major");
            specVersion.AppendChild(major);
            major.InnerText = "1";

            XmlElement minor = doc.CreateElement("minor");
            specVersion.AppendChild(minor);
            minor.InnerText = "0";

            XmlElement device = doc.CreateElement("device");
            root.AppendChild(device);

            #endregion

            #region mediaRenderer

            XmlElement deviceType = doc.CreateElement("deviceType");
            device.AppendChild(deviceType);
            deviceType.InnerText = UPnPConfig.DeviceType;

            XmlElement friendlyName = doc.CreateElement("friendlyName");
            device.AppendChild(friendlyName);
            friendlyName.InnerText = UPnPConfig.friendlyName;

            XmlElement manufacturer = doc.CreateElement("manufacturer");
            device.AppendChild(manufacturer);
            manufacturer.InnerText = UPnPConfig.Manufacturer;

            XmlElement manufacturerURL = doc.CreateElement("manufacturerURL");
            device.AppendChild(manufacturerURL);
            manufacturerURL.InnerText = UPnPConfig.ManufacturerURL;

            XmlElement modelDescription = doc.CreateElement("modelDescription");
            device.AppendChild(modelDescription);
            modelDescription.InnerText = UPnPConfig.ModelDescription;

            XmlElement modelName = doc.CreateElement("modelName");
            device.AppendChild(modelName);
            modelName.InnerText = UPnPConfig.ModelName;

            XmlElement udn = doc.CreateElement("UDN");
            device.AppendChild(udn);
            udn.InnerText = "uuid:" + _ip.GUID;

            XmlElement serviceList = doc.CreateElement("serviceList");
            device.AppendChild(serviceList);

            #endregion

            #region AVTransport

            foreach (string s in UPnPConfig.services)
            {
                XmlElement service = doc.CreateElement("service");
                serviceList.AppendChild(service);

                XmlElement serviceType = doc.CreateElement("serviceType");
                service.AppendChild(serviceType);
                serviceType.InnerText = "urn:schemas-upnp-org:service:" + s;

                XmlElement serviceId = doc.CreateElement("serviceId");
                service.AppendChild(serviceId);
                //serviceId.InnerText = "urn:upnp-org:serviceId:AVTransport.0001";
                serviceId.InnerText = "urn:upnp-org:serviceId:" + s.Split(':')[0];

                XmlElement SCPDURL = doc.CreateElement("SCPDURL");
                service.AppendChild(SCPDURL);
                //SCPDURL.InnerText = "urn-schemas-upnp-org-service-AVTransport.0001_scpd.xml";
                // SCPDURL.InnerText = "serviceDescripton.xml";
                SCPDURL.InnerText = s.Split(':')[0] + "/" + servicePath;

                XmlElement controlURL = doc.CreateElement("controlURL");
                service.AppendChild(controlURL);
                //controlURL.InnerText = "urn:upnp-org:serviceId:AVTransport.0001_control";
                controlURL.InnerText = "";

                XmlElement eventSubUrl = doc.CreateElement("eventSubURL");
                service.AppendChild(eventSubUrl);
                eventSubUrl.InnerText = "";
            }

            #endregion

            //ATTENTION: Outcommented:
            #region RenderingControl
            /*
            service = doc.CreateElement("service");
            serviceList.AppendChild(service);

            serviceType = doc.CreateElement("serviceType");
            service.AppendChild(serviceType);
            serviceType.InnerText = "urn:schemas-upnp-org:service:RenderingControl:1";

            serviceId = doc.CreateElement("serviceId");
            service.AppendChild(serviceId);
            //serviceId.InnerText = "urn:upnp-org:serviceId:AVTransport.0001";
            serviceId.InnerText = "urn:upnp-org:serviceId:RenderingControl";

            SCPDURL = doc.CreateElement("SCPDURL");
            service.AppendChild(SCPDURL);
            //SCPDURL.InnerText = "urn-schemas-upnp-org-service-AVTransport.0001_scpd.xml";
            // SCPDURL.InnerText = "serviceDescripton.xml";
            SCPDURL.InnerText = "RenderingControl/serviceDescription/";

            controlURL = doc.CreateElement("controlURL");
            service.AppendChild(controlURL);
            //controlURL.InnerText = "urn:upnp-org:serviceId:AVTransport.0001_control";
            controlURL.InnerText = "";

            eventSubUrl = doc.CreateElement("eventSubURL");
            service.AppendChild(eventSubUrl);
            eventSubUrl.InnerText = " ";
            */
            #endregion

            //for debug
            doc.Save("DeviceDescDebug.xml");

            SaveFile(doc.OuterXml, "");
        }