示例#1
0
jni_topic
jni_lookupTopic(
    jni_participant p,
    const char* name)
{
    c_iter topics;
    jni_topic topic, temp;
    int found;
    
    topic = NULL;
    
    if((name != NULL) && (p != NULL)){
        topics = c_iterCopy(p->topics);
        found = 0;
        temp = jni_topic(c_iterTakeFirst(topics));
        
        while( (temp != NULL) && (!found)){
            
            if(strcmp(jni_topicDescription(temp)->name, name) == 0){
                topic = temp;
                found = 1;
            }
            temp = jni_topic(c_iterTakeFirst(topics));
        }
        c_iterFree(topics);
    }
    return topic;
}
示例#2
0
jni_topic
jni_topicNew(
    jni_participant p,
    const char* name,
    const char* typeName,
    const char* keyList,
    v_topicQos qos)
{
    jni_topic topic;
    
    assert(name);
    assert(typeName);
    
    if((p == NULL) || (p->uparticipant == NULL)){
        goto err_badParam;
    }

    if((topic = os_malloc(sizeof *topic)) == NULL){
        goto err_mallocTopic;
    }

    jni_topicDescription(topic)->participant = p;

    if((topic->utopic = u_topicNew(p->uparticipant, name, typeName, keyList, qos)) == NULL){
        goto err_u_topicNew;
    }

    if((jni_topicDescription(topic)->name = os_strdup(name)) == NULL){
        goto err_strdupName;
    }

    if((jni_topicDescription(topic)->typeName = os_strdup(typeName)) == NULL){
        goto err_strdupTypeName;
    }

    if(keyList){
        if((jni_topicDescription(topic)->keyList = os_strdup(keyList)) == NULL){
            goto err_strdupKeyList;
        }
    } else  {
        jni_topicDescription(topic)->keyList = NULL;
    }

    return topic;

/* Error handling */
err_strdupKeyList:
    os_free(jni_topicDescription(topic)->typeName);
err_strdupTypeName:
    os_free(jni_topicDescription(topic)->name);
err_strdupName:
    /* Ignore return value since we are already in an error condition. */
    (void) u_topicFree(topic->utopic);
err_u_topicNew:
    os_free(topic);
err_mallocTopic:
err_badParam:
    return NULL;
}    
示例#3
0
jni_result
jni_topicFree(
    jni_topic topic)
{
    jni_result r;
    
    if(topic != NULL){
        r = jni_convertResult(u_topicFree(topic->utopic));
        os_free(jni_topicDescription(topic)->name);
        os_free(jni_topicDescription(topic)->typeName);
        
        if(jni_topicDescription(topic)->keyList != NULL){
            os_free(jni_topicDescription(topic)->keyList);
        }
        os_free(topic);
    }
    else{
        r = JNI_RESULT_BAD_PARAMETER;
    }
    return r;
}
示例#4
0
jni_result
jni_deleteTopic(
    jni_participant p,
    jni_topic top)
{
    jni_result r;
    c_bool found;
        
    if((top == NULL) || (p == NULL)){
        r = JNI_RESULT_BAD_PARAMETER;
    }
    else if(p->topics == NULL){
        r = JNI_RESULT_PRECONDITION_NOT_MET;
    }
    else if( (jni_topicDescription(top)->participant) != p ){
        r = JNI_RESULT_PRECONDITION_NOT_MET;
    }
    else if(!(jni_participantMayTopicBeDeleted(p, jni_topicDescription(top)->name))){
        r = JNI_RESULT_PRECONDITION_NOT_MET;
    }
    else{
        found = c_iterContains(p->topics, top);
        
        if(!found){
            r = JNI_RESULT_PRECONDITION_NOT_MET;
        }
        else{
            r = jni_topicFree(top);
            
            if(r == JNI_RESULT_OK){
                c_iterTake(p->topics, top);
            }
        } 
    } 
    return r;
}