Browse Source

implemented WirePacketSendFunction

Grant Limberg 10 years ago
parent
commit
f2eed5a65f

+ 23 - 2
java/jni/com_zerotierone_sdk_Node.cpp

@@ -255,15 +255,36 @@ namespace {
         }
         }
     }
     }
 
 
-    int WirePacketSendFunction(ZT1_Node *node,void *userData,const struct sockaddr_storage *,unsigned int,const void *,unsigned int)
+    int WirePacketSendFunction(ZT1_Node *node,void *userData,\
+        const struct sockaddr_storage *address,
+        unsigned int linkDesparation,
+        const void *buffer,
+        unsigned int bufferSize)
     {
     {
         JniRef *ref = (JniRef*)userData;
         JniRef *ref = (JniRef*)userData;
         assert(ref->node == node);
         assert(ref->node == node);
 
 
         JNIEnv *env = ref->env;
         JNIEnv *env = ref->env;
 
 
+        jclass packetSenderClass = NULL;
+        jmethodID callbackMethod = NULL;
 
 
-        return 0;
+        packetSenderClass = env->GetObjectClass(ref->packetSender);
+        if(packetSenderClass == NULL)
+        {
+            return -1;
+        }
+
+        callbackMethod = env->GetMethodID(packetSenderClass,
+            "onSendPacketRequested", "(Ljava/lang/String;I[B)I");
+        if(callbackMethod == NULL)
+        {
+            return -2;
+        }
+        jobject addressObj = newInetAddress(env, *address);
+        jbyteArray bufferObj = env->NewByteArray(bufferSize);
+        env->SetByteArrayRegion(bufferObj, 0, bufferSize, (jbyte*)buffer);
+        return env->CallIntMethod(packetSenderClass, callbackMethod, addressObj, linkDesparation, bufferObj);
     }
     }
 
 
     typedef std::map<uint64_t, JniRef*> NodeMap;
     typedef std::map<uint64_t, JniRef*> NodeMap;

+ 3 - 4
java/src/com/zerotierone/sdk/PacketSender.java

@@ -30,9 +30,8 @@ import java.nio.ByteBuffer;
 
 
 
 
 public interface PacketSender {
 public interface PacketSender {
-    public int onSendPacketRequested(Node node,
+    public int onSendPacketRequested(
             String addr,
             String addr,
-            int linkDesc,
-            ByteBuffer packetData,
-            long dataLength);
+            int linkDesparation,
+            byte[] packetData);
 }
 }