📄 jam_java_native_msg_handler.c
字号:
}
/*****************************************************************************
* FUNCTION
* jam_request_http_and_save_to_file
* DESCRIPTION
*
* PARAMETERS
* total_jar_size [IN]
* url [?]
* file_name [?]
* RETURNS
*
*****************************************************************************/
kal_int32 jam_request_http_and_save_to_file(kal_int32 total_jar_size, kal_wchar* url, kal_wchar* file_name,
kal_wchar* midlet_name, kal_int32 name_len)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
kal_int32 url_len = get_ucs2_len(url);
kal_int32 read_seq_length = 0;
kal_char *utf8_url;
kal_int32 handle = 0;
kal_uint32 dummy;
kal_int32 seq_num = 0;
kal_char *temp_buffer;
kal_int32 download_size = 0;
kal_int32 return_error_code = J2ME_NO_ERROR;
kal_int32 header_len = 0;
kal_char *header_content = NULL;
kal_char *user_agent;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
utf8_url = jvm_malloc(2 * J2ME_HTTP_WPS_MAX_INPUT_BUFFER + 1000);
/* check if we have J2ME_HTTP_WPS_MAX_INPUT_BUFFER * 2 buffer for WPS manipulation */
if (utf8_url == NULL)
{
return JAM_HTTP_MEMORY_NOT_ENOUGH;
}
jvm_free(utf8_url);
terminated_by_user_cancel = KAL_FALSE;
utf8_url = jvm_malloc(url_len + 1);
if (utf8_url == NULL)
{
return JAM_HTTP_MEMORY_NOT_ENOUGH;
}
trans_ucs2_to_utf8(utf8_url, url);
/* get wap user agent */
/* send_ilm = allocate_ilm(MOD_J2ME);
send_ilm->src_mod_id = MOD_J2ME;
send_ilm->dest_mod_id = MOD_WAP;
send_ilm->local_para_ptr = NULL;
send_ilm->peer_buff_ptr = NULL;
send_ilm->msg_id = MSG_ID_WAP_GET_USER_AGENT_REQ;
send_ilm->sap_id = J2ME_MMI_SAP;
msg_send_ext_queue(send_ilm);
if(vm_get_next_event(KAL_TRUE, MSG_ID_WAP_GET_USER_AGENT_RSP, KAL_FALSE, KAL_FALSE) ==
J2ME_GET_NEXT_EVENT_ABORT)
{
return_error_code = JAM_HTTP_USER_CANCEL;
goto http_error;
}*/
user_agent = wap_get_user_agent();
if(user_agent != NULL)
{
Kputs(user_agent);
jam_set_user_agent((kal_uint8*)user_agent, (kal_int16)strlen(user_agent));
}
header_len = 89 + strlen(jam_get_full_user_agent()) + 20 + strlen(J2ME_ACCEPT_LANGUAGE_HEADER);
header_content = jvm_malloc(header_len + 1);
if (header_content == NULL)
{
return JAM_HTTP_MEMORY_NOT_ENOUGH;
}
header_content[0] = 0;
strcat(header_content, "User-Agent: ");
strcat(header_content, jam_get_full_user_agent());
strcat(header_content, "\r\nAccept: text/vnd.sun.j2me.app-descriptor, application/java-archive, */*\r\nAccept-Language: ");
strcat(header_content, J2ME_ACCEPT_LANGUAGE_HEADER);
strcat(header_content, "\r\n");
handle = FS_Open(file_name, FS_CREATE_ALWAYS| FS_READ_WRITE);
if (handle < 0)
{
return JAM_HTTP_OPEN_FILE_ERROR;
}
/* display 0% progress bar */
if( total_jar_size )
{
jam_download_progess(total_jar_size, 0, midlet_name, name_len);
}
if(jnw_http_open_connection_by_wap_default_setting(J2ME_HTTP_WPS_CHANNEL_HTTP))
{
if (!waiting_http_response(MSG_WPS_SET_CHANNEL_RSP, KAL_FALSE))
{
jvm_free(utf8_url);
if (terminated_by_user_cancel)
{
return_error_code = JAM_HTTP_USER_CANCEL;
}
else
{
return_error_code = JAM_HTTP_SET_CHANNEL_ERROR;
}
goto http_error;
}
}
http_channel_id = jnw_http_get_connection_id(J2ME_HTTP_WPS_CHANNEL_HTTP);
jnw_http_clear_cache(J2ME_HTTP_WPS_CHANNEL_HTTP, url_len, utf8_url);
jnw_http_set_auto_return_auth(KAL_FALSE);
jnw_http_write_req(http_channel_id, J2ME_HTTP_METHOD_GET, url_len, utf8_url, header_len, header_content, 0, 0, NULL, KAL_FALSE);
if (!waiting_http_response(MSG_WPS_HTTP_RSP, KAL_FALSE))
{
jvm_free(utf8_url);
if (terminated_by_user_cancel)
{
return_error_code = JAM_HTTP_USER_CANCEL;
goto http_error;
}
else
{
return_error_code = JAM_HTTP_SERVER_RESPONSE_ERROR;
goto connection_failed;
}
}
jvm_free(utf8_url);
do
{
read_seq_length = jnw_http_get_reply_segment_length();
if(read_seq_length <= 0)
{
break;
}
temp_buffer = jvm_malloc(read_seq_length);
if (jnw_http_get_reply_segment(temp_buffer))
{
FS_Write(handle, temp_buffer, read_seq_length, &dummy);
}
else
{
jvm_free(temp_buffer);
return_error_code = JAM_HTTP_SERVER_RESPONSE_ERROR;
goto http_error;
}
jvm_free(temp_buffer);
if (dummy != read_seq_length)
{
return_error_code = JAM_HTTP_STORAGE_NOT_ENOUGH;
goto http_error;
}
download_size += read_seq_length;
if( total_jar_size )
{
jam_download_progess(total_jar_size, download_size, midlet_name, name_len);
}
if (!jnw_http_check_more())
{
break;
}
seq_num = (seq_num + 1) % 256;
jnw_http_read_req(http_channel_id, seq_num);
if (!waiting_http_response(MSG_WPS_READ_CONTENT_RSP, KAL_FALSE))
{
if (terminated_by_user_cancel)
{
return_error_code = JAM_HTTP_USER_CANCEL;
}
else
{
return_error_code = JAM_HTTP_SERVER_RESPONSE_ERROR;
}
goto http_error;
}
} while (1);
http_error:
if(jnw_http_close_connection(http_channel_id))
{
waiting_http_response(MSG_WPS_CANCEL_RSP, KAL_TRUE);
}
connection_failed:
download_error_code = return_error_code;
FS_Close(handle);
if(terminated_by_user_cancel)
return_error_code = JAM_HTTP_USER_CANCEL;
return return_error_code;
}
/*****************************************************************************
* FUNCTION
* jam_request_http_post
* DESCRIPTION
*
* PARAMETERS
* url [?]
* post_message [?]
* server_response_code [?]
* RETURNS
*
*****************************************************************************/
kal_int32 jam_request_http_post(kal_wchar *url, kal_char *post_message, kal_int32 *server_response_code)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
kal_int32 http_channel_id;
kal_int32 url_len = get_ucs2_len(url);
kal_char *utf8_url;
kal_int32 return_error_code = J2ME_NO_ERROR;
kal_int32 header_len = 0;
kal_char *header_content = NULL;
kal_char *user_agent;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
utf8_url = jvm_malloc(2 * J2ME_HTTP_WPS_MAX_INPUT_BUFFER + 1000);
/* check if we have 2 * J2ME_HTTP_WPS_MAX_INPUT_BUFFER buffer for WPS manipulation */
if (utf8_url == NULL)
{
return JAM_HTTP_MEMORY_NOT_ENOUGH;
}
jvm_free(utf8_url);
utf8_url = jvm_malloc(url_len + 1);
if (utf8_url == NULL)
{
return JAM_HTTP_MEMORY_NOT_ENOUGH;
}
trans_ucs2_to_utf8(utf8_url, url);
/* get wap user agent */
/* send_ilm = allocate_ilm(MOD_J2ME);
send_ilm->src_mod_id = MOD_J2ME;
send_ilm->dest_mod_id = MOD_WAP;
send_ilm->local_para_ptr = NULL;
send_ilm->peer_buff_ptr = NULL;
send_ilm->msg_id = MSG_ID_WAP_GET_USER_AGENT_REQ;
send_ilm->sap_id = J2ME_MMI_SAP;
msg_send_ext_queue(send_ilm);
*/
/* do not care the user's cancelation */
// get_next_event(KAL_TRUE, MSG_ID_WAP_GET_USER_AGENT_RSP, KAL_FALSE, KAL_TRUE, NULL);
user_agent = wap_get_user_agent();
if(user_agent != NULL)
{
Kputs(user_agent);
jam_set_user_agent((kal_uint8*)user_agent, (kal_int16)strlen(user_agent));
}
header_len = 15 + 26 + strlen(jam_get_full_user_agent());
header_content = jvm_malloc(header_len + 1);
if (header_content == NULL)
{
return JAM_HTTP_MEMORY_NOT_ENOUGH;
}
header_content[0] = 0;
strcat(header_content, "Content-Type: text/plain\r\n");
strcat(header_content, "User-Agent: ");
strcat(header_content, jam_get_full_user_agent());
strcat(header_content, "\r\n");
if(jnw_http_open_connection_by_wap_default_setting(J2ME_HTTP_WPS_CHANNEL_HTTP))
{
if (!waiting_http_response(MSG_WPS_SET_CHANNEL_RSP, KAL_TRUE))
{
return_error_code = JAM_HTTP_SET_CHANNEL_ERROR;
goto connection_failed;
}
}
http_channel_id = jnw_http_get_connection_id(J2ME_HTTP_WPS_CHANNEL_HTTP);
jnw_http_write_req(
http_channel_id,
J2ME_HTTP_METHOD_POST,
url_len,
utf8_url,
header_len,
header_content,
strlen(post_message),
strlen(post_message),
post_message,
KAL_FALSE);
if (!waiting_http_response(MSG_WPS_HTTP_RSP, KAL_TRUE))
{
return_error_code = JAM_HTTP_SERVER_RESPONSE_ERROR;
}
if(jnw_http_close_connection(http_channel_id))
{
waiting_http_response(MSG_WPS_CANCEL_RSP, KAL_TRUE);
}
connection_failed:
jvm_free(utf8_url);
return return_error_code;
}
/*****************************************************************************
* FUNCTION
* jam_get_install_drv
* DESCRIPTION
* get the installatoin drive path. Remember free the install drive string with jam_listmem_free
* PARAMETERS
* requestSize [IN]
* RETURNS
* The drive char that the user selected. 0 if the user cancels the selection
*****************************************************************************/
kal_int32 jam_get_install_drv(kal_int32 requestSize)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
mmi_java_get_install_drv_ind_struct *msg;
ilm_struct *send_ilm;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
if(clean_event() == J2ME_GET_NEXT_EVENT_ABORT)
{
return J2ME_GET_NEXT_EVENT_ABORT;
}
msg = construct_local_para(sizeof(mmi_java_get_install_drv_ind_struct), TD_CTRL);
msg->size = requestSize;
send_ilm = allocate_ilm(MOD_J2ME);
send_ilm->src_mod_id = MOD_J2ME;
send_ilm->dest_mod_id = MOD_MMI;
send_ilm->local_para_ptr = (local_para_struct*) msg;
send_ilm->peer_buff_ptr = NULL;
send_ilm->msg_id = MSG_ID_MMI_JAVA_GET_INSTALL_DRV_IND;
send_ilm->sap_id = J2ME_MMI_SAP;
check_incoming_call_and_block();
msg_send_ext_queue(send_ilm);
return vm_get_next_event(KAL_TRUE, MSG_ID_MMI_JAVA_GET_INSTALL_DRV_RES, KAL_FALSE, KAL_FALSE);
}
/*************************************************************************
* FUNCTION
* jam_get_mms_attachment
* DESCRIPTION
* This function will send message to WAP to get the MMS attachment.
* PARAMETERS
* file_name [IN]
* RETURNS
* A virtual file as request.
*************************************************************************/
#ifdef WAP_SUPPORT
kal_wchar* jam_get_mms_attachment(kal_wchar* file_name, kal_bool *abort_received)
{
ilm_struct *send_ilm;
kal_int32 return_value;
mms_get_attachment_req_struct *mms_attachement = construct_local_para(sizeof(mms_get_attachment_req_struct), TD_CTRL);
*abort_received = KAL_FALSE;
mmi_ucs2cpy((kal_char*)mms_attachement->filename, (kal_char*)file_name);
send_ilm = allocate_ilm(MOD_J2ME);
send_ilm->src_mod_id = MOD_J2ME;
send_ilm->dest_mod_id = wap_get_service_module(MSG_ID_MMS_GET_ACTIVE_MMS_ATTACHMENT_REQ);
send_ilm->local_para_ptr = (local_para_struct *)mms_attachement;
send_ilm->peer_buff_ptr = NULL;
send_ilm->msg_id = MSG_ID_MMS_GET_ACTIVE_MMS_ATTACHMENT_REQ;
send_ilm->sap_id = WAP_MMI_SAP;
msg_send_ext_queue(send_ilm);
return_value = vm_get_next_event(KAL_TRUE, MSG_ID_MMS_GET_ACTIVE_MMS_ATTACHMENT_RSP, KAL_FALSE, KAL_FALSE);
if(return_value == J2ME_GET_NEXT_EVENT_ABORT)
{
*abort_received = KAL_TRUE;
return_value = 0;
}
return (kal_wchar*) return_value;
}
#endif /* WAP_SUPPORT */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -