diff --git a/src/Makefile b/src/Makefile index 27c6c5b..c250520 100644 --- a/src/Makefile +++ b/src/Makefile @@ -46,7 +46,7 @@ $(LIBRARY): org_pEp_jniadapter_AbstractEngine.o org_pEp_jniadapter_Engine.o org_ ar -r $@ *.o $(SHARED): $(LIBRARY) - g++ -shared -o $(SHARED) $(LDFLAGS) -lpEpEngine *.o + c++ -shared -o $(SHARED) $(LDFLAGS) -lpEpEngine *.o org/pEp/jniadapter/pEpException.java: pEp.yml2 gen_java_exceptions.ysl2 yml2proc -y gen_java_exceptions.ysl2 $< -o $@ @@ -73,7 +73,7 @@ basic_api.o: basic_api.cc jniutils.hh throw_pEp_exception.hh .PHONY: clean clean: - rm -f $(JAR) $(LIBRARY) + rm -f $(JAR) $(LIBRARY) $(SHARED) rm -f *.o rm -f *.class rm -f *.xml *.xsl diff --git a/src/gen_cpp_Message.ysl2 b/src/gen_cpp_Message.ysl2 index 645adf0..ec996c6 100644 --- a/src/gen_cpp_Message.ysl2 +++ b/src/gen_cpp_Message.ysl2 @@ -9,64 +9,84 @@ tstylesheet { template "struct" { const "jname" call "CamelCase" with "text", "@name"; - document("org_pEp_jniadapter_{$jname}.cc", "text") - || - #include - #include - #include - #include - #include - #include - - #include "jniutils.hh" - #include "org_pEp_jniadapter_«$jname».h" - - using namespace std; - - namespace pEp { - namespace JNIAdapter { - static ::«@name» *«@name»_ptr(JNIEnv *env, jobject me) { - jfieldID handle; - - try { - handle = getFieldID(env, "org/pEp/jniadapter/«$jname»", "handle", "J"); - } - catch (std::exception& ex) { - assert(0); - return NULL; + document("org_pEp_jniadapter_{$jname}.cc", "text") { + || + #include + #include + #include + #include + #include + #include + + #include "jniutils.hh" + #include "org_pEp_jniadapter_«$jname».h" + + using namespace std; + + namespace pEp { + namespace JNIAdapter { + static ::«@name» *«@name»_ptr(JNIEnv *env, jobject me) { + jfieldID handle; + + try { + handle = getFieldID(env, "org/pEp/jniadapter/«$jname»", "handle", "J"); + } + catch (std::exception& ex) { + assert(0); + return NULL; + } + + return (::«@name» *) (intptr_t) (int64_t) env->GetLongField(me, handle); } - - return (::«@name» *) (intptr_t) (int64_t) env->GetLongField(me, handle); - } + }; }; - }; - extern "C" { + extern "C" { - using namespace pEp::JNIAdapter; + using namespace pEp::JNIAdapter; - JNIEXPORT jlong JNICALL - Java_org_pEp_jniadapter_«$jname»_init(JNIEnv *env, jobject obj) { - ::«@name» * _obj = ::new_«@name»(PEP_dir_incoming); - if (!_obj) { - outOfMemory(env); - return (jlong) 0; + JNIEXPORT jlong JNICALL + Java_org_pEp_jniadapter_«$jname»_init(JNIEnv *env, jobject obj) { + ::«@name» * _obj = ::new_«@name»(PEP_dir_incoming); + if (!_obj) { + outOfMemory(env); + return (jlong) 0; + } + return (jlong) (int64_t) (intptr_t) _obj; } - return (jlong) (int64_t) (intptr_t) _obj; - } - JNIEXPORT void JNICALL - Java_org_pEp_jniadapter_«$jname»_release(JNIEnv *env, jobject obj, jlong value) { - if (value) { - ::«@name» *_obj = (::«@name» *) (intptr_t) (int64_t) value; - ::free_«@name»(_obj); + JNIEXPORT void JNICALL + Java_org_pEp_jniadapter_«$jname»_release(JNIEnv *env, jobject obj, jlong value) { + if (value) { + ::«@name» *_obj = (::«@name» *) (intptr_t) (int64_t) value; + ::free_«@name»(_obj); + } } + + || + apply "*[name(.)!='enum']", 0, mode=entry { + with "name", "@name"; + with "class" call "CamelCase" with "text", "@name"; + } + || + } // extern "C" + + || } + } - `` apply "*[name(.)!='enum']", 0, mode=entry with "name", "@name", with "class" call "CamelCase" with "text", "@name"; - } // extern "C" + function "mangle" { + param "type"; + param "name"; + param "classname" call "CamelCase" with "text", "../@name"; + const "convert", "$type != 'timestamp'"; - || + choose { + when "$convert" + > «concat('Java_org_pEp_jniadapter_', $classname, '__1', str:replace($name, '_', '_1'))» + otherwise + > «concat('Java_org_pEp_jniadapter_', $classname, '_', str:replace($name, '_', '_1'))» + } } template "*", mode=entry { @@ -76,10 +96,17 @@ tstylesheet { const "jname" call "CamelCase" with "text", "name(*[1])"; const "cname" call "lcase" with "text", "name(*[1])"; const "type", "name(.)"; - + const "getname" call "mangle" { + with "type", "$type"; + with "name", "concat('get', $jname)"; + } + const "setname" call "mangle" { + with "type", "$type"; + with "name", "concat('set', $jname)"; + } || JNIEXPORT `call "jni_type" with "type", "name(.)"` JNICALL - Java_org_pEp_jniadapter_«$class»_get«$jname»(JNIEnv *env, jobject obj) { + «$getname»(JNIEnv *env, jobject obj) { «$name» *_obj = «$name»_ptr(env, obj); || choose { @@ -92,7 +119,7 @@ tstylesheet { } JNIEXPORT void JNICALL - Java_org_pEp_jniadapter_«$class»_set«$jname»(JNIEnv *env, jobject obj, `call "jni_type" with "type", "name(.)"` value) { + «$setname»(JNIEnv *env, jobject obj, `call "jni_type" with "type", "name(.)"` value) { «$name» *_obj = «$name»_ptr(env, obj); || choose { diff --git a/test/Makefile b/test/Makefile index 87b0108..5d06bb5 100644 --- a/test/Makefile +++ b/test/Makefile @@ -2,10 +2,10 @@ CLASSPATH=.:../src VM=java -Djava.library.path=../src test: Testing.class - $(VM) Testing + CLASSPATH=$(CLASSPATH) $(VM) Testing %.class: %.java - javac $< + CLASSPATH=$(CLASSPATH) javac $< .PHONY: clean diff --git a/test/Testing.java b/test/Testing.java index 1a36a28..e75d12a 100644 --- a/test/Testing.java +++ b/test/Testing.java @@ -1,6 +1,7 @@ import org.pEp.jniadapter.Engine; import org.pEp.jniadapter.pEpException; import org.pEp.jniadapter.Identity; +import org.pEp.jniadapter.Message; class Testing { public static void main(String[] args) { @@ -22,6 +23,13 @@ class Testing { String t = e.trustwords(vb); System.out.print("Trustwords: "); System.out.println(t); + + // message + Message msg = new Message(); + Identity from = new Identity(); + from.username = "Volker Birk"; + from.address = "vb@dingens.org"; + msg.setFrom(from); } }