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

📄 midletsuitemanager.c

📁 java 1.1 gemini 08_16
💻 C
📖 第 1 页 / 共 2 页
字号:

/*************************************************************************
 * 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 + -