Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7d137e40 authored by Chung-yih Wang's avatar Chung-yih Wang
Browse files

Fix the bug of authentication in an outgoing call.

Since we missed the check of another challenge header in the
proxy authentication response.

Change-Id: Ie5b9d22c6c55b4d65619d2194c88845e7dd59f15
parent 4565933f
Loading
Loading
Loading
Loading
+9 −4
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.server.sip;
import gov.nist.javax.sip.clientauthutils.AccountManager;
import gov.nist.javax.sip.clientauthutils.UserCredentials;
import gov.nist.javax.sip.header.SIPHeaderNames;
import gov.nist.javax.sip.header.ProxyAuthenticate;
import gov.nist.javax.sip.header.WWWAuthenticate;
import gov.nist.javax.sip.message.SIPMessage;

@@ -731,7 +732,8 @@ class SipSessionGroup implements SipListener {
            Response response = event.getResponse();
            String nonce = getNonceFromResponse(response);
            if (((nonce != null) && nonce.equals(mLastNonce)) ||
                    (nonce == mLastNonce)) {
                    (nonce == null)) {
                mLastNonce = nonce;
                return false;
            } else {
                mClientTransaction = mSipHelper.handleChallenge(
@@ -764,9 +766,12 @@ class SipSessionGroup implements SipListener {
        }

        private String getNonceFromResponse(Response response) {
            WWWAuthenticate authHeader = (WWWAuthenticate)(response.getHeader(
                    SIPHeaderNames.WWW_AUTHENTICATE));
            return (authHeader == null) ? null : authHeader.getNonce();
            WWWAuthenticate wwwAuth = (WWWAuthenticate)response.getHeader(
                    SIPHeaderNames.WWW_AUTHENTICATE);
            if (wwwAuth != null) return wwwAuth.getNonce();
            ProxyAuthenticate proxyAuth = (ProxyAuthenticate)response.getHeader(
                    SIPHeaderNames.PROXY_AUTHENTICATE);
            return (proxyAuth == null) ? null : proxyAuth.getNonce();
        }

        private boolean readyForCall(EventObject evt) throws SipException {