Added more logging, and use parseAddress to create server socket addr.
This commit is contained in:
parent
22e8fa9b70
commit
febce5eb8d
|
@ -20,8 +20,10 @@ class TaskPoolHttp1Transport : Http1Transport {
|
|||
override void runServer() {
|
||||
Socket serverSocket = new TcpSocket();
|
||||
serverSocket.setOption(SocketOptionLevel.SOCKET, SocketOption.REUSEADDR, 1);
|
||||
serverSocket.bind(new InternetAddress("127.0.0.1", port));
|
||||
serverSocket.bind(parseAddress("127.0.0.1", port));
|
||||
debugF!"Bound the server socket to %s"(serverSocket.localAddress);
|
||||
serverSocket.listen(1024);
|
||||
debug_("Server is now listening.");
|
||||
|
||||
while (super.isRunning) {
|
||||
try {
|
||||
|
|
|
@ -93,7 +93,10 @@ version(unittest) {
|
|||
string statusLine = headerLines[0];
|
||||
string[] statusLineParts = statusLine.split(" ");
|
||||
assert(statusLineParts[0] == "HTTP/1.1");
|
||||
assert(statusLineParts[1] == "200");
|
||||
assert(
|
||||
statusLineParts[1] == "200",
|
||||
format!"Expected status line's HTTP code to be 200, but it was \"%s\"."(statusLineParts[1])
|
||||
);
|
||||
assert(statusLineParts[2] == "OK");
|
||||
|
||||
info("Testing is complete. Stopping the server.");
|
||||
|
@ -142,6 +145,7 @@ void handleClient(Socket clientSocket, HttpRequestHandler requestHandler) {
|
|||
debugF!"%s %s -> %d %s"(request.method, request.url, response.status.code, response.status.text);
|
||||
// If the response's headers aren't flushed yet, write them now.
|
||||
if (!responseOutputStream.areHeadersFlushed()) {
|
||||
trace("Flushing response headers because they weren't flushed by the request handler.");
|
||||
auto writeResult = responseOutputStream.writeHeaders();
|
||||
if (writeResult.hasError) {
|
||||
errorF!"Failed to write response headers: %s"(writeResult.error.message);
|
||||
|
|
|
@ -3,6 +3,7 @@ module handy_http_transport.response_output_stream;
|
|||
import handy_http_transport.helpers : writeUIntToBuffer;
|
||||
import handy_http_primitives : ServerHttpResponse;
|
||||
import streams;
|
||||
import slf4d;
|
||||
|
||||
/**
|
||||
* A wrapper around a byte output stream that's used for writing HTTP response
|
||||
|
@ -61,6 +62,7 @@ struct HttpResponseOutputStream(S) if (isByteOutputStream!S) {
|
|||
if (headersFlushed) {
|
||||
return StreamResult(0); // No need to write again.
|
||||
}
|
||||
debug_("Flushing HTTP status and headers to the output stream.");
|
||||
headersFlushed = true;
|
||||
size_t idx = 0;
|
||||
char[6] statusCodeBuffer; // Normal HTTP codes are 3 digits, but this leaves room for extensions.
|
||||
|
@ -69,9 +71,11 @@ struct HttpResponseOutputStream(S) if (isByteOutputStream!S) {
|
|||
StreamResult r = outputStream.writeToStream(cast(ubyte[]) "HTTP/1.1 ");
|
||||
if (r.hasError) return r;
|
||||
size_t writeCount = r.count;
|
||||
traceF!"Wrote HTTP version. Bytes written: %d."(writeCount);
|
||||
r = outputStream.writeToStream(cast(ubyte[]) statusCodeBuffer[0..idx]);
|
||||
if (r.hasError) return r;
|
||||
writeCount += r.count;
|
||||
traceF!"Wrote status code. Bytes written: %d."(writeCount);
|
||||
r = outputStream.writeToStream([' ']);
|
||||
if (r.hasError) return r;
|
||||
writeCount += r.count;
|
||||
|
@ -81,9 +85,11 @@ struct HttpResponseOutputStream(S) if (isByteOutputStream!S) {
|
|||
r = outputStream.writeToStream(['\r', '\n']);
|
||||
if (r.hasError) return r;
|
||||
writeCount += r.count;
|
||||
traceF!"Wrote HTTP status line. Bytes written: %d."(writeCount);
|
||||
|
||||
foreach (headerName; response.headers.keys) {
|
||||
// Write the header name.
|
||||
traceF!"Writing header name: %s"(headerName);
|
||||
r = outputStream.writeToStream(cast(ubyte[]) headerName);
|
||||
if (r.hasError) return r;
|
||||
writeCount += r.count;
|
||||
|
@ -105,6 +111,7 @@ struct HttpResponseOutputStream(S) if (isByteOutputStream!S) {
|
|||
r = outputStream.writeToStream(['\r', '\n']);
|
||||
if (r.hasError) return r;
|
||||
writeCount += r.count;
|
||||
traceF!"Wrote header %s: %s"(headerName, headerValues);
|
||||
}
|
||||
r = outputStream.writeToStream(['\r', '\n']); // Trailing CLRF before the body.
|
||||
if (r.hasError) return r;
|
||||
|
|
Loading…
Reference in New Issue