gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r3278 - in freeway: . native src/org/gnu/freeway src/org/gn


From: mdonoughe
Subject: [GNUnet-SVN] r3278 - in freeway: . native src/org/gnu/freeway src/org/gnu/freeway/server src/org/gnu/freeway/util
Date: Sun, 20 Aug 2006 17:59:59 -0700 (PDT)

Author: mdonoughe
Date: 2006-08-20 17:59:43 -0700 (Sun, 20 Aug 2006)
New Revision: 3278

Modified:
   freeway/
   freeway/build.sh
   freeway/native/connection.c
   freeway/native/connection.h
   freeway/native/core.c
   freeway/native/core.h
   freeway/native/handler.c
   freeway/native/handler.h
   freeway/native/java.c
   freeway/native/org_gnu_freeway_server_CPluginLoader.h
   freeway/native/tcpserver.c
   freeway/native/tcpserver.h
   freeway/native/util.c
   freeway/native/util.h
   freeway/src/org/gnu/freeway/AbstractApplication.java
   freeway/src/org/gnu/freeway/AbstractServer.java
   freeway/src/org/gnu/freeway/GNUNetDaemon.java
   freeway/src/org/gnu/freeway/server/CPluginLoader.java
   freeway/src/org/gnu/freeway/server/ClientServer.java
   freeway/src/org/gnu/freeway/server/CoreAPI.java
   freeway/src/org/gnu/freeway/util/LoggedObject.java
Log:
 more callbacks
 builds on a mac
 logic fix
 more CoreAPI
 fixes



Property changes on: freeway
___________________________________________________________________
Name: svk:merge
   - ca0d4bff-9018-0410-8ce9-c5d843b21c37:/local/freeway:73
   + 9da852c3-611b-0410-9456-b3f9f3a8f88d:/local/freeway:68
ca0d4bff-9018-0410-8ce9-c5d843b21c37:/local/freeway:73

Modified: freeway/build.sh
===================================================================
--- freeway/build.sh    2006-08-20 22:55:49 UTC (rev 3277)
+++ freeway/build.sh    2006-08-21 00:59:43 UTC (rev 3278)
@@ -6,5 +6,5 @@
 ant && javah -classpath build/classes -d native 
