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