diff options
Diffstat (limited to 'community/linphone')
-rw-r--r-- | community/linphone/PKGBUILD | 18 | ||||
-rw-r--r-- | community/linphone/port-to-exosip-4.patch | 2800 |
2 files changed, 6 insertions, 2812 deletions
diff --git a/community/linphone/PKGBUILD b/community/linphone/PKGBUILD index 8e8c66589..e2a19655d 100644 --- a/community/linphone/PKGBUILD +++ b/community/linphone/PKGBUILD @@ -1,28 +1,22 @@ -# $Id: PKGBUILD 99895 2013-10-31 02:20:19Z allan $ +# $Id: PKGBUILD 107167 2014-03-13 17:22:00Z spupykin $ # Maintainer: Sergej Pupykin <pupykin.s+arch@gmail.com> # Contributor: Darwin Bautista <djclue917@gmail.com> pkgname=linphone -pkgver=3.6.1 +pkgver=3.7.0 pkgrel=1 pkgdesc="A Voice-over-IP phone" arch=('i686' 'x86_64') url="http://www.linphone.org/index.php/eng" license=('GPL') depends=('alsa-lib' 'ffmpeg' 'gtk2' 'libexosip2' 'speex' 'libv4l' 'libglade' 'v4l-utils' - 'libpulse' 'libxv' 'mediastreamer' 'ortp' 'libzrtpcpp' 'bcg729' 'libsoup') + 'libpulse' 'libxv' 'mediastreamer' 'ortp' 'libzrtpcpp' 'bcg729' 'libsoup' + 'belle-sip') makedepends=('pkgconfig' 'perlxml' 'intltool' 'sgmltools-lite') optdepends=('pulseaudio') options=('!emptydirs') -source=("http://download-mirror.savannah.gnu.org/releases/${pkgname}/3.6.x/sources/${pkgname}-$pkgver.tar.gz" - "port-to-exosip-4.patch") -md5sums=('f59b99ec2501ebbb02969c885be4c4c5' - '45178a854c9321c58296dead77fbc5dc') - -prepare() { - cd $srcdir/$pkgname-$pkgver - patch -p1 <$srcdir/port-to-exosip-4.patch -} +source=("http://download-mirror.savannah.gnu.org/releases/${pkgname}/3.7.x/sources/${pkgname}-$pkgver.tar.gz") +md5sums=('6978492712bdacd452e375254d6033ae') build() { cd $pkgname-$pkgver diff --git a/community/linphone/port-to-exosip-4.patch b/community/linphone/port-to-exosip-4.patch deleted file mode 100644 index 4c0814ddd..000000000 --- a/community/linphone/port-to-exosip-4.patch +++ /dev/null @@ -1,2800 +0,0 @@ -Description: post to libexosip4 API -Author: Felix Lechner <felix.lechner@gmail.com> - -Only in linphone-3.6.1: aclocal.m4 -Only in linphone-3.6.1/build/macos: Makefile.in -Only in linphone-3.6.1/build: Makefile.in -Only in linphone-3.6.1: compile -Only in linphone-3.6.1: config.guess -Only in linphone-3.6.1: config.h.in -Only in linphone-3.6.1: config.sub -Only in linphone-3.6.1: configure -Only in linphone-3.6.1/console: Makefile.in ---- a/coreapi/authentication.c -+++ b/coreapi/authentication.c -@@ -308,7 +308,7 @@ void linphone_core_add_auth_info(Linphon - sai.userid=ai->userid; - sai.realm=ai->realm; - sai.password=ai->passwd; -- sal_op_authenticate(op,&sai); -+ sal_op_authenticate(lc->sal,op,&sai); - ai->usecount++; - } - } ---- a/coreapi/callbacks.c -+++ b/coreapi/callbacks.c -@@ -224,19 +224,19 @@ static void call_received(SalOp *h){ - lc->presence_mode==LinphoneStatusDoNotDisturb || - lc->presence_mode==LinphoneStatusMoved){ - if (lc->presence_mode==LinphoneStatusBusy ) -- sal_call_decline(h,SalReasonBusy,NULL); -+ sal_call_decline(lc->sal,h,SalReasonBusy,NULL); - else if (lc->presence_mode==LinphoneStatusOffline) -- sal_call_decline(h,SalReasonTemporarilyUnavailable,NULL); -+ sal_call_decline(lc->sal,h,SalReasonTemporarilyUnavailable,NULL); - else if (lc->presence_mode==LinphoneStatusDoNotDisturb) -- sal_call_decline(h,SalReasonTemporarilyUnavailable,NULL); -+ sal_call_decline(lc->sal,h,SalReasonTemporarilyUnavailable,NULL); - else if (lc->alt_contact!=NULL && lc->presence_mode==LinphoneStatusMoved) -- sal_call_decline(h,SalReasonRedirect,lc->alt_contact); -- sal_op_release(h); -+ sal_call_decline(lc->sal,h,SalReasonRedirect,lc->alt_contact); -+ sal_op_release(lc->sal,h); - return; - } - if (!linphone_core_can_we_add_call(lc)){/*busy*/ -- sal_call_decline(h,SalReasonBusy,NULL); -- sal_op_release(h); -+ sal_call_decline(lc->sal,h,SalReasonBusy,NULL); -+ sal_op_release(lc->sal,h); - return; - } - from=sal_op_get_from(h); -@@ -246,8 +246,8 @@ static void call_received(SalOp *h){ - - if ((already_a_call_with_remote_address(lc,from_addr) && prevent_colliding_calls) || already_a_call_pending(lc)){ - ms_warning("Receiving another call while one is ringing or initiated, refusing this one with busy message."); -- sal_call_decline(h,SalReasonBusy,NULL); -- sal_op_release(h); -+ sal_call_decline(lc->sal,h,SalReasonBusy,NULL); -+ sal_op_release(lc->sal,h); - linphone_address_destroy(from_addr); - linphone_address_destroy(to_addr); - return; -@@ -449,7 +449,7 @@ static void call_accept_update(LinphoneC - } - #endif //BUILD_UPNP - linphone_call_update_remote_session_id_and_ver(call); -- sal_call_accept(call->op); -+ sal_call_accept(lc->sal,call->op); - md=sal_call_get_final_media_description(call->op); - if (md && !sal_media_description_empty(md)) - linphone_core_update_streams(lc,call,md); -@@ -701,7 +701,7 @@ static void auth_requested(SalOp *h, con - sai.realm=ai->realm; - sai.password=ai->passwd; - ms_message("auth_requested(): authenticating realm=%s, username=%s",realm,username); -- sal_op_authenticate(h,&sai); -+ sal_op_authenticate(lc->sal,h,&sai); - ai->usecount++; - ai->last_use_time=ms_time(NULL); - }else{ -@@ -936,6 +936,7 @@ static int op_equals(LinphoneCall *a, Sa - return a->op !=b; /*return 0 if equals*/ - } - static void text_delivery_update(SalOp *op, SalTextDeliveryStatus status){ -+ LinphoneCore *lc=(LinphoneCore *)sal_get_user_pointer(sal_op_get_sal(op)); - LinphoneChatMessage *chat_msg=(LinphoneChatMessage* )sal_op_get_user_pointer(op); - const MSList* calls = linphone_core_get_calls(chat_msg->chat_room->lc); - -@@ -950,7 +951,7 @@ static void text_delivery_update(SalOp * - - if (!ms_list_find_custom((MSList*)calls, (MSCompareFunc) op_equals, op)) { - /*op was only create for messaging purpose, destroying*/ -- sal_op_release(op); -+ sal_op_release(lc->sal, op); - } - } - ---- a/coreapi/chat.c -+++ b/coreapi/chat.c -@@ -98,10 +98,10 @@ static void _linphone_chat_room_send_mes - } - if (msg->external_body_url) { - content_type=ms_strdup_printf("message/external-body; access-type=URL; URL=\"%s\"",msg->external_body_url); -- sal_message_send(op,identity,cr->peer,content_type, NULL); -+ sal_message_send(cr->lc->sal,op,identity,cr->peer,content_type, NULL); - ms_free(content_type); - } else { -- sal_text_send(op, identity, cr->peer,msg->message); -+ sal_text_send(cr->lc->sal, op, identity, cr->peer,msg->message); - } - msg->dir=LinphoneChatMessageOutgoing; - msg->from=linphone_address_new(identity); ---- a/coreapi/friend.c -+++ b/coreapi/friend.c -@@ -131,13 +131,13 @@ void __linphone_friend_do_subscribe(Linp - fr->lc->vtable.notify_recv(fr->lc,(LinphoneFriend*)fr); - */ - }else{ -- sal_op_release(fr->outsub); -+ sal_op_release(fr->lc->sal,fr->outsub); - fr->outsub=NULL; - } - fr->outsub=sal_op_new(fr->lc->sal); - sal_op_set_route(fr->outsub,route); - sal_op_set_contact(fr->outsub,fixed_contact); -- sal_subscribe_presence(fr->outsub,from,friend); -+ sal_subscribe_presence(fr->lc->sal,fr->outsub,from,friend); - fr->subscribe_active=TRUE; - ms_free(friend); - } -@@ -278,13 +278,13 @@ void linphone_friend_notify(LinphoneFrie - ms_message("Want to notify %s, insub=%p",addr,lf->insub); - ms_free(addr); - if (lf->insub!=NULL){ -- sal_notify_presence(lf->insub,linphone_online_status_to_sal(os),NULL); -+ sal_notify_presence(lf->lc->sal,lf->insub,linphone_online_status_to_sal(os),NULL); - } - } - - static void linphone_friend_unsubscribe(LinphoneFriend *lf){ - if (lf->outsub!=NULL) { -- sal_unsubscribe(lf->outsub); -+ sal_unsubscribe(lf->lc->sal,lf->outsub); - lf->subscribe_active=FALSE; - } - } -@@ -292,18 +292,18 @@ static void linphone_friend_unsubscribe( - void linphone_friend_close_subscriptions(LinphoneFriend *lf){ - linphone_friend_unsubscribe(lf); - if (lf->insub){ -- sal_notify_close(lf->insub); -+ sal_notify_close(lf->lc->sal,lf->insub); - - } - } - - void linphone_friend_destroy(LinphoneFriend *lf){ - if (lf->insub) { -- sal_op_release(lf->insub); -+ sal_op_release(lf->lc->sal,lf->insub); - lf->insub=NULL; - } - if (lf->outsub){ -- sal_op_release(lf->outsub); -+ sal_op_release(lf->lc->sal,lf->outsub); - lf->outsub=NULL; - } - if (lf->uri!=NULL) linphone_address_destroy(lf->uri); ---- a/coreapi/linphonecall.c -+++ b/coreapi/linphonecall.c -@@ -526,7 +526,7 @@ LinphoneCall * linphone_call_new_incomin - from_str=linphone_address_as_string_uri_only(from); - sal_op_set_route(call->ping_op,sal_op_get_network_origin(op)); - sal_op_set_user_pointer(call->ping_op,call); -- sal_ping(call->ping_op,linphone_core_find_best_identity(lc,from,NULL),from_str); -+ sal_ping(lc->sal,call->ping_op,linphone_core_find_best_identity(lc,from,NULL),from_str); - ms_free(from_str); - } - } -@@ -714,7 +714,7 @@ void linphone_call_set_state(LinphoneCal - if (call->op!=NULL) { - /* so that we cannot have anymore upcalls for SAL - concerning this call*/ -- sal_op_release(call->op); -+ sal_op_release(lc->sal,call->op); - call->op=NULL; - } - linphone_call_unref(call); -@@ -729,7 +729,7 @@ static void linphone_call_destroy(Linpho - #endif //BUILD_UPNP - linphone_call_delete_ice_session(obj); - if (obj->op!=NULL) { -- sal_op_release(obj->op); -+ sal_op_release(obj->core->sal,obj->op); - obj->op=NULL; - } - if (obj->resultdesc!=NULL) { -@@ -741,7 +741,7 @@ static void linphone_call_destroy(Linpho - obj->localdesc=NULL; - } - if (obj->ping_op) { -- sal_op_release(obj->ping_op); -+ sal_op_release(obj->core->sal,obj->ping_op); - } - if (obj->refer_to){ - ms_free(obj->refer_to); -@@ -956,7 +956,7 @@ int linphone_call_get_duration(const Lin - * This function allows the application to know whether a new incoming call is a one that replaces another one. - **/ - LinphoneCall *linphone_call_get_replaced_call(LinphoneCall *call){ -- SalOp *op=sal_call_get_replaces(call->op); -+ SalOp *op=sal_call_get_replaces(call->core->sal,call->op); - if (op){ - return (LinphoneCall*)sal_op_get_user_pointer(op); - } -@@ -987,7 +987,7 @@ void linphone_call_enable_camera (Linpho - void linphone_call_send_vfu_request(LinphoneCall *call) - { - if (LinphoneCallStreamsRunning == linphone_call_get_state(call)) -- sal_call_send_vfu_request(call->op); -+ sal_call_send_vfu_request(call->core->sal,call->op); - } - #endif - ---- a/coreapi/linphonecore.c -+++ b/coreapi/linphonecore.c -@@ -27,6 +27,11 @@ Foundation, Inc., 59 Temple Place - Suit - #include <math.h> - #include <ortp/telephonyevents.h> - #include <ortp/zrtp.h> -+ -+#ifdef HAVE_EXOSIP2_EXOSIP_H -+#include <eXosip2/eXosip.h> -+#endif -+ - #include "mediastreamer2/mediastream.h" - #include "mediastreamer2/mseventqueue.h" - #include "mediastreamer2/msvolume.h" -@@ -1773,10 +1778,6 @@ int linphone_core_get_sip_port(LinphoneC - static char _ua_name[64]="Linphone"; - static char _ua_version[64]=LINPHONE_VERSION; - --#ifdef HAVE_EXOSIP_GET_VERSION --extern const char *eXosip_get_version(); --#endif -- - static void apply_user_agent(LinphoneCore *lc){ - char ua_string[256]; - snprintf(ua_string,sizeof(ua_string)-1,"%s/%s (eXosip2/%s)",_ua_name,_ua_version, -@@ -2302,7 +2303,7 @@ void linphone_core_start_refered_call(Li - - void linphone_core_notify_refer_state(LinphoneCore *lc, LinphoneCall *referer, LinphoneCall *newcall){ - if (referer->op!=NULL){ -- sal_call_notify_refer_state(referer->op,newcall ? newcall->op : NULL); -+ sal_call_notify_refer_state(lc->sal,referer->op,newcall ? newcall->op : NULL); - } - } - -@@ -2445,7 +2446,7 @@ int linphone_core_start_invite(LinphoneC - } - real_url=linphone_address_as_string(call->log->to); - from=linphone_address_as_string(call->log->from); -- err=sal_call(call->op,from,real_url); -+ err=sal_call(lc->sal,call->op,from,real_url); - call->log->call_id=ms_strdup(sal_op_get_call_id(call->op)); /*must be known at that time*/ - - if (lc->sip_conf.sdp_200_ack){ -@@ -2642,7 +2643,7 @@ LinphoneCall * linphone_core_invite_addr - /*defer the start of the call after the OPTIONS ping*/ - call->ping_replied=FALSE; - call->ping_op=sal_op_new(lc->sal); -- sal_ping(call->ping_op,from,real_url); -+ sal_ping(lc->sal,call->ping_op,from,real_url); - sal_op_set_user_pointer(call->ping_op,call); - call->start_time=time(NULL); - defer = TRUE; -@@ -2677,7 +2678,7 @@ int linphone_core_transfer_call(Linphone - } - //lc->call=NULL; //Do not do that you will lose the call afterward . . . - real_url=linphone_address_as_string (real_parsed_url); -- sal_call_refer(call->op,real_url); -+ sal_call_refer(lc->sal,call->op,real_url); - ms_free(real_url); - linphone_address_destroy(real_parsed_url); - linphone_call_set_transfer_state(call, LinphoneCallOutgoingInit); -@@ -2699,7 +2700,7 @@ int linphone_core_transfer_call(Linphone - * close the call with us (the 'dest' call). - **/ - int linphone_core_transfer_call_to_another(LinphoneCore *lc, LinphoneCall *call, LinphoneCall *dest){ -- int result = sal_call_refer_with_replaces (call->op,dest->op); -+ int result = sal_call_refer_with_replaces (lc->sal,call->op,dest->op); - linphone_call_set_transfer_state(call, LinphoneCallOutgoingInit); - return result; - } -@@ -2741,7 +2742,7 @@ void linphone_core_notify_incoming_call( - md=sal_call_get_final_media_description(call->op); - if (md){ - if (sal_media_description_empty(md) || linphone_core_incompatible_security(lc,md)){ -- sal_call_decline(call->op,SalReasonMedia,NULL); -+ sal_call_decline(lc->sal,call->op,SalReasonMedia,NULL); - linphone_call_unref(call); - return; - } -@@ -2785,14 +2786,14 @@ void linphone_core_notify_incoming_call( - linphone_call_set_state(call,LinphoneCallIncomingReceived,"Incoming call"); - - if (call->state==LinphoneCallIncomingReceived){ -- sal_call_notify_ringing(call->op,propose_early_media || ringback_tone!=NULL); -+ sal_call_notify_ringing(lc->sal,call->op,propose_early_media || ringback_tone!=NULL); - - if (propose_early_media || ringback_tone!=NULL){ - linphone_call_set_state(call,LinphoneCallIncomingEarlyMedia,"Incoming call early media"); - md=sal_call_get_final_media_description(call->op); - linphone_core_update_streams(lc,call,md); - } -- if (sal_call_get_replaces(call->op)!=NULL && lp_config_get_int(lc->config,"sip","auto_answer_replacing_calls",1)){ -+ if (sal_call_get_replaces(lc->sal,call->op)!=NULL && lp_config_get_int(lc->config,"sip","auto_answer_replacing_calls",1)){ - linphone_core_accept_call(lc,call); - } - } -@@ -2821,7 +2822,7 @@ int linphone_core_start_update_call(Linp - if (lc->vtable.display_status) - lc->vtable.display_status(lc,_("Modifying call parameters...")); - sal_call_set_local_media_description (call->op,call->localdesc); -- return sal_call_update(call->op,subject); -+ return sal_call_update(lc->sal,call->op,subject); - } - - /** -@@ -2950,7 +2951,7 @@ int linphone_core_start_accept_call_upda - #endif //BUILD_UPNP - linphone_call_update_remote_session_id_and_ver(call); - sal_call_set_local_media_description(call->op,call->localdesc); -- sal_call_accept(call->op); -+ sal_call_accept(lc->sal,call->op); - md=sal_call_get_final_media_description(call->op); - if (md && !sal_media_description_empty(md)) - linphone_core_update_streams (lc,call,md); -@@ -2993,7 +2994,7 @@ int linphone_core_accept_call_update(Lin - if (keep_sdp_version &&(remote_desc->session_id == call->remote_session_id) && (remote_desc->session_ver == call->remote_session_ver)) { - /* Remote has sent an INVITE with the same SDP as before, so send a 200 OK with the same SDP as before. */ - ms_warning("SDP version has not changed, send same SDP as before."); -- sal_call_accept(call->op); -+ sal_call_accept(lc->sal,call->op); - linphone_call_set_state(call,LinphoneCallStreamsRunning,"Connected (streams running)"); - return 0; - } -@@ -3101,7 +3102,7 @@ int linphone_core_accept_call_with_param - } - - /* check if this call is supposed to replace an already running one*/ -- replaced=sal_call_get_replaces(call->op); -+ replaced=sal_call_get_replaces(lc->sal,call->op); - if (replaced){ - LinphoneCall *rc=(LinphoneCall*)sal_op_get_user_pointer (replaced); - if (rc){ -@@ -3159,7 +3160,7 @@ int linphone_core_accept_call_with_param - } - - linphone_call_update_remote_session_id_and_ver(call); -- sal_call_accept(call->op); -+ sal_call_accept(lc->sal,call->op); - if (lc->vtable.display_status!=NULL) - lc->vtable.display_status(lc,_("Connected.")); - lc->current_call=call; -@@ -3175,7 +3176,7 @@ int linphone_core_accept_call_with_param - } - - int linphone_core_abort_call(LinphoneCore *lc, LinphoneCall *call, const char *error){ -- sal_call_terminate(call->op); -+ sal_call_terminate(lc->sal,call->op); - - /*stop ringing*/ - if (lc->ringstream!=NULL) { -@@ -3218,7 +3219,7 @@ static void terminate_call(LinphoneCore - - int linphone_core_redirect_call(LinphoneCore *lc, LinphoneCall *call, const char *redirect_uri){ - if (call->state==LinphoneCallIncomingReceived){ -- sal_call_decline(call->op,SalReasonRedirect,redirect_uri); -+ sal_call_decline(lc->sal,call->op,SalReasonRedirect,redirect_uri); - call->reason=LinphoneReasonDeclined; - terminate_call(lc,call); - }else{ -@@ -3252,7 +3253,7 @@ int linphone_core_terminate_call(Linphon - { - call = the_call; - } -- sal_call_terminate(call->op); -+ sal_call_terminate(lc->sal,call->op); - terminate_call(lc,call); - return 0; - } -@@ -3284,7 +3285,7 @@ int linphone_core_decline_call(LinphoneC - return -1; - break; - } -- sal_call_decline(call->op,sal_reason,NULL); -+ sal_call_decline(lc->sal,call->op,sal_reason,NULL); - terminate_call(lc,call); - return 0; - } -@@ -3378,7 +3379,7 @@ int _linphone_core_pause_call(LinphoneCo - return -1; - } - sal_call_set_local_media_description(call->op,call->localdesc); -- if (sal_call_update(call->op,subject) != 0){ -+ if (sal_call_update(lc->sal,call->op,subject) != 0){ - if (lc->vtable.display_warning) - lc->vtable.display_warning(lc,_("Could not pause the call")); - } -@@ -3461,7 +3462,7 @@ int linphone_core_resume_call(LinphoneCo - sal_call_set_local_media_description(call->op,call->localdesc); - sal_media_description_set_dir(call->localdesc,SalStreamSendRecv); - if (call->params.in_conference && !call->current_params.in_conference) subject="Conference"; -- if(sal_call_update(call->op,subject) != 0){ -+ if(sal_call_update(lc->sal,call->op,subject) != 0){ - return -1; - } - linphone_call_set_state (call,LinphoneCallResuming,"Resuming"); -@@ -4177,7 +4178,7 @@ void linphone_core_send_dtmf(LinphoneCor - } - if (linphone_core_get_use_info_for_dtmf(lc)!=0){ - /* Out of Band DTMF (use INFO method) */ -- sal_call_send_dtmf(call->op,dtmf); -+ sal_call_send_dtmf(lc->sal,call->op,dtmf); - } - } - ---- a/coreapi/presence.c -+++ b/coreapi/presence.c -@@ -79,21 +79,21 @@ void linphone_subscription_new(LinphoneC - if (linphone_find_friend(lc->friends,uri,&lf)!=NULL){ - lf->insub=op; - lf->inc_subscribe_pending=TRUE; -- sal_subscribe_accept(op); -+ sal_subscribe_accept(lc->sal,op); - linphone_friend_done(lf); /*this will do all necessary actions */ - }else{ - /* check if this subscriber is in our black list */ - if (linphone_find_friend(lc->subscribers,uri,&lf)){ - if (lf->pol==LinphoneSPDeny){ - ms_message("Rejecting %s because we already rejected it once.",from); -- sal_subscribe_decline(op); -+ sal_subscribe_decline(lc->sal,op); - } - else { - /* else it is in wait for approval state, because otherwise it is in the friend list.*/ - ms_message("New subscriber found in friend list, in %s state.",__policy_enum_to_str(lf->pol)); - } - }else { -- sal_subscribe_accept(op); -+ sal_subscribe_accept(lc->sal,op); - linphone_core_add_subscriber(lc,tmp,op); - } - } -@@ -150,7 +150,7 @@ void linphone_notify_recv(LinphoneCore * - ms_message("But this person is not part of our friend list, so we don't care."); - } - if (ss==SalSubscribeTerminated){ -- sal_op_release(op); -+ sal_op_release(lc->sal,op); - if (lf){ - lf->outsub=NULL; - lf->subscribe_active=FALSE; -@@ -161,7 +161,7 @@ void linphone_notify_recv(LinphoneCore * - void linphone_subscription_closed(LinphoneCore *lc, SalOp *op){ - LinphoneFriend *lf; - lf=linphone_find_friend_by_inc_subscribe(lc->friends,op); -- sal_op_release(op); -+ sal_op_release(lc->sal,op); - if (lf!=NULL){ - lf->insub=NULL; - }else{ ---- a/coreapi/proxy.c -+++ b/coreapi/proxy.c -@@ -84,8 +84,8 @@ void linphone_proxy_config_destroy(Linph - if (obj->realm!=NULL) ms_free(obj->realm); - if (obj->type!=NULL) ms_free(obj->type); - if (obj->dial_prefix!=NULL) ms_free(obj->dial_prefix); -- if (obj->op) sal_op_release(obj->op); -- if (obj->publish_op) sal_op_release(obj->publish_op); -+ if (obj->op) sal_op_release(obj->lc->sal, obj->op); -+ if (obj->publish_op) sal_op_release(obj->lc->sal,obj->publish_op); - } - - /** -@@ -245,7 +245,7 @@ void linphone_proxy_config_edit(Linphone - if (obj->reg_sendregister){ - /* unregister */ - if (obj->state != LinphoneRegistrationNone && obj->state != LinphoneRegistrationCleared) { -- sal_unregister(obj->op); -+ sal_unregister(obj->lc->sal,obj->op); - } - } - } -@@ -312,13 +312,13 @@ static void linphone_proxy_config_regist - if (obj->reg_sendregister){ - char *contact; - if (obj->op) -- sal_op_release(obj->op); -+ sal_op_release(obj->lc->sal,obj->op); - obj->op=sal_op_new(obj->lc->sal); - contact=guess_contact_for_register(obj); - sal_op_set_contact(obj->op,contact); - ms_free(contact); - sal_op_set_user_pointer(obj->op,obj); -- if (sal_register(obj->op,obj->reg_proxy,obj->reg_identity,obj->expires)==0) { -+ if (sal_register(obj->lc->sal,obj->op,obj->reg_proxy,obj->reg_identity,obj->expires)==0) { - linphone_proxy_config_set_state(obj,LinphoneRegistrationProgress,"Registration in progress"); - } else { - linphone_proxy_config_set_state(obj,LinphoneRegistrationFailed,"Registration failed"); -@@ -332,7 +332,7 @@ static void linphone_proxy_config_regist - **/ - void linphone_proxy_config_refresh_register(LinphoneProxyConfig *obj){ - if (obj->reg_sendregister && obj->op){ -- if (sal_register_refresh(obj->op,obj->expires) == 0) { -+ if (sal_register_refresh(obj->lc->sal,obj->op,obj->expires) == 0) { - linphone_proxy_config_set_state(obj,LinphoneRegistrationProgress, "Refresh registration"); - } - } -@@ -793,10 +793,10 @@ int linphone_proxy_config_send_publish(L - int err; - SalOp *op=sal_op_new(proxy->lc->sal); - sal_op_set_route(op,proxy->reg_proxy); -- err=sal_publish(op,linphone_proxy_config_get_identity(proxy), -+ err=sal_publish(proxy->lc->sal,op,linphone_proxy_config_get_identity(proxy), - linphone_proxy_config_get_identity(proxy),linphone_online_status_to_sal(presence_mode)); - if (proxy->publish_op!=NULL) -- sal_op_release(proxy->publish_op); -+ sal_op_release(proxy->lc->sal, proxy->publish_op); - proxy->publish_op=op; - return err; - } ---- a/coreapi/sal_eXosip2.c -+++ b/coreapi/sal_eXosip2.c -@@ -46,7 +46,11 @@ void _osip_list_set_empty(osip_list_t *l - }
-
- void sal_get_default_local_ip(Sal *sal, int address_family,char *ip, size_t iplen){
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ if (eXosip_guess_localip(sal->excontext, address_family, ip, iplen) < 0){
-+#else
- if (eXosip_guess_localip(address_family,ip,iplen)<0){
-+#endif
- /*default to something */
- strncpy(ip,address_family==AF_INET6 ? "::1" : "127.0.0.1",iplen);
- ms_error("Could not find default routable ip address !");
-@@ -185,14 +189,14 @@ bool_t sal_call_autoanswer_asked(SalOp * - return op->auto_answer_asked;
- }
-
--void sal_op_release(SalOp *op){
-+void sal_op_release(Sal *ctx, SalOp *op){
- if (op->sdp_answer)
- sdp_message_free(op->sdp_answer);
- if (op->pending_auth)
- eXosip_event_free(op->pending_auth);
- if (op->rid!=-1){
- sal_remove_register(op->base.root,op->rid);
-- eXosip_register_remove(op->rid);
-+ eXosip_register_remove(ctx->excontext, op->rid);
- }
- if (op->cid!=-1){
- ms_message("Cleaning cid %i",op->cid);
-@@ -273,8 +277,14 @@ Sal * sal_init(){ - osip_trace_initialize_func (OSIP_INFO4,&_osip_trace_func);
- firsttime=FALSE;
- }
-- eXosip_init();
- sal=ms_new0(Sal,1);
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ sal->excontext = eXosip_malloc();
-+ eXosip_init(sal->excontext);
-+ /* order with ms_new0 changed, maybe free(sal) on error? */
-+#else
-+ eXosip_init();
-+#endif
- sal->keepalive_period=30;
- sal->double_reg=TRUE;
- sal->use_rports=TRUE;
-@@ -290,7 +300,12 @@ Sal * sal_init(){ - }
-
- void sal_uninit(Sal* sal){
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_quit(sal->excontext);
-+ free(sal->excontext);
-+#else
- eXosip_quit();
-+#endif
- if (sal->rootCa)
- ms_free(sal->rootCa);
- ms_free(sal);
-@@ -348,8 +363,16 @@ void sal_set_callbacks(Sal *ctx, const S -
- int sal_unlisten_ports(Sal *ctx){
- if (ctx->running){
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_quit(ctx->excontext);
-+#else
- eXosip_quit();
-+#endif
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_init(ctx->excontext);
-+#else
- eXosip_init();
-+#endif
- ctx->running=FALSE;
- }
- return 0;
-@@ -359,13 +382,17 @@ int sal_reset_transports(Sal *ctx){ - #ifdef HAVE_EXOSIP_RESET_TRANSPORTS
- if (ctx->running){
- ms_message("Exosip transports reset.");
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_reset_transports(ctx->excontext);
-+#else
- eXosip_reset_transports();
-+#endif
- }
- return 0;
--#else
-+#else /* HAVE_EXOSIP_RESET_TRANSPORTS */
- ms_warning("sal_reset_transports() not implemented in this version.");
- return -1;
--#endif
-+#endif /* HAVE_EXOSIP_RESET_TRANSPORTS */
- }
-
-
-@@ -374,9 +401,16 @@ static void set_tls_options(Sal *ctx){ - eXosip_tls_ctx_t tlsCtx;
- memset(&tlsCtx, 0, sizeof(tlsCtx));
- snprintf(tlsCtx.root_ca_cert, sizeof(tlsCtx.client.cert), "%s", ctx->rootCa);
-+#ifdef EXOSIP_OPT_SET_TLS_CERTIFICATES_INFO
-+ eXosip_set_option(ctx->excontext, EXOSIP_OPT_SET_TLS_CERTIFICATES_INFO, &tlsCtx);
-+#else
- eXosip_set_tls_ctx(&tlsCtx);
-- }
--#ifdef HAVE_EXOSIP_TLS_VERIFY_CERTIFICATE
-+#endif
-+ }
-+#ifdef EXOSIP_OPT_SET_TLS_VERIFY_CERTIFICATE
-+ eXosip_set_option(ctx->excontext, EXOSIP_OPT_SET_TLS_VERIFY_CERTIFICATE,
-+ &ctx->verify_server_certs);
-+#elif defined HAVE_EXOSIP_TLS_VERIFY_CERTIFICATE
- eXosip_tls_verify_certificate(ctx->verify_server_certs);
- #endif
- #ifdef HAVE_EXOSIP_TLS_VERIFY_CN
-@@ -386,10 +420,15 @@ static void set_tls_options(Sal *ctx){ -
- void sal_set_dscp(Sal *ctx, int dscp){
- ctx->dscp=dscp;
--#ifdef HAVE_EXOSIP_DSCP
-- if (dscp!=-1)
-+ if (dscp!=-1) {
-+#ifdef EXOSIP_OPT_SET_DSCP
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_set_option(ctx->excontext, EXOSIP_OPT_SET_DSCP, &ctx->dscp);
-+#else
- eXosip_set_option(EXOSIP_OPT_SET_DSCP,&ctx->dscp);
- #endif
-+#endif /* EXOSIP_OPT_SET_DSCP */
-+ }
- }
-
- int sal_listen_port(Sal *ctx, const char *addr, int port, SalTransport tr, int is_secure){
-@@ -402,13 +441,21 @@ int sal_listen_port(Sal *ctx, const char - switch (tr) {
- case SalTransportUDP:
- proto=IPPROTO_UDP;
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_set_option (ctx->excontext, EXOSIP_OPT_UDP_KEEP_ALIVE, &keepalive);
-+#else
- eXosip_set_option (EXOSIP_OPT_UDP_KEEP_ALIVE, &keepalive);
-+#endif
- break;
- case SalTransportTCP:
- case SalTransportTLS:
- proto= IPPROTO_TCP;
- if (!ctx->tcp_tls_keepalive) keepalive=-1;
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_set_option (ctx->excontext, EXOSIP_OPT_UDP_KEEP_ALIVE, &keepalive);
-+#else
- eXosip_set_option (EXOSIP_OPT_UDP_KEEP_ALIVE,&keepalive);
-+#endif
- set_tls_options(ctx);
- break;
- default:
-@@ -416,9 +463,15 @@ int sal_listen_port(Sal *ctx, const char - }
- /*see if it looks like an IPv6 address*/
- int use_rports = ctx->use_rports; // Copy char to int to avoid bad alignment
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_set_option(ctx->excontext, EXOSIP_OPT_USE_RPORT, &use_rports);
-+#else
- eXosip_set_option(EXOSIP_OPT_USE_RPORT,&use_rports);
-+#endif
-+#ifdef EXOSIP_OPT_DONT_SEND_101
- int dont_use_101 = !ctx->use_101; // Copy char to int to avoid bad alignment
- eXosip_set_option(EXOSIP_OPT_DONT_SEND_101,&dont_use_101);
-+#endif
- sal_set_dscp(ctx,ctx->dscp);
- sal_use_dates(ctx,ctx->add_dates);
-
-@@ -429,7 +482,11 @@ int sal_listen_port(Sal *ctx, const char - ms_fatal("SIP over DTLS is not supported yet.");
- return -1;
- }
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ err=eXosip_listen_addr(ctx->excontext, proto, addr, port, ipv6 ? PF_INET6 : PF_INET, is_secure);
-+#else
- err=eXosip_listen_addr(proto, addr, port, ipv6 ? PF_INET6 : PF_INET, is_secure);
-+#endif
- ctx->running=TRUE;
- return err;
- }
-@@ -444,7 +501,11 @@ ortp_socket_t sal_get_socket(Sal *ctx){ - }
-
- void sal_set_user_agent(Sal *ctx, const char *user_agent){
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_set_user_agent(ctx->excontext, user_agent);
-+#else
- eXosip_set_user_agent(user_agent);
-+#endif
- }
-
- void sal_use_session_timers(Sal *ctx, int expires){
-@@ -472,11 +533,15 @@ void sal_use_dates(Sal *ctx, bool_t enab - #ifdef EXOSIP_OPT_REGISTER_WITH_DATE
- {
- int tmp=enabled;
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_set_option(ctx->excontext, EXOSIP_OPT_REGISTER_WITH_DATE, &tmp);
-+#else
- eXosip_set_option(EXOSIP_OPT_REGISTER_WITH_DATE,&tmp);
-+#endif
- }
--#else
-+#else /* EXOSIP_OPT_REGISTER_WITH_DATE */
- if (enabled) ms_warning("Exosip does not support EXOSIP_OPT_REGISTER_WITH_DATE option.");
--#endif
-+#endif /* EXOSIP_OPT_REGISTER_WITH_DATE */
- }
-
- void sal_use_rport(Sal *ctx, bool_t use_rports){
-@@ -499,7 +564,9 @@ const char *sal_get_root_ca(Sal* ctx) { -
- void sal_verify_server_certificates(Sal *ctx, bool_t verify){
- ctx->verify_server_certs=verify;
--#ifdef HAVE_EXOSIP_TLS_VERIFY_CERTIFICATE
-+#ifdef EXOSIP_OPT_SET_TLS_VERIFY_CERTIFICATE
-+ eXosip_set_option(ctx->excontext, EXOSIP_OPT_SET_TLS_VERIFY_CERTIFICATE, &verify);
-+#elif defined HAVE_EXOSIP_TLS_VERIFY_CERTIFICATE
- eXosip_tls_verify_certificate(verify);
- #endif
- }
-@@ -626,7 +693,7 @@ int sal_call_set_local_media_description - return 0;
- }
-
--int sal_call(SalOp *h, const char *from, const char *to){
-+int sal_call(Sal *ctx, SalOp *h, const char *from, const char *to){
- int err;
- const char *route;
- osip_message_t *invite=NULL;
-@@ -638,7 +705,11 @@ int sal_call(SalOp *h, const char *from, - h->terminated = FALSE;
-
- route = sal_op_get_route(h);
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ err=eXosip_call_build_initial_invite(ctx->excontext, &invite, to, from, route, "Phone call");
-+#else
- err=eXosip_call_build_initial_invite(&invite,to,from,route,"Phone call");
-+#endif
- if (err!=0){
- ms_error("Could not create call. Error %d (from=%s to=%s route=%s)",
- err, from, to, route);
-@@ -664,9 +735,21 @@ int sal_call(SalOp *h, const char *from, - osip_message_set_header(invite,"Referred-By",h->referred_by);
- }
-
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_lock(ctx->excontext);
-+#else
- eXosip_lock();
-+#endif
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ err=eXosip_call_send_initial_invite(ctx->excontext, invite);
-+#else
- err=eXosip_call_send_initial_invite(invite);
-+#endif
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_unlock(ctx->excontext);
-+#else
- eXosip_unlock();
-+#endif
- h->cid=err;
- if (err<0){
- ms_error("Fail to send invite ! Error code %d", err);
-@@ -682,14 +765,22 @@ int sal_call(SalOp *h, const char *from, - return 0;
- }
-
--int sal_call_notify_ringing(SalOp *h, bool_t early_media){
-+int sal_call_notify_ringing(Sal *ctx, SalOp *h, bool_t early_media){
- osip_message_t *msg;
-
- /*if early media send also 180 and 183 */
- if (early_media){
- msg=NULL;
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_lock(ctx->excontext);
-+#else
- eXosip_lock();
-+#endif
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_call_build_answer(ctx->excontext, h->tid, 183, &msg);
-+#else
- eXosip_call_build_answer(h->tid,183,&msg);
-+#endif
- if (msg){
- sdp_process(h);
- if (h->sdp_answer){
-@@ -697,22 +788,46 @@ int sal_call_notify_ringing(SalOp *h, bo - sdp_message_free(h->sdp_answer);
- h->sdp_answer=NULL;
- }
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_call_send_answer(ctx->excontext, h->tid, 183, msg);
-+#else
- eXosip_call_send_answer(h->tid,183,msg);
-+#endif
- }
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_unlock(ctx->excontext);
-+#else
- eXosip_unlock();
-+#endif
- }else{
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_lock(ctx->excontext);
-+#else
- eXosip_lock();
-+#endif
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_call_send_answer(ctx->excontext, h->tid, 180, NULL);
-+#else
- eXosip_call_send_answer(h->tid,180,NULL);
-+#endif
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_unlock(ctx->excontext);
-+#else
- eXosip_unlock();
-+#endif
- }
- return 0;
- }
-
--int sal_call_accept(SalOp * h){
-+int sal_call_accept(Sal *ctx, SalOp * h){
- osip_message_t *msg;
- const char *contact=sal_op_get_contact(h);
- /* sends a 200 OK */
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ int err=eXosip_call_build_answer(ctx->excontext, h->tid, 200, &msg);
-+#else
- int err=eXosip_call_build_answer(h->tid,200,&msg);
-+#endif
- if (err<0 || msg==NULL){
- ms_error("Fail to build answer for call: err=%i",err);
- return -1;
-@@ -741,39 +856,107 @@ int sal_call_accept(SalOp * h){ - }else{
- ms_error("You are accepting a call but not defined any media capabilities !");
- }
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_call_send_answer(ctx->excontext, h->tid, 200, msg);
-+#else
- eXosip_call_send_answer(h->tid,200,msg);
-+#endif
- return 0;
- }
-
--int sal_call_decline(SalOp *h, SalReason reason, const char *redirect){
-+int sal_call_decline(Sal * ctx, SalOp *h, SalReason reason, const char *redirect){
- if (reason==SalReasonBusy){
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_lock(ctx->excontext);
-+#else
- eXosip_lock();
-+#endif
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_call_send_answer(ctx->excontext, h->tid, 486, NULL);
-+#else
- eXosip_call_send_answer(h->tid,486,NULL);
-+#endif
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_unlock(ctx->excontext);
-+#else
- eXosip_unlock();
-+#endif
- }
- else if (reason==SalReasonTemporarilyUnavailable){
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_lock(ctx->excontext);
-+#else
- eXosip_lock();
-+#endif
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_call_send_answer(ctx->excontext, h->tid, 480, NULL);
-+#else
- eXosip_call_send_answer(h->tid,480,NULL);
-+#endif
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_unlock(ctx->excontext);
-+#else
- eXosip_unlock();
-+#endif
- }else if (reason==SalReasonDoNotDisturb){
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_lock(ctx->excontext);
-+#else
- eXosip_lock();
-+#endif
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_call_send_answer(ctx->excontext, h->tid, 600, NULL);
-+#else
- eXosip_call_send_answer(h->tid,600,NULL);
-+#endif
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_unlock(ctx->excontext);
-+#else
- eXosip_unlock();
-+#endif
- }else if (reason==SalReasonMedia){
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_lock(ctx->excontext);
-+#else
- eXosip_lock();
-+#endif
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_call_send_answer(ctx->excontext, h->tid, 415, NULL);
-+#else
- eXosip_call_send_answer(h->tid,415,NULL);
-+#endif
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_unlock(ctx->excontext);
-+#else
- eXosip_unlock();
-+#endif
- }else if (redirect!=NULL && reason==SalReasonRedirect){
- osip_message_t *msg;
- int code;
- if (strstr(redirect,"sip:")!=0) code=302;
- else code=380;
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_lock(ctx->excontext);
-+#else
- eXosip_lock();
-+#endif
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_call_build_answer(ctx->excontext, h->tid, code, &msg);
-+#else
- eXosip_call_build_answer(h->tid,code,&msg);
-+#endif
- osip_message_set_contact(msg,redirect);
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_call_send_answer(ctx->excontext, h->tid, code, msg);
-+#else
- eXosip_call_send_answer(h->tid,code,msg);
-+#endif
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_unlock(ctx->excontext);
-+#else
- eXosip_unlock();
-- }else sal_call_terminate(h);
-+#endif
-+ }else sal_call_terminate(ctx, h);
- return 0;
- }
-
-@@ -796,39 +979,59 @@ int sal_call_set_referer(SalOp *h, SalOp - return 0;
- }
-
--static int send_notify_for_refer(int did, const char *sipfrag){
-+static int send_notify_for_refer(Sal *ctx, int did, const char *sipfrag){
- osip_message_t *msg;
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_lock(ctx->excontext);
-+#else
- eXosip_lock();
-+#endif
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_call_build_notify(ctx->excontext, did, EXOSIP_SUBCRSTATE_ACTIVE, &msg);
-+#else
- eXosip_call_build_notify(did,EXOSIP_SUBCRSTATE_ACTIVE,&msg);
-+#endif
- if (msg==NULL){
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_unlock(ctx->excontext);
-+#else
- eXosip_unlock();
-+#endif
- ms_warning("Could not build NOTIFY for refer.");
- return -1;
- }
- osip_message_set_content_type(msg,"message/sipfrag");
- osip_message_set_header(msg,"Event","refer");
- osip_message_set_body(msg,sipfrag,strlen(sipfrag));
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_call_send_request(ctx->excontext, did, msg);
-+#else
- eXosip_call_send_request(did,msg);
-+#endif
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_unlock(ctx->excontext);
-+#else
- eXosip_unlock();
-+#endif
- return 0;
- }
-
- /* currently only support to notify trying and 200Ok*/
--int sal_call_notify_refer_state(SalOp *h, SalOp *newcall){
-+int sal_call_notify_refer_state(Sal *ctx, SalOp *h, SalOp *newcall){
- if (newcall==NULL){
- /* in progress*/
-- send_notify_for_refer(h->did,"SIP/2.0 100 Trying\r\n");
-+ send_notify_for_refer(ctx, h->did,"SIP/2.0 100 Trying\r\n");
- }
- else if (newcall->cid!=-1){
- if (newcall->did==-1){
- /* not yet established*/
- if (!newcall->terminated){
- /* in progress*/
-- send_notify_for_refer(h->did,"SIP/2.0 100 Trying\r\n");
-+ send_notify_for_refer(ctx, h->did,"SIP/2.0 100 Trying\r\n");
- }
- }else{
- if (!newcall->terminated){
-- if (send_notify_for_refer(h->did,"SIP/2.0 200 Ok\r\n")==-1){
-+ if (send_notify_for_refer(ctx, h->did,"SIP/2.0 200 Ok\r\n")==-1){
- /* we need previous notify transaction to complete, so buffer the request for later*/
- h->sipfrag_pending="SIP/2.0 200 Ok\r\n";
- }
-@@ -838,61 +1041,126 @@ int sal_call_notify_refer_state(SalOp *h - return 0;
- }
-
--int sal_ping(SalOp *op, const char *from, const char *to){
-+int sal_ping(Sal *ctx, SalOp *op, const char *from, const char *to){
- osip_message_t *options=NULL;
-
- sal_op_set_from(op,from);
- sal_op_set_to(op,to);
- sal_exosip_fix_route(op);
-
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_options_build_request (ctx->excontext, &options, sal_op_get_to(op),
-+ sal_op_get_from(op),sal_op_get_route(op));
-+#else
- eXosip_options_build_request (&options, sal_op_get_to(op),
- sal_op_get_from(op),sal_op_get_route(op));
-+#endif
- if (options){
- if (op->base.root->session_expires!=0){
- osip_message_set_header(options, "Session-expires", "200");
- osip_message_set_supported(options, "timer");
- }
- sal_add_other(sal_op_get_sal(op),op,options);
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ return eXosip_options_send_request(ctx->excontext, options);
-+#else
- return eXosip_options_send_request(options);
-+#endif
- }
- return -1;
- }
-
--int sal_call_refer(SalOp *h, const char *refer_to){
-+int sal_call_refer(Sal *ctx, SalOp *h, const char *refer_to){
- osip_message_t *msg=NULL;
- int err=0;
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_lock(ctx->excontext);
-+#else
- eXosip_lock();
-+#endif
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_call_build_refer(ctx->excontext, h->did, refer_to, &msg);
-+#else
- eXosip_call_build_refer(h->did,refer_to, &msg);
-- if (msg) err=eXosip_call_send_request(h->did, msg);
-+#endif
-+ if (msg) {
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ err=eXosip_call_send_request(ctx->excontext, h->did, msg);
-+#else
-+ err=eXosip_call_send_request(h->did, msg);
-+#endif
-+ }
- else err=-1;
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_unlock(ctx->excontext);
-+#else
- eXosip_unlock();
-+#endif
- return err;
- }
-
--int sal_call_refer_with_replaces(SalOp *h, SalOp *other_call_h){
-+int sal_call_refer_with_replaces(Sal *ctx, SalOp *h, SalOp *other_call_h){
- osip_message_t *msg=NULL;
- char referto[256]={0};
- int err=0;
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_lock(ctx->excontext);
-+#else
- eXosip_lock();
-+#endif
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ if (eXosip_call_get_referto(ctx->excontext, other_call_h->did,referto,sizeof(referto)-1)!=0){
-+#else
- if (eXosip_call_get_referto(other_call_h->did,referto,sizeof(referto)-1)!=0){
-+#endif
- ms_error("eXosip_call_get_referto() failed for did=%i",other_call_h->did);
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_unlock(ctx->excontext);
-+#else
- eXosip_unlock();
-+#endif
- return -1;
- }
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_call_build_refer(ctx->excontext, h->did,referto, &msg);
-+#else
- eXosip_call_build_refer(h->did,referto, &msg);
-+#endif
- osip_message_set_header(msg,"Referred-By",h->base.from);
-- if (msg) err=eXosip_call_send_request(h->did, msg);
-+ if (msg) {
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ err=eXosip_call_send_request(ctx->excontext, h->did, msg);
-+#else
-+ err=eXosip_call_send_request(h->did, msg);
-+#endif
-+ }
- else err=-1;
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_unlock(ctx->excontext);
-+#else
- eXosip_unlock();
-+#endif
- return err;
- }
-
--SalOp *sal_call_get_replaces(SalOp *h){
-+SalOp *sal_call_get_replaces(Sal *ctx, SalOp *h){
- if (h!=NULL && h->replaces!=NULL){
- int cid;
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_lock(ctx->excontext);
-+#else
- eXosip_lock();
-+#endif
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ cid=eXosip_call_find_by_replaces(ctx->excontext, h->replaces);
-+#else
- cid=eXosip_call_find_by_replaces(h->replaces);
-+#endif
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_unlock(ctx->excontext);
-+#else
- eXosip_unlock();
-+#endif
- if (cid>0){
- SalOp *ret=sal_find_call(h->base.root,cid);
- return ret;
-@@ -901,48 +1169,81 @@ SalOp *sal_call_get_replaces(SalOp *h){ - return NULL;
- }
-
--int sal_call_send_dtmf(SalOp *h, char dtmf){
-+int sal_call_send_dtmf(Sal *ctx, SalOp *h, char dtmf){
- osip_message_t *msg=NULL;
- char dtmf_body[128];
- char clen[10];
-
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_lock(ctx->excontext);
-+#else
- eXosip_lock();
-+#endif
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_call_build_info(ctx->excontext, h->did, &msg);
-+#else
- eXosip_call_build_info(h->did,&msg);
-+#endif
- if (msg){
- snprintf(dtmf_body, sizeof(dtmf_body), "Signal=%c\r\nDuration=250\r\n", dtmf);
- osip_message_set_body(msg,dtmf_body,strlen(dtmf_body));
- osip_message_set_content_type(msg,"application/dtmf-relay");
- snprintf(clen,sizeof(clen),"%lu",(unsigned long)strlen(dtmf_body));
- osip_message_set_content_length(msg,clen);
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_call_send_request(ctx->excontext, h->did, msg);
-+#else
- eXosip_call_send_request(h->did,msg);
-+#endif
- }
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_unlock(ctx->excontext);
-+#else
- eXosip_unlock();
-+#endif
- return 0;
- }
-
--static void push_auth_to_exosip(const SalAuthInfo *info){
-+static void push_auth_to_exosip(Sal *ctx, const SalAuthInfo *info){
- const char *userid;
- if (info->userid==NULL || info->userid[0]=='\0') userid=info->username;
- else userid=info->userid;
- ms_message("Authentication info for username [%s], id[%s], realm [%s] added to eXosip", info->username,userid, info->realm);
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_add_authentication_info (ctx->excontext, info->username,userid,
-+ info->password, NULL,info->realm);
-+#else
- eXosip_add_authentication_info (info->username,userid,
- info->password, NULL,info->realm);
-+#endif
- }
- /*
- * Just for symmetry ;-)
- */
--static void pop_auth_from_exosip() {
-- eXosip_clear_authentication_info();
-+static void pop_auth_from_exosip(Sal *ctx) {
-+ eXosip_clear_authentication_info(ctx->excontext);
- }
-
--int sal_call_terminate(SalOp *h){
-+int sal_call_terminate(Sal *ctx, SalOp *h){
- int err;
- if (h == NULL) return -1;
-- if (h->auth_info) push_auth_to_exosip(h->auth_info);
-+ if (h->auth_info) push_auth_to_exosip(ctx, h->auth_info);
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_lock(ctx->excontext);
-+#else
- eXosip_lock();
-+#endif
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ err=eXosip_call_terminate(ctx->excontext, h->cid, h->did);
-+#else
- err=eXosip_call_terminate(h->cid,h->did);
-+#endif
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_unlock(ctx->excontext);
-+#else
- eXosip_unlock();
-- if (!h->base.root->reuse_authorization) pop_auth_from_exosip();
-+#endif
-+ if (!h->base.root->reuse_authorization) pop_auth_from_exosip(ctx);
- if (err!=0){
- ms_warning("Exosip could not terminate the call: cid=%i did=%i", h->cid,h->did);
- }
-@@ -950,7 +1251,7 @@ int sal_call_terminate(SalOp *h){ - return 0;
- }
-
--void sal_op_authenticate(SalOp *h, const SalAuthInfo *info){
-+void sal_op_authenticate(Sal *ctx, SalOp *h, const SalAuthInfo *info){
- bool_t terminating=FALSE;
- if (h->pending_auth && strcmp(h->pending_auth->request->sip_method,"BYE")==0) {
- terminating=TRUE;
-@@ -958,7 +1259,7 @@ void sal_op_authenticate(SalOp *h, const - if (h->terminated && !terminating) return;
-
- if (h->pending_auth){
-- push_auth_to_exosip(info);
-+ push_auth_to_exosip(ctx, info);
-
- /*FIXME exosip does not take into account this update register message*/
- /*
-@@ -967,11 +1268,23 @@ void sal_op_authenticate(SalOp *h, const - };
- */
- update_contact_from_response(h,h->pending_auth->response);
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_lock(ctx->excontext);
-+#else
- eXosip_lock();
-+#endif
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_default_action(ctx->excontext, h->pending_auth);
-+#else
- eXosip_default_action(h->pending_auth);
-+#endif
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_unlock(ctx->excontext);
-+#else
- eXosip_unlock();
-+#endif
- ms_message("eXosip_default_action() done");
-- if (!h->base.root->reuse_authorization) pop_auth_from_exosip();
-+ if (!h->base.root->reuse_authorization) pop_auth_from_exosip(ctx);
-
- if (h->auth_info) sal_auth_info_delete(h->auth_info); /*if already exist*/
- h->auth_info=sal_auth_info_clone(info); /*store auth info for subsequent request*/
-@@ -1210,9 +1523,21 @@ static int call_proceeding(Sal *sal, eXo -
- if (op==NULL || op->terminated==TRUE) {
- ms_warning("This call has been canceled.");
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_lock(sal->excontext);
-+#else
- eXosip_lock();
-+#endif
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_call_terminate(sal->excontext, ev->cid, ev->did);
-+#else
- eXosip_call_terminate(ev->cid,ev->did);
-+#endif
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_unlock(sal->excontext);
-+#else
- eXosip_unlock();
-+#endif
- return -1;
- }
- if (ev->did>0)
-@@ -1249,9 +1574,21 @@ static void call_accepted(Sal *sal, eXos -
- if (op==NULL || op->terminated==TRUE) {
- ms_warning("This call has been already terminated.");
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_lock(sal->excontext);
-+#else
- eXosip_lock();
-+#endif
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_call_terminate(sal->excontext, ev->cid, ev->did);
-+#else
- eXosip_call_terminate(ev->cid,ev->did);
-+#endif
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_unlock(sal->excontext);
-+#else
- eXosip_unlock();
-+#endif
- return ;
- }
-
-@@ -1266,12 +1603,28 @@ static void call_accepted(Sal *sal, eXos - sdp_message_free(sdp);
- if (op->base.local_media) sdp_process(op);
- }
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_call_build_ack(sal->excontext, ev->did, &msg);
-+#else
- eXosip_call_build_ack(ev->did,&msg);
-+#endif
- if (msg==NULL) {
- ms_warning("This call has been already terminated.");
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_lock(sal->excontext);
-+#else
- eXosip_lock();
-+#endif
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_call_terminate(sal->excontext, ev->cid, ev->did);
-+#else
- eXosip_call_terminate(ev->cid,ev->did);
-+#endif
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_unlock(sal->excontext);
-+#else
- eXosip_unlock();
-+#endif
- return ;
- }
- contact=sal_op_get_contact(op);
-@@ -1284,7 +1637,11 @@ static void call_accepted(Sal *sal, eXos - sdp_message_free(op->sdp_answer);
- op->sdp_answer=NULL;
- }
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_call_send_ack(sal->excontext, ev->did, msg);
-+#else
- eXosip_call_send_ack(ev->did,msg);
-+#endif
- sal->callbacks.call_accepted(op);
- }
-
-@@ -1458,7 +1815,11 @@ static bool_t call_failure(Sal *sal, eXo - sr=SalReasonMedia;
- break;
- case 422:
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_default_action(sal->excontext, ev);
-+#else
- eXosip_default_action(ev);
-+#endif
- return TRUE;
- break;
- case 480:
-@@ -1494,7 +1855,7 @@ static bool_t call_failure(Sal *sal, eXo - }
-
- /* Request remote side to send us VFU */
--void sal_call_send_vfu_request(SalOp *h){
-+void sal_call_send_vfu_request(Sal *ctx, SalOp *h){
- osip_message_t *msg=NULL;
- char info_body[] =
- "<?xml version=\"1.0\" encoding=\"utf-8\" ?>"
-@@ -1508,17 +1869,33 @@ void sal_call_send_vfu_request(SalOp *h) -
- char clen[10];
-
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_lock(ctx->excontext);
-+#else
- eXosip_lock();
-+#endif
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_call_build_info(ctx->excontext, h->did, &msg);
-+#else
- eXosip_call_build_info(h->did,&msg);
-+#endif
- if (msg){
- osip_message_set_body(msg,info_body,strlen(info_body));
- osip_message_set_content_type(msg,"application/media_control+xml");
- snprintf(clen,sizeof(clen),"%lu",(unsigned long)strlen(info_body));
- osip_message_set_content_length(msg,clen);
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_call_send_request(ctx->excontext, h->did, msg);
-+#else
- eXosip_call_send_request(h->did,msg);
-+#endif
- ms_message("Sending VFU request !");
- }
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_unlock(ctx->excontext);
-+#else
- eXosip_unlock();
-+#endif
- }
-
- static void process_media_control_xml(Sal *sal, eXosip_event_t *ev){
-@@ -1537,20 +1914,45 @@ static void process_media_control_xml(Sa - ms_message("Receiving VFU request !");
- if (sal->callbacks.vfu_request){
- sal->callbacks.vfu_request(op);
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_call_build_answer(sal->excontext, ev->tid, 200, &ans);
-+#else
- eXosip_call_build_answer(ev->tid,200,&ans);
-+#endif
- if (ans)
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_call_send_answer(sal->excontext, ev->tid, 200, ans);
-+#else
- eXosip_call_send_answer(ev->tid,200,ans);
-+#endif
- return;
- }
- }
- /*in all other cases we must say it is not implemented.*/
- {
- osip_message_t *ans=NULL;
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_lock(sal->excontext);
-+#else
- eXosip_lock();
-+#endif
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_call_build_answer(sal->excontext, ev->tid, 501, &ans);
-+#else
- eXosip_call_build_answer(ev->tid,501,&ans);
-- if (ans)
-+#endif
-+ if (ans) {
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_call_send_answer(sal->excontext, ev->tid, 501, ans);
-+#else
- eXosip_call_send_answer(ev->tid,501,ans);
-+#endif
-+ }
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_unlock(sal->excontext);
-+#else
- eXosip_unlock();
-+#endif
- }
- }
-
-@@ -1579,11 +1981,28 @@ static void process_dtmf_relay(Sal *sal, - sal->callbacks.dtmf_received(op, tmp[0]);
- }
- }
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_lock(sal->excontext);
-+#else
- eXosip_lock();
-+#endif
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_call_build_answer(sal->excontext, ev->tid, 200, &ans);
-+#else
- eXosip_call_build_answer(ev->tid,200,&ans);
-- if (ans)
-+#endif
-+ if (ans) {
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_call_send_answer(sal->excontext, ev->tid, 200, ans);
-+#else
- eXosip_call_send_answer(ev->tid,200,ans);
-+#endif
-+ }
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_unlock(sal->excontext);
-+#else
- eXosip_unlock();
-+#endif
- }
- }
-
-@@ -1628,11 +2047,28 @@ static void process_refer(Sal *sal, SalO - osip_free(tmp);
- osip_from_free(from);
- }
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_lock(sal->excontext);
-+#else
- eXosip_lock();
-+#endif
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_call_build_answer(sal->excontext, ev->tid, 202, &ans);
-+#else
- eXosip_call_build_answer(ev->tid,202,&ans);
-- if (ans)
-+#endif
-+ if (ans) {
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_call_send_answer(sal->excontext, ev->tid, 202, ans);
-+#else
- eXosip_call_send_answer(ev->tid,202,ans);
-+#endif
-+ }
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_unlock(sal->excontext);
-+#else
- eXosip_unlock();
-+#endif
- }
- else
- {
-@@ -1677,11 +2113,28 @@ static void process_notify(Sal *sal, eXo - }
- }
- /*answer that we received the notify*/
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_lock(sal->excontext);
-+#else
- eXosip_lock();
-+#endif
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_call_build_answer(sal->excontext, ev->tid, 200, &ans);
-+#else
- eXosip_call_build_answer(ev->tid,200,&ans);
-- if (ans)
-+#endif
-+ if (ans) {
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_call_send_answer(sal->excontext, ev->tid, 200, ans);
-+#else
- eXosip_call_send_answer(ev->tid,200,ans);
-+#endif
-+ }
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_unlock(sal->excontext);
-+#else
- eXosip_unlock();
-+#endif
- osip_free(from);
- }
-
-@@ -1699,28 +2152,79 @@ static void call_message_new(Sal *sal, e - else {
- ms_message("Unhandled SIP INFO.");
- /*send an "Not implemented" answer*/
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_lock(sal->excontext);
-+#else
- eXosip_lock();
-+#endif
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_call_build_answer(sal->excontext, ev->tid, 501, &ans);
-+#else
- eXosip_call_build_answer(ev->tid,501,&ans);
-- if (ans)
-+#endif
-+ if (ans) {
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_call_send_answer(sal->excontext, ev->tid, 501, ans);
-+#else
- eXosip_call_send_answer(ev->tid,501,ans);
-+#endif
-+ }
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_unlock(sal->excontext);
-+#else
- eXosip_unlock();
-+#endif
- }
- }else{
- /*empty SIP INFO, probably to test we are alive. Send an empty answer*/
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_lock(sal->excontext);
-+#else
- eXosip_lock();
-+#endif
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_call_build_answer(sal->excontext, ev->tid, 200, &ans);
-+#else
- eXosip_call_build_answer(ev->tid,200,&ans);
-- if (ans)
-+#endif
-+ if (ans) {
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_call_send_answer(sal->excontext, ev->tid, 200, ans);
-+#else
- eXosip_call_send_answer(ev->tid,200,ans);
-+#endif
-+ }
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_unlock(sal->excontext);
-+#else
- eXosip_unlock();
-+#endif
- }
- }else if(MSG_IS_MESSAGE(ev->request)){
- /* SIP messages could be received into call */
- text_received(sal, ev);
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_lock(sal->excontext);
-+#else
- eXosip_lock();
-+#endif
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_call_build_answer(sal->excontext, ev->tid, 200, &ans);
-+#else
- eXosip_call_build_answer(ev->tid,200,&ans);
-- if (ans)
-+#endif
-+ if (ans) {
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_call_send_answer(sal->excontext, ev->tid, 200, ans);
-+#else
- eXosip_call_send_answer(ev->tid,200,ans);
-+#endif
-+ }
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_unlock(sal->excontext);
-+#else
- eXosip_unlock();
-+#endif
- }else if(MSG_IS_REFER(ev->request)){
- SalOp *op=find_op(sal,ev);
-
-@@ -1729,13 +2233,29 @@ static void call_message_new(Sal *sal, e - }else if(MSG_IS_NOTIFY(ev->request)){
- process_notify(sal,ev);
- }else if (MSG_IS_OPTIONS(ev->request)){
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_lock(sal->excontext);
-+#else
- eXosip_lock();
-+#endif
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_call_build_answer(sal->excontext, ev->tid, 200, &ans);
-+#else
- eXosip_call_build_answer(ev->tid,200,&ans);
-+#endif
- if (ans){
- fill_options_answer(ans);
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_call_send_answer(sal->excontext, ev->tid, 200, ans);
-+#else
- eXosip_call_send_answer(ev->tid,200,ans);
-+#endif
- }
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_unlock(sal->excontext);
-+#else
- eXosip_unlock();
-+#endif
- }
- }else ms_warning("call_message_new: No request ?");
- }
-@@ -1743,11 +2263,28 @@ static void call_message_new(Sal *sal, e - static void inc_update(Sal *sal, eXosip_event_t *ev){
- osip_message_t *msg=NULL;
- ms_message("Processing incoming UPDATE");
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_lock(sal->excontext);
-+#else
- eXosip_lock();
-+#endif
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_message_build_answer(sal->excontext, ev->tid, 200, &msg);
-+#else
- eXosip_message_build_answer(ev->tid,200,&msg);
-- if (msg!=NULL)
-+#endif
-+ if (msg!=NULL) {
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_message_send_answer(sal->excontext, ev->tid, 200, msg);
-+#else
- eXosip_message_send_answer(ev->tid,200,msg);
-+#endif
-+ }
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_unlock(sal->excontext);
-+#else
- eXosip_unlock();
-+#endif
- }
-
- static bool_t comes_from_local_if(osip_message_t *msg){
-@@ -1865,7 +2402,7 @@ static void text_received(Sal *sal, eXos - salmsg.message_id=message_id;
- salmsg.time=date!=NULL ? mktime_utc(&ret) : time(NULL);
- sal->callbacks.text_received(op,&salmsg);
-- sal_op_release(op);
-+ sal_op_release(sal, op);
- osip_free(from);
- }
-
-@@ -1874,12 +2411,24 @@ static void other_request(Sal *sal, eXos - if (ev->request==NULL) return;
- if (strcmp(ev->request->sip_method,"MESSAGE")==0){
- text_received(sal,ev);
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_message_send_answer(sal->excontext, ev->tid, 200, NULL);
-+#else
- eXosip_message_send_answer(ev->tid,200,NULL);
-+#endif
- }else if (strcmp(ev->request->sip_method,"OPTIONS")==0){
- osip_message_t *options=NULL;
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_options_build_answer(sal->excontext, ev->tid, 200, &options);
-+#else
- eXosip_options_build_answer(ev->tid,200,&options);
-+#endif
- fill_options_answer(options);
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_options_send_answer(sal->excontext, ev->tid, 200, options);
-+#else
- eXosip_options_send_answer(ev->tid,200,options);
-+#endif
- }else if (strncmp(ev->request->sip_method, "REFER", 5) == 0){
- ms_message("Receiving REFER request !");
- if (comes_from_local_if(ev->request)) {
-@@ -1896,7 +2445,11 @@ static void other_request(Sal *sal, eXos - osip_free(tmp);
- }
- /*answer with a 501 Not implemented*/
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_message_send_answer(sal->excontext, ev->tid, 501, NULL);
-+#else
- eXosip_message_send_answer(ev->tid,501,NULL);
-+#endif
- }
- }
-
-@@ -1959,7 +2512,7 @@ static bool_t fix_message_contact(SalOp - return TRUE;
- }
-
--static bool_t register_again_with_updated_contact(SalOp *op, osip_message_t *orig_request, osip_message_t *last_answer){
-+static bool_t register_again_with_updated_contact(Sal *ctx, SalOp *op, osip_message_t *orig_request, osip_message_t *last_answer){
- osip_contact_t *ctt=NULL;
- SalAddress* ori_contact_address=NULL;
- const char *received;
-@@ -2007,25 +2560,53 @@ static bool_t register_again_with_update - ms_message("Contact do not match, resending register.");
- else return FALSE;
-
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_lock(ctx->excontext);
-+#else
- eXosip_lock();
-+#endif
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_register_build_register(ctx->excontext, op->rid, op->expires, &msg);
-+#else
- eXosip_register_build_register(op->rid,op->expires,&msg);
-+#endif
- if (msg==NULL){
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_unlock(ctx->excontext);
-+#else
- eXosip_unlock();
-+#endif
- ms_warning("Fail to create a contact updated register.");
- return FALSE;
- }
- if (fix_message_contact(op,msg,last_answer,op->base.root->expire_old_contact)) {
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_register_send_register(ctx->excontext, op->rid, msg);
-+#else
- eXosip_register_send_register(op->rid,msg);
-+#endif
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_unlock(ctx->excontext);
-+#else
- eXosip_unlock();
-+#endif
- ms_message("Resending new register with updated contact");
- update_contact_from_response(op,last_answer);
- return TRUE;
- } else {
- ms_warning("Fail to send updated register.");
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_unlock(ctx->excontext);
-+#else
- eXosip_unlock();
-+#endif
- return FALSE;
- }
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_unlock(ctx->excontext);
-+#else
- eXosip_unlock();
-+#endif
- return FALSE;
- }
-
-@@ -2040,7 +2621,7 @@ static void registration_success(Sal *sa - osip_message_get_expires(ev->request,0,&h);
- if (h!=NULL && atoi(h->hvalue)!=0){
- registered=TRUE;
-- if (!register_again_with_updated_contact(op,ev->request,ev->response)){
-+ if (!register_again_with_updated_contact(sal,op,ev->request,ev->response)){
- sal->callbacks.register_success(op,registered);
- }
- }else {
-@@ -2078,10 +2659,26 @@ static bool_t registration_failure(Sal * - if (val>op->expires)
- op->expires=val;
- }else op->expires*=2;
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_lock(sal->excontext);
-+#else
- eXosip_lock();
-+#endif
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_register_build_register(sal->excontext, op->rid, op->expires, &msg);
-+#else
- eXosip_register_build_register(op->rid,op->expires,&msg);
-+#endif
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_register_send_register(sal->excontext, op->rid, msg);
-+#else
- eXosip_register_send_register(op->rid,msg);
-+#endif
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_unlock(sal->excontext);
-+#else
- eXosip_unlock();
-+#endif
- }
- break;
- case 606: /*Not acceptable, workaround for proxies that don't like private addresses
-@@ -2092,7 +2689,7 @@ static bool_t registration_failure(Sal * - default:
- /* if contact is up to date, process the failure, otherwise resend a new register with
- updated contact first, just in case the faillure is due to incorrect contact */
-- if (ev->response && register_again_with_updated_contact(op,ev->request,ev->response))
-+ if (ev->response && register_again_with_updated_contact(sal,op,ev->request,ev->response))
- return TRUE; /*we are retrying with an updated contact*/
- if (status_code==403){
- se=SalErrorFailure;
-@@ -2136,7 +2733,7 @@ static void process_in_call_reply(Sal *s - if (ev->response){
- if (ev->request && strcmp(osip_message_get_method(ev->request),"NOTIFY")==0){
- if (op->sipfrag_pending){
-- send_notify_for_refer(op->did,op->sipfrag_pending);
-+ send_notify_for_refer(sal, op->did,op->sipfrag_pending);
- op->sipfrag_pending=NULL;
- }
- }
-@@ -2156,7 +2753,9 @@ static bool_t process_event(Sal *sal, eX - ms_message("CALL_CLOSED or CANCELLED\n");
- call_terminated(sal,ev);
- break;
-+#ifdef EXOSIP_CALL_TIMEOUT
- case EXOSIP_CALL_TIMEOUT:
-+#endif
- case EXOSIP_CALL_NOANSWER:
- ms_message("CALL_TIMEOUT or NOANSWER\n");
- return call_failure(sal,ev);
-@@ -2184,7 +2783,11 @@ static bool_t process_event(Sal *sal, eX - break;
- case EXOSIP_CALL_REDIRECTED:
- ms_message("CALL_REDIRECTED");
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_default_action(sal->excontext, ev);
-+#else
- eXosip_default_action(ev);
-+#endif
- break;
- case EXOSIP_CALL_PROCEEDING:
- ms_message("CALL_PROCEEDING");
-@@ -2213,13 +2816,17 @@ static bool_t process_event(Sal *sal, eX - ms_message("CALL_IN_SUBSCRIPTION_NEW ");
- sal_exosip_subscription_recv(sal,ev);
- break;
-+#ifdef EXOSIP_IN_SUBSCRIPTION_RELEASED
- case EXOSIP_IN_SUBSCRIPTION_RELEASED:
- ms_message("CALL_SUBSCRIPTION_NEW ");
- sal_exosip_in_subscription_closed(sal,ev);
- break;
-+#endif
-+#ifdef EXOSIP_SUBSCRIPTION_UPDATE
- case EXOSIP_SUBSCRIPTION_UPDATE:
- ms_message("CALL_SUBSCRIPTION_UPDATE");
- break;
-+#endif
- case EXOSIP_SUBSCRIPTION_NOTIFY:
- ms_message("CALL_SUBSCRIPTION_NOTIFY");
- sal_exosip_notify_recv(sal,ev);
-@@ -2228,10 +2835,12 @@ static bool_t process_event(Sal *sal, eX - ms_message("EXOSIP_SUBSCRIPTION_ANSWERED, ev->sid=%i, ev->did=%i\n",ev->sid,ev->did);
- sal_exosip_subscription_answered(sal,ev);
- break;
-+#ifdef EXOSIP_SUBSCRIPTION_CLOSED
- case EXOSIP_SUBSCRIPTION_CLOSED:
- ms_message("EXOSIP_SUBSCRIPTION_CLOSED\n");
- sal_exosip_subscription_closed(sal,ev);
- break;
-+#endif
- case EXOSIP_SUBSCRIPTION_REQUESTFAILURE: /**< announce a request failure */
- if (ev->response && (ev->response->status_code == 407 || ev->response->status_code == 401)){
- return process_authentication(sal,ev);
-@@ -2266,7 +2875,11 @@ static bool_t process_event(Sal *sal, eX - case 401:
- return process_authentication(sal,ev);
- case 412: {
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_automatic_action (sal->excontext);
-+#else
- eXosip_automatic_action ();
-+#endif
- return 1;
- }
- }
-@@ -2282,22 +2895,50 @@ static bool_t process_event(Sal *sal, eX -
- int sal_iterate(Sal *sal){
- eXosip_event_t *ev;
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ while((ev=eXosip_event_wait(sal->excontext, 0, 0))!=NULL){
-+#else
- while((ev=eXosip_event_wait(0,0))!=NULL){
-+#endif
- if (process_event(sal,ev))
- eXosip_event_free(ev);
- }
- #ifdef HAVE_EXOSIP_TRYLOCK
-+
- if (eXosip_trylock()==0){
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_automatic_refresh(sal->excontext);
-+#else
- eXosip_automatic_refresh();
-+#endif
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_unlock(sal->excontext);
-+#else
- eXosip_unlock();
-+#endif
- }else{
- ms_warning("eXosip_trylock busy.");
- }
-+
-+#else /* HAVE_EXOSIP_TRYLOCK */
-+
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_lock(sal->excontext);
- #else
- eXosip_lock();
-+#endif
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_automatic_refresh(sal->excontext);
-+#else
- eXosip_automatic_refresh();
-+#endif
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_unlock(sal->excontext);
-+#else
- eXosip_unlock();
- #endif
-+
-+#endif /* HAVE_EXOSIP_TRYLOCK */
- return 0;
- }
-
-@@ -2337,7 +2978,7 @@ void sal_message_add_route(osip_message_ - }
-
-
--int sal_register(SalOp *h, const char *proxy, const char *from, int expires){
-+int sal_register(Sal *ctx, SalOp *h, const char *proxy, const char *from, int expires){
- osip_message_t *msg;
- const char *contact=sal_op_get_contact(h);
-
-@@ -2361,31 +3002,60 @@ int sal_register(SalOp *h, const char *p - }
- if (uri) ms_free(uri);
- sal_address_destroy(from_parsed);
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_lock(ctx->excontext);
-+#else
- eXosip_lock();
-+#endif
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ h->rid=eXosip_register_build_initial_register(ctx->excontext, from, domain,
-+ NULL, expires, &msg);
-+#else
- h->rid=eXosip_register_build_initial_register(from,domain,NULL,expires,&msg);
-+#endif
- if (msg){
- if (contact) register_set_contact(msg,contact);
- sal_message_add_route(msg,proxy);
- sal_add_register(h->base.root,h);
- }else{
- ms_error("Could not build initial register.");
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_unlock(ctx->excontext);
-+#else
- eXosip_unlock();
-+#endif
- return -1;
- }
- }else{
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_lock(ctx->excontext);
-+#else
- eXosip_lock();
-+#endif
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_register_build_register(ctx->excontext, h->rid, expires, &msg);
-+#else
- eXosip_register_build_register(h->rid,expires,&msg);
-+#endif
- sal_message_add_route(msg,proxy);
- }
- if (msg){
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_register_send_register(ctx->excontext, h->rid, msg);
-+#else
- eXosip_register_send_register(h->rid,msg);
-+#endif
- }
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_unlock(ctx->excontext);
-+#else
- eXosip_unlock();
-+#endif
- h->expires=expires;
- return (msg != NULL) ? 0 : -1;
- }
-
--int sal_register_refresh(SalOp *op, int expires){
-+int sal_register_refresh(Sal *ctx, SalOp *op, int expires){
- osip_message_t *msg=NULL;
- const char *contact=sal_op_get_contact(op);
-
-@@ -2408,27 +3078,58 @@ int sal_register_refresh(SalOp *op, int - }
- }
- }
-+#else /* HAVE_EXOSIP_TRYLOCK */
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_lock(ctx->excontext);
- #else
- eXosip_lock();
- #endif
-+#endif /* HAVE_EXOSIP_TRYLOCK */
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_register_build_register(ctx->excontext, op->rid, expires, &msg);
-+#else
- eXosip_register_build_register(op->rid,expires,&msg);
-+#endif
- if (msg!=NULL){
- if (contact) register_set_contact(msg,contact);
- sal_message_add_route(msg,sal_op_get_route(op));
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_register_send_register(ctx->excontext, op->rid, msg);
-+#else
- eXosip_register_send_register(op->rid,msg);
-+#endif
- }else ms_error("Could not build REGISTER refresh message.");
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_unlock(ctx->excontext);
-+#else
- eXosip_unlock();
-+#endif
- return (msg != NULL) ? 0 : -1;
- }
-
--
--int sal_unregister(SalOp *h){
-+int sal_unregister(Sal *ctx, SalOp *h){
- osip_message_t *msg=NULL;
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_lock(ctx->excontext);
-+#else
- eXosip_lock();
-- eXosip_register_build_register(h->rid,0,&msg);
-+#endif
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_register_build_register(ctx->excontext, h->rid, 0, &msg);
-+#else
-+ eXosip_register_build_register(h->rid, 0, &msg);
-+#endif
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ if (msg) eXosip_register_send_register(ctx->excontext, h->rid,msg);
-+#else
- if (msg) eXosip_register_send_register(h->rid,msg);
-+#endif
- else ms_warning("Could not build unREGISTER !");
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_unlock(ctx->excontext);
-+#else
- eXosip_unlock();
-+#endif
- return 0;
- }
-
-@@ -2598,8 +3299,13 @@ void sal_set_keepalive_period(Sal *ctx,u - default:
- break;
- }
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_set_option (ctx->excontext, EXOSIP_OPT_UDP_KEEP_ALIVE, &ctx->keepalive_period);
-+#else
- eXosip_set_option (EXOSIP_OPT_UDP_KEEP_ALIVE, &ctx->keepalive_period);
-+#endif
- }
-+
- unsigned int sal_get_keepalive_period(Sal *ctx) {
- return ctx->keepalive_period;
- }
-@@ -2632,16 +3338,32 @@ void sal_address_set_transport(SalAddres - }
-
- /* sends a reinvite. Local media description may have changed by application since call establishment*/
--int sal_call_update(SalOp *h, const char *subject){
-+int sal_call_update(Sal *sal, SalOp *h, const char *subject){
- int err=0;
- osip_message_t *reinvite=NULL;
-
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_lock(sal->excontext);
-+#else
- eXosip_lock();
-+#endif
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ if(eXosip_call_build_request(sal->excontext, h->did, "INVITE", &reinvite) != 0 || reinvite==NULL){
-+#else
- if(eXosip_call_build_request(h->did,"INVITE",&reinvite) != 0 || reinvite==NULL){
-+#endif
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_unlock(sal->excontext);
-+#else
- eXosip_unlock();
-+#endif
- return -1;
- }
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_unlock(sal->excontext);
-+#else
- eXosip_unlock();
-+#endif
- osip_message_set_subject(reinvite,subject);
- osip_message_set_allow(reinvite, "INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO");
- if (h->base.contact){
-@@ -2656,9 +3378,21 @@ int sal_call_update(SalOp *h, const char - h->sdp_offering=TRUE;
- set_sdp_from_desc(reinvite,h->base.local_media);
- }else h->sdp_offering=FALSE;
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_lock(sal->excontext);
-+#else
- eXosip_lock();
-+#endif
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ err = eXosip_call_send_request(sal->excontext, h->did, reinvite);
-+#else
- err = eXosip_call_send_request(h->did, reinvite);
-+#endif
-+#ifdef HAVE_STRUCT_EXOSIP_T
-+ eXosip_unlock(sal->excontext);
-+#else
- eXosip_unlock();
-+#endif
- return err;
- }
-
---- a/coreapi/sal_eXosip2.h -+++ b/coreapi/sal_eXosip2.h -@@ -53,6 +53,9 @@ struct Sal{ - bool_t expire_old_contact; - bool_t add_dates; - bool_t tcp_tls_keepalive; -+#ifdef HAVE_STRUCT_EXOSIP_T -+ struct eXosip_t *excontext; -+#endif - }; - - struct SalOp{ ---- a/coreapi/sal_eXosip2_presence.c -+++ b/coreapi/sal_eXosip2_presence.c -@@ -17,6 +17,9 @@ along with this program; if not, write t - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -+#ifdef HAVE_CONFIG_H -+#include "config.h" -+#endif - - #include "sal_eXosip2.h" - -@@ -101,7 +104,7 @@ static void msg_add_current_date(osip_me - } - - --int sal_message_send(SalOp *op, const char *from, const char *to, const char* content_type, const char *msg){ -+int sal_message_send(Sal *ctx, SalOp *op, const char *from, const char *to, const char* content_type, const char *msg){ - osip_message_t *sip=NULL; - - if(op->cid == -1) -@@ -113,68 +116,126 @@ int sal_message_send(SalOp *op, const ch - sal_op_set_to(op,to); - - sal_exosip_fix_route(op); -+#ifdef HAVE_STRUCT_EXOSIP_T -+ eXosip_lock(ctx->excontext); -+#else - eXosip_lock(); -+#endif -+#ifdef HAVE_STRUCT_EXOSIP_T -+ eXosip_message_build_request(ctx->excontext, &sip, "MESSAGE", sal_op_get_to(op), -+ sal_op_get_from(op),sal_op_get_route(op)); -+#else - eXosip_message_build_request(&sip,"MESSAGE",sal_op_get_to(op), - sal_op_get_from(op),sal_op_get_route(op)); -+#endif - if (sip!=NULL){ - sal_exosip_add_custom_headers(sip,op->base.custom_headers); - msg_add_current_date(sip); - osip_message_set_content_type(sip,content_type); - if (msg) osip_message_set_body(sip,msg,strlen(msg)); - sal_add_other(op->base.root,op,sip); -+#ifdef HAVE_STRUCT_EXOSIP_T -+ eXosip_message_send_request(ctx->excontext, sip); -+#else - eXosip_message_send_request(sip); -+#endif - }else{ - ms_error("Could not build MESSAGE request !"); - } -+#ifdef HAVE_STRUCT_EXOSIP_T -+ eXosip_unlock(ctx->excontext); -+#else - eXosip_unlock(); -+#endif - } - else - { - /* we are currently in communication with the destination */ -+#ifdef HAVE_STRUCT_EXOSIP_T -+ eXosip_lock(ctx->excontext); -+#else - eXosip_lock(); -+#endif - //First we generate an INFO message to get the current call_id and a good cseq -+#ifdef HAVE_STRUCT_EXOSIP_T -+ eXosip_call_build_request(ctx->excontext, op->did, "MESSAGE", &sip); -+#else - eXosip_call_build_request(op->did,"MESSAGE",&sip); -+#endif - if(sip == NULL) - { - ms_warning("could not get a build info to send MESSAGE, maybe no previous call established ?"); -+#ifdef HAVE_STRUCT_EXOSIP_T -+ eXosip_unlock(ctx->excontext); -+#else - eXosip_unlock(); -+#endif - return -1; - } - sal_exosip_add_custom_headers(sip,op->base.custom_headers); - msg_add_current_date(sip); - osip_message_set_content_type(sip,content_type); - if (msg) osip_message_set_body(sip,msg,strlen(msg)); -+#ifdef HAVE_STRUCT_EXOSIP_T -+ eXosip_call_send_request(ctx->excontext, op->did, sip); -+#else - eXosip_call_send_request(op->did,sip); -+#endif -+#ifdef HAVE_STRUCT_EXOSIP_T -+ eXosip_unlock(ctx->excontext); -+#else - eXosip_unlock(); -+#endif - } - return 0; - } - --int sal_text_send(SalOp *op, const char *from, const char *to, const char *msg) { -- return sal_message_send(op,from,to,"text/plain",msg); -+int sal_text_send(Sal *ctx, SalOp *op, const char *from, const char *to, const char *msg) { -+ return sal_message_send(ctx,op,from,to,"text/plain",msg); - } - /*presence Subscribe/notify*/ --int sal_subscribe_presence(SalOp *op, const char *from, const char *to){ -+int sal_subscribe_presence(Sal *ctx, SalOp *op, const char *from, const char *to){ - osip_message_t *msg=NULL; - if (from) - sal_op_set_from(op,from); - if (to) - sal_op_set_to(op,to); - sal_exosip_fix_route(op); -+#ifdef HAVE_STRUCT_EXOSIP_T -+ eXosip_lock(ctx->excontext); -+#else - eXosip_lock(); -+#endif -+#ifdef HAVE_STRUCT_EXOSIP_T -+ eXosip_subscribe_build_initial_request(ctx->excontext, &msg, sal_op_get_to(op), -+ sal_op_get_from(op), sal_op_get_route(op), "presence", 600); -+#else - eXosip_subscribe_build_initial_request(&msg,sal_op_get_to(op),sal_op_get_from(op), - sal_op_get_route(op),"presence",600); -+#endif - if (msg==NULL){ - ms_error("Could not build subscribe request to %s",to); -+#ifdef HAVE_STRUCT_EXOSIP_T -+ eXosip_unlock(ctx->excontext); -+#else - eXosip_unlock(); -+#endif - return -1; - } - if (op->base.contact){ - _osip_list_set_empty(&msg->contacts,(void (*)(void*))osip_contact_free); - osip_message_set_contact(msg,op->base.contact); - } -+#ifdef HAVE_STRUCT_EXOSIP_T -+ op->sid=eXosip_subscribe_send_initial_request(ctx->excontext, msg); -+#else - op->sid=eXosip_subscribe_send_initial_request(msg); -+#endif -+#ifdef HAVE_STRUCT_EXOSIP_T -+ eXosip_unlock(ctx->excontext); -+#else - eXosip_unlock(); -+#endif - if (op->sid==-1){ - osip_message_free(msg); - return -1; -@@ -183,45 +244,93 @@ int sal_subscribe_presence(SalOp *op, co - return 0; - } - --int sal_unsubscribe(SalOp *op){ -+int sal_unsubscribe(Sal *ctx, SalOp *op){ - osip_message_t *msg=NULL; - if (op->did==-1){ - ms_error("cannot unsubscribe, no dialog !"); - return -1; - } -+#ifdef HAVE_STRUCT_EXOSIP_T -+ eXosip_lock(ctx->excontext); -+#else - eXosip_lock(); -+#endif -+#ifdef HAVE_STRUCT_EXOSIP_T -+ eXosip_subscribe_build_refresh_request(ctx->excontext, op->did, &msg); -+#else - eXosip_subscribe_build_refresh_request(op->did,&msg); -+#endif - if (msg){ - osip_message_set_expires(msg,"0"); -+#ifdef HAVE_STRUCT_EXOSIP_T -+ eXosip_subscribe_send_refresh_request(ctx->excontext, op->did, msg); -+#else - eXosip_subscribe_send_refresh_request(op->did,msg); -+#endif - }else ms_error("Could not build subscribe refresh request ! op->sid=%i, op->did=%i", - op->sid,op->did); -+#ifdef HAVE_STRUCT_EXOSIP_T -+ eXosip_unlock(ctx->excontext); -+#else - eXosip_unlock(); -+#endif - return 0; - } - --int sal_subscribe_accept(SalOp *op){ -+int sal_subscribe_accept(Sal *ctx, SalOp *op){ - osip_message_t *msg=NULL; -+#ifdef HAVE_STRUCT_EXOSIP_T -+ eXosip_lock(ctx->excontext); -+#else - eXosip_lock(); -+#endif -+#ifdef HAVE_STRUCT_EXOSIP_T -+ eXosip_insubscription_build_answer(ctx->excontext, op->tid, 202, &msg); -+#else - eXosip_insubscription_build_answer(op->tid,202,&msg); -+#endif - if (msg==NULL){ - ms_error("Fail to build answer to subscribe."); -+#ifdef HAVE_STRUCT_EXOSIP_T -+ eXosip_unlock(ctx->excontext); -+#else - eXosip_unlock(); -+#endif - return -1; - } - if (op->base.contact){ - _osip_list_set_empty(&msg->contacts,(void (*)(void*))osip_contact_free); - osip_message_set_contact(msg,op->base.contact); - } -+#ifdef HAVE_STRUCT_EXOSIP_T -+ eXosip_insubscription_send_answer(ctx->excontext, op->tid, 202, msg); -+#else - eXosip_insubscription_send_answer(op->tid,202,msg); -+#endif -+#ifdef HAVE_STRUCT_EXOSIP_T -+ eXosip_unlock(ctx->excontext); -+#else - eXosip_unlock(); -+#endif - return 0; - } - --int sal_subscribe_decline(SalOp *op){ -+int sal_subscribe_decline(Sal *ctx, SalOp *op){ -+#ifdef HAVE_STRUCT_EXOSIP_T -+ eXosip_lock(ctx->excontext); -+#else - eXosip_lock(); -+#endif -+#ifdef HAVE_STRUCT_EXOSIP_T -+ eXosip_insubscription_send_answer(ctx->excontext, op->tid, 401, NULL); -+#else - eXosip_insubscription_send_answer(op->tid,401,NULL); -+#endif -+#ifdef HAVE_STRUCT_EXOSIP_T -+ eXosip_unlock(ctx->excontext); -+#else - eXosip_unlock(); -+#endif - return 0; - } - -@@ -595,45 +704,82 @@ static void add_presence_body(osip_messa - } - - --int sal_notify_presence(SalOp *op, SalPresenceStatus status, const char *status_message){ -+int sal_notify_presence(Sal *ctx, SalOp *op, SalPresenceStatus status, const char *status_message){ - osip_message_t *msg=NULL; -+#if 1 -+ enum eXosip_ss ss=EXOSIP_SUBCRSTATE_ACTIVE; -+#else - eXosip_ss_t ss=EXOSIP_SUBCRSTATE_ACTIVE; -+#endif - if (op->nid==-1){ - ms_warning("Cannot notify, subscription was closed."); - return -1; - } - -+#ifdef HAVE_STRUCT_EXOSIP_T -+ eXosip_lock(ctx->excontext); -+#else - eXosip_lock(); -+#endif -+#ifdef HAVE_STRUCT_EXOSIP_T -+ eXosip_insubscription_build_notify(ctx->excontext, op->did, ss, DEACTIVATED, &msg); -+#else - eXosip_insubscription_build_notify(op->did,ss,DEACTIVATED,&msg); -+#endif - if (msg!=NULL){ - const char *identity=sal_op_get_contact(op); - if (identity==NULL) identity=sal_op_get_to(op); - _osip_list_set_empty(&msg->contacts,(void (*)(void*))osip_contact_free); - osip_message_set_contact(msg,identity); - add_presence_body(msg,status); -+#ifdef HAVE_STRUCT_EXOSIP_T -+ eXosip_insubscription_send_request(ctx->excontext, op->did, msg); -+#else - eXosip_insubscription_send_request(op->did,msg); -+#endif - }else ms_error("could not create notify for incoming subscription."); -+#ifdef HAVE_STRUCT_EXOSIP_T -+ eXosip_unlock(ctx->excontext); -+#else - eXosip_unlock(); -+#endif - return 0; - } - --int sal_notify_close(SalOp *op){ -+int sal_notify_close(Sal *ctx, SalOp *op){ - osip_message_t *msg=NULL; -+#ifdef HAVE_STRUCT_EXOSIP_T -+ eXosip_lock(ctx->excontext); -+#else - eXosip_lock(); -+#endif -+#ifdef HAVE_STRUCT_EXOSIP_T -+ eXosip_insubscription_build_notify(ctx->excontext, op->did, EXOSIP_SUBCRSTATE_TERMINATED, -+ DEACTIVATED, &msg); -+#else - eXosip_insubscription_build_notify(op->did,EXOSIP_SUBCRSTATE_TERMINATED,DEACTIVATED,&msg); -+#endif - if (msg!=NULL){ - const char *identity=sal_op_get_contact(op); - if (identity==NULL) identity=sal_op_get_to(op); - osip_message_set_contact(msg,identity); - add_presence_body(msg,SalPresenceOffline); -+#ifdef HAVE_STRUCT_EXOSIP_T -+ eXosip_insubscription_send_request(ctx->excontext, op->did, msg); -+#else - eXosip_insubscription_send_request(op->did,msg); -+#endif - }else ms_error("sal_notify_close(): could not create notify for incoming subscription" - " did=%i, nid=%i",op->did,op->nid); -+#ifdef HAVE_STRUCT_EXOSIP_T -+ eXosip_unlock(ctx->excontext); -+#else - eXosip_unlock(); -+#endif - return 0; - } - --int sal_publish(SalOp *op, const char *from, const char *to, SalPresenceStatus presence_mode){ -+int sal_publish(Sal *ctx, SalOp *op, const char *from, const char *to, SalPresenceStatus presence_mode){ - osip_message_t *pub; - int i; - char buf[1024]; -@@ -641,8 +787,13 @@ int sal_publish(SalOp *op, const char *f - - mk_presence_body (presence_mode, from, buf, sizeof (buf), presence_style); - -+#ifdef HAVE_STRUCT_EXOSIP_T -+ i = eXosip_build_publish(ctx->excontext, &pub, to, from, NULL, "presence", "600", -+ presence_style ? "application/xpidf+xml" : "application/pidf+xml", buf); -+#else - i = eXosip_build_publish(&pub,to, from, NULL, "presence", "600", - presence_style ? "application/xpidf+xml" : "application/pidf+xml", buf); -+#endif - if (i<0){ - ms_warning("Failed to build publish request."); - return -1; -@@ -650,10 +801,23 @@ int sal_publish(SalOp *op, const char *f - if (route) - sal_message_add_route(pub,route); - -+#ifdef HAVE_STRUCT_EXOSIP_T -+ eXosip_lock(ctx->excontext); -+#else - eXosip_lock(); -+#endif -+#ifdef HAVE_STRUCT_EXOSIP_T -+ i = eXosip_publish(ctx->excontext, pub, to); /* should update the sip-if-match parameter -+ from sip-etag from last 200ok of PUBLISH */ -+#else - i = eXosip_publish(pub, to); /* should update the sip-if-match parameter - from sip-etag from last 200ok of PUBLISH */ -+#endif -+#ifdef HAVE_STRUCT_EXOSIP_T -+ eXosip_unlock(ctx->excontext); -+#else - eXosip_unlock(); -+#endif - if (i<0){ - ms_message("Failed to send publish request."); - return -1; -@@ -693,10 +857,26 @@ void sal_exosip_subscription_recv(Sal *s - }else { - osip_message_t *msg=NULL; - ms_warning("Probably a refresh subscribe"); -+#ifdef HAVE_STRUCT_EXOSIP_T -+ eXosip_lock(sal->excontext); -+#else - eXosip_lock(); -+#endif -+#ifdef HAVE_STRUCT_EXOSIP_T -+ eXosip_insubscription_build_answer(sal->excontext, ev->tid, 202, &msg); -+#else - eXosip_insubscription_build_answer(ev->tid,202,&msg); -+#endif -+#ifdef HAVE_STRUCT_EXOSIP_T -+ eXosip_insubscription_send_answer(sal->excontext, ev->tid, 202, msg); -+#else - eXosip_insubscription_send_answer(ev->tid,202,msg); -+#endif -+#ifdef HAVE_STRUCT_EXOSIP_T -+ eXosip_unlock(sal->excontext); -+#else - eXosip_unlock(); -+#endif - } - }else _sal_exosip_subscription_recv(sal,ev); - } ---- a/coreapi/sal.h -+++ b/coreapi/sal.h -@@ -382,8 +382,8 @@ void sal_op_set_contact(SalOp *op, const - void sal_op_set_route(SalOp *op, const char *route); - void sal_op_set_from(SalOp *op, const char *from); - void sal_op_set_to(SalOp *op, const char *to); --void sal_op_release(SalOp *h); --void sal_op_authenticate(SalOp *h, const SalAuthInfo *info); -+void sal_op_release(Sal *ctx, SalOp *h); -+void sal_op_authenticate(Sal *ctx, SalOp *h, const SalAuthInfo *info); - void sal_op_cancel_authentication(SalOp *h); - void sal_op_set_user_pointer(SalOp *h, void *up); - int sal_op_get_auth_requested(SalOp *h, const char **realm, const char **username); -@@ -402,51 +402,51 @@ const char* sal_op_get_call_id(const Sal - - /*Call API*/ - int sal_call_set_local_media_description(SalOp *h, SalMediaDescription *desc); --int sal_call(SalOp *h, const char *from, const char *to); --int sal_call_notify_ringing(SalOp *h, bool_t early_media); -+int sal_call(Sal *ctx, SalOp *h, const char *from, const char *to); -+int sal_call_notify_ringing(Sal *ctx, SalOp *h, bool_t early_media); - /*accept an incoming call or, during a call accept a reINVITE*/ --int sal_call_accept(SalOp*h); --int sal_call_decline(SalOp *h, SalReason reason, const char *redirection /*optional*/); --int sal_call_update(SalOp *h, const char *subject); -+int sal_call_accept(Sal *ctx, SalOp *h); -+int sal_call_decline(Sal *ctx, SalOp *h, SalReason reason, const char *redirection /*optional*/); -+int sal_call_update(Sal *sal, SalOp *h, const char *subject); - SalMediaDescription * sal_call_get_remote_media_description(SalOp *h); - SalMediaDescription * sal_call_get_final_media_description(SalOp *h); --int sal_call_refer(SalOp *h, const char *refer_to); --int sal_call_refer_with_replaces(SalOp *h, SalOp *other_call_h); -+int sal_call_refer(Sal *ctx, SalOp *h, const char *refer_to); -+int sal_call_refer_with_replaces(Sal *ctx, SalOp *h, SalOp *other_call_h); - int sal_call_accept_refer(SalOp *h); - /*informs this call is consecutive to an incoming refer */ - int sal_call_set_referer(SalOp *h, SalOp *refered_call); - /* returns the SalOp of a call that should be replaced by h, if any */ --SalOp *sal_call_get_replaces(SalOp *h); --int sal_call_send_dtmf(SalOp *h, char dtmf); --int sal_call_terminate(SalOp *h); -+SalOp *sal_call_get_replaces(Sal *ctx, SalOp *h); -+int sal_call_send_dtmf(Sal *ctx, SalOp *h, char dtmf); -+int sal_call_terminate(Sal *ctx, SalOp *h); - bool_t sal_call_autoanswer_asked(SalOp *op); --void sal_call_send_vfu_request(SalOp *h); -+void sal_call_send_vfu_request(Sal *ctx, SalOp *h); - int sal_call_is_offerer(const SalOp *h); --int sal_call_notify_refer_state(SalOp *h, SalOp *newcall); -+int sal_call_notify_refer_state(Sal *ctx, SalOp *h, SalOp *newcall); - - /*Registration*/ --int sal_register(SalOp *op, const char *proxy, const char *from, int expires); --int sal_register_refresh(SalOp *op, int expires); --int sal_unregister(SalOp *h); -+int sal_register(Sal *ctx, SalOp *op, const char *proxy, const char *from, int expires); -+int sal_register_refresh(Sal *ctx, SalOp *op, int expires); -+int sal_unregister(Sal *ctx, SalOp *h); - - /*Messaging */ --int sal_text_send(SalOp *op, const char *from, const char *to, const char *text); --int sal_message_send(SalOp *op, const char *from, const char *to, const char* content_type, const char *msg); -+int sal_text_send(Sal *ctx, SalOp *op, const char *from, const char *to, const char *text); -+int sal_message_send(Sal *ctx, SalOp *op, const char *from, const char *to, const char* content_type, const char *msg); - - /*presence Subscribe/notify*/ --int sal_subscribe_presence(SalOp *op, const char *from, const char *to); --int sal_unsubscribe(SalOp *op); --int sal_subscribe_accept(SalOp *op); --int sal_subscribe_decline(SalOp *op); --int sal_notify_presence(SalOp *op, SalPresenceStatus status, const char *status_message); --int sal_notify_close(SalOp *op); -+int sal_subscribe_presence(Sal *ctx, SalOp *op, const char *from, const char *to); -+int sal_unsubscribe(Sal *ctx, SalOp *op); -+int sal_subscribe_accept(Sal *ctx, SalOp *op); -+int sal_subscribe_decline(Sal *ctx, SalOp *op); -+int sal_notify_presence(Sal *ctx, SalOp *op, SalPresenceStatus status, const char *status_message); -+int sal_notify_close(Sal *ctx, SalOp *op); - - /*presence publish */ --int sal_publish(SalOp *op, const char *from, const char *to, SalPresenceStatus status); -+int sal_publish(Sal *ctx, SalOp *op, const char *from, const char *to, SalPresenceStatus status); - - - /*ping: main purpose is to obtain its own contact address behind firewalls*/ --int sal_ping(SalOp *op, const char *from, const char *to); -+int sal_ping(Sal *ctx, SalOp *op, const char *from, const char *to); - - - ---- a/m4/exosip.m4 -+++ b/m4/exosip.m4 -@@ -13,64 +13,30 @@ case $host_alias in - ;; - esac - -+ - dnl eXosip embeded stuff - EXOSIP_CFLAGS="$OSIP_CFLAGS -DOSIP_MT " --EXOSIP_LIBS="$OSIP_LIBS -leXosip2 " -+EXOSIP_LIBS="$OSIP_LIBS -leXosip2 " -+ - --CPPFLAGS_save=$CPPFLAGS --CPPFLAGS="$OSIP_CFLAGS $CPPFLAGS" --AC_CHECK_HEADER([eXosip2/eXosip.h], ,AC_MSG_ERROR([Could not find eXosip2 headers !])) -- --dnl check exosip support of DSCP in exosip --AC_MSG_CHECKING([for DSCP support in exosip]) --AC_TRY_COMPILE([#include <eXosip2/eXosip.h>], -- [int dscp=0;eXosip_set_option(EXOSIP_OPT_SET_DSCP,&dscp);], -- has_exosip_dscp=yes, -- has_exosip_dscp=no -+dnl check for eXosip2 headers -+AC_CHECK_HEADERS([eXosip2/eXosip.h], -+ [], [AC_MSG_ERROR([Could not find eXosip2 headers])] - ) --AC_MSG_RESULT($has_exosip_dscp) --if test "$has_exosip_dscp" = "yes" ; then -- AC_DEFINE( HAVE_EXOSIP_DSCP, 1, [Define if exosip dscp available] ) --fi - --CPPFLAGS=$CPPFLAGS_save -+dnl check for eXosip2 libs -+AC_SEARCH_LIBS([eXosip_init], [eXosip2], -+ [], [AC_MSG_ERROR([Could not find eXosip2 library])] -+) - -+AC_CHECK_FUNCS([ eXosip_malloc eXosip_set_tls_ctx eXosip_get_version eXosip_tls_verify_certificate eXosip_tls_verify_cn eXosip_trylock eXosip_reset_transports ]) - -+if test "x$ac_cv_func_eXosip_malloc" == xyes; then -+ AC_DEFINE([HAVE_STRUCT_EXOSIP_T], [1], [Define if struct eXosip_t exists.]) -+elif test "x$ac_cv_func_eXosip_set_tls_ctx" != xyes; then -+ AC_MSG_ERROR([Could not find eXosip2 library with version >= 3.5.0 !]) -+fi - --dnl check for eXosip2 libs --LDFLAGS_save=$LDFLAGS --LDFLAGS="$OSIP_LIBS $LDFLAGS $OPENSSL_LIBS" --LIBS_save=$LIBS --AC_CHECK_LIB([eXosip2],[eXosip_set_tls_ctx], -- [], -- [AC_MSG_ERROR([Could not find eXosip2 library with version >= 3.5.0 !])], -- [-losipparser2 -losip2 ]) --AC_CHECK_LIB([eXosip2],[eXosip_get_version], -- [AC_DEFINE([HAVE_EXOSIP_GET_VERSION],[1],[Defined when eXosip_get_version is available])], -- [], -- [-losipparser2 -losip2 ]) --AC_CHECK_LIB([eXosip2],[eXosip_tls_verify_certificate], -- [AC_DEFINE([HAVE_EXOSIP_TLS_VERIFY_CERTIFICATE],[1],[Defined when eXosip_tls_verify_certificate is available])], -- [AC_MSG_WARN([Could not find eXosip_tls_verify_certificate in eXosip2 !])], -- [-losipparser2 -losip2 ]) --AC_CHECK_LIB([eXosip2],[eXosip_tls_verify_cn], -- [AC_DEFINE([HAVE_EXOSIP_TLS_VERIFY_CN],[1],[Defined when eXosip_tls_verify_certificate is available])], -- [AC_MSG_WARN([Could not find eXosip_tls_verify_cn in eXosip2 !])], -- [-losipparser2 -losip2 ]) --AC_CHECK_LIB([eXosip2],[eXosip_trylock], -- [AC_DEFINE([HAVE_EXOSIP_TRYLOCK],[1],[Defined when eXosip_get_socket is available])], -- [], -- [-losipparser2 -losip2 ]) --AC_CHECK_LIB([eXosip2],[eXosip_reset_transports], -- [AC_DEFINE([HAVE_EXOSIP_RESET_TRANSPORTS],[1],[Defined when eXosip_reset_transports is available])], -- [], -- [-losipparser2 -losip2 ]) --dnl AC_CHECK_LIB([eXosip2],[eXosip_get_naptr], --dnl [AC_DEFINE([HAVE_EXOSIP_NAPTR_SUPPORT],[1],[Defined when eXosip_get_naptr is available])], --dnl [], --dnl [-losipparser2 -losip2 ]) --LIBS=$LIBS_save --LDFLAGS=$LDFLAGS_save - - AC_SUBST(EXOSIP_CFLAGS) - AC_SUBST(EXOSIP_LIBS) |