Skip to content

Commit dc442cd

Browse files
nanangizzclaude
andcommitted
Configure async auth on non-shared auth sessions for all modules
When use_shared_auth is false and on_auth_challenge callback is set, configure async auth directly on each module's own auth session (regc, dialog, publishc, buddy, IM) so the callback fires on the non-shared path too. Also adds pjsip_publishc_get_auth_sess() API and fills the missing shared-auth path for incoming call dialogs. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent f98900e commit dc442cd

File tree

7 files changed

+76
-4
lines changed

7 files changed

+76
-4
lines changed

pjsip/include/pjsip-simple/publish.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,16 @@ PJ_DECL(pj_status_t) pjsip_publishc_set_auth_sess(
220220
pjsip_publishc *pubc,
221221
pjsip_auth_clt_sess *session);
222222

223+
/**
224+
* Get the authentication client session associated with the publication.
225+
*
226+
* @param pubc The client publication structure.
227+
*
228+
* @return The authentication client session.
229+
*/
230+
PJ_DECL(pjsip_auth_clt_sess*) pjsip_publishc_get_auth_sess(
231+
pjsip_publishc *pubc);
232+
223233
/**
224234
* Set route set to be used for outgoing requests.
225235
*

pjsip/src/pjsip-simple/publishc.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -332,6 +332,13 @@ PJ_DEF(pj_status_t) pjsip_publishc_set_auth_sess(
332332
return pjsip_auth_clt_set_parent(&pubc->auth_sess, session);
333333
}
334334

335+
PJ_DEF(pjsip_auth_clt_sess*) pjsip_publishc_get_auth_sess(
336+
pjsip_publishc *pubc)
337+
{
338+
PJ_ASSERT_RETURN(pubc, NULL);
339+
return &pubc->auth_sess;
340+
}
341+
335342
PJ_DEF(pj_status_t) pjsip_publishc_set_route_set( pjsip_publishc *pubc,
336343
const pjsip_route_hdr *route_set)
337344
{

pjsip/src/pjsip/sip_auth_client.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1973,5 +1973,5 @@ PJ_DEF(pj_status_t) pjsip_auth_clt_async_impl_on_challenge(
19731973
* fall through to synchronous path.
19741974
*/
19751975
pj_bzero(token->signature, 4);
1976-
return PJ_EINVALIDOP;
1976+
return PJ_EIGNORED;
19771977
}

pjsip/src/pjsua-lib/pjsua_acc.c

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2848,6 +2848,18 @@ static pj_status_t pjsua_regc_init(int acc_id)
28482848
}
28492849
}
28502850

2851+
/* Configure async auth on non-shared regc auth session */
2852+
if (!acc->cfg.use_shared_auth &&
2853+
pjsua_var.ua_cfg.cb.on_auth_challenge)
2854+
{
2855+
pjsip_auth_clt_async_setting async_opt;
2856+
pj_bzero(&async_opt, sizeof(async_opt));
2857+
async_opt.cb = &pjsua_auth_on_challenge;
2858+
async_opt.user_data = (void*)(pj_ssize_t)acc->index;
2859+
pjsip_auth_clt_async_configure(
2860+
pjsip_regc_get_auth_sess(acc->regc), &async_opt);
2861+
}
2862+
28512863
/* Set delay before registration refresh */
28522864
status = pjsip_regc_set_delay_before_refresh(
28532865
acc->regc,

pjsip/src/pjsua-lib/pjsua_call.c

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1033,6 +1033,12 @@ PJ_DEF(pj_status_t) pjsua_call_make_call(pjsua_acc_id acc_id,
10331033

10341034
if (acc->cfg.use_shared_auth) {
10351035
pjsip_dlg_set_auth_sess(dlg, &acc->shared_auth_sess);
1036+
} else if (pjsua_var.ua_cfg.cb.on_auth_challenge) {
1037+
pjsip_auth_clt_async_setting async_opt;
1038+
pj_bzero(&async_opt, sizeof(async_opt));
1039+
async_opt.cb = &pjsua_auth_on_challenge;
1040+
async_opt.user_data = (void*)(pj_ssize_t)acc->index;
1041+
pjsip_auth_clt_async_configure(&dlg->auth_sess, &async_opt);
10361042
}
10371043

10381044
/* Calculate call's secure level */
@@ -2023,6 +2029,18 @@ pj_bool_t pjsua_call_on_incoming(pjsip_rx_data *rdata)
20232029
pjsua_var.acc[acc_id].cred);
20242030
}
20252031

2032+
/* Set shared or non-shared async auth for incoming call dialog */
2033+
if (pjsua_var.acc[acc_id].cfg.use_shared_auth) {
2034+
pjsip_dlg_set_auth_sess(dlg,
2035+
&pjsua_var.acc[acc_id].shared_auth_sess);
2036+
} else if (pjsua_var.ua_cfg.cb.on_auth_challenge) {
2037+
pjsip_auth_clt_async_setting async_opt;
2038+
pj_bzero(&async_opt, sizeof(async_opt));
2039+
async_opt.cb = &pjsua_auth_on_challenge;
2040+
async_opt.user_data = (void*)(pj_ssize_t)acc_id;
2041+
pjsip_auth_clt_async_configure(&dlg->auth_sess, &async_opt);
2042+
}
2043+
20262044
/* Set preference */
20272045
pjsip_auth_clt_set_prefs(&dlg->auth_sess,
20282046
&pjsua_var.acc[acc_id].cfg.auth_pref);

pjsip/src/pjsua-lib/pjsua_im.c

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -459,10 +459,16 @@ static void im_callback(void *token, pjsip_event *e)
459459

460460
pjsip_auth_clt_init(&ctx->auth, pjsua_var.endpt, tsx->pool, 0);
461461

462-
/* Set shared auth session for IM */
462+
/* Set shared or non-shared async auth for IM */
463463
if (pjsua_var.acc[im_data->acc_id].cfg.use_shared_auth) {
464464
pjsip_auth_clt_set_parent(&ctx->auth,
465465
&pjsua_var.acc[im_data->acc_id].shared_auth_sess);
466+
} else if (pjsua_var.ua_cfg.cb.on_auth_challenge) {
467+
pjsip_auth_clt_async_setting async_opt;
468+
pj_bzero(&async_opt, sizeof(async_opt));
469+
async_opt.cb = &pjsua_auth_on_challenge;
470+
async_opt.user_data = (void*)(pj_ssize_t)im_data->acc_id;
471+
pjsip_auth_clt_async_configure(&ctx->auth, &async_opt);
466472
}
467473

468474
pjsip_auth_clt_set_credentials(&ctx->auth,
@@ -615,10 +621,16 @@ static void typing_callback(void *token, pjsip_event *e)
615621

616622
pjsip_auth_clt_init(&ctx->auth, pjsua_var.endpt, tsx->pool, 0);
617623

618-
/* Set shared auth session for IM */
624+
/* Set shared or non-shared async auth for IM */
619625
if (pjsua_var.acc[im_data->acc_id].cfg.use_shared_auth) {
620626
pjsip_auth_clt_set_parent(&ctx->auth,
621627
&pjsua_var.acc[im_data->acc_id].shared_auth_sess);
628+
} else if (pjsua_var.ua_cfg.cb.on_auth_challenge) {
629+
pjsip_auth_clt_async_setting async_opt;
630+
pj_bzero(&async_opt, sizeof(async_opt));
631+
async_opt.cb = &pjsua_auth_on_challenge;
632+
async_opt.user_data = (void*)(pj_ssize_t)im_data->acc_id;
633+
pjsip_auth_clt_async_configure(&ctx->auth, &async_opt);
622634
}
623635

624636
pjsip_auth_clt_set_credentials(&ctx->auth,

pjsip/src/pjsua-lib/pjsua_pres.c

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1538,6 +1538,13 @@ pj_status_t pjsua_pres_init_publish_acc(int acc_id)
15381538
if (acc->cfg.use_shared_auth) {
15391539
pjsip_publishc_set_auth_sess(acc->publish_sess,
15401540
&acc->shared_auth_sess);
1541+
} else if (pjsua_var.ua_cfg.cb.on_auth_challenge) {
1542+
pjsip_auth_clt_async_setting async_opt;
1543+
pj_bzero(&async_opt, sizeof(async_opt));
1544+
async_opt.cb = &pjsua_auth_on_challenge;
1545+
async_opt.user_data = (void*)(pj_ssize_t)acc->index;
1546+
pjsip_auth_clt_async_configure(
1547+
pjsip_publishc_get_auth_sess(acc->publish_sess), &async_opt);
15411548
}
15421549

15431550
/* Set route-set */
@@ -2146,11 +2153,17 @@ static void subscribe_buddy(pjsua_buddy_id buddy_id,
21462153

21472154
if (acc->cfg.use_shared_auth) {
21482155
pjsip_dlg_set_auth_sess(buddy->dlg, &acc->shared_auth_sess);
2156+
} else if (pjsua_var.ua_cfg.cb.on_auth_challenge) {
2157+
pjsip_auth_clt_async_setting async_opt;
2158+
pj_bzero(&async_opt, sizeof(async_opt));
2159+
async_opt.cb = &pjsua_auth_on_challenge;
2160+
async_opt.user_data = (void*)(pj_ssize_t)acc->index;
2161+
pjsip_auth_clt_async_configure(&buddy->dlg->auth_sess, &async_opt);
21492162
}
21502163

21512164
/* Set credentials */
21522165
if (acc->cred_cnt) {
2153-
pjsip_auth_clt_set_credentials( &buddy->dlg->auth_sess,
2166+
pjsip_auth_clt_set_credentials( &buddy->dlg->auth_sess,
21542167
acc->cred_cnt, acc->cred);
21552168
}
21562169

0 commit comments

Comments
 (0)