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

📄 jbrowserstartup.c

📁 MTK_MMI的部分源代码,从code中大致了解到MMI的执行流程
💻 C
📖 第 1 页 / 共 5 页
字号:
    if(g_brw_cntx.showDownloadAbortedPopup)
    {
        DisplayPopup((PU8) GetString(STR_GLOBAL_ERROR), IMG_GLOBAL_ERROR, 1, JBROWSER_POPUP_TIME, ERROR_TONE);
    }
}

#ifdef __JBROWSER_DLS_SUPPORT__

/*****************************************************************************
 * FUNCTION
 *  mmi_brw_dls_header_info_callback_hdlr
 * DESCRIPTION
 *  
 * PARAMETERS
 *  pAppArg							[?]         
 *  pBrowserHeaderIndication		[?]           
 * RETURNS
 *  JC_RETCODE
 *****************************************************************************/
JC_RETCODE mmi_brw_dls_header_info_callback_hdlr(void *pAppArg, COMM_HEADER_INDICATION *pBrowserHeaderIndication)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
	 JC_RETCODE eRet;
	 JC_UINT32 navlist_count;
	 
	/*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    PRINT_INFORMATION_2((MMI_TRACE_INFO, "%s", "ENTER: mmi_brw_dls_header_info_callback_hdlr"));
	
	eRet = jdi_BrowserSuspendRequest(pBrowserCtxt);
	if (eRet != JC_OK)
	{
		jdi_BrowserFetchStop(pBrowserCtxt);
		return	eRet;
	}

    g_brw_cntx.isDownloadSuspended = TRUE;
    g_brw_cntx.total_content_length = 0;
    g_brw_cntx.downloaded_content_length = 0;

	g_brw_dls_cntx.session_id = pBrowserHeaderIndication->uiRequestID;
	g_brw_dls_cntx.seq_num = 0;
	g_brw_dls_cntx.progress_flag = TRUE;

    if (pBrowserHeaderIndication->uiContentLength)
    {
        g_brw_cntx.total_content_length = pBrowserHeaderIndication->uiContentLength;
    }

    g_brw_page_cntx.brw_PageFetchStatus = 0;

// PMTSW00006571 Start
	jdi_BrowserGetNavListCount(pBrowserCtxt, &navlist_count);
    if (!navlist_count)
    {
        ClearExitHandler();
    }
// PMTSW00006571 End

	mmi_brw_dls_send_file_dl_ind(pBrowserHeaderIndication);
    return JC_OK;
}

/*****************************************************************************
 * FUNCTION
 *  mmi_brw_dls_fetch_indication_info_callback_hdlr
 * DESCRIPTION
 *  
 * PARAMETERS
 *  pAppArg							[?]         
 *  pBrowserFetchURLIndResp			[?]        
 * RETURNS
 *  void
 *****************************************************************************/
