📄 midletsuitemanager.c
字号:
/*************************************************************************
* Include Statements
*************************************************************************/
#include <stdio.h>
#include <kni.h>
#include <storage.h>
#include <midpMalloc.h>
#include <midpServices.h>
#include "jam_msg_util.h"
#include "j2me_custom.h"
#include "jvm_adaptor.h"
#include "j2me_custom_option.h"
#include "installer.h"
#include "jam_msg_handler.h"
#include "jam_interface.h"
#include "jnw_interface.h"
#include "drm_def.h"
#include "jam_internal.h"
#ifdef __SUPPORT_INFUSIO__
/*************************************************************************
* Global Constant Definition
*************************************************************************/
static const char _tmp_infusio_ap_jad[] = "_infusio_mids.jad";
static const char _tmp_infusio_ap_jar[] = "_infusio_mids.jar";
static char *infusio_mids_storagename;
int infusio_mids_type = GAMETYPE_JAVA_GAME; /* initial to normal game */
static int infusio_midlet_id = 0;
static kal_int32 infusio_mids_jar_handle = -1;
bool_t protection_block = FALSE;
kal_char *EGE_dir_path = NULL;
kal_char *work_dir_path_for_AP = NULL;
bool_t isEGEcertified = FALSE;
bool_t not_Default_Game = FALSE;
/* for new launch organization */
bool_t ege_launch_next_ap_flag = FALSE;
int nextLaunchMidletID = 0;
kal_wchar* nextLaunchMidletName = NULL;
extern void removd_midlet_by_storage_name(game_type_enum type, kal_char* storageName);
extern kal_int32 check_and_create_hidden_folder(kal_wchar *folder);
/* Jack 20070104*/
extern char *current_ap_storagename;
extern kal_char* jam_mid_start_get_command();
/*************************************************************************
* Function Definition
*************************************************************************/
/*****************************************************************************
* FUNCTION
* infusio_finalize_memory
* DESCRIPTION
* reset relative parameters for INFUSIO
* PARAMETERS
*
* RETURNS
* void
*****************************************************************************/
void
infusio_finalize_memory(void)
{
if (infusio_mids_storagename)
{
midpFree(infusio_mids_storagename);
infusio_mids_storagename = NULL;
}
if(nextLaunchMidletName)
{
free_ctrl_buffer(nextLaunchMidletName);
nextLaunchMidletName = NULL;
}
/* Michael 20070109, reset type if AP is terminated by Endkey */
infusio_mids_type = GAMETYPE_JAVA_GAME;
/* Michael 20070110: EGE NG client must NOT be blocked (for isInFusioAP) */
/* If AP is terminated, return protection_block to default value */
protection_block = FALSE;
/* Jack 20070104 */
/* Michael 20070112 move it here from isInFusioAP */
if(current_ap_storagename!=NULL) midpFree(current_ap_storagename);
current_ap_storagename=NULL;
}
/*****************************************************************************
* FUNCTION
* set_work_sys_dir_path_for_EGE
* DESCRIPTION
* set work_sys_dir_path to EGE type
* PARAMETERS
*
* RETURNS
* void
*****************************************************************************/
void
set_work_sys_dir_path_for_EGE(void)
{
work_sys_dir_path = _jvm_get_dir_path(GAMETYPE_INFUSIO_EUREKA);
work_info_ptr = _jvm_get_builtin_file_info(GAMETYPE_INFUSIO_EUREKA);
}
/*****************************************************************************
* FUNCTION
* set_work_sys_dir_path_for_Java
* DESCRIPTION
* set work_sys_dir_path to Java type
* PARAMETERS
*
* RETURNS
* void
*****************************************************************************/
void
set_work_sys_dir_path_for_Java(void)
{
work_sys_dir_path = _jvm_get_dir_path(GAMETYPE_JAVA_GAME);
work_info_ptr = _jvm_get_builtin_file_info(GAMETYPE_JAVA_GAME);
}
KNIEXPORT KNI_RETURNTYPE_BOOLEAN
Java_com_mobilescope_egeng_vmlayer_MidletSuiteManager_notEurekaClientAndAP(void)
{
if(protection_block)
{
protection_block = FALSE;
KNI_ReturnBoolean(KNI_TRUE);
}
KNI_ReturnBoolean(protection_block);
}
KNIEXPORT KNI_RETURNTYPE_INT
Java_com_mobilescope_egeng_vmlayer_MidletSuiteManager_getFreeSize(void)
{
int freeSize = 0;
char tempFolderPath = work_sys_dir_path[0];
/* storageGetFreeSpace will get the system storage size */
/* To get the size of the default installation location, we change the path temporarily */
work_sys_dir_path[0]=(char)FS_GetDrive(FS_DRIVE_V_NORMAL, 1, FS_NO_ALT_DRIVE);
freeSize = (jint)storageGetFreeSpace();
work_sys_dir_path[0] = tempFolderPath;
KNI_ReturnInt(freeSize);
}
KNIEXPORT KNI_RETURNTYPE_INT
Java_com_mobilescope_egeng_vmlayer_MidletSuiteManager_getHttpSize(void)
{
KNI_ReturnInt(jnw_get_http_block_size());
}
KNIEXPORT KNI_RETURNTYPE_INT
Java_com_mobilescope_egeng_vmlayer_MidletSuiteManager_getdefaultAPcount(void)
{
int type = KNI_GetParameterAsInt(1);
if(type==0) KNI_ReturnInt(game_j2me_default_game_count);
KNI_ReturnInt(eureka_default_game_count);
}
/* Used by MidletSuiteManager, change the path of suite.utf to get midlet list */
KNIEXPORT KNI_RETURNTYPE_VOID
Java_com_mobilescope_egeng_vmlayer_MidletSuiteManager_useEurekaFileSystem(void)
{
work_sys_dir_path = _jvm_get_dir_path(GAMETYPE_INFUSIO_EUREKA);
work_info_ptr = _jvm_get_builtin_file_info(GAMETYPE_INFUSIO_EUREKA);
KNI_ReturnVoid();
}
KNIEXPORT KNI_RETURNTYPE_VOID
Java_com_mobilescope_egeng_vmlayer_MidletSuiteManager_useJavaFileSystem(void)
{
work_sys_dir_path = _jvm_get_dir_path(GAMETYPE_JAVA_GAME);
work_info_ptr = _jvm_get_builtin_file_info(GAMETYPE_JAVA_GAME);
KNI_ReturnVoid();
}
//copy from JarReader.c
KNIEXPORT KNI_RETURNTYPE_OBJECT
Java_com_mobilescope_egeng_vmlayer_MidletSuite_readEntry()
{
/* 2007 0115 Michael */
kal_char* temp_dir_path = work_dir_path;
kal_char* jarStorageName;
int jarStorageNameLen = 0;
/*2003 1119 Hsu*/
#if FAST_KNI
char entryName[MAX_FILENAME_LENGTH+1], jarName[MAX_FILENAME_LENGTH+1];
int entryNameLen, jarNameLen;
bool_t notDefaultGame = KNI_GetParameterAsBoolean(3);
KNI_StartHandles(3);
KNI_DeclareHandle(entryNameStr);
KNI_DeclareHandle(jarNameStr);
KNI_DeclareHandle(fileContents);
KNI_GetParameterAsObject(2, entryNameStr);
KNI_GetParameterAsObject(1, jarNameStr);
entryNameLen = KNI_GetArrayLength(entryNameStr);
if (entryNameLen > MAX_FILENAME_LENGTH)
fatalError("readJarEntry0 entryName too long");
KNI_GetRawArrayRegion(entryNameStr, 0, entryNameLen, (jbyte*)entryName);
entryName[entryNameLen] = '\0';
jarNameLen = KNI_GetArrayLength(jarNameStr);
KNI_GetRawArrayRegion(jarNameStr, 0, jarNameLen, (jbyte*)jarName);
jarName[jarNameLen] = '\0';
/* 2007 0115 Michael, switch to the folder with JAR */
jarStorageNameLen = jarNameLen - strlen("suite.jar");
jarStorageName = midpMalloc(jarStorageNameLen*sizeof(char));
strncpy(jarStorageName, jarName, jarStorageNameLen);
jarStorageName[jarStorageNameLen-1] = '\0';
if(notDefaultGame)
work_dir_path = get_dir_path_from_midsid(getStorageNumberFromName((kal_char*)jarStorageName));
else
work_dir_path = work_sys_dir_path;
midpFree(jarStorageName);
if (midp_readJarEntry(jarName, entryName, &fileContents) != KNI_TRUE)
{
KNI_ThrowNew("java/io/IOException", "JAR not found or corrupt");
}
#else
char *entryName, *jarName;
int entryNameLen, jarNameLen;
jboolean thrown = KNI_FALSE;
jboolean notDefaultGame = KNI_GetParameterAsBoolean(3);
KNI_StartHandles(3);
KNI_DeclareHandle(entryNameStr);
KNI_DeclareHandle(jarNameStr);
KNI_DeclareHandle(fileContents);
KNI_GetParameterAsObject(2, entryNameStr);
KNI_GetParameterAsObject(1, jarNameStr);
entryNameLen = KNI_GetArrayLength(entryNameStr);
entryName = (char*)midpMalloc(entryNameLen + 1);
if (entryName == NULL)
{
KNI_ThrowNew("java/lang/OutOfMemoryError", "");
thrown = KNI_TRUE;
}
KNI_GetRawArrayRegion(entryNameStr, 0, entryNameLen, (jbyte*)entryName);
entryName[entryNameLen] = '\0';
jarNameLen = KNI_GetArrayLength(jarNameStr);
jarName = (char*)midpMalloc(jarNameLen + 1);
if (jarName == NULL)
{
midpFree(entryName);
KNI_ThrowNew("java/lang/OutOfMemoryError", "");
thrown = KNI_TRUE;
}
if (!thrown)
{
KNI_GetRawArrayRegion(jarNameStr, 0, jarNameLen, (jbyte*)jarName);
jarName[jarNameLen] = '\0';
/* 2007 0115 Michael, switch to the folder with JAR */
jarStorageNameLen = jarNameLen - strlen("suite.jar");
jarStorageName = midpMalloc(jarStorageNameLen*sizeof(char));
strncpy(jarStorageName, jarName, jarStorageNameLen);
jarStorageName[jarStorageNameLen-1] = '\0';
if(notDefaultGame)
work_dir_path = get_dir_path_from_midsid(getStorageNumberFromName((kal_char*)jarStorageName));
else
work_dir_path = work_sys_dir_path;
midpFree(jarStorageName);
if (midp_readJarEntry(jarName, entryName, &fileContents) != KNI_TRUE)
{
KNI_ThrowNew("java/io/IOException", "JAR not found or corrupt");
}
midpFree(entryName);
midpFree(jarName);
}
#endif /* end of #if FAST_KNI */
/* 2007 0115 Michael */
if(notDefaultGame) jam_listmem_free(work_dir_path);
work_dir_path = temp_dir_path;
set_work_sys_dir_path_for_EGE();
KNI_EndHandlesAndReturnObject(fileContents);
}
KNIEXPORT KNI_RETURNTYPE_BOOLEAN
Java_com_mobilescope_egeng_vmlayer_MidletSuite_saveLaunchMidletData(void)
{
int jarPathLen = 0, midNameLen = 0;
bool_t launch_flag = FALSE;
kal_int32 handle = -1;
kal_wchar *midsStorageName = NULL;
kal_int32 mids_id;
not_Default_Game = KNI_GetParameterAsBoolean(5);
/* If not EGE NG client and mobilescope-certified midlets, deny to use mobilescope package */
isEGEcertified = KNI_GetParameterAsBoolean(4);
if(isEGEcertified) protection_block = FALSE;
else protection_block = TRUE;
infusio_midlet_id = KNI_GetParameterAsInt(3);
KNI_StartHandles(2);
KNI_DeclareHandle(jarPathStr);
KNI_DeclareHandle(midNameStr);
KNI_GetParameterAsObject(1, jarPathStr);
KNI_GetParameterAsObject(2, midNameStr);
jarPathLen = KNI_GetArrayLength(jarPathStr);
midNameLen = KNI_GetStringLength(midNameStr);
/* Get the storage name of the launched midlet */
if (infusio_mids_storagename!=NULL)
{
midpFree(infusio_mids_storagename);
infusio_mids_storagename = NULL;
}
infusio_mids_storagename = (char*)midpMalloc(jarPathLen+1);
ASSERT(infusio_mids_storagename);
KNI_GetRawArrayRegion(jarPathStr, 0, jarPathLen, (jbyte*)infusio_mids_storagename);
infusio_mids_storagename[jarPathLen] = '\0';
if(nextLaunchMidletName!=NULL)
{
free_ctrl_buffer(nextLaunchMidletName);
nextLaunchMidletName = NULL;
}
nextLaunchMidletName = get_ctrl_buffer((midNameLen+1) << 1);
KNI_GetStringRegion(midNameStr, 0, midNameLen, nextLaunchMidletName);
nextLaunchMidletName[midNameLen] = 0;
/*
midName = (char*)midpMalloc(midNameLen+1);
ASSERT(midName);
KNI_GetRawArrayRegion(midNameStr, 0, midNameLen, (jbyte*)midName);
midName[midNameLen] = 0;
if(nextLaunchMidletName!=NULL)
{
free_ctrl_buffer(nextLaunchMidletName);
nextLaunchMidletName = NULL;
}
nextLaunchMidletName = get_ctrl_buffer((midNameLen+1) << 1);
kal_wsprintf(nextLaunchMidletName, "%s", midName);
nextLaunchMidletName[midNameLen] = 0;
midpFree(midName);
*/
/* Jack 20070104 */
if(current_ap_storagename!=NULL) midpFree(current_ap_storagename);
current_ap_storagename=midpMalloc(jarPathLen+1);
sprintf(current_ap_storagename,"%s\0",infusio_mids_storagename);
sprintf(_kvmLogStr,"infusio_mids_storagename = %s\n",infusio_mids_storagename);
Kprintf();
KNI_EndHandles();
mids_id = jam_call_back_functions.jam_get_mids_id_from_push_name(infusio_mids_storagename);
midsStorageName = jam_call_back_functions.jam_get_jar_storage_name_from_mids_id(jam_listmem_malloc, mids_id);
#ifdef __DRM_SUPPORT__
handle = FS_Open(midsStorageName, FS_OPEN_SHARED | FS_READ_ONLY);
FS_Close(handle);
if(handle < 0 || jam_drm_check_right(midsStorageName, DRM_PERMISSION_EXECUTE) || !not_Default_Game)
{
#endif
EGE_dir_path = work_dir_path; /* save the work_dir_path */
nextLaunchMidletID = getStorageNumberFromName((kal_char*)infusio_mids_storagename);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -