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

📄 midletsuitemanager.c

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

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