Esempio n. 1
0
static const XP_UCHAR*
and_util_getDevID( XW_UtilCtxt* uc, DevIDType* typ )
{
    const XP_UCHAR* result = NULL;
    *typ = ID_TYPE_NONE;
    UTIL_CBK_HEADER( "getDevID", "([B)Ljava/lang/String;" );
    jbyteArray jbarr = makeByteArray( env, 1, NULL );
    jstring jresult = (*env)->CallObjectMethod( env, util->jutil, mid, jbarr );
    if ( NULL != jresult ) {
        const char* jchars = (*env)->GetStringUTFChars( env, jresult, NULL );
        jsize len = (*env)->GetStringUTFLength( env, jresult );
        if ( NULL != util->devIDStorage
             && 0 == XP_MEMCMP( util->devIDStorage, jchars, len ) ) {
            XP_LOGF( "%s: already have matching devID", __func__ );
        } else {
            XP_LOGF( "%s: allocating storage for devID", __func__ );
            XP_FREEP( util->util.mpool, &util->devIDStorage );
            util->devIDStorage = XP_MALLOC( util->util.mpool, len + 1 );
            XP_MEMCPY( util->devIDStorage, jchars, len );
            util->devIDStorage[len] = '\0';
        }
        (*env)->ReleaseStringUTFChars( env, jresult, jchars );
        result = (const XP_UCHAR*)util->devIDStorage;

        jbyte* elems = (*env)->GetByteArrayElements( env, jbarr, NULL );
        *typ = (DevIDType)elems[0];
        (*env)->ReleaseByteArrayElements( env, jbarr, elems, 0 );
    }
    deleteLocalRef( env, jbarr );
    UTIL_CBK_TAIL();
    return result;
}
Esempio n. 2
0
jstring
and_util_getMD5SumFor( JNIUtilCtxt* jniutil, const XP_UCHAR* name,
                       const XP_U8* bytes, jsize len )
{
    JNIEnv* env = *jniutil->envp;
    jmethodID mid = getMethodID( env, jniutil->jjniutil, "getMD5SumFor",
                                 "(Ljava/lang/String;[B)Ljava/lang/String;" );
    jstring jname = (*env)->NewStringUTF( env, name );
    jbyteArray jbytes = NULL == bytes? NULL
        : makeByteArray( env, len, (jbyte*)bytes );
    jstring result = 
        (*env)->CallObjectMethod( env, jniutil->jjniutil, mid, jname, jbytes );
    deleteLocalRefs( env, jname, jbytes, DELETE_NO_REF );
    return result;
}
Esempio n. 3
0
jobject
and_util_splitFaces( JNIUtilCtxt* jniutil, const XP_U8* bytes, jsize len,
                     XP_Bool isUTF8 )
{
    jobject strarray = NULL;
    JNIEnv* env = *jniutil->envp;
    jmethodID mid
        = getMethodID( env, jniutil->jjniutil, "splitFaces",
                       "([BZ)[[Ljava/lang/String;" );

    jbyteArray jbytes = makeByteArray( env, len, (jbyte*)bytes );
    strarray = 
        (*env)->CallObjectMethod( env, jniutil->jjniutil, mid, jbytes, isUTF8 );
    deleteLocalRef( env, jbytes );

    return strarray;
}
Esempio n. 4
0
	int serverTryAgain()
	{
		if(step == 0) {
			if(!ca_skip) {
				const char *clientin = 0;
				unsigned int clientinlen = 0;
				if(in_useClientInit) {
					clientin = in_clientInit.data();
					clientinlen = in_clientInit.size();
				}
				const char *serverout;
				unsigned int serveroutlen;
				ca_flag = false;
				int r = sasl_server_start(con, in_mech.toLatin1().data(), clientin, clientinlen, &serverout, &serveroutlen);
				if(r != SASL_OK && r != SASL_CONTINUE) {
					err = saslErrorCond(r);
					return Error;
				}
				out_buf = makeByteArray(serverout, serveroutlen);
				last_r = r;
				if(ca_flag && !ca_done) {
					ca_done = true;
					ca_skip = true;
					return AuthCheck;
				}
			}
			ca_skip = false;
			++step;

			if(last_r == SASL_OK) {
				getssfparams();
				return Success;
			}
			return Continue;
		}
		else {
			if(!ca_skip) {
				const char *serverout;
				unsigned int serveroutlen;
				int r = sasl_server_step(con, in_buf.data(), in_buf.size(), &serverout, &serveroutlen);
				if(r != SASL_OK && r != SASL_CONTINUE) {
					err = saslErrorCond(r);
					return Error;
				}
				if(r == SASL_OK)
					out_buf.resize(0);
				else
					out_buf = makeByteArray(serverout, serveroutlen);
				last_r = r;
				if(ca_flag && !ca_done) {
					ca_done = true;
					ca_skip = true;
					return AuthCheck;
				}
			}
			ca_skip = false;
			if(last_r == SASL_OK) {
				getssfparams();
				return Success;
			}
			return Continue;
		}
	}
Esempio n. 5
0
	int clientTryAgain()
	{
		if(step == 0) {
			const char *clientout, *m;
			unsigned int clientoutlen;

			need = 0;
			QString list = methodsToString(mechlist);
			int r;
			while(1) {
				if(need)
					params.extractHave(need);
				if(in_sendFirst)
					r = sasl_client_start(con, list.toLatin1().data(), &need, &clientout, &clientoutlen, &m);
				else
					r = sasl_client_start(con, list.toLatin1().data(), &need, NULL, NULL, &m);
				if(r != SASL_INTERACT)
					break;

				params.applyInteract(need);
				if(params.missingAny())
					return NeedParams;
			}
			if(r != SASL_OK && r != SASL_CONTINUE) {
				err = saslErrorCond(r);
				return Error;
			}

			out_mech = m;
			if(in_sendFirst && clientout) {
				out_clientInit = makeByteArray(clientout, clientoutlen);
				out_useClientInit = true;
			}
			else
				out_useClientInit = false;

			++step;

			if(r == SASL_OK) {
				getssfparams();
				return Success;
			}
			return Continue;
		}
		else {
			const char *clientout;
			unsigned int clientoutlen;
			int r;
			while(1) {
				if(need)
					params.extractHave(need);
				//QByteArray cs(in_buf.data(), in_buf.size());
				//printf("sasl_client_step(con, {%s}, %d, &need, &clientout, &clientoutlen);\n", cs.data(), in_buf.size());
				r = sasl_client_step(con, in_buf.data(), in_buf.size(), &need, &clientout, &clientoutlen);
				//printf("returned: %d\n", r);
				if(r != SASL_INTERACT)
					break;

				params.applyInteract(need);
				if(params.missingAny())
					return NeedParams;
			}
			if(r != SASL_OK && r != SASL_CONTINUE) {
				err = saslErrorCond(r);
				return Error;
			}
			out_buf = makeByteArray(clientout, clientoutlen);
			if(r == SASL_OK) {
				getssfparams();
				return Success;
			}
			return Continue;
		}
	}