[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 3 of 6 V1] Implement session socket byte counter
[Thread Prev] | [Thread Next]
- Subject: [PATCH 3 of 6 V1] Implement session socket byte counter
- From: Audrius Butkevicius <audrius.butkevicius@xxxxxxxxxxxxxxxx>
- Reply-to: libssh@xxxxxxxxxx
- Date: Wed, 15 Jan 2014 16:43:03 +0000
- To: libssh@xxxxxxxxxx
- Cc: audrius.butkevicius@xxxxxxxxx
include/libssh/counters.h | 23 +++++++++++++++++++++++
include/libssh/session.h | 4 ++++
src/counters.c | 8 ++++++++
src/socket.c | 4 ++++
4 files changed, 39 insertions(+), 0 deletions(-)
# HG changeset patch
# User Audrius Butkevicius <audrius.butkevicius@xxxxxxxxxxxxxxxx>
# Date 1389803762 0
# Wed Jan 15 16:36:02 2014 +0000
# Node ID 754710d2feba31833ecdd111b0a9948549bcbb5a
# Parent c3b966140111f5829a791289b64e13795be1e162
Implement session socket byte counter
diff --git a/include/libssh/counters.h b/include/libssh/counters.h
--- a/include/libssh/counters.h
+++ b/include/libssh/counters.h
@@ -25,6 +25,7 @@
#ifndef _SSH_COUNTERS_H_
#define _SSH_COUNTERS_H_
+#include <libssh/libssh.h>
#include <stdint.h>
#ifdef __cplusplus
@@ -54,6 +55,28 @@
typedef struct ssh_packet_counter_struct *ssh_packet_counter;
+ /**
+ * @brief Set the session data counters.
+ *
+ * This functions sets the counter structures to be used to calculate data
+ * which come in and go out through the session at various points in time.
+ *
+ * @code
+ * struct ssh_byte_counter_struct scounter = {
+ * .in_bytes = 0,
+ * .out_bytes = 0
+ * };
+ *
+ * ssh_set_session_counters(session, &scounter);
+ * @endcode
+ *
+ * @param session The session to set the counter structures.
+ *
+ * @param scounter The byte counter structure for data passed to sockets.
+ */
+LIBSSH_API void ssh_set_session_counters(ssh_session session,
+ ssh_bytes_counter scounter);
+
/** @} */
#ifdef __cplusplus
diff --git a/include/libssh/session.h b/include/libssh/session.h
--- a/include/libssh/session.h
+++ b/include/libssh/session.h
@@ -27,6 +27,7 @@
#include "libssh/auth.h"
#include "libssh/channels.h"
#include "libssh/poll.h"
+#include "libssh/counters.h"
/* These are the different states a SSH session can be into its life */
enum ssh_session_state_e {
@@ -187,6 +188,9 @@
char *gss_client_identity;
int gss_delegate_creds;
} opts;
+
+ /* counters */
+ ssh_bytes_counter socket_byte_counter;
};
/** @internal
diff --git a/src/counters.c b/src/counters.c
--- a/src/counters.c
+++ b/src/counters.c
@@ -22,3 +22,11 @@
*/
#include "libssh/counters.h"
+#include "libssh/session.h"
+
+void ssh_set_session_counters(ssh_session session, ssh_bytes_counter scounter) {
+ if (session == NULL)
+ return;
+
+ session->socket_byte_counter = scounter;
+}
diff --git a/src/socket.c b/src/socket.c
--- a/src/socket.c
+++ b/src/socket.c
@@ -280,6 +280,8 @@
}
}
if(r>0){
+ if (s->session->socket_byte_counter)
+ s->session->socket_byte_counter->in_bytes += r;
/* Bufferize the data and then call the callback */
r = buffer_add_data(s->in_buffer,buffer,r);
if (r < 0) {
@@ -657,6 +659,8 @@
return SSH_ERROR;
}
buffer_pass_bytes(s->out_buffer, w);
+ if (s->session->socket_byte_counter)
+ s->session->socket_byte_counter->out_bytes += w;
}
/* Is there some data pending? */
| [PATCH 0 of 6 V1] Counters | Audrius Butkevicius <audrius.butkevicius@xxxxxxxxxxxxxxxx> |