std::string RDMReply::ToString() const { std::ostringstream str; str << StatusCodeToString(m_status_code); if (m_response.get()) { str << ": " << *m_response.get(); } return str.str(); }
//----------------------------------------------------------------------// bool CActivFeedConnection::Request(QuoteRequestPtr spRequest, QuoteAtomPtr& spQuote) { clock_t start = clock(); StatusCode statusCode = m_Gateway.Request(spRequest, spQuote); clock_t finish = clock(); bool result = (statusCode == STATUS_CODE_SUCCESS); if (result) { LOG4CPLUS_INFO(ProviderLog, "Subscribe (single) done (" << finish - start << " ms.)"); } else { LOG4CPLUS_ERROR(ProviderLog, "Subscribe (single) failed. StatusCode = " << statusCode << " (" << StatusCodeToString(statusCode) << ")"); } return result; }
//----------------------------------------------------------------------// bool CActivFeedConnection::SubscribeMultiple(CRequestVector& request) { clock_t start = clock(); StatusCode statusCode = m_Gateway.SubscribeMultiple(request); clock_t finish = clock(); bool result = (statusCode == STATUS_CODE_SUCCESS); if (result) { LOG4CPLUS_INFO(ProviderLog, "Subscribe multiple done (" << finish - start << " ms.)"); } else { LOG4CPLUS_ERROR(ProviderLog, "Subscribe multiple failed. StatusCode = " << statusCode << " (" << StatusCodeToString(statusCode) << ")"); } return result; }
/*----------------------------------------------------------------------------*/ static int HandleReadEvent(struct thread_context *ctx, int sockid, struct server_vars *sv) { struct mtcp_epoll_event ev; char buf[HTTP_HEADER_LEN]; char url[URL_LEN]; char response[HTTP_HEADER_LEN]; int scode; // status code time_t t_now; char t_str[128]; char keepalive_str[128]; int rd; int i; int len; int sent; /* HTTP request handling */ rd = mtcp_read(ctx->mctx, sockid, buf, HTTP_HEADER_LEN); if (rd <= 0) { return rd; } memcpy(sv->request + sv->recv_len, (char *)buf, MIN(rd, HTTP_HEADER_LEN - sv->recv_len)); sv->recv_len += rd; //sv->request[rd] = '\0'; //fprintf(stderr, "HTTP Request: \n%s", request); sv->request_len = find_http_header(sv->request, sv->recv_len); if (sv->request_len <= 0) { TRACE_ERROR("Socket %d: Failed to parse HTTP request header.\n" "read bytes: %d, recv_len: %d, " "request_len: %d, strlen: %ld, request: \n%s\n", sockid, rd, sv->recv_len, sv->request_len, strlen(sv->request), sv->request); return rd; } http_get_url(sv->request, sv->request_len, url, URL_LEN); TRACE_APP("Socket %d URL: %s\n", sockid, url); sprintf(sv->fname, "%s%s", www_main, url); TRACE_APP("Socket %d File name: %s\n", sockid, sv->fname); sv->keep_alive = FALSE; if (http_header_str_val(sv->request, "Connection: ", strlen("Connection: "), keepalive_str, 128)) { if (strstr(keepalive_str, "Keep-Alive")) { sv->keep_alive = TRUE; } else if (strstr(keepalive_str, "Close")) { sv->keep_alive = FALSE; } } /* Find file in cache */ scode = 404; for (i = 0; i < nfiles; i++) { if (strcmp(sv->fname, fcache[i].fullname) == 0) { sv->fsize = fcache[i].size; sv->fidx = i; scode = 200; break; } } TRACE_APP("Socket %d File size: %ld (%ldMB)\n", sockid, sv->fsize, sv->fsize / 1024 / 1024); /* Response header handling */ time(&t_now); strftime(t_str, 128, "%a, %d %b %Y %X GMT", gmtime(&t_now)); if (sv->keep_alive) sprintf(keepalive_str, "Keep-Alive"); else sprintf(keepalive_str, "Close"); sprintf(response, "HTTP/1.1 %d %s\r\n" "Date: %s\r\n" "Server: Webserver on Middlebox TCP (Ubuntu)\r\n" "Content-Length: %ld\r\n" "Connection: %s\r\n\r\n", scode, StatusCodeToString(scode), t_str, sv->fsize, keepalive_str); len = strlen(response); TRACE_APP("Socket %d HTTP Response: \n%s", sockid, response); sent = mtcp_write(ctx->mctx, sockid, response, len); TRACE_APP("Socket %d Sent response header: try: %d, sent: %d\n", sockid, len, sent); assert(sent == len); sv->rspheader_sent = TRUE; ev.events = MTCP_EPOLLIN | MTCP_EPOLLOUT; ev.data.sockid = sockid; mtcp_epoll_ctl(ctx->mctx, ctx->ep, MTCP_EPOLL_CTL_MOD, sockid, &ev); SendUntilAvailable(ctx, sockid, sv); return rd; }