diff options
author | Emil Ivov <emcho@jitsi.org> | 2011-02-03 22:39:18 +0000 |
---|---|---|
committer | Emil Ivov <emcho@jitsi.org> | 2011-02-03 22:39:18 +0000 |
commit | 4905e5f18c8fa72c29c6a3262d824d3e633537c7 (patch) | |
tree | b6bca39c0dafca7a823c77081ef34fa3d96daf2f /src/net/java | |
parent | f5afa3cbe9ff8f645125b6ba8dd1a9cc9b35e2cd (diff) | |
download | jitsi-4905e5f18c8fa72c29c6a3262d824d3e633537c7.zip jitsi-4905e5f18c8fa72c29c6a3262d824d3e633537c7.tar.gz jitsi-4905e5f18c8fa72c29c6a3262d824d3e633537c7.tar.bz2 |
Makes the ProtoProvider always respond with at least a 501 Not implemented to requests we don't support.
Diffstat (limited to 'src/net/java')
-rw-r--r-- | src/net/java/sip/communicator/impl/protocol/sip/ProtocolProviderServiceSipImpl.java | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/net/java/sip/communicator/impl/protocol/sip/ProtocolProviderServiceSipImpl.java b/src/net/java/sip/communicator/impl/protocol/sip/ProtocolProviderServiceSipImpl.java index b258e6c..5432e8d 100644 --- a/src/net/java/sip/communicator/impl/protocol/sip/ProtocolProviderServiceSipImpl.java +++ b/src/net/java/sip/communicator/impl/protocol/sip/ProtocolProviderServiceSipImpl.java @@ -988,6 +988,7 @@ public class ProtocolProviderServiceSipImpl try { serverTransaction.sendResponse(response); + //emil: shouldn't we return here ? } catch (SipException e) { @@ -1009,6 +1010,9 @@ public class ProtocolProviderServiceSipImpl //corresponding method List<MethodProcessor> processors = methodProcessors.get(method); + //raise this flag if at least one processor handles the request. + boolean processedAtLeastOnce = false; + if (processors != null) { if (logger.isDebugEnabled()) @@ -1019,10 +1023,43 @@ public class ProtocolProviderServiceSipImpl { if (processor.processRequest(requestEvent)) { + processedAtLeastOnce = true; break; } } } + + //send an error response if no one processes this + if (!processedAtLeastOnce) + { + ServerTransaction serverTransaction; + try + { + serverTransaction = SipStackSharing.getOrCreateServerTransaction(requestEvent); + + if (serverTransaction == null) + { + logger.warn("Could not create a transaction for a " + +"non-supported method " + request.getMethod()); + return; + } + + TransactionState state = serverTransaction.getState(); + + if( TransactionState.TRYING.equals(state) + || TransactionState.PROCEEDING.equals(state)) + { + Response response = this.getMessageFactory().createResponse( + Response.NOT_IMPLEMENTED, request); + serverTransaction.sendResponse(response); + } + } + catch (Throwable exc) + { + logger.warn("Could not respond to a non-supported method " + + request.getMethod(), exc); + } + } } /** |