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

📄 jam_native_handler.c

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

		if (install_update_status.is_update)
		{
			kal_wchar* buffer;
			if (success == FALSE)
			{
				int len = array->length * 2 + 2;
				buffer = (kal_wchar*)midpMalloc(len); //this memory will be freed after VM stopped
				if (buffer == NULL)
					goto errHandle;
				Kmemcpy(buffer, &array->sdata, len - 2);
				buffer[array->length] = 0;
			} else
				buffer = NULL;

			jam_update_confirm(success, buffer);
		} else
		{
			kal_wchar* buffer;
			if (success == FALSE)
			{
				int len = array->length * 2 + 2;
				buffer = (kal_wchar*)midpMalloc(len); //this memory will be freed after VM stopped
				if (buffer == NULL)
					goto errHandle;
				Kmemcpy(buffer, &array->sdata, len - 2);
				buffer[array->length] = 0;
			} else
				buffer = NULL;

			jam_install_confirm(success, buffer);
		}
	}
#endif
	errHandle:
	KNI_EndHandles();
	KNI_ReturnVoid();
}


/*************************************************************************
* FUNCTION
*  get Jad URL
*
* DESCRIPTION
*  To get the download Jad URL from Java level.
*
* PARAMETERS
*
* RETURNS
*  None
*
* GLOBALS AFFECTED
*
*************************************************************************/
KNIEXPORT KNI_RETURNTYPE_OBJECT
Java_com_sun_midp_midletsuite_Installer_getWAPJadURL(void)
{

	KNI_StartHandles(1);
	KNI_DeclareHandle(array);

	if (install_download_url != NULL)
	{
		int length = get_ucs2_len(install_download_url);
		*((jobject*)array) = (jobject)instantiateArrayKNI(PrimitiveArrayClasses[T_CHAR], length);
		Kmemcpy(((SHORTARRAY)*array)->sdata, install_download_url, length << 1);
	} else
	{
		if (install_update_status.is_update)
		{
			/* the content of the URL is not imporant for update, we only check */
			/* if the URL is "not" null */
			*((jobject*)array) = (jobject)instantiateArrayKNI(PrimitiveArrayClasses[T_CHAR], 1);
			((SHORTARRAY)*array)->sdata[0] = 0;
		} else if (install_update_status.is_local_install)
		{
			/* the content of the URL is not imporant for local install, we only check */
			/* if the URL is " " (space) */

			/* Local install fake as WAP download JAR file and continue installaton */
			*((jobject*)array) = (jobject)instantiateArrayKNI(PrimitiveArrayClasses[T_CHAR], 1);
			((SHORTARRAY)*array)->sdata[0] = 0x20; /* space */          
		} else
			KNI_ReleaseHandle(array);
	}

	KNI_EndHandlesAndReturnObject(array);
}

KNIEXPORT KNI_RETURNTYPE_INT
Java_com_sun_midp_midletsuite_Installer_WAPDownloadFile(void)
{
	SHORTARRAY filename_array;
	kal_int32 downloadSize = 0;
	KNI_StartHandles(3);
	kal_trace(TRACE_FUNC, FUNC_J2ME_JAVA_INSTALLER_WAPDOWNLOADFILE);
#ifndef __SUN_RI__
	if (install_update_status.is_local_install)
	{ /* do not download anything for local installation */
		downloadSize = -2;
		goto errHandle;
	}

	{
		kal_int32 returnCode = -1;
		SHORTARRAY url_array;
		SHORTARRAY midlet_name_array;       
		int len;
		kal_wchar* ucs2_url;
		kal_wchar* ucs2_filename;
		kal_int32 total_size;
		kal_int32 download_code = J2ME_NO_ERROR;
		kal_int32 java_path_length = strlen(work_dir_path) + 1;
		KNI_DeclareHandle(download_url);
		KNI_DeclareHandle(filename);
		KNI_DeclareHandle(midlet_name);
		total_size = KNI_GetParameterAsInt(1);
		KNI_GetParameterAsObject(2, download_url);
		KNI_GetParameterAsObject(3, filename);
		KNI_GetParameterAsObject(4, midlet_name);

		/* clean message to prevent error */
		if (clean_event() != J2ME_NO_ERROR)
		{
			downloadSize = -1;
			goto errHandle;
		}

		url_array = (SHORTARRAY)(*download_url);
		filename_array = (SHORTARRAY)(*filename);
		midlet_name_array = (SHORTARRAY)(*midlet_name);

		len = url_array->length * 2 + 2;
		ucs2_url = (kal_wchar*)get_ctrl_buffer((kal_uint16)len);
		Kmemcpy(ucs2_url, &url_array->sdata, len - 2);
		ucs2_url[url_array->length] = 0;

		len = filename_array->length * 2;
		ucs2_filename = (kal_wchar*)get_ctrl_buffer((kal_uint16)(len + java_path_length * 2 + 2));
		/* jad or jar file, put jad on system drive and jar on external drive */
		if (filename_array->sdata[filename_array->length - 1] == 'd')
		{
			trans_utf8_to_ucs2(ucs2_filename, work_sys_dir_path);
		} else
		{
			trans_utf8_to_ucs2(ucs2_filename, work_dir_path);
		}
		ucs2_filename[java_path_length - 1] = '\\';

		Kmemcpy((void*)(ucs2_filename + java_path_length), &filename_array->sdata, len);
		ucs2_filename[filename_array->length + java_path_length] = 0;
		returnCode = jam_request_http_and_save_to_file(total_size, ucs2_url, ucs2_filename, 
													   (kal_wchar*)midlet_name_array->sdata, midlet_name_array->length);

		free_ctrl_buffer(ucs2_url);
		free_ctrl_buffer(ucs2_filename);

		if (returnCode != JAM_HTTP_NO_ERROR)
		{
			download_code = returnCode;
			returnCode = J2ME_FILE_DONWLOAD_FAILED;
			if (download_code == JAM_HTTP_USER_CANCEL)
				downloadSize = -1;
			else if (download_code == JAM_HTTP_STORAGE_NOT_ENOUGH)
				downloadSize = -2;
			else
				downloadSize = -3;
		} else
		{
			char * myError;
			int handle;
			ucs2_filename = midpMalloc(filename_array->length * 2 + 2);
			if (ucs2_filename == NULL)
				goto errHandle;
			Kmemcpy(ucs2_filename, &filename_array->sdata, filename_array->length * 2);
			ucs2_filename[filename_array->length] = 0;
			trans_ucs2_to_utf8((kal_char*)ucs2_filename, ucs2_filename);
			handle = storageOpen(&myError, (kal_char*)ucs2_filename, OPEN_READ);
			ASSERT(myError == NULL);
			downloadSize = storageSizeOf(&myError, handle);
			java_total_used_space += downloadSize;
			storageClose(&myError, handle);
			midpFree(ucs2_filename);
		}

		jam_file_save_status(download_code, downloadSize);
	}
#else
	downloadSize = -1;
#endif
	errHandle:
	KNI_EndHandles();
	KNI_ReturnInt(downloadSize);
}

KNIEXPORT KNI_RETURNTYPE_INT
Java_com_sun_midp_midletsuite_Installer_postByWAP(void)
{
	kal_uint32 returnCode = -1;
#ifndef __SUN_RI__
	SHORTARRAY url_array;
	SHORTARRAY massage_array;
	int len, i;
	kal_wchar* ucs2_url;
	kal_char* utf8_massage;
	kal_int32 postResult = -1;
	KNI_StartHandles(2);
	KNI_DeclareHandle(massage);
	KNI_DeclareHandle(url);
	KNI_GetParameterAsObject(1, massage);
	KNI_GetParameterAsObject(2, url);
	kal_trace(TRACE_FUNC, FUNC_J2ME_JAVA_INSTALLER_POSTBYWAP);

	if (install_update_status.is_local_install)
	{ /* do not post anything for local installation */
		returnCode = J2ME_FILE_DOWNLOAD_CONNECTION_ABORT;
		goto postError;
	}

	url_array = (SHORTARRAY)(*url);
	massage_array = (SHORTARRAY)(*massage);

	len = massage_array->length + 1;
	utf8_massage = (kal_char*)get_ctrl_buffer((kal_uint16)len);
	for (i = 0;i < len; i++)
	{
		utf8_massage[i] = (kal_char)massage_array->sdata[i];
	}
	utf8_massage[massage_array->length] = 0;

	len = url_array->length * 2 + 2;
	ucs2_url = (kal_wchar*)get_ctrl_buffer((kal_uint16)len);
	Kmemcpy(ucs2_url, &url_array->sdata, len - 2);
	ucs2_url[url_array->length] = 0;

	jam_request_http_post(ucs2_url, utf8_massage, &postResult);

	free_ctrl_buffer(ucs2_url);
	free_ctrl_buffer(utf8_massage);

	postError:
	KNI_EndHandles();
#endif
	KNI_ReturnInt(postResult);
}


KNIEXPORT KNI_RETURNTYPE_VOID
Java_com_sun_midp_midletsuite_Installer_getAndCleanMSG(void)
{
	/* clean message to prevent error */
	kal_sleep_task(10);
	(void)clean_event();
}

KNIEXPORT KNI_RETURNTYPE_VOID
Java_com_sun_midp_main_CommandProcessor_setInstallFailReason(void)
{
	install_update_status.local_install_return_code = KNI_GetParameterAsInt(1);
	kal_trace(TRACE_FUNC, FUNC_J2ME_SET_INSTALL_FAIL_REASON, install_update_status.local_install_return_code);
	/* this is an update, we have to make sure the storage is ok by calling storage_recovery */
	/*if(install_update_status.local_install_return_code == ALREADY_INSTALLED ||
	   install_update_status.local_install_return_code == JAD_MOVED ||
	   install_update_status.local_install_return_code == OLD_VERSION || 
	   install_update_status.local_install_return_code == NEW_VERSION)
		install_update_status.need_to_clean = KAL_TRUE;*/
}

KNIEXPORT KNI_RETURNTYPE_VOID
Java_com_sun_midp_dev_GraphicalInstaller_getMultiLanguageMessage()
{
	kal_int32 reason;
	kal_wchar* returnString;
	kal_int32 stringLen;
	SHORTARRAY url_array;
	KNI_StartHandles(1);
	KNI_DeclareHandle(charBuffer);
	reason = KNI_GetParameterAsInt(1);
	KNI_GetParameterAsObject(2, charBuffer);
	url_array = (SHORTARRAY)(*charBuffer);
	returnString = get_string_by_error_code(reason);
	stringLen = get_ucs2_len(returnString);
	memcpy(url_array->sdata, returnString, stringLen << 1);
	url_array->sdata[stringLen] = 0; /* add NULL termination */
	KNI_EndHandles();
	KNI_ReturnVoid();
}

KNIEXPORT KNI_RETURNTYPE_VOID
Java_com_sun_midp_midletsuite_Installer_getNativeEncoding()
{
	kal_int32 stringLen;
	/* Should be modified to get the encoding string from WAP */
	kal_wchar* encodeString = (kal_wchar*)"u\0t\0f\0-\08\0\0\0";
	SHORTARRAY url_array;
	KNI_StartHandles(1);
	KNI_DeclareHandle(charBuffer);
	KNI_GetParameterAsObject(1, charBuffer);
	url_array = (SHORTARRAY)(*charBuffer);
	stringLen = get_ucs2_len(encodeString);
	memcpy((kal_char*)url_array->sdata, (kal_char*)encodeString, stringLen << 1);
	url_array->sdata[stringLen] = 0; /* add NULL termination */
	KNI_EndHandles();
	KNI_ReturnVoid();
}

extern char* mmi_wc_get_home_city(void);
extern float mmi_dt_get_tz(void);

KNIEXPORT KNI_RETURNTYPE_INT
Java_com_sun_cldc_util_j2me_TimeZoneImpl_getNativeTimeZoneMinute(void)
{
	if (Java_mode == JAVA_MIDP_TCK_MODE)
	{
		KNI_ReturnInt(0);
	} else
		KNI_ReturnInt((int)(mmi_dt_get_tz() * 60));
}

KNIEXPORT KNI_RETURNTYPE_VOID
Java_com_sun_cldc_util_j2me_TimeZoneImpl_getNativeTimeZoneString(void)
{
	kal_int32 stringLen;
	kal_wchar* encodeString = (kal_wchar*)mmi_wc_get_home_city();
	SHORTARRAY url_array;
	KNI_StartHandles(1);
	KNI_DeclareHandle(charBuffer);
	if (Java_mode == JAVA_MIDP_TCK_MODE)
		encodeString = (unsigned short*)"U\0T\0C\0\0\0";
	KNI_GetParameterAsObject(1, charBuffer);
	url_array = (SHORTARRAY)(*charBuffer);
	stringLen = get_ucs2_len(encodeString);
	memcpy((kal_char*)url_array->sdata, (kal_char*)encodeString, stringLen << 1);
	url_array->sdata[stringLen] = 0; /* add NULL termination */
	KNI_EndHandles();
	KNI_ReturnVoid();
}

KNIEXPORT KNI_RETURNTYPE_VOID
Java_com_sun_midp_midletsuite_Installer_needToRecover(void)
{
	kal_int32 i;
	SHORTARRAY name_array;
	kal_char* storage_name;
	KNI_StartHandles(1);
	KNI_DeclareHandle(charBuffer);
	KNI_GetParameterAsObject(2, charBuffer);
	name_array = (SHORTARRAY)(*charBuffer);
	storage_name = midpMalloc(name_array->length + 1);
	for (i = 0; i < name_array->length; i++)
	{
		storage_name[i] = name_array->sdata[i];
	}
	storage_name[name_array->length] = 0;
	install_update_status.need_to_clean = KNI_GetParameterAsInt(1);
	/* if the installation save disk action does not finished, 
	   we should do storage recovery on mobile phone launching. */
	if (install_update_status.need_to_clean)
		touch_need_to_recover_file(storage_name);
	KNI_EndHandles();
	KNI_ReturnVoid();
}

KNIEXPORT KNI_RETURNTYPE_BOOLEAN
Java_com_sun_midp_midletsuite_Installer_removeMIDSLISTbyName(void)
{
	SHORTARRAY name_array;
	BOOL returnValue = FALSE;
	KNI_StartHandles(1);
	KNI_DeclareHandle(charBuffer);
	KNI_GetParameterAsObject(1, charBuffer);
	name_array = (SHORTARRAY)(*charBuffer);
	/* the final char of the starage name is "_", it can be omitted */
	/* add a NULL terminator such that trans_ucs2_to_utf8 will get the length */
	name_array->sdata[name_array->length - 1] = 0;
	trans_ucs2_to_utf8((kal_char*)name_array->sdata, (kal_wchar*)name_array->sdata);
	if (removeSuiteFromMIDSLIST(GAMETYPE_JAVA_GAME, (kal_char*)name_array->sdata) == 0)
		returnValue = TRUE;
	KNI_EndHandles();
	KNI_ReturnBoolean(returnValue);
}

/* this API will not be used for Aplix. Since we use WPS instead of socket */
KNIEXPORT KNI_RETURNTYPE_INT
Java_com_sun_midp_io_j2me_http_Protocol_getProxySetting(void)
{
	kal_int32 port;
	SHORTARRAY name_array;
	SHORTARRAY password_array;
	SHORTARRAY ip_array;
	KNI_StartHandles(1);
	KNI_DeclareHandle(charBuffer);
	KNI_GetParameterAsObject(1, charBuffer);
	ip_array = (SHORTARRAY)(*charBuffer);
	KNI_GetParameterAsObject(2, charBuffer);
	name_array = (SHORTARRAY)(*charBuffer);
	KNI_GetParameterAsObject(3, charBuffer);
	password_array = (SHORTARRAY)(*charBuffer);
	if (wap_prof.result == WAP_PROF_INVALID_ID || wap_prof.conn_type != WAP_PROF_CONN_TYPE_HTTP 
		|| Java_mode != JAVA_NORMAL_MODE)
	{
		/* error wap profile, or WSP setting, do not use proxy to connect HTTP over TCP/IP */
		port = -1;
		ip_array->sdata[0] = 0;
		name_array->sdata[0] = 0;
		password_array->sdata[0] = 0;
	} else
	{
		/*ip_array->sdata[0] = wap_prof.prx_ip[0];
		ip_array->sdata[1] = wap_prof.prx_ip[1];
		ip_array->sdata[2] = wap_prof.prx_ip[2];
		ip_array->sdata[3] = wap_prof.prx_ip[3];*/
		memcpy(wap_prof.prx_ip, ip_array->sdata,(sizeof(wap_prof.prx_ip[0])*4));
		trans_utf8_to_ucs2((kal_wchar*)name_array->sdata, (kal_char*)wap_prof.username);
		trans_utf8_to_ucs2((kal_wchar*)password_array->sdata, (kal_char*)wap_prof.password);
		port = wap_prof.prx_port;
	}
	KNI_EndHandles();
	KNI_ReturnInt(port);
}

