Exemple #1
0
        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);
            }
        }
Exemple #2
0
        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);
             * }
             */
        }
Exemple #3
0
 public ClassSOAP(string TargetURL, ICredentials Credential, ClassLogger Logger)
     : this(TargetURL, Logger)
 {
     // Initialise the class
     _credentials = Credential;
     _noAuth      = false;
 }
Exemple #4
0
 public ClassSOAP(string TargetURL, ClassLogger Logger)
 {
     // Initialise the class
     _targetURL = TargetURL;
     _logger    = Logger;
     _noAuth    = true;
 }
Exemple #5
0
        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);
        }
Exemple #6
0
        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;
        }
Exemple #7
0
        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;
        }
Exemple #8
0
 private void FormMain_FormClosed(object sender, FormClosedEventArgs e)
 {
     try
     {
         _httpListener.Dispose();
         _logger = null;
         GC.Collect();
     }
     catch { }
 }
Exemple #9
0
 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;
 }
Exemple #10
0
        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);
        }
Exemple #11
0
        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));
        }
Exemple #12
0
        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();
        }
Exemple #13
0
 public ClassSOAP(string TargetURL, ClassLogger Logger, CredentialHandler credentialHandler)
 {
     _targetURL         = TargetURL;
     _logger            = Logger;
     _credentialHandler = credentialHandler;
 }
Exemple #14
0
        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);
        }
Exemple #15
0
 public ClassSOAP(string TargetURL, X509Certificate2 AuthenticationCertificate, ClassLogger Logger)
     : this(TargetURL, Logger)
 {
     _authCertificate = AuthenticationCertificate;
     _noAuth          = false;
 }
Exemple #16
0
        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);
        }