JC_RETCODE mmi_brw_dls_fetch_indication_info_callback_hdlr(void *pAppArg, COMM_FETCH_URL_IND_RESP *pBrowserFetchURLIndResp)
{
   /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    JC_RETCODE eRet;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
	PRINT_INFORMATION_2((MMI_TRACE_INFO, "%s(%d)(%d)", "ENTER: mmi_brw_dls_fetch_indication_info_callback_hdlr", pBrowserFetchURLIndResp->uiCurrentLength, pBrowserFetchURLIndResp->bHasMoreData));
    
	if (g_brw_cntx.isDownloading == TRUE )
	{
		if ((pBrowserFetchURLIndResp->bHasMoreData)
	        || (!pBrowserFetchURLIndResp->bHasMoreData && pBrowserFetchURLIndResp->uiCurrentLength))
	    {
	        g_brw_cntx.downloaded_content_length += pBrowserFetchURLIndResp->uiCurrentLength;
	        eRet = jdd_FSWrite(
	                (void*)pBrowserFetchURLIndResp->pucBuffer,
	                pBrowserFetchURLIndResp->uiCurrentLength,
	                1,
	                g_brw_cntx.dwnld_file_handle);
	
	        if (eRet == 1)
	        {
				if ( g_brw_dls_cntx.progress_flag == TRUE )
					mmi_brw_dls_send_file_dl_progress_ind(WAP_DL_STATUS_DOWNLOADING,WAP_DL_ERROR_OK);
	        }
	        else
	        {
				PRINT_INFORMATION_2((MMI_TRACE_INFO, "%s(%d)", "ERROR: jdd_FSWrite", eRet));

				g_brw_cntx.isDownloading = FALSE;
	            jdd_FSClose(g_brw_cntx.dwnld_file_handle);
				g_brw_cntx.dwnld_file_handle = NULL;
				if (g_brw_dls_cntx.p_file_name != NULL)
				{
					jdd_MemFree(g_brw_dls_cntx.p_file_name);
					g_brw_dls_cntx.p_file_name = NULL;
				}
	            jdd_FSDeinitialize(g_brw_cntx.dwnld_fs_handle);
				g_brw_cntx.dwnld_fs_handle = NULL;
				jdi_BrowserFetchStop(pBrowserCtxt);
				
				switch (eRet)
				{
					case JC_ERR_FILE_INVALID_PATH:
						mmi_brw_dls_send_file_dl_progress_ind(WAP_DL_STATUS_ABORTED, WAP_DL_ERROR_INVALID_FILE);
						break;
	
					case JC_ERR_FILE_FULL:
						mmi_brw_dls_send_file_dl_progress_ind(WAP_DL_STATUS_ABORTED, WAP_DL_ERROR_DISK_FULL);
						break;
	
					case JC_ERR_FILE_INVALID_ACCESS:
					default:
						mmi_brw_dls_send_file_dl_progress_ind(WAP_DL_STATUS_ABORTED, WAP_DL_ERROR_FILE_ACCESS);
						break;
				}
			    return eRet;
	        }
	    }
	    if (!pBrowserFetchURLIndResp->bHasMoreData)
	    {
			PRINT_INFORMATION_2((MMI_TRACE_INFO, "%s", "Download Complete"));
			g_brw_cntx.isDownloading = FALSE;
	        if (g_brw_cntx.dwnld_file_handle)
			{
				jdd_FSClose(g_brw_cntx.dwnld_file_handle);
				g_brw_cntx.dwnld_file_handle = NULL;

				if (g_brw_dls_cntx.p_file_name!=NULL)
				{
					jdd_MemFree(g_brw_dls_cntx.p_file_name);
					g_brw_dls_cntx.p_file_name = NULL;
				}
			}
			if (g_brw_cntx.dwnld_fs_handle)
			{
				jdd_FSDeinitialize(g_brw_cntx.dwnld_fs_handle);
				g_brw_cntx.dwnld_fs_handle = NULL;
			}
	        if (IsScreenPresent(SCR_ID_BRW_JBROWSER_MAIN))
	        {
	            g_brw_page_cntx.brw_pageRenderStatus = 1;
	        }
			mmi_brw_dls_send_file_dl_progress_ind(WAP_DL_STATUS_COMPLETE,WAP_DL_ERROR_OK);
	    }
	}
	else
    {
		PRINT_INFORMATION_2((MMI_TRACE_INFO, "%s", "EXIT: mmi_brw_dls_fetch_indication_info_callback_hdlr and g_brw_cntx.isDownloading is False" ));
		return JC_OK;
	}
		
	return JC_OK;
}

/*****************************************************************************
 * FUNCTION
 *  mmi_brw_dls_fetch_error_info_callback_hdlr
 * DESCRIPTION
 *  
 * PARAMETERS
 *  pAppArg             [?]         
 *  uiReferenceID       [IN]        
 *  eRet                [IN]        
 * RETURNS
 *  void
 *****************************************************************************/
