http::response facebook_client::flap( const int request_type, std::string* request_data, std::string* request_get_data ) { NETLIBHTTPREQUEST nlhr = {sizeof( NETLIBHTTPREQUEST )}; nlhr.requestType = choose_method( request_type ); std::string url = choose_request_url( request_type, request_data, request_get_data ); nlhr.szUrl = (char*)url.c_str( ); nlhr.flags = NLHRF_HTTP11 | NLHRF_NODUMP | choose_security_level( request_type ); nlhr.headers = get_request_headers( request_type, &nlhr.headersCount ); switch (request_type) { case FACEBOOK_REQUEST_MESSAGES_RECEIVE: nlhr.timeout = 1000 * 65; break; case FACEBOOK_REQUEST_MESSAGE_SEND: nlhr.timeout = 1000 * 10; break; default: nlhr.timeout = 1000 * 15; break; } if ( request_data != NULL ) { nlhr.pData = (char*)(*request_data).c_str(); nlhr.dataLength = (int)request_data->length( ); } parent->Log("@@@@@ Sending request to '%s'", nlhr.szUrl); switch ( request_type ) { case FACEBOOK_REQUEST_LOGIN: nlhr.nlc = NULL; break; case FACEBOOK_REQUEST_MESSAGES_RECEIVE: nlhr.nlc = hMsgCon; nlhr.flags |= NLHRF_PERSISTENT; break; default: WaitForSingleObject(fcb_conn_lock_, INFINITE); nlhr.nlc = hFcbCon; nlhr.flags |= NLHRF_PERSISTENT; break; } NETLIBHTTPREQUEST* pnlhr = ( NETLIBHTTPREQUEST* )CallService( MS_NETLIB_HTTPTRANSACTION, (WPARAM)handle_, (LPARAM)&nlhr ); utils::mem::detract(nlhr.headers[3].szValue); utils::mem::detract(nlhr.headers); http::response resp; switch ( request_type ) { case FACEBOOK_REQUEST_LOGIN: case FACEBOOK_REQUEST_SETUP_MACHINE: break; case FACEBOOK_REQUEST_MESSAGES_RECEIVE: hMsgCon = pnlhr ? pnlhr->nlc : NULL; break; default: ReleaseMutex(fcb_conn_lock_); hFcbCon = pnlhr ? pnlhr->nlc : NULL; break; } if ( pnlhr != NULL ) { parent->Log("@@@@@ Got response with code %d", pnlhr->resultCode); store_headers( &resp, pnlhr->headers, pnlhr->headersCount ); resp.code = pnlhr->resultCode; resp.data = pnlhr->pData ? pnlhr->pData : ""; CallService(MS_NETLIB_FREEHTTPREQUESTSTRUCT, 0, (LPARAM)pnlhr); } else { parent->Log("!!!!! No response from server (time-out)"); resp.code = HTTP_CODE_FAKE_DISCONNECTED; // Better to have something set explicitely as this value // is compaired in all communication requests } if (DBGetContactSettingByte( NULL, parent->m_szModuleName, FACEBOOK_KEY_VALIDATE_RESPONSE, 0 ) == 1) validate_response(&resp); return resp; }
http::response Omegle_client::flap( const int request_type, std::string* request_data, std::string* get_data ) { NETLIBHTTPREQUEST nlhr = {sizeof( NETLIBHTTPREQUEST )}; nlhr.requestType = choose_method( request_type ); std::string url = choose_request_url( request_type, request_data, get_data ); nlhr.szUrl = (char*)url.c_str( ); nlhr.flags = NLHRF_HTTP11 | NLHRF_NODUMP; nlhr.headers = get_request_headers( request_type, &nlhr.headersCount ); nlhr.timeout = 1000 * (( request_type == OMEGLE_REQUEST_EVENTS ) ? 60 : 15); if ( request_data != NULL ) { nlhr.pData = (char*)(*request_data).c_str(); nlhr.dataLength = (int)request_data->length( ); } parent->debugLogA("@@@@@ Sending request to '%s'", nlhr.szUrl); switch ( request_type ) { case OMEGLE_REQUEST_HOME: nlhr.nlc = NULL; break; case OMEGLE_REQUEST_EVENTS: nlhr.nlc = hEventsConnection; nlhr.flags |= NLHRF_PERSISTENT; break; default: WaitForSingleObject(connection_lock_, INFINITE); nlhr.nlc = hConnection; nlhr.flags |= NLHRF_PERSISTENT; break; } NETLIBHTTPREQUEST* pnlhr = ( NETLIBHTTPREQUEST* )CallService(MS_NETLIB_HTTPTRANSACTION, (WPARAM)handle_, (LPARAM)&nlhr ); http::response resp; switch ( request_type ) { case OMEGLE_REQUEST_HOME: break; case OMEGLE_REQUEST_EVENTS: hEventsConnection = pnlhr ? pnlhr->nlc : NULL; break; default: ReleaseMutex(connection_lock_); hConnection = pnlhr ? pnlhr->nlc : NULL; break; } if ( pnlhr != NULL ) { parent->debugLogA("@@@@@ Got response with code %d", pnlhr->resultCode); store_headers( &resp, pnlhr->headers, pnlhr->headersCount ); resp.code = pnlhr->resultCode; resp.data = pnlhr->pData ? pnlhr->pData : ""; parent->debugLogA("&&&&& Got response: %s", resp.data.c_str()); CallService(MS_NETLIB_FREEHTTPREQUESTSTRUCT, 0, (LPARAM)pnlhr); } else { parent->debugLogA("!!!!! No response from server (time-out)"); resp.code = HTTP_CODE_FAKE_DISCONNECTED; // Better to have something set explicitely as this value // is compaired in all communication requests } return resp; }