/** * Receives an SMS message. * * @param port The port number to be matched against incoming SMS messages. * @param handle The handle to the open SMS message connection. * @param messageObject The Java message object to be populated. * * @return The length of the SMS message (in bytes). */ KNIEXPORT KNI_RETURNTYPE_INT KNIDECL(com_sun_midp_io_j2me_sms_Protocol_receive0) { #if ENABLE_REENTRY MidpReentryData *info = (MidpReentryData*)SNI_GetReentryData(NULL); #endif int port, handle; int messageLength = -1; SmsMessage *psmsData = NULL; /* The midlet suite name for this connection. */ AppIdType msid = UNUSED_APP_ID; jboolean isOpen; KNI_StartHandles(6); KNI_DeclareHandle(this); KNI_DeclareHandle(thisClass); KNI_GetThisPointer(this); KNI_GetObjectClass(this, thisClass); isOpen = KNI_GetBooleanField(this, KNI_GetFieldID(thisClass, "open", "Z")); if (isOpen) { /* No close in progress */ KNI_DeclareHandle(messageClazz); KNI_DeclareHandle(messageObject); KNI_DeclareHandle(addressArray); KNI_DeclareHandle(byteArray); port = KNI_GetParameterAsInt(1); msid = KNI_GetParameterAsInt(2); handle = KNI_GetParameterAsInt(3); KNI_GetParameterAsObject(4, messageObject); do { #if ENABLE_REENTRY if (!info) { #endif psmsData = jsr120_sms_pool_peek_next_msg((jchar)port); if (psmsData == NULL) { #if ENABLE_REENTRY /* block and wait for a message. */ midp_thread_wait(WMA_SMS_READ_SIGNAL, handle, NULL); #else do { CVMD_gcSafeExec(_ee, { jsr120_wait_for_signal(handle, WMA_SMS_READ_SIGNAL); }); psmsData = jsr120_sms_pool_peek_next_msg((jchar)port); isOpen = KNI_GetBooleanField(this, KNI_GetFieldID(thisClass, "open", "Z")); } while (psmsData == NULL && isOpen); #endif } #if ENABLE_REENTRY } else {
static void setRange(jobject linkMessageObj, int offset, int length) { jfieldID offsetField; jfieldID lengthField; KNI_StartHandles(1); KNI_DeclareHandle(linkMessageClass); KNI_GetObjectClass(linkMessageObj, linkMessageClass); offsetField = KNI_GetFieldID(linkMessageClass, "offset", "I"); lengthField = KNI_GetFieldID(linkMessageClass, "length", "I"); KNI_SetIntField(linkMessageObj, offsetField, offset); KNI_SetIntField(linkMessageObj, lengthField, length); KNI_EndHandles(); }
KNIEXPORT KNI_RETURNTYPE_VOID Java_com_sun_midp_jsr82emul_EmulationPolling_getRequest() { static jfieldID bufID = 0; static jfieldID lengthID = 0; int len = emul_data.req_offset > 512? 512 : emul_data.req_offset; KNI_StartHandles(3); KNI_DeclareHandle(thisHandle); KNI_DeclareHandle(classHandle); KNI_DeclareHandle(bufHandle); if (bufID == 0) { KNI_GetClassPointer(classHandle); bufID = KNI_GetFieldID(classHandle, "requestBuf", "[B"); lengthID = KNI_GetFieldID(classHandle, "length", "I"); } KNI_GetThisPointer(thisHandle); KNI_SetIntField(thisHandle, lengthID, (jint)len); if (emul_data.req_offset > 0) { LOG1("EmulationPolling_getRequest(): getting %d request bytes", emul_data.req_offset); KNI_GetObjectField(thisHandle, bufID, bufHandle); memcpy(JavaByteArray(bufHandle), emul_data.request, len); if (len < emul_data.req_offset) { emul_data.req_offset -= len; memmove(emul_data.request, &emul_data.request[len], emul_data.req_offset); } else { emul_data.req_offset = 0; } } KNI_EndHandles(); KNI_ReturnVoid(); }
static void setNativePointer(jobject linkObj, rendezvous *rp) { jfieldID nativePointerField; KNI_StartHandles(1); KNI_DeclareHandle(linkClass); KNI_GetObjectClass(linkObj, linkClass); nativePointerField = KNI_GetFieldID(linkClass, "nativePointer", "I"); KNI_SetIntField(linkObj, nativePointerField, (jint)rp); KNI_EndHandles(); }
static void setContents(jobject linkMessageObj, jobject contentsObj) { jfieldID contentsField; KNI_StartHandles(1); KNI_DeclareHandle(linkMessageClass); KNI_GetObjectClass(linkMessageObj, linkMessageClass); contentsField = KNI_GetFieldID(linkMessageClass, "contents", "Ljava/lang/Object;"); KNI_SetObjectField(linkMessageObj, contentsField, contentsObj); KNI_EndHandles(); }
/** * Gets the KNI field ID for an instance field of a class and checks it for * validity. See KNI_GetFieldID for further information. * * @param classHandle the handle to the containing object's class * @param name the field's name * @param signature the field's type */ jfieldID midp_get_field_id(KNIDECLARGS jclass classHandle, const char* name, const char* signature) { jfieldID id = KNI_GetFieldID(classHandle, name, signature); if (id == NULL) { REPORT_CRIT3(LC_CORE, "midp_get_field_id: can't find field, clazz=0x%x name=%s sig=%s", (unsigned int)classHandle, name, signature); } return id; }
static rendezvous * getNativePointer(jobject linkObj) { rendezvous *rp; jfieldID nativePointerField; KNI_StartHandles(1); KNI_DeclareHandle(linkClass); KNI_GetObjectClass(linkObj, linkClass); nativePointerField = KNI_GetFieldID(linkClass, "nativePointer", "I"); rp = (rendezvous *)KNI_GetIntField(linkObj, nativePointerField); KNI_EndHandles(); return rp; }
KNIEXPORT KNI_RETURNTYPE_VOID KNIDECL(KNITest_testGetSetIntField) { jint x = KNI_GetParameterAsInt(1); jint y; jfieldID typeFieldID; KNI_StartHandles(2); KNI_DeclareHandle(this); KNI_DeclareHandle(clazz); KNI_GetThisPointer(this); KNI_GetObjectClass(this, clazz); typeFieldID = KNI_GetFieldID(clazz, "i", "I"); y = KNI_GetIntField(this, typeFieldID); KNI_SetIntField(this, typeFieldID, x*y); KNI_EndHandles(); KNI_ReturnVoid(); }
jboolean initializeFieldIds(jfieldID* dest, jclass classHandle, const FieldDesc* fields) { jboolean retVal = KNI_TRUE; while (fields->name != NULL) { *dest = KNI_GetFieldID(classHandle, fields->name, fields->signature); if (*dest == NULL) { retVal = KNI_FALSE; break; } ++fields; ++dest; } return retVal; }
/** * Native finalizer. */ KNIEXPORT KNI_RETURNTYPE_VOID Java_com_sun_midp_io_j2me_comm_Protocol_finalize() { int hPort; KNI_StartHandles(2); KNI_DeclareHandle(instance); KNI_DeclareHandle(clazz); KNI_GetThisPointer(instance); KNI_GetObjectClass(instance, clazz); hPort = KNI_GetIntField(instance, KNI_GetFieldID(clazz, "handle", "I")); if (hPort != -1) { REPORT_INFO1(LC_PROTOCOL, "closePort(1st) >> hPort=%d\n",hPort); closePort(hPort); } KNI_EndHandles(); KNI_ReturnVoid(); }
/* JAVADOC COMMENT ELIDED */ KNIEXPORT KNI_RETURNTYPE_VOID Java_com_sun_j2me_location_PlatformLocationProvider_finalize() { jint provider; KNI_StartHandles(2); KNI_DeclareHandle(this_obj); KNI_DeclareHandle(class_obj); KNI_GetThisPointer(this_obj); KNI_GetObjectClass(this_obj, class_obj); provider = KNI_GetIntField(this_obj, KNI_GetFieldID(class_obj, "provider", "I")); if (unregister_provider(provider) == KNI_TRUE) { jsr179_provider_close((jsr179_handle)provider); } KNI_EndHandles(); KNI_ReturnVoid(); }
/** * Gets the field ids of a Java event object and cache them * in local static storage. * * @param eventObj handle to an NativeEvent Java object * @param classObj handle to the NativeEvent class */ static void cacheEventFieldIDs(jobject eventObj, jclass classObj) { if (eventFieldIDsObtained) { return; } KNI_GetObjectClass(eventObj, classObj); typeFieldID = KNI_GetFieldID(classObj, "type", "I"); intParam1FieldID = KNI_GetFieldID(classObj, "intParam1", "I"); intParam2FieldID = KNI_GetFieldID(classObj, "intParam2", "I"); intParam3FieldID = KNI_GetFieldID(classObj, "intParam3", "I"); intParam4FieldID = KNI_GetFieldID(classObj, "intParam4", "I"); intParam5FieldID = KNI_GetFieldID(classObj, "intParam5", "I"); stringParam1FieldID = KNI_GetFieldID(classObj, "stringParam1", "Ljava/lang/String;"); stringParam2FieldID = KNI_GetFieldID(classObj, "stringParam2", "Ljava/lang/String;"); stringParam3FieldID = KNI_GetFieldID(classObj, "stringParam3", "Ljava/lang/String;"); stringParam4FieldID = KNI_GetFieldID(classObj, "stringParam4", "Ljava/lang/String;"); stringParam5FieldID = KNI_GetFieldID(classObj, "stringParam5", "Ljava/lang/String;"); stringParam6FieldID = KNI_GetFieldID(classObj, "stringParam6", "Ljava/lang/String;"); eventFieldIDsObtained = 1; }
/** * Cache the fieldIDs for each fields of the InvocationImpl class. * Initialize the invocation queue head. * @param invocObj the invocation object * @param classObj the Class object of Invocation */ static void init(jobject invocObj, jclass classObj) { if (urlFid != 0) { return; } KNI_GetObjectClass(invocObj, classObj); /* Get these field IDs from InvocationImpl */ tidFid = KNI_GetFieldID(classObj, "tid", "I" ); previousTidFid = KNI_GetFieldID(classObj, "previousTid", "I" ); suiteIdFid = KNI_GetFieldID(classObj, "suiteId", "I"); classnameFid = KNI_GetFieldID(classObj, "classname", "Ljava/lang/String;"); statusFid = KNI_GetFieldID(classObj, "status", "I"); invokingAuthorityFid = KNI_GetFieldID(classObj, "invokingAuthority", "Ljava/lang/String;"); invokingAppNameFid = KNI_GetFieldID(classObj, "invokingAppName", "Ljava/lang/String;"); invokingSuiteIdFid = KNI_GetFieldID(classObj, "invokingSuiteId", "I"); invokingClassnameFid = KNI_GetFieldID(classObj, "invokingClassname", "Ljava/lang/String;"); invokingIDFid = KNI_GetFieldID(classObj, "invokingID", "Ljava/lang/String;"); /* * Get the rest of the fields from Invocation (the InvocationImpl superclass) * KNI_GetSuperClass(classObj, classObj); */ urlFid = KNI_GetFieldID(classObj, "url", "Ljava/lang/String;"); typeFid = KNI_GetFieldID(classObj, "type", "Ljava/lang/String;"); actionFid = KNI_GetFieldID(classObj, "action", "Ljava/lang/String;"); IDFid = KNI_GetFieldID(classObj, "ID", "Ljava/lang/String;"); argumentsFid = KNI_GetFieldID(classObj, "arguments", "[Ljava/lang/String;"); argsLenFid = KNI_GetFieldID(classObj, "argsLen", "I"); dataFid = KNI_GetFieldID(classObj, "data", "[B"); dataLenFid = KNI_GetFieldID(classObj, "dataLen", "I"); responseRequiredFid = KNI_GetFieldID(classObj, "responseRequired", "Z"); usernameFid = KNI_GetFieldID(classObj, "username", "Ljava/lang/String;"); passwordFid = KNI_GetFieldID(classObj, "password", "Ljava/lang/String;"); #if REPORT_LEVEL <= LOG_CRITICAL if (urlFid == 0 || typeFid == 0 || actionFid == 0 || IDFid == 0 || statusFid == 0 || responseRequiredFid == 0 || tidFid == 0 || previousTidFid == 0 || suiteIdFid == 0 || classnameFid == 0 || invokingAuthorityFid == 0 || invokingAppNameFid == 0 || invokingSuiteIdFid == 0 || invokingClassnameFid == 0 || invokingIDFid == 0 || usernameFid == 0 || passwordFid == 0 || argumentsFid == 0 || argsLenFid == 0 || dataLenFid == 0 || dataFid == 0) { REPORT_CRIT(LC_NONE, "invocStore.c: fieldID initialization failed"); } #endif }
/* JAVADOC COMMENT ELIDED */ KNIEXPORT KNI_RETURNTYPE_VOID Java_com_sun_j2me_location_LocationInfo_initNativeClass() { KNI_StartHandles(1); KNI_DeclareHandle(class_obj); KNI_GetClassPointer(class_obj); if(!KNI_IsNullHandle(class_obj)) { locationInfoFieldID.isValid = KNI_GetFieldID(class_obj, "isValid", "Z"); locationInfoFieldID.timestamp = KNI_GetFieldID(class_obj, "timestamp", "J"); locationInfoFieldID.latitude = KNI_GetFieldID(class_obj, "latitude", "D"); locationInfoFieldID.longitude = KNI_GetFieldID(class_obj, "longitude", "D"); locationInfoFieldID.altitude = KNI_GetFieldID(class_obj, "altitude", "F"); locationInfoFieldID.horizontalAccuracy = KNI_GetFieldID(class_obj, "horizontalAccuracy", "F"); locationInfoFieldID.verticalAccuracy = KNI_GetFieldID(class_obj, "verticalAccuracy", "F"); locationInfoFieldID.speed = KNI_GetFieldID(class_obj, "speed", "F"); locationInfoFieldID.course = KNI_GetFieldID(class_obj, "course", "F"); locationInfoFieldID.method = KNI_GetFieldID(class_obj, "method", "I"); locationInfoFieldID.isAddressInfo = KNI_GetFieldID(class_obj, "isAddressInfo", "Z"); locationInfoFieldID.AddressInfo_EXTENSION = KNI_GetFieldID(class_obj, "AddressInfo_EXTENSION", "Ljava/lang/String;"); locationInfoFieldID.AddressInfo_STREET = KNI_GetFieldID(class_obj, "AddressInfo_STREET", "Ljava/lang/String;"); locationInfoFieldID.AddressInfo_POSTAL_CODE = KNI_GetFieldID(class_obj, "AddressInfo_POSTAL_CODE", "Ljava/lang/String;"); locationInfoFieldID.AddressInfo_CITY = KNI_GetFieldID(class_obj, "AddressInfo_CITY", "Ljava/lang/String;"); locationInfoFieldID.AddressInfo_COUNTY = KNI_GetFieldID(class_obj, "AddressInfo_COUNTY", "Ljava/lang/String;"); locationInfoFieldID.AddressInfo_STATE = KNI_GetFieldID(class_obj, "AddressInfo_STATE", "Ljava/lang/String;"); locationInfoFieldID.AddressInfo_COUNTRY = KNI_GetFieldID(class_obj, "AddressInfo_COUNTRY", "Ljava/lang/String;"); locationInfoFieldID.AddressInfo_COUNTRY_CODE = KNI_GetFieldID(class_obj, "AddressInfo_COUNTRY_CODE", "Ljava/lang/String;"); locationInfoFieldID.AddressInfo_DISTRICT = KNI_GetFieldID(class_obj, "AddressInfo_DISTRICT", "Ljava/lang/String;"); locationInfoFieldID.AddressInfo_BUILDING_NAME = KNI_GetFieldID(class_obj, "AddressInfo_BUILDING_NAME", "Ljava/lang/String;"); locationInfoFieldID.AddressInfo_BUILDING_FLOOR = KNI_GetFieldID(class_obj, "AddressInfo_BUILDING_FLOOR", "Ljava/lang/String;"); locationInfoFieldID.AddressInfo_BUILDING_ROOM = KNI_GetFieldID(class_obj, "AddressInfo_BUILDING_ROOM", "Ljava/lang/String;"); locationInfoFieldID.AddressInfo_BUILDING_ZONE = KNI_GetFieldID(class_obj, "AddressInfo_BUILDING_ZONE", "Ljava/lang/String;"); locationInfoFieldID.AddressInfo_CROSSING1 = KNI_GetFieldID(class_obj, "AddressInfo_CROSSING1", "Ljava/lang/String;"); locationInfoFieldID.AddressInfo_CROSSING2 = KNI_GetFieldID(class_obj, "AddressInfo_CROSSING2", "Ljava/lang/String;"); locationInfoFieldID.AddressInfo_URL = KNI_GetFieldID(class_obj, "AddressInfo_URL", "Ljava/lang/String;"); locationInfoFieldID.AddressInfo_PHONE_NUMBER = KNI_GetFieldID(class_obj, "AddressInfo_PHONE_NUMBER", "Ljava/lang/String;"); locationInfoFieldID.extraInfoNMEA = KNI_GetFieldID(class_obj, "extraInfoNMEA", "Ljava/lang/String;"); locationInfoFieldID.extraInfoLIF = KNI_GetFieldID(class_obj, "extraInfoLIF", "Ljava/lang/String;"); locationInfoFieldID.extraInfoPlain = KNI_GetFieldID(class_obj, "extraInfoPlain", "Ljava/lang/String;"); locationInfoFieldID.extraInfoOther = KNI_GetFieldID(class_obj, "extraInfoOther", "Ljava/lang/String;"); locationInfoFieldID.extraInfoOtherMIMEType = KNI_GetFieldID(class_obj, "extraInfoOtherMIMEType", "Ljava/lang/String;"); } else { KNI_ThrowNew(midpNullPointerException, NULL); } KNI_EndHandles(); KNI_ReturnVoid(); }
/* JAVADOC COMMENT ELIDED */ KNIEXPORT KNI_RETURNTYPE_VOID Java_com_sun_j2me_location_LocationProviderInfo_initNativeClass() { KNI_StartHandles(1); KNI_DeclareHandle(class_obj); KNI_GetClassPointer(class_obj); if(!KNI_IsNullHandle(class_obj)) { locationProviderInfoFieldID.incurCost = KNI_GetFieldID(class_obj,"incurCost","Z"); locationProviderInfoFieldID.canReportAltitude = KNI_GetFieldID(class_obj,"canReportAltitude","Z"); locationProviderInfoFieldID.canReportAddressInfo = KNI_GetFieldID(class_obj,"canReportAddressInfo","Z"); locationProviderInfoFieldID.canReportSpeedCource = KNI_GetFieldID(class_obj,"canReportSpeedCource","Z"); locationProviderInfoFieldID.powerConsumption = KNI_GetFieldID(class_obj,"powerConsumption","I"); locationProviderInfoFieldID.horizontalAccuracy = KNI_GetFieldID(class_obj,"horizontalAccuracy","I"); locationProviderInfoFieldID.verticalAccuracy = KNI_GetFieldID(class_obj,"verticalAccuracy","I"); locationProviderInfoFieldID.defaultTimeout = KNI_GetFieldID(class_obj,"defaultTimeout","I"); locationProviderInfoFieldID.defaultMaxAge = KNI_GetFieldID(class_obj,"defaultMaxAge","I"); locationProviderInfoFieldID.defaultInterval = KNI_GetFieldID(class_obj,"defaultInterval","I"); locationProviderInfoFieldID.averageResponseTime = KNI_GetFieldID(class_obj,"averageResponseTime","I"); locationProviderInfoFieldID.defaultStateInterval = KNI_GetFieldID(class_obj,"defaultStateInterval","I"); } else { KNI_ThrowNew(midpNullPointerException, NULL); } KNI_EndHandles(); KNI_ReturnVoid(); }
/** * Sends an SMS message. * * @param handle The handle to the open SMS connection. * @param messageType The type of message: binary or text. * @param address The SMS-formatted address. * @param destPort The port number of the recipient. * @param sourcePort The port number of the sender. * @param messageBuffer The buffer containing the SMS message. * * @return Always returns <code>0</code>. */ KNIEXPORT KNI_RETURNTYPE_INT KNIDECL(com_sun_midp_io_j2me_sms_Protocol_send0) { WMA_STATUS status = WMA_ERR; jint messageLength = 0; jint messageType; jint sourcePort; jint destPort; jint handle; jint msAddress_len; jchar* msAddress_data; int i; unsigned char *pAddress = NULL; unsigned char *pMessageBuffer = NULL; jboolean stillWaiting = KNI_FALSE; jboolean trySend = KNI_FALSE; void *pdContext = NULL; #if ENABLE_REENTRY MidpReentryData *info; jsr120_sms_message_state_data *messageStateData = NULL; #endif jboolean isOpen; KNI_StartHandles(4); KNI_DeclareHandle(this); KNI_DeclareHandle(thisClass); KNI_GetThisPointer(this); KNI_GetObjectClass(this, thisClass); isOpen = KNI_GetBooleanField(this, KNI_GetFieldID(thisClass, "open", "Z")); if (isOpen) { /* No close in progress */ KNI_DeclareHandle(messageBuffer); KNI_DeclareHandle(address); handle = KNI_GetParameterAsInt(1); messageType = KNI_GetParameterAsInt(2); KNI_GetParameterAsObject(3, address); destPort = KNI_GetParameterAsInt(4); sourcePort = KNI_GetParameterAsInt(5); KNI_GetParameterAsObject(6, messageBuffer); do { #if ENABLE_REENTRY info = (MidpReentryData*)SNI_GetReentryData(NULL); if (info == NULL) { /* First invocation. */ #endif if (KNI_IsNullHandle(address)) { KNI_ThrowNew(midpIllegalArgumentException, NULL); break; } else { msAddress_len = KNI_GetStringLength(address); msAddress_data = (jchar *)pcsl_mem_malloc(msAddress_len * sizeof (jchar)); if (msAddress_data == NULL) { KNI_ThrowNew(midpOutOfMemoryError, NULL); break; } else { KNI_GetStringRegion(address, 0, msAddress_len, msAddress_data); pAddress = (unsigned char*)pcsl_mem_malloc(msAddress_len + 1); if (pAddress != NULL) { for (i = 0; i < msAddress_len; i++) { pAddress[i] = (unsigned char)msAddress_data[i]; } pAddress[msAddress_len] = 0; } //pAddress = (unsigned char *)midpJcharsToChars(msAddress); pcsl_mem_free(msAddress_data); if (!KNI_IsNullHandle(messageBuffer)) { messageLength = KNI_GetArrayLength(messageBuffer); } if (messageLength >= 0) { if (messageLength > 0) { pMessageBuffer = (unsigned char *)pcsl_mem_malloc(messageLength); memset(pMessageBuffer, 0, messageLength); KNI_GetRawArrayRegion(messageBuffer, 0, messageLength, (jbyte *)pMessageBuffer); } trySend = KNI_TRUE; } } } #if ENABLE_REENTRY } else { /* Reinvocation after unblocking the thread. */ if (info->pResult == NULL) { /* waiting for mms_send_completed event */ if (info->status == WMA_ERR) { KNI_ThrowNew(midpInterruptedIOException, "Sending SMS"); } break; } messageStateData = info->pResult; pMessageBuffer = messageStateData->pMessageBuffer; pAddress = messageStateData->pAddress; pdContext = messageStateData->pdContext; trySend = KNI_TRUE; } #endif if (trySend == KNI_TRUE) { /* send message. */ status = jsr120_send_sms((jchar)messageType, pAddress, pMessageBuffer, (jchar)messageLength, (jchar)sourcePort, (jchar)destPort, handle, &pdContext); if (status == WMA_ERR) { KNI_ThrowNew(midpIOException, "Sending SMS"); break; } #if ENABLE_REENTRY else if (status == WMA_NET_WOULDBLOCK) { if (messageStateData == NULL) { messageStateData = (jsr120_sms_message_state_data *)pcsl_mem_malloc( sizeof(*messageStateData)); messageStateData->pMessageBuffer = pMessageBuffer; messageStateData->pAddress = pAddress; } messageStateData->pdContext = pdContext; /* Block calling Java Thread. */ midp_thread_wait(WMA_SMS_WRITE_SIGNAL, handle, messageStateData); stillWaiting = KNI_TRUE; break; } else { /* waiting for sms_send_completed event */ midp_thread_wait(WMA_SMS_WRITE_SIGNAL, handle, NULL); } #endif } } while (0); if (!stillWaiting) { pcsl_mem_free(pMessageBuffer); pcsl_mem_free(pAddress); } } KNI_EndHandles(); KNI_ReturnInt(0); /* currently ignored. */ }
/** * Retrieves fields IDs for classes: * <BR> <code>com.sun.midp.content.ContentHandlerImpl</code> and * <BR> <code>javax.microedition.content.ActionNameMap</code> * @return KNI_OK - if successfully get all fields, KNI_ERR - otherwise */ static int initializeFields() { static const char* STRING_TYPE = "Ljava/lang/String;"; static const char* S_ARRAY_TYPE = "[Ljava/lang/String;"; static const char* ANM_ARRAY_TYPE = "[Ljavax/microedition/content/ActionNameMap;"; static const char* ANM_CLASS_NAME = "javax/microedition/content/ActionNameMap"; int ret; // returned result code KNI_StartHandles(1); KNI_DeclareHandle(clObj); // clazz object do { // 1. initialize ContentHandlerImpl fields KNI_FindClass("com/sun/midp/content/ContentHandlerImpl", clObj); chImplId = KNI_GetFieldID(clObj, "ID", STRING_TYPE); chImplSuiteId = KNI_GetFieldID(clObj, "storageId", "I"); chImplClassname = KNI_GetFieldID(clObj, "classname", STRING_TYPE); chImplregMethod = KNI_GetFieldID(clObj, "registrationMethod", "I"); chImplTypes = KNI_GetFieldID(clObj, "types", S_ARRAY_TYPE); chImplSuffixes = KNI_GetFieldID(clObj, "suffixes", S_ARRAY_TYPE); chImplActions = KNI_GetFieldID(clObj, "actions", S_ARRAY_TYPE); chImplActionnames = KNI_GetFieldID(clObj, "actionnames", ANM_ARRAY_TYPE); chImplAccesses = KNI_GetFieldID(clObj, "accessRestricted", S_ARRAY_TYPE); if (chImplId == 0 || chImplSuiteId == 0 || chImplClassname == 0 || chImplregMethod == 0 || chImplTypes == 0 || chImplSuffixes == 0 || chImplActions == 0 || chImplActionnames == 0 || chImplAccesses == 0) { #if REPORT_LEVEL <= LOG_CRITICAL REPORT_CRIT(LC_NONE, "regstore.c: can't initialize ContentHandlerImpl fields!"); #endif ret = KNI_ERR; break; } // 2. initialize ActionName fields KNI_FindClass(ANM_CLASS_NAME, clObj); // clObj = ActionNameMap class if (KNI_IsNullHandle(clObj)) { #if REPORT_LEVEL <= LOG_CRITICAL REPORT_CRIT(LC_NONE, "regstore.c: can't find ActionNameMap class!"); #endif ret = KNI_ERR; break; } anMapLocale = KNI_GetFieldID(clObj, "locale", STRING_TYPE); anMapActionnames = KNI_GetFieldID(clObj, "actionnames", S_ARRAY_TYPE); if (anMapLocale == 0 || anMapActionnames == 0) { #if REPORT_LEVEL <= LOG_CRITICAL REPORT_CRIT(LC_NONE, "regstore.c: can't initialize ActionNameMap fields!"); #endif ret = KNI_ERR; break; } ret = KNI_OK; // that's all right. } while (0); KNI_EndHandles(); return ret; }
/* JAVADOC COMMENT ELIDED */ KNIEXPORT KNI_RETURNTYPE_VOID KNIDECL(com_sun_j2me_location_LandmarkImpl_initNativeClass) { KNI_StartHandles(1); KNI_DeclareHandle(class_obj); KNI_GetClassPointer(class_obj); if(!KNI_IsNullHandle(class_obj)) { landmarkImplFieldID.name = KNI_GetFieldID(class_obj, "name", "Ljava/lang/String;"); landmarkImplFieldID.description = KNI_GetFieldID(class_obj, "description", "Ljava/lang/String;"); landmarkImplFieldID.isCoordinates = KNI_GetFieldID(class_obj, "isCoordinates", "Z"); landmarkImplFieldID.latitude = KNI_GetFieldID(class_obj, "latitude", "D"); landmarkImplFieldID.longitude = KNI_GetFieldID(class_obj, "longitude", "D"); landmarkImplFieldID.altitude = KNI_GetFieldID(class_obj, "altitude", "F"); landmarkImplFieldID.horizontalAccuracy = KNI_GetFieldID(class_obj, "horizontalAccuracy", "F"); landmarkImplFieldID.verticalAccuracy = KNI_GetFieldID(class_obj, "verticalAccuracy", "F"); landmarkImplFieldID.isAddressInfo = KNI_GetFieldID(class_obj, "isAddressInfo", "Z"); landmarkImplFieldID.numAddressInfoFields = KNI_GetFieldID(class_obj, "numAddressInfoFields", "I"); landmarkImplFieldID.AddressInfo_EXTENSION = KNI_GetFieldID(class_obj, "AddressInfo_EXTENSION", "Ljava/lang/String;"); landmarkImplFieldID.AddressInfo_STREET = KNI_GetFieldID(class_obj, "AddressInfo_STREET", "Ljava/lang/String;"); landmarkImplFieldID.AddressInfo_POSTAL_CODE = KNI_GetFieldID(class_obj, "AddressInfo_POSTAL_CODE", "Ljava/lang/String;"); landmarkImplFieldID.AddressInfo_CITY = KNI_GetFieldID(class_obj, "AddressInfo_CITY", "Ljava/lang/String;"); landmarkImplFieldID.AddressInfo_COUNTY = KNI_GetFieldID(class_obj, "AddressInfo_COUNTY", "Ljava/lang/String;"); landmarkImplFieldID.AddressInfo_STATE = KNI_GetFieldID(class_obj, "AddressInfo_STATE", "Ljava/lang/String;"); landmarkImplFieldID.AddressInfo_COUNTRY = KNI_GetFieldID(class_obj, "AddressInfo_COUNTRY", "Ljava/lang/String;"); landmarkImplFieldID.AddressInfo_COUNTRY_CODE = KNI_GetFieldID(class_obj, "AddressInfo_COUNTRY_CODE", "Ljava/lang/String;"); landmarkImplFieldID.AddressInfo_DISTRICT = KNI_GetFieldID(class_obj, "AddressInfo_DISTRICT", "Ljava/lang/String;"); landmarkImplFieldID.AddressInfo_BUILDING_NAME = KNI_GetFieldID(class_obj, "AddressInfo_BUILDING_NAME", "Ljava/lang/String;"); landmarkImplFieldID.AddressInfo_BUILDING_FLOOR = KNI_GetFieldID(class_obj, "AddressInfo_BUILDING_FLOOR", "Ljava/lang/String;"); landmarkImplFieldID.AddressInfo_BUILDING_ROOM = KNI_GetFieldID(class_obj, "AddressInfo_BUILDING_ROOM", "Ljava/lang/String;"); landmarkImplFieldID.AddressInfo_BUILDING_ZONE = KNI_GetFieldID(class_obj, "AddressInfo_BUILDING_ZONE", "Ljava/lang/String;"); landmarkImplFieldID.AddressInfo_CROSSING1 = KNI_GetFieldID(class_obj, "AddressInfo_CROSSING1", "Ljava/lang/String;"); landmarkImplFieldID.AddressInfo_CROSSING2 = KNI_GetFieldID(class_obj, "AddressInfo_CROSSING2", "Ljava/lang/String;"); landmarkImplFieldID.AddressInfo_URL = KNI_GetFieldID(class_obj, "AddressInfo_URL", "Ljava/lang/String;"); landmarkImplFieldID.AddressInfo_PHONE_NUMBER = KNI_GetFieldID(class_obj, "AddressInfo_PHONE_NUMBER", "Ljava/lang/String;"); } else { KNI_ThrowNew(jsropNullPointerException, NULL); } KNI_EndHandles(); KNI_ReturnVoid(); }