📄 jmmsprotocol.c
字号:
* PARAMETERS
* msg_index [IN]
* msg_type [IN]
* content_location [?] [?] [?]
* RETURNS
*
*****************************************************************************/
JC_RETCODE mmi_jmms_add_pending_mms_info_node(U16 msg_index, U8 msg_type, S8 *content_location)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
jmms_pending_mms_info_struct *node;
U16 currScrenID;
U32 len = 0;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
PRINT_INFORMATION_2((MMI_TRACE_INFO, "%s", "mmi_jmms_add_pending_mms_info_node"));
#ifdef __MMI_UNIFIED_MESSAGE__
if (msg_type != E_MSG_TYPE_IDLE_SCREEN_POP_UP)
{
TurnOnBacklight(GPIO_BACKLIGHT_SHORT_TIME);
mmi_um_jmms_new_mms_message_ind(msg_index);
return JC_OK;
}
#endif /* __MMI_UNIFIED_MESSAGE__ */
currScrenID = GetActiveScreenId();
node = (jmms_pending_mms_info_struct*) jdd_MemAlloc(sizeof(jmms_pending_mms_info_struct), 1);
if (node == NULL)
{
return JC_ERR_MEMORY_ALLOCATION;
}
node->Index = msg_index;
node->type = msg_type;
if (content_location != NULL)
{
len = strlen((S8*) content_location) + 1;
node->mms_url = (S8*) jdd_MemAlloc(sizeof(S8), len);
if (node->mms_url == NULL)
{
return JC_ERR_MEMORY_ALLOCATION;
}
memcpy(node->mms_url, content_location, len);
}
else
{
node->mms_url = NULL;
}
if (currScrenID == SCR_ID_JMMS_NEW_MMS_IND)
{ /* /add as second node of link list */
if (g_jmms_context->pending_mms_info_list == NULL) /* /not possible */
{
return E_JMMS_GENERAL_ERROR;
}
else
{
node->next = g_jmms_context->pending_mms_info_list->next;
g_jmms_context->pending_mms_info_list->next = node;
}
}
else /* /add as first node of link list */
{
node->next = g_jmms_context->pending_mms_info_list;
g_jmms_context->pending_mms_info_list = node;
}
return JC_OK;
}
/*****************************************************************************
* FUNCTION
* mmi_jmms_header_ind_callback
* DESCRIPTION
*
* PARAMETERS
* jmms_context [?] [?] [?]
* pCommHeaderInd [?] [?] [?]
* RETURNS
*
*****************************************************************************/
JC_RETCODE mmi_jmms_header_ind_callback(jmms_context_struct *jmms_context, COMM_HEADER_INDICATION *pCommHeaderInd)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
JC_RETCODE eRet = JC_OK;
jmms_communication_state_node *comm_node = NULL;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
PRINT_INFORMATION_2((MMI_TRACE_INFO, "%s(%d)", "JMMS Header Ind Callback, Request Id:",
pCommHeaderInd->uiRequestID));
PRINT_INFORMATION_2((MMI_TRACE_INFO, "%s(%d)", "JMMS Header Ind HTTP Status:", pCommHeaderInd->eStatus));
comm_node = mmi_jmms_get_comm_state(jmms_context, pCommHeaderInd->uiRequestID);
if (comm_node == NULL)
{
if (pCommHeaderInd->uiRequestID)
{
jdi_CommunicationFreeReference(jmms_context->hCommHandle, pCommHeaderInd->uiRequestID);
}
pCommHeaderInd->uiRequestID = 0;
PRINT_INFORMATION_2((MMI_TRACE_INFO, "%s(%d)",
"JMMS: No commn node for this Header Indication, so free communication reference for request id:",
pCommHeaderInd->uiRequestID));
return E_JMMS_GENERAL_ERROR; /* error type doesn't matter */
}
if (pCommHeaderInd->eStatus != 200) /* /200 is HTTP OK */
{
if (pCommHeaderInd->uiRequestID)
{
eRet = jdi_CommunicationFreeReference(jmms_context->hCommHandle, pCommHeaderInd->uiRequestID);
if (JC_OK != eRet)
{
mmi_jmms_handle_error_in_communication(
jmms_context,
E_FROM_URL_CALLBACK,
comm_node,
pCommHeaderInd->eStatus);
mmi_jmms_free_comm_node(jmms_context, pCommHeaderInd->uiRequestID);
pCommHeaderInd->uiRequestID = 0;
return JC_ERR_MEMORY_ALLOCATION; /* error type doesn't matter */
}
}
eRet = mmi_jmms_retry_communication(
jmms_context,
E_FROM_URL_CALLBACK,
pCommHeaderInd->uiRequestID,
pCommHeaderInd->eStatus);
if (JC_OK != eRet)
{
mmi_jmms_handle_error_in_communication(
jmms_context,
E_FROM_URL_CALLBACK,
comm_node,
E_JMMS_DEAFULT_COMM_ERROR_CODE);
mmi_jmms_free_comm_node(jmms_context, pCommHeaderInd->uiRequestID);
pCommHeaderInd->uiRequestID = 0;
// sandeep start to fix PMTSW00006618
#ifdef __MMI_UNIFIED_MESSAGE__
if((comm_node->mms_communication_state == E_TYPE_NOTIFICATION_RESPONSE) && IsScreenPresent(SCR_ID_UM_UNSENT))
{
DeleteUptoScrID(SCR_ID_UM_UNSENT);
}
#endif
//sandeep end to fix PMTSW00006618
return JC_ERR_MEMORY_ALLOCATION; /* error type doesn't matter */
}
mmi_jmms_free_comm_node(jmms_context, pCommHeaderInd->uiRequestID);
return E_JMMS_GENERAL_ERROR; /* error type doesn't matter. By virtue of !=JC_OK value communicator will delete */
/* /this request so that url Indication Callback will not be further called */
}
comm_node->pContentType = (JC_INT8*) jdi_UtilsStrdup(pCommHeaderInd->pszContentType);
if(comm_node->mms_communication_state == E_TYPE_NOTIFICATION_RESPONSE ||
comm_node->mms_communication_state == E_TYPE_READ_REPORT_PDU ||
comm_node->mms_communication_state == E_TYPE_ACK_RESPONSE)
{
mmi_jmms_free_comm_node(g_jmms_context, pCommHeaderInd->uiRequestID);
}
return JC_OK;
}
/*****************************************************************************
* FUNCTION
* mmi_jmms_url_ind_callback
* DESCRIPTION
*
* PARAMETERS
* jmms_context [?] [?] [?]
* pURLInd [?] [?] [?]
* RETURNS
*
*****************************************************************************/
JC_RETCODE mmi_jmms_url_ind_callback(jmms_context_struct *jmms_context, COMM_FETCH_URL_IND_RESP *pURLInd)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
JC_RETCODE eRet = JC_OK;
CONTENT_DATA Content = {0, };
JC_RETCODE error = JC_OK;
jmms_communication_state_node *comm_node = NULL;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
PRINT_INFORMATION_2((MMI_TRACE_INFO, "%s", "mmi_jmms_url_ind_callback"));
comm_node = mmi_jmms_get_comm_state(jmms_context, pURLInd->uiRequestID);
if (comm_node == NULL)
{
if (pURLInd->uiRequestID)
{
eRet = jdi_CommunicationFreeReference(jmms_context->hCommHandle, pURLInd->uiRequestID);
}
pURLInd->uiRequestID = 0;
PRINT_INFORMATION_2((MMI_TRACE_INFO, "%s(%d)",
"JMMS: No commn node for this id, call jdi_CommunicationFreeReference",
pURLInd->uiRequestID));
return E_JMMS_GENERAL_ERROR;
}
if (pURLInd->uiCurrentLength > 0)
{
if (comm_node->hFile == NULL)
{
JC_INT8 Temp[50] = {0, };
PRINT_INFORMATION_2((MMI_TRACE_INFO, "%s(%d)", "JMMS Handle Url First Chunk, Request id",
pURLInd->uiRequestID));
if (comm_node->fs_handle == NULL)
{
if (jdd_FSInitialize(&comm_node->fs_handle) != JC_OK)
{
PRINT_INFORMATION_2((MMI_TRACE_INFO, "Error In Init File"));
eRet = JC_ERR_FILE_OPEN;
mmi_jmms_handle_error_in_communication(
jmms_context,
E_FROM_URL_CALLBACK,
comm_node,
E_JMMS_DEAFULT_COMM_ERROR_CODE);
jdi_CommunicationFreeReference(jmms_context->hCommHandle, pURLInd->uiRequestID);
mmi_jmms_free_comm_node(jmms_context, pURLInd->uiRequestID);
pURLInd->uiRequestID = 0;
return eRet;
}
}
/* manish for file path change */
jc_sprintf(Temp, "%s%d", "@mms\\temp\\jmms_temp", pURLInd->uiRequestID);
jdi_UtilsCharToTchar(&(comm_node->pFileName), Temp);
comm_node->hFile = jdd_FSOpen(comm_node->fs_handle, comm_node->pFileName, E_CREATE_WRITE_MODE);
}
PRINT_INFORMATION_2((MMI_TRACE_INFO, "%s(%d)", "JMMS Handle other Url Chunks, Request Id:",
pURLInd->uiRequestID));
#if defined (__USB_IN_NORMAL_MODE__)
if (mmi_jmms_check_usb_mode() )
{
PRINT_INFORMATION_2((MMI_TRACE_INFO, "USB Mode: Write To File"));
}
#endif
error = jdd_FSWrite(pURLInd->pucBuffer, pURLInd->uiCurrentLength, 1, comm_node->hFile);
#if defined (__USB_IN_NORMAL_MODE__)
if (mmi_jmms_check_usb_mode() )
PRINT_INFORMATION_2((MMI_TRACE_INFO, "USB Mode: Write To File return=%d", error));
#endif
if (error != 1)
{
if (error == JC_ERR_FILE_FULL || error == JC_ERR_FILE_WRITE)
{
mmi_jmms_handle_error_in_communication(jmms_context, E_FROM_URL_CALLBACK, comm_node, JC_ERR_FILE_FULL);
}
else
{
mmi_jmms_handle_error_in_communication(
jmms_context,
E_FROM_URL_CALLBACK,
comm_node,
E_JMMS_DEAFULT_COMM_ERROR_CODE);
}
if (comm_node->hFile != NULL)
{
jdd_FSClose(comm_node->hFile);
}
jdi_CommunicationFreeReference(jmms_context->hCommHandle, pURLInd->uiRequestID);
mmi_jmms_free_comm_node(jmms_context, pURLInd->uiRequestID);
pURLInd->uiRequestID = 0;
return JC_ERR_FILE_OPEN;
}
comm_node->reponse_size += pURLInd->uiCurrentLength;
}
if (pURLInd->bHasMoreData == E_FALSE)
{
if (comm_node->hFile)
{
if (comm_node->reponse_size > 0)
{
jdd_FSClose(comm_node->hFile);
/* /7 March */
if (g_jmms_context->jmms_fs_handle != NULL)
{
jdd_FSDeinitialize(g_jmms_context->jmms_fs_handle);
g_jmms_context->jmms_fs_handle = NULL;
}
Content.bIsStream = E_TRUE;
Content.cbReadCallback = mmi_jmms_read_callback;
Content.uiTotalSize = comm_node->reponse_size;
Content.uiCurSize = 0;
Content.pStream = comm_node->pFileName;
Content.pFileName = comm_node->pFileName;
}
}
PRINT_INFORMATION_2((MMI_TRACE_INFO, "%s(%d)", "JMMS URL Chunks Finished. Request id:", pURLInd->uiRequestID));
/* /When control is here then no problem with return eRet because after that */
eRet = mmi_jmms_handle_url_repsonse(jmms_context, pURLInd, Content);
}
PRINT_INFORMATION_2((MMI_TRACE_INFO, "%s %d", "mmi_jmms_url_ind_callback return:", eRet));
return eRet;
}
/*****************************************************************************
* FUNCTION
* mmi_jmms_handle_url_repsonse
* DESCRIPTION
*
* PARAMETERS
* jmms_context [?] [?] [?]
* pURLInd [?] [?] [?]
* Content [IN]
* RETURNS
*
*****************************************************************************/
JC_RETCODE mmi_jmms_handle_url_repsonse(
jmms_context_struct *jmms_context,
COMM_FETCH_URL_IND_RESP *pURLInd,
CONTENT_DATA Content)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
jmms_communication_state_node *comm_node = NULL;
JC_RETCODE eRet = JC_OK;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
PRINT_INFORMATION_2((MMI_TRA
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -