]> sjero.net Git - linphone/blobdiff - coreapi/sal_eXosip2_presence.c
fix crash when receiving an incorrect SDP message in a 200Ok.
[linphone] / coreapi / sal_eXosip2_presence.c
index 1b64fe42970884ce0fdfe253067aa69187a4efa6..b9f7b5763620474fe605218410fa1b4db587cbcc 100644 (file)
@@ -85,19 +85,19 @@ static const char *days[]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
 static const char *months[]={"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};
 
 static void msg_add_current_date(osip_message_t *msg){
-        char tmp[64]={0};
-        time_t curtime=time(NULL);
-        struct tm *ret;
+       char tmp[64]={0};
+       time_t curtime=time(NULL);
+       struct tm *ret;
 #ifndef WIN32
-        struct tm gmt;
-        ret=gmtime_r(&curtime,&gmt);
+       struct tm gmt;
+       ret=gmtime_r(&curtime,&gmt);
 #else
-        ret=gmtime(&curtime);
+       ret=gmtime(&curtime);
 #endif
-        /*cannot use strftime because it is locale dependant*/
-        snprintf(tmp,sizeof(tmp)-1,"%s, %i %s %i %02i:%02i:%02i GMT",
-                 days[ret->tm_wday],ret->tm_mday,months[ret->tm_mon],1900+ret->tm_year,ret->tm_hour,ret->tm_min,ret->tm_sec);
-        osip_message_replace_header(msg,"Date",tmp);
+       /*cannot use strftime because it is locale dependant*/
+       snprintf(tmp,sizeof(tmp)-1,"%s, %i %s %i %02i:%02i:%02i GMT",
+                       days[ret->tm_wday],ret->tm_mday,months[ret->tm_mon],1900+ret->tm_year,ret->tm_hour,ret->tm_min,ret->tm_sec);
+       osip_message_replace_header(msg,"Date",tmp);
 }
 
 
@@ -637,23 +637,26 @@ int sal_publish(SalOp *op, const char *from, const char *to, SalPresenceStatus p
        osip_message_t *pub;
        int i;
        char buf[1024];
+       const char *route=sal_op_get_route(op);
 
        mk_presence_body (presence_mode, from, buf, sizeof (buf), presence_style);
 
-       i = eXosip_build_publish(&pub,from, to, sal_op_get_route(op), "presence", "300", 
+       i = eXosip_build_publish(&pub,to, from, NULL, "presence", "600", 
                presence_style ? "application/xpidf+xml" : "application/pidf+xml", buf);
        if (i<0){
                ms_warning("Failed to build publish request.");
                return -1;
        }
-
+       if (route)
+               sal_message_add_route(pub,route);
+       
        eXosip_lock();
        i = eXosip_publish(pub, to); /* should update the sip-if-match parameter
                                    from sip-etag  from last 200ok of PUBLISH */
        eXosip_unlock();
        if (i<0){
-         ms_message("Failed to send publish request.");
-         return -1;
+               ms_message("Failed to send publish request.");
+               return -1;
        }
        sal_add_other(sal_op_get_sal(op),op,pub);
        return 0;