< prev index next >
src/java.httpclient/share/classes/java/net/http/Http1Request.java
Print this page
*** 28,37 ****
--- 28,38 ----
import java.nio.ByteBuffer;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.net.InetSocketAddress;
+ import java.net.http.HttpConnection.Mode;
import java.nio.charset.StandardCharsets;
import java.util.function.LongConsumer;
import static java.nio.charset.StandardCharsets.US_ASCII;
/**
*** 46,56 ****
final HttpConnection chan;
// Multiple buffers are used to hold different parts of request
// See line 206 and below for description
final ByteBuffer[] buffers;
final HttpRequest.BodyProcessor requestProc;
! final HttpHeadersImpl userHeaders, systemHeaders;
final LongConsumer flowController;
boolean streaming;
long contentLength;
Http1Request(HttpRequestImpl request, HttpConnection connection)
--- 47,58 ----
final HttpConnection chan;
// Multiple buffers are used to hold different parts of request
// See line 206 and below for description
final ByteBuffer[] buffers;
final HttpRequest.BodyProcessor requestProc;
! final HttpHeaders userHeaders;
! final HttpHeadersImpl systemHeaders;
final LongConsumer flowController;
boolean streaming;
long contentLength;
Http1Request(HttpRequestImpl request, HttpConnection connection)
*** 89,102 ****
buffers[1] = ByteBuffer.wrap(headers.getBytes(StandardCharsets.US_ASCII));
}
private void collectHeaders1(StringBuilder sb,
HttpRequestImpl request,
! HttpHeadersImpl headers)
throws IOException
{
! Map<String,List<String>> h = headers.directMap();
Set<Map.Entry<String,List<String>>> entries = h.entrySet();
for (Map.Entry<String,List<String>> entry : entries) {
String key = entry.getKey();
sb.append(key).append(": ");
--- 91,104 ----
buffers[1] = ByteBuffer.wrap(headers.getBytes(StandardCharsets.US_ASCII));
}
private void collectHeaders1(StringBuilder sb,
HttpRequestImpl request,
! HttpHeaders headers)
throws IOException
{
! Map<String,List<String>> h = headers.map();
Set<Map.Entry<String,List<String>>> entries = h.entrySet();
for (Map.Entry<String,List<String>> entry : entries) {
String key = entry.getKey();
sb.append(key).append(": ");
*** 110,121 ****
}
sb.append("\r\n");
}
}
- private static final int BUFSIZE = 64 * 1024; // TODO: configurable?
-
private String getPathAndQuery(URI uri) {
String path = uri.getPath();
String query = uri.getQuery();
if (path == null || path.equals("")) {
path = "/";
--- 112,121 ----
*** 132,141 ****
--- 132,160 ----
private String authorityString(InetSocketAddress addr) {
return addr.getHostString() + ":" + addr.getPort();
}
+ private String hostString() {
+ URI uri = request.uri();
+ int port = uri.getPort();
+ String host = uri.getHost();
+
+ boolean defaultPort;
+ if (port == -1)
+ defaultPort = true;
+ else if (request.secure())
+ defaultPort = port == 443;
+ else
+ defaultPort = port == 80;
+
+ if (defaultPort)
+ return host;
+ else
+ return host + ":" + Integer.toString(port);
+ }
+
private String requestURI() {
URI uri = request.uri();
String method = request.method();
if ((request.proxy() == null && !method.equals("CONNECT"))
*** 159,168 ****
--- 178,188 ----
chan.write(buffers, 0, 2);
}
void sendRequest() throws IOException {
collectHeaders();
+ chan.configureMode(Mode.BLOCKING);
if (contentLength == 0) {
chan.write(buffers, 0, 2);
} else if (contentLength > 0) {
writeFixedContent(true);
} else {
*** 194,204 ****
String cmd = sb.toString();
buffers[0] = ByteBuffer.wrap(cmd.getBytes(StandardCharsets.US_ASCII));
URI uri = request.uri();
if (uri != null) {
! systemHeaders.setHeader("Host", uri.getHost());
}
if (request == null) {
// this is not a user request. No content
contentLength = 0;
} else {
--- 214,224 ----
String cmd = sb.toString();
buffers[0] = ByteBuffer.wrap(cmd.getBytes(StandardCharsets.US_ASCII));
URI uri = request.uri();
if (uri != null) {
! systemHeaders.setHeader("Host", hostString());
}
if (request == null) {
// this is not a user request. No content
contentLength = 0;
} else {
< prev index next >