public PnrpRegisterTraceRecord(string meshId, PnrpPeerResolver.PnrpRegistration global, IEnumerable<PnrpPeerResolver.PnrpRegistration> siteEntries, IEnumerable<PnrpPeerResolver.PnrpRegistration> linkEntries) { this.meshId = meshId; this.siteEntries = siteEntries; this.linkEntries = linkEntries; this.global = global; }
public void SyncEnumeration(object state) { PnrpPeerResolver.UnsafePnrpNativeMethods.CriticalLookupHandle handle; int num = 0; PnrpPeerResolver.UnsafePnrpNativeMethods.WsaQuerySetSafe safeQuerySet = PnrpPeerResolver.UnsafePnrpNativeMethods.WsaQuerySet.ToWsaQuerySetSafe(this.resolveQuery); using (safeQuerySet) { num = PnrpPeerResolver.UnsafePnrpNativeMethods.WSALookupServiceBegin(PnrpPeerResolver.UnsafePnrpNativeMethods.CriticalAllocHandleWsaQuerySetSafe.FromWsaQuerySetSafe(safeQuerySet), PnrpPeerResolver.UnsafePnrpNativeMethods.WsaNspControlFlags.ReturnAll, out handle); } if (num != 0) { this.lastException = new PnrpPeerResolver.PnrpException(PnrpPeerResolver.UnsafePnrpNativeMethods.WSAGetLastError(), this.resolveQuery.Context); Utility.CloseInvalidOutCriticalHandle(handle); base.Complete(false, this.lastException); } else { PnrpPeerResolver.UnsafePnrpNativeMethods.WsaQuerySet set = new PnrpPeerResolver.UnsafePnrpNativeMethods.WsaQuerySet(); int size = Marshal.SizeOf(typeof(PnrpPeerResolver.UnsafePnrpNativeMethods.WsaQuerySetSafe)) + 400; CriticalAllocHandle handle3 = CriticalAllocHandle.FromSize(size); try { using (handle) { Label_0090: if (this.timeoutHelper.RemainingTime() != TimeSpan.Zero) { if (PnrpPeerResolver.UnsafePnrpNativeMethods.WSALookupServiceNext(handle, 0, ref size, (IntPtr) handle3) != 0) { int errorCode = PnrpPeerResolver.UnsafePnrpNativeMethods.WSAGetLastError(); switch (errorCode) { case 0x2776: case 0x277e: return; case 0x271e: handle3 = CriticalAllocHandle.FromSize(size); goto Label_0090; } PeerExceptionHelper.ThrowPnrpError(errorCode, set.Context); goto Label_0090; } if (handle3 == IntPtr.Zero) { goto Label_0090; } set = MarshalWsaQuerySetNativeToWsaQuerySet((IntPtr) handle3, this.scopeId); PnrpPeerResolver.PnrpRegistration item = new PnrpPeerResolver.PnrpRegistration { CloudName = set.Context, Comment = set.Comment, PeerName = set.ServiceInstanceName, Addresses = new IPEndPoint[set.CsAddrInfos.Length] }; for (int i = 0; i < set.CsAddrInfos.Length; i++) { item.Addresses[i] = set.CsAddrInfos[i].LocalAddr; } lock (this.results) { this.results.Add(item); goto Label_0090; } } } } catch (Exception exception) { if (Fx.IsFatal(exception)) { throw; } DiagnosticUtility.ExceptionUtility.TraceHandledException(exception, TraceEventType.Information); if (DiagnosticUtility.ShouldTraceInformation) { PnrpResolveExceptionTraceRecord extendedData = new PnrpResolveExceptionTraceRecord(this.resolveQuery.ServiceInstanceName, this.resolveQuery.Context, exception); if (DiagnosticUtility.ShouldTraceError) { TraceUtility.TraceEvent(TraceEventType.Error, 0x4004b, System.ServiceModel.SR.GetString("TraceCodePnrpResolveException"), extendedData, this, null); } } this.lastException = exception; } finally { base.Complete(false, this.lastException); } } }