Esempio n. 1
0
void RequestHeader::ParseHeaders(int fd) {
  int line_count = 0;
  // Loop through request headers.
  while (true) {
    if (!fd_util::WaitUntilReady(fd, 5.0)) {  // Wait max 5 secs.
      // Timed out or error.
      ok = false;
      return;
    }
    char buffer[1024];
    fd_util::ReadLine(fd, buffer, 1023);
    StringTrimEndNonAlphaNum(buffer);
    if (buffer[0] == '\0')
      break;
    ParseHttpHeader(buffer);
    line_count++;
    if (type == SIMPLE) {
      // Done!
      ILOG("Simple: Done parsing http request.");
      break;
    }
  }
  ILOG("finished parsing request.");
  ok = line_count > 1;
}
Esempio n. 2
0
void RequestHeader::ParseHeaders(net::InputSink *sink) {
	int line_count = 0;
	std::string line;
	while (sink->ReadLine(line)) {
		if (line.length() == 0) {
			// Blank line, this means end of headers.
			break;
		}

		ParseHttpHeader(line.c_str());
		line_count++;
		if (type == SIMPLE) {
			// Done!
			ILOG("Simple: Done parsing http request.");
			break;
		}
	}

	ILOG("finished parsing request.");
	ok = line_count > 1;
}
Esempio n. 3
0
//***************************************
//Method:    ProxyThread
//FullName:  ProxyThread
//Access:    public
//Returns:   unsigned int __stdcall
//Qualifier: 线程执行函数
//Parameter: LPVOID lpParameter
//****************************************
unsigned int __stdcall ProxyThread(LPVOID lpParameter)
{
	char Buffer[MAXSIZE];
	char *CacheBuffer;
	ZeroMemory(Buffer, MAXSIZE);

	SOCKADDR_IN clientAddr;
	int length = sizeof(SOCKADDR_IN);
	int recvSize;
	int ret;

	recvSize = recv(((ProxyParam*)lpParameter)->clientSocket, Buffer, MAXSIZE, 0);
	if (recvSize <= 0)
	{
		goto error;
	}

	HttpHeader* httpHeader = new HttpHeader();
	CacheBuffer = new char[recvSize + 1];
	ZeroMemory(CacheBuffer, recvSize + 1);
	memcpy(CacheBuffer, Buffer, recvSize);
	ParseHttpHeader(CacheBuffer, httpHeader);
	delete CacheBuffer;
	// 网址过滤
	
	if (!strcmp(httpHeader->host, "donghua.dmzj.com"))
	{
		printf("网站过滤\n");
		goto error;
	}
	
	/*
	if (!strcmp(httpHeader->host, "www.sohu.com"))
	{
		memcpy(httpHeader->host, "donghua.dmzj.com", MAXSIZE);
	}
	*/
	if (!ConnectToServer(&((ProxyParam*)lpParameter)->serverSocket, httpHeader->host))
	{
		goto error;
	}

	printf("代理连接主机 %s 成功\n", httpHeader->host);

	//将客户端发送的HTTP数据报文直接转发给目标服务器
	ret = send(((ProxyParam*)lpParameter)->serverSocket, Buffer, strlen(Buffer) + 1, 0);
	//等待目标服务器返回数据
	recvSize = recv(((ProxyParam*)lpParameter)->serverSocket, Buffer, MAXSIZE, 0);
	
	FILE *stream;
	fopen_s(&stream, "cache.txt", "w+");
	fprintf(stream, "%s", Buffer);
	fclose(stream);
	
	if (recvSize <= 0)
	{
		goto error;
	}

	//将目标服务器返回的数据直接转发给客户端
	ret = send(((ProxyParam*)lpParameter)->clientSocket, Buffer, sizeof(Buffer), 0);

	//错误处理
error:
	printf("关闭套接字\n");
	Sleep(200);
	closesocket(((ProxyParam*)lpParameter)->clientSocket);
	closesocket(((ProxyParam*)lpParameter)->serverSocket);
	delete lpParameter;
	//_endthreadex(0);
	return 0;
}