]> sjero.net Git - linphone/commitdiff
add messaging documentation
authorJehan Monnier <jehan.monnier@linphone.org>
Fri, 15 Oct 2010 15:54:11 +0000 (17:54 +0200)
committerJehan Monnier <jehan.monnier@linphone.org>
Fri, 15 Oct 2010 15:54:11 +0000 (17:54 +0200)
console/linphonec.c
coreapi/chat.c
coreapi/help/Makefile.am
coreapi/help/buddy_status.c
coreapi/help/chatroom.c [new file with mode: 0644]
coreapi/help/doxygen.dox
coreapi/linphonecore.h
gtk/chat.c
gtk/linphone.h

index ef1760ee4a329317dc76f37c3e00b4043ae44544..41b70a8163179f2549a51b475a80947f80edc531 100644 (file)
@@ -130,7 +130,7 @@ static void linphonec_new_unknown_subscriber(LinphoneCore *lc,
                LinphoneFriend *lf, const char *url);
 
 static void linphonec_text_received(LinphoneCore *lc, LinphoneChatRoom *cr,
-               const char *from, const char *msg);
+               const LinphoneAddress *from, const char *msg);
 static void linphonec_display_status (LinphoneCore * lc, const char *something);
 static void linphonec_dtmf_received(LinphoneCore *lc, LinphoneCall *call, int dtmf);
 static void print_prompt(LinphoneCore *opm);
@@ -371,9 +371,9 @@ static void linphonec_call_state_changed(LinphoneCore *lc, LinphoneCall *call, L
  */
 static void
 linphonec_text_received(LinphoneCore *lc, LinphoneChatRoom *cr,
-               const char *from, const char *msg)
+               const LinphoneAddress *from, const char *msg)
 {
-       printf("%s: %s\n", from, msg);
+       printf("%s: %s\n", linphone_address_as_string(from), msg);
        // TODO: provide mechanism for answering.. ('say' command?)
 }
 
index 3a41b4c9fe4a5034ac1769ab994078232f2b0fac..d90cf61e4ec6de92b81d93267e341359146abfe0 100644 (file)
@@ -78,7 +78,7 @@ bool_t linphone_chat_room_matches(LinphoneChatRoom *cr, const LinphoneAddress *f
        return FALSE;
 }
 
-void linphone_chat_room_text_received(LinphoneChatRoom *cr, LinphoneCore *lc, const char *from, const char *msg){
+void linphone_chat_room_text_received(LinphoneChatRoom *cr, LinphoneCore *lc, const LinphoneAddress *from, const char *msg){
        if (lc->vtable.text_received!=NULL) lc->vtable.text_received(lc, cr, from, msg);
 }
 
@@ -102,8 +102,9 @@ void linphone_core_text_received(LinphoneCore *lc, const char *from, const char
                /* create a new chat room */
                cr=linphone_core_create_chat_room(lc,cleanfrom);
        }
+
        linphone_address_destroy(addr);
-       linphone_chat_room_text_received(cr,lc,cleanfrom,msg);
+       linphone_chat_room_text_received(cr,lc,cr->peer_url,msg);
        ms_free(cleanfrom);
 }
 
@@ -114,3 +115,6 @@ void linphone_chat_room_set_user_data(LinphoneChatRoom *cr, void * ud){
 void * linphone_chat_room_get_user_data(LinphoneChatRoom *cr){
        return cr->user_data;
 }
+const LinphoneAddress* linphone_chat_room_get_peer_address(LinphoneChatRoom *cr) {
+       return cr->peer_url;
+}
index 4ded6c77f0090f5ec241160b1f51cbb31edf16e6..7fa592da2faf894ced0716839ea4f85ce3c8c7fd 100644 (file)
@@ -32,7 +32,7 @@ endif
 clean-local:
        rm -rf doc
 
-noinst_PROGRAMS=helloworld registration buddy_status
+noinst_PROGRAMS=helloworld registration buddy_status chatroom
 
 helloworld_SOURCES=helloworld.c
 
@@ -42,15 +42,16 @@ helloworld_LDADD=$(top_builddir)/coreapi/liblinphone.la \
 
 registration_SOURCES=registration.c
 
-registration_LDADD=$(top_builddir)/coreapi/liblinphone.la \
-                               $(MEDIASTREAMER_LIBS) \
-                               $(ORTP_LIBS)
+registration_LDADD=$(helloworld_LDADD)
 
 buddy_status_SOURCES=buddy_status.c
 
-buddy_status_LDADD=$(top_builddir)/coreapi/liblinphone.la \
-                               $(MEDIASTREAMER_LIBS) \
-                               $(ORTP_LIBS)                            
+buddy_status_LDADD=$(helloworld_LDADD)
+
+chatroom_SOURCES=chatroom.c
+
+chatroom_LDADD=$(helloworld_LDADD)
+                                                                                               
                                
 
 INCLUDES=-I$(top_srcdir)/coreapi \
index ceff11a800e3d65b1cb6c964d45fef6aa3d1e147..7ee06a8f53c25999befd01c13839efbfb1b19fb6 100644 (file)
@@ -1,6 +1,6 @@
 
 /*
-linphone
+buddy_status
 Copyright (C) 2010  Belledonne Communications SARL 
 
 This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@ 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  SIP subscriptions and receive notifications from a sip uri identity passed from the command line.
+ *demonstrating how to initiate  SIP subscriptions and receive notifications from a sip uri identity passed from the command line.
  *<br>Argument must be like sip:jehan@sip.linphone.org .
  *<br>
  *ex budy_list sip:jehan@sip.linphone.org
@@ -82,14 +82,14 @@ int main(int argc, char *argv[]){
 #endif
        /* 
         Fill the LinphoneCoreVTable with application callbacks.
-        All are optional. Here we only use the registration_state_changed callbacks
-        in order to get notifications about the progress of the registration.
+        All are optional. Here we only use the both notify_presence_recv and new_subscription_request callbacks
+        in order to get notifications about friend status.
         */
        vtable.notify_presence_recv=notify_presence_recv_updated;
        vtable.new_subscription_request=new_subscription_request;
 
        /*
-        Instanciate a LinphoneCore object given the LinphoneCoreVTable
+        Instantiate a LinphoneCore object given the LinphoneCoreVTable
        */
        lc=linphone_core_new(&vtable,NULL,NULL,NULL);
        LinphoneFriend* my_friend=NULL;
diff --git a/coreapi/help/chatroom.c b/coreapi/help/chatroom.c
new file mode 100644 (file)
index 0000000..448b9ca
--- /dev/null
@@ -0,0 +1,96 @@
+
+/*
+linphone
+Copyright (C) 2010  Belledonne Communications SARL 
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+*/
+
+/**
+ * @defgroup chatroom_tuto Chat room and messaging
+ * @ingroup tutorials
+ *This program is a _very_ simple usage example of liblinphone,
+ *desmonstrating how to send/receive  SIP MESSAGE from a sip uri identity passed from the command line.
+ *<br>Argument must be like sip:jehan@sip.linphone.org .
+ *<br>
+ *ex chatroom sip:jehan@sip.linphone.org
+ *<br>
+ *@include chatroom.c
+
+ *
+ */
+
+#include "linphonecore.h"
+
+#include <signal.h>
+
+static bool_t running=TRUE;
+
+static void stop(int signum){
+       running=FALSE;
+}
+void text_received(LinphoneCore *lc, LinphoneChatRoom *room, const LinphoneAddress *from, const char *message) {
+       printf(" Message [%s] received from [%s] \n",message,linphone_address_as_string (from));
+}
+
+
+LinphoneCore *lc;
+int main(int argc, char *argv[]){
+       LinphoneCoreVTable vtable={0};
+
+       char* dest_friend=NULL;
+
+
+       /* takes   sip uri  identity from the command line arguments */
+       if (argc>1){
+               dest_friend=argv[1];
+       }
+
+       signal(SIGINT,stop);
+//#define DEBUG
+#ifdef DEBUG
+       linphone_core_enable_logs(NULL); /*enable liblinphone logs.*/
+#endif
+       /* 
+        Fill the LinphoneCoreVTable with application callbacks.
+        All are optional. Here we only use the text_received callback
+        in order to get notifications about incoming message.
+        */
+       vtable.text_received=text_received;
+
+       /*
+        Instantiate a LinphoneCore object given the LinphoneCoreVTable
+       */
+       lc=linphone_core_new(&vtable,NULL,NULL,NULL);
+
+
+       /*Next step is to create a chat root*/
+       LinphoneChatRoom* chat_room = linphone_core_create_chat_room(lc,dest_friend);
+
+       linphone_chat_room_send_message(chat_room,"Hello world"); /*sending message*/
+
+       /* main loop for receiving incoming messages and doing background linphone core work: */
+       while(running){
+               linphone_core_iterate(lc);
+               ms_usleep(50000);
+       }
+
+       printf("Shutting down...\n");
+       linphone_chat_room_destroy(chat_room);
+       linphone_core_destroy(lc);
+       printf("Exited\n");
+       return 0;
+}
+
index 1ef0e97d1f894c8f9dd72325975d0bcbb069da2a..8707785b21a8e9481a36ad02891335ffcb787e5c 100644 (file)
@@ -146,8 +146,29 @@ linphone_friend_done(my_friend); /*commit changes triggering an UNSUBSCRIBE mess
 <br> A complete tutorial can be found at : \ref buddy_tutorials "Registration tutorial" 
 
 
-*/
+**/
+
+/**
+* @defgroup chatroom Chat room and Messaging 
+<b> Exchanging text messages</b>
+<br> Messages are sent using #LinphoneChatRoom object. First step is to create a \link linphone_core_create_chat_room() chat room \endlink
+from a peer sip uri.
+\code
+LinphoneChatRoom* chat_room = linphone_core_create_chat_room(lc,"sip:joe@sip.linphone.org");
+\endcode
 
+<br>Once created, messages are sent using function linphone_chat_room_send_message()  . 
+\code
+linphone_chat_room_send_message(chat_room,"Hello world"); /*sending message*/
+\endcode
+<br>Incoming message are received from call back LinphoneCoreVTable.text_received
+\code
+void text_received(LinphoneCore *lc, LinphoneChatRoom *room, const LinphoneAddress *from, const char *message) {
+       printf(" Message [%s] received from [%s] \n",message,linphone_address_as_string (from));
+}
+\endcode
+<br> A complete tutorial can be found at : \ref chatroom_tuto "Chat room tutorial" 
+**/
 
 /**
  * @defgroup call_logs Managing call logs
index f8fd75b39d2c20ed0175a23f76c78723d1e3eedd..1a75f5bad66d02301bc6c99fa6cef74cb611f1d1 100644 (file)
@@ -402,14 +402,48 @@ LinphoneAuthInfo * linphone_auth_info_new_from_config_file(struct _LpConfig *con
 
 
 struct _LinphoneChatRoom;
+/**
+ * @addtogroup chatroom
+ * @{
+ */
+/**
+ * A chat room is the place where text messages are exchanged.
+ * <br> Can be created by linphone_core_create_chat_room().
+ */
 typedef struct _LinphoneChatRoom LinphoneChatRoom;
+/**
+ * Create a new chat room for messaging from a sip uri like sip:joe@sip.linphone.org
+ * @param lc #LinphoneCore object
+ * @param to destination address for messages
+ * @return #LinphoneChatRoom where messaging can take place.
+ */
+LinphoneChatRoom * linphone_core_create_chat_room(LinphoneCore *lc, const char *to);
+/**
+ * Destructor
+ * @param cr #LinphoneChatRoom object
+ */
+void linphone_chat_room_destroy(LinphoneChatRoom *cr);
+
 
-LinphoneChatRoom * linphone_core_create_chat_room(struct _LinphoneCore *lc, const char *to);
+/**
+ * get peer address \link linphone_core_create_chat_room() associated to \endlink this #LinphoneChatRoom
+ * @param cr #LinphoneChatRoom object
+ * @return #LinphoneAddress peer address
+ */
+const LinphoneAddress* linphone_chat_room_get_peer_address(LinphoneChatRoom *cr);
+/**
+ * send a message to peer member of this chat room.
+ * @param cr #LinphoneChatRoom object
+ * @param msg message to be sent
+ */
 void linphone_chat_room_send_message(LinphoneChatRoom *cr, const char *msg);
-void linphone_chat_room_destroy(LinphoneChatRoom *cr);
+
 void linphone_chat_room_set_user_data(LinphoneChatRoom *cr, void * ud);
 void * linphone_chat_room_get_user_data(LinphoneChatRoom *cr);
 
+/**
+ * @}
+ */
 typedef enum _LinphoneGlobalState{
        LinphoneGlobalOff,
        LinphoneGlobalStartup,
@@ -464,8 +498,15 @@ typedef void (*NewSubscribtionRequestCb)(struct _LinphoneCore *lc, LinphoneFrien
 typedef void (*AuthInfoRequested)(struct _LinphoneCore *lc, const char *realm, const char *username);
 /** Callback prototype */
 typedef void (*CallLogUpdated)(struct _LinphoneCore *lc, struct _LinphoneCallLog *newcl);
-/** Callback prototype */
-typedef void (*TextMessageReceived)(struct _LinphoneCore *lc, LinphoneChatRoom *room, const char *from, const char *message);
+/**
+ * Callback prototype
+ *
+ * @param lc #LinphoneCore object
+ * @param room #LinphoneChatRoom involved in this conversation. Can be be created by the framework in case \link #LinphoneAddress the from \endlink is not present in any chat room.
+ * @param from #LinphoneAddress from
+ * @param message incoming message
+ *  */
+typedef void (*TextMessageReceived)(LinphoneCore *lc, LinphoneChatRoom *room, const LinphoneAddress *from, const char *message);
 /** Callback prototype */
 typedef void (*DtmfReceived)(struct _LinphoneCore* lc, LinphoneCall *call, int dtmf);
 /** Callback prototype */
index bc61850a84954dcfc6f22950a2ac2ac1b147dae1..b81a6aa1351461cc784188a97e9b01f40d5f3283 100644 (file)
@@ -94,13 +94,13 @@ void linphone_gtk_send_text(GtkWidget *button){
        }
 }
 
-void linphone_gtk_text_received(LinphoneCore *lc, LinphoneChatRoom *room, const char *from, const char *message){
+void linphone_gtk_text_received(LinphoneCore *lc, LinphoneChatRoom *room, const LinphoneAddress *from, const char *message){
        GtkWidget *w=(GtkWidget*)linphone_chat_room_get_user_data(room);
        if (w==NULL){
-               w=linphone_gtk_init_chatroom(room,from);
+               w=linphone_gtk_init_chatroom(room,linphone_address_as_string_uri_only(from));
        }
        linphone_gtk_push_text(GTK_TEXT_VIEW(linphone_gtk_get_widget(w,"textlog")),
-                               from,
+                               linphone_address_as_string_uri_only(from),
                                message,FALSE);
        gtk_window_present(GTK_WINDOW(w));
        /*gtk_window_set_urgency_hint(GTK_WINDOW(w),TRUE);*/
index 637448818eaa2889061ac533a0a9e525f6b66ac5..70e1d5dc4545a93dcc632d4c99cba1dca0016e12 100644 (file)
@@ -61,7 +61,7 @@ void linphone_gtk_set_my_presence(LinphoneOnlineStatus ss);
 void linphone_gtk_show_parameters(void);
 void linphone_gtk_load_identities(void);
 void linphone_gtk_create_chatroom(const char *with);
-void linphone_gtk_text_received(LinphoneCore *lc, LinphoneChatRoom *room, const char *from, const char *message);
+void linphone_gtk_text_received(LinphoneCore *lc, LinphoneChatRoom *room, const LinphoneAddress *from, const char *message);
 void linphone_gtk_call_log_update(GtkWidget *w);
 void linphone_gtk_create_log_window(void);
 void linphone_gtk_log_show(void);