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

📄 jam_call_back_handler.c

📁 java 1.1 gemini 08_16
💻 C
📖 第 1 页 / 共 5 页
字号:
	{
		if (choiceLevel == PERMISSION_NEVER)
		{
			return choiceLevel;
		}
		if (maxLevel == PERMISSION_BLANKET && (choiceLevel == PERMISSION_BLANKET_GRANTED ||
											   choiceLevel == PERMISSION_ALLOW))
			maxLevel = PERMISSION_BLANKET_GRANTED;
		if ((unsigned char)maxLevel > (unsigned char)choiceLevel)
		{
			selected = maxLevel;
		} else
			selected = choiceLevel;
	}

	if (choiceLevel != selected)
		*isOK = KAL_FALSE;

	return selected;
}

/*************************************************************************
* FUNCTION
*   jam_merge_permission_level
* DESCRIPTION
*   Merge several permission items to 1 permission level. (return the largest permission)
* PARAMETERS
*   permissions     Array of permission level items
*   perm_count        Permission level count.
* RETURNS
*   level of merged permission. 
*************************************************************************/ 
kal_char jam_merge_permission_level(kal_char* permissions, kal_int32 perm_count, kal_int32 jump_offset)
{
    kal_uint8 return_perm = PERMISSION_USER_DENIED + 1;
    kal_int32 scan_pos = 0;
    kal_int32 test_perm = 0;
    for(scan_pos = 0; scan_pos < perm_count; scan_pos += jump_offset)
    {
        test_perm = (kal_uint32)permissions[scan_pos];
        switch(test_perm)
        {
            case PERMISSION_NEVER:
                test_perm = PERMISSION_USER_DENIED + 1;
                break;
            case PERMISSION_ALLOW:
            case PERMISSION_BLANKET_GRANTED:
            case PERMISSION_BLANKET:
            case PERMISSION_SESSION:
            case PERMISSION_ONE_SHOT:
            case PERMISSION_DENY_SESSION:
            case PERMISSION_DENY:
            case PERMISSION_USER_DENIED:
                break;
            default:
                continue;
        }

        if(return_perm > test_perm)
        {
            return_perm = test_perm;
        }
    }
    if(return_perm == PERMISSION_USER_DENIED + 1)
    {
        return_perm = PERMISSION_NEVER;
    }
    return return_perm;
}

mids_setting_struct saved_mids_setting;
mids_setting_struct saved_mids_max_setting;

kal_int32 
jam_get_setting(game_type_enum type, mmi_setting_struct *get_setting_ptr, mmi_setting_struct *max_setting_ptr, 
				kal_int32 mids_id, mids_list_info_struct *mids_info_ptr, kal_bool* is_trused)
{
	kal_int32 length;
	kal_char * settingRoot;
	kal_char * myError = NULL;
	kal_int32 mids = NULL;
	kal_char * settingBuffer = NULL;
	kal_int32 returnCode = J2ME_ACTION_FAILE;

	(void)mids_id;

	length = get_ucs2_len(mids_info_ptr->mids_root);
	settingRoot = (kal_char*)midpMalloc(length + 1 + strlen(JAM_SETTING_FILE_EXT_NAME));
	trans_ucs2_to_utf8(settingRoot, mids_info_ptr->mids_root);
	strcat(settingRoot, JAM_SETTING_FILE_EXT_NAME);

	mids = storageOpen(&myError, settingRoot, OPEN_READ);

	if (myError == NULL)
	{
		int size;
		size = storageSizeOf(&myError, mids);
		if (size != 0)
		{
			kal_int32 readsize = 0;
			kal_int32 setting_count;
			settingBuffer = (kal_char*)midpMalloc(size);
			readsize = storageRead(&myError, mids, settingBuffer, size);

			if (myError == NULL)
			{
				setting_count = settingBuffer[3];
				if (settingBuffer[1] ==0)
					*is_trused = KAL_FALSE;
				else
					*is_trused = KAL_TRUE;

				/* normal setting */
				saved_mids_setting.permission_http= settingBuffer[6];
				saved_mids_setting.permission_tcp= settingBuffer[7];
				saved_mids_setting.permission_https= settingBuffer[8];
				saved_mids_setting.permission_ssl= settingBuffer[9];
				saved_mids_setting.permission_tcp_server= settingBuffer[10];
				saved_mids_setting.permission_udp= settingBuffer[11];
				saved_mids_setting.permission_udp_server = settingBuffer[12];
				saved_mids_setting.permission_comm= settingBuffer[13];
				saved_mids_setting.permission_push = settingBuffer[14];
				saved_mids_setting.permission_sms_server = settingBuffer[15];
				saved_mids_setting.permission_cbs_server = settingBuffer[16];
				saved_mids_setting.permission_sms_send = settingBuffer[17];
				saved_mids_setting.permission_sms_receive = settingBuffer[18];
				saved_mids_setting.permission_cbs_receive = settingBuffer[19];
				saved_mids_setting.permission_mms_server = settingBuffer[20];
				saved_mids_setting.permission_mms_send = settingBuffer[21];
				saved_mids_setting.permission_mms_receive = settingBuffer[22];
				saved_mids_setting.permission_mma_record = settingBuffer[23];
				saved_mids_setting.permission_mma_snap_shot = settingBuffer[24];
				saved_mids_setting.permission_file_read = settingBuffer[25];
				saved_mids_setting.permission_file_write = settingBuffer[26];
				saved_mids_setting.permission_contact_list_read = settingBuffer[27];
				saved_mids_setting.permission_contact_list_write = settingBuffer[28];
				saved_mids_setting.permission_event_list_read = settingBuffer[29];
				saved_mids_setting.permission_event_list_write = settingBuffer[30];
				saved_mids_setting.permission_todo_list_read = settingBuffer[31];
				saved_mids_setting.permission_todo_list_write = settingBuffer[32];
				/* reserved for the future */
				/*saved_mids_setting.permission_obex_client = settingBuffer[33];
				saved_mids_setting.permission_obex_server = settingBuffer[34];
				saved_mids_setting.permission_obex_client_tcp = settingBuffer[35];
				saved_mids_setting.permission_obex_servet_tcp = settingBuffer[36];
				saved_mids_setting.permission_bt_client = settingBuffer[37];
				saved_mids_setting.permission_bt_server = settingBuffer[38];*/

				/* maximum setting */               
				saved_mids_max_setting.permission_http= settingBuffer[setting_count + 7];
				saved_mids_max_setting.permission_tcp= settingBuffer[setting_count + 8];
				saved_mids_max_setting.permission_https= settingBuffer[setting_count + 9];
				saved_mids_max_setting.permission_ssl= settingBuffer[setting_count + 10];
				saved_mids_max_setting.permission_tcp_server= settingBuffer[setting_count + 11];
				saved_mids_max_setting.permission_udp= settingBuffer[setting_count + 12];
				saved_mids_max_setting.permission_udp_server = settingBuffer[setting_count + 13];
				saved_mids_max_setting.permission_comm= settingBuffer[setting_count + 14];
				saved_mids_max_setting.permission_push = settingBuffer[setting_count + 15];
				saved_mids_max_setting.permission_sms_server = settingBuffer[setting_count + 16];
				saved_mids_max_setting.permission_sms_send = settingBuffer[setting_count + 17];
				saved_mids_max_setting.permission_sms_receive = settingBuffer[setting_count + 18];
				saved_mids_max_setting.permission_cbs_server = settingBuffer[setting_count + 19];
				saved_mids_max_setting.permission_cbs_receive = settingBuffer[setting_count + 20];
				saved_mids_max_setting.permission_mms_server = settingBuffer[setting_count + 21];
				saved_mids_max_setting.permission_mms_send = settingBuffer[setting_count + 22];
				saved_mids_max_setting.permission_mms_receive = settingBuffer[setting_count + 23];
				saved_mids_max_setting.permission_mma_record = settingBuffer[setting_count + 24];
				saved_mids_max_setting.permission_mma_snap_shot = settingBuffer[setting_count + 25];
				saved_mids_max_setting.permission_file_read = settingBuffer[setting_count + 26];
				saved_mids_max_setting.permission_file_write = settingBuffer[setting_count + 27];
				saved_mids_max_setting.permission_contact_list_read = settingBuffer[setting_count + 28];
				saved_mids_max_setting.permission_contact_list_write = settingBuffer[setting_count + 29];
				saved_mids_max_setting.permission_event_list_read = settingBuffer[setting_count + 30];
				saved_mids_max_setting.permission_event_list_write = settingBuffer[setting_count + 31];
				saved_mids_max_setting.permission_todo_list_read = settingBuffer[setting_count + 32];
				saved_mids_max_setting.permission_todo_list_write = settingBuffer[setting_count + 33];
				/* reserved for the future */
				/*saved_mids_max_setting.permission_obex_client = settingBuffer[setting_count + 34];
				saved_mids_max_setting.permission_obex_server = settingBuffer[setting_count + 35];
				saved_mids_max_setting.permission_obex_client_tcp = settingBuffer[setting_count + 36];
				saved_mids_max_setting.permission_obex_servet_tcp = settingBuffer[setting_count + 37];
				saved_mids_max_setting.permission_bt_client = settingBuffer[setting_count + 38];
				saved_mids_max_setting.permission_bt_server = settingBuffer[setting_count + 39];*/


				get_setting_ptr->permission_network = jam_merge_permission_level(&settingBuffer[6], 7, 1);
				get_setting_ptr->permission_push = saved_mids_setting.permission_push;
				get_setting_ptr->permission_message = jam_merge_permission_level(&settingBuffer[15], 8, 1);
				get_setting_ptr->permission_multimedia = jam_merge_permission_level(&settingBuffer[23], 2, 1);
				get_setting_ptr->permission_data_read = jam_merge_permission_level(&settingBuffer[25], 4, 2);
				get_setting_ptr->permission_data_write = jam_merge_permission_level(&settingBuffer[26], 4, 2);
				get_setting_ptr->permission_local_connectivity = saved_mids_setting.permission_comm;


				max_setting_ptr->permission_network = saved_mids_max_setting.permission_http;
				max_setting_ptr->permission_push = saved_mids_max_setting.permission_push;
				max_setting_ptr->permission_message = saved_mids_max_setting.permission_sms_server;
				max_setting_ptr->permission_multimedia = saved_mids_max_setting.permission_mma_record;
				max_setting_ptr->permission_data_read = saved_mids_max_setting.permission_file_read;
				max_setting_ptr->permission_data_write = saved_mids_max_setting.permission_file_write;
				max_setting_ptr->permission_local_connectivity = saved_mids_max_setting.permission_comm;

				returnCode = J2ME_NO_ERROR;

			} else
			{
				/* Rely on error handling */
				returnCode = J2ME_ACTION_FAILE;
				sprintf(_kvmLogStr, "J2ME WARNING: %s get setting read file failed %s", 
						settingRoot, myError);
				Kputs(_kvmLogStr);
			}

			midpFree(settingBuffer);
		} else
		{
			/* Rely on error handling */
			returnCode = J2ME_ACTION_FAILE;
			sprintf(_kvmLogStr, "J2ME WARNING: %s get setting file size 0", settingRoot);
			Kputs(_kvmLogStr);
		}
	} else
	{
		/* Rely on error handling */
		returnCode = J2ME_ACTION_FAILE;
		sprintf(_kvmLogStr, "J2ME WARNING: %s open setting file failed %s", 
				settingRoot, myError);
		Kputs(_kvmLogStr);
	}

	midpFree(settingRoot);
	storageClose(&myError, mids);
	return returnCode;
}

static kal_bool 
is_network_blanket_granted(mids_setting_struct setting)
{
	if (setting.permission_obex_servet_tcp == PERMISSION_BLANKET_GRANTED ||
		setting.permission_obex_client_tcp == PERMISSION_BLANKET_GRANTED ||
		setting.permission_http== PERMISSION_BLANKET_GRANTED ||
		setting.permission_https== PERMISSION_BLANKET_GRANTED ||
		setting.permission_ssl== PERMISSION_BLANKET_GRANTED ||
		setting.permission_tcp== PERMISSION_BLANKET_GRANTED ||
		setting.permission_tcp_server== PERMISSION_BLANKET_GRANTED ||
		setting.permission_udp== PERMISSION_BLANKET_GRANTED ||
		setting.permission_udp_server== PERMISSION_BLANKET_GRANTED)
	{
		return KAL_TRUE;
	}
	return KAL_FALSE;
}

static kal_bool 
get_confirm(kal_int32 permission_title_id)
{
	kal_int32 selected_item = 255;
	get_permission_req(permission_title_id, &selected_item, 0, NULL);
	while (selected_item == 255)
	{
		if (clean_event() == J2ME_GET_NEXT_EVENT_ABORT)
		{
			return KAL_FALSE;
		}
	}
	return(kal_bool)selected_item;
}

kal_int32 
jam_set_setting(game_type_enum type, mmi_setting_struct *set_setting_ptr, kal_int32 mids_id, mids_list_info_struct* mids_info_ptr)
{
	kal_int32 length;
	kal_char * settingRoot;
	kal_char * myError = NULL;
	kal_int32 mids = NULL;
	kal_char * settingBuffer = NULL;
	kal_bool returnValue = J2ME_ACTION_FAILE;

	(void)mids_id;

	length = get_ucs2_len(mids_info_ptr->mids_root);
	settingRoot = (kal_char*)midpMalloc(length + 1 + strlen(JAM_SETTING_FILE_EXT_NAME));
	trans_ucs2_to_utf8(settingRoot, mids_info_ptr->mids_root);
	strcat(settingRoot, JAM_SETTING_FILE_EXT_NAME);

	mids = storageOpen(&myError, settingRoot, OPEN_READ_WRITE);

	if (myError == NULL)
	{
		kal_int32 size;
		size = storageSizeOf(&myError, mids);
		if (size != 0)
		{
			kal_int32 readsize = 0;
			settingBuffer = (kal_char*)midpMalloc(size);
			ASSERT(settingBuffer != NULL);
			readsize = storageRead(&myError, mids, settingBuffer, size);

			if (myError == NULL)
			{
				mids_setting_struct mids_setting;
				kal_int32 i;
				kal_bool isOK = KAL_TRUE;
				kal_char currentLevel[TOTAL_SETTINGS];
				/* on our solution, set setting will be followed by get setting,
				   such that we can use the saved_mids_max_setting and saved_mids_setting */
				memcpy(&mids_setting, &saved_mids_setting, sizeof(mids_setting_struct));
				if (set_setting_ptr->permission_push == PERMISSION_BLANKET_GRANTED && 
					is_network_blanket_granted(mids_setting))
				{
					if (get_confirm(JAVA_PERMISSION_EXCLUSIVE_PUSH))
					{
						set_setting_ptr->permission_network = PERMISSION_SESSION;
					} else
					{
						returnValue = J2ME_ACTION_FAILE;
						goto java_set_setting_return;
					}
				} else if (set_setting_ptr->permission_network  == PERMISSION_BLANKET_GRANTED && 
						   mids_setting.permission_push == PERMISSION_BLANKET_GRANTED)
				{
					if (get_confirm(JAVA_PERMISSION_EXCLUSIVE_NET))
					{
						set_setting_ptr->permission_push = PERMISSION_SESSION;
					} else
					{
						returnValue = J2ME_ACTION_FAILE;
						goto java_set_setting_return;
					}
				}
				/* network */
				if (mids_setting.permission_http != set_setting_ptr->permission_network)
				{
					kal_bool dummy_ok;
					mids_setting.permission_http = jam_get_new_permission_level(
																			   (char)set_setting_ptr->permission_network,
																			   saved_mids_max_setting.permission_http,
																			   saved_mids_setting.permission_http, &isOK);
					mids_setting.permission_https = jam_get_new_permission_level(
																				(char)set_setting_ptr->permission_network,
																				saved_mids_max_setting.permission_https,
																				saved_mids_setting.permission_https, &isOK);
					mids_setting.permission_ssl = jam_get_new_permission_level(
																			  (char)set_setting_ptr->permission_network,
																			  saved_mids_max_setting.permission_ssl,
																			  saved_mids_setting.permission_ssl, &isOK);
					mids_setting.permission_tcp = jam_get_new_permission_level(
																			  (char)set_setting_ptr->permission_network,
																			  saved_mids_max_setting.permission_tcp,
																			  saved_mids_setting.permission_tcp, &isOK);
					mids_setting.permission_udp = jam_get_new_permission_level(
																			  (char)set_setting_ptr->permission_network,
																			  saved_mids_max_setting.permission_udp,
																			  saved_mids_setting.permission_udp, &isOK);
					mids_setting.permission_tcp_server = jam_get_new_permission_level(
																			  (char)set_setting_ptr->permission_network,
																			  saved_mids_max_setting.permission_tcp_server,
																			  saved_mids_setting.permission_tcp_server, &dummy_ok);
					mids_setting.permission_udp_server = jam_get_new_permission_level(
																			  (char)set_setting_ptr->permission_network,
																			  saved_mids_max_setting.permission_udp_server,
																			  saved_mids_setting.permission_udp_server, &dummy_ok);
					/*mids_setting.permission_obex_client_tcp = jam_get_new_permission_level(
								(char)set_setting_ptr->permission_network,
								saved_mids_max_setting.permission_obex_client_tcp,
								saved_mids_setting.permission_obex_client_tcp, &isOK);
					mids_setting.permission_obex_servet_tcp = jam_get_new_permission_level(
								(char)set_setting_ptr->permission_network,
								saved_mids_max_setting.permission_obex_servet_tcp,
								saved_mids_setting.permission_obex_servet_tcp, &isOK);*/
				}
				/* push */
				if (mids_setting.permission_push != set_setting_ptr->permission_push)
				{
					mids_setting.permission_push = jam_get_new_permission_level(
																			   (char)set_setting_ptr->permission_push,
																			   saved_mids_max_setting.permission_push,
																			   saved_mids_setting.permission_push, &isOK);
				}

				/* message */
				if (mids_setting.permission_sms_server != set_setting_ptr->permission_message)
				{
					mids_setting.permission_sms_server= jam_get_new_permission_level(
																					(char)set_setting_ptr->permission_message,
																					saved_mids_max_setting.permission_sms_server,
																					saved_mids_setting.permission_sms_server, &isOK);
					mids_setting.permission_sms_receive= jam_get_new_permission_level(
																					 (char)set_setting_ptr->permission_message,
																					 saved_mids_max_setting.permission_sms_receive,
																					 saved_mids_setting.permission_sms_receive, &isOK);
					mids_setting.permission_sms_send= jam_get_new_permission_level(
																				  (char)set_setting_ptr->permission_message,
																				  saved_mids_max_setting.permission_sms_send,
																				  saved_mids_setting.permission_sms_send, &isOK);
					mids_setting.permission_mms_server= jam_get_new_permission_level(
																					(char)set_setting_ptr->permission_message,
																					saved_mids_max_setting.permission_mms_server,
																					saved_mids_setting.permission_mms_server, &isOK);
					mids_setting.permission_mms_receive= jam_get_new_permission_level(
																					 (char)set_setting_ptr->permission_message,
																					 saved_mids_max_setting.permission_mms_receive,
																					 saved_mids_setting.permission_mms_receive, &isOK);
					mids_setting.permission_mms_send= jam_get_new_permission_level(
																				  (char)set_setting_ptr->permission_message,
																				  saved_mids_max_setting.permission_mms_send,
																				  saved_mids_setting.permission_mms_send, &isOK);
					mids_setting.permission_cbs_server= jam_get_new_permission_level(
																					(char)set_setting_ptr->permission_message,
																					saved_mids_max_setting.permission_cbs_server,
																					saved_mids_setting.permission_cbs_server, &isOK);
					mids_setting.permission_cbs_receive= jam_get_new_permission_level(
																					 (char)set_setting_ptr->permission_message,
																					 saved_mids_max_setting.permission_cbs_receive,
																					 saved_mids_setting.permission_cbs_receive, &isOK);
				}
				/* recording */
				if (mids_setting.permission_mma_record != set_setting_ptr->permission_multimedia)
				{
					mids_setting.permission_mma_record = jam_get_new_permission_level(
																					 (char)set_setting_ptr->permission_multimedia,
																					 saved_mids_max_setting.permission_mma_record,
																					 saved_mids_setting.permission_mma_record, &isOK);
					mids_setting.permission_mma_snap_shot = jam_get_new_permission_level(

⌨️ 快捷键说明

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