summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bin/bbstored/BackupStoreDaemon.cpp20
-rw-r--r--bin/bbstored/BackupStoreDaemon.h2
-rw-r--r--lib/server/SocketStream.cpp17
-rw-r--r--lib/server/SocketStream.h9
-rw-r--r--lib/server/SocketStreamTLS.cpp4
5 files changed, 48 insertions, 4 deletions
diff --git a/bin/bbstored/BackupStoreDaemon.cpp b/bin/bbstored/BackupStoreDaemon.cpp
index 0afdaa5d..2752893a 100644
--- a/bin/bbstored/BackupStoreDaemon.cpp
+++ b/bin/bbstored/BackupStoreDaemon.cpp
@@ -278,7 +278,25 @@ void BackupStoreDaemon::Connection(SocketStreamTLS &rStream)
BackupProtocolServer server(rStream);
server.SetLogToSysLog(mExtendedLogging);
server.SetTimeout(BACKUP_STORE_TIMEOUT);
- server.DoServer(context);
+ try
+ {
+ server.DoServer(context);
+ }
+ catch(...)
+ {
+ LogConnectionStats(clientCommonName.c_str(), rStream);
+ throw;
+ }
+ LogConnectionStats(clientCommonName.c_str(), rStream);
context.CleanUp();
}
+void BackupStoreDaemon::LogConnectionStats(const char *commonName,
+ const SocketStreamTLS &s)
+{
+ // Log the amount of data transferred
+ ::syslog(LOG_INFO, "Connection statistics for %s: "
+ "IN=%lld OUT=%lld TOTAL=%lld\n", commonName,
+ s.GetBytesRead(), s.GetBytesWritten(),
+ s.GetBytesRead() + s.GetBytesWritten());
+}
diff --git a/bin/bbstored/BackupStoreDaemon.h b/bin/bbstored/BackupStoreDaemon.h
index 6c4a45bc..2fbe486d 100644
--- a/bin/bbstored/BackupStoreDaemon.h
+++ b/bin/bbstored/BackupStoreDaemon.h
@@ -61,6 +61,8 @@ protected:
void HousekeepingProcess();
bool CheckForInterProcessMsg(int AccountNum = 0, int MaximumWaitTime = 0);
+ void LogConnectionStats(const char *commonName, const SocketStreamTLS &s);
+
private:
BackupStoreAccountDatabase *mpAccountDatabase;
BackupStoreAccounts *mpAccounts;
diff --git a/lib/server/SocketStream.cpp b/lib/server/SocketStream.cpp
index 2c704b8b..aa3825bf 100644
--- a/lib/server/SocketStream.cpp
+++ b/lib/server/SocketStream.cpp
@@ -38,7 +38,9 @@
SocketStream::SocketStream()
: mSocketHandle(-1),
mReadClosed(false),
- mWriteClosed(false)
+ mWriteClosed(false),
+ mBytesRead(0),
+ mBytesWritten(0)
{
}
@@ -53,7 +55,9 @@ SocketStream::SocketStream()
SocketStream::SocketStream(int socket)
: mSocketHandle(socket),
mReadClosed(false),
- mWriteClosed(false)
+ mWriteClosed(false),
+ mBytesRead(0),
+ mBytesWritten(0)
{
if(socket < 0)
{
@@ -72,7 +76,9 @@ SocketStream::SocketStream(int socket)
SocketStream::SocketStream(const SocketStream &rToCopy)
: mSocketHandle(::dup(rToCopy.mSocketHandle)),
mReadClosed(rToCopy.mReadClosed),
- mWriteClosed(rToCopy.mWriteClosed)
+ mWriteClosed(rToCopy.mWriteClosed),
+ mBytesRead(rToCopy.mBytesRead),
+ mBytesWritten(rToCopy.mBytesWritten)
{
if(rToCopy.mSocketHandle < 0)
@@ -114,6 +120,7 @@ void SocketStream::Attach(int socket)
if(mSocketHandle != -1) {THROW_EXCEPTION(ServerException, SocketAlreadyOpen)}
mSocketHandle = socket;
+ ResetCounters();
}
@@ -154,6 +161,7 @@ void SocketStream::Open(int Type, const char *Name, int Port)
mSocketHandle = -1;
THROW_EXCEPTION(ConnectionException, Conn_SocketConnectError)
}
+ ResetCounters();
}
// --------------------------------------------------------------------------
@@ -225,6 +233,7 @@ int SocketStream::Read(void *pBuffer, int NBytes, int Timeout)
mReadClosed = true;
}
+ mBytesRead += r;
return r;
}
@@ -266,6 +275,8 @@ void SocketStream::Write(const void *pBuffer, int NBytes)
bytesLeft -= sent;
// Move buffer pointer
buffer += sent;
+
+ mBytesWritten += sent;
// Need to wait until it can send again?
if(bytesLeft > 0)
diff --git a/lib/server/SocketStream.h b/lib/server/SocketStream.h
index 5caaacfd..7f1cb741 100644
--- a/lib/server/SocketStream.h
+++ b/lib/server/SocketStream.h
@@ -56,6 +56,15 @@ private:
tOSSocketHandle mSocketHandle;
bool mReadClosed;
bool mWriteClosed;
+
+protected:
+ off_t mBytesRead;
+ off_t mBytesWritten;
+
+public:
+ off_t GetBytesRead() const {return mBytesRead;}
+ off_t GetBytesWritten() const {return mBytesWritten;}
+ void ResetCounters() {mBytesRead = mBytesWritten = 0;}
};
#endif // SOCKETSTREAM__H
diff --git a/lib/server/SocketStreamTLS.cpp b/lib/server/SocketStreamTLS.cpp
index 39e0ea6c..94aa3868 100644
--- a/lib/server/SocketStreamTLS.cpp
+++ b/lib/server/SocketStreamTLS.cpp
@@ -40,6 +40,7 @@
SocketStreamTLS::SocketStreamTLS()
: mpSSL(0), mpBIO(0)
{
+ ResetCounters();
}
// --------------------------------------------------------------------------
@@ -101,6 +102,7 @@ void SocketStreamTLS::Open(const TLSContext &rContext, int Type, const char *Nam
{
SocketStream::Open(Type, Name, Port);
Handshake(rContext);
+ ResetCounters();
}
@@ -295,6 +297,7 @@ int SocketStreamTLS::Read(void *pBuffer, int NBytes, int Timeout)
{
case SSL_ERROR_NONE:
// No error, return number of bytes read
+ mBytesRead += r;
return r;
break;
@@ -358,6 +361,7 @@ void SocketStreamTLS::Write(const void *pBuffer, int NBytes)
{
case SSL_ERROR_NONE:
// No error, data sent, return success
+ mBytesWritten += r;
return;
break;