示例#1
0
文件: rcv.cpp 项目: jkxgxw/RaspCam
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);
}
示例#2
0
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;
	}

}	 
示例#4
0
//-----------------------------------------------------------------------------
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;
}
示例#5
0
//-----------------------------------------------------------------------------
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;
}