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

📄 jmmspushhandling.c

📁 MTK手机平台的MMI部分的源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
        GetRootTitleIcon(MAIN_MENU_MESSAGES_MENUID),
        0,
        0,
		0,
        0,
        (U8*) GetString(STR_ID_JMMS_LOADING_MMS),
        IMG_GLOBAL_PROGRESS,
        NULL);
	 ClearAllKeyHandler();
}
#endif
/*****************************************************************************
 * FUNCTION
 *  mmi_jmms_handle_new_mms_notification
 * DESCRIPTION
 *  
 * PARAMETERS
 *  view_content        [?]         [?]         [?]
 *  hMsgHandle          [IN]        
 *  pNotifyIndHdrs      [?]         [?]         [?]
 * RETURNS
 *  void
 *****************************************************************************/
void mmi_jmms_handle_new_mms_notification(
        CONTENT_DATA *view_content,
        MSG_HANDLE hMsgHandle,
        MESSAGE_NOTIFICATION *pNotifyIndHdrs)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
	#ifndef __MMI_MMS_OMA_CONF_273__
    JC_UINT32 temp;
	#endif
    U32 roaming_status;
    U8 retrieval_mode;
    JC_RETCODE eRet = JC_OK;

    JC_UINT32 msg_index;

    /* JC_UINT32 msgid = 0; */
    MESSAGE_HEADERS *pMsgHdrs = NULL;
    JC_UINT32 mms_index = 0;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    /* /check the retrival mnode */
    PRINT_INFORMATION_2((MMI_TRACE_INFO, "%s", "mmi_jmms_handle_new_mms_notification"));

    roaming_status = g_jmms_context->curr_roaming_state;
    if (roaming_status == 1)
    {
        PRINT_INFORMATION_2((MMI_TRACE_INFO, "%s", "jmms Roaming status is 1."));
        if (E_ROAMING_RETRIEVAL_AS_HOME == (U16) mmi_jmms_retrieval_settings_roaming_retrieval_mode())
        {
            retrieval_mode = mmi_jmms_retrieval_settings_home_network_retrieval_mode();
        }
        else
        {
            retrieval_mode = mmi_jmms_retrieval_settings_roaming_retrieval_mode();
        }
    }
    else
    {
        retrieval_mode = mmi_jmms_retrieval_settings_home_network_retrieval_mode();
    }

    if (retrieval_mode == E_ROAMING_RETRIEVAL_RESTRICTED)   /* /E_ROAMING_RETRIEVAL_IMMEDAITE and E_HOME_NOETWORK_RETRIEVAL_IMMEDAITE */
        /* have same values */
    {
        PRINT_INFORMATION_2((MMI_TRACE_INFO, "jmms Retrival Mode: %s", "RETRIEVAL_RESTRICTED"));
        eRet = mmi_jmms_notification_reponse(pNotifyIndHdrs, E_MSG_REJECTED);
        return;
    }
#ifndef __MMI_MMS_OMA_CONF_273__
    /* /check the filters */
    temp = 1024 * (JC_UINT32) mmi_jmms_retrieval_settings_msg_size_filter();    /* in bytes */
#endif /* __MMI_MMS_OMA_CONF_273__ */ 
    if ((pNotifyIndHdrs->eMsgClass == E_MSG_ADVERTISEMENT_CLASS &&
         E_REJECT == mmi_jmms_retrieval_settings_advertisment_filter()) || ((pNotifyIndHdrs->pFrom == NULL) &&
                                                                            E_REJECT ==
                                                                            mmi_jmms_retrieval_settings_anonymous_filter
                                                                            ())
#ifndef __MMI_MMS_OMA_CONF_273__
        || (pNotifyIndHdrs->uiMessageSize > temp)
#endif 
        )
    {
        PRINT_INFORMATION_2((MMI_TRACE_INFO, "%s", "jmms send the notification response with Reject Status"));
        /* /send the notfication response with reject status */
        eRet = mmi_jmms_notification_reponse(pNotifyIndHdrs, E_MSG_REJECTED);
        return;
    }

#ifdef  __MMI_MMS_OMA_CONF_273__ 
   	if(pNotifyIndHdrs->uiMessageSize > MAX_MMS_MSG_SIZE)
    {
   		retrieval_mode = E_ROAMING_RETRIEVAL_DEFFERED;
    }
#endif

#ifdef __USB_IN_NORMAL_MODE__
    if (mmi_jmms_check_usb_mode() == 1)
    {
        retrieval_mode = E_ROAMING_RETRIEVAL_DEFFERED;
    }
