JNIEXPORT jlong JNICALL Java_org_infradead_libopenconnect_LibOpenConnect_init( JNIEnv *jenv, jobject jobj, jstring juseragent) { char *useragent; struct libctx *ctx = calloc(1, sizeof(*ctx)); if (!ctx) goto bad; ctx->jenv = jenv; ctx->jobj = (*jenv)->NewGlobalRef(jenv, jobj); if (!ctx->jobj) goto bad_free_ctx; ctx->async_lock = init_async_lock(ctx); if (!ctx->async_lock) goto bad_delete_obj_ref; useragent = (char *)(*jenv)->GetStringUTFChars(jenv, juseragent, NULL); if (!useragent) goto bad_delete_ref; ctx->vpninfo = openconnect_vpninfo_new(useragent, validate_peer_cert_cb, write_new_config_cb, process_auth_form_cb, progress_cb, ctx); (*jenv)->ReleaseStringUTFChars(jenv, juseragent, useragent); if (!ctx->vpninfo) goto bad_delete_ref; openconnect_set_token_callbacks(ctx->vpninfo, ctx, lock_token_cb, unlock_token_cb); openconnect_set_protect_socket_handler(ctx->vpninfo, protect_socket_cb); openconnect_set_stats_handler(ctx->vpninfo, stats_cb); openconnect_set_setup_tun_handler(ctx->vpninfo, setup_tun_cb); openconnect_set_reconnected_handler(ctx->vpninfo, reconnected_cb); ctx->cmd_fd = openconnect_setup_cmd_pipe(ctx->vpninfo); if (ctx->cmd_fd < 0) goto bad_free_vpninfo; ctx->loglevel = PRG_DEBUG; return (jlong)(unsigned long)ctx; bad_free_vpninfo: openconnect_vpninfo_free(ctx->vpninfo); bad_delete_ref: (*jenv)->DeleteGlobalRef(jenv, ctx->async_lock); bad_delete_obj_ref: (*jenv)->DeleteGlobalRef(jenv, ctx->jobj); bad_free_ctx: free(ctx); bad: OOM(jenv); return 0; }
static int mod_init(void) { LM_DBG("testing port number...\n"); if ( port <= 1024 ) { LM_WARN("port<1024, using 8080...\n"); port = 8080; } if (init_async_lock()!=0) { LM_ERR("failed to init async lock\n"); return -1; } return 0; }