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

📄 jam_native_handler.c

📁 java 1.1 gemini 08_16
💻 C
📖 第 1 页 / 共 4 页
字号:
				goto errHandle;
			} else if (result != FS_NO_ERROR)
			{
				KNI_ThrowNew("java/lang/RuntimeException", "Move error");
				goto errHandle;
			}
		}
		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;
	}
	errHandle:
	KNI_EndHandles();
	KNI_ReturnInt(return_Value);
}

KNIEXPORT KNI_RETURNTYPE_INT
Java_com_sun_midp_midletsuite_Installer_setAndMoveInstallPathByStorageName(){
	SHORTARRAY array;
	kal_wchar* buffer;
	kal_int32 len;
	kal_int32 return_Value = 0;
	kal_char * tempPath = NULL;
	KNI_StartHandles(1);
	KNI_DeclareHandle(storageName);
	KNI_GetParameterAsObject(1, storageName);
	array = (SHORTARRAY)(*storageName);
	len = array->length;
	if(Java_mode != JAVA_NORMAL_MODE){
		goto errHandle;
	}
	tempPath = work_dir_path;
	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);
		work_dir_path = get_dir_path_from_midsid(getStorageNumberFromName((kal_char*)buffer));
		if(work_dir_path == NULL){
			work_dir_path = work_sys_dir_path;
		}
		if(strcmp(work_dir_path, tempPath) != 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", tempPath, jar_temp_file_name);
			kal_wsprintf(dest_path, "%s", work_dir_path);
			if(check_and_create_hidden_folder(dest_path) != FS_NO_ERROR){
				return_Value = -1;
				jam_listmem_free(source_path);
				jam_listmem_free(dest_path);
				goto errHandle;
			}
			kal_wsprintf(dest_path, "%s\\%s", work_dir_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;
				goto errHandle;
			}else if(result != FS_NO_ERROR){
				KNI_ThrowNew("java/lang/RuntimeException", "Move error");
				goto errHandle;
			}
		}
		midpFree(buffer);
	}
errHandle:
	if(tempPath != j2me_sys_dir_path)
		jam_listmem_free(tempPath);
	KNI_EndHandles();
	KNI_ReturnInt(return_Value);
}


KNIEXPORT KNI_RETURNTYPE_BOOLEAN
Java_com_sun_midp_io_j2me_storage_File_storageExists___3B_3B()
{
	char* pszAsciiFilename;
	char* pszStorageName;
	int   nameLen;
	int   storageLen;
	int   ret = -1;

	KNI_StartHandles(2);
	KNI_DeclareHandle(filename);
	KNI_DeclareHandle(storagename);

	KNI_GetParameterAsObject(1, filename);
	nameLen = KNI_GetArrayLength(filename);
	KNI_GetParameterAsObject(2, storagename);
	storageLen = KNI_GetArrayLength(storagename);

	pszAsciiFilename = (char*)midpMalloc(nameLen + 1);

	if (pszAsciiFilename == NULL)
	{
		KNI_ThrowNew("java/lang/OutOfMemoryError", "");
	} else
	{
		KNI_GetRawArrayRegion(filename, 0, nameLen, (jbyte*)pszAsciiFilename);
		pszAsciiFilename[nameLen] = '\0';
	}

	pszStorageName = (char*)midpMalloc(storageLen + 1);

	if (pszStorageName == NULL)
	{
		KNI_ThrowNew("java/lang/OutOfMemoryError", "");
	} else if (pszAsciiFilename != NULL)
	{
		kal_char* tempPath = NULL;
		kal_char orgDrive = 0;
		kal_int32 storage_id = 0;
		KNI_GetRawArrayRegion(storagename, 0, storageLen, (jbyte*)pszStorageName);
		pszStorageName[storageLen] = '\0';

		storage_id = getStorageNumberFromName(pszStorageName);
		if (storage_id >= 0)
		{
			tempPath= get_dir_path_from_midsid(storage_id);
			if (tempPath != NULL)
			{
				orgDrive = work_dir_path[0];
				work_dir_path[0] = tempPath[0];
			}
		}

		ret = storageFileExists(pszAsciiFilename);
		if (storage_id >= 0)
		{
			if (tempPath != NULL)
			{
				work_dir_path[0] = orgDrive;
				jam_listmem_free(tempPath);
			}
		}
		midpFree(pszStorageName);
	}

	if (pszAsciiFilename != NULL)
	{
		midpFree(pszAsciiFilename);
	}
	KNI_EndHandles();
	KNI_ReturnBoolean((jboolean)ret);
}

