From 7d137e40cd36290c6bfb5beaf66f4018ae92c97f Mon Sep 17 00:00:00 2001 From: Chung-yih Wang Date: Tue, 14 Sep 2010 14:01:13 +0800 Subject: [PATCH] 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 --- .../com/android/server/sip/SipSessionGroup.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/services/java/com/android/server/sip/SipSessionGroup.java b/services/java/com/android/server/sip/SipSessionGroup.java index 94769d838934f..e72027437e738 100644 --- a/services/java/com/android/server/sip/SipSessionGroup.java +++ b/services/java/com/android/server/sip/SipSessionGroup.java @@ -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 {