| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213 | #include "ZT1_jniutils.h"#ifdef __cplusplusextern "C" {#endifjobject createResultObject(JNIEnv *env, ZT1_ResultCode code){    // cache the class so we don't have to    // look it up every time we need to create a java    // ResultCode object    static jclass resultClass = NULL;        jobject resultObject = NULL;    if(resultClass == NULL)    {        resultClass = env->FindClass("com/zerotierone/sdk/ResultCode");        if(resultClass == NULL)        {            return NULL; // exception thrown        }    }    std::string fieldName;    switch(code)    {    case ZT1_RESULT_OK:        fieldName = "ZT1_RESULT_OK";        break;    case ZT1_RESULT_FATAL_ERROR_OUT_OF_MEMORY:        fieldName = "ZT1_RESULT_FATAL_ERROR_OUT_OF_MEMORY";        break;    case ZT1_RESULT_FATAL_ERROR_DATA_STORE_FAILED:        fieldName = "ZT1_RESULT_FATAL_ERROR_DATA_STORE_FAILED";        break;    case ZT1_RESULT_ERROR_NETWORK_NOT_FOUND:        fieldName = "ZT1_RESULT_ERROR_NETWORK_NOT_FOUND";        break;    case ZT1_RESULT_FATAL_ERROR_INTERNAL:    default:        fieldName = "ZT1_RESULT_FATAL_ERROR_INTERNAL";        break;    }    jfieldID enumField = env->GetStaticFieldID(resultClass, fieldName.c_str(), "Lcom/zerotierone/sdk/ResultCode;");    resultObject = env->GetStaticObjectField(resultClass, enumField);    return resultObject;}ZT1_Node* findNode(uint64_t nodeId){    NodeMap::iterator found = nodeMap.find(nodeId);    if(found != nodeMap.end())    {        JniRef *ref = found->second;        return ref->node;    }    return NULL;}jobject createVirtualNetworkStatus(JNIEnv *env, ZT1_VirtualNetworkStatus status){    static jclass statusClass = NULL;        jobject statusObject = NULL;    if(statusClass == NULL)    {        statusClass = env->FindClass("com/zerotierone/sdk/VirtualNetworkStatus");        if(statusClass == NULL)        {            return NULL; // exception thrown        }    }    std::string fieldName;    switch(status)    {    case ZT1_NETWORK_STATUS_REQUESTING_CONFIGURATION:        fieldName = "NETWORK_STATUS_REQUESTING_CONFIGURATION";        break;    case ZT1_NETWORK_STATUS_OK:        fieldName = "NETWORK_STATUS_OK";        break;    case ZT1_NETWORK_STATUS_ACCESS_DENIED:        fieldName = "NETWORK_STATUS_ACCESS_DENIED";        break;    case ZT1_NETWORK_STATUS_NOT_FOUND:        fieldName = "NETWORK_STATUS_NOT_FOUND";        break;    case ZT1_NETWORK_STATUS_PORT_ERROR:        fieldName = "NETWORK_STATUS_PORT_ERROR";        break;    case ZT1_NETWORK_STATUS_CLIENT_TOO_OLD:        fieldName = "NETWORK_STATUS_CLIENT_TOO_OLD";        break;    }    jfieldID enumField = env->GetStaticFieldID(statusClass, fieldName.c_str(), "Lcom/zerotierone/sdk/VirtualNetworkStatus;");    statusObject = env->GetStaticObjectField(statusClass, enumField);    return statusObject;}jobject createEvent(JNIEnv *env, ZT1_Event event){    static jclass eventClass = NULL;    jobject eventObject = NULL;    if(eventClass == NULL)    {        eventClass = env->FindClass("com/zerotierone/sdk/Event");        if(eventClass == NULL)        {            return NULL;        }    }    std::string fieldName;    switch(event)    {    case ZT1_EVENT_UP:        fieldName = "EVENT_UP";        break;    case ZT1_EVENT_OFFLINE:        fieldName = "EVENT_OFFLINE";        break;    case ZT1_EVENT_DOWN:        fieldName = "EVENT_DOWN";        break;    case ZT1_EVENT_FATAL_ERROR_IDENTITY_COLLISION:        fieldName = "EVENT_FATAL_ERROR_IDENTITY_COLLISION";        break;    case ZT1_EVENT_AUTHENTICATION_FAILURE:        fieldName = "EVENT_AUTHENTICATION_FAILURE";        break;    case ZT1_EVENT_INVALID_PACKET:        fieldName = "EVENT_INVALID_PACKET";        break;    case ZT1_EVENT_TRACE:        fieldName = "EVENT_TRACE";        break;    }    jfieldID enumField = env->GetStaticFieldID(eventClass, fieldName.c_str(), "Lcom/zerotierone/sdk/Event;");    eventObject = env->GetStaticObjectField(eventClass, enumField);    return eventObject;}jobject createVirtualNetworkType(JNIEnv *env, ZT1_VirtualNetworkType type){    static jclass vntypeClass = NULL;    jobject vntypeObject = NULL;    if(vntypeClass == NULL)    {        vntypeClass = env->FindClass("com/zerotierone/sdk/VirtualNetworkType");        if(vntypeClass == NULL)        {            return NULL;        }    }    std::string fieldName;    switch(type)    {    case ZT1_NETWORK_TYPE_PRIVATE:        fieldName = "NETWORK_TYPE_PRIVATE";        break;    case ZT1_NETWORK_TYPE_PUBLIC:        fieldName = "NETWORK_TYPE_PUBLIC";        break;    }    jfieldID enumField = env->GetStaticFieldID(vntypeClass, fieldName.c_str(), "Lcom/zerotierone/sdk/VirtyalNetworkType;");    vntypeObject = env->GetStaticObjectField(vntypeClass, enumField);    return vntypeObject;}    jobject newArrayList(JNIEnv *env){    return NULL;}jobject appendItemToArrayList(JNIEnv *env, jobject object){    return NULL;}jobject newIPV6Address(JNIEnv *env, char *addr){    return NULL;}jobject newIPV4Address(JNIEnv *env, char *addr){    return NULL;}jobject newMulticastGroup(JNIEnv *env, const ZT1_MulticastGroup &mc){    return NULL;}#ifdef __cplusplus}#endif
 |