{
struct ast_sip_aor *aor = NULL;
char *aor_name = NULL;
+ pjsip_sip_uri *uri;
+ pj_str_t username;
int i;
- for (i = 0; i < AST_VECTOR_SIZE(&endpoint->ident_method_order); ++i) {
- pj_str_t username;
- pjsip_sip_uri *uri;
- pjsip_authorization_hdr *header = NULL;
+ /*
+ * RFC 3261: The To header contains the Address-of-Record
+ * whose registration is being created, queried, or modified.
+ */
+ uri = pjsip_uri_get_uri(rdata->msg_info.to->uri);
+ pj_strassign(&username, &uri->user);
- switch (AST_VECTOR_GET(&endpoint->ident_method_order, i)) {
- case AST_SIP_ENDPOINT_IDENTIFY_BY_USERNAME:
- uri = pjsip_uri_get_uri(rdata->msg_info.to->uri);
+ if (ast_sip_get_ignore_uri_user_options()) {
+ pj_ssize_t semi = pj_strcspn2(&username, ";");
- pj_strassign(&username, &uri->user);
+ if (semi < pj_strlen(&username)) {
+ username.slen = semi;
+ }
+ }
- /*
- * We may want to match without any user options getting
- * in the way.
- *
- * Logic adapted from AST_SIP_USER_OPTIONS_TRUNCATE_CHECK for pj_str_t.
- */
- if (ast_sip_get_ignore_uri_user_options()) {
- pj_ssize_t semi = pj_strcspn2(&username, ";");
- if (semi < pj_strlen(&username)) {
- username.slen = semi;
- }
- }
+ aor_name = find_aor_name(&username, &uri->host, endpoint->aors);
+ if (aor_name) {
+ ast_debug(3, "Matched aor '%s' by REGISTER To URI\n", aor_name);
+ }
- aor_name = find_aor_name(&username, &uri->host, endpoint->aors);
- if (aor_name) {
- ast_debug(3, "Matched aor '%s' by To username\n", aor_name);
+ if (!aor_name) {
+ for (i = 0; i < AST_VECTOR_SIZE(&endpoint->ident_method_order); ++i) {
+ pjsip_authorization_hdr *header = NULL;
+
+ if (AST_VECTOR_GET(&endpoint->ident_method_order, i)
+ != AST_SIP_ENDPOINT_IDENTIFY_BY_AUTH_USERNAME) {
+ continue;
}
- break;
- case AST_SIP_ENDPOINT_IDENTIFY_BY_AUTH_USERNAME:
- while ((header = pjsip_msg_find_hdr(rdata->msg_info.msg, PJSIP_H_AUTHORIZATION,
- header ? header->next : NULL))) {
- if (header && !pj_stricmp2(&header->scheme, "digest")) {
- aor_name = find_aor_name(&header->credential.digest.username,
- &header->credential.digest.realm, endpoint->aors);
- if (aor_name) {
- ast_debug(3, "Matched aor '%s' by Authentication username\n", aor_name);
- break;
- }
+
+ while ((header = pjsip_msg_find_hdr(rdata->msg_info.msg,
+ PJSIP_H_AUTHORIZATION, header ? header->next : NULL))) {
+ if (pj_stricmp2(&header->scheme, "digest")) {
+ continue;
+ }
+
+ aor_name = find_aor_name(&header->credential.digest.username,
+ &header->credential.digest.realm, endpoint->aors);
+ if (aor_name) {
+ ast_debug(3, "Matched aor '%s' by Authentication username\n",
+ aor_name);
+ break;
}
}
- break;
- default:
- continue;
- }
- if (aor_name) {
break;
}
}