📄 jbrowserstartup.c
字号:
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 + -