From 79f25ae18103afc16bd92abf8ed31df1992f13cf Mon Sep 17 00:00:00 2001 From: Robert Gemmell Date: Tue, 13 Sep 2011 00:26:40 +0000 Subject: QPID-3428: make the Java broker validate 0-10 Session names, enabling it to satisfy the clients new ClientID verification feature. Misc updates to the clients verification process. Applied patch from Andrew MacBean git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1169982 13f79535-47bb-0310-9956-ffa450edef68 --- .../main/java/org/apache/qpid/transport/Connection.java | 17 +++++++++++++++-- .../org/apache/qpid/transport/ConnectionDelegate.java | 2 +- .../main/java/org/apache/qpid/transport/Session.java | 1 + 3 files changed, 17 insertions(+), 3 deletions(-) (limited to 'java/common') diff --git a/java/common/src/main/java/org/apache/qpid/transport/Connection.java b/java/common/src/main/java/org/apache/qpid/transport/Connection.java index d6ddbaa061..469b007ab3 100644 --- a/java/common/src/main/java/org/apache/qpid/transport/Connection.java +++ b/java/common/src/main/java/org/apache/qpid/transport/Connection.java @@ -347,14 +347,22 @@ public class Connection extends ConnectionInvoker } Session ssn = _sessionFactory.newSession(this, name, expiry); - sessions.put(name, ssn); + registerSession(ssn); map(ssn); ssn.attach(); return ssn; } } - void removeSession(Session ssn) + public void registerSession(Session ssn) + { + synchronized (lock) + { + sessions.put(ssn.getName(),ssn); + } + } + + public void removeSession(Session ssn) { synchronized (lock) { @@ -707,4 +715,9 @@ public class Connection extends ConnectionInvoker { return channels.values(); } + + public boolean hasSessionWithName(final String name) + { + return sessions.containsKey(new Binary(name.getBytes())); + } } diff --git a/java/common/src/main/java/org/apache/qpid/transport/ConnectionDelegate.java b/java/common/src/main/java/org/apache/qpid/transport/ConnectionDelegate.java index f183c1e241..393301659d 100644 --- a/java/common/src/main/java/org/apache/qpid/transport/ConnectionDelegate.java +++ b/java/common/src/main/java/org/apache/qpid/transport/ConnectionDelegate.java @@ -85,7 +85,7 @@ public abstract class ConnectionDelegate @Override public void sessionDetach(Connection conn, SessionDetach dtc) { Session ssn = conn.getSession(dtc.getChannel()); - ssn.sessionDetached(dtc.getName(), SessionDetachCode.NORMAL); + ssn.sessionDetached(dtc.getName(), ssn.getDetachCode() == null? SessionDetachCode.NORMAL: ssn.getDetachCode()); conn.unmap(ssn); ssn.closed(); } diff --git a/java/common/src/main/java/org/apache/qpid/transport/Session.java b/java/common/src/main/java/org/apache/qpid/transport/Session.java index a838257fb6..556134f984 100644 --- a/java/common/src/main/java/org/apache/qpid/transport/Session.java +++ b/java/common/src/main/java/org/apache/qpid/transport/Session.java @@ -1099,6 +1099,7 @@ public class Session extends SessionInvoker { throw new SessionException("Timed out waiting for Session to open"); } + break; case DETACHED: case CLOSING: case CLOSED: -- cgit v1.2.1