org.gnu.freeway.server.CPluginLoader && make || exit 1
 cp native/.libs/lib*.so* etc/support/clib/.libs/*.so* native/.libs/lib*.dylib 
etc/support/clib/.libs/lib*.dylib build/ > /dev/null 2>&1
 mv build/libfreeway-clib.dylib build/libfreeway-clib.jnilib > /dev/null 2>&1
-mv build/liborg_gnu_freeway_server_cpluginloader.dylib 
build/liborg_gnu_freeway_server_cpluginloader.jnilib > /dev/null 2>&1
+mv build/libcpluginloader.dylib build/libcpluginloader.jnilib > /dev/null 2>&1
 exit 0

Modified: freeway/native/connection.c
===================================================================
--- freeway/native/connection.c 2006-08-20 22:55:49 UTC (rev 3277)
+++ freeway/native/connection.c 2006-08-21 00:59:43 UTC (rev 3278)
@@ -34,6 +34,78 @@
 #include "jni.h"
 #include "util.h"
 
+int sendPlaintext(TSession * session, const char * msg, unsigned int size) {
+  ActiveThreadList * t;
+  JNIEnv * env;
+  jclass capiClazz;
+  jbyteArray jmsg;
+  jmethodID method;
+  jobject ret;
+  
+  t = findThread();
+  env = t->env;
+  GNUNET_ASSERT(env != NULL);
+  capiClazz = (*env)->GetObjectClass(env, t->jcapi);
+  jmsg = (*env)->NewByteArray(env, size);
+  GNUNET_ASSERT(jmsg != NULL);
+  (*env)->SetByteArrayRegion(env, jmsg, 0, size, msg);
+  GNUNET_ASSERT(capiClazz != NULL);
+  method = (*env)->GetMethodID(env, capiClazz, "sendPlaintext", 
"(Lorg/gnu/freeway/transport/Session;[B)Lorg/gnu/freeway/cwrappers/CInt;");
+  GNUNET_ASSERT(method != NULL);
+  ret = (*env)->CallObjectMethod(env, t->jcapi, method, session, jmsg);
+  GNUNET_ASSERT(ret != NULL);
+  return convCIntToInt(ret, env);
+}
+
+void unicast(const PeerIdentity * receiver, const P2P_MESSAGE_HEADER * msg, 
unsigned int importance, unsigned int maxdelay) {
+  fprintf(stderr, "in unicast\n");
+  ActiveThreadList * t;
+  JNIEnv * env;
+  jclass chiClazz;
+  jmethodID newChi;
+  jbyteArray temp;
+  jobject jreciever;
+  jbyteArray jmsg;
+  jobject jimportance;
+  jobject jmaxdelay;
+  jclass capiClazz;
+  jmethodID method;
+  
+  t = findThread();
+  env = t->env;
+  GNUNET_ASSERT(env != NULL);
+  
+  chiClazz = (*env)->FindClass(env, "org/gnu/freeway/cwrappers/CHostIdentity");
+  GNUNET_ASSERT(chiClazz != NULL);
+  
+  newChi = (*env)->GetMethodID(env, chiClazz, "<init>", "(B])V");
+  GNUNET_ASSERT(newChi != NULL);
+  
+  temp = (*env)->NewByteArray(env, 64);
+  GNUNET_ASSERT(temp != NULL);
+  (*env)->SetByteArrayRegion(env, temp, 0, 64, (char*) receiver);
+  jreciever = (*env)->NewObject(env, chiClazz, newChi, temp);
+  GNUNET_ASSERT(jreciever != NULL);
+  jmsg = (*env)->NewByteArray(env, msg->size);
+  GNUNET_ASSERT(jmsg != NULL);
+  (*env)->SetByteArrayRegion(env, jmsg, 0, msg->size, msg);
+  jimportance = convUIntToCUInt(importance, env);
+  GNUNET_ASSERT(jimportance != NULL);
+  jmaxdelay = convUIntToCUInt(maxdelay, env);
+  GNUNET_ASSERT(jmaxdelay != NULL);
+  
+  capiClazz = (*env)->GetObjectClass(env, t->jcapi);
+  GNUNET_ASSERT(capiClazz != NULL);
+  method = (*env)->GetMethodID(env, capiClazz, "unicast", 
"(Lorg/gnu/freeway/cwrappers/CHostIdentity;B];Lorg/gnu/freeway/cwrappers/CUnsignedInt;Lorg/gnu/freeway/cwrappers/CUnsignedInt;)V");
+  GNUNET_ASSERT(method != NULL);
+  (*env)->CallVoidMethod(env, t->jcapi, method, jreciever, jmsg, jimportance, 
jmaxdelay);
+  fprintf(stderr, "leaving unicast\n");
+}
+
+void unicastCallback(const PeerIdentity * receiver, BuildMessageCallback 
callback, void * closure, unsigned short len, unsigned int importance, unsigned 
int maxdelay) {
+  GNUNET_ASSERT(0);
+}
+
 int forAllConnectedNodes(PerNodeCallback method, void * arg) {
 fprintf(stderr, "in forAllConnectedNodes\n");
   ActiveThreadList * t;
@@ -67,3 +139,288 @@
   return convCIntToInt(jret, env);
 }
 
+int registerSendCallback(const unsigned int minimumPadding, BufferFillCallback 
callback) {
+  ActiveThreadList * t;
+  JNIEnv * env;
+  jclass capiClazz;
+  jclass cuintClazz;
+  jclass handleClazz;
+  jobject jpadding;
+  jobject jcallback;
+  jmethodID newHandle;
+  jmethodID newCuint;
+  jmethodID method;
+  jobject jret;
+
+  t = findThread();
+  env = t->env;
+  GNUNET_ASSERT(env != NULL);
+  capiClazz = (*env)->GetObjectClass(env, t->jcapi);
+  GNUNET_ASSERT(capiClazz != NULL);
+  cuintClazz = (*env)->FindClass(env, 
"org/gnu/freeway/cwrappers/CUnsignedInt");
+  GNUNET_ASSERT(cuintClazz != NULL);
+  handleClazz = (*env)->FindClass(env, 
"org/gnu/freeway/server/CPluginLoader$Handle");
+  GNUNET_ASSERT(handleClazz != NULL);
+  newHandle = (*env)->GetMethodID(env, handleClazz, "<init>", "(J)V");
+  GNUNET_ASSERT(newHandle != NULL);
+  newCuint = (*env)->GetMethodID(env, cuintClazz, "<init>", "(J)V");
+  GNUNET_ASSERT(newCuint != NULL);
+  method = (*env)->GetMethodID(env, capiClazz, "registerSendCallback", 
"(Lorg/gnu/freeway/cwrappers/CUnsignedInt;Lorg/gnu/freeway/server/CPluginLoader$Handle;)Lorg/gnu/freeway/cwrappers/CInt;");
+  GNUNET_ASSERT(method != NULL);
+  jpadding = (*env)->NewObject(env, cuintClazz, newCuint, (jlong) (long) 
minimumPadding);
+  GNUNET_ASSERT(jpadding != NULL);
+  jcallback = (*env)->NewObject(env, handleClazz, newHandle, (jlong) (long) 
callback);
+  GNUNET_ASSERT(jcallback != NULL);
+  jret = (*env)->CallObjectMethod(env, t->jcapi, method, jpadding, jcallback);
+  GNUNET_ASSERT(jret != NULL);
+  return convCIntToInt(jret, env);
+}
+
+int unregisterSendCallback(const unsigned int minimumPadding, 
BufferFillCallback callback) {
+  ActiveThreadList * t;
+  JNIEnv * env;
+  jclass capiClazz;
+  jclass cuintClazz;
+  jclass handleClazz;
+  jobject jpadding;
+  jobject jcallback;
+  jmethodID newHandle;
+  jmethodID newCuint;
+  jmethodID method;
+  jobject jret;
+
+  t = findThread();
+  env = t->env;
+  GNUNET_ASSERT(env != NULL);
+  capiClazz = (*env)->GetObjectClass(env, t->jcapi);
+  GNUNET_ASSERT(capiClazz != NULL);
+  cuintClazz = (*env)->FindClass(env, 
"org/gnu/freeway/cwrappers/CUnsignedInt");
+  GNUNET_ASSERT(cuintClazz != NULL);
+  handleClazz = (*env)->FindClass(env, 
"org/gnu/freeway/server/CPluginLoader$Handle");
+  GNUNET_ASSERT(handleClazz != NULL);
+  newHandle = (*env)->GetMethodID(env, handleClazz, "<init>", "(J)V");
+  GNUNET_ASSERT(newHandle != NULL);
+  newCuint = (*env)->GetMethodID(env, cuintClazz, "<init>", "(J)V");
+  GNUNET_ASSERT(newCuint != NULL);
+  method = (*env)->GetMethodID(env, capiClazz, "unregisterSendCallback", 
"(Lorg/gnu/freeway/cwrappers/CUnsignedInt;Lorg/gnu/freeway/server/CPluginLoader$Handle;)Lorg/gnu/freeway/cwrappers/CInt;");
+  GNUNET_ASSERT(method != NULL);
+  jpadding = (*env)->NewObject(env, cuintClazz, newCuint, (jlong) (long) 
minimumPadding);
+  GNUNET_ASSERT(jpadding != NULL);
+  jcallback = (*env)->NewObject(env, handleClazz, newHandle, (jlong) (long) 
callback);
+  GNUNET_ASSERT(jcallback != NULL);
+  jret = (*env)->CallObjectMethod(env, t->jcapi, method, jpadding, jcallback);
+  GNUNET_ASSERT(jret != NULL);
+  return convCIntToInt(jret, env);
+}
+
+int registerSendNotify(MessagePartHandler callback) {
+  ActiveThreadList * t;
+  JNIEnv * env;
+  jclass capiClazz;
+  jclass handleClazz;
+  jobject jcallback;
+  jmethodID newHandle;
+  jmethodID method;
+  jobject jret;
+
+  t = findThread();
+  env = t->env;
+  GNUNET_ASSERT(env != NULL);
+  capiClazz = (*env)->GetObjectClass(env, t->jcapi);
+  GNUNET_ASSERT(capiClazz != NULL);
+  handleClazz = (*env)->FindClass(env, 
"org/gnu/freeway/server/CPluginLoader$Handle");
+  GNUNET_ASSERT(handleClazz != NULL);
+  newHandle = (*env)->GetMethodID(env, handleClazz, "<init>", "(J)V");
+  GNUNET_ASSERT(newHandle != NULL);
+  method = (*env)->GetMethodID(env, capiClazz, "registerSendNotify", 
"(Lorg/gnu/freeway/server/CPluginLoader$Handle;)Lorg/gnu/freeway/cwrappers/CInt;");
+  GNUNET_ASSERT(method != NULL);
+  jcallback = (*env)->NewObject(env, handleClazz, newHandle, (jlong) (long) 
callback);
+  GNUNET_ASSERT(jcallback != NULL);
+  jret = (*env)->CallObjectMethod(env, t->jcapi, method, jcallback);
+  GNUNET_ASSERT(jret != NULL);
+  return convCIntToInt(jret, env);
+}
+
+int unregisterSendNotify(MessagePartHandler callback) {
+  ActiveThreadList * t;
+  JNIEnv * env;
+  jclass capiClazz;
+  jclass handleClazz;
+  jobject jcallback;
+  jmethodID newHandle;
+  jmethodID method;
+  jobject jret;
+
+  t = findThread();
+  env = t->env;
+  GNUNET_ASSERT(env != NULL);
+  capiClazz = (*env)->GetObjectClass(env, t->jcapi);
+  GNUNET_ASSERT(capiClazz != NULL);
+  handleClazz = (*env)->FindClass(env, 
"org/gnu/freeway/server/CPluginLoader$Handle");
+  GNUNET_ASSERT(handleClazz != NULL);
+  newHandle = (*env)->GetMethodID(env, handleClazz, "<init>", "(J)V");
+  GNUNET_ASSERT(newHandle != NULL);
+  method = (*env)->GetMethodID(env, capiClazz, "unregisterSendNotify", 
"(Lorg/gnu/freeway/server/CPluginLoader$Handle;)Lorg/gnu/freeway/cwrappers/CInt;");
+  GNUNET_ASSERT(method != NULL);
+  jcallback = (*env)->NewObject(env, handleClazz, newHandle, (jlong) (long) 
callback);
+  GNUNET_ASSERT(jcallback != NULL);
+  jret = (*env)->CallObjectMethod(env, t->jcapi, method, jcallback);
+  GNUNET_ASSERT(jret != NULL);
+  return convCIntToInt(jret, env);
+}
+
+void offerTSessionFor(const PeerIdentity * peer, TSession * session) {
+  GNUNET_ASSERT(0);
+  ActiveThreadList * t;
+  JNIEnv * env;
+  jclass capiClazz;
+  jclass cHostIdentityClazz;
+  jobject jpeer;
+  jmethodID newCHI;
+  jbyteArray temp;
+  jmethodID method;
+
+  t = findThread();
+  env = t->env;
+  GNUNET_ASSERT(env != NULL);
+  capiClazz = (*env)->GetObjectClass(env, t->jcapi);
+  GNUNET_ASSERT(capiClazz != NULL);
+  cHostIdentityClazz = (*env)->FindClass(env, 
"org/gnu/freeway/cwrappers/CHostIdentity");
+  GNUNET_ASSERT(cHostIdentityClazz != NULL);
+  newCHI = (*env)->GetMethodID(env, cHostIdentityClazz, "<init>", "(B])V");
+  GNUNET_ASSERT(newCHI != NULL);
+  temp = (*env)->NewByteArray(env, 64);
+  GNUNET_ASSERT(temp != NULL);
+  (*env)->SetByteArrayRegion(env, temp, 0, 64, (char*) peer);
+  method = (*env)->GetMethodID(env, capiClazz, "offerTSessionFor", 
"(Lorg/gnu/freeway/cwrappers/CHostIdentity;Lorg/gnu/freeway/transport/Session;)V");
+  GNUNET_ASSERT(method != NULL);
+  jpeer = (*env)->NewObject(env, cHostIdentityClazz, newCHI, temp);
+  GNUNET_ASSERT(jpeer != NULL);
+  (*env)->CallVoidMethod(env, t->jcapi, method, jpeer, session);
+}
+
+void assignSessionKey(const SESSIONKEY * key, const PeerIdentity * peer, 
TIME_T age, int forSending) {
+  GNUNET_ASSERT(0);
+}
+
+int getCurrentSessionKey(const PeerIdentity * peer, SESSIONKEY * key, TIME_T * 
age, int forSending) {
+  GNUNET_ASSERT(0);
+}
+
+void confirmSessionUp(const PeerIdentity * node) {
+  GNUNET_ASSERT(0);
+}
+
+void preferTrafficFrom(const PeerIdentity * node, double preference) {
+  GNUNET_ASSERT(0);
+}
+
+unsigned int queryBPMFromPeer(const PeerIdentity * node) {
+  ActiveThreadList * t;
+  JNIEnv * env;
+  jclass capiClazz;
+  jclass cHostIdentityClazz;
+  jobject jpeer;
+  jmethodID newCHI;
+  jbyteArray temp;
+  jmethodID method;
+  jobject jret;
+
+  t = findThread();
+  env = t->env;
+  GNUNET_ASSERT(env != NULL);
+  capiClazz = (*env)->GetObjectClass(env, t->jcapi);
+  GNUNET_ASSERT(capiClazz != NULL);
+  cHostIdentityClazz = (*env)->FindClass(env, 
"org/gnu/freeway/cwrappers/CHostIdentity");
+  GNUNET_ASSERT(cHostIdentityClazz != NULL);
+  newCHI = (*env)->GetMethodID(env, cHostIdentityClazz, "<init>", "(B])V");
+  GNUNET_ASSERT(newCHI != NULL);
+  temp = (*env)->NewByteArray(env, 64);
+  GNUNET_ASSERT(temp != NULL);
+  (*env)->SetByteArrayRegion(env, temp, 0, 64, (char*) node);
+  method = (*env)->GetMethodID(env, capiClazz, "querryBPMFromPeer", 
"(Lorg/gnu/freeway/cwrappers/CHostIdentity;)Lorg/gnu/freeway/cwrappers/CUnsignedInt;");
+  GNUNET_ASSERT(method != NULL);
+  jpeer = (*env)->NewObject(env, cHostIdentityClazz, newCHI, temp);
+  GNUNET_ASSERT(jpeer != NULL);
+  jret = (*env)->CallObjectMethod(env, t->jcapi, method, jpeer);
+  return convCUIntToUInt(jret, env);
+}
+
+void disconnectFromPeer(const PeerIdentity * peer) {
+  ActiveThreadList * t;
+  JNIEnv * env;
+  jclass capiClazz;
+  jclass cHostIdentityClazz;
+  jobject jpeer;
+  jmethodID newCHI;
+  jbyteArray temp;
+  jmethodID method;
+
+  t = findThread();
+  env = t->env;
+  GNUNET_ASSERT(env != NULL);
+  capiClazz = (*env)->GetObjectClass(env, t->jcapi);
+  GNUNET_ASSERT(capiClazz != NULL);
+  cHostIdentityClazz = (*env)->FindClass(env, 
"org/gnu/freeway/cwrappers/CHostIdentity");
+  GNUNET_ASSERT(cHostIdentityClazz != NULL);
+  newCHI = (*env)->GetMethodID(env, cHostIdentityClazz, "<init>", "(B])V");
+  GNUNET_ASSERT(newCHI != NULL);
+  temp = (*env)->NewByteArray(env, 64);
+  GNUNET_ASSERT(temp != NULL);
+  (*env)->SetByteArrayRegion(env, temp, 0, 64, (char*) peer);
+  method = (*env)->GetMethodID(env, capiClazz, "disconnectFromPeer", 
"(Lorg/gnu/freeway/cwrappers/CHostIdentity;)V");
+  GNUNET_ASSERT(method != NULL);
+  jpeer = (*env)->NewObject(env, cHostIdentityClazz, newCHI, temp);
+  GNUNET_ASSERT(jpeer != NULL);
+  (*env)->CallVoidMethod(env, t->jcapi, method, jpeer);
+}
+
+unsigned int computeIndex(const PeerIdentity * peer) {
+  ActiveThreadList * t;
+  JNIEnv * env;
+  jclass capiClazz;
+  jclass cHostIdentityClazz;
+  jobject jpeer;
+  jmethodID newCHI;
+  jbyteArray temp;
+  jmethodID method;
+  jobject jret;
+
+  t = findThread();
+  env = t->env;
+  GNUNET_ASSERT(env != NULL);
+  capiClazz = (*env)->GetObjectClass(env, t->jcapi);
+  GNUNET_ASSERT(capiClazz != NULL);
+  cHostIdentityClazz = (*env)->FindClass(env, 
"org/gnu/freeway/cwrappers/CHostIdentity");
+  GNUNET_ASSERT(cHostIdentityClazz != NULL);
+  newCHI = (*env)->GetMethodID(env, cHostIdentityClazz, "<init>", "(B])V");
+  GNUNET_ASSERT(newCHI != NULL);
+  temp = (*env)->NewByteArray(env, 64);
+  GNUNET_ASSERT(temp != NULL);
+  (*env)->SetByteArrayRegion(env, temp, 0, 64, (char*) peer);
+  method = (*env)->GetMethodID(env, capiClazz, "querryBPMFromPeer", 
"(Lorg/gnu/freeway/cwrappers/CHostIdentity;)Lorg/gnu/freeway/cwrappers/CUnsignedInt;");
+  GNUNET_ASSERT(method != NULL);
+  jpeer = (*env)->NewObject(env, cHostIdentityClazz, newCHI, temp);
+  GNUNET_ASSERT(jpeer != NULL);
+  jret = (*env)->CallObjectMethod(env, t->jcapi, method, jpeer);
+  return convCUIntToUInt(jret, env);
+}
+
+Mutex * getConnectionModuleLock() {
+  //let's hope Freeway handles this!
+  Mutex * ret;
+  MUTEX_CREATE(ret);
+  return ret;
+}
+
+int getSlotCount() {
+  GNUNET_ASSERT(0);
+}
+
+int isSlotUsed(int slot) {
+  GNUNET_ASSERT(0);
+}
+
+int getLastActivityOf(const PeerIdentity * peer, cron_t * time) {
+  return SYSERR;
+}

Modified: freeway/native/connection.h
===================================================================
--- freeway/native/connection.h 2006-08-20 22:55:49 UTC (rev 3277)
+++ freeway/native/connection.h 2006-08-21 00:59:43 UTC (rev 3278)
@@ -25,3 +25,41 @@
  */
 
 int forAllConnectedNodes(PerNodeCallback method, void * arg);
