public void Unregister(string peerName, string cloudName, TimeSpan timeout) { PnrpPeerResolver.UnsafePnrpNativeMethods.PnrpInfo info = new PnrpPeerResolver.UnsafePnrpNativeMethods.PnrpInfo { lpwszIdentity = null, dwSize = Marshal.SizeOf(typeof(PnrpPeerResolver.UnsafePnrpNativeMethods.PnrpInfo)) }; PnrpPeerResolver.UnsafePnrpNativeMethods.WsaQuerySet registerQuery = new PnrpPeerResolver.UnsafePnrpNativeMethods.WsaQuerySet { NameSpace = PnrpPeerResolver.UnsafePnrpNativeMethods.NspNamespaces.Name, NSProviderId = PnrpPeerResolver.UnsafePnrpNativeMethods.NsProviderName, ServiceClassId = PnrpPeerResolver.UnsafePnrpNativeMethods.SvcIdNameV1, ServiceInstanceName = peerName, Context = cloudName, Blob = info }; this.DeleteService(registerQuery); }
public PeerNameResolver(string peerName, int numberOfResultsRequested, PnrpPeerResolver.UnsafePnrpNativeMethods.PnrpResolveCriteria resolveCriteria, uint scopeId, string cloudName, TimeSpan timeout, List<PnrpPeerResolver.PnrpRegistration> results) : base(null, null) { if (timeout > PnrpPeerResolver.MaxTimeout) { timeout = PnrpPeerResolver.MaxTimeout; } this.timeoutHelper = new TimeoutHelper(timeout); PnrpPeerResolver.UnsafePnrpNativeMethods.PnrpInfo info = new PnrpPeerResolver.UnsafePnrpNativeMethods.PnrpInfo { dwSize = Marshal.SizeOf(typeof(PnrpPeerResolver.UnsafePnrpNativeMethods.PnrpInfo)), nMaxResolve = numberOfResultsRequested, dwTimeout = (int) timeout.TotalSeconds, dwLifetime = 0, enNameState = (PnrpPeerResolver.UnsafePnrpNativeMethods.PnrpRegisteredIdState) 0, lpwszIdentity = null, dwFlags = 1 }; IPEndPoint hint = PnrpPeerResolver.GetHint(); info.enResolveCriteria = resolveCriteria; info.saHint = PnrpPeerResolver.UnsafePnrpNativeMethods.SOCKET_ADDRESS_SAFE.SocketAddressFromIPEndPoint(hint); this.resolveQuery = new PnrpPeerResolver.UnsafePnrpNativeMethods.WsaQuerySet(); this.resolveQuery.ServiceInstanceName = peerName; this.resolveQuery.ServiceClassId = PnrpPeerResolver.UnsafePnrpNativeMethods.SvcIdNameV1; this.resolveQuery.NameSpace = PnrpPeerResolver.UnsafePnrpNativeMethods.NspNamespaces.Name; this.resolveQuery.NSProviderId = PnrpPeerResolver.UnsafePnrpNativeMethods.NsProviderName; this.resolveQuery.Context = cloudName; this.resolveQuery.Blob = info; this.results = results; this.scopeId = scopeId; ActionItem.Schedule(new Action<object>(this.SyncEnumeration), null); }
public void Register(PnrpPeerResolver.PnrpRegistration registration, TimeSpan timeout) { PnrpPeerResolver.UnsafePnrpNativeMethods.PnrpInfo info; info = new PnrpPeerResolver.UnsafePnrpNativeMethods.PnrpInfo { dwLifetime = 0xe10, lpwszIdentity = null, dwSize = Marshal.SizeOf(info), dwFlags = 1 }; IPEndPoint hint = PnrpPeerResolver.GetHint(); info.saHint = PnrpPeerResolver.UnsafePnrpNativeMethods.SOCKET_ADDRESS_SAFE.SocketAddressFromIPEndPoint(hint); PnrpPeerResolver.UnsafePnrpNativeMethods.WsaQuerySet registerQuery = new PnrpPeerResolver.UnsafePnrpNativeMethods.WsaQuerySet { NameSpace = PnrpPeerResolver.UnsafePnrpNativeMethods.NspNamespaces.Name, NSProviderId = PnrpPeerResolver.UnsafePnrpNativeMethods.NsProviderName, ServiceClassId = PnrpPeerResolver.UnsafePnrpNativeMethods.SvcIdNameV1, ServiceInstanceName = registration.PeerName, Comment = registration.Comment, Context = registration.CloudName }; if (registration.Addresses != null) { registerQuery.CsAddrInfos = new PnrpPeerResolver.UnsafePnrpNativeMethods.CsAddrInfo[registration.Addresses.Length]; for (int i = 0; i < registration.Addresses.Length; i++) { registerQuery.CsAddrInfos[i].LocalAddr = registration.Addresses[i]; registerQuery.CsAddrInfos[i].iProtocol = 6; registerQuery.CsAddrInfos[i].iSocketType = 1; } } registerQuery.Blob = info; this.RegisterService(registerQuery); }