summaryrefslogtreecommitdiff
path: root/qpid/cpp
diff options
context:
space:
mode:
authorAndrew Stitcher <astitcher@apache.org>2013-01-22 19:02:22 +0000
committerAndrew Stitcher <astitcher@apache.org>2013-01-22 19:02:22 +0000
commit18de0170eedfd2d1725f7d73de43c63481c5b5b0 (patch)
treea7722e2b8fc14484e0dcf89c4bd60ff9996b3586 /qpid/cpp
parentcdb684fd1e8996772be47579e414cfe6a7643eb7 (diff)
downloadqpid-python-18de0170eedfd2d1725f7d73de43c63481c5b5b0.tar.gz
NO-JIRA: Add abort() implementation for SSL client code - this make heartbeats
work for SSL client connections too. git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1437101 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/cpp')
-rw-r--r--qpid/cpp/src/qpid/client/SslConnector.cpp22
1 files changed, 21 insertions, 1 deletions
diff --git a/qpid/cpp/src/qpid/client/SslConnector.cpp b/qpid/cpp/src/qpid/client/SslConnector.cpp
index 3a146592e6..11707eb3f7 100644
--- a/qpid/cpp/src/qpid/client/SslConnector.cpp
+++ b/qpid/cpp/src/qpid/client/SslConnector.cpp
@@ -90,9 +90,11 @@ class SslConnector : public Connector
void connect(const std::string& host, const std::string& port);
void connected(const sys::Socket&);
void connectFailed(const std::string& msg);
+
void close();
void send(framing::AMQFrame& frame);
- void abort() {} // TODO: Need to fix for heartbeat timeouts to work
+ void abort();
+ void connectAborted();
void setInputHandler(framing::InputHandler* handler);
void setShutdownHandler(sys::ShutdownHandler* handler);
@@ -224,6 +226,24 @@ void SslConnector::socketClosed(AsynchIO&, const Socket&) {
shutdownHandler->shutdown();
}
+void SslConnector::connectAborted() {
+ connector->stop();
+ connectFailed("Connection timedout");
+}
+
+void SslConnector::abort() {
+ // Can't abort a closed connection
+ if (!closed) {
+ if (aio) {
+ // Established connection
+ aio->requestCallback(boost::bind(&SslConnector::eof, this, _1));
+ } else if (connector) {
+ // We're still connecting
+ connector->requestCallback(boost::bind(&SslConnector::connectAborted, this));
+ }
+ }
+}
+
void SslConnector::setInputHandler(InputHandler* handler){
input = handler;
}