⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jmmsprotocol.c

📁 MTK手机平台的MMI部分的源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
            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 + -