⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pi3servletutils.cpp

📁 mini http server,可以集成嵌入到程序中,实现简单的web功能
💻 CPP
📖 第 1 页 / 共 2 页
字号:
 * Method:    getHttpDate
 * Signature: (Ljava/lang/String;)J
 */
JNIEXPORT jlong JNICALL Java_org_pi3_servlet_util_Pi3ServletUtils_getHttpDate__Ljava_lang_String_2
(JNIEnv *env, jobject sutils, jstring date) {

	jboolean isCopy;
	const char *szDate = env->GetStringUTFChars(date, &isCopy);
	struct tm pT;
	if (HTTPUtil_readTime( szDate, &pT ) == PIAPI_COMPLETED) {
		return mktime(&pT);
	};
	return -1;
};

/*
 * Class:     org_pi3_servlet_util_Pi3ServletUtils
 * Method:    getResponseVariable
 * Signature: (Ljava/lang/String;)Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_org_pi3_servlet_util_Pi3ServletUtils_getResponseVariable
(JNIEnv *env, jobject sutils, jstring name) {

	jclass cls = env->GetObjectClass(sutils);
	jmethodID getServletHandler;
	getServletHandler = env->GetMethodID( cls, "getServletHandler", "()I");
	// Errorhandling!
	if (!getServletHandler) { return env->NewStringUTF(""); };
	env->ExceptionClear();

	int SHandler = env->CallIntMethod(sutils, getServletHandler);
	if ( env->ExceptionOccurred() )
		{
		env->ExceptionDescribe();
		env->ExceptionClear();
		// Errorhandling!
		return env->NewStringUTF("");
		};

	jmethodID getPiHttp;
	getPiHttp = env->GetMethodID( cls, "getPiHttp", "()I");
	// Errorhandling!
	if (!getPiHttp) { return env->NewStringUTF(""); };
	env->ExceptionClear();

	int PiHttp = env->CallIntMethod(sutils, getPiHttp);
	if ( env->ExceptionOccurred() )
		{
		env->ExceptionDescribe();
		env->ExceptionClear();
		// Errorhandling!
		return env->NewStringUTF("");
		};

	jboolean isCopy;
	const char *pName = env->GetStringUTFChars(name, &isCopy);
	Servlet *sh = (Servlet *)SHandler;

	const char *pValue = sh->GetResponseVariable((PIHTTP *)PiHttp, (char *)pName);
	env->ReleaseStringUTFChars(name, pName);
	return pValue ? env->NewStringUTF( pValue ) : NULL;
};

/*
 * Class:     org_pi3_servlet_util_Pi3ServletUtils
 * Method:    getRequestVariable
 * Signature: (Ljava/lang/String;)Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_org_pi3_servlet_util_Pi3ServletUtils_getRequestVariable
(JNIEnv *env, jobject sutils, jstring name) {

	jclass cls = env->GetObjectClass(sutils);
	jmethodID getServletHandler;
	getServletHandler = env->GetMethodID( cls, "getServletHandler", "()I");
	// Errorhandling!
	if (!getServletHandler) { return env->NewStringUTF(""); };
	env->ExceptionClear();

	int SHandler = env->CallIntMethod(sutils, getServletHandler);
	if ( env->ExceptionOccurred() )
		{
		env->ExceptionDescribe();
		env->ExceptionClear();
		// Errorhandling!
		return env->NewStringUTF("");
		};

	jmethodID getPiHttp;
	getPiHttp = env->GetMethodID( cls, "getPiHttp", "()I");
	// Errorhandling!
	if (!getPiHttp) { return env->NewStringUTF(""); };
	env->ExceptionClear();

	int PiHttp = env->CallIntMethod(sutils, getPiHttp);
	if ( env->ExceptionOccurred() )
		{
		env->ExceptionDescribe();
		env->ExceptionClear();
		// Errorhandling!
		return env->NewStringUTF("");
		};

	jboolean isCopy;
	const char *pName = env->GetStringUTFChars(name, &isCopy);
	Servlet *sh = (Servlet *)SHandler;

	const char *pValue = sh->GetRequestVariable((PIHTTP *)PiHttp, (char *)pName);
	env->ReleaseStringUTFChars(name, pName);
	return pValue ? env->NewStringUTF( pValue ) : NULL;
};


/*
 * Class:     org_pi3_servlet_util_Pi3ServletUtils
 * Method:    getRequestVariables
 * Signature: (Ljava/util/Hashtable;)V
 */
