Hi All,
I am working on BG96 using Quecopen Solution i want to post some data to HTTP server. I am getting 500 response code . my code snippet is
/*
-
return
-
0: No error
-
-1: create SSL context failed
-
-2: SSL config failed
-
-3: create HTTP session failed
-
-4: HTTP connect failed
-
-5: HTPP request failed
*/
int http_download(char* host, uint16 port, uint8* file_name)
{
qapi_Status_t ret = -1;
uint8 reconnect_count = 0;
#ifdef QUECTEL_HTTPS_SUPPORT
SSL_INST http_ssl;
#endif
/* Start HTTPc service */
qapi_Net_HTTPc_Start();
memset(&http_session_policy, 0, sizeof(http_session_policy_t));
#ifdef QUECTEL_HTTPS_SUPPORT
if (ssl_ctx_id)
{
/* config object and certificate */
if (0 != http_ssl_config(&http_ssl))
{
SALVATOR_UART_DBG("ERROR: Config ssl object and certificates error");
}
/* create a SSL session */
ssl_obj_hdl = http_ssl.sslCtx;
http_ssl.sslCon = qapi_Net_SSL_Con_New(http_ssl.sslCtx, QAPI_NET_SSL_TLS_E);
if (http_ssl.sslCon == QAPI_NET_SSL_INVALID_HANDLE)
{
SALVATOR_UART_DBG("ERROR: Unable to create SSL context");
return -1;
}
if (QAPI_OK != qapi_Net_SSL_Configure(http_ssl.sslCon, &http_ssl.config))
{
SALVATOR_UART_DBG("ERROR: SSL configure failed");
return -2;
}
http_hadle = qapi_Net_HTTPc_New_sess(20000, http_ssl.sslCtx, http_client_cb, NULL, 1024, 1024);
ret = qapi_Net_HTTPc_Configure_SSL(http_hadle, &http_ssl.config);
if(ret != QAPI_OK)
{
SALVATOR_UART_DBG("Start HTTPS connection, SSL config ret[%d]", ret);
return -2;
}
}
else
{
http_hadle = qapi_Net_HTTPc_New_sess(20000, 0, http_client_cb, NULL, 1024, 1024);
}
#else
http_hadle = qapi_Net_HTTPc_New_sess(20000, 0, http_client_cb, NULL, 5 * 1024, 5 * 1024);
#endif /* QUECTEL_HTTPS_SUPPORT */
http_session_policy.session_state = HTTP_SESSION_INIT;
if ( http_hadle == NULL)
{
SALVATOR_UART_DBG("qapi_Net_HTTPc_New_sess ERROR");
return -3;
}
// qapi_Net_HTTPc_Pass_Pool_Ptr(http_hadle, byte_pool_salvator);
do
{
ret = qapi_Net_HTTPc_Connect(http_hadle, host, port);
if (ret != QAPI_OK)
{
reconnect_count++;
SALVATOR_UART_DBG("qapi_Net_HTTPc_Connect ERROR ret:%d, re-connect times:%d",ret,reconnect_count);
if(reconnect_count >= HTPP_MAX_CONNECT_RETRY)
{
return -4;
}
qapi_Timer_Sleep(3, QAPI_TIMER_UNIT_SEC, true);
}
else
{
SALVATOR_UART_DBG("qapi_Net_HTTPc_Connect success :%d", ret);
break;
}
} while (1);
http_session_policy.session_state = HTTP_SESSION_CONN;
// http_post_body(Tx_Buffer);
qapi_Net_HTTPc_Clear_Header(http_hadle);
qapi_Net_HTTPc_Add_Header_Field(http_hadle, "Content-Type", "application/x-www-form-urlencoded");
// qapi_Net_HTTPc_Add_Header_Field(http_hadle, "Content-Length", strlen(Tx_Buffer)); // Not sure if required
// qapi_Net_HTTPc_Set_Body(http_hadle, "{\"PacketType\":\"Alert\",\"Payload\":{\"TriggeredBy\":", (uint32_t)sizeof("{\"PacketType\":\"Alert\",\"Payload\":{\"TriggeredBy\":"));
http_post_body((char *)Tx_Buffer);
/* get response content */
ret = qapi_Net_HTTPc_Request(http_hadle, QAPI_NET_HTTP_CLIENT_POST_E, (char*)file_name);
if (ret != QAPI_OK)
{
SALVATOR_UART_DBG("qapi_Net_HTTPc_Request ERROR :%d",ret);
return -5;
}
return 0;
}
void http_post_body(char *TxBuffer)
{
// char TxBuffer[240] = {0};
uint16_t len, poststatus;
char DeviceId[20] = "862785044205279";
uint32_t in_sosType = 1;
static char sos_lat[16]={0}, sos_long[16]={0};
static bool CellIdLocFlag = 0;
strncpy(TxBuffer, "{\"PacketType\":\"Alert\",\"Payload\":", sizeof("{\"PacketType\":\"Alert\",\"Payload\":"));
strncat(TxBuffer, "{\"TriggeredBy\":", sizeof("{\"TriggeredBy\":"));
len = strlen(TxBuffer);
TxBuffer[len]=48+in_sosType;
TxBuffer[len+1]='\0';
strncat(TxBuffer, ",", sizeof(","));
strncat(TxBuffer, "\"DeviceId\":\"", sizeof("\"DeviceId\":\""));
strncat(TxBuffer, DeviceId, sizeof(DeviceId));
strncat(TxBuffer, "\",", sizeof("\","));
strncat(TxBuffer, "\"Lat\":", sizeof("\"Lat\":"));
strncat(TxBuffer, sos_lat, sizeof(sos_lat));
strncat(TxBuffer, ",\"Long\":", sizeof(",\"Long\":"));
strncat(TxBuffer, sos_long, sizeof(sos_long));
strncat(TxBuffer, ",\"LocStatus\":", sizeof("\"LocStatus\":"));
uint16_t l1 = strlen(TxBuffer);
itoa(CellIdLocFlag, &TxBuffer[l1], 10);
strncat(TxBuffer, ",\"Status\":\"Active\"", sizeof(",\"Status\":\"Active\""));
strncat(TxBuffer, "}}", sizeof("}}"));
// strncpy(TxBuffer, "{\"PacketType\":\"Alert\",\"Payload\":", sizeof("{\"PacketType\":\"Alert\",\"Payload\":"));
// strncat(TxBuffer, "{\"TriggeredBy\":", sizeof("{\"TriggeredBy\":"));
// len = strlen(TxBuffer);
// TxBuffer[len]=48+in_sosType;
// TxBuffer[len+1]='\0';
// strncat(TxBuffer, ",", sizeof(","));
// strncat(TxBuffer, "\"DeviceId\":\"", sizeof("\"DeviceId\":\""));
// strncat(TxBuffer, DeviceId, sizeof(DeviceId));
// strncat(TxBuffer, "\",", sizeof("\","));
// strncat(TxBuffer, "\"Status\":\"Inactive\"", sizeof("\"Status\":\"Inactive\""));
// strncat(TxBuffer, "}}", sizeof("}}"));
SALVATOR_UART_DBG("\r\n%s", TxBuffer);
qapi_Net_HTTPc_Set_Body(http_hadle, (const char *)TxBuffer, (uint32_t)sizeof(TxBuffer));
}
void http_client_cb(void* arg, int32 state, void* http_resp)
{
boolean ret_val = FALSE;
qapi_Net_HTTPc_Response_t * resp = NULL;
resp = (qapi_Net_HTTPc_Response_t *)http_resp;
http_session_policy.session_state = HTTP_SESSION_SOS_RESPONSE;
SALVATOR_UART_DBG("\r\nhttp_client_cb:%x,%ld,len:%lu,code:%lu,%s\r\n",arg,state,resp->length,resp->resp_Code,resp->data);
}
Response from the server:
host:dev.salvator.com.au,port:3000,source:/device/sosqapi_Net_HTTPc_Connect success :0
{“PacketType”:“Alert”,“Payload”:{“TriggeredBy”:1,“DeviceId”:“862785044205279”,“Lat”:,“Long”:,“LocStatus”:0,“Status”:“Active”}
http_client_cb:0,1,len:1007,code:500,
at Function.handle (/home/ubuntu/salvator/node_mod