From bcc60920ca4881b4e7c3eb42c55c72cca61562b5 Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Tue, 9 Sep 2014 19:35:06 +0200 Subject: Add current method of connections to status output --- src/fastd.h | 4 ++++ src/protocols/ec25519_fhmqvc/ec25519_fhmqvc.c | 13 +++++++++++++ src/status.c | 15 +++++++++++++-- 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/src/fastd.h b/src/fastd.h index 5aff8e2..26fd371 100644 --- a/src/fastd.h +++ b/src/fastd.h @@ -109,6 +109,10 @@ struct fastd_protocol { fastd_peer_t * (*find_peer)(const fastd_protocol_key_t *key); + /** Retrieves information about the currently used encyption/authentication method of a connection with a peer */ + const fastd_method_info_t * (*get_current_method)(const fastd_peer_t *peer); + + /** Generates a new keypair and outputs it */ void (*generate_key)(void); diff --git a/src/protocols/ec25519_fhmqvc/ec25519_fhmqvc.c b/src/protocols/ec25519_fhmqvc/ec25519_fhmqvc.c index 8533c2b..60947b3 100644 --- a/src/protocols/ec25519_fhmqvc/ec25519_fhmqvc.c +++ b/src/protocols/ec25519_fhmqvc/ec25519_fhmqvc.c @@ -200,6 +200,17 @@ void fastd_protocol_ec25519_fhmqvc_send_empty(fastd_peer_t *peer, protocol_sessi session_send(peer, fastd_buffer_alloc(0, alignto(session->method->provider->min_encrypt_head_space, 8), session->method->provider->min_encrypt_tail_space), session); } +/** get_current_method implementation for ec25519-fhmqvp */ +const fastd_method_info_t * protocol_get_current_method(const fastd_peer_t *peer) { + if (!peer->protocol_state || !fastd_peer_is_established(peer)) + return NULL; + + if (peer->protocol_state->session.method->provider->session_is_initiator(peer->protocol_state->session.method_state) && is_session_valid(&peer->protocol_state->old_session)) + return peer->protocol_state->old_session.method; + else + return peer->protocol_state->session.method; +} + /** The \em ec25519-fhmqvc protocol definition */ const fastd_protocol_t fastd_protocol_ec25519_fhmqvc = { @@ -224,6 +235,8 @@ const fastd_protocol_t fastd_protocol_ec25519_fhmqvc = { .check_peer = protocol_check_peer, .find_peer = fastd_protocol_ec25519_fhmqvc_find_peer, + .get_current_method = protocol_get_current_method, + .generate_key = fastd_protocol_ec25519_fhmqvc_generate_key, .show_key = fastd_protocol_ec25519_fhmqvc_show_key, diff --git a/src/status.c b/src/status.c index 4b4131d..8049f59 100644 --- a/src/status.c +++ b/src/status.c @@ -30,14 +30,16 @@ */ -#include "peer.h" +#include "types.h" #ifdef WITH_STATUS_SOCKET -#include +#include "method.h" +#include "peer.h" #include +#include /** Argument for dump_thread */ @@ -98,6 +100,15 @@ static json_object * dump_peer(const fastd_peer_t *peer) { if (fastd_peer_is_established(peer)) { connection = json_object_new_object(); + struct json_object *method = NULL; + + const fastd_method_info_t *method_info = conf.protocol->get_current_method(peer); + + if (method_info) + method = json_object_new_string(method_info->name); + + json_object_object_add(connection, "method", method); + if (conf.mode == MODE_TAP) { struct json_object *mac_addresses = json_object_new_array(); json_object_object_add(connection, "mac_addresses", mac_addresses); -- cgit v1.2.3