+
+int sendPlaintext(TSession * session, const char * msg, unsigned int size);
+
+void unicast(const PeerIdentity * receiver, const P2P_MESSAGE_HEADER * msg, 
unsigned int importance, unsigned int maxdelay);
+
+void unicastCallback(const PeerIdentity * receiver, BuildMessageCallback 
callback, void * closure, unsigned int importance, unsigned int maxdelay);
+
+int registerSendCallback(const unsigned int minimumPadding, BufferFillCallback 
callback);
+
+int unregisterSendCallback(const unsigned int minimumPadding, 
BufferFillCallback callback);
+
+int registerSendNotify(MessagePartHandler callback);
+
+int unregisterSendNotify(MessagePartHandler callback);
+
+void offerTSessionFor(const PeerIdentity * peer, TSession * session);
+
+void assignSessionKey(const SESSIONKEY * key, const PeerIdentity * peer, 
TIME_T age, int forSending);
+
+int getCurrentSessionKey(const PeerIdentity * peer, SESSIONKEY * key, TIME_T * 
age, int forSending);
+
+void confirmSessionUp(const PeerIdentity * node, double preference);
+
+void preferTrafficFrom(const PeerIdentity * node, double preference);
+
+unsigned int queryBPMFromPeer(const PeerIdentity * node);
+
+void disconnectFromPeer(const PeerIdentity * peer);
+
+unsigned int computeIndex(const PeerIdentity * peer);
+
+Mutex * getConnectionModuleLock();
+
+int getSlotCount();
+
+int isSlotUsed(int slot);
+
+int getLastActivityOf(const PeerIdentity * peer, cron_t * time);

