private void ProxySink_NoReverse(UPnPDeviceFactory sender, UPnPDevice d, Uri LocationUri)
        {
            FactoryTable.Remove(sender);
            sender.Shutdown();
            CpGateKeeper CP = new CpGateKeeper(d.GetServices(CpGateKeeper.SERVICE_NAME)[0]);

            lock (RegisteredTable)
            {
                RegisteredTable[CP.GetUPnPService().ParentDevice.UniqueDeviceName] = CP;
                object[] PL = (object[])ProcessLaterList.ToArray(typeof(object));
                foreach (object PL2 in PL)
                {
                    object[] PL3       = (object[])PL2;
                    string   SenderUDN = (string)PL3[0];
                    string   DeviceUDN = (string)PL3[1];

                    if (RegisteredTable.ContainsKey(SenderUDN))
                    {
                        CpGateKeeper HOME = (CpGateKeeper)RegisteredTable[SenderUDN];
                        HOME.GetDocument(DeviceUDN, "", null, new CpGateKeeper.Delegate_OnResult_GetDocument(CPGetDocumentSink));
                        ProcessLaterList.Remove(PL2);
                    }
                }
            }
            foreach (UPnPDevice t in ShareList)
            {
                CP.AddDevice(Root.UniqueDeviceName, t.UniqueDeviceName);
            }
        }
        private void ProxySink(UPnPDeviceFactory sender, UPnPDevice d, Uri LocationUri)
        {
            FactoryTable.Remove(sender);
            sender.Shutdown();
            CpGateKeeper CP        = new CpGateKeeper(d.GetServices(CpGateKeeper.SERVICE_NAME)[0]);
            string       useThisIP = d.InterfaceToHost.ToString();

            if (this.PublicIP != "")
            {
                useThisIP = PublicIP;
            }


            lock (RegisteredTable)
            {
                RegisteredTable[CP.GetUPnPService().ParentDevice.UniqueDeviceName] = CP;
                object[] PL = (object[])ProcessLaterList.ToArray(typeof(object));
                foreach (object PL2 in PL)
                {
                    object[] PL3       = (object[])PL2;
                    string   SenderUDN = (string)PL3[0];
                    string   DeviceUDN = (string)PL3[1];

                    if (RegisteredTable.ContainsKey(SenderUDN))
                    {
                        CpGateKeeper HOME = (CpGateKeeper)RegisteredTable[SenderUDN];
                        HOME.GetDocument(DeviceUDN, "", null, new CpGateKeeper.Delegate_OnResult_GetDocument(CPGetDocumentSink));
                        ProcessLaterList.Remove(PL2);
                    }
                }
            }
            foreach (UPnPDevice t in ShareList)
            {
                CP.AddDevice(Root.UniqueDeviceName, t.UniqueDeviceName);
            }

            CP.Register(new Uri("http://" + useThisIP + ":" + Port.ToString()), false);
        }