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);
 }