KNIEXPORT KNI_RETURNTYPE_INT
Java_com_sun_midp_io_j2me_storage_RandomAccessStream_open___3B_3BI()
{
	int   ioMode = KNI_GetParameterAsInt(2);
	char* pszAsciiFilename;
	int   handle = -1;
	char* pszError;
	int   nameLen;
	char* pszStorageName;
	int   storageLen;

	KNI_StartHandles(3);
	KNI_DeclareHandle(thisObject);
	KNI_DeclareHandle(filename);
	KNI_DeclareHandle(storagename);
	KNI_GetParameterAsObject(2, storagename);
	storageLen = KNI_GetArrayLength(storagename);

	KNI_GetThisPointer(thisObject);
	KNI_GetParameterAsObject(1, filename);

	nameLen = KNI_GetArrayLength(filename);

	pszAsciiFilename = (char*)midpMalloc(nameLen+1);

	if (pszAsciiFilename == NULL)
	{
		KNI_ThrowNew("java/lang/OutOfMemoryError", "RAS Open");
	} else
	{


		pszStorageName = (char*)midpMalloc(storageLen + 1);
		if (pszStorageName == NULL)
		{
			midpFree(pszAsciiFilename);
			KNI_ThrowNew("java/lang/OutOfMemoryError", "");
		} else
		{
			kal_char* tempPath = NULL;
			kal_char orgDrive = 0;
			kal_int32 storage_id = 0;
			KNI_GetRawArrayRegion(filename, 0, nameLen, (jbyte*)pszAsciiFilename);
			pszAsciiFilename[nameLen] = '\0';

			KNI_GetRawArrayRegion(storagename, 0, storageLen, (jbyte*)pszStorageName);
			pszStorageName[storageLen] = '\0';

			storage_id = getStorageNumberFromName(pszStorageName);
			if (storage_id >= 0)
			{
				tempPath= get_dir_path_from_midsid(storage_id);
				if (tempPath != NULL)
				{
					orgDrive = work_dir_path[0];
					work_dir_path[0] = tempPath[0];
				}
			}

			handle = storageOpen(&pszError, pszAsciiFilename, ioMode);
			if (storage_id >= 0)
			{
				if (tempPath != NULL)
				{
					work_dir_path[0] = orgDrive;
					jam_listmem_free(tempPath);
				}
			}

			midpFree(pszAsciiFilename);
			midpFree(pszStorageName);
			if (pszError != NULL)
			{
				KNI_ThrowNew("java/io/IOException", pszError);
				storageFreeError(pszError);
			} else
			{
				KNI_registerCleanup(thisObject, storageCleanup);
			}
		}
	}

	KNI_EndHandles();
	KNI_ReturnInt(handle);
}

KNIEXPORT KNI_RETURNTYPE_INT
Java_com_sun_midp_io_j2me_storage_File_availableStorage___3B()
{
	char* pszStorageName;
	kal_int32 returnValue = 0;
	int   storageLen;
	KNI_StartHandles(1);
	KNI_DeclareHandle(storagename);
	KNI_GetParameterAsObject(1, storagename);
	storageLen = KNI_GetArrayLength(storagename);
	pszStorageName = (char*)midpMalloc(storageLen + 1);

	if (pszStorageName == NULL)
	{
		KNI_ThrowNew("java/lang/OutOfMemoryError", "");
	} else
	{
		kal_char* tempPath = NULL;
		kal_char orgDrive = 0;
		kal_int32 storage_id = 0;
		KNI_GetRawArrayRegion(storagename, 0, storageLen, (jbyte*)pszStorageName);
		pszStorageName[storageLen] = '\0';

		storage_id = getStorageNumberFromName(pszStorageName);
		if (storage_id >= 0)
		{
			tempPath= get_dir_path_from_midsid(storage_id);
			if (tempPath != NULL)
			{
				orgDrive = work_sys_dir_path[0];
				work_sys_dir_path[0] = tempPath[0];
			}
		}

		returnValue = storageGetFreeSpace();
		if (storage_id >= 0)
		{
			if (tempPath != NULL)
			{
				work_sys_dir_path[0] = orgDrive;
				jam_listmem_free(tempPath);
			}
		}
		midpFree(pszStorageName);
	}
	KNI_EndHandles();
	KNI_ReturnInt((jint)returnValue);
}

