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

📄 jbrowserstartup.c

📁 MTK_MMI的部分源代码,从code中大致了解到MMI的执行流程
💻 C
📖 第 1 页 / 共 5 页
字号:
							g_brw_cntx.isDownloading = FALSE;
							g_brw_cntx.isDownloadSuspended = FALSE;
							jdi_BrowserFetchStop(pBrowserCtxt);
							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;
							mmi_brw_dls_send_file_dl_progress_ind(WAP_DL_STATUS_ABORTED, WAP_DL_ERROR_INVALID_FILE);
						}
						else
						{
							g_brw_cntx.isDownloadSuspended = FALSE;
							g_brw_cntx.isDownloading = TRUE;
							jdi_BrowserResumeRequest(pBrowserCtxt);      // Download Start				
						}
					}
					else
					{
						PRINT_INFORMATION_2((MMI_TRACE_INFO, "%s(%d)", "ERROR: jdd_FSInitialize", eRet));

						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_FILE_ACCESS); 
					}			
				}
			}
			else
			{
				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_INVALID_SESSION_ID); // WAP_DL_STATUS_ABORT && WAP_DL_ERROR_INVALID_SESSION_ID
			}
		}
		else // Result is other than WAP_DL_ERROR_OK and WAP_DL_ERROR_CANCELLED.
		{
			g_brw_cntx.isDownloading = FALSE;
			g_brw_cntx.isDownloadSuspended = FALSE;
			jdi_BrowserFetchStop(pBrowserCtxt);
		}
	}
	else
	{
		if ( p_dl_res_st->result == WAP_DL_ERROR_OK)
			mmi_brw_dls_send_file_dl_progress_ind(WAP_DL_STATUS_ABORTED,WAP_DL_ERROR_CONNECTION_CLOSED);
	}
}

/*****************************************************************************
 * FUNCTION
 *  mmi_brw_dls_send_file_dl_progress_ind
 * DESCRIPTION
 *  To send file progress information to DA
 * PARAMETERS
 *  status      [?]         
 *  cause       [?]             
 * RETURNS
 *  void
 *****************************************************************************/
void mmi_brw_dls_send_file_dl_progress_ind(U8 status, U8 cause)
{
	/*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
	MYQUEUE Message;
	wap_mmi_file_dl_progress_ind_struct *p_dl_prg_ind_st = NULL;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/	
	PRINT_INFORMATION_2((MMI_TRACE_INFO, "%s(%d)(%d)", "ENTER: mmi_brw_dls_send_file_dl_progress_ind", status, cause));

	p_dl_prg_ind_st = (wap_mmi_file_dl_progress_ind_struct*) construct_local_para(sizeof(wap_mmi_file_dl_progress_ind_struct), TD_CTRL);
	
	g_brw_dls_cntx.progress_flag = FALSE;
	g_brw_dls_cntx.seq_num++;
	
	p_dl_prg_ind_st->session_id = g_brw_dls_cntx.session_id;
	p_dl_prg_ind_st->seq_num = g_brw_dls_cntx.seq_num;
	p_dl_prg_ind_st->status = status;
	p_dl_prg_ind_st->cause = cause;
	p_dl_prg_ind_st->acc_size = g_brw_cntx.downloaded_content_length;

    Message.oslSrcId = MOD_WAP;
    Message.oslDestId = MOD_MMI;
    Message.oslMsgId = MSG_ID_WAP_MMI_FILE_DL_PROGRESS_IND;
    Message.oslDataPtr = (oslParaType*) p_dl_prg_ind_st;
    Message.oslPeerBuffPtr = NULL;
    OslMsgSendExtQueue(&Message);
}

/*****************************************************************************
 * FUNCTION
 *  mmi_brw_dls_file_dl_progress_res_hdlr
 * DESCRIPTION
 *  To handle response message of file progress information from DA
 * PARAMETERS
 *  Msg             [?]              
 * RETURNS
 *  void
 *****************************************************************************/
void mmi_brw_dls_file_dl_progress_res_hdlr(void *Msg)
{ 
	/*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/	
	wap_mmi_file_dl_progress_res_struct *p_dl_prg_res_st = (wap_mmi_file_dl_progress_res_struct*) Msg;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/	
	PRINT_INFORMATION_2((MMI_TRACE_INFO, "%s(%d)", "ENTER: mmi_brw_dls_file_dl_progress_res_hdlr", g_brw_cntx.isDownloading));

	if ( g_brw_cntx.isDownloading == TRUE)
	{
		if (g_brw_dls_cntx.session_id != p_dl_prg_res_st->session_id )
		{
			g_brw_cntx.isDownloadSuspended = FALSE;
			g_brw_cntx.isDownloading = FALSE;
			jdi_BrowserFetchStop(pBrowserCtxt);
			mmi_brw_dls_send_file_dl_progress_ind(WAP_DL_STATUS_ABORTED,WAP_DL_ERROR_INVALID_SESSION_ID); // WAP_DL_STATUS_ABORT && WAP_DL_ERROR_INVALID_SESSION_ID
		}
		else
		{
			g_brw_dls_cntx.progress_flag = TRUE ;
		}
	}
}

/*****************************************************************************
 * FUNCTION
 *  mmi_brw_dls_file_dl_stop_req_hdlr
 * DESCRIPTION
 *  To handle file download request message from DA
 * PARAMETERS
 *  Msg             [?]         
 * RETURNS
 *  void
 *****************************************************************************/
void mmi_brw_dls_file_dl_stop_req_hdlr(void *Msg)
{
	/*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
	wap_mmi_file_dl_stop_req_struct *p_dl_stop_req = (wap_mmi_file_dl_stop_req_struct *) Msg;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/	
	PRINT_INFORMATION_2((MMI_TRACE_INFO, "%s(%d)", "ENTER: mmi_brw_dls_file_dl_stop_req_hdlr", g_brw_cntx.isDownloading));

	if ( g_brw_cntx.isDownloading == TRUE)
	{
		if (g_brw_dls_cntx.session_id != p_dl_stop_req->session_id )
		{
			mmi_brw_dls_send_file_dl_stop_rsp(WAP_DL_STATUS_DOWNLOADING, WAP_DL_ERROR_INVALID_SESSION_ID);
		}
		else
		{
			jdi_BrowserFetchStop(pBrowserCtxt);
			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)
				{
					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;
			}
			mmi_brw_dls_send_file_dl_stop_rsp(WAP_DL_STATUS_CANCELLED, WAP_DL_ERROR_OK);
		}
	}
	else
	{
		mmi_brw_dls_send_file_dl_stop_rsp(WAP_DL_STATUS_COMPLETE,WAP_DL_ERROR_CANCELLED);
	}
}

/*****************************************************************************
 * FUNCTION
 *  mmi_brw_dls_send_file_dl_stop_rsp
 * DESCRIPTION
 *  To send response of file donwload request to DA
 * PARAMETERS
 *  status      [?]         
 *  cause       [?]             
 * RETURNS
 *  void
 *****************************************************************************/
void mmi_brw_dls_send_file_dl_stop_rsp(U8 status, U8 cause)
{
	/*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
	MYQUEUE Message;
	wap_mmi_file_dl_stop_rsp_struct *p_dl_stop_rsp = (wap_mmi_file_dl_stop_rsp_struct *)construct_local_para(sizeof(wap_mmi_file_dl_stop_rsp_struct), TD_CTRL);

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
	PRINT_INFORMATION_2((MMI_TRACE_INFO, "%s(%d)(%d)", "ENTER: mmi_brw_dls_send_file_dl_stop_rsp", status, cause));

	p_dl_stop_rsp->session_id = g_brw_dls_cntx.session_id;
	p_dl_stop_rsp->seq_num = g_brw_dls_cntx.seq_num;
	p_dl_stop_rsp->status = status;
	p_dl_stop_rsp->cause = cause;
	p_dl_stop_rsp->acc_size = g_brw_cntx.downloaded_content_length;

    Message.oslSrcId = MOD_WAP;
    Message.oslDestId = MOD_MMI;
    Message.oslMsgId = MSG_ID_WAP_MMI_FILE_DL_STOP_RSP;
    Message.oslDataPtr = (oslParaType*) p_dl_stop_rsp;
    Message.oslPeerBuffPtr = NULL;
    OslMsgSendExtQueue(&Message);
}

/*****************************************************************************
 * FUNCTION
 *  mmi_brw_dls_set_file_name
 * DESCRIPTION
 *  This function is used to extract the file name from the given url and to set global variable g_brw_dls_cntx.p_file_name
 * PARAMETERS
 *  url              
 *  delim
 * RETURNS
 *  void
 *****************************************************************************/
void mmi_brw_dls_set_file_name(U8 *url, U8 delim)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/	
	U16 url_len, file_name_len, file_ext_len, indexOfDelim, indexOfDot, indexOfFileNameEnd;
	S16 i;
	
    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
	ASSERT(url);

	url_len = (pfnUnicodeStrlen((S8*) url)) * ENCODING_LENGTH;
	file_name_len = indexOfDelim = indexOfDot = 0;
	indexOfFileNameEnd = url_len;  // Here indexOfFileNameEnd is that index in the url which is either NULL character or special character like '?'
	for( i = url_len - 1 * ENCODING_LENGTH; i >= 0 ; i--)
	{
		if(*(url + i) == '?')
		{
			indexOfFileNameEnd = i;   // '?' symbol present in the url. Ignore characters after '?' symbol
		}
		
		if(*(url + i) == '.')
		{
			indexOfDot = i;	
		}
		
		if( *(url + i) == delim)
		{
			indexOfDelim = i;
			break;
		}
	}

	if (indexOfDelim == 0 || indexOfDot == 0 || indexOfDot < indexOfDelim || indexOfFileNameEnd < indexOfDot || indexOfFileNameEnd < indexOfDelim) // Invalid URL. 
	{
		PRINT_INFORMATION_2((MMI_TRACE_INFO, "%s(%d)(%d)(%d)", "ERROR:mmi_brw_dls_set_file_name", indexOfDelim, indexOfDot, indexOfFileNameEnd));
		return;
	}

	file_ext_len =  indexOfFileNameEnd - indexOfDot;
	file_name_len = indexOfDot - indexOfDelim - (1 * ENCODING_LENGTH);

	if(file_name_len + (1 * ENCODING_LENGTH) > WAP_DL_MAX_FILE_NAME_LEN - file_ext_len)   // If file name length exceeds
	{
		file_name_len = WAP_DL_MAX_FILE_NAME_LEN - file_ext_len;
	}
	g_brw_dls_cntx.p_file_name = (JC_CHAR *)jdd_MemAlloc(file_name_len + file_ext_len + (1 * ENCODING_LENGTH), sizeof(S8));
	
	// Copying file_name_len characters from the url
	for (i = indexOfDelim + (1 * ENCODING_LENGTH); i < url_len ; i++)
	{
		*( (S8*) g_brw_dls_cntx.p_file_name + i - indexOfDelim - (1 * ENCODING_LENGTH) ) = *(url + i);
		if ( i - indexOfDelim - (1 * ENCODING_LENGTH) == file_name_len )  // break if file_name_len characters are copied
		{
			break;
		}
	}

	// Copying file_ext_len characters from the url
	for (i = 0; i < file_ext_len; i++)
	{
		*( (S8*) g_brw_dls_cntx.p_file_name + file_name_len + i) = *(url + indexOfDot + i);
	}

	*((S8*)g_brw_dls_cntx.p_file_name + file_name_len + file_ext_len) = '\0';
	*((S8*)g_brw_dls_cntx.p_file_name + file_name_len + file_ext_len + 1) = '\0';
}

/*****************************************************************************
 * FUNCTION
 *  mmi_brw_dls_is_free_space_available
 * DESCRIPTION
 *  To determine if free space is available for download
 * PARAMETERS
 *  file_path        
 * RETURNS
 *  BOOL
 *****************************************************************************/
BOOL mmi_brw_dls_is_free_space_available(void *file_path)
{
	/*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
	S32 fs_ret;
    FS_DiskInfo disk_info;
    S8 drv_name[16];
    S32 disk_free_space = 0;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
	memset(drv_name, 0, sizeof(drv_name));
	UCS2Strncpy((PS8) drv_name, (PS8) file_path, 3);
	fs_ret = FS_GetDiskInfo((PU16) drv_name, &disk_info, FS_DI_BASIC_INFO | FS_DI_FREE_SPACE);
	if (fs_ret >= 0)
	{
		disk_free_space = disk_info.FreeClusters * disk_info.SectorsPerCluster * disk_info.BytesPerSector;
		if (disk_free_space > g_brw_cntx.total_content_length)
			return TRUE;
		else
			return FALSE;
	}
	else
		return FALSE;
}

#endif /* __JBROWSER_DLS_SUPPORT__ */


/*****************************************************************************
 * FUNCTION
 *  mmi_brw_header_info_callback_hdlr
 * DESCRIPTION
 *  
 * PARAMETERS
 *  pAppArg                      

⌨️ 快捷键说明

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