static const LinphoneAuthInfo *find_auth_info(LinphoneCore *lc, const char *username, const char *realm, const char *domain, bool_t ignore_realm){ bctbx_list_t *elem; const LinphoneAuthInfo *ret=NULL; for (elem=lc->auth_info;elem!=NULL;elem=elem->next) { LinphoneAuthInfo *pinfo = (LinphoneAuthInfo*)elem->data; if (username && pinfo->username && strcmp(username,pinfo->username)==0) { if (realm && domain){ if (pinfo->realm && realm_match(realm,pinfo->realm) && pinfo->domain && strcmp(domain,pinfo->domain)==0) { return pinfo; } } else if (realm) { if (pinfo->realm && realm_match(realm,pinfo->realm)) { if (ret!=NULL) { ms_warning("Non unique realm found for %s",username); return NULL; } ret=pinfo; } } else if (domain && pinfo->domain && strcmp(domain,pinfo->domain)==0 && (pinfo->ha1==NULL || ignore_realm)) { return pinfo; } else if (!domain && (pinfo->ha1==NULL || ignore_realm)) { return pinfo; } } } return ret; }
/** * Retrieves a LinphoneAuthInfo previously entered into the LinphoneCore. **/ const LinphoneAuthInfo *linphone_core_find_auth_info(LinphoneCore *lc, const char *realm, const char *username) { MSList *elem; LinphoneAuthInfo *ret=NULL,*candidate=NULL; for (elem=lc->auth_info;elem!=NULL;elem=elem->next){ LinphoneAuthInfo *pinfo=(LinphoneAuthInfo*)elem->data; if (realm==NULL){ /*return the authinfo for any realm provided that there is only one for that username*/ if (key_match(pinfo->username,username)){ if (ret!=NULL){ ms_warning("There are several auth info for username '%s'",username); return NULL; } ret=pinfo; } }else{ /*return the exact authinfo, or an authinfo for which realm was not supplied yet*/ if (pinfo->realm!=NULL){ if (realm_match(pinfo->realm,realm) && key_match(pinfo->username,username)) ret=pinfo; }else{ if (key_match(pinfo->username,username)) candidate=pinfo; } } } if (ret==NULL && candidate!=NULL) ret=candidate; return ret; }