@Override public TestElement createTestElement() { AjpSampler sampler = new AjpSampler(); modifyTestElement(sampler); return sampler; }
private int getHeaderSize(String method, URL url) { HeaderManager headers = getHeaderManager(); CookieManager cookies = getCookieManager(); AuthManager auth = getAuthManager(); int hsz = 1; // Host always if(method.equals(HTTPConstants.POST)) { HTTPFileArg[] hfa = getHTTPFiles(); if(hfa.length > 0) { hsz += 3; } else { hsz += 2; } } if(headers != null) { hsz += headers.size(); } if(cookies != null) { hsz += cookies.getCookieCount(); } if(auth != null) { String authHeader = auth.getAuthHeaderForURL(url); if(authHeader != null) { ++hsz; } } return hsz; }
private int getMessage() throws IOException { InputStream is = channel.getInputStream(); inpos = 0; int nr = is.read(inbuf, inpos, 4); if(nr != 4) { channel.close(); channel = null; throw new IOException("Connection Closed: "+nr); } getInt(); int len = getInt(); int toRead = len; int cpos = inpos; while(toRead > 0) { nr = is.read(inbuf, cpos, toRead); cpos += nr; toRead -= nr; } return getByte(); }
private String setConnectionHeaders(URL url, String host, String method) throws IOException { HeaderManager headers = getHeaderManager(); AuthManager auth = getAuthManager(); StringBuilder hbuf = new StringBuilder(); setInt(0xA00b); //Host setString(host); if(headers != null) { for (JMeterProperty jMeterProperty : headers.getHeaders()) { String v = header.getValue(); hbuf.append(n).append(COLON_SPACE).append(v).append(NEWLINE); int hc = translateHeader(n); if(hc > 0) { setInt(hc+AJP_HEADER_BASE); } else { setString(n); setString(v); HTTPFileArg[] hfa = getHTTPFiles(); if(hfa.length > 0) { HTTPFileArg fa = hfa[0]; setString(HTTPConstants.HEADER_CONTENT_DISPOSITION); setString("form-data; name=\""+encode(fa.getParamName())+ "\"; filename=\"" + encode(fn) +"\""); //$NON-NLS-1$ //$NON-NLS-2$ String mt = fa.getMimeType(); hbuf.append(HTTPConstants.HEADER_CONTENT_TYPE).append(COLON_SPACE).append(mt).append(NEWLINE);
res.setHTTPMethod(method); outpos = 4; setByte((byte)2); if(method.equals(HTTPConstants.POST)) { setByte((byte)4); } else { setByte((byte)2); setString("HTTP/1.0");//$NON-NLS-1$ } else { setString(HTTPConstants.HTTP_1_1); setString(url.getPath()); setString(localAddress); setString(localName); setString(host); setInt(url.getDefaultPort()); setByte(HTTPConstants.PROTOCOL_HTTPS.equalsIgnoreCase(scheme) ? (byte)1 : (byte)0); setInt(getHeaderSize(method, url)); String hdr = setConnectionHeaders(url, host, method); res.setRequestHeaders(hdr); res.setCookies(setConnectionCookies(url, getCookieManager())); String query = url.getQuery(); if (query != null) { setByte((byte)0x05); // Marker for query string attribute setString(query); setByte((byte)0xff); // More general attributes not supported
private void parseHeaders(HTTPSampleResult res) throws IOException { int status = getInt(); res.setResponseCode(Integer.toString(status)); res.setSuccessful(200 <= status && status <= 399); String msg = getString(); res.setResponseMessage(msg); int nh = getInt(); StringBuilder sb = new StringBuilder(); sb.append(HTTPConstants.HTTP_1_1 ).append(status).append(" ").append(msg).append(NEWLINE);//$NON-NLS-1$//$NON-NLS-2$ for(int i=0; i < nh; i++) { String name; int thn = peekInt(); if((thn & 0xff00) == AJP_HEADER_BASE) { name = HEADER_TRANS_ARRAY[(thn&0xff)-1]; getInt(); // we need to use up the int now } else { name = getString(); String value = getString(); if(HTTPConstants.HEADER_CONTENT_TYPE.equalsIgnoreCase(name)) { res.setContentType(value); res.setEncodingAndType(value); } else if(HTTPConstants.HEADER_SET_COOKIE.equalsIgnoreCase(name)) { CookieManager cookies = getCookieManager(); if(cookies != null) { cookies.addCookieFromHeader(value, res.getURL());
@Override protected HTTPSampleResult sample(URL url, String method, boolean frd, int fd) { HTTPSampleResult res = new HTTPSampleResult(); res.setSampleLabel(url.toExternalForm()); res.sampleStart(); try { setupConnection(url, method, res); activeChannel = channel; execute(method, res); res.sampleEnd(); res.setResponseData(responseData.toByteArray()); return res; } catch(IOException iex) { res.sampleEnd(); lastPort = -1; // force reopen on next sample channel = null; return errorResult(iex, res); } finally { activeChannel = null; JOrphanUtils.closeQuietly(body); body = null; } }