X-Git-Url: https://www.bearssl.org/gitweb//home/git/?p=BearSSL;a=blobdiff_plain;f=tools%2Fsslio.c;h=7fb73eade56cb1b1b9ee55a5f4ed770265a9470e;hp=0c35aa430fce4e50e8ec1f08fb712ce71c21aacf;hb=ccd43452e6bb870f7cc5a15d93c5aaff985d95b1;hpb=d16eee962a72a600c370f18f2ae25b36b4f532df diff --git a/tools/sslio.c b/tools/sslio.c index 0c35aa4..7fb73ea 100644 --- a/tools/sslio.c +++ b/tools/sslio.c @@ -67,6 +67,14 @@ dump_blob(const char *name, const void *data, size_t len) static int run_command(br_ssl_engine_context *cc, unsigned char *buf, size_t len) { + /* + * A single static slot for saving session parameters. + */ + static br_ssl_session_parameters slot; + static int slot_used = 0; + + size_t u; + if (len < 2 || len > 3) { return 0; } @@ -99,6 +107,28 @@ run_command(br_ssl_engine_context *cc, unsigned char *buf, size_t len) fprintf(stderr, "forgetting session...\n"); br_ssl_client_forget_session((br_ssl_client_context *)cc); return 1; + case 'S': + fprintf(stderr, "saving session parameters...\n"); + br_ssl_engine_get_session_parameters(cc, &slot); + fprintf(stderr, " id = "); + for (u = 0; u < slot.session_id_len; u ++) { + fprintf(stderr, "%02X", slot.session_id[u]); + } + fprintf(stderr, "\n"); + slot_used = 1; + return 1; + case 'P': + if (slot_used) { + fprintf(stderr, "restoring session parameters...\n"); + fprintf(stderr, " id = "); + for (u = 0; u < slot.session_id_len; u ++) { + fprintf(stderr, "%02X", slot.session_id[u]); + } + fprintf(stderr, "\n"); + br_ssl_engine_set_session_parameters(cc, &slot); + return 1; + } + return 0; default: return 0; }