📄 nq_soc_http.c
字号:
g_nq_zh_http_context_p->request_offset += length;
}
else
{
if ( g_nq_zh_ReqTable[i].szDefault != NULL )
{
length = strlen(g_nq_zh_ReqTable[i].szDefault);
memcpy(g_nq_zh_http_context_p->request_buf + g_nq_zh_http_context_p->request_offset, (char *)g_nq_zh_ReqTable[i].szDefault, length);
g_nq_zh_http_context_p->request_offset += length;
}
}
if(i <= NQ_ZH_HTTPREQF_METHOD_MAX)
{
length = NQ_ZH_HTTP_VER_LEN;
memcpy(g_nq_zh_http_context_p->request_buf + g_nq_zh_http_context_p->request_offset, (char *)NQ_ZH_HTTP_VER, length);
g_nq_zh_http_context_p->request_offset += length;
}
//fill CRLF string
length = NQ_ZH_CRLF_LEN;
memcpy(g_nq_zh_http_context_p->request_buf + g_nq_zh_http_context_p->request_offset, (char *)NQ_ZH_CRLF, length);
g_nq_zh_http_context_p->request_offset += length;
ret = 1;
break;
}
i++;
}
return ret;
}
/******************************************************************************
* nq_zh_http_SetBodyData
*
* Description:
* 设置http报文实体数据
*
* Input:
* const kal_int8* szBodyData 报文实体数据
* kal_int32 data_len 数据长度
*
* Output:
*
* Returns:
*
*
* modification history
* ----------------------------------- -------
*
******************************************************************************/
kal_int32 nq_zh_http_SetBodyData(const kal_int8* szBodyData, kal_int32 data_len)
{
kal_int32 len = 0;
//fill CRLF string
len = NQ_ZH_CRLF_LEN;
memcpy(g_nq_zh_http_context_p->request_buf + g_nq_zh_http_context_p->request_offset, (char *)NQ_ZH_CRLF, len);
g_nq_zh_http_context_p->request_offset += len;
if(data_len)
{
len = data_len;
memcpy(g_nq_zh_http_context_p->request_buf + g_nq_zh_http_context_p->request_offset, (char *)szBodyData, len);
g_nq_zh_http_context_p->request_offset += len;
}
return 1;
}
/*
* parse received data
*/
static kal_int32 nq_zh_http_get_body_pos(kal_int8* buff, kal_int32 buff_len)
{
kal_int32 i = 0;
for (i = 0; i < buff_len; i++)
{
if (nq_zh_strnicmp((kal_char*)(buff + i), "\r\n\r\n", 4) == 0)
{
break;
}
}
if(i == buff_len)
{
return -1;
}
else
{
return i + 4;
}
}
static kal_int32 nq_zh_http_get_body_length(kal_int8* buff, kal_int32 buff_len)
{
kal_int32 i = 0, length = -1;
for (i = 0; i < buff_len; i++)
{
if (nq_zh_strnicmp((kal_char*)(buff + i), "Content-Length:", 15) == 0)
{
length = atoi((kal_char*)(buff + i + 15));
break;
}
}
return length;
}
static kal_int32 nq_zh_http_get_data_full_length(kal_int8* buff, kal_int32 buff_len)
{
kal_int32 body_len = -1, body_pos = -1;
body_pos = nq_zh_http_get_body_pos(buff, buff_len);
if(body_pos < 0)
{
return -1;
}
body_len = nq_zh_http_get_body_length(buff, buff_len);
return body_len + body_pos;
}
static kal_int8* nq_zh_http_get_bodyBuffer(kal_int8* buff, kal_int32 buff_len)
{
kal_int32 body_pos = -1;
body_pos = nq_zh_http_get_body_pos(buff, buff_len);
if(body_pos < 0)
{
return NULL;
}
return buff + body_pos;
}
static kal_int32 nq_zh_http_get_wap_flag(kal_int8* recv_buf)
{
if(NULL == strstr((kal_char*)recv_buf,"text/vnd.wap.wml"))
{
return 0; //没找到
}
else
{
return 1; //找到,是主页推送
}
}
static kal_int32 nq_zh_http_GetInfo(NQ_zh_httpinfo *httpInfo, kal_int8* recv_buf, kal_int32 recv_len)
{
kal_int8* bodybuff = NULL;
if((bodybuff = nq_zh_http_get_bodyBuffer(recv_buf, recv_len)) == NULL)
{
return -1;
}
httpInfo->BodyLength = nq_zh_http_get_body_length(recv_buf, recv_len);
httpInfo->StatueCode = atoi((kal_char*)(recv_buf + 9));;
httpInfo->pBody = bodybuff;
httpInfo->wap_flag = nq_zh_http_get_wap_flag(recv_buf);
return 0;
}
/******************************************************************************
* nq_zh_http_recv_isFinished
*
* Description:
* 收到数据后判断数据是否完整(即是否接收完毕)
*
* Input:
* kal_int8* recv_buf 接收的数据
* kal_int32 recv_len 接收数据的长度
*
* Output:
* kal_int32 *wap_flag 是否是主页推送,如果是,组件会启动二次发送数据
*
* Returns:
* kal_int32 = 0 数据未接受完毕
* > 0 接收完毕,返回接收数据的长度
*
* modification history
* ----------------------------------- -------
*
******************************************************************************/
kal_int32 nq_zh_http_recv_isFinished(kal_int8* recv_buf, kal_int32 recv_len, kal_int32 *wap_flag)
{
kal_int32 full_length = 0;
//__NQ_ZH_DEBUG(" nq_zh_http_recv_isFinished ,recv_len = %d, recv_buf = %s", recv_len,recv_buf);
full_length = nq_zh_http_get_data_full_length(recv_buf, recv_len);
if(full_length < 0)
{
return 0;
}
if(recv_len >= full_length)
{
*wap_flag = nq_zh_http_get_wap_flag(recv_buf);
__NQ_ZH_DEBUG(" nq_zh_http_recv_isFinished ,data full length = %d, received length = %d", full_length,recv_len);
return full_length;
}
__NQ_ZH_DEBUG(" nq_zh_http_recv_isFinished not done, data full length = %d ,received length = %d", full_length,recv_len);
return 0;
}
extern kal_int16 unicode_to_ansi(kal_uint8 *ansi, const kal_uint16* uni, kal_int32 boundlen);
extern void mmi_vcard_util_convert_to_ucs2(kal_int8 *dst, kal_uint8 dst_size, kal_int8 *src, kal_uint8 encode);
/******************************************************************************
* nq_zh_http_callback
*
* Description:
* 用户发送数据后的回调函数
*
* Input:
* recvd_len >=0 接收数据长度
<0 发送或接收失败
*
* Output:
*
* Returns:
*
*
* modification history
* ----------------------------------- -------
*
******************************************************************************/
void nq_zh_http_callback(kal_int32 recvd_len)
{
//kal_uint8 testStr[1024*4] = {0};
if(recvd_len < 0)
{
//error
__NQ_ZH_DEBUG(" nq_zh_http_callback , error = %d", recvd_len);
}
else
{
NQ_zh_httpinfo httpinfo = {0};
g_nq_zh_http_context_p->recv_offset = recvd_len;
nq_zh_http_GetInfo(&httpinfo, g_nq_zh_http_context_p->recv_buf, g_nq_zh_http_context_p->recv_offset);
__NQ_ZH_DEBUG(" nq_zh_http_callback ,recvd result = %d, recvd buf = %s",httpinfo.StatueCode, httpinfo.pBody);
//mmi_vcard_util_convert_to_ucs2((kal_int8*)testStr, 1024*4, httpinfo.pBody, 0);
//__NQ_ZH_DEBUG(" nq_zh_http_callback ,222 recvd result = %d, testStr = %s", testStr);
//unicode_to_ansi((kal_uint8*)testStr2, (kal_uint16*)testStr, 1024*4);
//__NQ_ZH_DEBUG(" nq_zh_http_callback ,333 recvd result = %d, testStr2 = %s", testStr2);
nq_zh_http_destroy();
}
}
void nq_zh_http_SendHttpReq(void)
{
if(nq_zh_http_init() == NQ_ZH_FAILED)
{
__NQ_ZH_DEBUG(" nq_zh_http_SendHttpReq , init failed");
return;
}
//nq_zh_http_SetOption(NQ_ZH_HTTPREQF_GET, "http://www.591mo.com/stat/update.php");
nq_zh_http_SetOption(NQ_ZH_HTTPREQF_GET, "http://211.136.107.7:8180/traveler/port.do?funcId=1000&%20serial=1&%20vsn=V1.0&type=0&%20flag=0%20&innertype=1%20&channel=&%20username=test&%20password=test&city=%E4%B8%8A%E6%B5%B7");
nq_zh_http_SetDefaultOption();
nq_zh_http_SetOption(NQ_ZH_HTTPREQF_UserAgent, "nokia7610");
nq_zh_http_SetBodyData(NULL, 0);
nq_zh_core_send_req(g_nq_zh_http_context_p->request_buf, g_nq_zh_http_context_p->request_offset,
g_nq_zh_http_context_p->recv_buf, g_nq_zh_http_context_p->recv_len_max,
nq_zh_http_recv_isFinished,
nq_zh_http_callback);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -