📄 jam_native_handler.c
字号:
short temp[3]={0,10,0};
KNI_GetParameterAsObject(1, (jobject)&source_array);
off = KNI_GetParameterAsInt(2);
len = KNI_GetParameterAsInt(3);
KNI_GetParameterAsObject(4, (jobject)&dest_array);
returnSize =EncodingDecoding(UCS2_TO_GB2312,
(char*)dest_array->bdata,
(char*)source_array->bdata,
dest_array->length,
(kal_uint32*)(source_array->bdata + len - 1));
/*if (dest_array->bdata[1] == 0) dest_array->bdata[1] = 10;*/
if(!memcmp((dest_array->bdata+1), temp, sizeof(temp[0])))
{
memcpy((dest_array->bdata+1),(temp+1),sizeof(temp[0]));
}
KNI_ReturnInt(returnSize);
#else
KNI_ReturnInt(0);
#endif
}
KNIEXPORT KNI_RETURNTYPE_INT
Java_com_sun_cldc_i18n_j2me_GB18030_1Writer_UnicodeToGB18030(void)
{
#ifdef __MMI_CHSET_GB18030__
SHORTARRAY source_array;
BYTEARRAY dest_array;
int len, off;
int returnSize;
KNI_GetParameterAsObject(1, (jobject)&source_array);
off = KNI_GetParameterAsInt(2);
len = KNI_GetParameterAsInt(3);
KNI_GetParameterAsObject(4, (jobject)&dest_array);
returnSize = mmi_chset_convert_with_src_length(MMI_CHSET_UCS2, MMI_CHSET_GB18030, (char*)(&source_array->sdata[off]),
len << 1, (char*)dest_array->bdata, dest_array->length);
KNI_ReturnInt(returnSize);
#else
KNI_ReturnInt(0);
#endif
}
kal_int32 permission_dialog_selected_item;
kal_char yes_Index = 0;
kal_wchar *permission_resource;
KNIEXPORT KNI_RETURNTYPE_VOID
Java_com_sun_midp_security_SecurityToken_sendPermissionRequest(void)
{
kal_int32 permission;
kal_int32 i;
BYTEARRAY items;
BYTEARRAY resoruce_items;
kal_int32 default_value;
kal_int32 permission_title_id;
kal_wchar* appendix_str = NULL;
/* initialized with a special pattern 0xFF, it will be set by
* MMI. The value set by MMI will not be 0xFF.
* Modified from index to KAL_TRUE and KAL_FALSE.
* The original design has up to four items can be selected by the user,
* but the new scenario only has "Yes" or "No" choices.
*/
permission_dialog_selected_item = 255;
KNI_StartHandles(2);
KNI_DeclareHandle(charBuffer);
KNI_DeclareHandle(resourceBuffer);
permission = KNI_GetParameterAsInt(1);
KNI_GetParameterAsObject(2, charBuffer);
items = (BYTEARRAY)(*charBuffer);
default_value = KNI_GetParameterAsInt(3);
KNI_GetParameterAsObject(4, resourceBuffer);
resoruce_items = (BYTEARRAY)(*resourceBuffer);
if(resoruce_items == NULL || resoruce_items->length == 0)
{
appendix_str = NULL;
}
else
{
if(permission_resource != NULL)
{
midpFree(permission_resource);
permission_resource = NULL;
}
permission_resource = (kal_wchar*)midpMalloc((resoruce_items->length << 1) + 8);
if(permission_resource == NULL)
{
appendix_str = NULL;
}
else
{
permission_resource[0] = ' ';
permission_resource[1] = '(';
memcpy(permission_resource + 2, resoruce_items->bdata, resoruce_items->length << 1);
permission_resource[resoruce_items->length + 2] = ')';
permission_resource[resoruce_items->length + 3] = 0;
appendix_str = permission_resource;
}
}
/* mapping Java permission ID to MMI permission ID.
Ugly! I know. */
switch (permission)
{
case 2: /* Permissions.HTTP */
permission_title_id = JAVA_PERMISSION_HTTP;
break;
case 3: /* Permissions.TCP */
permission_title_id = JAVA_PERMISSION_SOCKET;
break;
case 4: /* Permissions.HTTPS */
permission_title_id = JAVA_PERMISSION_HTTPS;
break;
case 5: /* Permissions.SSL */
permission_title_id = JAVA_PERMISSION_SSL;
break;
case 6: /* Permissions.TCP_SERVER */
permission_title_id = JAVA_PERMISSION_SVR_SOCKET;
break;
case 7: /* Permissions.UDP */
permission_title_id = JAVA_PERMISSION_DATAGRAM;
break;
case 8: /* Permissions.UDP_SERVER */
permission_title_id = JAVA_PERMISSION_SVR_DATAGRAM;
break;
case 9: /* Permissions.COMM */
permission_title_id = JAVA_PERMISSION_COMM;
break;
case 10: /* Permissions.PUSH */
permission_title_id = JAVA_PERMISSION_PUSH;
break;
case 11: /* Permissions.SMS_SERVER */
case 13: /* Permissions.SMS_SEND */
case 14: /* Permissions.SMS_RECEIVE */
permission_title_id = JAVA_PERMISSION_SMS;
break;
case 12: /* Permissions.CBS_SERVER */
case 15: /* Permissions.CBS_RECEIVE */
permission_title_id = JAVA_PERMISSION_CBS;
break;
case 16: /* Permissions.MMS_SERVER */
case 17: /* Permissions.MMS_SEND */
case 18: /* Permissions.MMS_RECEIVE */
permission_title_id = JAVA_PERMISSION_MMS;
break;
case 19: /* Permissions.MMA_RECORD */
permission_title_id = JAVA_PERMISSION_RECORD_CTRL;
break;
case 20: /* Permissions.MMA_SNAPSHOT */
permission_title_id = JAVA_PERMISSION_SNAPSHOT;
break;
case 21: /* Permissions.JSR_75_FILE_READ */
permission_title_id = JAVA_PERMISSION_FILE_READ;
break;
case 22: /* Permissions.JSR_75_FILE_WRITE */
permission_title_id = JAVA_PERMISSION_FILE_WRITE;
break;
case 23: /* Permissions.JSR_75_CONTACT_READ */
permission_title_id = JAVA_PERMISSION_CONTACT_LIST_READ;
break;
case 24: /* Permissions.JSR_75_CONTACT_WRITE */
permission_title_id = JAVA_PERMISSION_CONTACT_LIST_WRITE;
break;
case 25: /* Permissions.JSR_75_EVENT_READ */
permission_title_id = JAVA_PERMISSION_EVENT_LIST_READ;
break;
case 26: /* Permissions.JSR_75_EVENT_WRITE */
permission_title_id = JAVA_PERMISSION_EVENT_LIST_WRITE;
break;
case 27: /* Permissions.JSR_75_TODO_READ */
permission_title_id = JAVA_PERMISSION_TODO_LIST_READ;
break;
case 28: /* Permissions.JSR_75_TODO_WRITE */
permission_title_id = JAVA_PERMISSION_TODO_LIST_WRITE;
break;
case 29: /* Permissions.OBEX_CLIENT */
permission_title_id = JAVA_PERMISSION_OBEX_CLIENT;
break;
case 30: /* Permissions.OBEX_SERVER */
permission_title_id = JAVA_PERMISSION_OBEX_SERVER;
break;
case 31: /* Permissions.OBEX_CLIENT_TCP */
permission_title_id = JAVA_PERMISSION_OBEX_CLIENT_TCP;
break;
case 32: /* Permissions.OBEX_SERVER_TCP */
permission_title_id = JAVA_PERMISSION_OBEX_SERVER_TCP;
break;
case 33: /* Permissions.BT_CLIENT */
permission_title_id = JAVA_PERMISSION_BT_CLIENT;
break;
case 34: /* Permissions.BT_SERVER */
permission_title_id = JAVA_PERMISSION_BT_SERVER;
break;
case 50000: /* For platform request to make phone call */
permission_title_id = JAVA_PERMISSION_TELEPHONE;
break;
case 50001: /* Exclusive dialog for auto invocation */
permission_title_id = JAVA_PERMISSION_EXCLUSIVE_PUSH;
break;
case 50002: /* Exclusive dialog for network access */
permission_title_id = JAVA_PERMISSION_EXCLUSIVE_NET;
break;
default:
permission_title_id = JAVA_PERMISSION_UNKNOWN;
}
for (i = 0; i < 7; i++)
{
if (items->bdata[i] == 2)
{
yes_Index = i;
}
}
get_permission_req(permission_title_id, &permission_dialog_selected_item, default_value, appendix_str);
KNI_EndHandles();
KNI_ReturnVoid();
}
KNIEXPORT KNI_RETURNTYPE_INT
Java_com_sun_midp_security_SecurityToken_getSelectedItem(void)
{
/* Modified from index to KAL_TRUE and KAL_FALSE.
* The original design has up to four items can be selected by the user,
* but the new scenario only has "Yes" or "No" choices.
*/
if (permission_dialog_selected_item == KAL_TRUE ||
permission_dialog_selected_item == KAL_FALSE)
{
if (permission_dialog_selected_item == KAL_TRUE)
{
permission_dialog_selected_item = yes_Index;
} else
{
/* set a index out of range means "CANCEL" */
permission_dialog_selected_item = 8;
}
}
KNI_ReturnInt(permission_dialog_selected_item);
}
extern set_java_level_virtual_direction(kal_bool);
KNIEXPORT KNI_RETURNTYPE_VOID
Java_javax_microedition_lcdui_Display_setVirtualKeypad(void)
{
BOOL isDirection = KNI_GetParameterAsBoolean(1);
set_java_level_virtual_direction(isDirection);
KNI_ReturnVoid();
}
KNIEXPORT KNI_RETURNTYPE_INT
Java_com_sun_midp_midletsuite_Installer_DRMDecodeJAD(void)
{
kal_int32 returnValue = DRM_PROCESS_ERROR;
SHORTARRAY array;
kal_wchar* buffer;
kal_int32 len;
KNI_StartHandles(1);
KNI_DeclareHandle(jad_file_name);
KNI_GetParameterAsObject(1, jad_file_name);
array = (SHORTARRAY)(*jad_file_name);
len = array->length;
if (Java_mode == JAVA_NORMAL_MODE)
{
buffer = (kal_wchar*)midpMalloc(MAX_WCHAR_FILENAME_LEN);
if (buffer != NULL)
{
kal_int32 j2me_dir_path_len = strlen(work_sys_dir_path);
kal_wsprintf(buffer,"%s\\", work_sys_dir_path);
Kmemcpy(buffer + j2me_dir_path_len + 1, &array->sdata, (len << 1));
buffer[len + j2me_dir_path_len + 1] = 0;
returnValue = jam_drm_decode_file(buffer, KAL_FALSE);
if( returnValue == -J2ME_USER_CANCEL)
{
returnValue = -10;
}
midpFree(buffer);
}
else
{
midpFree(buffer);
KNI_ThrowNew("java/lang/OutOfMemoryError", "Runtime memory not enough!");
}
} else
{
returnValue = J2ME_NO_ERROR;
}
KNI_EndHandles();
KNI_ReturnInt(returnValue);
}
KNIEXPORT KNI_RETURNTYPE_INT
Java_com_sun_midp_midletsuite_Installer_DRMDecodeJAR(void)
{
kal_int32 returnValue = DRM_PROCESS_ERROR;
SHORTARRAY array;
kal_wchar* buffer;
kal_int32 len;
KNI_StartHandles(1);
KNI_DeclareHandle(jar_file_name);
KNI_GetParameterAsObject(1, jar_file_name);
array = (SHORTARRAY)(*jar_file_name);
len = array->length;
if (Java_mode == JAVA_NORMAL_MODE)
{
buffer = (kal_wchar*)midpMalloc(MAX_WCHAR_FILENAME_LEN);
if (buffer != NULL)
{
kal_int32 j2me_dir_path_len = strlen(work_dir_path);
kal_wsprintf(buffer,"%s\\", work_dir_path);
Kmemcpy(buffer + j2me_dir_path_len + 1, &array->sdata, (len << 1));
buffer[len + j2me_dir_path_len + 1] = 0;
#ifndef ENCRYPT_JAR_FILE
returnValue = jam_drm_decode_file(buffer, KAL_TRUE);
if( returnValue == -J2ME_USER_CANCEL)
{
returnValue = -10;
}
#else
returnValue = jam_drm_decode_file(buffer, KAL_FALSE);
if (returnValue == DRM_INVALID_FORMAT)
{
kal_int32 error_code = encrypt_jar_file(buffer, &returnValue);
if (error_code != J2ME_NO_ERROR)
{
if (error_code == J2ME_USER_CANCEL)
returnValue = -10;
}
}
else if (returnValue == -(J2ME_USER_CANCEL))
{
returnValue = -10;
}
#endif
midpFree(buffer);
}
else
{
midpFree(buffer);
KNI_ThrowNew("java/lang/OutOfMemoryError", "Runtime memory not enough!");
}
}
else
{
returnValue = J2ME_NO_ERROR;
}
KNI_EndHandles();
KNI_ReturnInt(returnValue);
}
KNIEXPORT KNI_RETURNTYPE_VOID
Java_com_sun_midp_midletsuite_Installer_getPathName()
{
BYTEARRAY url_array;
KNI_StartHandles(1);
KNI_DeclareHandle(charBuffer);
KNI_GetParameterAsObject(1, charBuffer);
url_array = (BYTEARRAY)(*charBuffer);
memcpy((kal_char*)url_array->bdata, (kal_char*)work_dir_path, strlen(work_dir_path) + 1);
KNI_EndHandles();
KNI_ReturnVoid();
}
//jam_get_install_drv();
KNIEXPORT KNI_RETURNTYPE_INT
Java_com_sun_midp_midletsuite_Installer_setInstallPath()
{
kal_int32 drive;
kal_int32 requestSize;
kal_wchar* tempPath;
kal_char* new_path;
kal_int32 returnCode = 0;
KNI_StartHandles(1);
requestSize = KNI_GetParameterAsInt(1);
if (Java_mode == JAVA_NORMAL_MODE)
{
drive = jam_get_install_drv(requestSize);
if (drive <= 0)
{
KNI_ThrowNew("java/lang/RuntimeException", "User Cancel");
} else
{
new_path = (kal_char*)jam_listmem_malloc(strlen(work_sys_dir_path) + 1);
ASSERT(new_path!=NULL);
memcpy((kal_char*)new_path, (kal_char*)work_sys_dir_path, strlen(work_sys_dir_path) + 1);
new_path[0] = (char)drive;
tempPath = (kal_wchar*)jam_listmem_malloc((strlen(work_sys_dir_path) + 1) << 1);
ASSERT(tempPath!=NULL);
trans_utf8_to_ucs2(tempPath, new_path);
if (check_and_create_hidden_folder(tempPath) != FS_NO_ERROR)
{
returnCode = -1;
}
jam_listmem_free(tempPath);
if (work_dir_path != work_sys_dir_path) jam_listmem_free(work_dir_path);
/* will be freed at the end of installation in jam_install_midlet_suite of jam_call_back_handler.c */
work_dir_path = new_path;
}
}
KNI_EndHandles();
KNI_ReturnInt(returnCode);
}
KNIEXPORT KNI_RETURNTYPE_VOID
Java_com_sun_midp_midletsuite_Installer_setInstallPathByStorageName()
{
SHORTARRAY array;
kal_wchar* buffer;
kal_int32 len;
KNI_StartHandles(1);
KNI_DeclareHandle(storageName);
KNI_GetParameterAsObject(1, storageName);
array = (SHORTARRAY)(*storageName);
len = array->length;
if (Java_mode == JAVA_NORMAL_MODE)
{
buffer = (kal_wchar*)midpMalloc((len + 1) << 1);
if (buffer == NULL)
{
KNI_ThrowNew("java/lang/OutOfMemoryError", "Runtime memory not enough!");
} else
{
memcpy(buffer, array->sdata, (len) << 1);
buffer[len] = '\0';
trans_ucs2_to_utf8((kal_char*)buffer, buffer);
if (work_dir_path != work_sys_dir_path) jam_listmem_free(work_dir_path);
work_dir_path = get_dir_path_from_midsid(getStorageNumberFromName((kal_char*)buffer));
midpFree(buffer);
}
}
KNI_EndHandles();
KNI_ReturnVoid();
}
const kal_char* jar_temp_file_name = "_temp.jar";
KNIEXPORT KNI_RETURNTYPE_INT
Java_com_sun_midp_midletsuite_Installer_setAndMoveInstallPath()
{
kal_int32 drive;
kal_int32 requestSize;
kal_wchar* tempPath;
kal_char* new_path;
kal_int32 return_Value = 0;
KNI_StartHandles(1);
requestSize = KNI_GetParameterAsInt(1);
if (Java_mode != JAVA_NORMAL_MODE)
{
goto errHandle;
}
drive = jam_get_install_drv(requestSize);
if (drive <= 0)
{
KNI_ThrowNew("java/lang/RuntimeException", "User Cancel");
} else
{
new_path = (kal_char*)jam_listmem_malloc(strlen(work_sys_dir_path) + 1);
ASSERT(new_path!=NULL);
memcpy((kal_char*)new_path, (kal_char*)work_sys_dir_path, strlen(work_sys_dir_path) + 1);
new_path[0] = (char)drive;
tempPath = (kal_wchar*)jam_listmem_malloc((strlen(work_sys_dir_path) + 1) << 1);
ASSERT(tempPath!=NULL);
trans_utf8_to_ucs2(tempPath, new_path);
if (check_and_create_hidden_folder(tempPath) != FS_NO_ERROR)
{
return_Value = -1; /* can not reate @Java folder, must be disk full or root dirctory full */
goto errHandle;
}
jam_listmem_free(tempPath);
if (strcmp(work_dir_path, new_path) != 0)
{
kal_int32 len = strlen(work_dir_path) + strlen(jar_temp_file_name) + 2;
kal_wchar * source_path;
kal_wchar * dest_path;
kal_int32 result;
source_path = (kal_wchar*)jam_listmem_malloc(len << 1);
if (source_path == NULL)
{
KNI_ThrowNew("java/lang/RuntimeException", "Out of memory");
goto errHandle;
}
dest_path = (kal_wchar*)jam_listmem_malloc(len << 1);
if (source_path == NULL)
{
KNI_ThrowNew("java/lang/RuntimeException", "Out of memory");
jam_listmem_free(source_path);
goto errHandle;
}
kal_wsprintf(source_path, "%s\\%s", work_dir_path, jar_temp_file_name);
kal_wsprintf(dest_path, "%s\\%s", new_path, jar_temp_file_name);
result = FS_Move(source_path, dest_path, FS_MOVE_KILL | FS_MOVE_OVERWRITE, NULL, NULL, 0);
jam_listmem_free(source_path);
jam_listmem_free(dest_path);
if (result ==FS_DISK_FULL)
{
return_Value = -1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -