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

📄 jam_java_native_msg_handler.c

📁 java 1.1 gemini 08_16
💻 C
📖 第 1 页 / 共 4 页
字号:
}


/*****************************************************************************
 * 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 + -