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

📄 jam_msg_handler.c

📁 java 1.1 gemini 08_16
💻 C
📖 第 1 页 / 共 5 页
字号:
			kal_retrieve_eg_events( jblendia_eventgroup, JBLENDIA_SYS_EVENT, KAL_OR_CONSUME, &flag, KAL_NO_SUSPEND);

			if (flag & JBLENDIA_SYS_EVENT)
			{
				kal_prompt_trace(MOD_J2ME,"get_event_general returns!");
				return J2ME_NO_ERROR;
			}
#endif /* __JBLENDIA__ */

			kal_get_time(&temp_time);

			current_time = temp_time;

			if (current_time >= start_time)
			{
				if ((((current_time - start_time) * 4725) >> 10) > (kal_int64)wait_in_ms)
				{
					return -1;
				}
			} else
			{
				if (((((0xFFFFFFFFL) - start_time + current_time) * 4725) >> 10) > (kal_int64)wait_in_ms)
				{
					return -1;
				}
			}
			/* Sleep for a while, and polling again. */
			kal_sleep_task(10);
		} else
		{
			ASSERT(0);
		}
	} while (wait_forever || wait_in_ms > 0);

	return -1;
}

/*****************************************************************************
 * FUNCTION
 *  get_next_event
 * DESCRIPTION
 *  get next event
 * PARAMETERS
 *  wait_forever            [IN]        
 *  expected_msg            [IN]        
 *  clean_msg               [IN]        
 *  must_match              [IN]        
 *  abort_msg_received      [?]         
 * RETURNS
 *  The important information in the event
 *****************************************************************************/
static kal_int32 g_jvm_incoming_call_serial_for_install = 0;
kal_int32 get_next_event(
						kal_bool wait_forever,
						msg_type expected_msg,
						kal_bool clean_msg,
						kal_bool must_match,
						kal_bool *abort_msg_received)
{
	/*----------------------------------------------------------------*/
	/* Local Variables                                                */
	/*----------------------------------------------------------------*/
	ilm_struct current_ilm;
	kal_int32 returnValue = 0;
	j2me_state_struct *saveState = j2me_current_state;

	/*----------------------------------------------------------------*/
	/* Code Body                                                      */
	/*----------------------------------------------------------------*/

	reGetMessage:
	j2me_current_state = saveState;
	/* Wait forever case */
	/* Wait forever case */
	do
	{
		kal_status status = KAL_Q_EMPTY;
		kal_uint16 msg_size;

		if (is_cmcc_715 && (g_jvm_incoming_call_serial_for_install != jvm_incoming_call_serial()) &&
			(install_update_status.is_normal_install || install_update_status.is_update))
		{
			goto incomming_exit;
		}
		status = kal_deque_msg(task_info_g[INDX_J2ME].task_ext_qid, (void*)&current_ilm, &msg_size, KAL_NO_WAIT);

		if (status == KAL_SUCCESS)
		{
			/* we should process common event first. add by hjf, modified by Justin */
			if (j2me_task_general_msg_handler(&current_ilm) && 
				current_ilm.msg_id != MSG_ID_MMI_JAVA_ABORT_REQ)
			{
				free_ilm(&current_ilm);
				continue;

			}

	      /* SHK: General message can not handle the incoming message. */
			break;
        }
        else if (status == KAL_Q_EMPTY)
		{
			if (!wait_forever)
			{
				return J2ME_NO_ERROR;
			}
			/* Sleep for a while, and polling again. */
			kal_sleep_task(10);
		} else
		{
			ASSERT(0);
		}
	} while (wait_forever);

	kal_trace(TRACE_FUNC, FUNC_J2ME_GET_NEXT_EVENT, expected_msg, current_ilm.msg_id);

    /* SHK: If we set must_match, then we fail to receive MSG_ID_MMI_JAVA_ABORT_REQ message. */
	if (must_match && current_ilm.msg_id != expected_msg)
	{
       	if(current_ilm.msg_id == MSG_ID_MMI_JAVA_ABORT_REQ)
       	{
       		*abort_msg_received = KAL_TRUE;
       	}
		free_ilm(&current_ilm);
		goto reGetMessage;
	}

	/* handle abort from MMI or WAP */
	switch (current_ilm.msg_id)
	{
	case MSG_ID_MMI_JAVA_ABORT_REQ:
		{
			mmi_java_abort_req_struct *abort_req_ptr;
			mmi_java_abort_cnf_struct *abort_cnf_ptr;
			ilm_struct *send_ilm;

			abort_req_ptr = (mmi_java_abort_req_struct*) current_ilm.local_para_ptr;

			abort_cnf_ptr = construct_local_para(sizeof(mmi_java_abort_cnf_struct), TD_CTRL);
			abort_cnf_ptr->session_id = abort_req_ptr->session_id;
			abort_cnf_ptr->error_code = J2ME_NO_ERROR;

			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*) abort_cnf_ptr;
			send_ilm->peer_buff_ptr = NULL;
			send_ilm->msg_id = MSG_ID_MMI_JAVA_ABORT_CNF;
			send_ilm->sap_id = J2ME_MMI_SAP;

			/* ??? can check_incoming_call_and_block() be removed? */
			check_incoming_call_and_block();
			msg_send_ext_queue(send_ilm);

			/* the message should be freed here!!! */
			free_ilm(&current_ilm);
			incomming_exit:
			install_update_status.can_be_aborted = KAL_FALSE;
			install_update_status.is_aborted = KAL_TRUE;
			g_jvm_allowed_sending_abort_from_idle = KAL_TRUE;
			if (abort_msg_received == NULL)
			{
				return 0;
			} else
			{
				*abort_msg_received = KAL_TRUE;
				return -1;
			}
		}

		/* MIDlet Start/Stop */
	case MSG_ID_MMI_JAVA_MID_START_REQ:
		J2ME_SET_STATE(run);
		j2me_process_ilm(&current_ilm);
		break;

		/* Update MIDlet Suite */
	case MSG_ID_MMI_JAVA_MIDS_UPDATE_REQ:
		mids_update_req_handler(&current_ilm);
		break;

		/* Remove MIDlet Suite */
	case MSG_ID_MMI_JAVA_MIDS_REMOVE_REQ:
		J2ME_SET_STATE(remove);
		j2me_process_ilm(&current_ilm);
		break;

		/* Install MIDlet Suite */
	case MSG_ID_JAVA_WAP_INSTALL_MIDS_IND:
		J2ME_SET_STATE(install);
		j2me_process_ilm(&current_ilm);
		break;
	}

	if (clean_msg)
	{
		kal_trace(TRACE_FUNC, FUNC_J2ME_GET_NEXT_EVENT_CLEAN, current_ilm.msg_id);
		free_ilm(&current_ilm);
		/* recursively call until message queue empty */
		goto reGetMessage;
	}

	/* check if the massage should be presented in the current state */
	{
		/* if (expected_msg == 0) {
		   kal_int32 msg_indx = current_ilm.msg_id - j2me_current_state->msg_begin;
		   if ((msg_indx < 0) || (msg_indx >= (kal_int32)j2me_current_state->msgs_limit) ) {
		   ASSERT(msg_indx == 0);
		   }
		   } else
		   EXT_ASSERT(current_ilm.msg_id == expected_msg, current_ilm.msg_id, expected_msg, 0); */
	}

	switch (current_ilm.msg_id)
	{
	/* remove MIDlet Suite confirm response */
	case MSG_ID_MMI_JAVA_MIDS_REMOVE_CONFIRM_RES:
		{

			mmi_java_mids_remove_confirm_res_struct *remove_res_ptr;

			remove_res_ptr = (mmi_java_mids_remove_confirm_res_struct*) current_ilm.local_para_ptr;
			ASSERT(remove_session_id == remove_res_ptr->session_id);

			if (remove_res_ptr->confirm == KAL_TRUE)
			{
				returnValue = (kal_int32) TRUE;
			} else
			{
				returnValue = (kal_int32) FALSE;
			}
			break;
		}

	case MSG_ID_MMI_JAVA_INSTALL_RESET_RMS_RES:
		{
			mmi_java_install_reset_rms_res_struct *reset_rms_res;

			reset_rms_res = (mmi_java_install_reset_rms_res_struct*) current_ilm.local_para_ptr;
			ASSERT(install_session_id == reset_rms_res->session_id);
			if (reset_rms_res->confirm == KAL_TRUE)
			{
				returnValue = (kal_int32) TRUE;
			} else
			{
				returnValue = (kal_int32) FALSE;
			}
			break;
		}

	case MSG_ID_MMI_JAVA_INSTALL_CONFIRM_RES:
		{
			mmi_java_install_confirm_res_struct *install_cnf_res;

			install_cnf_res = (mmi_java_install_confirm_res_struct*) current_ilm.local_para_ptr;
			ASSERT(install_session_id == install_cnf_res->session_id);
			if (install_cnf_res->confirm == KAL_TRUE)
			{
				returnValue = (kal_int32) TRUE;
			} else
			{
				returnValue = (kal_int32) FALSE;
			}
			break;
		}

		/* case MSG_ID_MMI_JAVA_GET_FILE_AND_SAVE_RES:
		   {
		   mmi_java_get_file_and_save_res_struct *get_file_res;
		   get_file_res = (mmi_java_get_file_and_save_res_struct *)current_ilm.local_para_ptr;
		   ASSERT(install_session_id == get_file_res->session_id);
		   returnValue = get_file_res->progress;
		   break;
		   } */
	case MSG_ID_JAVA_WAP_GET_FILE_AND_SAVE_CNF:
		{
			java_wap_get_file_and_save_cnf_struct *get_file_cnf;

			get_file_cnf = (java_wap_get_file_and_save_cnf_struct*) current_ilm.local_para_ptr;
			download_error_code = get_file_cnf->download_error_code;
			ASSERT(install_session_id == get_file_cnf->session_id);
			returnValue = get_file_cnf->error_code;
			break;
		}
	case MSG_ID_JAVA_WAP_POST_DATA_CNF:
		{
			java_wap_post_data_cnf_struct *post_data_cnf;

			post_data_cnf = (java_wap_post_data_cnf_struct*) current_ilm.local_para_ptr;
			if (post_data_cnf->header != NULL)
			{
				free_ctrl_buffer(post_data_cnf->header);
			}
			if (post_data_cnf->error_code == J2ME_NO_ERROR)
			{
				returnValue = post_data_cnf->http_return_code;
			} else
			{
				returnValue = -1;
			}
			break;
		}
	case MSG_ID_MMI_JAVA_GET_FILE_AND_SAVE_RES:
		{
			returnValue = 0;
		}
		break;
	case MSG_ID_WAP_GET_PROF_CONTENT_RSP:
		{
			/* backup the wap_get_prof_content_rsp_struct to wap_prof variable */
			memcpy((void*)&wap_prof, (void*)current_ilm.local_para_ptr, sizeof(wap_get_prof_content_rsp_struct));
		}
		break;
	case MSG_ID_WAP_MMC_GET_MMS_PROF_RSP:
		{
			wap_mmc_get_mms_prof_rsp_struct *mms_prof_rsp;

			mms_prof_rsp = (wap_mmc_get_mms_prof_rsp_struct*) current_ilm.local_para_ptr;

			memset(j2me_mms_mmsc_addr, 0, J2ME_MMS_MMSC_ADDR_LEN);

			if (mms_prof_rsp->result == 0)
			{	/* success */
				int len = mms_prof_rsp->value_len;

				if (len > J2ME_MMS_MMSC_ADDR_LEN)
				{
					len = J2ME_MMS_MMSC_ADDR_LEN;
				}

				memcpy((void*)j2me_mms_mmsc_addr, (void*)mms_prof_rsp->value, len);
			}
		}
		break;

		/* Get user agent header from WAP */
/*	case MSG_ID_WAP_GET_USER_AGENT_RSP:
		{
			wap_get_user_agent_rsp_struct *user_agent_rsp;

			user_agent_rsp = (wap_get_user_agent_rsp_struct*) current_ilm.local_para_ptr;

			jam_set_user_agent(user_agent_rsp->user_agent, user_agent_rsp->user_agent_len);
		}
		break;            */

	case MSG_ID_WAP_GET_BRA_PROF_ID_RSP:
		{
	      /* SHK: I modify the return value to prof_id and query the GPRS/CSD ID pair again. */
            /* SHK: Backup the wap_get_prof_content_rsp_struct to wap_bra_prof variable */
            memcpy((void*)&wap_bra_prof, (void*)current_ilm.local_para_ptr, sizeof(wap_get_bra_prof_id_rsp_struct));
		}
		break;
	case MSG_ID_MMI_JAVA_GET_CONFIRM_RES:
		{
			returnValue = ((mmi_java_get_confirm_res_struct*) current_ilm.local_para_ptr)->confirm;
		}
		break;
	case MSG_ID_MMI_JAVA_GET_INSTALL_DRV_RES:
		{
			returnValue = ((mmi_java_get_install_drv_res_struct*) current_ilm.local_para_ptr)->drv;
		}
		break;
	case MSG_ID_MMS_GET_ACTIVE_MMS_ATTACHMENT_RSP:
		{
			mms_get_attachment_rsp_struct* msg = (mms_get_attachment_rsp_struct*)current_ilm.local_para_ptr;
			if (msg->result == 1)
			{
				kal_int32 len = get_ucs2_len(msg->filepath);
				kal_wchar* file_path = get_ctrl_buffer((len << 1) + 2);
				memcpy(file_path, msg->filepath, (len << 1) + 2);
				returnValue = (kal_int32) file_path;
			} else
			{
				returnValue = 0;
			}
		}
		break;
	case MSG_ID_MMI_JAVA_GET_AUTH_RES:
		{
			mmi_java_get_auth_res_struct* msg = (mmi_java_get_auth_res_struct*)current_ilm.local_para_ptr;
			msg->username[MMI_JAVA_AUTH_LEN_USERNAME - 1] = 0;
			msg->password[MMI_JAVA_AUTH_LEN_PASSWORD - 1] = 0;
			trans_ucs2_to_utf8((kal_char*)msg->username, (kal_wchar*)msg->username);
			trans_ucs2_to_utf8((kal_char*)msg->password, (kal_wchar*)msg->password);
			memcpy(ota_user_name, msg->username, MMI_JAVA_AUTH_LEN_USERNAME);
			memcpy(ota_passwd, msg->password, MMI_JAVA_AUTH_LEN_PASSWORD);

			returnValue = 0;
		}
		break;

        case MSG_ID_WPS_SEC_VERIFY_CERT_CHAIN_RSP:
        {
            wps_sec_verify_cert_chain_rsp_struct *verify_cert_chain_rsp;

            verify_cert_chain_rsp = (wps_sec_verify_cert_chain_rsp_struct*) current_ilm.local_para_ptr;

            jnw_http_verify_cert_chain_handler (verify_cert_chain_rsp->format, verify_cert_chain_rsp->root_len, verify_cert_chain_rsp->root_cert);
            returnValue = verify_cert_chain_rsp->result;
        }
        break;    

	default:
		{
			free_ilm(&current_ilm);
			goto reGetMessage;
		}
	}

	free_ilm(&current_ilm);
	return returnValue;
}

