Esempio n. 1
0
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;	
}
Esempio n. 4
0
/*----------------------------------------------------------------------------*/
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;
}