summaryrefslogtreecommitdiff
path: root/cpp/src/Ice/ConnectionI.h
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/Ice/ConnectionI.h')
-rw-r--r--cpp/src/Ice/ConnectionI.h30
1 files changed, 30 insertions, 0 deletions
diff --git a/cpp/src/Ice/ConnectionI.h b/cpp/src/Ice/ConnectionI.h
index e58bc7b0eb6..8ffe6d9d913 100644
--- a/cpp/src/Ice/ConnectionI.h
+++ b/cpp/src/Ice/ConnectionI.h
@@ -13,6 +13,7 @@
#include <IceUtil/Mutex.h>
#include <IceUtil/Monitor.h>
#include <IceUtil/Time.h>
+#include <IceUtil/StopWatch.h>
#include <IceUtil/Timer.h>
#include <Ice/CommunicatorF.h>
@@ -30,6 +31,7 @@
#include <Ice/OutgoingAsyncF.h>
#include <Ice/EventHandler.h>
#include <Ice/Dispatcher.h>
+#include <Ice/ObserverHelper.h>
#include <Ice/ConnectionAsync.h>
#include <deque>
@@ -64,6 +66,23 @@ class LocalException;
class ICE_API ConnectionI : public Connection, public IceInternal::EventHandler, public IceUtil::Monitor<IceUtil::Mutex>
{
+ class Observer : public IceInternal::ObserverHelperT<Ice::Instrumentation::ConnectionObserver>
+ {
+ public:
+
+ Observer();
+
+ void startRead(Ice::Byte*);
+ void finishRead(Ice::Byte*);
+ void startWrite(Ice::Byte*);
+ void finishWrite(Ice::Byte*);
+
+ private:
+
+ Ice::Byte* _readStreamPos;
+ Ice::Byte* _writeStreamPos;
+ };
+
public:
class StartCallback : virtual public IceUtil::Shared
@@ -95,6 +114,8 @@ public:
void waitUntilHolding() const;
void waitUntilFinished(); // Not const, as this might close the connection upon timeout.
+ void updateObserver();
+
void monitor(const IceUtil::Time&);
bool sendRequest(IceInternal::Outgoing*, bool, bool);
@@ -164,6 +185,8 @@ public:
private:
+ friend class IceInternal::ConnectionReaper;
+
enum State
{
StateNotInitialized,
@@ -277,6 +300,9 @@ private:
int connectTimeout();
int closeTimeout();
+ Ice::ConnectionInfoPtr initConnectionInfo() const;
+ Ice::Instrumentation::ConnectionState toConnectionState(State) const;
+
AsyncResultPtr __begin_flushBatchRequests(const IceInternal::CallbackBasePtr&, const LocalObjectPtr&);
Ice::CommunicatorPtr _communicator;
@@ -288,6 +314,8 @@ private:
const IceInternal::ConnectorPtr _connector;
const IceInternal::EndpointIPtr _endpoint;
+ mutable Ice::ConnectionInfoPtr _info;
+
ObjectAdapterPtr _adapter;
IceInternal::ServantManagerPtr _servantManager;
@@ -334,6 +362,8 @@ private:
bool _readHeader;
IceInternal::BasicStream _writeStream;
+ Observer _observer;
+
int _dispatchCount;
State _state; // The current state.