diff options
author | Benny Prijono <bennylp@teluu.com> | 2007-02-24 13:29:22 +0000 |
---|---|---|
committer | Benny Prijono <bennylp@teluu.com> | 2007-02-24 13:29:22 +0000 |
commit | 5f6cdb084e8b59382b53945c4e42ab20b55fe1b2 (patch) | |
tree | d5a21f5ce205665ac76305a27a3b7f1b73383768 /pjsip | |
parent | 75d3c1c4773b7b4e35db24ccf695788d871aba2e (diff) |
Fixed ticket #90: PUBLISH is rejected with 404 when REGISTER is challenged with 401/407
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@998 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjsip')
-rw-r--r-- | pjsip/include/pjsua-lib/pjsua_internal.h | 5 | ||||
-rw-r--r-- | pjsip/src/pjsua-lib/pjsua_acc.c | 4 | ||||
-rw-r--r-- | pjsip/src/pjsua-lib/pjsua_pres.c | 18 |
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); } } |