KNIEXPORT KNI_RETURNTYPE_BOOLEAN
Java_com_sun_midp_security_SecurityToken_checkInPause(void)
{
	KNI_ReturnBoolean(saved_vm_pause);
}

KNIEXPORT KNI_RETURNTYPE_BOOLEAN
Java_com_sun_midp_publickeystore_PublicKeyStore_startGetCA(void)
{
    KNI_ReturnBoolean(get_ca_from_wap());
}

KNIEXPORT KNI_RETURNTYPE_BOOLEAN
Java_com_sun_midp_publickeystore_PublicKeyStore_CAReady(void)
{
	if (install_update_status.is_local_install ||
		install_update_status.is_normal_install ||
		install_update_status.is_update)
	{
		clean_event(); /* use this to receive CA message from WAP */
	}
	KNI_ReturnBoolean(ca_list_ready());
}

static jam_ca_struct* saved_ca = NULL;

KNIEXPORT KNI_RETURNTYPE_BOOLEAN
Java_com_sun_midp_publickeystore_PublicKeyStore_getNextWAPCA(void)
{
	saved_ca = jam_ca_list;
	if (jam_ca_list == NULL)
	{
		KNI_ReturnBoolean(KAL_FALSE);
    }
    else
	{
		jam_ca_list = jam_ca_list->next_ca;
		KNI_ReturnBoolean(KAL_TRUE);
	}
}

KNIEXPORT KNI_RETURNTYPE_OBJECT
Java_com_sun_midp_publickeystore_PublicKeyStore_getCADomain(void)
{
	KNI_StartHandles(1);
	KNI_DeclareHandle(str);

	KNI_NewStringUTF(J2ME_CA_DOMAIN, str);

	KNI_EndHandlesAndReturnObject(str);
}

KNIEXPORT KNI_RETURNTYPE_INT
Java_com_sun_midp_publickeystore_PublicKeyStore_getCAExponentLength(void)
{
	KNI_ReturnInt(saved_ca->cert_pkey.exp_len);
}

KNIEXPORT KNI_RETURNTYPE_VOID
Java_com_sun_midp_publickeystore_PublicKeyStore_getCAExponent(void)
{
	KNI_StartHandles(1);
	KNI_DeclareHandle(CAExponent);
	KNI_GetParameterAsObject(1, CAExponent);
	KNI_SetRawArrayRegion(CAExponent, 0, saved_ca->cert_pkey.exp_len, (jbyte*)saved_ca->cert_pkey.rsa_exponent);
	KNI_EndHandles();
	KNI_ReturnVoid();
}

KNIEXPORT KNI_RETURNTYPE_INT
Java_com_sun_midp_publickeystore_PublicKeyStore_getCAModulusLength(void)
{
	KNI_ReturnInt(saved_ca->cert_pkey.mod_len);
}

KNIEXPORT KNI_RETURNTYPE_VOID
Java_com_sun_midp_publickeystore_PublicKeyStore_getCAModulus(void)
{
	KNI_StartHandles(1);
	KNI_DeclareHandle(CAModulus);
	KNI_GetParameterAsObject(1, CAModulus);
	KNI_SetRawArrayRegion(CAModulus, 0, saved_ca->cert_pkey.mod_len, (jbyte*)saved_ca->cert_pkey.rsa_modulus);
	KNI_EndHandles();
	KNI_ReturnVoid();
}

