]> sjero.net Git - linphone/commitdiff
improve publish support
authorSimon Morlat <simon.morlat@linphone.org>
Thu, 14 Oct 2010 09:51:25 +0000 (11:51 +0200)
committerSimon Morlat <simon.morlat@linphone.org>
Thu, 14 Oct 2010 09:51:25 +0000 (11:51 +0200)
coreapi/private.h
coreapi/proxy.c

index 163df5f020f628fd489d1fd0064e07fe3dacf792..c965bf4ac3b71a26dccf06024c052921db06b4b3 100644 (file)
@@ -213,6 +213,7 @@ struct _LinphoneProxyConfig
        int auth_failures;
        char *dial_prefix;
        LinphoneRegistrationState state;
+       SalOp *publish_op;
        bool_t commit;
        bool_t reg_sendregister;
        bool_t registered;
index 07a8e6c81527b32bcc58ecb8efd95c1ff11f2b22..c946d988ee40421ebe6a75fd088fdead7c49365f 100644 (file)
@@ -72,6 +72,7 @@ void linphone_proxy_config_destroy(LinphoneProxyConfig *obj){
        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);
 }
 
 /**
@@ -433,7 +434,9 @@ int linphone_proxy_config_send_publish(LinphoneProxyConfig *proxy,
        SalOp *op=sal_op_new(proxy->lc->sal);
        err=sal_publish(op,linphone_proxy_config_get_identity(proxy),
            linphone_proxy_config_get_identity(proxy),linphone_online_status_to_sal(presence_mode));
-       sal_op_release(op);
+       if (proxy->publish_op!=NULL)
+               sal_op_release(proxy->publish_op);
+       proxy->publish_op=op;
        return err;
 }
 
@@ -693,6 +696,9 @@ void linphone_proxy_config_update(LinphoneProxyConfig *cfg){
                }
                if (lc->sip_conf.register_only_when_network_is_up || lc->network_reachable)
                        linphone_proxy_config_register(cfg);
+               if (cfg->publish && cfg->publish_op==NULL){
+                       linphone_proxy_config_send_publish(cfg,lc->presence_mode);
+               }
                cfg->commit=FALSE;
        }
 }