DWORD WINAPI ThreadProc(LPVOID lpParam) { char ssochead[1024]; ssochead[0] = '\0'; char receive_buff[102400]; unsigned n_receive_len = 102400; receive_buff[0] = '\0'; char* strIP = (char*)lpParam; //init socket if(soc_init(strIP,ssochead) != 0) { return -1; } //connect SOCKET sock = soc_connect(strIP); if(sock == NULL) { return -1; } //send HTTP head int nret = soc_send(sock,ssochead,strlen(ssochead)); if(nret < 0) { return -2; } // recv soc_recv(sock); //close soc_close(sock); }
VMINT vm_tls_soc_connect(VMINT res_id, vm_sockaddr_ex_struct * faddr) { kal_int32 ret; vm_tls_context_t * ctx_p = NULL; sockaddr_struct int_faddr = {0}; MMI_TRACE(TRACE_GROUP_8, TRC_MRE_SSL_S, 27, __LINE__); if (NULL == faddr) { MMI_TRACE(TRACE_GROUP_8, TRC_MRE_SSL_E1, 27, __LINE__); return VM_TLS_RET_BASE -3; } ctx_p = vm_tls_get_ctx_by_res(res_id); if (NULL == ctx_p) { MMI_TRACE(TRACE_GROUP_8, TRC_MRE_SSL_E2, 27, __LINE__); return VM_TLS_RET_BASE -2; } int_faddr.addr_len = faddr->addr_len; memcpy(int_faddr.addr, faddr->addr, int_faddr.addr_len); int_faddr.port = faddr->port; int_faddr.sock_type = faddr->sock_type; MMI_TRACE(TRACE_GROUP_8, TRC_MRE_DLS_LOG, int_faddr.addr_len, int_faddr.addr[0], int_faddr.addr[1], int_faddr.addr[2], int_faddr.addr[3], int_faddr.port, 27, int_faddr.sock_type); ret = soc_connect(ctx_p->soc_id, &int_faddr); if (TLS_ERR_NONE != ret) { MMI_TRACE(TRACE_GROUP_8, TRC_MRE_SSL_E3, 27, ret); return ret; } MMI_TRACE(TRACE_GROUP_8, TRC_MRE_SSL_E, 27, __LINE__); return ret; }
HTTP_RESULT ntyHttpConnect(void *self) { kal_int8 ret_val; NattyHttp *http = (NattyHttp*)self; int socketId = http->socketid; sockaddr_struct *add = &http->addr; nty_printf("ntyHttpConnect %d,%d,%d,%d,%d",add->addr[0],add->addr[1],add->addr[2],add->addr[3],add->port ); ret_val = soc_connect(socketId, add); if(ret_val == SOC_SUCCESS) { nty_printf("SOC_SUCCESS_gps_connect\r\n"); return NTY_HTTP_SUCCESS; } else if(ret_val == SOC_WOULDBLOCK) { //ClearProtocolEventHandler(MSG_ID_APP_SOC_NOTIFY_IND); //SetProtocolEventHandler(gps_dsm_soc_socket_notify, MSG_ID_APP_SOC_NOTIFY_IND); nty_printf("SOC_WOULDBLOCK\r\n"); } else { nty_printf("DSM_SOC_ERR\r\n"); return NTY_HTTP_FAILED; } }
//----------------------------------------------------------------------------- int gps_soc_tcp_send_request2(void) { kal_uint8 val = 1; // non-blocking mode, default kal_int32 res; kal_int8 error; kal_int32 detail_cause; kal_bool set_header = KAL_FALSE; gps_soc_transaction.socket_id = soc_create(PF_INET, SOCK_STREAM, 0, MOD_GPS_TCPIP, gps_soc_transaction.nwt_acount_id); gps_soc_log("soc_create, socket_id: %d", gps_soc_transaction.socket_id); if (gps_soc_transaction.socket_id < 0) { if (gps_soc_transaction.callback != NULL) { gps_soc_transaction.callback(0, NULL, 0); } return GPS_SOC_ERROR; } val = 0; // blocking mode res = soc_setsockopt(gps_soc_transaction.socket_id, SOC_NBIO, &val, sizeof(val)); gps_soc_log("soc_setsockopt, val: %d, result: %d", val, res); if (res < 0) { goto ERROR_HANDLE; } val = SOC_READ | SOC_WRITE | SOC_CLOSE | SOC_CONNECT; res = soc_setsockopt(gps_soc_transaction.socket_id, SOC_ASYNC, &val, sizeof(val)); gps_soc_log("soc_setsockopt, val: %d, result: %d", val, res); if (res < 0) { goto ERROR_HANDLE; } gps_soc_log("Connect to %d.%d.%d.%d and port: %d", gps_soc_transaction.server_ip_addr.addr[0], gps_soc_transaction.server_ip_addr.addr[1], gps_soc_transaction.server_ip_addr.addr[2], gps_soc_transaction.server_ip_addr.addr[3], gps_soc_transaction.server_ip_addr.port); res = soc_connect(gps_soc_transaction.socket_id, &gps_soc_transaction.server_ip_addr); gps_soc_log("soc_connect res: %d", res); if (res < 0) { res = soc_get_last_error(gps_soc_transaction.socket_id, &error, &detail_cause); gps_soc_log("res: %d soc_connect error: %d, detail_cause: %d", res, error, detail_cause); goto ERROR_HANDLE; } while (gps_soc_transaction.snd_counter < gps_soc_transaction.snd_data_len) { const GPS_GPRMC_Packed_Struct_t *pPack; char *pBuff; int i, count; pPack = (GPS_GPRMC_Packed_Struct_t *)gps_soc_transaction.rcvd_buffer; pPack += gps_soc_transaction.snd_counter; pBuff = gps_soc_transaction.snd_buffer; pBuff[0] = '\0'; if (!set_header) { sprintf(pBuff, "#%s#%s#%s#%s#%d\r\n", gps_imei_str, gps_gprs_username, gps_gprs_userpwd, gps_soc_upldtype_str(gps_soc_transaction.cause_type), gps_soc_transaction.snd_data_len); set_header = KAL_TRUE; } count = (gps_soc_transaction.snd_data_len - gps_soc_transaction.snd_counter) <= GPS_SEND_ITEMS_ONETIME ? (gps_soc_transaction.snd_data_len - gps_soc_transaction.snd_counter) : GPS_SEND_ITEMS_ONETIME; for (i = 0; i < count; i++) { Result_t result = RESULT_ERROR; pBuff = gps_soc_transaction.snd_buffer + strlen(gps_soc_transaction.snd_buffer); sprintf(pBuff, "#"); pBuff = gps_soc_transaction.snd_buffer + strlen(gps_soc_transaction.snd_buffer); sprintf(pBuff, "%04x%04x", pPack->lac, pPack->cid) ; pBuff = gps_soc_transaction.snd_buffer + strlen(gps_soc_transaction.snd_buffer); result = GPS_APP_GPRMC_Packed2Str(pBuff, pPack); pPack++; } if (gps_soc_transaction.snd_counter + count >= (kal_int32) gps_soc_transaction.snd_data_len) { pBuff = gps_soc_transaction.snd_buffer + strlen(gps_soc_transaction.snd_buffer); sprintf(pBuff, "##\r\n"); } gps_soc_log("send data len: %d, data: %s", strlen(gps_soc_transaction.snd_buffer), gps_soc_transaction.snd_buffer); res = soc_send(gps_soc_transaction.socket_id, (kal_uint8*)gps_soc_transaction.snd_buffer, strlen(gps_soc_transaction.snd_buffer), 0); gps_soc_log("Http send request result, sent_bytes: %d", res); if (res < 0) { res = soc_get_last_error(gps_soc_transaction.socket_id, &error, &detail_cause); gps_soc_log("res: %d soc_send error: %d, detail_cause: %d", res, error, detail_cause); break; } kal_sleep_task(250); gps_soc_transaction.snd_counter += count; } ERROR_HANDLE: if (gps_soc_transaction.callback != NULL) { gps_soc_transaction.callback(0, NULL, 0); } kal_sleep_task(250); res = soc_close(gps_soc_transaction.socket_id); gps_soc_log("soc_close res: %d", res); if (res < 0) { res = soc_get_last_error(gps_soc_transaction.socket_id, &error, &detail_cause); gps_soc_log("res: %d soc_close error: %d, detail_cause: %d", res, error, detail_cause); } kal_sleep_task(250); soc_close_nwk_account_by_id(MOD_GPS_TCPIP, gps_soc_transaction.nwt_acount_id); return GPS_SOC_SUCCESS; }
//----------------------------------------------------------------------------- int gps_soc_tcp_send_request(void) { /*----------------------------------------------------------------*/ /* Local Variables */ /*----------------------------------------------------------------*/ /*----------------------------------------------------------------*/ /* Code Body */ /*----------------------------------------------------------------*/ gps_soc_log("gps_soc_tcp_send_request, transaction state: %d", gps_soc_transaction.state); if (gps_soc_transaction.state == GPS_SOC_TCP_CON_CREATING) { kal_int8 ret; gps_soc_log("connect to %d.%d,%d,%d and port: %d", gps_soc_transaction.server_ip_addr.addr[0], gps_soc_transaction.server_ip_addr.addr[1], gps_soc_transaction.server_ip_addr.addr[2], gps_soc_transaction.server_ip_addr.addr[3], gps_soc_transaction.server_ip_addr.port); ret = soc_connect(gps_soc_transaction.socket_id, &gps_soc_transaction.server_ip_addr); gps_soc_log("connect result is %d", ret); if (ret == SOC_SUCCESS) { gps_soc_tcp_send_request(); return GPS_SOC_SUCCESS; } else if (ret == SOC_WOULDBLOCK) { /* waits for socket notify */ // msgId: MSG_ID_APP_SOC_NOTIFY_IND, // it will be handled by gps_soc_socket_notify return GPS_SOC_SUCCESS; } else { if (ret == SOC_ERROR) { gps_soc_output_result(GPS_SOC_PEER_NOT_REACHABLE, NULL, 0); return GPS_SOC_PEER_NOT_REACHABLE; } else { gps_soc_output_result(GPS_SOC_ERROR, NULL, 0); return GPS_SOC_ERROR; } } } else if(gps_soc_transaction.state == GPS_SOC_TCP_CON_CREATED || gps_soc_transaction.state == GPS_SOC_REQ_SEND_RETRY || gps_soc_transaction.state == GPS_SOC_REQ_SENDING) { kal_int32 ret; const GPS_GPRMC_Packed_Struct_t *pPack; char *pBuff; int i, count; pBuff = gps_soc_transaction.snd_buffer; pBuff[0] = '\0'; if (gps_soc_transaction.state != GPS_SOC_REQ_SENDING) { gps_soc_transaction.snd_counter = 0; sprintf(pBuff, "#%s#%s#%s#%s#%d\r\n", gps_imei_str, gps_gprs_username, gps_gprs_userpwd, gps_soc_upldtype_str(gps_soc_transaction.cause_type), gps_soc_transaction.snd_data_len); } gps_soc_transaction.state = GPS_SOC_REQ_SENDING; gps_soc_log("send request to %d.%d,%d,%d and port: %d", gps_soc_transaction.server_ip_addr.addr[0], gps_soc_transaction.server_ip_addr.addr[1], gps_soc_transaction.server_ip_addr.addr[2], gps_soc_transaction.server_ip_addr.addr[3], gps_soc_transaction.server_ip_addr.port); pPack = (GPS_GPRMC_Packed_Struct_t *)gps_soc_transaction.rcvd_buffer; pPack += gps_soc_transaction.snd_counter; count = (gps_soc_transaction.snd_data_len - gps_soc_transaction.snd_counter) <= GPS_SEND_ITEMS_ONETIME ? (gps_soc_transaction.snd_data_len - gps_soc_transaction.snd_counter) : GPS_SEND_ITEMS_ONETIME; for (i = 0; i < count; i++) { Result_t result = RESULT_ERROR; pBuff = gps_soc_transaction.snd_buffer + strlen(gps_soc_transaction.snd_buffer); sprintf(pBuff, "#") ; pBuff = gps_soc_transaction.snd_buffer + strlen(gps_soc_transaction.snd_buffer); sprintf(pBuff, "%04x%04x", pPack->lac, pPack->cid) ; pBuff = gps_soc_transaction.snd_buffer + strlen(gps_soc_transaction.snd_buffer); result = GPS_APP_GPRMC_Packed2Str(pBuff, pPack); pPack++; } if (gps_soc_transaction.snd_counter + count >= (kal_int32) gps_soc_transaction.snd_data_len) { pBuff = gps_soc_transaction.snd_buffer + strlen(gps_soc_transaction.snd_buffer); sprintf(pBuff, "##\r\n"); } gps_soc_log("send data len: %d, data: %s", strlen(gps_soc_transaction.snd_buffer), gps_soc_transaction.snd_buffer); ret = soc_send( gps_soc_transaction.socket_id, (kal_uint8*)gps_soc_transaction.snd_buffer, strlen(gps_soc_transaction.snd_buffer), 0); gps_soc_log("send request result, sent_bytes: %d", ret); if (ret > 0) { gps_soc_transaction.snd_counter += count; if (gps_soc_transaction.snd_counter >= (kal_int32) gps_soc_transaction.snd_data_len) { gps_soc_transaction.state = GPS_SOC_REQ_SENT; } kal_sleep_task(250); gps_soc_tcp_send_request(); return GPS_SOC_SUCCESS; } else { if (ret == SOC_WOULDBLOCK) { /* waits for socket notify */ // msgId: MSG_ID_APP_SOC_NOTIFY_IND, // it will be handled by gps_soc_socket_notify return GPS_SOC_SUCCESS; } else { if (ret == SOC_ERROR) { gps_soc_output_result(GPS_SOC_PEER_NOT_REACHABLE, NULL, 0); return GPS_SOC_PEER_NOT_REACHABLE; } else { gps_soc_output_result(GPS_SOC_ERROR, NULL, 0); return GPS_SOC_ERROR; } } } } else if(gps_soc_transaction.state == GPS_SOC_REQ_SENT) { gps_soc_output_result(GPS_SOC_SUCCESS, NULL, 0); return GPS_SOC_SUCCESS; } else { gps_soc_output_result(GPS_SOC_ERROR, NULL, 0); return GPS_SOC_ERROR; } return GPS_SOC_ERROR; }