diff --git a/source/handy_http_transport/http1/task_pool.d b/source/handy_http_transport/http1/task_pool.d index 92769b7..2f989dd 100644 --- a/source/handy_http_transport/http1/task_pool.d +++ b/source/handy_http_transport/http1/task_pool.d @@ -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 { diff --git a/source/handy_http_transport/http1/transport.d b/source/handy_http_transport/http1/transport.d index e57edde..4d8a53d 100644 --- a/source/handy_http_transport/http1/transport.d +++ b/source/handy_http_transport/http1/transport.d @@ -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); diff --git a/source/handy_http_transport/response_output_stream.d b/source/handy_http_transport/response_output_stream.d index 3fee831..14ef71b 100644 --- a/source/handy_http_transport/response_output_stream.d +++ b/source/handy_http_transport/response_output_stream.d @@ -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;