X-Git-Url: https://bearssl.org/gitweb//home/git/?p=BearSSL;a=blobdiff_plain;f=tools%2Fsslio.c;h=e2a6d56369fb33a04641065b5476f50ef4737027;hp=e784d07877b98f395edb4348cc6ec7dec02f8928;hb=05ac106834fa8889cf55ee462fe4108d4712040a;hpb=bab0f8639cb1e97c584e7751fd7d017e0e24da63 diff --git a/tools/sslio.c b/tools/sslio.c index e784d07..e2a6d56 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; } @@ -82,8 +90,11 @@ run_command(br_ssl_engine_context *cc, unsigned char *buf, size_t len) br_ssl_engine_close(cc); return 1; case 'R': - fprintf(stderr, "renegotiating...\n"); - br_ssl_engine_renegotiate(cc); + if (br_ssl_engine_renegotiate(cc)) { + fprintf(stderr, "renegotiating...\n"); + } else { + fprintf(stderr, "not renegotiating.\n"); + } return 1; case 'F': /* @@ -96,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; } @@ -180,6 +213,7 @@ run_ssl_engine(br_ssl_engine_context *cc, int fd, unsigned flags) recvapp = ((st & BR_SSL_RECVAPP) != 0); if (verbose && sendapp && !hsdetails) { char csn[80]; + const char *pname; fprintf(stderr, "Handshake completed\n"); fprintf(stderr, " version: "); @@ -207,6 +241,12 @@ run_ssl_engine(br_ssl_engine_context *cc, int fd, unsigned flags) fprintf(stderr, " cipher suite: %s\n", csn); fprintf(stderr, " secure renegotiation: %s\n", cc->reneg == 1 ? "no" : "yes"); + pname = br_ssl_engine_get_selected_protocol(cc); + if (pname != NULL) { + fprintf(stderr, + " protocol name (ALPN): %s\n", + pname); + } hsdetails = 1; }