From b58f81dbea1357a7bcd28d17a04768f3404dc942 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Wed, 27 Apr 2016 15:07:31 +0200 Subject: [PATCH 1/6] Fixed lpc2xml_test programm --- coreapi/lpc2xml.c | 2 ++ tools/lpc2xml_test.c | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/coreapi/lpc2xml.c b/coreapi/lpc2xml.c index fbdb471ba..3180243d3 100644 --- a/coreapi/lpc2xml.c +++ b/coreapi/lpc2xml.c @@ -169,6 +169,7 @@ static void processSection_cb(const char *entry, struct __processSectionCtx *ctx if (lp_config_get_skip_flag_for_entry(ctx->ctx->lpc, ctx->section, entry)) { lpc2xml_log(ctx->ctx, LPC2XML_WARNING, "Skipped entry %s", entry); + ctx->ret = 0; return; } @@ -210,6 +211,7 @@ static void processConfig_cb(const char *section, struct __processConfigCtx *ctx if (lp_config_get_skip_flag_for_section(ctx->ctx->lpc, section)) { lpc2xml_log(ctx->ctx, LPC2XML_WARNING, "Skipped section %s", section); + ctx->ret = 0; return; } diff --git a/tools/lpc2xml_test.c b/tools/lpc2xml_test.c index b52ecbb51..ffb17f05b 100644 --- a/tools/lpc2xml_test.c +++ b/tools/lpc2xml_test.c @@ -56,8 +56,8 @@ int main(int argc, char *argv[]) { lpc = lp_config_new(argv[2]); if(strcmp("convert", argv[1]) == 0 && argc == 4) { ctx = lpc2xml_context_new(cb_function, NULL); - lpc2xml_convert_file(ctx, argv[3]); lpc2xml_set_lpc(ctx, lpc); + lpc2xml_convert_file(ctx, argv[3]); lpc2xml_context_destroy(ctx); } else if (strcmp("dump", argv[1]) == 0 && argc == 3) { char *dump = lp_config_dump_as_xml(lpc); From 046184b54132b7d391a28011c08cf2aec459aaab Mon Sep 17 00:00:00 2001 From: Gautier Pelloux-Prayer Date: Wed, 27 Apr 2016 15:25:14 +0200 Subject: [PATCH 2/6] event.c: fix crash with event beeing freed twice in case of error --- coreapi/event.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/coreapi/event.c b/coreapi/event.c index e8d2ac49a..414887154 100644 --- a/coreapi/event.c +++ b/coreapi/event.c @@ -332,7 +332,17 @@ const char* linphone_event_get_custom_header(LinphoneEvent* ev, const char* name void linphone_event_terminate(LinphoneEvent *lev){ + // if event was already terminated (including on error), we should not terminate it again + // otherwise it will be unreffed twice. + if (lev->publish_state == LinphonePublishError || lev->publish_state == LinphoneSubscriptionTerminated) { + return; + } + if (lev->subscription_state == LinphoneSubscriptionError || lev->subscription_state == LinphoneSubscriptionTerminated) { + return; + } + lev->terminating=TRUE; + if (lev->dir==LinphoneSubscriptionIncoming){ sal_notify_close(lev->op); }else if (lev->dir==LinphoneSubscriptionOutgoing){ From 08e0384abe9989ee0f7c673f6b8645b6164c56e9 Mon Sep 17 00:00:00 2001 From: Gautier Pelloux-Prayer Date: Wed, 27 Apr 2016 15:40:30 +0200 Subject: [PATCH 3/6] event.c: fix compilation... --- coreapi/event.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/coreapi/event.c b/coreapi/event.c index 414887154..2d6e7eaf5 100644 --- a/coreapi/event.c +++ b/coreapi/event.c @@ -334,7 +334,7 @@ const char* linphone_event_get_custom_header(LinphoneEvent* ev, const char* name void linphone_event_terminate(LinphoneEvent *lev){ // if event was already terminated (including on error), we should not terminate it again // otherwise it will be unreffed twice. - if (lev->publish_state == LinphonePublishError || lev->publish_state == LinphoneSubscriptionTerminated) { + if (lev->publish_state == LinphonePublishError || lev->publish_state == LinphonePublishCleared) { return; } if (lev->subscription_state == LinphoneSubscriptionError || lev->subscription_state == LinphoneSubscriptionTerminated) { @@ -414,10 +414,10 @@ LinphoneCore *linphone_event_get_core(const LinphoneEvent *lev){ static belle_sip_error_code _linphone_event_marshall(belle_sip_object_t *obj, char* buff, size_t buff_size, size_t *offset) { LinphoneEvent *ev = (LinphoneEvent*)obj; belle_sip_error_code err = BELLE_SIP_OK; - - err = belle_sip_snprintf(buff, buff_size, offset, "%s of %s", ev->dir == LinphoneSubscriptionIncoming ? + + err = belle_sip_snprintf(buff, buff_size, offset, "%s of %s", ev->dir == LinphoneSubscriptionIncoming ? "Incoming Subscribe" : (ev->dir == LinphoneSubscriptionOutgoing ? "Outgoing subscribe" : "Publish"), ev->name); - + return err; } From 6429f520bfc628ee73e89829a999c852cd99823d Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Wed, 27 Apr 2016 16:11:09 +0200 Subject: [PATCH 4/6] Removed LinphoneFriendList.closeSubscriptions method from JNI wrapper --- coreapi/linphonecore_jni.cc | 4 ---- java/common/org/linphone/core/LinphoneFriendList.java | 1 - java/impl/org/linphone/core/LinphoneFriendListImpl.java | 8 -------- 3 files changed, 13 deletions(-) diff --git a/coreapi/linphonecore_jni.cc b/coreapi/linphonecore_jni.cc index 6aa293d78..f9c4b019c 100644 --- a/coreapi/linphonecore_jni.cc +++ b/coreapi/linphonecore_jni.cc @@ -3458,10 +3458,6 @@ extern "C" jobjectArray Java_org_linphone_core_LinphoneFriendListImpl_getFriendL return jFriends; } -extern "C" void Java_org_linphone_core_LinphoneFriendListImpl_closeSubscriptions(JNIEnv* env, jobject thiz, jlong friendListptr) { - linphone_friend_list_close_subscriptions((LinphoneFriendList*)friendListptr); -} - extern "C" void Java_org_linphone_core_LinphoneFriendListImpl_updateSubscriptions(JNIEnv* env ,jobject thiz ,jlong friendListptr diff --git a/java/common/org/linphone/core/LinphoneFriendList.java b/java/common/org/linphone/core/LinphoneFriendList.java index 57a354e21..5f6b480d1 100644 --- a/java/common/org/linphone/core/LinphoneFriendList.java +++ b/java/common/org/linphone/core/LinphoneFriendList.java @@ -28,7 +28,6 @@ public interface LinphoneFriendList { public void addLocalFriend(LinphoneFriend friend); public LinphoneFriend[] getFriendList(); public void updateSubscriptions(LinphoneProxyConfig proxyConfig,boolean onlyWhenRegistered); - public void closeSubscriptions(); public void enableSubscriptions(boolean enable); public LinphoneFriend findFriendByUri(String uri); public void setUri(String uri); diff --git a/java/impl/org/linphone/core/LinphoneFriendListImpl.java b/java/impl/org/linphone/core/LinphoneFriendListImpl.java index 4a531902d..2489bfa7b 100644 --- a/java/impl/org/linphone/core/LinphoneFriendListImpl.java +++ b/java/impl/org/linphone/core/LinphoneFriendListImpl.java @@ -30,7 +30,6 @@ class LinphoneFriendListImpl implements LinphoneFriendList, Serializable { private native void addLocalFriend(long nativePtr, long friendPtr); private native LinphoneFriend[] getFriendList(long nativePtr); private native void updateSubscriptions(long nativePtr, long proxyConfigPtr, boolean onlyWhenRegistered); - private native void closeSubscriptions(long nativePtr); private native void enableSubscriptions(long nativePtr, boolean enable); private native Object getCore(long ptr); private native LinphoneFriend findFriendByUri(long nativePtr, String uri); @@ -75,13 +74,6 @@ class LinphoneFriendListImpl implements LinphoneFriendList, Serializable { } } - @Override - public void closeSubscriptions() { - synchronized(getSyncObject()) { - closeSubscriptions(nativePtr); - } - } - @Override public void enableSubscriptions(boolean enable) { synchronized(getSyncObject()) { From 293c265e7d7c66ff20fd9ba217ebe0a60f37720f Mon Sep 17 00:00:00 2001 From: Gautier Pelloux-Prayer Date: Wed, 27 Apr 2016 16:18:05 +0200 Subject: [PATCH 5/6] linphonecore.c: speedup and reduce maximum time to properly shutdown linphone to avoid sigkill from system when linphone takes too long --- coreapi/linphonecore.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/coreapi/linphonecore.c b/coreapi/linphonecore.c index cc39f1d81..f179f0a03 100644 --- a/coreapi/linphonecore.c +++ b/coreapi/linphonecore.c @@ -6513,7 +6513,7 @@ static void codecs_config_uninit(LinphoneCore *lc) ms_list_free_with_data(lc->codecs_conf.text_codecs, (void (*)(void*))payload_type_destroy); } -void ui_config_uninit(LinphoneCore* lc) +void friends_config_uninit(LinphoneCore* lc) { ms_message("Destroying friends."); lc->friends_lists = ms_list_free_with_data(lc->friends_lists, (void (*)(void*))_linphone_friend_list_release); @@ -6555,19 +6555,19 @@ static void linphone_core_uninit(LinphoneCore *lc) LinphoneCall *the_call = lc->calls->data; linphone_core_terminate_call(lc,the_call); linphone_core_iterate(lc); - ms_usleep(50000); + ms_usleep(10000); } for (elem = lc->friends_lists; elem != NULL; elem = ms_list_next(elem)) { LinphoneFriendList *list = (LinphoneFriendList *)elem->data; - linphone_friend_list_enable_subscriptions(list, FALSE); + linphone_friend_list_enable_subscriptions(list,FALSE); if (list->event) wait_until_unsubscribe = TRUE; } /*give a chance to unsubscribe, might be optimized*/ - for (i=0; wait_until_unsubscribe && i<20; i++) { + for (i=0; wait_until_unsubscribe && i<50; i++) { linphone_core_iterate(lc); - ms_usleep(50000); + ms_usleep(10000); } lc->chatrooms = ms_list_free_with_data(lc->chatrooms, (MSIterateFunc)linphone_chat_room_release); @@ -6582,7 +6582,7 @@ static void linphone_core_uninit(LinphoneCore *lc) lc->msevq=NULL; /* save all config */ - ui_config_uninit(lc); + friends_config_uninit(lc); sip_config_uninit(lc); net_config_uninit(lc); rtp_config_uninit(lc); From 73207c0b52e7f3a5a8d6b40c11ecdbf4a62555a1 Mon Sep 17 00:00:00 2001 From: Jehan Monnier Date: Wed, 27 Apr 2016 18:26:25 +0200 Subject: [PATCH 6/6] improve presence tester reliability --- tester/liblinphone_tester.h | 3 + tester/presence_server_tester.c | 4 +- tester/presence_tester.c | 133 +++++++++++++++++--------------- 3 files changed, 76 insertions(+), 64 deletions(-) diff --git a/tester/liblinphone_tester.h b/tester/liblinphone_tester.h index c9dbe89ba..887e2734a 100644 --- a/tester/liblinphone_tester.h +++ b/tester/liblinphone_tester.h @@ -192,6 +192,9 @@ typedef struct _stats { int number_of_LinphonePresenceActivityWorking; int number_of_LinphonePresenceActivityWorship; const LinphonePresenceModel *last_received_presence; + + int number_of_LinphonePresenceBasicStatusOpen; + int number_of_LinphonePresenceBasicStatusClosed; int number_of_inforeceived; LinphoneInfoMessage* last_received_info_message; diff --git a/tester/presence_server_tester.c b/tester/presence_server_tester.c index b1aa2acde..0cf173a0d 100644 --- a/tester/presence_server_tester.c +++ b/tester/presence_server_tester.c @@ -140,7 +140,7 @@ static void subscriber_no_longer_reachable(void){ linphone_core_add_friend(marie->lc, lf); linphone_friend_unref(lf); - BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphonePresenceActivityOnline,1, 2000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphonePresenceBasicStatusOpen,1, 2000)); /*make sure marie subscribe is not reset by accident because of code below located in linphone_core_iterate @@ -162,7 +162,7 @@ static void subscriber_no_longer_reachable(void){ //sal_set_send_error(marie->lc->sal,0); /*because of notify timeout detected by server, so subscription is reset*/ - previous_number_of_LinphonePresenceActivityOffline = marie->stat.number_of_LinphonePresenceActivityOffline; + previous_number_of_LinphonePresenceActivityOffline = marie->stat.number_of_LinphonePresenceBasicStatusClosed; BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphonePresenceActivityOffline,previous_number_of_LinphonePresenceActivityOffline+1, 4000)); // now subscription is supposed to be dead because notify was not answered in time. diff --git a/tester/presence_tester.c b/tester/presence_tester.c index 74cd75e6e..750b92921 100644 --- a/tester/presence_tester.c +++ b/tester/presence_tester.c @@ -48,74 +48,83 @@ void new_subscription_requested(LinphoneCore *lc, LinphoneFriend *lf, const char void notify_presence_received(LinphoneCore *lc, LinphoneFriend * lf) { stats* counters; - LinphonePresenceActivity *activity = NULL; + + int i; char* from=linphone_address_as_string(linphone_friend_get_address(lf)); ms_message("New Notify request from [%s] ",from); ms_free(from); counters = get_stats(lc); counters->number_of_NotifyPresenceReceived++; - counters->last_received_presence = linphone_friend_get_presence_model(lf); - activity = linphone_presence_model_get_activity(counters->last_received_presence); - switch (linphone_presence_activity_get_type(activity)) { - case LinphonePresenceActivityOffline: - counters->number_of_LinphonePresenceActivityOffline++; break; - case LinphonePresenceActivityOnline: - counters->number_of_LinphonePresenceActivityOnline++; break; - case LinphonePresenceActivityAppointment: - counters->number_of_LinphonePresenceActivityAppointment++; break; - case LinphonePresenceActivityAway: - counters->number_of_LinphonePresenceActivityAway++; break; - case LinphonePresenceActivityBreakfast: - counters->number_of_LinphonePresenceActivityBreakfast++; break; - case LinphonePresenceActivityBusy: - counters->number_of_LinphonePresenceActivityBusy++; break; - case LinphonePresenceActivityDinner: - counters->number_of_LinphonePresenceActivityDinner++; break; - case LinphonePresenceActivityHoliday: - counters->number_of_LinphonePresenceActivityHoliday++; break; - case LinphonePresenceActivityInTransit: - counters->number_of_LinphonePresenceActivityInTransit++; break; - case LinphonePresenceActivityLookingForWork: - counters->number_of_LinphonePresenceActivityLookingForWork++; break; - case LinphonePresenceActivityLunch: - counters->number_of_LinphonePresenceActivityLunch++; break; - case LinphonePresenceActivityMeal: - counters->number_of_LinphonePresenceActivityMeal++; break; - case LinphonePresenceActivityMeeting: - counters->number_of_LinphonePresenceActivityMeeting++; break; - case LinphonePresenceActivityOnThePhone: - counters->number_of_LinphonePresenceActivityOnThePhone++; break; - case LinphonePresenceActivityOther: - counters->number_of_LinphonePresenceActivityOther++; break; - case LinphonePresenceActivityPerformance: - counters->number_of_LinphonePresenceActivityPerformance++; break; - case LinphonePresenceActivityPermanentAbsence: - counters->number_of_LinphonePresenceActivityPermanentAbsence++; break; - case LinphonePresenceActivityPlaying: - counters->number_of_LinphonePresenceActivityPlaying++; break; - case LinphonePresenceActivityPresentation: - counters->number_of_LinphonePresenceActivityPresentation++; break; - case LinphonePresenceActivityShopping: - counters->number_of_LinphonePresenceActivityShopping++; break; - case LinphonePresenceActivitySleeping: - counters->number_of_LinphonePresenceActivitySleeping++; break; - case LinphonePresenceActivitySpectator: - counters->number_of_LinphonePresenceActivitySpectator++; break; - case LinphonePresenceActivitySteering: - counters->number_of_LinphonePresenceActivitySteering++; break; - case LinphonePresenceActivityTravel: - counters->number_of_LinphonePresenceActivityTravel++; break; - case LinphonePresenceActivityTV: - counters->number_of_LinphonePresenceActivityTV++; break; - case LinphonePresenceActivityUnknown: - counters->number_of_LinphonePresenceActivityUnknown++; break; - case LinphonePresenceActivityVacation: - counters->number_of_LinphonePresenceActivityVacation++; break; - case LinphonePresenceActivityWorking: - counters->number_of_LinphonePresenceActivityWorking++; break; - case LinphonePresenceActivityWorship: - counters->number_of_LinphonePresenceActivityWorship++; break; + if (linphone_presence_model_get_basic_status(counters->last_received_presence) == LinphonePresenceBasicStatusOpen) { + counters->number_of_LinphonePresenceBasicStatusOpen++; + } else if (linphone_presence_model_get_basic_status(counters->last_received_presence) == LinphonePresenceBasicStatusClosed) { + counters->number_of_LinphonePresenceBasicStatusClosed++; + } else { + ms_error("unexpeted basioc status [%i]",linphone_presence_model_get_basic_status(counters->last_received_presence)); + } + for (i=0;ilast_received_presence); i++) { + LinphonePresenceActivity *activity = linphone_presence_model_get_nth_activity(counters->last_received_presence, i); + switch (linphone_presence_activity_get_type(activity)) { + case LinphonePresenceActivityOffline: + counters->number_of_LinphonePresenceActivityOffline++; break; + case LinphonePresenceActivityOnline: + counters->number_of_LinphonePresenceActivityOnline++; break; + case LinphonePresenceActivityAppointment: + counters->number_of_LinphonePresenceActivityAppointment++; break; + case LinphonePresenceActivityAway: + counters->number_of_LinphonePresenceActivityAway++; break; + case LinphonePresenceActivityBreakfast: + counters->number_of_LinphonePresenceActivityBreakfast++; break; + case LinphonePresenceActivityBusy: + counters->number_of_LinphonePresenceActivityBusy++; break; + case LinphonePresenceActivityDinner: + counters->number_of_LinphonePresenceActivityDinner++; break; + case LinphonePresenceActivityHoliday: + counters->number_of_LinphonePresenceActivityHoliday++; break; + case LinphonePresenceActivityInTransit: + counters->number_of_LinphonePresenceActivityInTransit++; break; + case LinphonePresenceActivityLookingForWork: + counters->number_of_LinphonePresenceActivityLookingForWork++; break; + case LinphonePresenceActivityLunch: + counters->number_of_LinphonePresenceActivityLunch++; break; + case LinphonePresenceActivityMeal: + counters->number_of_LinphonePresenceActivityMeal++; break; + case LinphonePresenceActivityMeeting: + counters->number_of_LinphonePresenceActivityMeeting++; break; + case LinphonePresenceActivityOnThePhone: + counters->number_of_LinphonePresenceActivityOnThePhone++; break; + case LinphonePresenceActivityOther: + counters->number_of_LinphonePresenceActivityOther++; break; + case LinphonePresenceActivityPerformance: + counters->number_of_LinphonePresenceActivityPerformance++; break; + case LinphonePresenceActivityPermanentAbsence: + counters->number_of_LinphonePresenceActivityPermanentAbsence++; break; + case LinphonePresenceActivityPlaying: + counters->number_of_LinphonePresenceActivityPlaying++; break; + case LinphonePresenceActivityPresentation: + counters->number_of_LinphonePresenceActivityPresentation++; break; + case LinphonePresenceActivityShopping: + counters->number_of_LinphonePresenceActivityShopping++; break; + case LinphonePresenceActivitySleeping: + counters->number_of_LinphonePresenceActivitySleeping++; break; + case LinphonePresenceActivitySpectator: + counters->number_of_LinphonePresenceActivitySpectator++; break; + case LinphonePresenceActivitySteering: + counters->number_of_LinphonePresenceActivitySteering++; break; + case LinphonePresenceActivityTravel: + counters->number_of_LinphonePresenceActivityTravel++; break; + case LinphonePresenceActivityTV: + counters->number_of_LinphonePresenceActivityTV++; break; + case LinphonePresenceActivityUnknown: + counters->number_of_LinphonePresenceActivityUnknown++; break; + case LinphonePresenceActivityVacation: + counters->number_of_LinphonePresenceActivityVacation++; break; + case LinphonePresenceActivityWorking: + counters->number_of_LinphonePresenceActivityWorking++; break; + case LinphonePresenceActivityWorship: + counters->number_of_LinphonePresenceActivityWorship++; break; + } } }