void mmi_brw_dls_fetch_error_info_callback_hdlr(void *pAppArg, JC_UINT32 uiReferenceID, JC_RETCODE eRet)
{
   /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
	PRINT_INFORMATION_2((MMI_TRACE_INFO, "%s(%d)(%d)", "ENTER: mmi_brw_dls_fetch_error_info_callback_hdlr", g_brw_cntx.isDownloading, g_brw_cntx.isDownloadSuspended));
    
	if ( g_brw_cntx.isDownloading == TRUE )  // Connection loss while downloading
	{
		mmi_brw_dls_send_file_dl_progress_ind(WAP_DL_STATUS_ABORTED,WAP_DL_ERROR_CONNECTION_CLOSED);
	}
	
	g_brw_cntx.isDownloading = FALSE;
	g_brw_cntx.isDownloadSuspended = FALSE;

    if (g_brw_cntx.dwnld_file_handle)
    {
        jdd_FSClose(g_brw_cntx.dwnld_file_handle);
		g_brw_cntx.dwnld_file_handle = NULL;

		if (g_brw_dls_cntx.p_file_name != NULL && g_brw_cntx.dwnld_fs_handle != NULL)
		{
			jdd_FSDelete(g_brw_cntx.dwnld_fs_handle, g_brw_dls_cntx.p_file_name); // Delete file
			jdd_MemFree(g_brw_dls_cntx.p_file_name);
			g_brw_dls_cntx.p_file_name = NULL;
		}
    }
    if (g_brw_cntx.dwnld_fs_handle)
    {
        jdd_FSDeinitialize(g_brw_cntx.dwnld_fs_handle);
		g_brw_cntx.dwnld_fs_handle = NULL;
    }
}

/*****************************************************************************
 * FUNCTION
 *  mmi_brw_dls_send_file_dl_ind
 * DESCRIPTION
 *  To send file download indication to DA
 * PARAMETERS
 *  pBrowserHeaderIndication             [?]            
 * RETURNS
 *  void
 *****************************************************************************/
void mmi_brw_dls_send_file_dl_ind(COMM_HEADER_INDICATION *pBrowserHeaderIndication)
{
	/*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
	MYQUEUE Message;
	wap_mmi_file_dl_ind_struct *p_dl_ind_st = NULL;
	wap_mmi_file_dl_var_struct *p_dl_var_st = NULL;
	peer_buff_struct *peer_buff_ptr = NULL;
	U16 peer_pdu_len = 0;
	JC_CHAR *tempFileName;
	FS_HANDLE fHandle;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
	PRINT_INFORMATION_2((MMI_TRACE_INFO, "%s", "ENTER: mmi_brw_dls_send_file_dl_ind"));

	p_dl_ind_st = (wap_mmi_file_dl_ind_struct*) construct_local_para(sizeof(wap_mmi_file_dl_ind_struct), TD_CTRL);
	p_dl_ind_st->session_id = pBrowserHeaderIndication->uiRequestID;
	pfnUnicodeStrcpy((S8*)p_dl_ind_st->url, (S8*) pBrowserHeaderIndication->psUrl);
 
	mmi_brw_dls_set_file_name(p_dl_ind_st->url, '/');  // Get file name in g_brw_dls_cntx.p_file_name

	if(g_brw_dls_cntx.p_file_name != NULL)
	{
		fHandle = FS_GetAttributes (g_brw_dls_cntx.p_file_name);
		PRINT_INFORMATION_2((MMI_TRACE_INFO, "%s(%d)", "FS_GetAttributes  returns", fHandle));
	}

	if ( g_brw_dls_cntx.p_file_name == NULL || fHandle == FS_INVALID_FILENAME )
	{
	// File Name is not valid. Creating a temp file name
		PRINT_INFORMATION_2((MMI_TRACE_INFO, "%s", "Invalid file name"));
		if (g_brw_dls_cntx.p_file_name != NULL )
		{
			jdd_MemFree(g_brw_dls_cntx.p_file_name);
			g_brw_dls_cntx.p_file_name = NULL;
		}

		jdd_FSGetDownloadFileName(&tempFileName);
		mmi_brw_dls_set_file_name((U8*)tempFileName, '\\');	// Get file name in g_brw_dls_cntx.p_file_name
		jdd_MemFree(tempFileName);
	}
	pfnUnicodeStrcpy((S8*)p_dl_ind_st->file_name ,(S8*) g_brw_dls_cntx.p_file_name);
	jdd_MemFree(g_brw_dls_cntx.p_file_name);
	g_brw_dls_cntx.p_file_name = NULL;
	
	pfnUnicodeStrcpy((S8*)p_dl_ind_st->mime_type,  pBrowserHeaderIndication->pszContentType);
	p_dl_ind_st->file_length = pBrowserHeaderIndication->uiContentLength;

	peer_buff_ptr = (peer_buff_struct*)construct_peer_buff(sizeof(wap_mmi_file_dl_var_struct), 0, 0, TD_CTRL);
	p_dl_var_st = get_pdu_ptr(peer_buff_ptr, &peer_pdu_len);
	if(p_dl_var_st)
	{
		p_dl_var_st->content_len = pBrowserHeaderIndication->uiHeaderLength;
        pfnUnicodeStrcpy((S8*)p_dl_var_st->content, (S8*)pBrowserHeaderIndication->pucHeader ) ;
	}

    Message.oslSrcId = MOD_WAP;
    Message.oslDestId = MOD_MMI;
    Message.oslMsgId = MSG_ID_WAP_MMI_FILE_DL_IND;
    Message.oslDataPtr = (oslParaType*) p_dl_ind_st;
    Message.oslPeerBuffPtr = peer_buff_ptr;
    OslMsgSendExtQueue(&Message);
}

/*****************************************************************************
 * FUNCTION
 *  mmi_brw_dls_file_dl_res_hdlr
 * DESCRIPTION
 *  To handle response message of file download indication from DA
 * PARAMETERS
 *  Msg             [?]               
 * RETURNS
 *  void
 *****************************************************************************/
void mmi_brw_dls_file_dl_res_hdlr(void *Msg)
{
	/*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    JC_RETCODE eRet;
	wap_mmi_file_dl_res_struct * p_dl_res_st = (wap_mmi_file_dl_res_struct *) Msg;
    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
	PRINT_INFORMATION_2((MMI_TRACE_INFO, "%s(%d)(%d)", "ENTER: mmi_brw_dls_file_dl_res_hdlr", p_dl_res_st->result, g_brw_cntx.isDownloadSuspended));
 	
	if ( g_brw_cntx.isDownloadSuspended == TRUE )
	{
		if ( p_dl_res_st->result == WAP_DL_ERROR_CANCELLED)
		{
			g_brw_cntx.isDownloading = FALSE;
			g_brw_cntx.isDownloadSuspended = FALSE;
			jdi_BrowserFetchStop(pBrowserCtxt);      // Download Cancel 
		}
		else if ( p_dl_res_st->result == WAP_DL_ERROR_OK) // Start Download
		{
			if(p_dl_res_st->session_id == g_brw_dls_cntx.session_id )
			{
				if (g_brw_cntx.total_content_length != 0 && mmi_brw_dls_is_free_space_available(p_dl_res_st->file_path) == FALSE) // Free Space not available
				{
					PRINT_INFORMATION_2((MMI_TRACE_INFO, "%s", "ERROR: mmi_brw_dls_is_free_space_available"));
					
					g_brw_cntx.isDownloading = FALSE;
					g_brw_cntx.isDownloadSuspended = FALSE;
					jdi_BrowserFetchStop(pBrowserCtxt);    			
					mmi_brw_dls_send_file_dl_progress_ind(WAP_DL_STATUS_ABORTED,WAP_DL_ERROR_DISK_FULL);
				}
				else
				{
					eRet = jdd_FSInitialize(&g_brw_cntx.dwnld_fs_handle);			
					if (eRet == JC_OK)
					{
						g_brw_dls_cntx.p_file_name = (JC_CHAR *)jdd_MemAlloc(pfnUnicodeStrlen((S8* )p_dl_res_st->file_path) * ENCODING_LENGTH + 2, sizeof(S8));
						pfnUnicodeStrcpy ((S8*)g_brw_dls_cntx.p_file_name, (S8*) p_dl_res_st->file_path);
						g_brw_cntx.dwnld_file_handle = jdd_FSOpen(g_brw_cntx.dwnld_fs_handle, p_dl_res_st->file_path, E_CREATE_WRITE_MODE);
						if (!g_brw_cntx.dwnld_file_handle)
						{
							PRINT_INFORMATION_2((MMI_TRACE_INFO, "%s", "ERROR: jdd_FSOpen"));

⌨️ 快捷键说明

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