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

📄 jmmsprotocol.c

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