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

📄 jam_native_handler.c

📁 java 1.1 gemini 08_16
💻 C
📖 第 1 页 / 共 4 页
字号:
	short temp[3]={0,10,0};
	
	KNI_GetParameterAsObject(1, (jobject)&source_array);
	off = KNI_GetParameterAsInt(2);
	len = KNI_GetParameterAsInt(3);
	KNI_GetParameterAsObject(4, (jobject)&dest_array);
	
	returnSize =EncodingDecoding(UCS2_TO_GB2312, 
                    (char*)dest_array->bdata,
                    (char*)source_array->bdata,
                    dest_array->length,
                    (kal_uint32*)(source_array->bdata + len - 1));
                    
    /*if (dest_array->bdata[1] == 0) dest_array->bdata[1] = 10;*/
    if(!memcmp((dest_array->bdata+1), temp, sizeof(temp[0])))
    {
    		memcpy((dest_array->bdata+1),(temp+1),sizeof(temp[0]));
    }
	KNI_ReturnInt(returnSize);
#else
	KNI_ReturnInt(0);
#endif
}

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

kal_int32 permission_dialog_selected_item;
kal_char yes_Index = 0;
kal_wchar *permission_resource;

KNIEXPORT KNI_RETURNTYPE_VOID
Java_com_sun_midp_security_SecurityToken_sendPermissionRequest(void)
{
	kal_int32 permission;
	kal_int32 i;
	BYTEARRAY items;
	BYTEARRAY resoruce_items;
	kal_int32 default_value;
	kal_int32 permission_title_id;
	kal_wchar* appendix_str = NULL;
	/* initialized with a special pattern 0xFF, it will be set by 
	 * MMI. The value set by MMI will not be 0xFF.
	 * Modified from index to KAL_TRUE and KAL_FALSE. 
	 * The original design has up to four items can be selected by the user, 
	 * but the new scenario only has "Yes" or "No" choices.
	 */
	permission_dialog_selected_item = 255;

	KNI_StartHandles(2);
	KNI_DeclareHandle(charBuffer);
	KNI_DeclareHandle(resourceBuffer);
	permission = KNI_GetParameterAsInt(1);
	KNI_GetParameterAsObject(2, charBuffer);
	items = (BYTEARRAY)(*charBuffer);
	default_value = KNI_GetParameterAsInt(3);
	KNI_GetParameterAsObject(4, resourceBuffer);
	resoruce_items = (BYTEARRAY)(*resourceBuffer);
	if(resoruce_items == NULL || resoruce_items->length == 0)
	{
		appendix_str = NULL;
	}
	else
	{
		if(permission_resource != NULL)
		{
			midpFree(permission_resource);
			permission_resource = NULL;
		}
		permission_resource = (kal_wchar*)midpMalloc((resoruce_items->length << 1) + 8);
		if(permission_resource == NULL)
		{
			appendix_str = NULL;
		}
		else
		{
			permission_resource[0] = ' ';
			permission_resource[1] = '(';
			memcpy(permission_resource + 2, resoruce_items->bdata, resoruce_items->length << 1);
			permission_resource[resoruce_items->length + 2] = ')';
			permission_resource[resoruce_items->length + 3] = 0;
			appendix_str = permission_resource;
		}
	}
    
	/* mapping Java permission ID to MMI permission ID. 
	   Ugly! I know. */
	switch (permission)
	{
	case 2:	/* Permissions.HTTP */
		permission_title_id = JAVA_PERMISSION_HTTP;
		break;
	case 3:	/* Permissions.TCP */
		permission_title_id = JAVA_PERMISSION_SOCKET;
		break;
	case 4:	/* Permissions.HTTPS */
		permission_title_id = JAVA_PERMISSION_HTTPS;
		break;
	case 5:	/* Permissions.SSL */
		permission_title_id = JAVA_PERMISSION_SSL;
		break;
	case 6:	/* Permissions.TCP_SERVER */
		permission_title_id = JAVA_PERMISSION_SVR_SOCKET;
		break;
	case 7:	/* Permissions.UDP */
		permission_title_id = JAVA_PERMISSION_DATAGRAM;
		break;
	case 8:	/* Permissions.UDP_SERVER */
		permission_title_id = JAVA_PERMISSION_SVR_DATAGRAM;
		break;
	case 9:	/* Permissions.COMM */
		permission_title_id = JAVA_PERMISSION_COMM;
		break;
	case 10: /* Permissions.PUSH */
		permission_title_id = JAVA_PERMISSION_PUSH;
		break;
	case 11: /* Permissions.SMS_SERVER */
	case 13: /* Permissions.SMS_SEND */
	case 14: /* Permissions.SMS_RECEIVE */
		permission_title_id = JAVA_PERMISSION_SMS;
		break;
	case 12: /* Permissions.CBS_SERVER */
	case 15: /* Permissions.CBS_RECEIVE */
		permission_title_id = JAVA_PERMISSION_CBS;
		break;
	case 16: /* Permissions.MMS_SERVER */
	case 17: /* Permissions.MMS_SEND */
	case 18: /* Permissions.MMS_RECEIVE */
		permission_title_id = JAVA_PERMISSION_MMS;
		break;
	case 19: /* Permissions.MMA_RECORD */
		permission_title_id = JAVA_PERMISSION_RECORD_CTRL;
		break;
	case 20: /* Permissions.MMA_SNAPSHOT */
		permission_title_id = JAVA_PERMISSION_SNAPSHOT;
		break;
	case 21: /* Permissions.JSR_75_FILE_READ */
		permission_title_id = JAVA_PERMISSION_FILE_READ;
		break;
	case 22: /* Permissions.JSR_75_FILE_WRITE */
		permission_title_id = JAVA_PERMISSION_FILE_WRITE;
		break;
	case 23: /* Permissions.JSR_75_CONTACT_READ */
		permission_title_id = JAVA_PERMISSION_CONTACT_LIST_READ;
		break;
	case 24: /* Permissions.JSR_75_CONTACT_WRITE */
		permission_title_id = JAVA_PERMISSION_CONTACT_LIST_WRITE;
		break;
	case 25: /* Permissions.JSR_75_EVENT_READ */
		permission_title_id = JAVA_PERMISSION_EVENT_LIST_READ;
		break;
	case 26: /* Permissions.JSR_75_EVENT_WRITE */
		permission_title_id = JAVA_PERMISSION_EVENT_LIST_WRITE;
		break;
	case 27: /* Permissions.JSR_75_TODO_READ */
		permission_title_id = JAVA_PERMISSION_TODO_LIST_READ;
		break;
	case 28: /* Permissions.JSR_75_TODO_WRITE */
		permission_title_id = JAVA_PERMISSION_TODO_LIST_WRITE;
		break;
	case 29: /* Permissions.OBEX_CLIENT */
		permission_title_id = JAVA_PERMISSION_OBEX_CLIENT;
		break;
	case 30: /* Permissions.OBEX_SERVER */
		permission_title_id = JAVA_PERMISSION_OBEX_SERVER;
		break;
	case 31: /* Permissions.OBEX_CLIENT_TCP */
		permission_title_id = JAVA_PERMISSION_OBEX_CLIENT_TCP;
		break;
	case 32: /* Permissions.OBEX_SERVER_TCP */
		permission_title_id = JAVA_PERMISSION_OBEX_SERVER_TCP;
		break;
	case 33: /* Permissions.BT_CLIENT */
		permission_title_id = JAVA_PERMISSION_BT_CLIENT;
		break;
	case 34: /* Permissions.BT_SERVER */
		permission_title_id = JAVA_PERMISSION_BT_SERVER;
		break;
	case 50000:	/* For platform request to make phone call */
		permission_title_id = JAVA_PERMISSION_TELEPHONE;
		break;
	case 50001:	/* Exclusive dialog for auto invocation */
		permission_title_id = JAVA_PERMISSION_EXCLUSIVE_PUSH;
		break;
	case 50002:	/* Exclusive dialog for network access */
		permission_title_id = JAVA_PERMISSION_EXCLUSIVE_NET;
		break;
	default:
		permission_title_id = JAVA_PERMISSION_UNKNOWN;
	}

	for (i = 0; i < 7; i++)
	{
		if (items->bdata[i] == 2)
		{
			yes_Index = i;
		}
	}

	get_permission_req(permission_title_id, &permission_dialog_selected_item, default_value, appendix_str);
	KNI_EndHandles();
	KNI_ReturnVoid();
}

