diff options
author | Andrew Stitcher <astitcher@apache.org> | 2009-06-08 14:34:45 +0000 |
---|---|---|
committer | Andrew Stitcher <astitcher@apache.org> | 2009-06-08 14:34:45 +0000 |
commit | 98530972a92115089c20c6b8acc619cca75c8b4e (patch) | |
tree | 69eabe215da47120dcd9bb5482f2063c58101db4 | |
parent | 5c90bcdf26ed9483bb18336de1f30dee54733157 (diff) | |
download | qpid-python-98530972a92115089c20c6b8acc619cca75c8b4e.tar.gz |
Plumbed in an a connection abort operation to the OutputHandler
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@782649 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r-- | qpid/cpp/src/qpid/amqp_0_10/Connection.cpp | 13 | ||||
-rw-r--r-- | qpid/cpp/src/qpid/amqp_0_10/Connection.h | 5 | ||||
-rw-r--r-- | qpid/cpp/src/qpid/broker/SessionState.cpp | 7 | ||||
-rw-r--r-- | qpid/cpp/src/qpid/broker/SessionState.h | 5 | ||||
-rw-r--r-- | qpid/cpp/src/qpid/sys/AggregateOutput.cpp | 14 | ||||
-rw-r--r-- | qpid/cpp/src/qpid/sys/AggregateOutput.h | 7 | ||||
-rw-r--r-- | qpid/cpp/src/qpid/sys/AsynchIOHandler.cpp | 16 | ||||
-rw-r--r-- | qpid/cpp/src/qpid/sys/AsynchIOHandler.h | 8 | ||||
-rw-r--r-- | qpid/cpp/src/qpid/sys/ConnectionOutputHandlerPtr.h | 5 | ||||
-rw-r--r-- | qpid/cpp/src/qpid/sys/OutputControl.h | 7 | ||||
-rw-r--r-- | qpid/cpp/src/qpid/sys/RdmaIOPlugin.cpp | 31 | ||||
-rw-r--r-- | qpid/cpp/src/qpid/sys/ssl/SslHandler.cpp | 14 | ||||
-rw-r--r-- | qpid/cpp/src/qpid/sys/ssl/SslHandler.h | 8 |
13 files changed, 85 insertions, 55 deletions
diff --git a/qpid/cpp/src/qpid/amqp_0_10/Connection.cpp b/qpid/cpp/src/qpid/amqp_0_10/Connection.cpp index 5b14d60ff5..34134150da 100644 --- a/qpid/cpp/src/qpid/amqp_0_10/Connection.cpp +++ b/qpid/cpp/src/qpid/amqp_0_10/Connection.cpp @@ -7,9 +7,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -72,7 +72,7 @@ size_t Connection::encode(const char* buffer, size_t size) { { // Swap frameQueue data into workQueue to avoid holding lock while we encode. Mutex::ScopedLock l(frameQueueLock); assert(workQueue.empty()); - workQueue.swap(frameQueue); + workQueue.swap(frameQueue); } framing::Buffer out(const_cast<char*>(buffer), size); if (!isClient && !initialized) { @@ -88,7 +88,7 @@ size_t Connection::encode(const char* buffer, size_t size) { QPID_LOG(trace, "SENT [" << identifier << "]: " << workQueue.front()); workQueue.pop_front(); encoded += frameSize; - if (workQueue.empty() && out.available() > 0) connection->doOutput(); + if (workQueue.empty() && out.available() > 0) connection->doOutput(); } assert(workQueue.empty() || workQueue.front().encodedSize() <= size); if (!workQueue.empty() && workQueue.front().encodedSize() > size) @@ -103,7 +103,8 @@ size_t Connection::encode(const char* buffer, size_t size) { return out.getPosition(); } -void Connection::activateOutput() { output.activateOutput(); } +void Connection::abort() { output.abort(); } +void Connection::activateOutput() { output.activateOutput(); } void Connection::giveReadCredit(int32_t credit) { output.giveReadCredit(credit); } void Connection::close() { @@ -130,7 +131,7 @@ framing::ProtocolVersion Connection::getVersion() const { return framing::ProtocolVersion(0,10); } -size_t Connection::getBuffered() const { +size_t Connection::getBuffered() const { Mutex::ScopedLock l(frameQueueLock); return buffered; } diff --git a/qpid/cpp/src/qpid/amqp_0_10/Connection.h b/qpid/cpp/src/qpid/amqp_0_10/Connection.h index 3e0a5d1ee8..32aadff105 100644 --- a/qpid/cpp/src/qpid/amqp_0_10/Connection.h +++ b/qpid/cpp/src/qpid/amqp_0_10/Connection.h @@ -10,9 +10,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -63,6 +63,7 @@ class Connection : public sys::ConnectionCodec, size_t encode(const char* buffer, size_t size); bool isClosed() const; bool canEncode(); + void abort(); void activateOutput(); void giveReadCredit(int32_t); void closed(); // connection closed by peer. diff --git a/qpid/cpp/src/qpid/broker/SessionState.cpp b/qpid/cpp/src/qpid/broker/SessionState.cpp index 26a35f4a4f..f5e9139a76 100644 --- a/qpid/cpp/src/qpid/broker/SessionState.cpp +++ b/qpid/cpp/src/qpid/broker/SessionState.cpp @@ -134,6 +134,11 @@ void SessionState::attach(SessionHandler& h) { } } +void SessionState::abort() { + if (isAttached()) + getConnection().outputTasks.abort(); +} + void SessionState::activateOutput() { if (isAttached()) getConnection().outputTasks.activateOutput(); @@ -213,7 +218,7 @@ struct ScheduledCreditTask : public TimerTask { sessionState.getConnection().requestIOProcessing(boost::bind(&ScheduledCreditTask::sendCredit, this)); } } - + void sendCredit() { if ( !sessionState.processSendCredit(0) ) { QPID_LOG(warning, sessionState.getId() << ": Reschedule sending credit"); diff --git a/qpid/cpp/src/qpid/broker/SessionState.h b/qpid/cpp/src/qpid/broker/SessionState.h index 880dfad99e..ef6c56ddbe 100644 --- a/qpid/cpp/src/qpid/broker/SessionState.h +++ b/qpid/cpp/src/qpid/broker/SessionState.h @@ -87,6 +87,7 @@ class SessionState : public qpid::SessionState, Broker& getBroker(); /** OutputControl **/ + void abort(); void activateOutput(); void giveReadCredit(int32_t); @@ -132,9 +133,9 @@ class SessionState : public qpid::SessionState, * This proxy is for sending such commands. In a clustered broker it will take steps * to synchronize command order across the cluster. In a stand-alone broker * it is just a synonym for getProxy() - */ + */ framing::AMQP_ClientProxy& getClusterOrderProxy(); - + Broker& broker; SessionHandler* handler; sys::AbsTime expiry; // Used by SessionManager. diff --git a/qpid/cpp/src/qpid/sys/AggregateOutput.cpp b/qpid/cpp/src/qpid/sys/AggregateOutput.cpp index fa6901d3e4..74bf6d0f85 100644 --- a/qpid/cpp/src/qpid/sys/AggregateOutput.cpp +++ b/qpid/cpp/src/qpid/sys/AggregateOutput.cpp @@ -7,9 +7,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -25,13 +25,15 @@ namespace qpid { namespace sys { - + +void AggregateOutput::abort() { control.abort(); } + void AggregateOutput::activateOutput() { control.activateOutput(); } void AggregateOutput::giveReadCredit(int32_t credit) { control.giveReadCredit(credit); } bool AggregateOutput::hasOutput() { - for (TaskList::const_iterator i = tasks.begin(); i != tasks.end(); ++i) + for (TaskList::const_iterator i = tasks.begin(); i != tasks.end(); ++i) if ((*i)->hasOutput()) return true; return false; } @@ -41,7 +43,7 @@ bool AggregateOutput::doOutput() bool result = false; if (!tasks.empty()) { if (next >= tasks.size()) next = next % tasks.size(); - + size_t start = next; //loop until a task generated some output while (!result) { @@ -58,7 +60,7 @@ void AggregateOutput::addOutputTask(OutputTask* t) { tasks.push_back(t); } - + void AggregateOutput::removeOutputTask(OutputTask* t) { TaskList::iterator i = std::find(tasks.begin(), tasks.end(), t); diff --git a/qpid/cpp/src/qpid/sys/AggregateOutput.h b/qpid/cpp/src/qpid/sys/AggregateOutput.h index fcd0d4c2f7..b33113796c 100644 --- a/qpid/cpp/src/qpid/sys/AggregateOutput.h +++ b/qpid/cpp/src/qpid/sys/AggregateOutput.h @@ -7,9 +7,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -43,9 +43,10 @@ namespace sys { public: AggregateOutput(OutputControl& c) : next(0), control(c) {}; //this may be called on any thread + QPID_COMMON_EXTERN void abort(); QPID_COMMON_EXTERN void activateOutput(); QPID_COMMON_EXTERN void giveReadCredit(int32_t); - + //all the following will be called on the same thread QPID_COMMON_EXTERN bool doOutput(); QPID_COMMON_EXTERN bool hasOutput(); diff --git a/qpid/cpp/src/qpid/sys/AsynchIOHandler.cpp b/qpid/cpp/src/qpid/sys/AsynchIOHandler.cpp index 6b7e7b5145..9da4a68381 100644 --- a/qpid/cpp/src/qpid/sys/AsynchIOHandler.cpp +++ b/qpid/cpp/src/qpid/sys/AsynchIOHandler.cpp @@ -7,9 +7,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -26,6 +26,8 @@ #include "qpid/framing/ProtocolInitiation.h" #include "qpid/log/Statement.h" +#include <boost/bind.hpp> + namespace qpid { namespace sys { @@ -75,6 +77,10 @@ void AsynchIOHandler::write(const framing::ProtocolInitiation& data) aio->queueWrite(buff); } +void AsynchIOHandler::abort() { + aio->requestCallback(boost::bind(&AsynchIOHandler::eof, this, _1)); +} + void AsynchIOHandler::activateOutput() { aio->notifyPendingWrite(); } @@ -120,7 +126,7 @@ bool AsynchIOHandler::readbuff(AsynchIO& , AsynchIO::BufferBase* buff) { //send valid version header & close connection. write(framing::ProtocolInitiation(framing::highestProtocolVersion)); readError = true; - aio->queueWriteClose(); + aio->queueWriteClose(); } } catch (const std::exception& e) { QPID_LOG(error, e.what()); @@ -163,7 +169,7 @@ void AsynchIOHandler::eof(AsynchIO&) { } void AsynchIOHandler::closedSocket(AsynchIO&, const Socket& s) { - // If we closed with data still to send log a warning + // If we closed with data still to send log a warning if (!aio->writeQueueEmpty()) { QPID_LOG(warning, "CLOSING [" << identifier << "] unsent data (probably due to client disconnect)"); } @@ -198,7 +204,7 @@ void AsynchIOHandler::idle(AsynchIO&){ aio->queueWrite(buff); } if (codec->isClosed()) - aio->queueWriteClose(); + aio->queueWriteClose(); } catch (const std::exception& e) { QPID_LOG(error, e.what()); aio->queueWriteClose(); diff --git a/qpid/cpp/src/qpid/sys/AsynchIOHandler.h b/qpid/cpp/src/qpid/sys/AsynchIOHandler.h index 9f1d043b62..059b22a935 100644 --- a/qpid/cpp/src/qpid/sys/AsynchIOHandler.h +++ b/qpid/cpp/src/qpid/sys/AsynchIOHandler.h @@ -9,9 +9,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -60,7 +60,7 @@ class AsynchIOHandler : public OutputControl { QPID_COMMON_EXTERN void setClient() { isClient = true; } // Output side - QPID_COMMON_EXTERN void close(); + QPID_COMMON_EXTERN void abort(); QPID_COMMON_EXTERN void activateOutput(); QPID_COMMON_EXTERN void giveReadCredit(int32_t credit); @@ -68,7 +68,7 @@ class AsynchIOHandler : public OutputControl { QPID_COMMON_EXTERN bool readbuff(AsynchIO& aio, AsynchIOBufferBase* buff); QPID_COMMON_EXTERN void eof(AsynchIO& aio); QPID_COMMON_EXTERN void disconnect(AsynchIO& aio); - + // Notifications QPID_COMMON_EXTERN void nobuffs(AsynchIO& aio); QPID_COMMON_EXTERN void idle(AsynchIO& aio); diff --git a/qpid/cpp/src/qpid/sys/ConnectionOutputHandlerPtr.h b/qpid/cpp/src/qpid/sys/ConnectionOutputHandlerPtr.h index 32809d86a1..909631a8c4 100644 --- a/qpid/cpp/src/qpid/sys/ConnectionOutputHandlerPtr.h +++ b/qpid/cpp/src/qpid/sys/ConnectionOutputHandlerPtr.h @@ -10,9 +10,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -43,6 +43,7 @@ class ConnectionOutputHandlerPtr : public ConnectionOutputHandler void close() { next->close(); } size_t getBuffered() const { return next->getBuffered(); } + void abort() { next->abort(); } void activateOutput() { next->activateOutput(); } void giveReadCredit(int32_t credit) { next->giveReadCredit(credit); } void send(framing::AMQFrame& f) { next->send(f); } diff --git a/qpid/cpp/src/qpid/sys/OutputControl.h b/qpid/cpp/src/qpid/sys/OutputControl.h index e9e6c57a9b..d813428b67 100644 --- a/qpid/cpp/src/qpid/sys/OutputControl.h +++ b/qpid/cpp/src/qpid/sys/OutputControl.h @@ -7,9 +7,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -27,10 +27,11 @@ namespace qpid { namespace sys { - class OutputControl + class OutputControl { public: virtual ~OutputControl() {} + virtual void abort() = 0; virtual void activateOutput() = 0; virtual void giveReadCredit(int32_t credit) = 0; }; diff --git a/qpid/cpp/src/qpid/sys/RdmaIOPlugin.cpp b/qpid/cpp/src/qpid/sys/RdmaIOPlugin.cpp index 8afe8ba5ef..f931aeb5ea 100644 --- a/qpid/cpp/src/qpid/sys/RdmaIOPlugin.cpp +++ b/qpid/cpp/src/qpid/sys/RdmaIOPlugin.cpp @@ -7,9 +7,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -58,6 +58,7 @@ class RdmaIOHandler : public OutputControl { // Output side void close(); + void abort(); void activateOutput(); void giveReadCredit(int32_t credit); void initProtocolOut(); @@ -65,11 +66,11 @@ class RdmaIOHandler : public OutputControl { // Input side void readbuff(Rdma::AsynchIO& aio, Rdma::Buffer* buff); void initProtocolIn(Rdma::Buffer* buff); - + // Notifications void full(Rdma::AsynchIO& aio); void idle(Rdma::AsynchIO& aio); - void error(Rdma::AsynchIO& aio); + void error(Rdma::AsynchIO& aio); }; RdmaIOHandler::RdmaIOHandler(Rdma::Connection::intrusive_ptr& c, qpid::sys::ConnectionCodec::Factory* f) : @@ -89,7 +90,7 @@ RdmaIOHandler::~RdmaIOHandler() { if (codec) codec->closed(); delete codec; - + aio->deferDelete(); } @@ -107,6 +108,10 @@ void RdmaIOHandler::close() { aio->queueWriteClose(); } +// TODO: Dummy implementation, need to fill this in for heartbeat timeout to work +void RdmaIOHandler::abort() { +} + void RdmaIOHandler::activateOutput() { aio->notifyPendingWrite(); } @@ -145,7 +150,7 @@ void RdmaIOHandler::full(Rdma::AsynchIO&) { QPID_LOG(debug, "Rdma: buffer full [" << identifier << "]"); } -// TODO: Dummy implementation of read throttling +// TODO: Dummy implementation of read throttling void RdmaIOHandler::giveReadCredit(int32_t) { } @@ -162,7 +167,7 @@ void RdmaIOHandler::readbuff(Rdma::AsynchIO&, Rdma::Buffer* buff) { if (codec) { decoded = codec->decode(buff->bytes+buff->dataStart, buff->dataCount); }else{ - // Need to start protocol processing + // Need to start protocol processing initProtocolIn(buff); } }catch(const std::exception& e){ @@ -181,13 +186,13 @@ void RdmaIOHandler::initProtocolIn(Rdma::Buffer* buff) { QPID_LOG(debug, "Rdma: RECV [" << identifier << "] INIT(" << protocolInit << ")"); codec = factory->create(protocolInit.getVersion(), *this, identifier); - + // If we failed to create the codec then we don't understand the offered protocol version if (!codec) { // send valid version header & close connection. write(framing::ProtocolInitiation(framing::highestProtocolVersion)); readError = true; - aio->queueWriteClose(); + aio->queueWriteClose(); } } } @@ -217,7 +222,7 @@ class RdmaIOProtocolFactory : public ProtocolFactory { static class RdmaIOPlugin : public Plugin { void earlyInitialize(Target&) { } - + void initialize(Target& target) { // Check whether we actually have any rdma devices if ( Rdma::deviceCount() == 0 ) { @@ -257,7 +262,7 @@ bool RdmaIOProtocolFactory::request(Rdma::Connection::intrusive_ptr& ci, const R 0, // boost::bind(&RdmaIOHandler::full, async, _1), boost::bind(&RdmaIOHandler::error, async, _1)); async->init(aio); - + // Record aio so we can get it back from a connection ci->addContext(async); return true; @@ -300,7 +305,7 @@ void RdmaIOProtocolFactory::accept(Poller::shared_ptr poller, ConnectionCodec::F sin.sin_addr.s_addr = INADDR_ANY; listener.reset( - new Rdma::Listener((const sockaddr&)(sin), + new Rdma::Listener((const sockaddr&)(sin), Rdma::ConnectionParams(65536, Rdma::DEFAULT_WR_ENTRIES), boost::bind(&RdmaIOProtocolFactory::established, this, poller, _1), boost::bind(&RdmaIOProtocolFactory::connectionError, this, _1, _2), @@ -323,7 +328,7 @@ void RdmaIOProtocolFactory::connected(Poller::shared_ptr poller, Rdma::Connectio RdmaIOHandler* async = ci->getContext<RdmaIOHandler>(); async->initProtocolOut(); } - + void RdmaIOProtocolFactory::connect( Poller::shared_ptr poller, const std::string& host, int16_t p, diff --git a/qpid/cpp/src/qpid/sys/ssl/SslHandler.cpp b/qpid/cpp/src/qpid/sys/ssl/SslHandler.cpp index 3c7e2190e7..282c3ce8c8 100644 --- a/qpid/cpp/src/qpid/sys/ssl/SslHandler.cpp +++ b/qpid/cpp/src/qpid/sys/ssl/SslHandler.cpp @@ -7,9 +7,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -26,6 +26,8 @@ #include "qpid/framing/ProtocolInitiation.h" #include "qpid/log/Statement.h" +#include <boost/bind.hpp> + namespace qpid { namespace sys { namespace ssl { @@ -76,6 +78,10 @@ void SslHandler::write(const framing::ProtocolInitiation& data) aio->queueWrite(buff); } +void SslHandler::abort() { + // TODO: can't implement currently as underlying functionality not implemented + // aio->requestCallback(boost::bind(&SslHandler::eof, this, _1)); +} void SslHandler::activateOutput() { aio->notifyPendingWrite(); } @@ -111,7 +117,7 @@ void SslHandler::readbuff(SslIO& , SslIO::BufferBase* buff) { //send valid version header & close connection. write(framing::ProtocolInitiation(framing::highestProtocolVersion)); readError = true; - aio->queueWriteClose(); + aio->queueWriteClose(); } } catch (const std::exception& e) { QPID_LOG(error, e.what()); @@ -140,7 +146,7 @@ void SslHandler::eof(SslIO&) { } void SslHandler::closedSocket(SslIO&, const SslSocket& s) { - // If we closed with data still to send log a warning + // If we closed with data still to send log a warning if (!aio->writeQueueEmpty()) { QPID_LOG(warning, "CLOSING [" << identifier << "] unsent data (probably due to client disconnect)"); } diff --git a/qpid/cpp/src/qpid/sys/ssl/SslHandler.h b/qpid/cpp/src/qpid/sys/ssl/SslHandler.h index ae654d7ad2..8f6b8e732a 100644 --- a/qpid/cpp/src/qpid/sys/ssl/SslHandler.h +++ b/qpid/cpp/src/qpid/sys/ssl/SslHandler.h @@ -10,9 +10,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -56,7 +56,7 @@ class SslHandler : public OutputControl { void setClient() { isClient = true; } // Output side - void close(); + void abort(); void activateOutput(); void giveReadCredit(int32_t); @@ -64,7 +64,7 @@ class SslHandler : public OutputControl { void readbuff(SslIO& aio, SslIOBufferBase* buff); void eof(SslIO& aio); void disconnect(SslIO& aio); - + // Notifications void nobuffs(SslIO& aio); void idle(SslIO& aio); |