Modified: freeway/native/core.c
===================================================================
--- freeway/native/core.c       2006-08-20 22:55:49 UTC (rev 3277)
+++ freeway/native/core.c       2006-08-21 00:59:43 UTC (rev 3278)
@@ -142,51 +142,53 @@
   return OK;
 }
 
-void initCore() {
+void initCore(unsigned int fversion) {
   // core.c
-  jcapi.version = 0;
-  jcapi.myIdentity = NULL;
   jcapi.loadApplicationModule = &loadApplicationModule;
   jcapi.unloadApplicationModule = &unloadApplicationModule;
   jcapi.requestService = &requestService;
   jcapi.releaseService = &releaseService;
 
   // connection.c
-  jcapi.sendPlaintext = NULL;
-  jcapi.unicast = NULL;
-  jcapi.unicastCallback = NULL;
+  jcapi.sendPlaintext = &sendPlaintext;
+  jcapi.unicast = &unicast;
+  jcapi.unicastCallback = &unicastCallback;
   jcapi.forAllConnectedNodes = &forAllConnectedNodes;
-  jcapi.registerSendCallback = NULL;
-  jcapi.unregisterSendCallback = NULL;
-  jcapi.registerSendNotify = NULL;
-  jcapi.unregisterSendNotify = NULL;
-  jcapi.offerTSessionFor = NULL;
-  jcapi.assignSessionKey = NULL;
-  jcapi.getCurrentSessionKey = NULL;
-  jcapi.confirmSessionUp = NULL;
-  jcapi.preferTrafficFrom = NULL;
-  jcapi.queryBPMfromPeer = NULL;
-  jcapi.disconnectFromPeer = NULL;
-  jcapi.computeIndex = NULL;
-  jcapi.getConnectionModuleLock = NULL;
-  jcapi.getSlotCount = NULL;
-  jcapi.isSlotUsed = NULL;
-  jcapi.getLastActivityOf = NULL;
+  jcapi.registerSendCallback = &registerSendCallback;
+  jcapi.unregisterSendCallback = &unregisterSendCallback;
+  jcapi.registerSendNotify = &registerSendNotify;
+  jcapi.unregisterSendNotify = &unregisterSendNotify;
+  jcapi.offerTSessionFor = &offerTSessionFor;
+  jcapi.assignSessionKey = &assignSessionKey;
+  jcapi.getCurrentSessionKey = &getCurrentSessionKey;
+  jcapi.confirmSessionUp = &confirmSessionUp;
+  jcapi.preferTrafficFrom = &preferTrafficFrom;
+  jcapi.queryBPMfromPeer = &queryBPMFromPeer;
+  jcapi.disconnectFromPeer = &disconnectFromPeer;
+  jcapi.computeIndex = &computeIndex;
+  jcapi.getConnectionModuleLock = &getConnectionModuleLock;
+  jcapi.getSlotCount = &getSlotCount;
+  jcapi.isSlotUsed = &isSlotUsed;
+  jcapi.getLastActivityOf = &getLastActivityOf;
 
   // handler.c
   jcapi.registerHandler = &registerHandler;
   jcapi.unregisterHandler = &unregisterHandler;
   jcapi.isHandlerRegistered = &isHandlerRegistered;
-  jcapi.registerPlaintextHandler = NULL;
-  jcapi.unregisterPlaintextHandler = NULL;
-  jcapi.injectMessage = NULL;
+  jcapi.registerPlaintextHandler = &registerPlaintextHandler;
+  jcapi.unregisterPlaintextHandler = &unregisterPlaintextHandler;
+  jcapi.injectMessage = &injectMessage;
 
   // tcpserver.c
   jcapi.sendValueToClient = &sendValueToClient;
   jcapi.sendToClient = &sendToClient;
   jcapi.registerClientHandler = &registerClientHandler;
   jcapi.unregisterClientHandler = &unregisterClientHandler;
-  jcapi.registerClientExitHandler = NULL;
-  jcapi.unregisterClientExitHandler = NULL;
-  jcapi.terminateClientConnection = NULL;
+  jcapi.registerClientExitHandler = &registerClientExitHandler;
+  jcapi.unregisterClientExitHandler = &unregisterClientExitHandler;
+  jcapi.terminateClientConnection = &terminateClientConnection;
+  
+  // get some information from Freeway
+  jcapi.version = fversion;
+  jcapi.myIdentity = NULL; // Freeway will set this later
 }

Modified: freeway/native/core.h
===================================================================
--- freeway/native/core.h       2006-08-20 22:55:49 UTC (rev 3277)
+++ freeway/native/core.h       2006-08-21 00:59:43 UTC (rev 3278)
@@ -24,6 +24,9 @@
  * @author Christian Grothoff
  */
 
+#ifndef HAVE_CORE_H
+#define HAVE_CORE_H 1
 #include <GNUnet/gnunet_util.h>
 
-CoreAPIForApplication jcapi;
+extern CoreAPIForApplication jcapi;
+#endif

Modified: freeway/native/handler.c
===================================================================
--- freeway/native/handler.c    2006-08-20 22:55:49 UTC (rev 3277)
+++ freeway/native/handler.c    2006-08-21 00:59:43 UTC (rev 3278)
@@ -62,7 +62,7 @@
   GNUNET_ASSERT(jcallback != NULL);
   jret = (*env)->CallObjectMethod(env, t->jcapi, method, jtype, jcallback);
   GNUNET_ASSERT(jret != NULL);
-fprintf(stderr, "leaving jregisterHandler\n");
+fprintf(stderr, "leaving registerHandler\n");
   return convCIntToInt(jret, env);
 }
 
@@ -94,7 +94,7 @@
   GNUNET_ASSERT(jcallback != NULL);
   jret = (*env)->CallObjectMethod(env, t->jcapi, method, jtype, jcallback);
   GNUNET_ASSERT(jret != NULL);
-fprintf(stderr, "leaving junregisterHandler\n");
+fprintf(stderr, "leaving unregisterHandler\n");
   return convCIntToInt(jret, env);
 }
 
@@ -119,3 +119,109 @@
 fprintf(stderr, "leaving isHandlerRegistered\n");
   return convCIntToInt(ok, env);
 }