#endif /* __USB_IN_NORMAL_MODE__ */ 

    if (retrieval_mode == E_ROAMING_RETRIEVAL_IMMEDAITE)
    {
        PRINT_INFORMATION_2((MMI_TRACE_INFO, "jmms retrival mode: %s", "RETRIEVAL_IMMEDAITE"));
        eRet = mmi_jmms_jdi_get_msg_headers(hMsgHandle, &pMsgHdrs);
        if (JC_OK == eRet)
        {
            PRINT_INFORMATION_2((MMI_TRACE_INFO, "%s", "jmms saving the notification into InBox."));
            /* save notification in inbox. */
            eRet = mmi_jmms_save_message_buffer_in_Store("Inbox", &(mms_index), pMsgHdrs, view_content, NULL);
            if(eRet == JC_OK)
               mmi_jmms_set_msg_as_unread(mms_index-1);
            if (eRet != JC_OK)
            {
					mms_index = 0;  /* it means notification didn't save successfully */
                    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_NEW_MMS_NOTIF_SAVING,
                                (U8) E_MSG_TYPE_IDLE_SCREEN_POP_UP,
                                NULL);
                    }
                    else
                    {
                        eRet = mmi_jmms_add_pending_mms_info_node(
                                (U16) STR_ID_JMMS_ERROR_NEW_MMS_NOTIF_SAVING,
                                (U8) E_MSG_TYPE_IDLE_SCREEN_POP_UP,
                                NULL);
                    }
                    if (eRet == JC_OK)
                    {
                        mmi_jmms_check_for_idle_screen();
                    }
					return;
            }
			else
			{
				#ifdef __MMI_UNIFIED_MESSAGE__
					mmi_um_jmms_refresh_ind();
				#else
					mmi_jmms_refresh_inbox();
				#endif
			}
	        /* PMT VIKAS START 20060401 */
		    //mmi_jmms_update_status_icon_indicator();
			/* PMT VIKAS END 20060401 */
        }
        else
        {
            PRINT_INFORMATION_2((MMI_TRACE_INFO, "jmms fail to get the MMS Header %d", eRet));
        }
        mmi_jmms_download_mms(pNotifyIndHdrs->pContentLocation, E_TYPE_IMMEDIATE_RETRIEVAL_FETCH, mms_index, 1);
    }
    else if (retrieval_mode == E_ROAMING_RETRIEVAL_DEFFERED)
    {
        PRINT_INFORMATION_2((MMI_TRACE_INFO, "jmms Retrival Mode: %s", "RETRIEVAL_DEFFERED"));
        eRet = mmi_jmms_notification_reponse(pNotifyIndHdrs, E_MSG_DEFERRED);
        PRINT_INFORMATION_2((MMI_TRACE_INFO, "jmms saving the notification into InBox return: %d", eRet));
        if (eRet == JC_OK)
        {
            eRet = mmi_jmms_jdi_get_msg_headers(hMsgHandle, &pMsgHdrs);
            if (JC_OK == eRet)
            {
                PRINT_INFORMATION_2((MMI_TRACE_INFO, "%s", "jmms saving the notification into InBox"));
                /* save notification in inbox. */
                eRet = mmi_jmms_save_message_buffer_in_Store("Inbox", &msg_index, pMsgHdrs, view_content, NULL);
                if(eRet == JC_OK)
                    mmi_jmms_set_msg_as_unread(msg_index-1);
                /* PMT VIKAS START 20060401 */
                mmi_jmms_update_status_icon_indicator();
                /* PMT VIKAS END 20060401 */
            
                PRINT_INFORMATION_2((MMI_TRACE_INFO, "%s:%d", "save result", eRet));
                if (eRet == JC_OK)
                {

                    eRet = mmi_jmms_add_pending_mms_info_node(
                            (U16) msg_index,
                            (U8) E_MSG_TYPE_NOTIFICATION,
                            (S8*) pNotifyIndHdrs->pContentLocation);
                    if (eRet == JC_OK)
                    {

                        /* Display pop up according to idle screen or not. */
                        mmi_jmms_show_new_mms_pop_up();
                    }
					#ifndef __MMI_UNIFIED_MESSAGE__
						mmi_jmms_refresh_inbox_no_screen_update();
					#endif
                }
                else
                {
                    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_NEW_MMS_NOTIF_SAVING,
                                (U8) E_MSG_TYPE_IDLE_SCREEN_POP_UP,
                                NULL);
                    }
                    else
                    {
                        eRet = mmi_jmms_add_pending_mms_info_node(
                                (U16) STR_ID_JMMS_ERROR_NEW_MMS_NOTIF_SAVING,
                                (U8) E_MSG_TYPE_IDLE_SCREEN_POP_UP,
                                NULL);
                    }
                    if (eRet == JC_OK)
                    {
                        mmi_jmms_check_for_idle_screen();
                    }

                }
            }
            else
            {
                eRet = mmi_jmms_add_pending_mms_info_node(
                        (U16) STR_ID_JMMS_ERROR_NEW_MMS_NOTIF_SAVING,
                        (U8) E_MSG_TYPE_IDLE_SCREEN_POP_UP,
                        NULL);
                if (eRet == JC_OK)
                {
                    mmi_jmms_check_for_idle_screen();
                }
            }

        }

    }

}

///msg_index is used for immediate retrieval fetch to store the index of mms to be
//updated after downlaoding of mms


/*****************************************************************************
 * FUNCTION
 *  mmi_jmms_download_mms
 * DESCRIPTION
 *  
 * PARAMETERS
 *  content_location        [?]         [?]         [?]
 *  comm_state              [IN]        
 *  msg_index               [IN]        
 *  retry_counter           [IN]        
 * RETURNS
 *  
 *****************************************************************************/
JC_RETCODE mmi_jmms_download_mms(JC_INT8 *content_location, U16 comm_state, JC_UINT32 msg_index, U8 retry_counter)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    JC_RETCODE eRet = JC_OK;
    COMM_FETCH_URL fetchUrlInfo = {0, };
    JC_UINT32 uiReferenceID = 1;
    S8 *temp_url = NULL;
    S32 len = 0;
    S8 *mms_content_location = NULL;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    PRINT_INFORMATION_2((MMI_TRACE_INFO, "%s", "mmi_jmms_download_mms"));

    fetchUrlInfo.eContentMode = E_COMM_BUFFER;

    len = (strlen((S8*) content_location) + 1);

    /* adding for retry mechanism */
    mms_content_location = (S8*) jdd_MemAlloc(sizeof(S8), len);
    if (mms_content_location == NULL)
    {
        eRet = JC_ERR_MEMORY_ALLOCATION;
        goto END;
    }

    /* /commenitng for retry mechnaism */
    temp_url = (S8*) jdd_MemAlloc(sizeof(S8), len * ENCODING_LENGTH);
    if (temp_url == NULL)
    {
        eRet = JC_ERR_MEMORY_ALLOCATION;
        goto END;
    }

    strcpy((char*)mms_content_location, (const char*)content_location);

    AnsiiToUnicodeString((S8*) temp_url, (S8*) content_location);

    fetchUrlInfo.pszURL = (JC_CHAR*) temp_url;

    fetchUrlInfo.pszContentType = NULL;

    fetchUrlInfo.uUserDataMode.pucPostData = NULL;
    fetchUrlInfo.bIsFile = E_FALSE;
    fetchUrlInfo.uiPostLen = 0;
    fetchUrlInfo.pHeadersInfo = NULL;
    fetchUrlInfo.eCommFetchType = E_COMM_FETCH_GET;

    if (comm_state == E_TYPE_DEFFERED_RETRIEVAL_FETCH)
    {
        /*
         * For deffered Retrieval need to use the g_jmms_context->uiReferenceID variable beacuse downloading screen
         * is there and downloading can be cancelled. Also don't use this variable for Immediate Retrieval etc.
         * because during Sending/Defered Downlaod there can be immediate retrieval so this varaiable can be overwritten.
         * 
         * This variable is used during Sending/Deffered Downloading beacause Sending/Deffered Downlaoding can be 
         * cancelled by user and so we require this value in jdi_CommunicationStopReq().
         * Also there is no harm on using the same varaible for sending and deffered retrieval because sending and 
         * deffered retrieval cann't be both together.
         */
        PRINT_INFORMATION_2((MMI_TRACE_INFO, "jmms comm State: %s", "E_TYPE_DEFFERED_RETRIEVAL_FETCH"));
        g_jmms_context->uiReferenceID = 0;
        eRet = jdi_CommunicationFetchURL(g_jmms_context->hCommHandle, &fetchUrlInfo, &g_jmms_context->uiReferenceID);
        if (eRet == JC_OK)
        {
            PRINT_INFORMATION_2((MMI_TRACE_INFO, "%s(%d)", "JMMS Comm Fetch Download", g_jmms_context->uiReferenceID));

            eRet = mmi_jmms_add_comm_node(
                    g_jmms_context,
                    g_jmms_context->uiReferenceID,
                    comm_state,
                    NULL,
                    msg_index,
                    retry_counter,
                    mms_content_location);
            if (eRet != JC_OK)
            {
                PRINT_INFORMATION_2((MMI_TRACE_INFO, "%s(%d)", "jmms fail to add comm node", eRet));
                jdi_CommunicationFreeReference(g_jmms_context->hCommHandle, g_jmms_context->uiReferenceID);
                g_jmms_context->uiReferenceID = 0;
                eRet = JC_ERR_MEMORY_ALLOCATION;
            }
        }
    }
    else
    {
        eRet = jdi_CommunicationFetchURL(g_jmms_context->hCommHandle, &fetchUrlInfo, &uiReferenceID);
        if (eRet == JC_OK)
        {
            PRINT_INFORMATION_2((MMI_TRACE_INFO, "%s(%d)", "JMMS Comm Fetch Download", uiReferenceID));

            eRet = mmi_jmms_add_comm_node(
                    g_jmms_context,
                    uiReferenceID,
                    comm_state,
                    NULL,
                    msg_index,
                    retry_counter,
                    mms_content_location);
            if (eRet != JC_OK)
            {
                PRINT_INFORMATION_2((MMI_TRACE_INFO, "%s(%d)", "jmms fail to add comm node", eRet));
                jdi_CommunicationFreeReference(g_jmms_context->hCommHandle, uiReferenceID);
                eRet = JC_ERR_MEMORY_ALLOCATION;
            }
        }
    }

  END:
    if (temp_url != NULL)
    {
        jdd_MemFree(temp_url);
    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -