Beispiel #1
0
        /// <summary>
        /// ネットワーク内の UPnP Wan サービスを探す。ちょっと時間がかかる。
        /// 見つからなかったときはnullが返るので気をつける。
        /// </summary>
        /// <returns></returns>
        public static UPnPWanService FindUPnPWanService()
        {
            Guid UPnPDeviceFinderClass = new Guid("E2085F28-FEB7-404A-B8E7-E659BDEAAA02");
            IUPnPDeviceFinder finder   = Activator.CreateInstance(Type.GetTypeFromCLSID(UPnPDeviceFinderClass)) as IUPnPDeviceFinder;

            string[] deviceTypes  = { "urn:schemas-upnp-org:service:WANPPPConnection:1", "urn:schemas-upnp-org:service:WANIPConnection:1", };
            string[] serviceNames = { "urn:upnp-org:serviceId:WANPPPConn1", "urn:upnp-org:serviceId:WANIPConn1", };
            foreach (string deviceType in deviceTypes)
            {
                foreach (IUPnPDevice device in finder.FindByType(deviceType, 0))
                {
                    foreach (string serviceName in serviceNames)
                    {
                        foreach (IUPnPService service in device.Services)
                        {
                            return new UPnPWanService()
                                   {
                                       service = service
                                   }
                        }
                    }
                }
            }
            ;
            return(null);
        }
Beispiel #2
0
        // Initiate UPNP discovery
        void SearchForDevices()
        {
            IntPtr pCB;
            // Create an instance of a UPNPFinder
            Type   tFinder = Type.GetTypeFromCLSID(CLSID_UPnPFinder);
            object oInst   = Activator.CreateInstance(tFinder);

            _finder = (IUPnPDeviceFinder)oInst;

            // Create a callback object
            _finderCallback = new Callback(this);
            pCB             = Marshal.GetComInterfaceForObject(_finderCallback, typeof(IUPnPDeviceFinderCallback));

            // Pin the callback to ensure it does not get garbage-collected
            _hCallback = GCHandle.Alloc(_finderCallback, GCHandleType.Pinned);

            // Start search
            _asyncFind = _finder.CreateAsyncFind("upnp:rootdevice", 0, pCB);
            Debug.WriteLine("Starting search");
            _finder.StartAsyncFind(_asyncFind);
        }