diff --git a/coreapi/friend.c b/coreapi/friend.c index 451f8ad64..3dbe9c83a 100644 --- a/coreapi/friend.c +++ b/coreapi/friend.c @@ -171,8 +171,13 @@ LinphoneFriend * linphone_friend_new(){ } LinphoneFriend *linphone_friend_new_with_addr(const char *addr){ + LinphoneAddress* linphone_address = linphone_address_new(addr); + if (linphone_address == NULL) { + ms_error("Cannot create friend for address [%s]",addr?addr:"null"); + return NULL; + } LinphoneFriend *fr=linphone_friend_new(); - if (linphone_friend_set_sip_addr(fr,addr)<0){ + if (linphone_friend_set_addr(fr,linphone_address)<0){ linphone_friend_destroy(fr); return NULL; } @@ -216,8 +221,8 @@ void linphone_core_interpret_friend_uri(LinphoneCore *lc, const char *uri, char linphone_address_destroy(fr); } -int linphone_friend_set_sip_addr(LinphoneFriend *lf, const char *addr){ - LinphoneAddress *fr=linphone_address_new(addr); +int linphone_friend_set_addr(LinphoneFriend *lf, const LinphoneAddress *addr){ + LinphoneAddress *fr=linphone_address_clone(addr); if (fr==NULL) { ms_warning("Invalid friend sip uri: %s",addr); return -1; diff --git a/coreapi/help/buddy_status.c b/coreapi/help/buddy_status.c index 0b5ac1796..ceff11a80 100644 --- a/coreapi/help/buddy_status.c +++ b/coreapi/help/buddy_status.c @@ -21,8 +21,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. /** * @defgroup buddy_tutorials Basic buddy status notification * @ingroup tutorials - *This program is a _very_ simple usage example of liblinphone. - *Desmonstrating how to initiate a SIP subscription and receive notification from a sip uri identity passed from the command line. + *This program is a _very_ simple usage example of liblinphone, + *desmonstrating how to initiate SIP subscriptions and receive notifications from a sip uri identity passed from the command line. *
Argument must be like sip:jehan@sip.linphone.org . *
*ex budy_list sip:jehan@sip.linphone.org @@ -76,7 +76,7 @@ int main(int argc, char *argv[]){ } signal(SIGINT,stop); -#define DEBUG +//#define DEBUG #ifdef DEBUG linphone_core_enable_logs(NULL); /*enable liblinphone logs.*/ #endif @@ -102,11 +102,7 @@ int main(int argc, char *argv[]){ } linphone_friend_enable_subscribes(my_friend,TRUE); /*configure this friend to emit SUBSCRIBE message after being added to LinphoneCore*/ - linphone_friend_set_name(my_friend,"My best friend"); /* add a nickname to this buddy */ - linphone_friend_set_inc_subscribe_policy(my_friend,LinphoneSPAccept); /* Accept incoming subscription request for this friend*/ - - linphone_core_add_friend(lc,my_friend); /* add my friend to the buddy list, initiate SUBSCRIBE message*/ } diff --git a/coreapi/help/doxygen.dox b/coreapi/help/doxygen.dox index 22f2f3563..1ef0e97d1 100644 --- a/coreapi/help/doxygen.dox +++ b/coreapi/help/doxygen.dox @@ -109,14 +109,13 @@ * @defgroup buddy_list Managing Buddies and buddy list and presence Buddies and buddy list
Each buddy is represented by a #LinphoneFriend object created by function linphone_friend_new(). -Buddy configuration parameters like \link linphone_friend_set_sip_addr() sip uri \endlink or \link linphone_friend_set_inc_subscribe_policy status publication \endlink policy for this \link #LinphoneFriend friend \endlink are configurable for each buddy. +Buddy configuration parameters like \link linphone_friend_set_addr() sip uri \endlink or \link linphone_friend_set_inc_subscribe_policy() status publication \endlink policy for this \link #LinphoneFriend friend \endlink are configurable for each buddy.
Here under a typical buddy creation:
\code LinphoneFriend* my_friend=linphone_friend_new_with_addr("sip:joe@sip.linphone.org"); /*creates friend object for buddy joe*/ linphone_friend_enable_subscribes(my_friend,TRUE); /*configure this friend to emit SUBSCRIBE message after being added to LinphoneCore*/ -linphone_friend_set_name(my_friend,"My best friend"); /* add a nickname to this buddy */ -linphone_friend_set_inc_subscribe_policy(my_friend,LinphoneSPAccept); /* Incoming subscription request for this friend*/ +linphone_friend_set_inc_subscribe_policy(my_friend,LinphoneSPAccept); /* accept Incoming subscription request for this friend*/ \endcode \link #LinphoneFriend friends \endlink status changes are reported by callback LinphoneCoreVTable.notify_presence_recv \code @@ -129,7 +128,7 @@ static void notify_presence_recv_updated (struct _LinphoneCore *lc, LinphoneFri \endcode
Once created a buddy can be added to the buddy list using function linphone_core_add_friend() . Added friends will be notified about \link linphone_core_set_presence_info() local status changes \endlink
-Any subsequente modifications to #LinphoneFriend must be first started by a call to function linphone_friend_config_edit() and validated by function linphone_friend_config_done() +Any subsequente modifications to #LinphoneFriend must be first started by a call to function linphone_friend_edit() and validated by function linphone_friend_done() \code linphone_friend_edit(my_friend); /* start editing friend */ linphone_friend_enable_subscribes(my_friend,FALSE); /*disable subscription for this friend*/ @@ -138,11 +137,11 @@ linphone_friend_done(my_friend); /*commit changes triggering an UNSUBSCRIBE mess Publishing presence status -
Local presence status can be changed using function linphone_core_set_presence_info() .New status is propagated to all friend \link linphone_core_add_friend() previously added \endlink to #LinphoneCore. +
Local presence status can be changed using function linphone_core_set_presence_info() .New status is propagated to all friends \link linphone_core_add_friend() previously added \endlink to #LinphoneCore. Handling incoming subscription request -
New incoming subscription requests are process according to \link linphone_friend_set_inc_subscribe_policy() the incoming subscription policy state \endlink for subscription initiated by \link linphone_core_add_friend() members of the buddy list \endlink -
For incoming request comming from an unknown buddy, the call back LinphoneCoreVTable.new_subscription_request . +
New incoming subscription requests are process according to \link linphone_friend_set_inc_subscribe_policy() the incoming subscription policy state \endlink for subscription initiated by \link linphone_core_add_friend() members of the buddy list. \endlink +
For incoming request comming from an unknown buddy, the call back LinphoneCoreVTable.new_subscription_request is invoked.
A complete tutorial can be found at : \ref buddy_tutorials "Registration tutorial" diff --git a/coreapi/linphonefriend.h b/coreapi/linphonefriend.h index 54e88c446..ab75b7bf7 100644 --- a/coreapi/linphonefriend.h +++ b/coreapi/linphonefriend.h @@ -34,7 +34,7 @@ extern "C" { typedef enum { /** * Does not automatically accept an incoming subscription request. - * This policy implies that a decision has to be taken for each incoming subscription request notify in callback LinphoneCoreVTable.new_subscription_request + * This policy implies that a decision has to be taken for each incoming subscription request notified by callback LinphoneCoreVTable.new_subscription_request * */ LinphoneSPWait, @@ -99,11 +99,6 @@ typedef enum _LinphoneOnlineStatus{ LinphoneStatusEnd }LinphoneOnlineStatus; -/** - * return humain readable presence status - * @param ss - */ -const char *linphone_online_status_to_string(LinphoneOnlineStatus ss); struct _LinphoneFriend; @@ -118,25 +113,40 @@ typedef struct _LinphoneFriend LinphoneFriend; */ LinphoneFriend * linphone_friend_new(); /** - * Contructor same as linphone_friend_new() + linphone_friend_set_sip_addr() + * Contructor same as linphone_friend_new() + linphone_friend_set_addr() * @param addr a buddy address, must be a sip uri like sip:joe@sip.linphone.org * @return a new #LinphoneFriend with \link linphone_friend_get_address() address initialized \endlink */ LinphoneFriend *linphone_friend_new_with_addr(const char *addr); + /** - * Configure #LinphoneFriend with a new address. - * @param uri a buddy address, must be a sip uri like sip:joe@sip.linphone.org - * @return 0 if succeed + * Destructor + * @param lf #LinphoneFriend object */ -int linphone_friend_set_sip_addr(LinphoneFriend *fr, const char *uri); +void linphone_friend_destroy(LinphoneFriend *lf); + /** - * modify friend nickname + * set #LinphoneAddress for this friend * @param fr #LinphoneFriend object - * @param new name - * @return 0 if succeed + * @param address #LinphoneAddress + */ +int linphone_friend_set_addr(LinphoneFriend *fr, const LinphoneAddress* address); + +/** + * get address of this friend + * @param lf #LinphoneFriend object + * @return #LinphoneAddress + */ +const LinphoneAddress *linphone_friend_get_address(const LinphoneFriend *lf); +/** + * get subscription flag value + * @param lf #LinphoneFriend object + * @return returns true is subscription is activated for this friend * */ -int linphone_friend_set_name(LinphoneFriend *fr, const char *name); +bool_t linphone_friend_subscribes_enabled(const LinphoneFriend *lf); +#define linphone_friend_get_send_subscribe linphone_friend_subscribes_enabled + /** * Configure #LinphoneFriend to subscribe to presence information * @param fr #LinphoneFriend object @@ -152,12 +162,20 @@ int linphone_friend_enable_subscribes(LinphoneFriend *fr, bool_t val); * @param pol #LinphoneSubscribePolicy policy to apply. */ int linphone_friend_set_inc_subscribe_policy(LinphoneFriend *fr, LinphoneSubscribePolicy pol); +/** + * get current subscription policy for this #LinphoneFriend + * @param lf #LinphoneFriend object + * @return #LinphoneSubscribePolicy + * + */ +LinphoneSubscribePolicy linphone_friend_get_inc_subscribe_policy(const LinphoneFriend *lf); + /** * Starts editing a friend configuration. * * Because friend configuration must be consistent, applications MUST * call linphone_friend_edit() before doing any attempts to modify - * friend configuration (such as \link linphone_friend_set_name() nick name \endlink , \link linphone_friend_set_sip_addr() address \endlink and so on). + * friend configuration (such as \link linphone_friend_set_addr() address \endlink or \link linphone_friend_set_inc_subscribe_policy() subscription policy\endlink and so on). * Once the modifications are done, then the application must call * linphone_friend_done() to commit the changes. **/ @@ -167,32 +185,10 @@ void linphone_friend_edit(LinphoneFriend *fr); * @param fr #LinphoneFriend object **/ void linphone_friend_done(LinphoneFriend *fr); -/** - * Destructor - * @param fr #LinphoneFriend object - */ -void linphone_friend_destroy(LinphoneFriend *lf); -/** - * get address of this friend - * @param lf #LinphoneFriend object - * @return #LinphoneAddress - */ -const LinphoneAddress *linphone_friend_get_address(const LinphoneFriend *lf); -/** - * get subscription flag value - * @param lf #LinphoneFriend object - * @return returns true is subscription is activated for this friend - * - */ -bool_t linphone_friend_subscribes_enabled(const LinphoneFriend *lf); -#define linphone_friend_get_send_subscribe linphone_friend_subscribes_enabled -/** - * get current subscription policy for this #LinphoneFriend - * @param lf #LinphoneFriend object - * @return #LinphoneSubscribePolicy - * - */ -LinphoneSubscribePolicy linphone_friend_get_inc_subscribe_policy(const LinphoneFriend *lf); + + + + /** * get friend status * @return #LinphoneOnlineStatus @@ -205,6 +201,13 @@ bool_t linphone_friend_in_list(const LinphoneFriend *lf); #define linphone_friend_url(lf) ((lf)->url) +/** + * return humain readable presence status + * @param ss + */ +const char *linphone_online_status_to_string(LinphoneOnlineStatus ss); + + /** * Set my presence status * @param lc #LinphoneCore object @@ -236,7 +239,7 @@ void linphone_core_remove_friend(LinphoneCore *lc, LinphoneFriend *fr); /** * Black list a friend. same as linphone_friend_set_inc_subscribe_policy() with #LinphoneSPDeny policy; * @param lc #LinphoneCore object - * @param fr #LinphoneFriend to add + * @param lf #LinphoneFriend to add */ void linphone_core_reject_subscriber(LinphoneCore *lc, LinphoneFriend *lf); /** diff --git a/gtk/friendlist.c b/gtk/friendlist.c index 3805057c3..f19307606 100644 --- a/gtk/friendlist.c +++ b/gtk/friendlist.c @@ -450,9 +450,12 @@ void linphone_gtk_contact_ok(GtkWidget *button){ linphone_gtk_display_something(GTK_MESSAGE_WARNING,_("Invalid sip contact !")); return ; } - linphone_friend_set_sip_addr(lf,fixed_uri); + LinphoneAddress* friend_address = linphone_address_new(fixed_uri); + linphone_address_set_display_name(friend_address,name); + linphone_friend_set_addr(lf,friend_address); ms_free(fixed_uri); - linphone_friend_set_name(lf,name); + linphone_address_destroy(friend_address); + linphone_friend_send_subscribe(lf,show_presence); linphone_friend_set_inc_subscribe_policy(lf,allow_presence==TRUE ? LinphoneSPAccept : LinphoneSPDeny); if (linphone_friend_in_list(lf)) {