diff options
| author | Martin Willi <martin@revosec.ch> | 2012-10-08 11:49:12 +0200 |
|---|---|---|
| committer | Martin Willi <martin@revosec.ch> | 2012-10-24 11:34:30 +0200 |
| commit | fc4d1568d1d659cfafc4d6c7e5ea1845d5b35316 (patch) | |
| tree | 923d3aab9568715f25e15bffd6d630344c28441d /src/libcharon/plugins/stroke | |
| parent | 5715af75086e7e6a181c655df10186453c55d1c9 (diff) | |
| download | strongswan-fc4d1568d1d659cfafc4d6c7e5ea1845d5b35316.tar.bz2 strongswan-fc4d1568d1d659cfafc4d6c7e5ea1845d5b35316.tar.xz | |
Add stroke message type counters
Diffstat (limited to 'src/libcharon/plugins/stroke')
| -rw-r--r-- | src/libcharon/plugins/stroke/stroke_counter.c | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/src/libcharon/plugins/stroke/stroke_counter.c b/src/libcharon/plugins/stroke/stroke_counter.c index 67ed9882c..d12009870 100644 --- a/src/libcharon/plugins/stroke/stroke_counter.c +++ b/src/libcharon/plugins/stroke/stroke_counter.c @@ -125,6 +125,80 @@ METHOD(listener_t, child_rekey, bool, return TRUE; } +METHOD(listener_t, message_hook, bool, + private_stroke_counter_t *this, ike_sa_t *ike_sa, message_t *message, + bool incoming, bool plain) +{ + stroke_counter_type_t type; + bool request; + + if ((incoming && !plain) || (!incoming && !plain)) + { /* handle each message only once */ + return TRUE; + } + + request = message->get_request(message); + switch (message->get_exchange_type(message)) + { + case IKE_SA_INIT: + if (incoming) + { + type = request ? COUNTER_IN_IKE_SA_INIT_REQ + : COUNTER_IN_IKE_SA_INIT_RSP; + } + else + { + type = request ? COUNTER_OUT_IKE_SA_INIT_REQ + : COUNTER_OUT_IKE_SA_INIT_RES; + } + break; + case IKE_AUTH: + if (incoming) + { + type = request ? COUNTER_IN_IKE_AUTH_REQ + : COUNTER_IN_IKE_AUTH_RSP; + } + else + { + type = request ? COUNTER_OUT_IKE_AUTH_REQ + : COUNTER_OUT_IKE_AUTH_RSP; + } + break; + case CREATE_CHILD_SA: + if (incoming) + { + type = request ? COUNTER_IN_CREATE_CHILD_SA_REQ + : COUNTER_IN_CREATE_CHILD_SA_RSP; + } + else + { + type = request ? COUNTER_OUT_CREATE_CHILD_SA_REQ + : COUNTER_OUT_CREATE_CHILD_SA_RSP; + } + break; + case INFORMATIONAL: + if (incoming) + { + type = request ? COUNTER_IN_INFORMATIONAL_REQ + : COUNTER_IN_INFORMATIONAL_RSP; + } + else + { + type = request ? COUNTER_OUT_INFORMATIONAL_REQ + : COUNTER_OUT_INFORMATIONAL_RSP; + } + break; + default: + return TRUE; + } + + this->lock->lock(this->lock); + this->counter[type]++; + this->lock->unlock(this->lock); + + return TRUE; +} + METHOD(stroke_counter_t, destroy, void, private_stroke_counter_t *this) { @@ -145,6 +219,7 @@ stroke_counter_t *stroke_counter_create() .alert = _alert, .ike_rekey = _ike_rekey, .child_rekey = _child_rekey, + .message = _message_hook, }, .destroy = _destroy, }, |
