private void GetDocumentSink(CpGateKeeper sender, System.String DeviceUDN, System.String ServiceID, System.Byte[] Document, UPnPInvokeException e, object _Tag) { if(e!=null) return; UTF8Encoding U = new UTF8Encoding(); string XML = U.GetString(Document); UPnPService S = (UPnPService)_Tag; (new UPnPDebugObject(S)).InvokeNonStaticMethod("ParseSCPD",new object[1]{XML}); --Counter; if(Counter==0) { if(OnDevice!=null) OnDevice(this,new UPnPRelayDevice(_D,HOME)); } }
public ProxyDeviceFactory(CpGateKeeper home, UPnPDevice D, OnDeviceHandler Callback) { OpenSource.Utilities.InstanceTracker.Add(this); HOME = home; OnDevice += Callback; _D = D; foreach(UPnPDevice ed in D.EmbeddedDevices) { ProcessEmbeddedDevice(ed,false); } ProcessServices(D,false); foreach(UPnPDevice ed in D.EmbeddedDevices) { ProcessEmbeddedDevice(ed,true); } ProcessServices(D,true); }
public UPnPRelayDevice(UPnPDevice device, CpGateKeeper _CP) { OpenSource.Utilities.InstanceTracker.Add(this); ILCB = new InvokeResponseHandler(InvokeResponseSink); CP = _CP; ProxyDevice = UPnPDevice.CreateRootDevice(750, double.Parse(device.Version), ""); ProxyDevice.UniqueDeviceName = Guid.NewGuid().ToString(); ProxyDevice.HasPresentation = false; ProxyDevice.FriendlyName = "*" + device.FriendlyName; ProxyDevice.Manufacturer = device.Manufacturer; ProxyDevice.ManufacturerURL = device.ManufacturerURL; ProxyDevice.ModelName = device.ModelName; ProxyDevice.DeviceURN = device.DeviceURN; foreach (UPnPService S in device.Services) { UPnPService S2 = (UPnPService)S.Clone(); foreach (UPnPAction A in S2.Actions) { A.ParentService = S2; A.SpecialCase += new UPnPAction.SpecialInvokeCase(InvokeSink); } UPnPDebugObject dbg = new UPnPDebugObject(S2); dbg.SetField("SCPDURL", "_" + S2.ServiceID + "_scpd.xml"); dbg.SetProperty("ControlURL", "_" + S2.ServiceID + "_control"); dbg.SetProperty("EventURL", "_" + S2.ServiceID + "_event"); ProxyDevice.AddService(S2); } UDNTable[device.UniqueDeviceName] = ProxyDevice; ReverseUDNTable[ProxyDevice.UniqueDeviceName] = device.UniqueDeviceName; foreach (UPnPDevice _ed in device.EmbeddedDevices) { ProcessDevice(_ed); } }
private void disconnectMenuItem_Click(object sender, System.EventArgs e) { if(home != null) { home.UnRegister(new Uri(shareuri)); home.Dispose(); home = null; } IDictionaryEnumerator en = gk.ProxyTable.GetEnumerator(); while(en.MoveNext()) { ((UPnPRelayDevice)en.Value).StopDevice(); } gk.ProxyTable.Clear(); connectMenuItem.Enabled = true; inboundListView.Enabled = false; CheckIconState(); }
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_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); }
private void CPGetDocumentSink(CpGateKeeper sender, System.String DeviceUDN, System.String ServiceID, System.Byte[] Document, UPnPInvokeException e, object _Tag) { if(e!=null) return; UTF8Encoding U = new UTF8Encoding(); string XML = U.GetString(Document); Uri SourceUri = new Uri("http://127.0.0.1"); IPAddress Intfce = null; UPnPDevice d = (UPnPDevice)(new UPnPDebugObject(typeof(OpenSource.UPnP.UPnPDevice))).InvokeStaticMethod("Parse",new object[3] {XML,SourceUri,Intfce}); ProxyDeviceFactory df = new ProxyDeviceFactory(sender,d,new ProxyDeviceFactory.OnDeviceHandler(NewDeviceSink)); ProxyFactoryTable[df] = df; }
private void GetStateTableSink(CpGateKeeper sender, System.String DeviceUDN, System.String ServiceID, System.Byte[] Variables, UPnPInvokeException e, object _Tag) { UPnPService s = (UPnPService)_Tag; UPnPArgument[] Vars = Gatekeeper.ParseArguments(Variables); foreach (UPnPArgument var in Vars) { (new UPnPDebugObject(s)).SetProperty("ValidationMode", false); s.SetStateVariable(var.Name, var.DataValue); } if (Interlocked.Decrement(ref InitCounter) == 0) { ProxyDevice.StartDevice(); } if (Vars.Length > 0) { EventCounter += Vars.Length; if (this.OnEvent != null) OnEvent(this, EventCounter); } }