- execute native ua call functions in re thread in order to avoid crash when

call ends
- cleaned some code
- upgraded build gradle version
This commit is contained in:
Juha Heinanen
2018-08-27 09:32:10 +03:00
parent 7a5fbbfbf4
commit 098e71925b
3 changed files with 28 additions and 53 deletions

View File

@ -8,8 +8,8 @@ android {
applicationId = 'com.tutpro.baresip' applicationId = 'com.tutpro.baresip'
minSdkVersion 21 minSdkVersion 21
targetSdkVersion 26 targetSdkVersion 26
versionCode = 17 versionCode = 18
versionName = '2.3.1' versionName = '2.3.2'
externalNativeBuild { externalNativeBuild {
cmake { cmake {
cFlags '-DHAVE_INTTYPES_H' cFlags '-DHAVE_INTTYPES_H'

View File

@ -78,11 +78,10 @@ static const char *ua_event_reg_str(enum ua_event ev)
static const char *translate_errorcode(uint16_t scode) static const char *translate_errorcode(uint16_t scode)
{ {
switch (scode) { switch (scode) {
case 404: return "notfound.wav";
case 404: return "notfound.wav"; case 486: return "busy.wav";
case 486: return "busy.wav"; case 487: return NULL; /* ignore */
case 487: return NULL; /* ignore */ default: return "error.wav";
default: return "error.wav";
} }
} }
@ -448,7 +447,6 @@ JNIEXPORT jstring JNICALL
Java_com_tutpro_baresip_AccountKt_account_1display_1name(JNIEnv *env, jobject thiz, jstring javaAcc) { Java_com_tutpro_baresip_AccountKt_account_1display_1name(JNIEnv *env, jobject thiz, jstring javaAcc) {
const char *native_acc = (*env)->GetStringUTFChars(env, javaAcc, 0); const char *native_acc = (*env)->GetStringUTFChars(env, javaAcc, 0);
struct account *acc = (struct account *)strtoul(native_acc, NULL, 10); struct account *acc = (struct account *)strtoul(native_acc, NULL, 10);
(*env)->ReleaseStringUTFChars(env, javaAcc, native_acc); (*env)->ReleaseStringUTFChars(env, javaAcc, native_acc);
if (acc) { if (acc) {
const char *dn = account_display_name(acc); const char *dn = account_display_name(acc);
@ -467,7 +465,6 @@ Java_com_tutpro_baresip_AccountKt_account_1set_1display_1name(JNIEnv *env, jobje
struct account *acc = (struct account *)strtoul(native_acc, NULL, 10); struct account *acc = (struct account *)strtoul(native_acc, NULL, 10);
(*env)->ReleaseStringUTFChars(env, javaAcc, native_acc); (*env)->ReleaseStringUTFChars(env, javaAcc, native_acc);
const char *dn = (*env)->GetStringUTFChars(env, javaDn, 0);\ const char *dn = (*env)->GetStringUTFChars(env, javaDn, 0);\
int res; int res;
if (strlen(dn) > 0) if (strlen(dn) > 0)
res = account_set_display_name(acc, dn); res = account_set_display_name(acc, dn);
@ -481,7 +478,6 @@ JNIEXPORT jstring JNICALL
Java_com_tutpro_baresip_AccountKt_account_1aor(JNIEnv *env, jobject thiz, jstring javaAcc) { Java_com_tutpro_baresip_AccountKt_account_1aor(JNIEnv *env, jobject thiz, jstring javaAcc) {
const char *native_acc = (*env)->GetStringUTFChars(env, javaAcc, 0); const char *native_acc = (*env)->GetStringUTFChars(env, javaAcc, 0);
struct account *acc = (struct account *)strtoul(native_acc, NULL, 10); struct account *acc = (struct account *)strtoul(native_acc, NULL, 10);
(*env)->ReleaseStringUTFChars(env, javaAcc, native_acc); (*env)->ReleaseStringUTFChars(env, javaAcc, native_acc);
if (acc) if (acc)
return (*env)->NewStringUTF(env, account_aor(acc)); return (*env)->NewStringUTF(env, account_aor(acc));
@ -494,7 +490,6 @@ Java_com_tutpro_baresip_AccountKt_account_1auth_1user(JNIEnv *env, jobject thiz,
const char *native_acc = (*env)->GetStringUTFChars(env, javaAcc, 0); const char *native_acc = (*env)->GetStringUTFChars(env, javaAcc, 0);
struct account *acc = (struct account *)strtoul(native_acc, NULL, 10); struct account *acc = (struct account *)strtoul(native_acc, NULL, 10);
(*env)->ReleaseStringUTFChars(env, javaAcc, native_acc); (*env)->ReleaseStringUTFChars(env, javaAcc, native_acc);
if (acc) { if (acc) {
const char *au = account_auth_user(acc); const char *au = account_auth_user(acc);
if (au) if (au)
@ -512,7 +507,6 @@ Java_com_tutpro_baresip_AccountKt_account_1set_1auth_1user(JNIEnv *env, jobject
struct account *acc = (struct account *)strtoul(native_acc, NULL, 10); struct account *acc = (struct account *)strtoul(native_acc, NULL, 10);
(*env)->ReleaseStringUTFChars(env, javaAcc, native_acc); (*env)->ReleaseStringUTFChars(env, javaAcc, native_acc);
const char *user = (*env)->GetStringUTFChars(env, javaUser, 0); const char *user = (*env)->GetStringUTFChars(env, javaUser, 0);
int res; int res;
if (strlen(user) > 0) if (strlen(user) > 0)
res = account_set_auth_user(acc, user); res = account_set_auth_user(acc, user);
@ -527,7 +521,6 @@ Java_com_tutpro_baresip_AccountKt_account_1auth_1pass(JNIEnv *env, jobject thiz,
const char *native_acc = (*env)->GetStringUTFChars(env, javaAcc, 0); const char *native_acc = (*env)->GetStringUTFChars(env, javaAcc, 0);
struct account *acc = (struct account *)strtoul(native_acc, NULL, 10); struct account *acc = (struct account *)strtoul(native_acc, NULL, 10);
(*env)->ReleaseStringUTFChars(env, javaAcc, native_acc); (*env)->ReleaseStringUTFChars(env, javaAcc, native_acc);
if (acc) { if (acc) {
const char *ap = account_auth_pass(acc); const char *ap = account_auth_pass(acc);
if (ap) if (ap)
@ -545,7 +538,6 @@ Java_com_tutpro_baresip_AccountKt_account_1set_1auth_1pass(JNIEnv *env, jobject
struct account *acc = (struct account *)strtoul(native_acc, NULL, 10); struct account *acc = (struct account *)strtoul(native_acc, NULL, 10);
(*env)->ReleaseStringUTFChars(env, javaAcc, native_acc); (*env)->ReleaseStringUTFChars(env, javaAcc, native_acc);
const char *pass = (*env)->GetStringUTFChars(env, javaPass, 0); const char *pass = (*env)->GetStringUTFChars(env, javaPass, 0);
int res; int res;
if (strlen(pass) > 0) if (strlen(pass) > 0)
res = account_set_auth_pass(acc, pass); res = account_set_auth_pass(acc, pass);
@ -562,7 +554,6 @@ Java_com_tutpro_baresip_AccountKt_account_1outbound(JNIEnv *env, jobject thiz, j
struct account *acc = (struct account *) strtoul(native_acc, NULL, 10); struct account *acc = (struct account *) strtoul(native_acc, NULL, 10);
const uint16_t native_ix = ix; const uint16_t native_ix = ix;
const char *outbound; const char *outbound;
(*env)->ReleaseStringUTFChars(env, javaAcc, native_acc); (*env)->ReleaseStringUTFChars(env, javaAcc, native_acc);
if (acc) { if (acc) {
outbound = account_outbound(acc, native_ix); outbound = account_outbound(acc, native_ix);
@ -583,7 +574,6 @@ Java_com_tutpro_baresip_AccountKt_account_1set_1outbound(JNIEnv *env, jobject th
(*env)->ReleaseStringUTFChars(env, javaAcc, native_acc); (*env)->ReleaseStringUTFChars(env, javaAcc, native_acc);
const char *ob = (*env)->GetStringUTFChars(env, javaOb, 0); const char *ob = (*env)->GetStringUTFChars(env, javaOb, 0);
const uint16_t ix = javaIx; const uint16_t ix = javaIx;
int res; int res;
if (strlen(ob) > 0) if (strlen(ob) > 0)
res = account_set_outbound(acc, ob, ix); res = account_set_outbound(acc, ob, ix);
@ -603,7 +593,6 @@ Java_com_tutpro_baresip_AccountKt_account_1audio_1codec(JNIEnv *env, jobject thi
const struct list *codecl; const struct list *codecl;
char codec_buf[32]; char codec_buf[32];
struct le *le; struct le *le;
if (acc) { if (acc) {
codecl = account_aucodecl(acc); codecl = account_aucodecl(acc);
if (!list_isempty(codecl)) { if (!list_isempty(codecl)) {
@ -632,7 +621,6 @@ Java_com_tutpro_baresip_AccountKt_account_1set_1audio_1codecs(JNIEnv *env, jobje
struct account *acc = (struct account *) strtoul(native_acc, NULL, 10); struct account *acc = (struct account *) strtoul(native_acc, NULL, 10);
(*env)->ReleaseStringUTFChars(env, javaAcc, native_acc); (*env)->ReleaseStringUTFChars(env, javaAcc, native_acc);
const char *codecs = (*env)->GetStringUTFChars(env, javaCodecs, 0); const char *codecs = (*env)->GetStringUTFChars(env, javaCodecs, 0);
LOGD("setting audio codecs '%s'\n", codecs); LOGD("setting audio codecs '%s'\n", codecs);
int res = account_set_audio_codecs(acc, codecs); int res = account_set_audio_codecs(acc, codecs);
(*env)->ReleaseStringUTFChars(env, javaCodecs, codecs); (*env)->ReleaseStringUTFChars(env, javaCodecs, codecs);
@ -643,7 +631,6 @@ JNIEXPORT jint JNICALL
Java_com_tutpro_baresip_AccountKt_account_1regint(JNIEnv *env, jobject thiz, jstring javaAcc) { Java_com_tutpro_baresip_AccountKt_account_1regint(JNIEnv *env, jobject thiz, jstring javaAcc) {
const char *native_acc = (*env)->GetStringUTFChars(env, javaAcc, 0); const char *native_acc = (*env)->GetStringUTFChars(env, javaAcc, 0);
struct account *acc = (struct account *) strtoul(native_acc, NULL, 10); struct account *acc = (struct account *) strtoul(native_acc, NULL, 10);
(*env)->ReleaseStringUTFChars(env, javaAcc, native_acc); (*env)->ReleaseStringUTFChars(env, javaAcc, native_acc);
if (acc) if (acc)
return account_regint(acc); return account_regint(acc);
@ -658,7 +645,6 @@ Java_com_tutpro_baresip_AccountKt_account_1set_1regint(JNIEnv *env, jobject thiz
struct account *acc = (struct account *)strtoul(native_acc, NULL, 10); struct account *acc = (struct account *)strtoul(native_acc, NULL, 10);
(*env)->ReleaseStringUTFChars(env, javaAcc, native_acc); (*env)->ReleaseStringUTFChars(env, javaAcc, native_acc);
const uint32_t regint = javaRegint; const uint32_t regint = javaRegint;
return account_set_regint(acc, regint); return account_set_regint(acc, regint);
} }
@ -667,7 +653,6 @@ Java_com_tutpro_baresip_AccountKt_account_1mediaenc(JNIEnv *env, jobject thiz, j
{ {
const char *native_acc = (*env)->GetStringUTFChars(env, javaAcc, 0); const char *native_acc = (*env)->GetStringUTFChars(env, javaAcc, 0);
struct account *acc = (struct account *) strtoul(native_acc, NULL, 10); struct account *acc = (struct account *) strtoul(native_acc, NULL, 10);
(*env)->ReleaseStringUTFChars(env, javaAcc, native_acc); (*env)->ReleaseStringUTFChars(env, javaAcc, native_acc);
if (acc) { if (acc) {
const char *mediaenc = account_mediaenc(acc); const char *mediaenc = account_mediaenc(acc);
@ -683,7 +668,6 @@ Java_com_tutpro_baresip_AccountKt_account_1set_1mediaenc(JNIEnv *env, jobject th
struct account *acc = (struct account *)strtoul(native_acc, NULL, 10); struct account *acc = (struct account *)strtoul(native_acc, NULL, 10);
(*env)->ReleaseStringUTFChars(env, javaAcc, native_acc); (*env)->ReleaseStringUTFChars(env, javaAcc, native_acc);
const char *mencid = (*env)->GetStringUTFChars(env, javaMencid, 0); const char *mencid = (*env)->GetStringUTFChars(env, javaMencid, 0);
int res; int res;
if (strlen(mencid) > 0) if (strlen(mencid) > 0)
res = account_set_mediaenc(acc, mencid); res = account_set_mediaenc(acc, mencid);
@ -792,7 +776,6 @@ Java_com_tutpro_baresip_UserAgentKt_ua_1account(JNIEnv *env, jobject thiz, jstri
struct ua *ua = (struct ua *)strtoul(native_ua, NULL, 10); struct ua *ua = (struct ua *)strtoul(native_ua, NULL, 10);
struct account *acc; struct account *acc;
char acc_buf[256]; char acc_buf[256];
(*env)->ReleaseStringUTFChars(env, javaUA, native_ua); (*env)->ReleaseStringUTFChars(env, javaUA, native_ua);
acc_buf[0] = '\0'; acc_buf[0] = '\0';
if (ua) { if (ua) {
@ -807,7 +790,6 @@ Java_com_tutpro_baresip_UserAgentKt_ua_1aor(JNIEnv *env, jobject thiz, jstring j
{ {
const char *native_ua = (*env)->GetStringUTFChars(env, javaUA, 0); const char *native_ua = (*env)->GetStringUTFChars(env, javaUA, 0);
struct ua *ua = (struct ua *)strtoul(native_ua, NULL, 10); struct ua *ua = (struct ua *)strtoul(native_ua, NULL, 10);
(*env)->ReleaseStringUTFChars(env, javaUA, native_ua); (*env)->ReleaseStringUTFChars(env, javaUA, native_ua);
if (ua) if (ua)
return (*env)->NewStringUTF(env, ua_aor(ua)); return (*env)->NewStringUTF(env, ua_aor(ua));
@ -822,7 +804,6 @@ Java_com_tutpro_baresip_MainActivity_uag_1current_1set(JNIEnv *env, jobject thiz
struct ua *new_current_ua; struct ua *new_current_ua;
const char *native_ua = (*env)->GetStringUTFChars(env, javaUA, 0); const char *native_ua = (*env)->GetStringUTFChars(env, javaUA, 0);
struct ua *ua = (struct ua *)strtoul(native_ua, NULL, 10); struct ua *ua = (struct ua *)strtoul(native_ua, NULL, 10);
(*env)->ReleaseStringUTFChars(env, javaUA, native_ua); (*env)->ReleaseStringUTFChars(env, javaUA, native_ua);
LOGD("running uag_current_set on %s\n", native_ua); LOGD("running uag_current_set on %s\n", native_ua);
uag_current_set(ua); uag_current_set(ua);
@ -834,7 +815,6 @@ Java_com_tutpro_baresip_MainActivity_uag_1current(JNIEnv *env, jobject thiz)
{ {
struct ua *current_ua = uag_current(); struct ua *current_ua = uag_current();
char ua_buf[256]; char ua_buf[256];
if (current_ua == NULL) if (current_ua == NULL)
ua_buf[0] = '\0'; ua_buf[0] = '\0';
else else
@ -847,7 +827,6 @@ Java_com_tutpro_baresip_Api_call_1peeruri(JNIEnv *env, jobject thiz, jstring jav
{ {
const char *native_call = (*env)->GetStringUTFChars(env, javaCall, 0); const char *native_call = (*env)->GetStringUTFChars(env, javaCall, 0);
struct call *call; struct call *call;
call = (struct call *)strtoul(native_call, NULL, 10); call = (struct call *)strtoul(native_call, NULL, 10);
(*env)->ReleaseStringUTFChars(env, javaCall, native_call); (*env)->ReleaseStringUTFChars(env, javaCall, native_call);
return (*env)->NewStringUTF(env, call_peeruri(call)); return (*env)->NewStringUTF(env, call_peeruri(call));
@ -862,17 +841,17 @@ Java_com_tutpro_baresip_MainActivity_ua_1connect(JNIEnv *env, jobject thiz,
const char *native_ua = (*env)->GetStringUTFChars(env, javaUA, 0); const char *native_ua = (*env)->GetStringUTFChars(env, javaUA, 0);
const char *native_uri = (*env)->GetStringUTFChars(env, javaURI, 0); const char *native_uri = (*env)->GetStringUTFChars(env, javaURI, 0);
char call_buf[256]; char call_buf[256];
LOGD("connecting ua %s to %s\n", native_ua, native_uri); LOGD("connecting ua %s to %s\n", native_ua, native_uri);
ua = (struct ua *)strtoul(native_ua, NULL, 10); ua = (struct ua *)strtoul(native_ua, NULL, 10);
re_thread_enter();
err = ua_connect(ua, &call, NULL, native_uri, NULL, VIDMODE_OFF); err = ua_connect(ua, &call, NULL, native_uri, NULL, VIDMODE_OFF);
re_thread_leave();
if (err) { if (err) {
LOGW("connecting to %s failed with error %d\n", native_uri, err); LOGW("connecting to %s failed with error %d\n", native_uri, err);
call_buf[0] = '\0'; call_buf[0] = '\0';
} else { } else {
sprintf(call_buf, "%lu", (unsigned long)call); sprintf(call_buf, "%lu", (unsigned long)call);
} }
(*env)->ReleaseStringUTFChars(env, javaUA, native_ua); (*env)->ReleaseStringUTFChars(env, javaUA, native_ua);
(*env)->ReleaseStringUTFChars(env, javaURI, native_uri); (*env)->ReleaseStringUTFChars(env, javaURI, native_uri);
return (*env)->NewStringUTF(env, call_buf); return (*env)->NewStringUTF(env, call_buf);
@ -888,11 +867,12 @@ Java_com_tutpro_baresip_MainActivity_ua_1answer(JNIEnv *env, jobject thiz,
struct ua *ua = (struct ua *) strtoul(native_ua, NULL, 10); struct ua *ua = (struct ua *) strtoul(native_ua, NULL, 10);
struct call *call = (struct call *) strtoul(native_call, NULL, 10); struct call *call = (struct call *) strtoul(native_call, NULL, 10);
play = mem_deref(play); play = mem_deref(play);
re_thread_enter();
ua_answer(ua, call); ua_answer(ua, call);
re_thread_leave();
(*env)->ReleaseStringUTFChars(env, javaUA, native_ua); (*env)->ReleaseStringUTFChars(env, javaUA, native_ua);
(*env)->ReleaseStringUTFChars(env, javaCall, native_call); (*env)->ReleaseStringUTFChars(env, javaCall, native_call);
return; return;
} }
JNIEXPORT jint JNICALL JNIEXPORT jint JNICALL
@ -900,6 +880,7 @@ Java_com_tutpro_baresip_MainActivity_ua_1hold_1answer(JNIEnv *env, jobject thiz,
jstring javaUA, jstring javaCall) { jstring javaUA, jstring javaCall) {
const char *native_ua = (*env)->GetStringUTFChars(env, javaUA, 0); const char *native_ua = (*env)->GetStringUTFChars(env, javaUA, 0);
const char *native_call = (*env)->GetStringUTFChars(env, javaCall, 0); const char *native_call = (*env)->GetStringUTFChars(env, javaCall, 0);
int ret;
LOGD("answering call %s/%s\n", native_ua, native_call); LOGD("answering call %s/%s\n", native_ua, native_call);
struct ua *ua = (struct ua *) strtoul(native_ua, NULL, 10); struct ua *ua = (struct ua *) strtoul(native_ua, NULL, 10);
(*env)->ReleaseStringUTFChars(env, javaUA, native_ua); (*env)->ReleaseStringUTFChars(env, javaUA, native_ua);
@ -911,9 +892,12 @@ Java_com_tutpro_baresip_MainActivity_ua_1hold_1answer(JNIEnv *env, jobject thiz,
(*env)->ReleaseStringUTFChars(env, javaCall, native_call); (*env)->ReleaseStringUTFChars(env, javaCall, native_call);
play = mem_deref(play); play = mem_deref(play);
audio_set_source(call_audio(ua_call(uag_current())), NULL, NULL); audio_set_source(call_audio(ua_call(uag_current())), NULL, NULL);
re_thread_enter();
call_hold(ua_call(uag_current()), true); call_hold(ua_call(uag_current()), true);
ua_answer(ua, call); ua_answer(ua, call);
return ua_hold_answer(ua, call); ret = ua_hold_answer(ua, call);
re_thread_leave();
return ret;
} }
JNIEXPORT jint JNICALL JNIEXPORT jint JNICALL
@ -921,13 +905,16 @@ Java_com_tutpro_baresip_MainActivity_call_1hold(JNIEnv *env, jobject thiz,
jstring javaCall) { jstring javaCall) {
const char *native_call = (*env)->GetStringUTFChars(env, javaCall, 0); const char *native_call = (*env)->GetStringUTFChars(env, javaCall, 0);
struct call *call = (struct call *) strtoul(native_call, NULL, 10); struct call *call = (struct call *) strtoul(native_call, NULL, 10);
int ret;
LOGD("holding call %s\n", native_call); LOGD("holding call %s\n", native_call);
(*env)->ReleaseStringUTFChars(env, javaCall, native_call); (*env)->ReleaseStringUTFChars(env, javaCall, native_call);
struct audio *au = call_audio(call); struct audio *au = call_audio(call);
audio_set_hold(au, true); audio_set_hold(au, true);
audio_set_source(au, NULL, NULL); audio_set_source(au, NULL, NULL);
return call_hold(call, true); re_thread_enter();
ret = call_hold(call, true);
re_thread_leave();
return ret;
} }
JNIEXPORT jint JNICALL JNIEXPORT jint JNICALL
@ -935,13 +922,16 @@ Java_com_tutpro_baresip_MainActivity_call_1unhold(JNIEnv *env, jobject thiz,
jstring javaCall) { jstring javaCall) {
const char *native_call = (*env)->GetStringUTFChars(env, javaCall, 0); const char *native_call = (*env)->GetStringUTFChars(env, javaCall, 0);
struct call *call = (struct call *) strtoul(native_call, NULL, 10); struct call *call = (struct call *) strtoul(native_call, NULL, 10);
int ret;
LOGD("unholding call %s\n", native_call); LOGD("unholding call %s\n", native_call);
(*env)->ReleaseStringUTFChars(env, javaCall, native_call); (*env)->ReleaseStringUTFChars(env, javaCall, native_call);
struct audio *au = call_audio(call); struct audio *au = call_audio(call);
audio_set_hold(au, false); audio_set_hold(au, false);
audio_set_source(au, "opensles", "nil"); audio_set_source(au, "opensles", "nil");
return call_hold(call, false); re_thread_enter();
ret = call_hold(call, false);
re_thread_leave();
return ret;
} }
JNIEXPORT void JNICALL JNIEXPORT void JNICALL
@ -955,10 +945,12 @@ Java_com_tutpro_baresip_MainActivity_ua_1hangup(JNIEnv *env, jobject thiz,
const uint16_t native_code = code; const uint16_t native_code = code;
const char *native_reason = (*env)->GetStringUTFChars(env, reason, 0); const char *native_reason = (*env)->GetStringUTFChars(env, reason, 0);
LOGD("hanging up call %s/%s\n", native_ua, native_call); LOGD("hanging up call %s/%s\n", native_ua, native_call);
re_thread_enter();
if (strlen(native_reason) == 0) if (strlen(native_reason) == 0)
ua_hangup(ua, call, native_code, NULL); ua_hangup(ua, call, native_code, NULL);
else else
ua_hangup(ua, call, native_code, native_reason); ua_hangup(ua, call, native_code, native_reason);
re_thread_leave();
(*env)->ReleaseStringUTFChars(env, javaUA, native_ua); (*env)->ReleaseStringUTFChars(env, javaUA, native_ua);
(*env)->ReleaseStringUTFChars(env, javaCall, native_call); (*env)->ReleaseStringUTFChars(env, javaCall, native_call);
(*env)->ReleaseStringUTFChars(env, reason, native_reason); (*env)->ReleaseStringUTFChars(env, reason, native_reason);
@ -986,14 +978,12 @@ Java_com_tutpro_baresip_MessageActivity_message_1send(JNIEnv *env, jobject thiz,
const char *native_peer = (*env)->GetStringUTFChars(env, javaPeer, 0); const char *native_peer = (*env)->GetStringUTFChars(env, javaPeer, 0);
const char *native_msg = (*env)->GetStringUTFChars(env, javaMsg, 0); const char *native_msg = (*env)->GetStringUTFChars(env, javaMsg, 0);
const char *native_time = (*env)->GetStringUTFChars(env, javaTime, 0); const char *native_time = (*env)->GetStringUTFChars(env, javaTime, 0);
LOGD("sending message from ua %s to %s at %s\n", native_ua, native_peer, native_time); LOGD("sending message from ua %s to %s at %s\n", native_ua, native_peer, native_time);
ua = (struct ua *)strtoul(native_ua, NULL, 10); ua = (struct ua *)strtoul(native_ua, NULL, 10);
int err = message_send(ua, native_peer, native_msg, send_resp_handler, (void *)native_time); int err = message_send(ua, native_peer, native_msg, send_resp_handler, (void *)native_time);
if (err) { if (err) {
LOGW("message_send failed with error %d\n", err); LOGW("message_send failed with error %d\n", err);
} }
(*env)->ReleaseStringUTFChars(env, javaUA, native_ua); (*env)->ReleaseStringUTFChars(env, javaUA, native_ua);
(*env)->ReleaseStringUTFChars(env, javaPeer, native_peer); (*env)->ReleaseStringUTFChars(env, javaPeer, native_peer);
(*env)->ReleaseStringUTFChars(env, javaMsg, native_msg); (*env)->ReleaseStringUTFChars(env, javaMsg, native_msg);
@ -1060,7 +1050,6 @@ Java_com_tutpro_baresip_Api_audio_1codecs(JNIEnv *env, jobject thiz)
char *start = &(codec_buf[0]); char *start = &(codec_buf[0]);
unsigned int left = sizeof codec_buf; unsigned int left = sizeof codec_buf;
int len; int len;
for (le = list_head(aucodecl); le != NULL; le = le->next) { for (le = list_head(aucodecl); le != NULL; le = le->next) {
const struct aucodec *ac = le->data; const struct aucodec *ac = le->data;
if (start == &(codec_buf[0])) if (start == &(codec_buf[0]))
@ -1077,16 +1066,3 @@ Java_com_tutpro_baresip_Api_audio_1codecs(JNIEnv *env, jobject thiz)
} }
return (*env)->NewStringUTF(env, codec_buf); return (*env)->NewStringUTF(env, codec_buf);
} }
JNIEXPORT jboolean JNICALL
Java_com_tutpro_baresip_Api_uri_1decode(JNIEnv *env, jobject thiz, jstring javaUri) {
const char *uri = (*env)->GetStringUTFChars(env, javaUri, 0);
struct pl pl;
struct uri uri2;
LOGD("decoding uri '%s'\n", uri);
pl_set_str(&pl, uri);
int res = uri_decode(&uri2, &pl);
(*env)->ReleaseStringUTFChars(env, javaUri, uri);
return res == 0;
}

View File

@ -5,6 +5,5 @@ object Api {
external fun audio_codecs(): String external fun audio_codecs(): String
external fun call_peeruri(callp: String): String external fun call_peeruri(callp: String): String
external fun cmd_exec(cmd: String): Int external fun cmd_exec(cmd: String): Int
external fun uri_decode(uri: String): Boolean
} }