aboutsummaryrefslogtreecommitdiffstats
path: root/src/net/java
diff options
context:
space:
mode:
authorEmil Ivov <emcho@jitsi.org>2011-02-03 22:39:18 +0000
committerEmil Ivov <emcho@jitsi.org>2011-02-03 22:39:18 +0000
commit4905e5f18c8fa72c29c6a3262d824d3e633537c7 (patch)
treeb6bca39c0dafca7a823c77081ef34fa3d96daf2f /src/net/java
parentf5afa3cbe9ff8f645125b6ba8dd1a9cc9b35e2cd (diff)
downloadjitsi-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.java37
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);
+ }
+ }
}
/**