+
+int registerPlaintextHandler(unsigned short type, PlaintextMessagePartHandler 
callback) {
+  fprintf(stderr, "in registerPlaintextHandler\n");
+  ActiveThreadList * t;
+  JNIEnv * env;
+  jclass capiClazz;
+  jclass handleClazz;
+  jobject jtype;
+  jobject jcallback;
+  jmethodID newHandle;
+  jmethodID method;
+  jobject jret;
+
+  t = findThread();
+  env = t->env;
+  GNUNET_ASSERT(env != NULL);
+  capiClazz = (*env)->GetObjectClass(env, t->jcapi);
+  GNUNET_ASSERT(capiClazz != NULL);
+  handleClazz = (*env)->FindClass(env, 
"org/gnu/freeway/server/CPluginLoader$Handle");
+  GNUNET_ASSERT(handleClazz != NULL);
+  newHandle = (*env)->GetMethodID(env, handleClazz, "<init>", "(J)V");
+  GNUNET_ASSERT(newHandle != NULL);
+  method = (*env)->GetMethodID(env, capiClazz, "registerPlaintextHandler", 
"(Lorg/gnu/freeway/cwrappers/CInt;Lorg/gnu/freeway/server/CPluginLoader$Handle;)Lorg/gnu/freeway/cwrappers/CInt;");
+  GNUNET_ASSERT(method != NULL);
+  jtype = convIntToCInt((int) type, env);
+  jcallback = (*env)->NewObject(env, handleClazz, newHandle, (jlong) (long) 
callback);
+  GNUNET_ASSERT(jcallback != NULL);
+  jret = (*env)->CallObjectMethod(env, t->jcapi, method, jtype, jcallback);
+  GNUNET_ASSERT(jret != NULL);
+fprintf(stderr, "leaving registerPlaintextHandler\n");
+  return convCIntToInt(jret, env);
+}
+
+int unregisterPlaintextHandler(unsigned short type, 
PlaintextMessagePartHandler callback) {
+  fprintf(stderr, "in unregisterPlaintextHandler\n");
+  ActiveThreadList * t;
+  JNIEnv * env;
+  jclass capiClazz;
+  jclass handleClazz;
+  jobject jtype;
+  jobject jcallback;
+  jmethodID newHandle;
+  jmethodID method;
+  jobject jret;
+
+  t = findThread();
+  env = t->env;
+  GNUNET_ASSERT(env != NULL);
+  capiClazz = (*env)->GetObjectClass(env, t->jcapi);
+  GNUNET_ASSERT(capiClazz != NULL);
+  handleClazz = (*env)->FindClass(env, 
"org/gnu/freeway/server/CPluginLoader$Handle");
+  GNUNET_ASSERT(handleClazz != NULL);
+  newHandle = (*env)->GetMethodID(env, handleClazz, "<init>", "(J)V");
+  GNUNET_ASSERT(newHandle != NULL);
+  method = (*env)->GetMethodID(env, capiClazz, "unregisterPlaintextHandler", 
"(Lorg/gnu/freeway/cwrappers/CInt;Lorg/gnu/freeway/server/CPluginLoader$Handle;)Lorg/gnu/freeway/cwrappers/CInt;");
+  GNUNET_ASSERT(method != NULL);
+  jtype = convIntToCInt((int) type, env);
+  jcallback = (*env)->NewObject(env, handleClazz, newHandle, (jlong) (long) 
callback);
+  GNUNET_ASSERT(jcallback != NULL);
+  jret = (*env)->CallObjectMethod(env, t->jcapi, method, jtype, jcallback);
+  GNUNET_ASSERT(jret != NULL);
+fprintf(stderr, "leaving unregisterPlaintextHandler\n");
+  return convCIntToInt(jret, env);
+}
+
+void injectMessage(const PeerIdentity * sender, const char * msg, unsigned int 
size, int wasEncrypted, TSession * session) {
+  fprintf(stderr, "in injectMessage\n");
+  ActiveThreadList * t;
+  JNIEnv * env;
+  jclass chiClazz;
+  jmethodID newChi;
+  jbyteArray temp;
+  jobject jsender;
+  jbyteArray jmsg;
+  jobject jwasEncrypted;
+  jclass capiClazz;
+  jmethodID method;
+  
+  t = findThread();
+  env = t->env;
+  GNUNET_ASSERT(env != NULL);
+  
+  chiClazz = (*env)->FindClass(env, "org/gnu/freeway/cwrappers/CHostIdentity");
+  GNUNET_ASSERT(chiClazz != NULL);
+  
+  newChi = (*env)->GetMethodID(env, chiClazz, "<init>", "(B])V");
+  GNUNET_ASSERT(newChi != NULL);
+  
+  temp = (*env)->NewByteArray(env, 64);
+  GNUNET_ASSERT(temp != NULL);
+  (*env)->SetByteArrayRegion(env, temp, 0, 64, (char*) sender);
+  jsender = (*env)->NewObject(env, chiClazz, newChi, temp);
+  GNUNET_ASSERT(jsender != NULL);
+  jmsg = (*env)->NewByteArray(env, size);
+  GNUNET_ASSERT(jmsg != NULL);
+  (*env)->SetByteArrayRegion(env, jmsg, 0, size, msg);
+  jwasEncrypted = convIntToCInt(wasEncrypted, env);
+  GNUNET_ASSERT(jwasEncrypted != NULL);
+  
+  capiClazz = (*env)->GetObjectClass(env, t->jcapi);
+  GNUNET_ASSERT(capiClazz != NULL);
+  method = (*env)->GetMethodID(env, capiClazz, "injectMessage", 
"(Lorg/gnu/freeway/cwrappers/CHostIdentity;B];Lorg/gnu/freeway/cwrappers/CInt;Lorg/gnu/freeway/transport/Session;)V");
+  GNUNET_ASSERT(method != NULL);
+  (*env)->CallVoidMethod(env, t->jcapi, method, jsender, jmsg, jwasEncrypted, 
session);
+  fprintf(stderr, "leaving injectMessage\n");
+}

Modified: freeway/native/handler.h
===================================================================
--- freeway/native/handler.h    2006-08-20 22:55:49 UTC (rev 3277)
+++ freeway/native/handler.h    2006-08-21 00:59:43 UTC (rev 3278)
@@ -31,3 +31,9 @@
 int unregisterHandler(unsigned short type, CSHandler callback);
 
 int isHandlerRegistered(unsigned short type, unsigned short htype);
+
+int registerPlaintextHandler(unsigned short type, PlaintextMessagePartHandler 
callback);
+
+int unregisterPlaintextHandler(unsigned short type, 
PlaintextMessagePartHandler callback);
+
+void injectMessage(const PeerIdentity * sender, const char * msg, unsigned int 
size, int wasEncrypted, TSession * session);
\ No newline at end of file

Modified: freeway/native/java.c
===================================================================
--- freeway/native/java.c       2006-08-20 22:55:49 UTC (rev 3277)
+++ freeway/native/java.c       2006-08-21 00:59:43 UTC (rev 3278)
@@ -129,9 +129,9 @@
 }
 
 JNIEXPORT jint JNICALL Java_org_gnu_freeway_server_CPluginLoader_cInitUtil
-(JNIEnv * env, jclass cls, jobjectArray args, jobject capi) {
+(JNIEnv * env, jclass cls, jobjectArray args, jint fversion, jobject capi) {
   fprintf(stderr, "in cInitUtil\n");
-  initCore();
+  initCore((unsigned int) fversion);
   MUTEX_CREATE(&threadsLock);
   MUTEX_CREATE(&modulesLock);
   registerThread(env, capi);
@@ -324,7 +324,42 @@
 //fprintf(stderr, "packet is %d bytes long\n", htons(((CS_MESSAGE_HEADER *) 
adata)->size));
   ok = ((MessagePartHandler) (void*) (long)fptr)((PeerIdentity *) aidentity, 
(P2P_MESSAGE_HEADER *) adata);
   (*env)->ReleaseByteArrayElements(env, data, adata, 0);
-  (*env)->ReleaseByteArrayElements(env, data, aidentity, 0);
+  (*env)->ReleaseByteArrayElements(env, identity, aidentity, 0);
   unregisterThread();
   return (jint) ok;
 }
