private void ConnectSink(UPnPDeviceFactory sender, UPnPDevice d, Uri ConnectUri)
        {
            string useIP = d.InterfaceToHost.ToString();
            disconnectMenuItem.Enabled = false;
            CheckIconState();

            if(this.overrideIP!="") {useIP = this.overrideIP;}

            statusBar.Text = "Connected to Peer Relay";
            devicefactory = null;
            home = new CpGateKeeper(d.GetServices(CpGateKeeper.SERVICE_NAME)[0]);
            home.Register(new Uri("http://" + useIP + ":" + this.PortNumber.ToString()),true);
        }
        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);
        }