]> sjero.net Git - linphone/blobdiff - coreapi/sal_eXosip2.c
implement checking of duplicated messages.
[linphone] / coreapi / sal_eXosip2.c
index b83cc4f24614461db42bd43f006015900e38874c..2f6d4ae80e620c126cfba75de38c472a67e129f6 100644 (file)
@@ -343,8 +343,6 @@ void sal_set_callbacks(Sal *ctx, const SalCallbacks *cbs){
                ctx->callbacks.text_received=(SalOnTextReceived)unimplemented_stub;
        if (ctx->callbacks.ping_reply==NULL)
                ctx->callbacks.ping_reply=(SalOnPingReply)unimplemented_stub;
-       if (ctx->callbacks.message_external_body==NULL)
-               ctx->callbacks.message_external_body=(SalOnMessageExternalBodyReceived)unimplemented_stub;
 }
 
 int sal_unlisten_ports(Sal *ctx){
@@ -1728,11 +1726,13 @@ static bool_t comes_from_local_if(osip_message_t *msg){
 
 static void text_received(Sal *sal, eXosip_event_t *ev){
        osip_body_t *body=NULL;
-       char *from=NULL,*msg;
+       char *from=NULL,*msg=NULL;
        osip_content_type_t* content_type;
        osip_uri_param_t* external_body_url; 
        char unquoted_external_body_url [256];
        int external_body_size=0;
+       SalMessage salmsg;
+       char message_id[256]={0};
        
        content_type= osip_message_get_content_type(ev->request);
        if (!content_type) {
@@ -1744,13 +1744,12 @@ static void text_received(Sal *sal, eXosip_event_t *ev){
                && strcmp(content_type->type, "text")==0 
                && content_type->subtype
                && strcmp(content_type->subtype, "plain")==0 ) {
-       osip_message_get_body(ev->request,0,&body);
-       if (body==NULL){
-               ms_error("Could not get text message from SIP body");
-               return;
-       }
-       msg=body->body;
-       sal->callbacks.text_received(sal,from,msg);
+               osip_message_get_body(ev->request,0,&body);
+               if (body==NULL){
+                       ms_error("Could not get text message from SIP body");
+                       return;
+               }
+               msg=body->body;
        } if (content_type->type 
                  && strcmp(content_type->type, "message")==0 
                  && content_type->subtype
@@ -1762,11 +1761,18 @@ static void text_received(Sal *sal, eXosip_event_t *ev){
                                ,&external_body_url->gvalue[1]
                                ,external_body_size=MIN(strlen(external_body_url->gvalue)-1,sizeof(unquoted_external_body_url)));
                unquoted_external_body_url[external_body_size-1]='\0';
-               sal->callbacks.message_external_body(sal,from,unquoted_external_body_url);
-               
        } else {
                ms_warning("Unsupported content type [%s/%s]",content_type->type,content_type->subtype);
+               osip_free(from);
+               return;
        }
+       snprintf(message_id,sizeof(message_id)-1,"%s%s",ev->request->call_id->number,ev->request->cseq->number);
+       
+       salmsg.from=from;
+       salmsg.text=msg;
+       salmsg.url=external_body_size>0 ? unquoted_external_body_url : NULL;
+       salmsg.message_id=message_id;
+       sal->callbacks.text_received(sal,&salmsg);
        osip_free(from);
 }