Author: astitcher
Date: Mon May 21 23:18:37 2012
New Revision: 1341261

URL: http://svn.apache.org/viewvc?rev=1341261&view=rev
Log:
NO-JIRA: Implement abort for ssl connections

Modified:
    qpid/trunk/qpid/cpp/src/qpid/sys/ssl/SslHandler.cpp
    qpid/trunk/qpid/cpp/src/qpid/sys/ssl/SslIo.cpp
    qpid/trunk/qpid/cpp/src/qpid/sys/ssl/SslIo.h

Modified: qpid/trunk/qpid/cpp/src/qpid/sys/ssl/SslHandler.cpp
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/sys/ssl/SslHandler.cpp?rev=1341261&r1=1341260&r2=1341261&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/sys/ssl/SslHandler.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/sys/ssl/SslHandler.cpp Mon May 21 23:18:37 2012
@@ -80,8 +80,10 @@ void SslHandler::write(const framing::Pr
 }
 
 void SslHandler::abort() {
-    // TODO: can't implement currently as underlying functionality not 
implemented
-    // aio->requestCallback(boost::bind(&SslHandler::eof, this, _1));
+    // Don't disconnect if we're already disconnecting
+    if (!readError) {
+        aio->requestCallback(boost::bind(&SslHandler::eof, this, _1));
+    }
 }
 void SslHandler::activateOutput() {
     aio->notifyPendingWrite();

Modified: qpid/trunk/qpid/cpp/src/qpid/sys/ssl/SslIo.cpp
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/sys/ssl/SslIo.cpp?rev=1341261&r1=1341260&r2=1341261&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/sys/ssl/SslIo.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/sys/ssl/SslIo.cpp Mon May 21 23:18:37 2012
@@ -257,6 +257,18 @@ void SslIO::queueWriteClose() {
     DispatchHandle::rewatchWrite();
 }
 
+void SslIO::requestCallback(RequestCallback callback) {
+    // TODO creating a function object every time isn't all that
+    // efficient - if this becomes heavily used do something better (what?)
+    assert(callback);
+    DispatchHandle::call(boost::bind(&SslIO::requestedCall, this, callback));
+}
+
+void SslIO::requestedCall(RequestCallback callback) {
+    assert(callback);
+    callback(*this);
+}
+
 /** Return a queued buffer if there are enough
  * to spare
  */

Modified: qpid/trunk/qpid/cpp/src/qpid/sys/ssl/SslIo.h
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/sys/ssl/SslIo.h?rev=1341261&r1=1341260&r2=1341261&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/sys/ssl/SslIo.h (original)
+++ qpid/trunk/qpid/cpp/src/qpid/sys/ssl/SslIo.h Mon May 21 23:18:37 2012
@@ -125,6 +125,7 @@ public:
     typedef boost::function2<void, SslIO&, const SslSocket&> ClosedCallback;
     typedef boost::function1<void, SslIO&> BuffersEmptyCallback;
     typedef boost::function1<void, SslIO&> IdleCallback;
+    typedef boost::function1<void, SslIO&> RequestCallback;
 
 
 private:
@@ -159,6 +160,7 @@ public:
     void notifyPendingWrite();
     void queueWriteClose();
     bool writeQueueEmpty() { return writeQueue.empty(); }
+    void requestCallback(RequestCallback);
     BufferBase* getQueuedBuffer();
 
     qpid::sys::SecuritySettings getSecuritySettings();
@@ -168,6 +170,7 @@ private:
     void readable(qpid::sys::DispatchHandle& handle);
     void writeable(qpid::sys::DispatchHandle& handle);
     void disconnected(qpid::sys::DispatchHandle& handle);
+    void requestedCall(RequestCallback);
     void close(qpid::sys::DispatchHandle& handle);
 };
 



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to