summaryrefslogtreecommitdiff
path: root/pjsip
diff options
context:
space:
mode:
Diffstat (limited to 'pjsip')
-rw-r--r--pjsip/include/pjsua-lib/pjsua_internal.h5
-rw-r--r--pjsip/src/pjsua-lib/pjsua_acc.c4
-rw-r--r--pjsip/src/pjsua-lib/pjsua_pres.c18
3 files changed, 18 insertions, 9 deletions
diff --git a/pjsip/include/pjsua-lib/pjsua_internal.h b/pjsip/include/pjsua-lib/pjsua_internal.h
index 105a2b2b..4f6a49fd 100644
--- a/pjsip/include/pjsua-lib/pjsua_internal.h
+++ b/pjsip/include/pjsua-lib/pjsua_internal.h
@@ -302,6 +302,11 @@ void pjsua_pres_shutdown(void);
pj_status_t pjsua_pres_init_acc(int acc_id);
/**
+ * Send PUBLISH
+ */
+pj_status_t pjsua_pres_init_publish_acc(int acc_id);
+
+/**
* Terminate server subscription for the account
*/
void pjsua_pres_delete_acc(int acc_id);
diff --git a/pjsip/src/pjsua-lib/pjsua_acc.c b/pjsip/src/pjsua-lib/pjsua_acc.c
index 82ff609c..b168c9ad 100644
--- a/pjsip/src/pjsua-lib/pjsua_acc.c
+++ b/pjsip/src/pjsua-lib/pjsua_acc.c
@@ -468,6 +468,10 @@ static void regc_cb(struct pjsip_regc_cbparam *param)
param->code,
(int)param->reason.slen, param->reason.ptr,
param->expiration));
+
+ /* Send initial PUBLISH if it is enabled */
+ if (acc->cfg.publish_enabled && acc->publish_sess==NULL)
+ pjsua_pres_init_publish_acc(acc->index);
}
} else {
diff --git a/pjsip/src/pjsua-lib/pjsua_pres.c b/pjsip/src/pjsua-lib/pjsua_pres.c
index 55655c7a..da6f291d 100644
--- a/pjsip/src/pjsua-lib/pjsua_pres.c
+++ b/pjsip/src/pjsua-lib/pjsua_pres.c
@@ -671,7 +671,7 @@ on_error:
/* Create client publish session */
-static pj_status_t create_publish(int acc_id)
+pj_status_t pjsua_pres_init_publish_acc(int acc_id)
{
const pj_str_t STR_PRESENCE = { "presence", 8 };
pjsua_acc_config *acc_cfg = &pjsua_var.acc[acc_id].cfg;
@@ -722,8 +722,7 @@ pj_status_t pjsua_pres_init_acc(int acc_id)
/* Init presence subscription */
pj_list_init(&acc->pres_srv_list);
-
- return create_publish(acc_id);
+ return PJ_SUCCESS;
}
@@ -803,12 +802,13 @@ static void refresh_server_subscription(int acc_id)
uapres = uapres->next;
}
- /* Send PUBLISH if required */
- if (acc_cfg->publish_enabled) {
- if (acc->publish_sess == NULL)
- create_publish(acc_id);
-
- if (acc->publish_sess && acc->publish_state != acc->online_status) {
+ /* Send PUBLISH if required. We only do this when we have a PUBLISH
+ * session. If we don't have a PUBLISH session, then it could be
+ * that we're waiting until registration has completed before we
+ * send the first PUBLISH.
+ */
+ if (acc_cfg->publish_enabled && acc->publish_sess) {
+ if (acc->publish_state != acc->online_status) {
send_publish(acc_id, PJ_TRUE);
}
}