/// <summary> /// Adds a request to the current Traffic Viewer File /// </summary> /// <param name="request"></param> /// <param name="description"></param> private void AddAppScanRequest(XmlNode request, string description) { TVRequestInfo reqInfo = new TVRequestInfo(); reqInfo.Description = description; reqInfo.IsHttps = request.Attributes["scheme"] != null && request.Attributes["scheme"].Equals("https"); reqInfo.ThreadId = Properties.Resources.Settings; XmlNode rawRequestNode = request.SelectSingleNode("raw"); byte[] rawRequestBytes = new byte[0]; if (rawRequestNode.Attributes["encoding"] != null && rawRequestNode.Attributes["encoding"].Value.Equals("none")) { string rawRequest = String.Empty; rawRequest = rawRequestNode.InnerText; rawRequestBytes = Constants.DefaultEncoding.GetBytes(rawRequest); } reqInfo.RequestLine = HttpRequestInfo.GetRequestLine(rawRequestBytes); reqInfo.Id = _tvFile.AddRequestInfo(reqInfo); _tvFile.SaveRequest(reqInfo.Id, rawRequestBytes); XmlNode response = request.SelectSingleNode("response"); //put together the response if (response != null) { ByteArrayBuilder builder = new ByteArrayBuilder(); XmlNode headersNode = response.SelectSingleNode("headers"); if (headersNode != null && headersNode.Attributes["value"] != null) { builder.AddChunkReference(Constants.DefaultEncoding.GetBytes(headersNode.Attributes["value"].Value)); } XmlNode bodyNode = response.SelectSingleNode("body"); if (bodyNode != null) { bool isCompressed = bodyNode.Attributes["compressedBinaryValue"] != null && bodyNode.Attributes["compressedBinaryValue"].Value == "true"; string body = bodyNode.Attributes["value"].Value; byte[] bodyBytes = new byte[0]; if (isCompressed) { bodyBytes = Utils.DecompressBytesFromBase64String(body); } else { body = Utils.Base64Decode(body); bodyBytes = Constants.DefaultEncoding.GetBytes(body); } builder.AddChunkReference(bodyBytes); } _tvFile.SaveResponse(reqInfo.Id, builder.ToArray()); } }
private void TrafficViewSaveRequested(RequestTrafficViewSaveArgs e) { if (_currentId > -1) { //update the request info //parse the data HttpRequestInfo reqInfo = new HttpRequestInfo(e.Request); _responseBytes = Constants.DefaultEncoding.GetBytes(e.Response); HttpResponseInfo respInfo = new HttpResponseInfo(); respInfo.ProcessResponse(_responseBytes); TVRequestInfo currentTVInfo = _dataSource.GetRequestInfo(_currentId); //do not set the dom uniqueness id, needs to be explicitly calculated currentTVInfo.DomUniquenessId = String.Empty; currentTVInfo.RequestLine = reqInfo.RequestLine; currentTVInfo.RequestTime = DateTime.Now; currentTVInfo.ResponseStatus = respInfo.Status.ToString(); currentTVInfo.ResponseTime = DateTime.Now; currentTVInfo.Description = "Traffic Viewer Request"; currentTVInfo.ThreadId = "[0000]"; //convert the strings to bytes RequestResponseBytes reqData = new RequestResponseBytes(); reqData.AddToRequest(Constants.DefaultEncoding.GetBytes(e.Request)); reqData.AddToResponse(_responseBytes); //save the requests to the current data source _dataSource.SaveRequest(_currentId, reqData); _dataSource.SaveResponse(_currentId, reqData); _requestText = e.Request; _responseText = e.Response; } }
private void SaveThreadRequests(ThreadInfo threadInfo) { foreach (KeyValuePair <int, RequestResponseBytes> request in threadInfo.CurrentRequests) { TVRequestInfo header = _trafficViewerFile.GetRequestInfo(request.Key); if (header != null) { if (request.Value.RequestSize > header.RequestLength) { _trafficViewerFile.SaveRequest(request.Key, request.Value); } if (request.Value.ResponseSize > header.ResponseLength) { _trafficViewerFile.SaveResponse(request.Key, request.Value); } _thisSessionRequestCount++; } } }
private void UpdateRequest(object sender, EventArgs e) { try { _curReqInfo.PathVariables.Clear(); _curReqInfo.QueryVariables.Clear(); _curReqInfo.BodyVariables.Clear(); _curReqInfo.Cookies.Clear(); _curReqInfo.Headers = new HTTPHeaders(); var entities = _gridParameters.GetValues(); foreach (var entity in entities) { string[] values = entity.Split(Constants.VALUES_SEPARATOR.ToCharArray(), StringSplitOptions.RemoveEmptyEntries); if (values.Length == 3) { if (values[0].Equals(RequestLocation.Path.ToString(), StringComparison.OrdinalIgnoreCase)) { _curReqInfo.PathVariables[values[1]] = Utils.UrlEncode(values[2]); } else if (values[0].Equals(RequestLocation.Query.ToString(), StringComparison.OrdinalIgnoreCase)) { _curReqInfo.QueryVariables[values[1]] = Utils.UrlEncode(values[2]); } else if (values[0].Equals(RequestLocation.Body.ToString(), StringComparison.OrdinalIgnoreCase)) { if (_curIsBodyEncoded) { values[2] = Utils.UrlEncode(values[2]); } _curReqInfo.BodyVariables[values[1]] = values[2]; } else if (values[0].Equals(RequestLocation.Cookies.ToString(), StringComparison.OrdinalIgnoreCase)) { _curReqInfo.SetCookie(values[1], Utils.UrlEncode(values[2])); } else if (values[0].Equals(RequestLocation.Headers.ToString(), StringComparison.OrdinalIgnoreCase)) { _curReqInfo.Headers[values[1]] = values[2]; } } } _curAccessor.SaveRequest(_curReqId, _curReqInfo.ToArray()); } catch (Exception ex) { ErrorBox.ShowDialog(ex.Message); } }
private void AddRequest(ITrafficDataAccessor currentFile, Uri uri, string fullQuery, string format) { string request = String.Format(format, uri.AbsolutePath, fullQuery, uri.Host, uri.Port); HttpRequestInfo requestInfo = new HttpRequestInfo(request); TVRequestInfo tvReqInfo = new TVRequestInfo(); tvReqInfo.Description = Resources.UriParserDescription; tvReqInfo.RequestLine = HttpRequestInfo.GetRequestLine(request); tvReqInfo.ThreadId = "N/A"; tvReqInfo.RequestTime = DateTime.Now; tvReqInfo.IsHttps = String.Compare(uri.Scheme, "https", true) == 0; currentFile.AddRequestInfo(tvReqInfo); currentFile.SaveRequest(tvReqInfo.Id, requestInfo.ToArray(false)); }
/// <summary> /// Adds a request to the data accessor /// </summary> /// <param name="request"></param> private void AddHttpRequest(HttpRequestInfo request) { var reqInfo = new TVRequestInfo(); reqInfo.Host = request.Host; reqInfo.IsHttps = request.IsSecure; byte [] rawRequest = request.ToArray(); reqInfo.RequestLine = HttpRequestInfo.GetRequestLine(rawRequest); reqInfo.Description = "Script Explore"; var id = _curDataAccessor.AddRequestInfo(reqInfo); _curDataAccessor.SaveRequest(id, rawRequest); }
/// <summary> /// Sends the specified request info /// </summary> /// <param name="source"></param> /// <param name="info"></param> private void SendRequest(ITrafficDataAccessor source, TVRequestInfo info) { byte[] reqBytes = source.LoadRequestData(info.Id); string updatedRequest = PatternTracker.Instance.UpdateRequest(Constants.DefaultEncoding.GetString(reqBytes)); HttpRequestInfo reqInfo = new HttpRequestInfo(updatedRequest); reqInfo.IsSecure = info.IsHttps; _sessionIdHelper.UpdateSessionIds(reqInfo, _prevRequest, _prevResponse); info.RequestTime = DateTime.Now; //save the request that will be sent source.SaveRequest(info.Id, Constants.DefaultEncoding.GetBytes(updatedRequest)); try { _prevResponse = _httpClient.SendRequest(reqInfo); _prevRequest = reqInfo; //save the request and response if (_prevResponse != null) { info.ResponseTime = DateTime.Now; PatternTracker.Instance.UpdatePatternValues(_prevResponse); source.SaveResponse(info.Id, _prevResponse.ToArray()); } else { source.SaveResponse(info.Id, Constants.DefaultEncoding.GetBytes(_communicationError)); } } catch (Exception ex) { SdkSettings.Instance.Logger.Log(TraceLevel.Error, "Error playing back request {0}", ex.Message); source.SaveResponse(info.Id, Constants.DefaultEncoding.GetBytes(Resources.CommunicationError)); } }