KNIEXPORT KNI_RETURNTYPE_VOID
Java_com_sun_midp_midletsuite_Installer_setCriticalPath(void)
{
	is_in_critical_path = KNI_GetParameterAsInt(1);
}

KNIEXPORT KNI_RETURNTYPE_BOOLEAN
Java_com_sun_cldc_i18n_j2me_GB18030_1Reader_checkGB18030Supported(void)
{
#ifdef __MMI_CHSET_GB18030__
	KNI_ReturnBoolean(TRUE);
#else
	KNI_ReturnBoolean(FALSE);
#endif
}

KNIEXPORT KNI_RETURNTYPE_INT
Java_com_sun_cldc_i18n_j2me_GB18030_1Reader_GB18030ToUnicode(void)
{
#ifdef __MMI_CHSET_GB18030__
	int returnSize;
	BYTEARRAY source_array;
	SHORTARRAY dest_array;
	int len, off;
	KNI_GetParameterAsObject(1, (jobject)&source_array);
	KNI_GetParameterAsObject(2, (jobject)&dest_array);
	off = KNI_GetParameterAsInt(3);
	len = KNI_GetParameterAsInt(4);
	returnSize = mmi_chset_convert_with_src_length(MMI_CHSET_GB18030, MMI_CHSET_UCS2, (char*)source_array->bdata, 
												   source_array->length, (char*)&(dest_array->sdata[off]), len << 1);
	returnSize = returnSize >> 1;
	KNI_ReturnInt(returnSize);
#else
	KNI_ReturnInt(-1);
#endif
}

KNIEXPORT KNI_RETURNTYPE_BOOLEAN
Java_com_sun_cldc_i18n_j2me_GB2312_1Reader_checkGB2312Supported(void)
{
#ifdef __MMI_CHSET_GB2312__
	KNI_ReturnBoolean(TRUE);
#else
	KNI_ReturnBoolean(FALSE);
#endif
}

KNIEXPORT KNI_RETURNTYPE_INT
Java_com_sun_cldc_i18n_j2me_GB2312_1Reader_GB2312ToUnicode(void)
{
#ifdef __MMI_CHSET_GB2312__
	int returnSize;
	BYTEARRAY source_array;
	BYTEARRAY dest_array;
	int len, off;
	KNI_GetParameterAsObject(1, (jobject)&source_array);
	KNI_GetParameterAsObject(2, (jobject)&dest_array);
	off = KNI_GetParameterAsInt(3);
	len = KNI_GetParameterAsInt(4);

    returnSize =EncodingDecoding(GB2312_TO_UCS2, 
                    (char*)dest_array->bdata,
                    (char*)source_array->bdata,
                    dest_array->length,
                    (kal_uint32*)source_array->bdata + len - 1);

    KNI_ReturnInt(returnSize);
#else
  	KNI_ReturnInt(-1);
#endif
}

KNIEXPORT KNI_RETURNTYPE_INT
Java_com_sun_cldc_i18n_j2me_GB2312_1Writer_UnicodeToGB2312(void)
{
#ifdef __MMI_CHSET_GB2312__
	BYTEARRAY source_array;
	BYTEARRAY dest_array;
	int len, off;
	int returnSize;

⌨️ 快捷键说明

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