+
+JNIEXPORT void JNICALL 
Java_org_gnu_freeway_server_CPluginLoader_cCallPerNodeCallback
+(JNIEnv *env, jclass cls, jobject capi, jlong fptr, jbyteArray identity, jlong 
aptr) {
+  registerThread(env, capi);
+  GNUNET_ASSERT(fptr != 0 && identity != NULL);
+  char * aidentity = (*env)->GetByteArrayElements(env, identity, NULL);
+  GNUNET_ASSERT(aidentity != NULL);
+  ((PerNodeCallback) (void*) (long)fptr)((PeerIdentity *) aidentity, (void *) 
aptr);
+  (*env)->ReleaseByteArrayElements(env, identity, aidentity, 0);
+  unregisterThread();
+}
+
+JNIEXPORT jint JNICALL 
Java_org_gnu_freeway_server_CPluginLoader_cCallBufferFillCallback
+(JNIEnv *env, jclass cls, jobject capi, jlong fptr, jbyteArray receiver, 
jbyteArray position, jint padding) {
+  registerThread(env, capi);
+  int ok;
+  GNUNET_ASSERT(fptr != 0 && receiver != NULL && position != NULL);
+  char * areceiver = (*env)->GetByteArrayElements(env, receiver, NULL);
+  GNUNET_ASSERT(areceiver != NULL);
+  char * aposition = (*env)->GetByteArrayElements(env, position, NULL);
+  GNUNET_ASSERT(aposition != NULL);
+  ok = ((BufferFillCallback) (void*) (long)fptr)((PeerIdentity *) areceiver, 
(void *) aposition, (unsigned int) padding);
+  (*env)->ReleaseByteArrayElements(env, receiver, areceiver, 0);
+  (*env)->ReleaseByteArrayElements(env, position, aposition, 0);
+  unregisterThread();
+  return (jint) ok;
+}
+
+JNIEXPORT void JNICALL 
Java_org_gnu_freeway_server_CPluginLoader_cCallClientExitHandler
+(JNIEnv *env, jclass cls, jobject capi, jlong fptr, jobject client) {
+  registerThread(env, capi);
+  GNUNET_ASSERT(fptr != 0 && client != NULL);
+  ((ClientExitHandler) (void*) (long)fptr)((ClientHandle) client);
+  unregisterThread();
+}

Modified: freeway/native/org_gnu_freeway_server_CPluginLoader.h
===================================================================
--- freeway/native/org_gnu_freeway_server_CPluginLoader.h       2006-08-20 
22:55:49 UTC (rev 3277)
+++ freeway/native/org_gnu_freeway_server_CPluginLoader.h       2006-08-21 
00:59:43 UTC (rev 3278)
@@ -26,10 +26,10 @@
 /*
  * Class:     org_gnu_freeway_server_CPluginLoader
  * Method:    cInitUtil
- * Signature: ([Ljava/lang/String;Lorg/gnu/freeway/server/CoreAPI;)I
+ * Signature: ([Ljava/lang/String;ILorg/gnu/freeway/server/CoreAPI;)I
  */
 JNIEXPORT jint JNICALL Java_org_gnu_freeway_server_CPluginLoader_cInitUtil
-  (JNIEnv *, jclass, jobjectArray, jobject);
+  (JNIEnv *, jclass, jobjectArray, jint, jobject);
 
 /*
  * Class:     org_gnu_freeway_server_CPluginLoader
@@ -79,6 +79,30 @@
 JNIEXPORT jint JNICALL Java_org_gnu_freeway_server_CPluginLoader_cCallP2PHandle
   (JNIEnv *, jclass, jobject, jlong, jbyteArray, jbyteArray);
 
+/*
+ * Class:     org_gnu_freeway_server_CPluginLoader
+ * Method:    cCallPerNodeCallback
+ * Signature: (Lorg/gnu/freeway/server/CoreAPI;J[BJ)V
+ */
+JNIEXPORT void JNICALL 
Java_org_gnu_freeway_server_CPluginLoader_cCallPerNodeCallback
+  (JNIEnv *, jclass, jobject, jlong, jbyteArray, jlong);
+
+/*
+ * Class:     org_gnu_freeway_server_CPluginLoader
+ * Method:    cCallBufferFillCallback
+ * Signature: (Lorg/gnu/freeway/server/CoreAPI;J[B[BI)I
+ */
+JNIEXPORT jint JNICALL 
Java_org_gnu_freeway_server_CPluginLoader_cCallBufferFillCallback
+  (JNIEnv *, jclass, jobject, jlong, jbyteArray, jbyteArray, jint);
+
+/*
+ * Class:     org_gnu_freeway_server_CPluginLoader
+ * Method:    cCallClientExitHandler
+ * Signature: 
(Lorg/gnu/freeway/server/CoreAPI;JLorg/gnu/freeway/util/net/CSSession;)V
+ */
+JNIEXPORT void JNICALL 
Java_org_gnu_freeway_server_CPluginLoader_cCallClientExitHandler
+  (JNIEnv *, jclass, jobject, jlong, jobject);
+
 #ifdef __cplusplus
 }
 #endif

Modified: freeway/native/tcpserver.c
===================================================================
--- freeway/native/tcpserver.c  2006-08-20 22:55:49 UTC (rev 3277)
+++ freeway/native/tcpserver.c  2006-08-21 00:59:43 UTC (rev 3278)
@@ -151,3 +151,81 @@
 fprintf(stderr, "leaving unregisterClientHandler\n");
   return convCIntToInt(jret, env);
 }
+
+int registerClientExitHandler(ClientExitHandler callback) {
+  fprintf(stderr, "in registerClientExitHandler\n");
+  ActiveThreadList * t;
+  JNIEnv * env;
+  jclass capiClazz;
+  jclass handleClazz;
+  jobject jcallback;
+  jmethodID newHandle;
+  jmethodID method;
+  jobject jret;
+
+  t = findThread();
+  env = t->env;
+  GNUNET_ASSERT(env != NULL);
+  capiClazz = (*env)->GetObjectClass(env, t->jcapi);
+  GNUNET_ASSERT(capiClazz != NULL);
+  handleClazz = (*env)->FindClass(env, 
"org/gnu/freeway/server/CPluginLoader$Handle");
+  GNUNET_ASSERT(handleClazz != NULL);
+  newHandle = (*env)->GetMethodID(env, handleClazz, "<init>", "(J)V");
+  GNUNET_ASSERT(newHandle != NULL);
+  method = (*env)->GetMethodID(env, capiClazz, "registerClientExitHandler", 
"(Lorg/gnu/freeway/server/CPluginLoader$Handle;)Lorg/gnu/freeway/cwrappers/CInt;");
+  GNUNET_ASSERT(method != NULL);
+  jcallback = (*env)->NewObject(env, handleClazz, newHandle, (jlong) (long) 
callback);
+  GNUNET_ASSERT(jcallback != NULL);
+  jret = (*env)->CallObjectMethod(env, t->jcapi, method, jcallback);
+  GNUNET_ASSERT(jret != NULL);
+fprintf(stderr, "leaving registerClientExitHandler\n");
+  return convCIntToInt(jret, env);
+}
+
+int unregisterClientExitHandler(ClientExitHandler callback) {
+  fprintf(stderr, "in unregisterClientExitHandler\n");
+  ActiveThreadList * t;
+  JNIEnv * env;
+  jclass capiClazz;
+  jclass handleClazz;
+  jobject jcallback;
+  jmethodID newHandle;
+  jmethodID method;
+  jobject jret;
+
+  t = findThread();
+  env = t->env;
+  GNUNET_ASSERT(env != NULL);
+  capiClazz = (*env)->GetObjectClass(env, t->jcapi);
+  GNUNET_ASSERT(capiClazz != NULL);
+  handleClazz = (*env)->FindClass(env, 
"org/gnu/freeway/server/CPluginLoader$Handle");
+  GNUNET_ASSERT(handleClazz != NULL);
+  newHandle = (*env)->GetMethodID(env, handleClazz, "<init>", "(J)V");
+  GNUNET_ASSERT(newHandle != NULL);
+  method = (*env)->GetMethodID(env, capiClazz, "unregisterClientExitHandler", 
"(Lorg/gnu/freeway/server/CPluginLoader$Handle;)Lorg/gnu/freeway/cwrappers/CInt;");
+  GNUNET_ASSERT(method != NULL);
+  jcallback = (*env)->NewObject(env, handleClazz, newHandle, (jlong) (long) 
callback);
+  GNUNET_ASSERT(jcallback != NULL);
+  jret = (*env)->CallObjectMethod(env, t->jcapi, method, jcallback);
+  GNUNET_ASSERT(jret != NULL);
+fprintf(stderr, "leaving unregisterClientExitHandler\n");
+  return convCIntToInt(jret, env);
+}
+
+void terminateClientConnection(ClientHandle handle) {
+  fprintf(stderr, "in terminiateClientConnection\n");
+  ActiveThreadList * t;
+  JNIEnv * env;
+  jclass capiClazz;
+  jmethodID method;
+
+  t = findThread();
+  env = t->env;
+  GNUNET_ASSERT(env != NULL);
+  capiClazz = (*env)->GetObjectClass(env, t->jcapi);
+  GNUNET_ASSERT(capiClazz != NULL);
+  method = (*env)->GetMethodID(env, capiClazz, "terminiateClientConnection", 
"(Lorg/gnu/freeway/util/net/CSSession;)V");
+  GNUNET_ASSERT(method != NULL);
+  (*env)->CallVoidMethod(env, t->jcapi, method, handle);
+  fprintf(stderr, "leaving unregisterClientExitHandler\n");
+}