KNIEXPORT KNI_RETURNTYPE_INT
Java_com_sun_midp_security_SecurityToken_getSelectedItem(void)
{
	/* Modified from index to KAL_TRUE and KAL_FALSE. 
	 * The original design has up to four items can be selected by the user, 
	 * but the new scenario only has "Yes" or "No" choices.
	 */
	if (permission_dialog_selected_item == KAL_TRUE ||
		permission_dialog_selected_item == KAL_FALSE)
	{
		if (permission_dialog_selected_item == KAL_TRUE)
		{
			permission_dialog_selected_item = yes_Index;
		} else
		{
			/* set a index out of range means "CANCEL" */
			permission_dialog_selected_item = 8;
		}
	}

	KNI_ReturnInt(permission_dialog_selected_item);
}

extern set_java_level_virtual_direction(kal_bool);

KNIEXPORT KNI_RETURNTYPE_VOID
Java_javax_microedition_lcdui_Display_setVirtualKeypad(void)
{
	BOOL isDirection = KNI_GetParameterAsBoolean(1);
	set_java_level_virtual_direction(isDirection);
	KNI_ReturnVoid();
}

KNIEXPORT KNI_RETURNTYPE_INT
Java_com_sun_midp_midletsuite_Installer_DRMDecodeJAD(void)
{
	kal_int32 returnValue = DRM_PROCESS_ERROR;
	SHORTARRAY array;
	kal_wchar* buffer;
	kal_int32 len;
	KNI_StartHandles(1);
	KNI_DeclareHandle(jad_file_name);
	KNI_GetParameterAsObject(1, jad_file_name);
	array = (SHORTARRAY)(*jad_file_name);
	len = array->length;
	if (Java_mode == JAVA_NORMAL_MODE)
	{
		buffer = (kal_wchar*)midpMalloc(MAX_WCHAR_FILENAME_LEN);
		if (buffer != NULL)
		{
			kal_int32 j2me_dir_path_len = strlen(work_sys_dir_path);
			kal_wsprintf(buffer,"%s\\", work_sys_dir_path);
			Kmemcpy(buffer + j2me_dir_path_len + 1, &array->sdata, (len << 1));
			buffer[len + j2me_dir_path_len + 1] = 0;
 			returnValue = jam_drm_decode_file(buffer, KAL_FALSE);
            if( returnValue == -J2ME_USER_CANCEL)
            {
                returnValue = -10;
            }
			midpFree(buffer);
		}
        else
        {
            midpFree(buffer);
			KNI_ThrowNew("java/lang/OutOfMemoryError", "Runtime memory not enough!");
        }
	} else
	{
		returnValue = J2ME_NO_ERROR;
	}
	KNI_EndHandles();
	KNI_ReturnInt(returnValue);
}


