diff options
author | Robert Gemmell <robbie@apache.org> | 2011-09-13 00:26:40 +0000 |
---|---|---|
committer | Robert Gemmell <robbie@apache.org> | 2011-09-13 00:26:40 +0000 |
commit | 79f25ae18103afc16bd92abf8ed31df1992f13cf (patch) | |
tree | b9421cd313d59d33c0092926ee98fb48dc0c5e40 /java/common | |
parent | 6c83b9c3c46f31bebcdefc0359b8125391ef6c6f (diff) | |
download | qpid-python-79f25ae18103afc16bd92abf8ed31df1992f13cf.tar.gz |
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
Diffstat (limited to 'java/common')
3 files changed, 17 insertions, 3 deletions
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: |