diff --git a/src/net/java/sip/communicator/impl/protocol/sip/SipStackSharing.java b/src/net/java/sip/communicator/impl/protocol/sip/SipStackSharing.java index 0c54d877c..e2e329b1e 100644 --- a/src/net/java/sip/communicator/impl/protocol/sip/SipStackSharing.java +++ b/src/net/java/sip/communicator/impl/protocol/sip/SipStackSharing.java @@ -587,7 +587,7 @@ private ProtocolProviderServiceSipImpl findTargetFor(Request request) for(ProtocolProviderServiceSipImpl listener : currentListeners) { String ourUserID = (String) listener.getAccountID().getUserID(); - logger.trace(ourUserID + " *** " + requestUser); + //logger.trace(ourUserID + " *** " + requestUser); if(ourUserID.equals(requestUser)) { logger.trace("suitable candidate found: " @@ -602,51 +602,18 @@ private ProtocolProviderServiceSipImpl findTargetFor(Request request) { ProtocolProviderServiceSipImpl perfectMatch = candidates.get(0); - logger.trace("(0) will dispatch to: " - + perfectMatch.getAccountID()); + logger.trace("Will dispatch to \"" + + perfectMatch.getAccountID() + "\""); return perfectMatch; } // past this point, our guess is not reliable // we try to find the "least worst" match based on parameters // like the To field - logger.warn("impossible to guess reliably which account this " - + "request is addressed to but we'll still try"); // more than one account match if(candidates.size() > 1) { - // check if the To header field SIP URI - // matches any of our SIP URIs - // (same user and host) - for(ProtocolProviderServiceSipImpl candidate : candidates) - { - URI fromURI = ((FromHeader) request - .getHeader(FromHeader.NAME)).getAddress().getURI(); - if(fromURI.isSipURI() == false) - continue; - SipURI ourURI = (SipURI) candidate - .getOurSipAddress((SipURI) fromURI).getURI(); - String ourUser = ourURI.getUser(); - String ourHost = ourURI.getHost(); - - URI toURI = ((ToHeader) request - .getHeader(ToHeader.NAME)).getAddress().getURI(); - if(toURI.isSipURI() == false) - continue; - String toUser = ((SipURI) toURI).getUser(); - String toHost = ((SipURI) toURI).getHost(); - - //logger.trace(toUser + "@" + toHost + "***" - // + ourUser + "@" + ourHost); - if(toUser.equals(ourUser) && toHost.equals(ourHost)) - { - logger.trace("(1) will dispatch to: " + - candidate.getAccountID()); - return candidate; - } - } - // check if the To header field host part // matches any of our SIP hosts for(ProtocolProviderServiceSipImpl candidate : candidates) @@ -668,35 +635,9 @@ private ProtocolProviderServiceSipImpl findTargetFor(Request request) //logger.trace(toHost + "***" + ourHost); if(toHost.equals(ourHost)) { - logger.trace("(2) will dispatch to: " + - candidate.getAccountID()); - return candidate; - } - } - - // check if the To header field username part - // matches any of our SIP usernames - for(ProtocolProviderServiceSipImpl candidate : candidates) - { - URI fromURI = ((FromHeader) request - .getHeader(FromHeader.NAME)).getAddress().getURI(); - if(fromURI.isSipURI() == false) - continue; - SipURI ourURI = (SipURI) candidate - .getOurSipAddress((SipURI) fromURI).getURI(); - String ourUser = ourURI.getUser(); - - URI toURI = ((ToHeader) request - .getHeader(ToHeader.NAME)).getAddress().getURI(); - if(toURI.isSipURI() == false) - continue; - String toUser = ((SipURI) toURI).getUser(); - - //logger.trace(toUser + "***" + ourUser); - if(toUser.equals(ourUser)) - { - logger.trace("(3) will dispatch to: " + - candidate.getAccountID()); + logger.trace("Will dispatch to \"" + + candidate.getAccountID() + "\" because " + + "host in the To: is the same as in our AOR"); return candidate; } } @@ -704,100 +645,22 @@ private ProtocolProviderServiceSipImpl findTargetFor(Request request) // fallback on the first candidate ProtocolProviderServiceSipImpl target = candidates.iterator().next(); - logger.trace("(4) will dispatch to: " + target.getAccountID()); + logger.warn("Will randomly dispatch to \"" + + target.getAccountID() + + "\" because there is ambiguity on the username from" + + " the Request-URI"); + logger.trace("\n" + request); return target; } - // check if the To header field SIP URI - // matches any of our SIP URIs - for(ProtocolProviderServiceSipImpl listener : currentListeners) - { - URI fromURI = ((FromHeader) request - .getHeader(FromHeader.NAME)).getAddress().getURI(); - if(fromURI.isSipURI() == false) - continue; - SipURI ourURI = (SipURI) listener - .getOurSipAddress((SipURI) fromURI).getURI(); - String ourUser = ourURI.getUser(); - String ourHost = ourURI.getHost(); - - URI toURI = ((ToHeader) request - .getHeader(ToHeader.NAME)).getAddress().getURI(); - if(toURI.isSipURI() == false) - continue; - String toUser = ((SipURI) toURI).getUser(); - String toHost = ((SipURI) toURI).getHost(); - - //logger.trace(toUser + "@" + toHost + "***" - // + ourUser + "@" + ourHost); - if(toUser.equals(ourUser) && toHost.equals(ourHost)) - { - logger.trace("(5) will dispatch to: " + - listener.getAccountID()); - return listener; - } - } - - // check if the To header field host part - // matches any of our account hosts - for(ProtocolProviderServiceSipImpl listener : currentListeners) - { - URI fromURI = ((FromHeader) request - .getHeader(FromHeader.NAME)).getAddress().getURI(); - if(fromURI.isSipURI() == false) - continue; - SipURI ourURI = (SipURI) listener - .getOurSipAddress((SipURI) fromURI).getURI(); - String ourHost = ourURI.getHost(); - - URI toURI = ((ToHeader) request - .getHeader(ToHeader.NAME)).getAddress().getURI(); - if(toURI.isSipURI() == false) - continue; - String toHost = ((SipURI) toURI).getHost(); - - //logger.trace(toHost + "***" + ourHost); - if(toHost.equals(ourHost)) - { - logger.trace("(6) will dispatch to: " + - listener.getAccountID()); - return listener; - } - } - - // check if the To header field username part - // matches any of our account usernames - for(ProtocolProviderServiceSipImpl listener : currentListeners) - { - URI fromURI = ((FromHeader) request - .getHeader(FromHeader.NAME)).getAddress().getURI(); - if(fromURI.isSipURI() == false) - continue; - SipURI ourURI = (SipURI) listener - .getOurSipAddress((SipURI) fromURI).getURI(); - String ourUser = ourURI.getUser(); - - URI toURI = ((ToHeader) request - .getHeader(ToHeader.NAME)).getAddress().getURI(); - if(toURI.isSipURI() == false) - continue; - String toUser = ((SipURI) toURI).getUser(); - - //logger.trace(toUser + "***" + ourUser); - if(toUser.equals(ourUser)) - { - logger.trace("(7) will dispatch to: " + - listener.getAccountID()); - return listener; - } - } - // fallback on any account ProtocolProviderServiceSipImpl target = currentListeners.iterator().next(); - logger.trace("(8) will dispatch to: " + target.getAccountID()); + logger.warn("Will randomly dispatch to \"" + target.getAccountID() + + "\" because the username in the Request-URI " + + "is unknown or empty"); + logger.trace("\n" + request); return target; - } else {