Modified: freeway/native/tcpserver.h
===================================================================
--- freeway/native/tcpserver.h  2006-08-20 22:55:49 UTC (rev 3277)
+++ freeway/native/tcpserver.h  2006-08-21 00:59:43 UTC (rev 3278)
@@ -33,3 +33,9 @@
 int registerClientHandler(unsigned short type, CSHandler callback);
 
 int unregisterClientHandler(unsigned short type, CSHandler callback);
+
+int registerClientExitHandler(ClientExitHandler callback);
+
+int unregisterClientExitHandler(ClientExitHandler callback);
+
+void terminateClientConnection(ClientHandle handle);

Modified: freeway/native/util.c
===================================================================
--- freeway/native/util.c       2006-08-20 22:55:49 UTC (rev 3277)
+++ freeway/native/util.c       2006-08-21 00:59:43 UTC (rev 3278)
@@ -36,9 +36,10 @@
 
 static ModuleList * modules;
 static ActiveThreadList * threads;
+static JavaVM * jvm;
+
 Mutex modulesLock;
 Mutex threadsLock;
-static JavaVM * jvm;
 
 /**
  * checks if the specified module is already loaded
@@ -311,6 +312,38 @@
   return (*env)->NewObject(env, classCInt, method, input);
 }
 
+int convCUIntToUInt(jobject input, JNIEnv * env) {
+fprintf(stderr, "in convCUIntToUInt\n");
+  jclass classCInt;
+  jmethodID method;
+
+  if(input == NULL)
+    return 0;
+  classCInt = (*env)->FindClass(env, "org/gnu/freeway/cwrappers/CUnsignedInt");
+  if(classCInt == NULL)
+    return 0;
+  method = (*env)->GetMethodID(env, classCInt, "getValue", "()J");
+  if(method == NULL)
+    return 0;
+fprintf(stderr, "leaving convCUIntToUInt\n");
+  return (unsigned int) (*env)->CallLongMethod(env, input, method);
+}
+
+jobject convUIntToCUInt(unsigned int input, JNIEnv * env) {
+fprintf(stderr, "in convUIntToCUInt\n");
+  jclass classCInt;
+  jmethodID method;
+
+  classCInt = (*env)->FindClass(env, "org/gnu/freeway/cwrappers/CUnsignedInt");
+  if(classCInt == NULL)
+    return 0;
+  method = (*env)->GetMethodID(env, classCInt, "<init>", "(J)V");
+  if(method == NULL)
+    return 0;
+fprintf(stderr, "leaving convUIntToCUInt\n");
+  return (*env)->NewObject(env, classCInt, method, (long) input);
+}
+
 long convCLongToLong(jobject input, JNIEnv * env) {
 fprintf(stderr, "in convCLongToLong\n");
   jclass classCLong;

Modified: freeway/native/util.h
===================================================================
--- freeway/native/util.h       2006-08-20 22:55:49 UTC (rev 3277)
+++ freeway/native/util.h       2006-08-21 00:59:43 UTC (rev 3278)
@@ -24,6 +24,8 @@
  * @author Christian Grothoff
  */
 
+#ifndef HAVE_UTIL_H
+#define HAVE_UTIL_H 1
 #include "jni.h"
 
 #define DSO_PREFIX "libgnunet"
@@ -58,8 +60,8 @@
   jobject object;
 } PointerObject;
 
-Mutex modulesLock;
-Mutex threadsLock;
+extern Mutex modulesLock;
+extern Mutex threadsLock;
 
 int hasModule(char * prefix, char * name);
 
@@ -79,6 +81,10 @@
 
 jobject convIntToCInt(int input, JNIEnv * env);
 
+int convCUIntToUInt(jobject input, JNIEnv * env);
+
+jobject convUIntToCUInt(unsigned int input, JNIEnv * env);
+
 long convCLongToLong(jobject input, JNIEnv * env);
 
 jobject convLongToCLong(long input, JNIEnv * env);
@@ -92,3 +98,4 @@
 jobject convJStringToCString(jstring input, JNIEnv * env);
 
 int parseGnunetdCommandLine(int argc, char * argv[]);
+#endif

Modified: freeway/src/org/gnu/freeway/AbstractApplication.java
===================================================================
--- freeway/src/org/gnu/freeway/AbstractApplication.java        2006-08-20 
22:55:49 UTC (rev 3277)
+++ freeway/src/org/gnu/freeway/AbstractApplication.java        2006-08-21 
00:59:43 UTC (rev 3278)
@@ -45,7 +45,6 @@
                services=ServiceManager.getInstance(this);
                preferences=new Prefs();
                preferences.readConfiguration(daemon);
