int ClientService::handle_input(ACE_HANDLE fd /* = ACE_INVALID_HANDLE */) { if ( fd != get_handle() ) { ND_DEBUG("[HTTP][Conn %07d] Received input for unmanaged handle.\n"); return 0; } ssize_t recv_cnt; // ACE_Time_Value zeroTime(ACE_Time_Value::zero); /* while ( (recv_cnt = sock_.recv(buffer_, buflen_)) > 0 ) { ND_DEBUG("[HTTP][Conn %07d] Received %d octets of request data.\n", _connectionNumber, recv_cnt); req_.addData(buffer_, recv_cnt); } int closeErr = errno; if (recv_cnt < 0 && closeErr != EWOULDBLOCK) { ND_DEBUG("[HTTP][Conn %07d] Connection closed to %s. %p.\n", _connectionNumber, peer_name_, "Reason"); req_.clear(); return -1; } */ if ( (recv_cnt = sock_.recv(buffer_, buflen_)) < 1 ) { ND_DEBUG("[HTTP][Conn %07d] Connection closed to %s. %p.\n", _connectionNumber, peer_name_, "Reason"); req_.clear(); return -1; } ND_DEBUG("[HTTP][Conn %07d] Received %d octets of request data.\n", _connectionNumber, recv_cnt); req_.addData(buffer_, recv_cnt); // std::string reqStr(req_.getAsString()); try { req_.parse(); } catch (const nd_error& e) { ND_CRITICAL("[HTTP][Conn %07d] %s\n", _connectionNumber, e.what()); req_.clear(); return 0; } // ND_DEBUG("[HTTP][Conn %07d] Received %d-octet request:\n%s\n", _connectionNumber, req_.getRequestLength(), reqStr.c_str()); if (req_.isComplete()) { HttpResponse response; httpManager::instance()->handleRequest(req_, response); string responseStr = response.makeClientStr((req_.getMethod() != HttpRequest::MethodHEAD)); ND_DEBUG("[HTTP][Conn %07d] Sending response (%d %s, %s, %d octet contents).\n", _connectionNumber, response.getStatusCode(), response.getStatusStr().c_str(), response.getContentType().c_str(), response.getContent().length()); sock_.send(responseStr.c_str(), responseStr.length()); double ver = req_.getProtocolVersion(); req_.clear(); if ( ver == 1.0 ) { ND_DEBUG("[HTTP][Conn %07d] Closing HTTP 1.0 connection.\n", _connectionNumber); return -1; } } else { if ( req_.hasContent() ) ND_DEBUG("[HTTP][Conn %07d] Received %d octets of %d expected, waiting for more.\n", _connectionNumber, req_.getContentLength(), req_.getReportedContentLength()); } return 0; }