📄 jam_native_handler.c
字号:
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 + -