KNIEXPORT KNI_RETURNTYPE_INT
Java_com_sun_midp_midletsuite_Installer_DRMDecodeJAR(void)
{
	kal_int32 returnValue = DRM_PROCESS_ERROR;
	SHORTARRAY array;
	kal_wchar* buffer;
	kal_int32 len;
	KNI_StartHandles(1);
	KNI_DeclareHandle(jar_file_name);
	KNI_GetParameterAsObject(1, jar_file_name);
	array = (SHORTARRAY)(*jar_file_name);
	len = array->length;
	if (Java_mode == JAVA_NORMAL_MODE)
	{
		buffer = (kal_wchar*)midpMalloc(MAX_WCHAR_FILENAME_LEN);
		if (buffer != NULL)
		{
			kal_int32 j2me_dir_path_len = strlen(work_dir_path);
			kal_wsprintf(buffer,"%s\\", work_dir_path);
			Kmemcpy(buffer + j2me_dir_path_len + 1, &array->sdata, (len << 1));
			buffer[len + j2me_dir_path_len + 1] = 0;
#ifndef ENCRYPT_JAR_FILE
			returnValue = jam_drm_decode_file(buffer, KAL_TRUE);
            if( returnValue == -J2ME_USER_CANCEL)
            {
                returnValue = -10;
            }
#else
			returnValue = jam_drm_decode_file(buffer, KAL_FALSE);
			if (returnValue == DRM_INVALID_FORMAT)
			{
				kal_int32 error_code = encrypt_jar_file(buffer, &returnValue);
				if (error_code != J2ME_NO_ERROR)
				{
					if (error_code == J2ME_USER_CANCEL)
						returnValue = -10;
				}
			}
            else if (returnValue == -(J2ME_USER_CANCEL))
			{
				returnValue = -10;
			}
#endif
			midpFree(buffer);
		}
        else
        {
            midpFree(buffer);
			KNI_ThrowNew("java/lang/OutOfMemoryError", "Runtime memory not enough!");
        }
	}
    else
	{
		returnValue = J2ME_NO_ERROR;
	}
	KNI_EndHandles();
	KNI_ReturnInt(returnValue);
}

KNIEXPORT KNI_RETURNTYPE_VOID
Java_com_sun_midp_midletsuite_Installer_getPathName()
{
	BYTEARRAY url_array;
	KNI_StartHandles(1);
	KNI_DeclareHandle(charBuffer);
	KNI_GetParameterAsObject(1, charBuffer);
	url_array = (BYTEARRAY)(*charBuffer);
	memcpy((kal_char*)url_array->bdata, (kal_char*)work_dir_path, strlen(work_dir_path) + 1);
	KNI_EndHandles();
	KNI_ReturnVoid();
}
//jam_get_install_drv();
KNIEXPORT KNI_RETURNTYPE_INT
Java_com_sun_midp_midletsuite_Installer_setInstallPath()
{
	kal_int32 drive;
	kal_int32 requestSize;
	kal_wchar* tempPath;
	kal_char* new_path;
	kal_int32 returnCode = 0;
	KNI_StartHandles(1);
	requestSize = KNI_GetParameterAsInt(1);
	if (Java_mode == JAVA_NORMAL_MODE)
	{
		drive = jam_get_install_drv(requestSize);
		if (drive <= 0)
		{
			KNI_ThrowNew("java/lang/RuntimeException", "User Cancel");
		} else
		{
			new_path = (kal_char*)jam_listmem_malloc(strlen(work_sys_dir_path) + 1);
			ASSERT(new_path!=NULL);
			memcpy((kal_char*)new_path, (kal_char*)work_sys_dir_path, strlen(work_sys_dir_path) + 1);
			new_path[0] = (char)drive;
			tempPath = (kal_wchar*)jam_listmem_malloc((strlen(work_sys_dir_path) + 1) << 1);
			ASSERT(tempPath!=NULL);
			trans_utf8_to_ucs2(tempPath, new_path);
			if (check_and_create_hidden_folder(tempPath) != FS_NO_ERROR)
			{
				returnCode = -1;
			}

			jam_listmem_free(tempPath);
			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;
		}
	}
	KNI_EndHandles();
	KNI_ReturnInt(returnCode);
}

KNIEXPORT KNI_RETURNTYPE_VOID
Java_com_sun_midp_midletsuite_Installer_setInstallPathByStorageName()
{
	SHORTARRAY array;
	kal_wchar* buffer;
	kal_int32 len;
	KNI_StartHandles(1);
	KNI_DeclareHandle(storageName);
	KNI_GetParameterAsObject(1, storageName);
	array = (SHORTARRAY)(*storageName);
	len = array->length;
	if (Java_mode == JAVA_NORMAL_MODE)
	{
		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);
			if (work_dir_path != work_sys_dir_path)	jam_listmem_free(work_dir_path);
			work_dir_path = get_dir_path_from_midsid(getStorageNumberFromName((kal_char*)buffer));
			midpFree(buffer);
		}
	}
	KNI_EndHandles();
	KNI_ReturnVoid();
}

const kal_char* jar_temp_file_name = "_temp.jar";

KNIEXPORT KNI_RETURNTYPE_INT
Java_com_sun_midp_midletsuite_Installer_setAndMoveInstallPath()
{
	kal_int32 drive;
	kal_int32 requestSize;
	kal_wchar* tempPath;
	kal_char* new_path;
	kal_int32 return_Value = 0;
	KNI_StartHandles(1);
	requestSize = KNI_GetParameterAsInt(1);
	if (Java_mode != JAVA_NORMAL_MODE)
	{
		goto errHandle;
	}
	drive = jam_get_install_drv(requestSize);
	if (drive <= 0)
	{
		KNI_ThrowNew("java/lang/RuntimeException", "User Cancel");
	} else
	{
		new_path = (kal_char*)jam_listmem_malloc(strlen(work_sys_dir_path) + 1);
		ASSERT(new_path!=NULL);
		memcpy((kal_char*)new_path, (kal_char*)work_sys_dir_path, strlen(work_sys_dir_path) + 1);
		new_path[0] = (char)drive;
		tempPath = (kal_wchar*)jam_listmem_malloc((strlen(work_sys_dir_path) + 1) << 1);
		ASSERT(tempPath!=NULL);
		trans_utf8_to_ucs2(tempPath, new_path);
		if (check_and_create_hidden_folder(tempPath) != FS_NO_ERROR)
		{
			return_Value = -1; /* can not reate @Java folder, must be disk full or root dirctory full */
			goto errHandle;
		}

		jam_listmem_free(tempPath);
		if (strcmp(work_dir_path, new_path) != 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", work_dir_path, jar_temp_file_name);
			kal_wsprintf(dest_path, "%s\\%s", new_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;

⌨️ 快捷键说明

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