示例#1
0
void ProxyServer::process_request(boost::asio::ip::tcp::socket * socket, std::string const & message)
{
  vector<string>tokens;

  tokenizer(const_cast<string &>(message), tokens);

  if (tokens.size() > 0)
  {
    if (tokens[0] == "READ" && tokens.size() > 1)
    {
      std::cout << "Application Server - Message received from " << socket->remote_endpoint() << " - Message: " << message << std::endl;

      string res = readFunc(tokens[1]);
      socket->write_some(boost::asio::buffer(res));
    }
    else if (tokens[0] == "WRITE" && tokens.size() > 2)
    {
      std::cout << "Application Server - Message received from " << socket->remote_endpoint() << " - Message: " << message << std::endl;

      bool res = writeFunc(tokens[1], tokens[2]);
      socket->write_some(boost::asio::buffer(res ? string("WRITE_OK") : string("WRITE_FAIL")));
    }
    else
    {
      std::cout << "Application Server - Message received from " << socket->remote_endpoint() << " - Message: " << message << std::endl;

      socket->write_some(boost::asio::buffer(string("INVALID")));
    }
  }
}
示例#2
0
文件: http.cpp 项目: ifish12/WiiTweet
static int tcp_readln(const s32 s, char *buf, const u16 max_length)
{
	s32 res = -1;
	s32 ret;
	u64 start_time = gettime();
	u16 c = 0;

	while (c < max_length)
	{
		if (ticks_to_millisecs(diff_ticks(start_time, gettime())) > HTTP_TIMEOUT)
			break;

		ret = readFunc(s, &buf[c], 1);

		if (ret == -EAGAIN)
		{
			usleep(20 * 1000);
			continue;
		}

		if (ret <= 0)
			break;

		if (c > 0 && buf[c - 1] == '\r' && buf[c] == '\n')
		{
			res = 0;
			buf[c-1] = 0;
			break;
		}
		c++;
		start_time = gettime();
		usleep(100);
	}

 return res;
//return c;
}
示例#3
0
文件: http.cpp 项目: ifish12/WiiTweet
static u32 tcp_read(const s32 s, u8 *buffer, const u32 length, int chunked)
{
	char *p;
	u32 left, block, received, step=0;
	u64 t;
	s32 res;

	p = (char *)buffer;
	left = length;
	received = 0;

	char line[64];
	int chunksize;

	t = gettime();

	while (left || chunked)
	{
		if(chunked == 1){
			tcp_readln(s, line, 64);
			sscanf(line,"%X",&chunksize);
			if(chunksize == 0) break;
			left = chunksize + 2; //Read the \r\n
			chunked = 2;
			t = gettime();
		}

		if (ticks_to_millisecs(diff_ticks(t, gettime()))
				> TCP_BLOCK_RECV_TIMEOUT)
		{
			break;
		}

		block = left;
		if (block > TCP_RECV_SIZE)
			block = TCP_RECV_SIZE;

		res = readFunc(s, p, block);

		if (res == -EAGAIN)
		{
			usleep(20 * 1000);
			continue;
		}

		if(res<=0) break; 

		received += res;
		left -= res;
		if(left == 0 && chunked == 2){ chunked = 1; p -= 2; received -= 2; } //Overwrite \r\n
		p += res;
		usleep(1000);

		if ((received / TCP_BLOCK_SIZE) > step)
		{
			t = gettime ();
			step++;
		}
	}
	return received;
}