summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2007-02-24 13:16:40 +0000
committerBenny Prijono <bennylp@teluu.com>2007-02-24 13:16:40 +0000
commite5ff40a9571cc1b1556caef9de17c8de52c2b629 (patch)
tree072777cc37115e4b59e9922d4fc7afedc3143e30
parentd7bfd38fd9a244a92f74cb2c0cc8ae2bbc056e20 (diff)
Fixed ticket #133: PUBLISH is rejected with 404 when REGISTER is challenged with 401/407
git-svn-id: http://svn.pjsip.org/repos/pjproject/branches/pjproject-0.5-stable@997 74dad513-b988-da41-8d7b-12977e46ad98
-rw-r--r--pjmedia/include/pjmedia/config.h2
-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
4 files changed, 19 insertions, 10 deletions
diff --git a/pjmedia/include/pjmedia/config.h b/pjmedia/include/pjmedia/config.h
index f4a60cff..0e79848f 100644
--- a/pjmedia/include/pjmedia/config.h
+++ b/pjmedia/include/pjmedia/config.h
@@ -78,7 +78,7 @@
* in timely manner, however it would take more memory. One individual
* buffer is about 10 or 20 ms long.
*
- * Default: 32
+ * Default: 16
*/
#ifndef PJMEDIA_SOUND_BUFFER_COUNT
# define PJMEDIA_SOUND_BUFFER_COUNT 16
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);
}
}