📄 midletsuitemanager.c
字号:
/* check the existence of all data for execution */
if(not_Default_Game)
{
char* checkFileName = NULL;
int sublen = strlen("suite.jar");
checkFileName = (char*)midpMalloc(jarPathLen+sublen+1);
strncpy(checkFileName, infusio_mids_storagename, jarPathLen);
strncpy(checkFileName+jarPathLen, "suite.jar", sublen);
checkFileName[jarPathLen+sublen] = '\0';
/* switch to the folder with JAR. For non default game, it provides the correct path to get JAR file */
work_dir_path_for_AP = get_dir_path_from_midsid(nextLaunchMidletID);
sprintf(_kvmLogStr,"work_dir_path_for_AP = %s, work_dir_path = %s\n", work_dir_path_for_AP, work_dir_path);
Kprintf();
if(work_dir_path_for_AP)
{
/* set work_dir_path temporarily for Kopen */
work_dir_path = work_dir_path_for_AP;
handle = Kopen(checkFileName, O_RDONLY);
/* return it to save db and bin file */
work_dir_path = EGE_dir_path;
set_work_sys_dir_path_for_EGE();
if(handle>0)
{
Kclose(handle);
launch_flag = TRUE;
ege_launch_next_ap_flag = TRUE; /* if necessary, move it to a native function after shutdown */
}
else
{
if (infusio_mids_storagename!=NULL)
{
midpFree(infusio_mids_storagename);
infusio_mids_storagename = NULL;
}
if(current_ap_storagename!=NULL)
{
midpFree(current_ap_storagename);
current_ap_storagename = NULL;
}
if(work_dir_path_for_AP!=NULL)
{
jam_listmem_free(work_dir_path_for_AP);
work_dir_path_for_AP = NULL;
}
}
}
midpFree(checkFileName);
}
else
{
/* switch to the folder with JAR. For default game, it provides the correct path to save db file */
work_dir_path_for_AP = work_sys_dir_path;
set_work_sys_dir_path_for_EGE();
launch_flag = TRUE;
ege_launch_next_ap_flag = TRUE; /* if necessary, move it to a native function after shutdown */
}
#ifdef __DRM_SUPPORT__
}
else
{
j2me_send_DRM_alertuser();
}
#endif
jam_listmem_free(midsStorageName);
KNI_ReturnBoolean(launch_flag);
}
KNIEXPORT KNI_RETURNTYPE_VOID
Java_com_mobilescope_egeng_vmlayer_MidletSuite_initialJarFile(void)
{
kal_wchar* save_path;
kal_int32 result = -1;
int len = 0;
/* 20070115 Michael, replace work_dir_path with work_sys_dir_path */
/* the temp jar file will be saved in the system folder */
set_work_sys_dir_path_for_EGE();
len = strlen(work_sys_dir_path) + strlen(_tmp_infusio_ap_jar) + 1 + 1; /* separator and end */
/* Check the existence of the target folder */
save_path = get_ctrl_buffer((strlen(work_sys_dir_path)+1) << 1);
kal_wsprintf(save_path, "%s", work_sys_dir_path);
save_path[strlen(work_sys_dir_path)] = 0;
result = check_and_create_hidden_folder(save_path);
free_ctrl_buffer(save_path);
save_path = NULL;
/* Open a file to save the JAR */
if(result==0)
{
save_path = get_ctrl_buffer(len << 1);
kal_wsprintf(save_path, "%s\\%s", work_sys_dir_path, _tmp_infusio_ap_jar);
save_path[len-1] = 0;
infusio_mids_jar_handle = FS_Open(save_path, O_CREAT | O_TRUNC);
free_ctrl_buffer(save_path);
save_path = NULL;
}
else
{
kal_print("Eureka Error: JAR file create failed");
KNI_ThrowNew("java/io/IOException", "EGE: Initail file failed");
KNI_ReturnVoid();
}
KNI_ReturnVoid();
}
KNIEXPORT KNI_RETURNTYPE_VOID
Java_com_mobilescope_egeng_vmlayer_MidletSuite_writeJarFile(void)
{
char *writeData = NULL;
int offset = KNI_GetParameterAsInt(2);
int len = KNI_GetParameterAsInt(3);
if (infusio_mids_jar_handle>0)
{
kal_uint32 real_count = 0;
KNI_StartHandles(1);
KNI_DeclareHandle(writeDataStr);
KNI_GetParameterAsObject(1, writeDataStr);
writeData = (char*)midpMalloc(len+1);
KNI_GetRawArrayRegion(writeDataStr, offset, len, (jbyte*)writeData);
writeData[len] = '\0';
KNI_EndHandles();
if(FS_Write(infusio_mids_jar_handle, writeData, len, &real_count))
{
midpFree(writeData);
kal_print("Eureka Error: JAR write failed");
FS_Close(infusio_mids_jar_handle);
KNI_ThrowNew("java/io/IOException", "EGE: write file failed");
KNI_ReturnVoid();
}
sprintf(_kvmLogStr,"writeJarFile: %d\n", len);
Kprintf();
midpFree(writeData);
}
KNI_ReturnVoid();
}
KNIEXPORT KNI_RETURNTYPE_VOID
Java_com_mobilescope_egeng_vmlayer_MidletSuite_closeJarFile(void)
{
if (infusio_mids_jar_handle>0)
{
FS_Close(infusio_mids_jar_handle);
infusio_mids_jar_handle = -1;
}
KNI_ReturnVoid();
}
KNIEXPORT KNI_RETURNTYPE_VOID
Java_com_mobilescope_egeng_vmlayer_MidletSuite_clearJarFile(void)
{
/* 20070115 Michael, replace work_dir_path with work_sys_dir_path */
kal_wchar* save_path;
int len = strlen(work_sys_dir_path) + strlen(_tmp_infusio_ap_jar) + 1 + 1; /* separator and end */
save_path = get_ctrl_buffer(len << 1);
kal_wsprintf(save_path, "%s\\%s", work_sys_dir_path, _tmp_infusio_ap_jar);
FS_Delete(save_path);
sprintf(_kvmLogStr,"clean 1: %s\n",save_path);
Kprintf();
free_ctrl_buffer(save_path);
len = strlen(work_sys_dir_path) + strlen(_tmp_infusio_ap_jad) + 1 + 1; /* separator and end */
save_path = get_ctrl_buffer(len << 1);
kal_wsprintf(save_path, "%s\\%s", work_sys_dir_path, _tmp_infusio_ap_jad);
FS_Delete(save_path);
sprintf(_kvmLogStr,"clean 2: %s\n",save_path);
Kprintf();
free_ctrl_buffer(save_path);
KNI_ReturnVoid();
}
KNIEXPORT KNI_RETURNTYPE_INT
Java_com_mobilescope_egeng_vmlayer_MidletSuite_doNativeInstall(void)
{
int OTAcode = 0;
int jadlen;
char *jadData;
int jadFile = 0;
int tmp_len;
kal_wchar* save_path;
char *install_param;
kal_uint32 real_count = 0;
kal_char* temp_dir_path;
KNI_StartHandles(1);
KNI_DeclareHandle(jadStr);
KNI_GetParameterAsObject(1, jadStr);
jadlen = KNI_GetArrayLength(jadStr);
jadData = (char*)midpMalloc(jadlen+1);
KNI_GetRawArrayRegion(jadStr, 0, jadlen, (jbyte*)jadData);
jadData[jadlen] = '\0';
KNI_EndHandles();
/* 20070115 Michael, save temp JAD in work_sys_dir_path */
/* save JAD data to file */
tmp_len = strlen(work_sys_dir_path) + strlen(_tmp_infusio_ap_jad) + 1 + 1; /* separator and end */
save_path = get_ctrl_buffer(tmp_len << 1);
kal_wsprintf(save_path, "%s\\%s", work_sys_dir_path, _tmp_infusio_ap_jad);
jadFile = FS_Open(save_path, O_CREAT | O_TRUNC);
if(!jadFile)
{
kal_print("Eureka Error: JAD open failed");
KNI_ThrowNew("com/mobilescope/egeng/vmlayer/MidletSuiteException", "EGE: installation failed");
KNI_ReturnInt(INVALID_JAD_URL);
}
if(FS_Write(jadFile, jadData, jadlen, &real_count))
{
kal_print("Eureka Error: JAD write failed");
FS_Close(jadFile);
KNI_ThrowNew("com/mobilescope/egeng/vmlayer/MidletSuiteException", "EGE: installation failed");
KNI_ReturnInt(INVALID_JAD_URL);
}
FS_Close(jadFile);
midpFree(jadData);
/* Adjust the parameter for native installer */
free_ctrl_buffer(save_path);
tmp_len = strlen("file://") + strlen(_tmp_infusio_ap_jad) + 1; /* end */
install_param = get_ctrl_buffer(tmp_len);
sprintf(install_param, "file://%s", _tmp_infusio_ap_jad);
sprintf(_kvmLogStr,"install_param: file://%s\n", _tmp_infusio_ap_jad);
Kprintf();
/* start native install */
temp_dir_path = work_dir_path;
OTAcode = install_main(GAMETYPE_INFUSIO_EUREKA, AMS_OP_INSTALL, work_dir_path, (char*)install_param);
isEGEcertified = is_EGE_game();
if(isEGEcertified)
{
set_work_sys_dir_path_for_EGE();
work_dir_path = work_sys_dir_path;
delete_need_to_recover_file(GAMETYPE_INFUSIO_EUREKA);
}
else
{
set_work_sys_dir_path_for_Java();
work_dir_path = work_sys_dir_path;
delete_need_to_recover_file(GAMETYPE_JAVA_GAME);
set_work_sys_dir_path_for_EGE();
}
work_dir_path = temp_dir_path;
free_ctrl_buffer(install_param);
KNI_ReturnInt(OTAcode);
}
KNIEXPORT KNI_RETURNTYPE_VOID
Java_com_mobilescope_egeng_vmlayer_MidletSuite_uninstallAP(void)
{
int jarPathLen = 0;
kal_char* temp_dir_path;
KNI_StartHandles(1);
KNI_DeclareHandle(jarPathStr);
KNI_GetParameterAsObject(1, jarPathStr);
jarPathLen = KNI_GetArrayLength(jarPathStr);
if (infusio_mids_storagename!=NULL)
{
midpFree(infusio_mids_storagename);
infusio_mids_storagename = NULL;
}
infusio_mids_storagename = (char*)midpMalloc(jarPathLen+1);
KNI_GetRawArrayRegion(jarPathStr, 0, jarPathLen, (jbyte*)infusio_mids_storagename);
infusio_mids_storagename[jarPathLen] = '\0';
KNI_EndHandles();
/* switch to the folder with JAR */
temp_dir_path = work_dir_path;
work_dir_path = get_dir_path_from_midsid(getStorageNumberFromName((kal_char*)infusio_mids_storagename));
if(isEGEcertified)
removd_midlet_by_storage_name(GAMETYPE_INFUSIO_EUREKA, infusio_mids_storagename);
else
removd_midlet_by_storage_name(GAMETYPE_JAVA_GAME, infusio_mids_storagename);
jam_listmem_free(work_dir_path);
work_dir_path = temp_dir_path;
set_work_sys_dir_path_for_EGE();
/* use only once, free after using */
if (infusio_mids_storagename)
{
midpFree(infusio_mids_storagename);
infusio_mids_storagename = NULL;
}
KNI_ReturnVoid();
}
/* Used by MidletSuite, change the path to get jar file */
KNIEXPORT KNI_RETURNTYPE_VOID
Java_com_mobilescope_egeng_vmlayer_MidletSuite_setWorkPath(void)
{
isEGEcertified = KNI_GetParameterAsBoolean(1);
if(isEGEcertified)
{
set_work_sys_dir_path_for_EGE();
}
else
{
set_work_sys_dir_path_for_Java();
}
KNI_ReturnVoid();
}
KNIEXPORT KNI_RETURNTYPE_BOOLEAN
Java_com_mobilescope_egeng_vmlayer_MidletSuite_getInstallType(void)
{
KNI_ReturnBoolean(is_EGE_game());
}
bool_t isESM2AP(void)
{
if (infusio_mids_type == GAMETYPE_INFUSIO_EUREKA)
{
/* If Eureka client terminate, and select AP, switch AP to run. */
if (infusio_mids_storagename!=NULL)
{
infusio_mids_type = GAMETYPE_INFUSIO_AP;
work_dir_path = work_dir_path_for_AP;
if(!isEGEcertified) set_work_sys_dir_path_for_Java();
if (infusio_mids_storagename!=NULL)
{
midpFree(infusio_mids_storagename);
infusio_mids_storagename = NULL;
}
}
KNI_ReturnBoolean(KNI_TRUE);
}
KNI_ReturnBoolean(KNI_FALSE);
}
bool_t isInFusioAP(void) /* return to ESM */
{
bool_t is_infusio_ap = FALSE;
if (infusio_mids_type == GAMETYPE_INFUSIO_AP)
{
/* If InFusio AP terminate, switch back to eureka client */
is_infusio_ap = TRUE;
infusio_finalize_memory();
infusio_mids_type = GAMETYPE_INFUSIO_EUREKA;
if(work_dir_path_for_AP!=NULL)
{
if(not_Default_Game) jam_listmem_free(work_dir_path_for_AP);
work_dir_path_for_AP = NULL;
}
work_dir_path = EGE_dir_path; /* return to the work_dir_path before EGE AP launched */
set_work_sys_dir_path_for_EGE();
}
return is_infusio_ap;
}
#else /* __SUPPORT_INFUSIO__ */
int infusio_mids_type = GAMETYPE_JAVA_GAME;
bool_t protection_block = FALSE;
#endif /* __SUPPORT_INFUSIO__ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -