BOOL setFragmentAck()

in src/JNI/com/amazonaws/kinesis/video/producer/jni/Parameters.cpp [811:876]


BOOL setFragmentAck(JNIEnv* env, jobject fragmentAck, PFragmentAck pFragmentAck)
{
    STATUS retStatus = STATUS_SUCCESS;
    jmethodID methodId = NULL;
    CHECK(env != NULL && fragmentAck != NULL && pFragmentAck != NULL);

    // Load KinesisVideoFragmentAck
    jclass cls = env->GetObjectClass(fragmentAck);
    if (cls == NULL) {
        DLOGE("Failed to create KinesisVideoFragmentAck class.");
        CHK(FALSE, STATUS_INVALID_OPERATION);
    }

    // Retrieve the methods and call it
    methodId = env->GetMethodID(cls, "getVersion", "()I");
    if (methodId == NULL) {
        DLOGW("Couldn't find method id getVersion");
    } else {
        pFragmentAck->version = env->CallIntMethod(fragmentAck, methodId);
        CHK_JVM_EXCEPTION(env);
    }

    methodId = env->GetMethodID(cls, "getAckType", "()I");
    if (methodId == NULL) {
        DLOGW("Couldn't find method id getAckType");
    } else {
        pFragmentAck->ackType = (FRAGMENT_ACK_TYPE) env->CallIntMethod(fragmentAck, methodId);
        CHK_JVM_EXCEPTION(env);
    }

    methodId = env->GetMethodID(cls, "getTimestamp", "()J");
    if (methodId == NULL) {
        DLOGW("Couldn't find method id getTimestamp");
    } else {
        pFragmentAck->timestamp = env->CallLongMethod(fragmentAck, methodId);
        CHK_JVM_EXCEPTION(env);
    }

    methodId = env->GetMethodID(cls, "getSequenceNumber", "()Ljava/lang/String;");
    if (methodId == NULL) {
        DLOGW("Couldn't find method id getSequenceNumber");
    } else {
        jstring retString = (jstring) env->CallObjectMethod(fragmentAck, methodId);
        CHK_JVM_EXCEPTION(env);

        if (retString != NULL) {
            const char* retChars = env->GetStringUTFChars(retString, NULL);
            STRNCPY(pFragmentAck->sequenceNumber, retChars, MAX_FRAGMENT_SEQUENCE_NUMBER + 1);
            pFragmentAck->sequenceNumber[MAX_FRAGMENT_SEQUENCE_NUMBER] = '\0';
            env->ReleaseStringUTFChars(retString, retChars);
        } else {
            pFragmentAck->sequenceNumber[0] = '\0';
        }
    }

    methodId = env->GetMethodID(cls, "getResult", "()I");
    if (methodId == NULL) {
        DLOGW("Couldn't find method id getResult");
    } else {
        pFragmentAck->result = (SERVICE_CALL_RESULT) env->CallIntMethod(fragmentAck, methodId);
        CHK_JVM_EXCEPTION(env);
    }

CleanUp:
    return STATUS_FAILED(retStatus) ? FALSE : TRUE;
}