/*************************************************************************
 * Message Handler
 *************************************************************************/


/*****************************************************************************
 * FUNCTION
 *  mids_getlist_req_handler
 * DESCRIPTION
 *  a. In mids_getlist_req_handler(), must free last getlist confirm memory
 *  before to allocate this getlist confirm memory. That means system at
 *  most use 1 memory region as mids getlist confirm.
 *  
 *  b. In mid_getlist_req_handler(), system can keep mids getlist memory.
 *  
 *  c. mids getlist mids list memory is allocated from Java runtime memory pool,
 *  that means the memory will be destroyed after VM start.
 * PARAMETERS
 *  ilm_ptr     [?]     
 * RETURNS
 *  void
 *****************************************************************************/
void mids_getlist_req_handler(ilm_struct *ilm_ptr)
{
	/*----------------------------------------------------------------*/
	/* Local Variables                                                */
	/*----------------------------------------------------------------*/
	ilm_struct *send_ilm;
	kal_int32 error_code = J2ME_NO_ERROR;
	mmi_java_mids_getlist_req_struct *getlist_req_ptr;
	mmi_java_mids_getlist_cnf_struct *getlist_cnf_ptr;
	mids_list_struct *pmids_list = NULL;
	kal_int32 i, mids_count = 0;
	mids_list_info_struct *mids_info_ptr;
	kal_int32 mids_start_indx, mids_list_count;
	game_type_enum type = GAMETYPE_INVALID_TYPE;

	/*----------------------------------------------------------------*/
	/* Code Body                                                      */
	/*----------------------------------------------------------------*/
	kal_trace(TRACE_FUNC, FUNC_J2ME_MIDS_GETLIST_REQ_HANDLER);

	getlist_req_ptr = (mmi_java_mids_getlist_req_struct*) ilm_ptr->local_para_ptr;

	mids_start_indx = (kal_int32) getlist_req_ptr->start_indx;
	type = (game_type_enum)getlist_req_ptr->game_type;

	/* Update working internal system directory path */
	work_sys_dir_path = _jvm_get_dir_path(type);
	work_info_ptr = _jvm_get_builtin_file_info(type);

	/* Try to get whole list */
	error_code = jam_parse_midslistfile(type, mids_start_indx, JAVA_LIST_CACHE_COUNT, 
										&saved_mids_listfile_ptr);

	mids_start_indx = mids_list_count = -1;

	if (error_code == J2ME_INSUFFICIENT_MEMORY)
	{
		/* If have at lease one mids, seem successful */
		if (saved_mids_listfile_ptr && (saved_mids_listfile_ptr->mids_avail_count > 0))
		{
			error_code = J2ME_NO_ERROR;
		}

		mids_start_indx = saved_mids_listfile_ptr->mids_avail_indx;
		mids_list_count = saved_mids_listfile_ptr->mids_avail_count;
	} else if (error_code == J2ME_NO_ERROR && saved_mids_listfile_ptr)
	{
		mids_start_indx = saved_mids_listfile_ptr->mids_avail_indx;
		mids_list_count = saved_mids_listfile_ptr->mids_avail_count;
	} else
	{
		/* if error, free previous saved listfile info */
		jam_call_back_functions.jam_free_list(type);
		mids_start_indx = mids_list_count = 0;
	}

	if (saved_mids_listfile_ptr && saved_mids_listfile_ptr->mids_avail_count)
	{
		mids_count = saved_mids_listfile_ptr->mids_count;
		getlist_cnf_ptr =
		(mmi_java_mids_getlist_cnf_struct*)
		construct_local_para(
							(kal_uint16) (sizeof(mmi_java_mids_getlist_cnf_struct) + (saved_mids_listfile_ptr->mids_avail_count - 1) * sizeof(mids_list_struct)),
							TD_CTRL);

⌨️ 快捷键说明

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