diff options
Diffstat (limited to 'src/libcharon/plugins/stroke/stroke_counter.c')
-rw-r--r-- | src/libcharon/plugins/stroke/stroke_counter.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/src/libcharon/plugins/stroke/stroke_counter.c b/src/libcharon/plugins/stroke/stroke_counter.c index d12009870..6e30a9f02 100644 --- a/src/libcharon/plugins/stroke/stroke_counter.c +++ b/src/libcharon/plugins/stroke/stroke_counter.c @@ -199,6 +199,27 @@ METHOD(listener_t, message_hook, bool, return TRUE; } +METHOD(stroke_counter_t, print, void, + private_stroke_counter_t *this, FILE *out) +{ + u_int64_t counter[COUNTER_MAX]; + int i; + + /* Take a snapshot to have congruent results, */ + this->lock->lock(this->lock); + for (i = 0; i < countof(this->counter); i++) + { + counter[i] = this->counter[i]; + } + this->lock->unlock(this->lock); + + /* but do blocking write without the lock. */ + for (i = 0; i < countof(this->counter); i++) + { + fprintf(out, "%-18N %12llu\n", stroke_counter_type_names, i, counter[i]); + } +} + METHOD(stroke_counter_t, destroy, void, private_stroke_counter_t *this) { @@ -221,6 +242,7 @@ stroke_counter_t *stroke_counter_create() .child_rekey = _child_rekey, .message = _message_hook, }, + .print = _print, .destroy = _destroy, }, .lock = spinlock_create(), |