void _logger_LogAdded(object sender, LogAddedEventArgs e) { // New log added ListViewItem oItem = new ListViewItem(e.Trace.TraceTime.ToString()); string sTag = ""; try { sTag = ClassLogger.ReadMethodFromRequest(e.Trace.Data); } catch { } oItem.Tag = e.Trace.Data; oItem.SubItems.Add(e.Trace.TraceTag); oItem.SubItems.Add(e.Trace.TraceThreadId.ToString()); oItem.SubItems.Add(sTag); if (e.Trace.IsErrorResponse) { oItem.BackColor = Color.Red; } if (listViewLogIndex.InvokeRequired) { listViewLogIndex.Invoke(new MethodInvoker(delegate() { listViewLogIndex.Items.Add(oItem); })); } else { listViewLogIndex.Items.Add(oItem); } }
public FormMain(ClassLogger Logger) { InitializeComponent(); _formConfig = new ClassFormConfig(this); LoadCertificate(textBoxAuthCertificate.Text); this.Text = Application.ProductName + " v" + Application.ProductVersion; _logger = Logger; _logger.DebugLog(this.Text); // Hook up the cert callback. ServicePointManager.ServerCertificateValidationCallback = ValidateCertificate; GetUserSMTPAddress(); UpdateTextBoxState(); UpdateHTTPHeaderControls(); UpdateHTTPCookieControls(); xmlEditorResponse.XmlValidationComplete += xmlEditorResponse_XmlValidationComplete; _logger.DebugLog("Initialisation complete"); /* * if (System.Diagnostics.Debugger.IsAttached) * { * FormUserControlTest oForm = new FormUserControlTest(); * oForm.Show(this); * } */ }
public ClassSOAP(string TargetURL, ICredentials Credential, ClassLogger Logger) : this(TargetURL, Logger) { // Initialise the class _credentials = Credential; _noAuth = false; }
public ClassSOAP(string TargetURL, ClassLogger Logger) { // Initialise the class _targetURL = TargetURL; _logger = Logger; _noAuth = true; }
void _logger_LogAdded(object sender, LogAddedEventArgs e) { // New log added Action action = new Action(() => { ListViewItem oItem = new ListViewItem(e.Trace.TraceTime.ToString()); string sTag = ""; try { sTag = ClassLogger.ReadMethodFromRequest(e.Trace.Data); } catch { } oItem.Tag = e.Trace; oItem.SubItems.Add(e.Trace.TraceTag); oItem.SubItems.Add(e.Trace.TraceThreadId.ToString()); oItem.SubItems.Add(sTag); oItem.SubItems.Add(String.Empty); oItem.SubItems.Add(String.Empty); oItem.SubItems.Add(String.Empty); UpdateListViewItem(oItem, e.Trace); if (listViewLogIndex.InvokeRequired) { listViewLogIndex.Invoke(new MethodInvoker(delegate() { listViewLogIndex.Items.Add(oItem); })); } else { listViewLogIndex.Items.Add(oItem); } }); Task.Run(action); }
public FormMain(bool DebugLogging) { InitializeComponent(); // Add our form configuration helper _formConfig = new ConfigurationManager.ClassFormConfig(this, true); _formConfig.AddControlTypeRecurseExclusion("SOAPe.XmlEditor"); _formConfig.ExcludedControls.Add(groupBoxResponse); _formConfig.ExcludedControls.Add(xmlEditorResponse); _formConfig.ExcludedControls.Add(textBoxHTTPHeaderName); _formConfig.ExcludedControls.Add(textBoxHTTPHeaderValue); ClassFormConfig.ApplyConfiguration(); // Configure log file if (String.IsNullOrEmpty(textBoxLogFolder.Text)) { textBoxLogFolder.Text = System.IO.Path.GetDirectoryName(Application.ExecutablePath); } if (String.IsNullOrEmpty(textBoxLogFileName.Text)) { textBoxLogFileName.Text = "SOAPe.log"; } _logger = new ClassLogger(LogFileName(), DebugLogging); LoadCertificate(textBoxAuthCertificate.Text); this.Text = Application.ProductName + " v" + Application.ProductVersion; _logger.DebugLog(this.Text); // Hook up the cert callback. ServicePointManager.ServerCertificateValidationCallback = ValidateCertificate; GetUserSMTPAddress(); UpdateAuthUI(); UpdateHTTPHeaderControls(); UpdateHTTPCookieControls(); xmlEditorResponse.XmlValidationComplete += xmlEditorResponse_XmlValidationComplete; try { if (!NativeMethods.IsProcessElevated()) { // The HTTP listener requires elevation, check if we have this hTTPListenerToolStripMenuItem hTTPListenerToolStripMenuItem.Image = NativeMethods.GetStockIcon(NativeMethods.SHSTOCKICONID.SIID_SHIELD, NativeMethods.SHGSI.SHGSI_ICON).ToBitmap(); } } catch { } /* * if (System.Diagnostics.Debugger.IsAttached) * { * FormUserControlTest oForm = new FormUserControlTest(); * oForm.Show(this); * } */ _logger.DebugLog("Initialisation complete"); this.Shown += FormMain_Shown; }
public ClassSOAP(string TargetURL, string Username, string Password, ClassLogger Logger) : this(TargetURL, Logger) { // Initialise the class for basic authentication string sAuthInfo = Username + ":" + Password; _authHeader = "Basic " + Convert.ToBase64String(System.Text.Encoding.Default.GetBytes(sAuthInfo)); _noAuth = false; }
private void FormMain_FormClosed(object sender, FormClosedEventArgs e) { try { _httpListener.Dispose(); _logger = null; GC.Collect(); } catch { } }
public FormLogViewer(ClassLogger Logger) { InitializeComponent(); _logger = Logger; _logger.LogAdded += _logger_LogAdded; _logger.ProgressChanged += _logger_ProgressChanged; _syntaxHighlighter = new ClassSyntaxHighlighter(xmlEditor1); _filters = new string[0]; UpdateView(); ThreadPool.QueueUserWorkItem(new WaitCallback(ShowLogList), null); statusPercentBar1.PercentComplete = 0; statusPercentBar1.Visible = false; }
private void LoadLogFolder(object e) { ToggleButtons(false); // Unsubscribe from events of current logger _logger.LogAdded -= _logger_LogAdded; _logger.ProgressChanged -= _logger_ProgressChanged; // Create new logger so as not to interfere with SOAPe's log _logger = new ClassLogger((string)e, false); _logger.LogAdded += _logger_LogAdded; _logger.ProgressChanged += _logger_ProgressChanged; _haveLoadedLog = true; _logger.LoadLogFolder((string)e); ShowLogIndex(); ToggleButtons(true); ShowStatus(null); }
static void Main(string[] args) { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); bool bDebug = System.Diagnostics.Debugger.IsAttached; if (args.Length > 0) { if (args[0].ToLower().EndsWith("debug")) { bDebug = true; } } ClassLogger logger = new ClassLogger(System.IO.Path.GetDirectoryName(Application.ExecutablePath) + "\\SOAPe.log", bDebug); Application.Run(new FormMain(logger)); }
public FormListener(ClassLogger Logger) { InitializeComponent(); StreamReader oReader = new StreamReader(Assembly.GetExecutingAssembly().GetManifestResourceStream("SOAPe.EWSTools.EWSSendNotificationResult.xml")); _NotificationResponse = oReader.ReadToEnd(); oReader.Close(); _Requests = new List <string>(); _Listener = new HttpListener(); hScrollBarReceived.Value = 0; hScrollBarReceived.Maximum = 0; hScrollBarReceived.Minimum = 0; _Logger = Logger; StartListening(); }
public ClassSOAP(string TargetURL, ClassLogger Logger, CredentialHandler credentialHandler) { _targetURL = TargetURL; _logger = Logger; _credentialHandler = credentialHandler; }
public string SendRequest(string sRequest, out string sError, CookieCollection oCookies = null) { // Send the request and return the response _requestName = ClassLogger.ReadMethodFromRequest(sRequest); sError = ""; if (String.IsNullOrEmpty(_targetURL)) { sError = "No target server specified"; return(""); } string sResponse = ""; SecurityProtocolType currentSecurityProtocol = ServicePointManager.SecurityProtocol; ServicePointManager.SecurityProtocol = _securityProtocol; HttpWebRequest oWebRequest = null; try { oWebRequest = (HttpWebRequest)WebRequest.Create(_targetURL); } catch (Exception ex) { sError = ex.Message; return(""); } oWebRequest.UserAgent = String.Format("{1}/{0}", Application.ProductVersion, Application.ProductName); if (_bypassWebProxy) { oWebRequest.Proxy = null; } // Set authentication _credentialHandler.ApplyCredentialsToHttpWebRequest(oWebRequest); _credentialHandler.LogCredentials(_logger); oWebRequest.ContentType = "text/xml;charset=\"utf-8\""; oWebRequest.Accept = "text/xml"; if (_httpHeaders.Count > 0) { foreach (string[] header in _httpHeaders) { try { switch (header[0].ToLower()) { case "user-agent": oWebRequest.UserAgent = header[1]; break; case "content-type": oWebRequest.ContentType = header[1]; break; case "accept": oWebRequest.Accept = header[1]; break; default: oWebRequest.Headers[header[0]] = header[1]; break; } } catch { } } } // We add a client-request-id header so that we can easily match request/response string clientRequestId = oWebRequest.Headers.Get("client-request-id"); if (String.IsNullOrEmpty(clientRequestId)) { clientRequestId = Guid.NewGuid().ToString(); oWebRequest.Headers["client-request-id"] = clientRequestId; } StringBuilder sTimings = new StringBuilder(); sTimings.AppendLine("Latency (latency shown in milliseconds, times are in ticks)").AppendLine(); sTimings.AppendLine($"client-request-id: {clientRequestId}").AppendLine(); if (String.IsNullOrEmpty(oWebRequest.Headers.Get("return-client-request-id"))) { oWebRequest.Headers["return-client-request-id"] = "true"; } oWebRequest.Method = "POST"; XmlDocument oSOAPRequest = new XmlDocument(); if (!String.IsNullOrEmpty(sRequest)) { try { oSOAPRequest.LoadXml(sRequest); } catch (Exception ex) { sError = ex.Message; sResponse = "Request was invalid XML (not sent): " + ex.Message + "\n\r\n\r" + sRequest; Log(sResponse, "Response"); return(""); } } oWebRequest.CookieContainer = new CookieContainer(); if (!(oCookies == null)) { // Add cookies to the request foreach (Cookie oCookie in oCookies) { try { oWebRequest.CookieContainer.Add(oCookie); } catch { } } LogCookies(oCookies, "Request Cookies"); } LogSSLSettings(); Stream stream = null; try { stream = oWebRequest.GetRequestStream(); } catch (Exception ex) { // Failed to send request sError = ex.Message; sResponse = "Error occurred: " + ex.Message + "\n\r\n\r"; } if (stream == null) { // Failed to obtain request stream if (String.IsNullOrEmpty(sError)) { sError = "Failed to open connection"; } if (!String.IsNullOrEmpty(sResponse)) { Log(sResponse, "Response"); } return(""); } DateTime requestSendStartTime = DateTime.Now; if (!string.IsNullOrEmpty(sRequest)) { oSOAPRequest.Save(stream); } stream.Close(); DateTime requestSendEndTime = DateTime.Now; LogHeaders(oWebRequest.Headers, "Request Headers", _targetURL); Log(oSOAPRequest.OuterXml, "Request", clientRequestId); oWebRequest.Expect = ""; DateTime responseReceiveEndTime = DateTime.MinValue; DateTime responseReceiveStartTime = DateTime.Now; IAsyncResult asyncResult = oWebRequest.BeginGetResponse(null, null); asyncResult.AsyncWaitHandle.WaitOne(); WebResponse oWebResponse = null; try { oWebResponse = oWebRequest.EndGetResponse(asyncResult); responseReceiveEndTime = DateTime.Now; _lastResponseHeaders = oWebResponse.Headers; LogHeaders(oWebResponse.Headers, "Response Headers", "", (oWebResponse as HttpWebResponse)); _responseCookies = (oWebResponse as HttpWebResponse).Cookies; LogCookies(_responseCookies, "Response Cookies"); } catch (Exception ex) { responseReceiveEndTime = DateTime.Now; if (ex is WebException) { WebException wex = ex as WebException; sError = wex.Message; if (!(wex.Response == null)) { using (StreamReader oReader = new StreamReader(wex.Response.GetResponseStream())) { sResponse = oReader.ReadToEnd(); } _lastResponseHeaders = wex.Response.Headers; LogHeaders(wex.Response.Headers, "Response Headers", "", (wex.Response as HttpWebResponse)); } } else { sError = ex.Message; } } try { using (StreamReader oReader = new StreamReader(oWebResponse.GetResponseStream())) { sResponse += oReader.ReadToEnd(); } } catch { } try { oWebResponse.Close(); } catch { } Log(sResponse, "Response", clientRequestId); sTimings.AppendLine($"Request start: {(long)(requestSendStartTime.Ticks/10000)}"); sTimings.AppendLine($"Request complete: {(long)(requestSendEndTime.Ticks/10000)}"); sTimings.AppendLine($"Request latency: {(long)((requestSendEndTime.Ticks- requestSendStartTime.Ticks) / 10000)}").AppendLine(); sTimings.AppendLine($"Response start: {(long)(responseReceiveStartTime.Ticks / 10000)}"); sTimings.AppendLine($"Response complete: {(long)(responseReceiveEndTime.Ticks / 10000)}"); sTimings.AppendLine($"Response latency: {(long)((responseReceiveEndTime.Ticks - responseReceiveStartTime.Ticks) / 10000)}").AppendLine(); sTimings.AppendLine($"Total time taken (includes processing time): {(long)((responseReceiveEndTime.Ticks - requestSendStartTime.Ticks) / 10000)}"); Log(sTimings.ToString(), "Latency Report"); return(sResponse); }
public ClassSOAP(string TargetURL, X509Certificate2 AuthenticationCertificate, ClassLogger Logger) : this(TargetURL, Logger) { _authCertificate = AuthenticationCertificate; _noAuth = false; }
public string SendRequest(string sRequest, out string sError, CookieCollection oCookies = null) { // Send the request and return the response _requestName = ClassLogger.ReadMethodFromRequest(sRequest); sError = ""; if (String.IsNullOrEmpty(_targetURL)) { sError = "No target server specified"; return(""); } string sResponse = ""; SecurityProtocolType currentSecurityProtocol = ServicePointManager.SecurityProtocol; ServicePointManager.SecurityProtocol = _securityProtocol; LogSSLSettings(); HttpWebRequest oWebRequest = (HttpWebRequest)WebRequest.Create(_targetURL); oWebRequest.UserAgent = String.Format("{1}/{0}", Application.ProductVersion, Application.ProductName); if (_bypassWebProxy) { oWebRequest.Proxy = null; } // Set authentication oWebRequest.UseDefaultCredentials = false; if (!String.IsNullOrEmpty(_authHeader)) { // Add authorization header oWebRequest.Headers["Authorization"] = _authHeader; } else if (!_noAuth) { if (_authCertificate != null) { oWebRequest.ClientCertificates = new X509CertificateCollection(); oWebRequest.ClientCertificates.Add(_authCertificate); } else { oWebRequest.Credentials = _credentials; } } oWebRequest.ContentType = "text/xml;charset=\"utf-8\""; oWebRequest.Accept = "text/xml"; if (_httpHeaders.Count > 0) { foreach (string[] header in _httpHeaders) { try { if (header[0].ToLower() == "content-type") { oWebRequest.ContentType = header[1]; } else if (header[0].ToLower() == "accept") { oWebRequest.Accept = header[1]; } else { oWebRequest.Headers[header[0]] = header[1]; } } catch { } } } oWebRequest.Method = "POST"; XmlDocument oSOAPRequest = new XmlDocument(); if (!String.IsNullOrEmpty(sRequest)) { try { oSOAPRequest.LoadXml(sRequest); } catch (Exception ex) { sError = ex.Message; sResponse = "Request was invalid XML: " + ex.Message + "\n\r\n\r" + sRequest; Log(sResponse, "Response"); return(""); } } oWebRequest.CookieContainer = new CookieContainer(); if (!(oCookies == null)) { // Add cookies to the request foreach (Cookie oCookie in oCookies) { try { oWebRequest.CookieContainer.Add(oCookie); } catch { } } LogCookies(oCookies, "Request Cookies"); } Stream stream = null; try { stream = oWebRequest.GetRequestStream(); } catch (Exception ex) { // Failed to send request sError = ex.Message; sResponse = "Error occurred: " + ex.Message + "\n\r\n\r"; Log(sResponse, "Response"); return(""); } if (!string.IsNullOrEmpty(sRequest)) { oSOAPRequest.Save(stream); } stream.Close(); LogHeaders(oWebRequest.Headers, "Request Headers", _targetURL); Log(oSOAPRequest.OuterXml, "Request"); oWebRequest.Expect = ""; IAsyncResult asyncResult = oWebRequest.BeginGetResponse(null, null); asyncResult.AsyncWaitHandle.WaitOne(); WebResponse oWebResponse = null; try { oWebResponse = oWebRequest.EndGetResponse(asyncResult); _lastResponseHeaders = oWebResponse.Headers; LogHeaders(oWebResponse.Headers, "Response Headers", "", (oWebResponse as HttpWebResponse)); _responseCookies = (oWebResponse as HttpWebResponse).Cookies; LogCookies(_responseCookies, "Response Cookies"); } catch (Exception ex) { if (ex is WebException) { WebException wex = ex as WebException; sError = wex.Message; if (!(wex.Response == null)) { using (StreamReader oReader = new StreamReader(wex.Response.GetResponseStream())) { sResponse = oReader.ReadToEnd(); } _lastResponseHeaders = wex.Response.Headers; LogHeaders(wex.Response.Headers, "Response Headers", "", (wex.Response as HttpWebResponse)); } } else { sError = ex.Message; } } try { using (StreamReader oReader = new StreamReader(oWebResponse.GetResponseStream())) { sResponse += oReader.ReadToEnd(); } } catch { } try { oWebResponse.Close(); } catch { } Log(sResponse, "Response", true); return(sResponse); }