KNIEXPORT KNI_RETURNTYPE_LONG
Java_com_sun_midp_publickeystore_PublicKeyStore_getCANotAfter(void)
{
	long64 not_after = saved_ca->cert_content.not_after;
	not_after *= 1000; 
	KNI_ReturnLong(not_after);
}

KNIEXPORT KNI_RETURNTYPE_LONG
Java_com_sun_midp_publickeystore_PublicKeyStore_getCANotBefore(void)
{
	long64 not_before = saved_ca->cert_content.not_before;
	not_before *= 1000;
	KNI_ReturnLong(not_before);
}

KNIEXPORT KNI_RETURNTYPE_OBJECT 
Java_com_sun_midp_publickeystore_PublicKeyStore_getCAOwner(void)
{
	KNI_StartHandles(1);
	KNI_DeclareHandle(str);

	if (saved_ca->cert_content.issuer != NULL)
	{
		if (saved_ca->cert_content.issuer_len == 255)
		{
			saved_ca->cert_content.issuer[255] = 0;
		} else
		{
			saved_ca->cert_content.issuer[saved_ca->cert_content.issuer_len] = 0;
		}
		KNI_NewStringUTF((const char*)saved_ca->cert_content.issuer, str);
	} else
	{
		KNI_ReleaseHandle(str);	/* Set 'str' to null String object */
	}
	KNI_EndHandlesAndReturnObject(str);
}

KNIEXPORT KNI_RETURNTYPE_VOID
Java_com_sun_midp_midlet_MIDletState_notifyPauseNative(void)
{
    if(!notify_pause)
    {
        jvm_send_pause_ind();
        notify_pause = KAL_TRUE;
        last_resume_request_time = 0;
    }
    KNI_ReturnVoid();
}

KNIEXPORT KNI_RETURNTYPE_VOID
Java_com_sun_midp_midlet_MIDletState_resumeRequestNative(void)
{
    if(notify_pause && (jvm_get_currenttime_tick() - last_resume_request_time  > 400 ))
    {
        last_resume_request_time = jvm_get_currenttime_tick();
        jvm_send_resume_ind();
    }
    KNI_ReturnVoid();
}

/*************************************************************************
* FUNCTION
*  save midletsuite setting ($suitename.bin)
*
* DESCRIPTION
*  Save setting after VM shutdown.
*
* PARAMETERS
*
* RETURNS
*  None
*
* GLOBALS AFFECTED
*
*************************************************************************/
KNIEXPORT KNI_RETURNTYPE_VOID
Java_com_sun_midp_midletsuite_Installer_saveSetting0(void) {

	BYTEARRAY barray;
	int file_handle;
	char* pszAsciiFilename;
	SHORTARRAY name_array;

	/* Declare Size and Handlers */
	KNI_StartHandles(2);
	KNI_DeclareHandle(filename);
	KNI_DeclareHandle(input_buffer_Handle);

	/* Get Parameter 1 */
	KNI_GetParameterAsObject(1, filename);
	KNI_GetParameterAsObject(2, input_buffer_Handle);

	name_array = (SHORTARRAY)(*filename);
	barray = (BYTEARRAY)(*input_buffer_Handle);
	
	if(barray->length)
	{
    		trans_ucs2_to_utf8((kal_char*)name_array->sdata, (kal_wchar*)name_array->sdata);

		pszAsciiFilename = midpMalloc(name_array->length + 1);
	    	if (pszAsciiFilename == NULL) {
			KNI_ThrowNew("java/lang/OutOfMemoryError", "");
		} else {
			Kmemcpy(pszAsciiFilename, name_array->sdata, name_array->length);
			pszAsciiFilename[name_array->length] = '\0';
		}

		if((file_handle = jvm_file_open(pszAsciiFilename, O_CREAT | O_TRUNC)) != -1) {
			jvm_file_write(file_handle, barray->bdata, barray->length);
			jvm_file_close(file_handle);
		}

		midpFree(pszAsciiFilename);
	}
	KNI_EndHandles();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -