Ticket #411: Cannot update account presence's status while previous PUBLISH is in progress (thanks Olivier Beytrison for the report)
- enable request queueing. If PUBLISH is to be sent while another one is still in progress, queue the request and send it later when the ongoing request completes
- this behavior is controlled by new pjsip_publishc_opt structure to control session's options
- default behavior is to queue the request
git-svn-id: https://svn.pjsip.org/repos/pjproject/trunk@2940 74dad513-b988-da41-8d7b-12977e46ad98
diff --git a/pjsip/src/pjsua-lib/pjsua_pres.c b/pjsip/src/pjsua-lib/pjsua_pres.c
index b9c11ae..bef8af9 100644
--- a/pjsip/src/pjsua-lib/pjsua_pres.c
+++ b/pjsip/src/pjsua-lib/pjsua_pres.c
@@ -1073,7 +1073,10 @@
/* Send the PUBLISH request */
status = pjsip_publishc_send(acc->publish_sess, tdata);
- if (status != PJ_SUCCESS) {
+ if (status == PJ_EPENDING) {
+ PJ_LOG(3,(THIS_FILE, "Previous request is in progress, "
+ "PUBLISH request is queued"));
+ } else if (status != PJ_SUCCESS) {
pjsua_perror(THIS_FILE, "Error sending PUBLISH request", status);
goto on_error;
}
@@ -1102,7 +1105,8 @@
if (acc_cfg->publish_enabled) {
/* Create client publication */
- status = pjsip_publishc_create(pjsua_var.endpt, 0, acc, &publish_cb,
+ status = pjsip_publishc_create(pjsua_var.endpt, &acc_cfg->publish_opt,
+ acc, &publish_cb,
&acc->publish_sess);
if (status != PJ_SUCCESS) {
acc->publish_sess = NULL;