-               statistics=new Statistics();
                before=new ArrayList();
 
                addCritical(new AbstractAction("FLUSH-PREFS") {
@@ -72,8 +71,15 @@
 
        public Statistics getStatistics()
        {
+               if(statistics == null)
+                       startStatistics();
                return statistics;
        }
+       
+       private synchronized void startStatistics() {
+               if(statistics == null)
+                       statistics=new Statistics();
+       }
 
        public Service service( Class c )
        {

Modified: freeway/src/org/gnu/freeway/AbstractServer.java
===================================================================
--- freeway/src/org/gnu/freeway/AbstractServer.java     2006-08-20 22:55:49 UTC 
(rev 3277)
+++ freeway/src/org/gnu/freeway/AbstractServer.java     2006-08-21 00:59:43 UTC 
(rev 3278)
@@ -31,11 +31,6 @@
        protected AbstractServer( String name, int version )
        {
                super(name,version,true);
-               dispatcher=new MessagesDispatcher();
-               //receivedNoiseBytes=getStatistics().getHandle("# bytes of 
noise received");
-               server=new ClientServer();
-
-               keys=new LocalIdentity();
        }
 
        public String toString()
@@ -105,30 +100,31 @@
 
        public void beurk0()
        {
+               keys=new LocalIdentity();
                keys.load(getHome());
        }
 
        public void beurk1()
        {
+               //receivedNoiseBytes=getStatistics().getHandle("# bytes of 
noise received");
+               server=new ClientServer();
+
+               dispatcher=new MessagesDispatcher();
+               dispatcher.init(this);
+               
dispatcher.registerP2PHandler(P2PMessage.IS_NOISE,P2PNoise.class,this);
+
                server.start(this);
        }
 
        public void beurk2()
        {
+               dispatcher.unregisterP2PHandler(P2PMessage.IS_NOISE,this);
+               dispatcher.done();
                server.stop();
        }
 
        public int run( String[] args )
        {
-               int     ret;
-
-               dispatcher.init(this);
-               
dispatcher.registerP2PHandler(P2PMessage.IS_NOISE,P2PNoise.class,this);
-
-               ret=super.run(args);
-
-               dispatcher.unregisterP2PHandler(P2PMessage.IS_NOISE,this);
-               dispatcher.done();
-               return ret;
+               return super.run(args);
        }
 }

Modified: freeway/src/org/gnu/freeway/GNUNetDaemon.java
===================================================================
--- freeway/src/org/gnu/freeway/GNUNetDaemon.java       2006-08-20 22:55:49 UTC 
(rev 3277)
+++ freeway/src/org/gnu/freeway/GNUNetDaemon.java       2006-08-21 00:59:43 UTC 
(rev 3278)
@@ -137,11 +137,11 @@
                /* init 3b: load application services */
                beurk1();
 
-               //service(CoreService.class);
+               service(CoreService.class);
                //service(HelloExchangeService.class);
                //service(PingPongService.class);
                //service(ConnectionService.class);
-               //service(StatsService.class);
+               service(StatsService.class);
 
                ((CoreService) service(CoreService.class)).loadProtocols();
                if (firstStart || download) {
@@ -253,7 +253,7 @@
        public static void main( String[] args )
        {
                //TODO: use args
-               CPluginLoader._.initUtil(new String[] {});
+               CPluginLoader._.initUtil(new String[] {}, VERSION);
                launch(GNUNetDaemon.class,args);
        }
 

Modified: freeway/src/org/gnu/freeway/server/CPluginLoader.java
===================================================================
--- freeway/src/org/gnu/freeway/server/CPluginLoader.java       2006-08-20 
22:55:49 UTC (rev 3277)
+++ freeway/src/org/gnu/freeway/server/CPluginLoader.java       2006-08-21 
00:59:43 UTC (rev 3278)
@@ -96,7 +96,7 @@
        
        private static native long cLoadApplicationModule(String protocolName, 
CoreAPI capi);
        
-       private static native int cInitUtil(String[] args, CoreAPI capi);
+       private static native int cInitUtil(String[] args, int version, CoreAPI 
capi);
 
        private static native Object cCallC(long modulePtr, CoreAPI capi,
                        int functionOffset, int functionType, Object[] 
arguments);
@@ -116,7 +116,7 @@
        private static native int cCallCSHandle(CoreAPI capi, long fptr, 
CSSession session, byte[] arr);
        private static native int cCallP2PHandle(CoreAPI capi, long fptr, 
byte[] identity, byte[] arr);
        private static native void cCallPerNodeCallback(CoreAPI capi, long 
fptr, byte[] identity, long data);
-       private static native int cCallBufferFillCallback(CoreAPI capi, long 
fptr, byte[] receiver, byte[] buf);
+       private static native int cCallBufferFillCallback(CoreAPI capi, long 
fptr, byte[] receiver, byte[] buf, int size);
        private static native void cCallClientExitHandler(CoreAPI capi, long 
handle, CSSession client);
 
        /**
@@ -151,11 +151,11 @@
         * @param args commadline arguments
         */
        
-       public int initUtil(String[] args) {
+       public int initUtil(String[] args, int version) {
                assert(args != null);
                if(!loaded || !CoreAPI._.isReady())
                        return CoreAPI.SYSERR.getValue();
-               return cInitUtil(args, CoreAPI._);
+               return cInitUtil(args, version, CoreAPI._);
        }
 
        /**
@@ -279,7 +279,7 @@
        }
 
        public int callBufferFillCallback(Handle handle, HostIdentity receiver, 
ByteBuffer buf) {
-               return cCallBufferFillCallback(CoreAPI._, handle._, 
PersistentHelper.toBytes(receiver), buf.array());
+               return cCallBufferFillCallback(CoreAPI._, handle._, 
PersistentHelper.toBytes(receiver), buf.array(), 0);
        }
 
        public void callClientExitHandler(Handle handle, CSSession client) {

Modified: freeway/src/org/gnu/freeway/server/ClientServer.java
===================================================================
--- freeway/src/org/gnu/freeway/server/ClientServer.java        2006-08-20 
22:55:49 UTC (rev 3277)
+++ freeway/src/org/gnu/freeway/server/ClientServer.java        2006-08-21 
00:59:43 UTC (rev 3278)
@@ -280,7 +280,7 @@
                                return false;
                                }
 
-                       if (handlers.get(type)!=hd || (hd instanceof 
NativeCallback && ((NativeCallback) hd).equals(handlers.get(type)))) {
+                       if (handlers.get(type)==hd || (hd instanceof 
NativeCallback && ((NativeCallback) hd).equals(handlers.get(type)))) {
                                handlers.set(type,null);
                                return true;
                        }

Modified: freeway/src/org/gnu/freeway/server/CoreAPI.java
===================================================================
--- freeway/src/org/gnu/freeway/server/CoreAPI.java     2006-08-20 22:55:49 UTC 
(rev 3277)
+++ freeway/src/org/gnu/freeway/server/CoreAPI.java     2006-08-21 00:59:43 UTC 
(rev 3278)
@@ -25,6 +25,7 @@
 import java.util.ArrayList;
 import java.util.Iterator;
 import org.gnu.freeway.Server;
+import org.gnu.freeway.services.StatsService;
 import org.gnu.freeway.transport.MessagePack;
 import org.gnu.freeway.transport.Session;
 import org.gnu.freeway.util.NativeService;
@@ -46,7 +47,9 @@
        private CoreService serviceCore = null;
        
        public boolean isReady() {
-               return protocolCore != null && transportCore != null && 
serviceCore != null;
+               if(protocolCore == null || transportCore == null || serviceCore 
== null)
+                       System.err.println("warning: CoreAPI may not be 
ready.");
+               return true;
        }
        
        public void setProtocolCore(CoreForProtocol cfp) {
@@ -72,9 +75,6 @@
        
        private final static String DSO_PREFIX = "libgnunet";
        
-       public CUnsignedInt version;
-       public CHostIdentity myIdentity;
-       
        private ArrayList shutdownList;
        
        public CInt loadApplicationModule(CString name) {
@@ -116,7 +116,7 @@
                return OK;
        }
        
-       public CInt sendPlaintext(Session session, CString msg, CUnsignedInt 
size) {
+       public CInt sendPlaintext(Session session, byte[] msg) {
                return SYSERR; //TODO
        }
        

Modified: freeway/src/org/gnu/freeway/util/LoggedObject.java
===================================================================
--- freeway/src/org/gnu/freeway/util/LoggedObject.java  2006-08-20 22:55:49 UTC 
(rev 3277)
+++ freeway/src/org/gnu/freeway/util/LoggedObject.java  2006-08-21 00:59:43 UTC 
(rev 3278)
@@ -57,6 +57,9 @@
 
        protected void debug( Level level, String str )
        {
+               //System.err.println("(DEBUG) " + str);
+               //if(true)
+               //      return;
                if (debug) {
                        log(level,"(DEBUG) "+str);
                        }
@@ -84,6 +87,10 @@
 
        protected void err( String str, Throwable x )
        {
+               System.err.println(str);
+               x.printStackTrace();
+               if(true)
+                       return;
                LogRecord       rec;
 
                rec=new LogRecord(Level.SEVERE,str);





reply via email to

[Prev in Thread] Current Thread [Next in Thread]