@Override public String requestId() { return harEntry.getId(); }
@Override public String id() { return harEntry.getId(); }
@Override public void proxyToServerConnectionQueued() { Log.e("Capture", "proxyToServerConnectionQueued " + harEntry.getId()); this.connectionQueuedNanos = System.nanoTime(); }
@Override public void proxyToServerConnectionStarted() { Log.e("Capture", "proxyToServerConnectionStarted " + harEntry.getId()); this.connectionStartedNanos = System.nanoTime(); }
protected void captureRequestHeaders(HttpRequest httpRequest) { Log.e("InnerHandle", "captureRequestHeaders " + harEntry.getId()); HttpHeaders headers = httpRequest.headers(); captureHeaders(headers); }
/** * Adds the size of this httpContent to the requestBodySize. * * @param httpContent HttpContent to size */ protected void captureRequestSize(HttpContent httpContent) { Log.e("InnerHandle", "captureRequestSize " + harEntry.getId()); ByteBuf bufferedContent = httpContent.content(); int contentSize = bufferedContent.readableBytes(); requestBodySize.addAndGet(contentSize); }
/** * Adds the size of this httpContent to the responseBodySize. * * @param httpContent HttpContent to size */ protected void captureResponseSize(HttpContent httpContent) { Log.e("InnerHandle", "captureResponseSize " + harEntry.getId()); ByteBuf bufferedContent = httpContent.content(); int contentSize = bufferedContent.readableBytes(); responseBodySize.addAndGet(contentSize); proxyManager.dataReceived(contentSize); }
@Override public void proxyToServerRequestSending() { Log.e("Capture", "proxyToServerRequestSending " + harEntry.getId()); this.sendStartedNanos = System.nanoTime(); // if the hostname was not resolved (and thus the IP address populated in the har) during this request, populate the IP address from the cache if (!addressResolved) { populateAddressFromCache(capturedOriginalRequest); } proxyManager.requestWillBeSent(harRequest); }
protected void captureTrailingHeaders(LastHttpContent lastHttpContent) { Log.e("InnerHandle", "captureTrailingHeaders " + harEntry.getId()); HttpHeaders headers = lastHttpContent.trailingHeaders(); captureHeaders(headers); }
protected void captureHeaders(HttpHeaders headers) { Log.e("InnerHandle", "captureHeaders " + harEntry.getId()); for (Map.Entry<String, String> header : headers.entries()) { harRequest.getRequest().getHeaders().add(new HarNameValuePair(header.getKey(), header.getValue())); harRequest.addHeader(header.getKey(), header.getValue()); } }
protected void captureResponseHeaders(HttpResponse httpResponse) { Log.e("InnerHandle", "captureResponseHeaders " + harEntry.getId()); HttpHeaders headers = httpResponse.headers(); for (Map.Entry<String, String> header : headers.entries()) { harResponse.getResponse().getHeaders().add(new HarNameValuePair(header.getKey(), header.getValue())); harResponse.addHeader(header.getKey(), header.getValue()); } }
protected void captureRedirectUrl(HttpResponse httpResponse) { Log.e("InnerHandle", "captureRedirectUrl " + harEntry.getId()); String locationHeaderValue = HttpHeaders.getHeader(httpResponse, HttpHeaders.Names.LOCATION); if (locationHeaderValue != null) { harResponse.getResponse().setRedirectURL(locationHeaderValue); } }
@Override public void proxyToServerConnectionSucceeded(ChannelHandlerContext serverCtx) { Log.e("Capture", "proxyToServerConnectionSucceeded " + harEntry.getId()); long connectionSucceededTimeNanos = System.nanoTime(); // make sure the previous timestamp was captured, to avoid setting an absurd value in the har (see serverToProxyResponseReceiving()) if (connectionStartedNanos > 0L) { harEntry.getTimings().setConnect(connectionSucceededTimeNanos - connectionStartedNanos, TimeUnit.NANOSECONDS); } else { harEntry.getTimings().setConnect(0L, TimeUnit.NANOSECONDS); } }
@Override public InetSocketAddress proxyToServerResolutionStarted(String resolvingServerHostAndPort) { Log.e("Capture", "proxyToServerResolutionStarted " + harEntry.getId()); dnsResolutionStartedNanos = System.nanoTime(); // resolution started means the connection is no longer queued, so populate 'blocked' time if (connectionQueuedNanos > 0L) { harEntry.getTimings().setBlocked(dnsResolutionStartedNanos - connectionQueuedNanos, TimeUnit.NANOSECONDS); } else { harEntry.getTimings().setBlocked(0L, TimeUnit.NANOSECONDS); } return null; }
protected void captureResponseMimeType(HttpResponse httpResponse) { Log.e("InnerHandle", "captureResponseMimeType " + harEntry.getId()); String contentType = HttpHeaders.getHeader(httpResponse, HttpHeaders.Names.CONTENT_TYPE); // don't set the mimeType to null, since mimeType is a required field if (contentType != null) { harResponse.getResponse().getContent().setMimeType(contentType); } }
@Override public void proxyToServerRequestSent() { Log.e("Capture", "proxyToServerRequestSent " + harEntry.getId()); this.sendFinishedNanos = System.nanoTime(); // make sure the previous timestamp was captured, to avoid setting an absurd value in the har (see serverToProxyResponseReceiving()) if (sendStartedNanos > 0L) { harEntry.getTimings().setSend(sendFinishedNanos - sendStartedNanos, TimeUnit.NANOSECONDS); } else { harEntry.getTimings().setSend(0L, TimeUnit.NANOSECONDS); } proxyManager.dataSent(harRequest); }
@Override public void proxyToServerResolutionFailed(String hostAndPort) { Log.e("Capture", "proxyToServerResolutionFailed " + harEntry.getId()); HarResponse response = HarCaptureUtil.createHarResponseForFailure(); harEntry.setResponse(response); response.setError(HarCaptureUtil.getResolutionFailedErrorMessage(hostAndPort)); // record the amount of time we attempted to resolve the hostname in the HarTimings object if (dnsResolutionStartedNanos > 0L) { harEntry.getTimings().setDns(System.nanoTime() - dnsResolutionStartedNanos, TimeUnit.NANOSECONDS); } }
protected void captureRequestHeaderSize(HttpRequest httpRequest) { Log.e("InnerHandle", "captureRequestHeaderSize " + harEntry.getId()); String requestLine = httpRequest.getMethod().toString() + ' ' + httpRequest.getUri() + ' ' + httpRequest.getProtocolVersion().toString(); // +2 => CRLF after status line, +4 => header/data separation long requestHeadersSize = requestLine.length() + 6; HttpHeaders headers = httpRequest.headers(); requestHeadersSize += BrowserMobHttpUtil.getHeaderSize(headers); harRequest.getRequest().setHeadersSize(requestHeadersSize); }
@Override public void proxyToServerConnectionFailed() { Log.e("Capture", "proxyToServerConnectionFailed " + harEntry.getId()); HarResponse response = HarCaptureUtil.createHarResponseForFailure(); harEntry.setResponse(response); response.setError(HarCaptureUtil.getConnectionFailedErrorMessage()); // record the amount of time we attempted to connect in the HarTimings object if (connectionStartedNanos > 0L) { harEntry.getTimings().setConnect(System.nanoTime() - connectionStartedNanos, TimeUnit.NANOSECONDS); } proxyManager.httpExchangeFailed(response.getError()); }
protected void captureResponseHeaderSize(HttpResponse httpResponse) { Log.e("InnerHandle", "captureResponseHeaderSize " + harEntry.getId()); String statusLine = httpResponse.getProtocolVersion().toString() + ' ' + httpResponse.getStatus().toString(); // +2 => CRLF after status line, +4 => header/data separation long responseHeadersSize = statusLine.length() + 6; HttpHeaders headers = httpResponse.headers(); responseHeadersSize += BrowserMobHttpUtil.getHeaderSize(headers); harResponse.getResponse().setHeadersSize(responseHeadersSize); }