JNIEXPORT void JNICALL Java_org_pi3_servlet_util_Pi3ServletUtils_getRequestVariables
(JNIEnv *env, jobject sutils, jobject hreq) {

	jclass cls = env->GetObjectClass(sutils);
	jmethodID getPiHttp;
	getPiHttp = env->GetMethodID( cls, "getPiHttp", "()I");
	// Errorhandling!
	if (!getPiHttp) { return; };
	env->ExceptionClear();

	int PiHttp = env->CallIntMethod(sutils, getPiHttp);
	if ( env->ExceptionOccurred() )
		{
		env->ExceptionDescribe();
		env->ExceptionClear();
		// Errorhandling!
		return;
		};

	cls = env->GetObjectClass(hreq);
	jmethodID putMID;
	putMID = env->GetMethodID( cls, "put",
		"(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;");
	// Errorhandling!
	if (!putMID) { return; };
	env->ExceptionClear();

	/* ---
	iterate through the request DB	
	--- */
	PIHTTP *pPIHTTP = (PIHTTP *)PiHttp;
	const char *pKey;
	const char *pValue;
	PIDBIterator *pIter = PIDB_getIterator( pPIHTTP->pRequestDB,
		PIDBTYPE_RFC822, 0, 0 );
	if ( pIter ) {
		for( ; PIDBIterator_atValidElement( pIter ); PIDBIterator_next( pIter ) ) {

			pValue = (const char *)PIDBIterator_current( pIter, &pKey );
			
			env->CallObjectMethod(hreq, putMID, env->NewStringUTF( pKey ),
				env->NewStringUTF( pValue ));
			if ( env->ExceptionOccurred() )
				{
				env->ExceptionDescribe();
				env->ExceptionClear();
				// Errorhandling!
				PIDBIterator_delete( pIter );
				return;
				};
		};
		PIDBIterator_delete( pIter );
	};
};

/*
 * Class:     org_pi3_servlet_util_Pi3ServletUtils
 * Method:    sendError
 * Signature: (I)V
 */
JNIEXPORT jint JNICALL Java_org_pi3_servlet_util_Pi3ServletUtils_sendError
(JNIEnv *env, jobject sutils, jint sc) {

	jclass cls = env->GetObjectClass(sutils);
	jmethodID getPiHttp;
	getPiHttp = env->GetMethodID( cls, "getPiHttp", "()I");
	// Errorhandling!
	if (!getPiHttp) { return PIAPI_ERROR; };
	env->ExceptionClear();

	int PiHttp = env->CallIntMethod(sutils, getPiHttp);
	if ( env->ExceptionOccurred() )
		{
		env->ExceptionDescribe();
		env->ExceptionClear();
		// Errorhandling!
		return PIAPI_ERROR;
		};
	PIHTTP *pPIHTTP = (PIHTTP *)PiHttp;
	char *szBuf;
	PIIOBuffer_getOutputBuffer( pPIHTTP->pBuffer, &szBuf );
	PIIOBuffer_advanceBufferPointer( pPIHTTP->pBuffer, 0);

	// returns INT_REDIRECT
	return HTTPUtil_doHTTPError(pPIHTTP, sc);
};


/*
 * Class:     org_pi3_servlet_util_Pi3ServletUtils
 * Method:    setResponseVariable
 * Signature: (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
 */
JNIEXPORT void JNICALL Java_org_pi3_servlet_util_Pi3ServletUtils_setResponseVariable
(JNIEnv *env, jobject sutils, jstring name, jstring value) {

	jclass cls = env->GetObjectClass(sutils);
	jmethodID getPiHttp;
	getPiHttp = env->GetMethodID( cls, "getPiHttp", "()I");
	// Errorhandling!
	if (!getPiHttp) { return; };
	env->ExceptionClear();

	int PiHttp = env->CallIntMethod(sutils, getPiHttp);
	if ( env->ExceptionOccurred() )
		{
		env->ExceptionDescribe();
		env->ExceptionClear();
		// Errorhandling!
		return;
		};

	jboolean isCopy;
	const char *pName = env->GetStringUTFChars(name, &isCopy);
	const char *pValue = env->GetStringUTFChars(value, &isCopy);
	PIHTTP *pPIHTTP = (PIHTTP *)PiHttp;

	PIDB_replace( pPIHTTP->pResponseDB, PIDBTYPE_RFC822, pName, (void *)pValue, 0 );
	env->ReleaseStringUTFChars(name, pName);
	env->ReleaseStringUTFChars(value, pValue);
};

JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) { return JNI_VERSION_1_2; };

JNIEXPORT void JNICALL JNI_OnUnload(JavaVM *vm, void *reserved) {}; 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -