All pastes #674555 Raw Edit

Untitled

public text v1 · immutable
#674555 ·published 2007-08-29 10:45 UTC
rendered paste body
int request_get(string fileHash, string pieceHash, char* recv_buffer)
{
	ClientInfo client;

	string URI = "/cache/get.jsp?fileHash=" + fileHash + "&pieceHash=" + pieceHash;

	HttpHeader header(GET, URI);
	header.Add(header.p.Accept, "*/*");
	header.Add(header.p.AcceptLanguage, "en-us");
	header.Add(header.p.UserAgent, client.UserAgent);
	header.Add(header.p.Host, "p-cache.veoh.com");
	header.Add(header.p.Cookie, ("VEOH_GUIDE_AUTH=" + client.authCookie + " ACEGI_SECURITY_HASHED_REMEMBER_ME_COOKIE=" + client.securityCookie));

	string http_buffer = header.Create();

	cout << http_buffer;

	int s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
	/*
	** Non-blocking is a bad idea, eats CPU	
	if(fcntl(s, F_SETFL, O_NONBLOCK) == -1) {
		cout << "Error occurred in fcntl!" << endl;
		#ifdef _WIN32
			closesocket(s);
		#else
			close(s);
		#endif //_WIN32
		exit(0);
	}
	if(fcntl(s, F_SETFL, O_ASYNC) == -1) {
		cout << "Error occurred in fcntl!" << endl;
		#ifdef _WIN32
			closesocket(s);
		#else
			close(s);
		#endif //_WIN32
		exit(0);
	}
	*/
	veoh = gethostbyname("p-cache.veoh.com");	
	
	sockaddr_in veohweb;
	veohweb.sin_addr.s_addr = inet_addr(inet_ntoa(*((struct in_addr *)veoh->h_addr)));
	veohweb.sin_port = htons(80);
	veohweb.sin_family = AF_INET;
	memset(veohweb.sin_zero, '\0', sizeof veohweb.sin_zero);
       
	if (connect(s, (sockaddr*)&veohweb, sizeof(veohweb))==-1)
		cout << "Error connecting to Veoh" << endl;
	
	int bsent = send(s, http_buffer.c_str(), http_buffer.size(), 0);
	
	if (bsent==-1)
		cout << "Error sending request to Veoh" << endl;
	else
		cout << "Request sent to Veoh" << endl;

	int brecv = 0;

	int data = brecv;
	
	fd_set readfds;

	struct timeval tv;

    	FD_ZERO(&readfds);
    	FD_SET(s, &readfds);

	//recv_buffer[header_length+content_length+1] = '\0';
	
	int status = 0;

	do {    
		tv.tv_sec = 2;
	    	tv.tv_usec = 500000;

		status = select(s+1, &readfds, NULL, NULL, &tv);
		if (status == -1) {
			cout << "Error in select!" << endl;
			break;
		} else if(status == 0) {
			break;
		} else {
        		brecv = recv(s, recv_buffer, 1000, 0);
			if(brecv != -1) {
				data += brecv;
				for(int a = 0; a < brecv; ++a)
					cout << recv_buffer[a];
			} else {
				cout << "Error receiving from Veoh" << endl;
			}
		}
	} while(brecv !=  0);	

	cout << endl;	

	#ifdef _WIN32
		closesocket(s);
	#else
		close(s);
	#endif //_WIN32
	
	return brecv;
}