Example #1
0
saj_returnCode
saj_register_weak_java_object(
    JNIEnv *env,
    PA_ADDRCAST gapi_obj_address,
    jobject new_java_object)
{
    assert(gapi_obj_address);
    assert(new_java_object);

    /* write the adress of the gapi object to the java object */
    saj_write_gapi_address(env, new_java_object, gapi_obj_address);
    /* write the adress of the java object to the gapi object */
    saj_write_weak_java_address(env, (gapi_object)gapi_obj_address, new_java_object);

    return SAJ_RETCODE_OK;;
}
Example #2
0
saj_returnCode
saj_construct_java_object(
    JNIEnv *env,
    const char *classname,
    PA_ADDRCAST gapi_obj_address,
    jobject *new_java_object)
{
    saj_returnCode rc;

    /* construct a new java object */
    rc = saj_create_new_java_object(env, classname, new_java_object);

    if(rc == SAJ_RETCODE_OK){
        /* write the adress of the gapi object to the java object */
        saj_write_gapi_address(env, *new_java_object, gapi_obj_address);
        /* write the adress of the java object to the gapi object */
        saj_write_java_address(env, (gapi_object)gapi_obj_address, *new_java_object);
    }
    return rc;
}
Example #3
0
/*
 * Class:     org_opensplice_dds_dcps_FooTypeSupportImpl
 * Method:    jniAlloc
 * Signature: (Ljava/lang/Object;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I
 */
JNIEXPORT jint JNICALL
SAJ_FUNCTION(jniAlloc) (
    JNIEnv *env,
    jclass object,
    jobject TypeSupport,
    jstring type_name,
    jstring key_list,
    jarray type_descriptor)
{
    const char *typeName;
    const char *keyList;
    char *typeDescriptor;
    PA_ADDRCAST typeSupport;
    int statusOK = TRUE;
    jsize type_descriptor_length;

    OS_UNUSED_ARG(object);

    typeName = (*env)->GetStringUTFChars (env, type_name, 0);
    /* Convert key_list */
    keyList = (*env)->GetStringUTFChars (env, key_list, 0);

    /* Convert type_descriptor */
    type_descriptor_length = (*env)->GetArrayLength(env, type_descriptor);
    typeDescriptor = os_malloc(type_descriptor_length * IDL_MAX_JSTRING_META_SIZE + 1);

    if (typeDescriptor) {
        jsize i;
        typeDescriptor[0] = '\0';
        for (i = 0; i < type_descriptor_length && statusOK; i++) {
            jstring type_descriptor_frame = (jstring) (*env)->GetObjectArrayElement(env, type_descriptor, i);
            if (type_descriptor_frame) {
                const char *typeDescriptorFrame = (*env)->GetStringUTFChars (env, type_descriptor_frame, 0);
                if (typeDescriptorFrame) {
                    os_strcat(typeDescriptor, typeDescriptorFrame);
                    (*env)->ReleaseStringUTFChars (env, type_descriptor_frame, typeDescriptorFrame);
                } else {
                    statusOK = FALSE;
                }
            } else {
                statusOK = FALSE;
            }
        }
    }

    if (typeName != NULL && keyList != NULL && typeDescriptor != NULL && statusOK) {
        typeSupport = (PA_ADDRCAST)gapi_fooTypeSupport__alloc (
            typeName,
            keyList,
            typeDescriptor,
            NULL, /* type_load */
            saj_copyInStruct, /* copyIn: copy in Java types */
            saj_copyOutStruct, /* copyOut: copy out Java types */
            0,    /* alloc_size */
            NULL, /* alloc buffer */
            NULL, /* writer copy */
            saj_dataReaderCopy /* reader copy */
            );
        if (typeSupport) {
            saj_write_gapi_address (env, TypeSupport, typeSupport);
            saj_write_java_address (env, (gapi_object)typeSupport, TypeSupport);
        } else {
            return SAJ_RETCODE_ERROR;
        }
    }

    /* Release used strings */
    if (type_name) {
        (*env)->ReleaseStringUTFChars (env, type_name, typeName);
    }
    if (key_list) {
        (*env)->ReleaseStringUTFChars (env, key_list, keyList);
    }
    if (typeDescriptor) {
        os_free(typeDescriptor);
    }

    return SAJ_RETCODE_OK;
}
Example #4
0
/*
 * Class:     DDS_QosProvider
 * Method:    jniQosProviderNew
 * Signature: (Ljava/lang/String;Ljava/lang/String;)Z
 */
JNIEXPORT jboolean JNICALL
SAJ_FUNCTION(jniQosProviderNew)(
        JNIEnv *env,
        jobject jqosProvider,
        jstring juri,
        jstring jprofile)
{
    saj_qosProvider _this;
    qp_qosProvider qp;
    const char *strUri;
    const char *strProfile;
    C_STRUCT(qp_qosProviderInputAttr) qpAttr;

    strUri = juri ? (*env)->GetStringUTFChars (env, juri, NULL) : NULL;
    jniQosProviderCheckError(env, err_strUri);

    strProfile = jprofile ? (*env)->GetStringUTFChars (env, jprofile, NULL) : NULL;
    jniQosProviderCheckError(env, err_strProfile);

    qpAttr.participantQos.copyOut = saj_copyOutStruct;
    qpAttr.topicQos.copyOut = saj_copyOutStruct;
    qpAttr.subscriberQos.copyOut = saj_copyOutStruct;
    qpAttr.dataReaderQos.copyOut = saj_copyOutStruct;
    qpAttr.publisherQos.copyOut = saj_copyOutStruct;
    qpAttr.dataWriterQos.copyOut = saj_copyOutStruct;

    if((qp = qp_qosProviderNew(strUri, strProfile, &qpAttr)) == NULL){
        /* Error reported by qp_qosProviderNew(...) */
        goto err_qosProviderNew;
    }

    if((_this = saj_qosProviderNew(env, qp)) == NULL){
        goto err_sajQosProviderNew;
    }

    saj_write_gapi_address(env, jqosProvider, (PA_ADDRCAST)_this);

    if(strProfile){
        (*env)->ReleaseStringUTFChars (env, jprofile, strProfile);
    }

    if(strUri){
        (*env)->ReleaseStringUTFChars (env, juri, strUri);
    }

    return JNI_TRUE;

/* Error handling */
err_sajQosProviderNew:
    qp_qosProviderFree(qp);
err_qosProviderNew:
    if(strProfile){
        (*env)->ReleaseStringUTFChars (env, jprofile, strProfile);
    }
err_strProfile:
    if(strUri){
        (*env)->ReleaseStringUTFChars (env, juri, strUri);
    }
err_strUri:
    return JNI_FALSE;
}