private static string GetTagValue(string text, string tag, int offset) { string funcName = "GetTagValue"; int num = text.IndexOf("<" + tag, offset); if (num > 0) { int num2 = num + tag.Length + 1; num2 = text.IndexOf(">", num); if (num2 > 0) { num2++; int num3 = text.IndexOf("</" + tag, num2); if (num3 > num2) { return(text.Substring(num2, num3 - num2)); } WinRMHelper.TraceDebugTagNotFound(funcName, text, "</" + tag, num2); } else { WinRMHelper.TraceDebugTagNotFound(funcName, text, ">", num); } } else { WinRMHelper.TraceDebugTagNotFound(funcName, text, "<" + tag, offset); } return(string.Empty); }
internal static bool TryInsertDiagnosticsInfo(ArraySegment <byte> buffer, Func <string> getDiagnosticInfo, out byte[] updatedBuffer, out string failureHint, Action <string> logging = null) { failureHint = null; updatedBuffer = null; if (buffer.Count == 0) { ExTraceGlobals.VerboseTracer.TraceDebug(0L, "[WinRMHelper::TryInsertDiagnosticsInfo] buffer == null || buffer.Count = 0."); failureHint = "buffer Null/Empty"; return(false); } string @string = Encoding.UTF8.GetString(buffer.Array, 0, 15); if (string.IsNullOrEmpty(@string)) { ExTraceGlobals.VerboseTracer.TraceDebug <string>(0L, "[WinRMHelper::TryInsertDiagnosticsInfo] EnvelopString is null/empty.", @string); failureHint = "EnvelopString Null/Empty"; return(false); } if ([email protected]("<s:Envelope", StringComparison.OrdinalIgnoreCase)) { ExTraceGlobals.VerboseTracer.TraceDebug <string>(0L, "[WinRMHelper::TryInsertDiagnosticsInfo] EnvelopString = {0}, Not start with <s:Envelop.", @string); failureHint = "No s:Envelop"; return(false); } string text = Encoding.UTF8.GetString(buffer.Array, 0, buffer.Count); if (string.IsNullOrEmpty(text)) { ExTraceGlobals.VerboseTracer.TraceDebug <string>(0L, "[WinRMHelper::TryInsertDiagnosticsInfo] Output is null/empty.", text); failureHint = "Output Null/Empty"; return(false); } int num = text.IndexOf("<f:Message>"); if (num < 0) { ExTraceGlobals.VerboseTracer.TraceDebug <string>(0L, "[WinRMHelper::TryInsertDiagnosticsInfo] Output = {0}, faultMsgIndex < 0.", text); failureHint = "No f:Message"; return(false); } int length = text.Length; ExTraceGlobals.VerboseTracer.TraceDebug <string, int>(0L, "[WinRMHelper::TryInsertDiagnosticsInfo] Output(faultMsgIndex + 100) = {0}, faultMsgIndex = {1}.", text.Substring(num, (num + 100 < length) ? 100 : (length - num)), num); string text2 = "f:Message"; int num2 = num + "<f:Message>".Length; if (text.IndexOf("<f:ProviderFault", num2, "<f:ProviderFault".Length) >= 0) { text2 = "<f:ProviderFault"; text2 = text2.TrimStart(new char[] { '<' }); num2 = text.IndexOf('>', num2) + 1; ExTraceGlobals.VerboseTracer.TraceDebug <string, int>(0L, "[WinRMHelper::TryInsertDiagnosticsInfo] Output(positionToInsert + 100) = {0}, positionToInsert = {1}.", text.Substring(num, (num2 + 100 < length) ? 100 : (length - num2)), num2); } if (logging != null) { int num3 = text.IndexOf("<s:Fault"); if (num3 > 0) { int num4 = text.IndexOf("<s:Code", num3); if (num4 > 0) { string tagValue = WinRMHelper.GetTagValue(text, "s:Value", num4); string text3 = string.Empty; int num5 = text.IndexOf("<s:Subcode", num4); if (num5 > 0) { text3 = WinRMHelper.GetTagValue(text, "s:Value", num5); } else { WinRMHelper.TraceDebugTagNotFound("TryInsertDiagnosticsInfo", text, "<s:Subcode", 0); } string tagValue2 = WinRMHelper.GetTagValue(text, text2, num4); logging(string.Concat(new string[] { tagValue, "/", text3, "/", tagValue2 })); } else { WinRMHelper.TraceDebugTagNotFound("TryInsertDiagnosticsInf", text, "<s:Code", 0); } } else { WinRMHelper.TraceDebugTagNotFound("TryInsertDiagnosticsInfo", text, "<s:Fault", 0); } } string value = getDiagnosticInfo(); text = text.Insert(num2, value); updatedBuffer = Encoding.UTF8.GetBytes(text); return(true); }