📄 jmmsprotocol.c
字号:
eRet = mmi_jmms_jdi_parse_msg_buffer(&hMsgHandle, &ViewContent, E_TYPE_MMS, E_FALSE);
/* Async changes start */
while (eRet == JC_ERR_MMS_PARSE_PENDING)
{
eRet = mmi_jmms_jdi_msg_parse_continue(hMsgHandle);
};
/* Async changes end */
if (JC_OK != eRet)
{
PRINT_INFORMATION_2((MMI_TRACE_INFO, "%s(%d)", "JMMS, Error in parsing message headers, Error code: ",
eRet));
if (hMsgHandle != NULL)
{
mmi_jmms_jdi_msg_deinit(hMsgHandle);
hMsgHandle = NULL;
}
eRet = mmi_jmms_add_pending_mms_info_node(
(U16) STR_ID_JMMS_UNABLE_PARSE_PUSH,
(U8) E_MSG_TYPE_IDLE_SCREEN_POP_UP,
NULL);
if (eRet == JC_OK)
{
mmi_jmms_check_for_idle_screen();
}
return;
}
PRINT_INFORMATION_2((MMI_TRACE_INFO, "%s", "JMMS: Message parsing for Message header SUCCESSFUL!!!"));
eRet = mmi_jmms_jdi_get_msg_headers(hMsgHandle, &pMsgHdrs);
if (JC_OK != eRet)
{
PRINT_INFORMATION_2((MMI_TRACE_INFO, "%s(%d)", "JMMS, Error in getting message headers, Error code",
eRet));
mmi_jmms_jdi_msg_deinit(hMsgHandle);
hMsgHandle = NULL;
eRet = mmi_jmms_add_pending_mms_info_node(
(U16) STR_ID_JMMS_UNABLE_PARSE_PUSH,
(U8) E_MSG_TYPE_IDLE_SCREEN_POP_UP,
NULL);
if (eRet == JC_OK)
{
mmi_jmms_check_for_idle_screen();
}
return;
}
if (pMsgHdrs->eMsgType == E_MSG_TYPE_DELIVERY_REPORT)
{
PRINT_INFORMATION_2((MMI_TRACE_INFO, "%s", "Push Indication for JMMS Delivery Report Received"));
/* save the delivery report in inbox */
#ifdef __MMI_UNIFIED_MESSAGE__
{
JC_UINT32 temp_extra_byte = 0x02000000;
eRet = mmi_jmms_save_message_buffer_in_Store(
"Inbox",
&msg_index,
pMsgHdrs,
&ViewContent,
&temp_extra_byte);
}
#else /* __MMI_UNIFIED_MESSAGE__ */
mmi_jmms_save_message_buffer_in_Store("Inbox", &msg_index, pMsgHdrs, &ViewContent, NULL);
#endif /* __MMI_UNIFIED_MESSAGE__ */
eRet = mmi_jmms_add_pending_mms_info_node((U16) msg_index, (U8) E_MSG_TYPE_DELIVERY_REPORT, NULL);
if (eRet == JC_OK)
{
eRet = mmi_jmms_add_pending_mms_delivery_report_node(
(U8) (((DELIVERY_REPORT*) pMsgHdrs->pHeaders)->eDeliveryStatus),
(S8 *) (((DELIVERY_REPORT*) pMsgHdrs->pHeaders)->pTo),
((DELIVERY_REPORT*) pMsgHdrs->pHeaders)->uiDate);
if (eRet == JC_OK)
{
mmi_jmms_show_new_mms_pop_up();
}
}
if (eRet != JC_OK)
{
PRINT_INFORMATION_2((MMI_TRACE_INFO, "%s(%d)",
"JMMS, Error in saving Delivery Report, Error code: ", eRet));
if (eRet == JC_ERR_MEMORY_ALLOCATION || eRet == JC_ERR_FILE_WRITE)
{
eRet = mmi_jmms_add_pending_mms_info_node(
(U16) STR_ID_JMMS_MEMORY_ERROR_DELIVERY_SAVING,
(U8) E_MSG_TYPE_IDLE_SCREEN_POP_UP,
NULL);
}
else
{
eRet = mmi_jmms_add_pending_mms_info_node(
(U16) STR_ID_JMMS_ERROR_DELIVERY_SAVING,
(U8) E_MSG_TYPE_IDLE_SCREEN_POP_UP,
NULL);
}
if (eRet == JC_OK)
{
mmi_jmms_check_for_idle_screen();
}
}
mmi_jmms_jdi_msg_deinit(hMsgHandle);
hMsgHandle = NULL;
return;
}
else if (pMsgHdrs->eMsgType == E_MSG_TYPE_READ_REPORT_RESPONSE)
{
// TODO:::need to test the read report PDU
PRINT_INFORMATION_2((MMI_TRACE_INFO, "%s", "Push Indication for JMMS Read Report received"));
eRet = mmi_jmms_add_pending_mms_info_node((U16) msg_index, (U8) E_MSG_TYPE_READ_REPORT_RESPONSE, NULL);
if (eRet == JC_OK)
{
eRet = mmi_jmms_add_pending_mms_read_report_node(
(U8) (((READ_REPORT_RESPONSE*) pMsgHdrs->pHeaders)->eReadStatus),
(S8 *) (((READ_REPORT_RESPONSE*) pMsgHdrs->pHeaders)->pFrom),
((READ_REPORT_RESPONSE*) pMsgHdrs->pHeaders)->uiReceivedTime);
if (eRet == JC_OK)
{
mmi_jmms_show_new_mms_pop_up();
}
}
/* /save the read report in inbox. */
#ifdef __MMI_UNIFIED_MESSAGE__
{
JC_UINT32 temp_extra_byte = 0x02000000;
eRet = mmi_jmms_save_message_buffer_in_Store(
"Inbox",
&msg_index,
pMsgHdrs,
&ViewContent,
&temp_extra_byte);
}
#else /* __MMI_UNIFIED_MESSAGE__ */
eRet = mmi_jmms_save_message_buffer_in_Store("Inbox", &msg_index, pMsgHdrs, &ViewContent, NULL);
#endif /* __MMI_UNIFIED_MESSAGE__ */
if (eRet != JC_OK)
{
PRINT_INFORMATION_2((MMI_TRACE_INFO, "%s(%d)", "JMMS, Error in saving Read Report, Error code",
eRet));
if (eRet == JC_ERR_MEMORY_ALLOCATION || eRet == JC_ERR_FILE_WRITE)
{
eRet = mmi_jmms_add_pending_mms_info_node(
(U16) STR_ID_JMMS_MEMORY_ERROR_READ_REPORT_SAVING,
(U8) E_MSG_TYPE_IDLE_SCREEN_POP_UP,
NULL);
}
else
{
eRet = mmi_jmms_add_pending_mms_info_node(
(U16) STR_ID_JMMS_ERROR_READ_REPORT_SAVING,
(U8) E_MSG_TYPE_IDLE_SCREEN_POP_UP,
NULL);
}
if (eRet == JC_OK)
{
mmi_jmms_check_for_idle_screen();
}
}
mmi_jmms_jdi_msg_deinit(hMsgHandle);
hMsgHandle = NULL;
return;
}
else if (pMsgHdrs->eMsgType != E_MSG_TYPE_NOTIFICATION)
{
PRINT_INFORMATION_2((MMI_TRACE_INFO, "%s(%d)", "JMMS, Invalid Message Type", pMsgHdrs->eMsgType));
mmi_jmms_jdi_msg_deinit(hMsgHandle);
hMsgHandle = NULL;
eRet = mmi_jmms_add_pending_mms_info_node(
(U16) STR_ID_JMMS_UNABLE_PARSE_PUSH,
(U8) E_MSG_TYPE_IDLE_SCREEN_POP_UP,
NULL);
if (eRet == JC_OK)
{
mmi_jmms_check_for_idle_screen();
}
return;
}
///Transaction ID should be in ASCII
//otherwise need changes
PRINT_INFORMATION_2((MMI_TRACE_INFO, "%s", "JMMS: Push Indication for JMMS Notification received"));
pNotifyIndHdrs = (MESSAGE_NOTIFICATION*) pMsgHdrs->pHeaders;
if (g_jmms_context->pTransactionID != NULL)
{
if (strcmp(pNotifyIndHdrs->pTransactionID, g_jmms_context->pTransactionID) == 0)
{
mmi_jmms_jdi_msg_deinit(hMsgHandle); /* Deepali Review????? */
hMsgHandle = NULL;
return;
}
jdd_MemFree(g_jmms_context->pTransactionID);
}
g_jmms_context->pTransactionID =
(JC_INT8*) jdd_MemAlloc(sizeof(JC_INT8), strlen(pNotifyIndHdrs->pTransactionID) + 1);
if (g_jmms_context->pTransactionID != NULL)
{
strcpy(g_jmms_context->pTransactionID, pNotifyIndHdrs->pTransactionID);
}
mmi_jmms_handle_new_mms_notification(&ViewContent, hMsgHandle, pNotifyIndHdrs);
if (NULL != hMsgHandle)
{
eRet = mmi_jmms_jdi_msg_deinit(hMsgHandle);
if (JC_OK != eRet)
{
return;
}
hMsgHandle = NULL;
}
}
}
}
/*****************************************************************************
* FUNCTION
* mmi_jmms_add_pending_mms_delivery_report_node
* DESCRIPTION
*
* PARAMETERS
* status [IN]
* to_address [?] [?] [?]
* date [IN]
* RETURNS
*
*****************************************************************************/
JC_RETCODE mmi_jmms_add_pending_mms_delivery_report_node(U8 status, S8 *to_address, JC_UINT32 date)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
jmms_pending_mms_delivery_reports_struct *node;
U16 currScrenID;
U32 len = 0;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
PRINT_INFORMATION_2((MMI_TRACE_INFO, "%s", "mmi_jmms_add_pending_mms_delivery_report_node"));
currScrenID = GetActiveScreenId();
node =
(jmms_pending_mms_delivery_reports_struct*) jdd_MemAlloc(sizeof(jmms_pending_mms_delivery_reports_struct), 1);
if (node == NULL)
{
return JC_ERR_MEMORY_ALLOCATION;
}
node->status = status;
node->date = date;
if (to_address != NULL)
{
len = (pfnUnicodeStrlen((S8*) to_address) + 1) * ENCODING_LENGTH;
node->to_p = (S8*) jdd_MemAlloc(sizeof(S8), len);
if (node->to_p == NULL)
{
return JC_ERR_MEMORY_ALLOCATION;
}
memcpy(node->to_p, to_address, len);
}
else
{
node->to_p = NULL;
}
if (currScrenID == SCR_ID_JMMS_NEW_MMS_IND &&
(g_jmms_context->pending_mms_info_list->type == E_MSG_TYPE_DELIVERY_REPORT))
{ /* /add as second node of link list */
if (g_jmms_context->pending_delivery_reports == NULL) /* /not possible */
{
return E_JMMS_GENERAL_ERROR;
}
else
{
node->next = g_jmms_context->pending_delivery_reports->next;
g_jmms_context->pending_delivery_reports->next = node;
}
}
else /* /add as first node of link list */
{
node->next = g_jmms_context->pending_delivery_reports;
g_jmms_context->pending_delivery_reports = node;
}
return JC_OK;
}
/*****************************************************************************
* FUNCTION
* mmi_jmms_add_pending_mms_read_report_node
* DESCRIPTION
*
* PARAMETERS
* status [IN]
* from_address [?] [?] [?]
* date [IN]
* RETURNS
*
*****************************************************************************/
JC_RETCODE mmi_jmms_add_pending_mms_read_report_node(U8 status, S8 *from_address, JC_UINT32 date)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
jmms_pending_mms_read_reports_struct *node;
U16 currScrenID;
U32 len = 0;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
currScrenID = GetActiveScreenId();
PRINT_INFORMATION_2((MMI_TRACE_INFO, "%s", "mmi_jmms_add_pending_mms_read_report_node"));
node = (jmms_pending_mms_read_reports_struct*) jdd_MemAlloc(sizeof(jmms_pending_mms_read_reports_struct), 1);
if (node == NULL)
{
return JC_ERR_MEMORY_ALLOCATION;
}
node->status = status;
node->date = date;
if (from_address != NULL)
{
len = (pfnUnicodeStrlen((S8*) from_address) + 1) * ENCODING_LENGTH;
node->from_p = (S8*) jdd_MemAlloc(sizeof(S8), len);
if (node->from_p == NULL)
{
return JC_ERR_MEMORY_ALLOCATION;
}
memcpy(node->from_p, from_address, len);
}
else
{
node->from_p = NULL;
}
if (currScrenID == SCR_ID_JMMS_NEW_MMS_IND &&
(g_jmms_context->pending_mms_info_list->type == E_MSG_TYPE_READ_REPORT_RESPONSE))
{ /* /add as second node of link list */
if (g_jmms_context->pending_read_reports == NULL) /* /not possible */
{
return E_JMMS_GENERAL_ERROR;
}
else
{
node->next = g_jmms_context->pending_read_reports->next;
g_jmms_context->pending_read_reports->next = node;
}
}
else /* /add as first node of link list */
{
node->next = g_jmms_context->pending_read_reports;
g_jmms_context->pending_read_reports = node;
}
return JC_OK;
}
/*****************************************************************************
* FUNCTION
* mmi_jmms_add_pending_mms_info_node
* DESCRIPTION
*
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -