itls: Refactor code - sacc - sacc(omys), simple console gopher client Err bitreich.org 70 hgit clone git://bitreich.org/sacc/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/sacc/ URL:git://bitreich.org/sacc/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/sacc/ bitreich.org 70 1Log /scm/sacc/log.gph bitreich.org 70 1Files /scm/sacc/files.gph bitreich.org 70 1Refs /scm/sacc/refs.gph bitreich.org 70 1Tags /scm/sacc/tag bitreich.org 70 1LICENSE /scm/sacc/file/LICENSE.gph bitreich.org 70 i--- Err bitreich.org 70 1commit 7d3b71e31c73e122b62fec68a7196586f1b93082 /scm/sacc/commit/7d3b71e31c73e122b62fec68a7196586f1b93082.gph bitreich.org 70 1parent b567fedfe014dc5c795b5bc8703bc187efd13e27 /scm/sacc/commit/b567fedfe014dc5c795b5bc8703bc187efd13e27.gph bitreich.org 70 hAuthor: Quentin Rameau URL:mailto:quinq@fifth.space bitreich.org 70 iDate: Mon, 12 Sep 2022 00:22:30 +0200 Err bitreich.org 70 i Err bitreich.org 70 itls: Refactor code Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M io_tls.c | 73 +++++++++++++++---------------- Err bitreich.org 70 i Err bitreich.org 70 i1 file changed, 35 insertions(+), 38 deletions(-) Err bitreich.org 70 i--- Err bitreich.org 70 1diff --git a/io_tls.c b/io_tls.c /scm/sacc/file/io_tls.c.gph bitreich.org 70 i@@ -17,12 +17,11 @@ close_tls(struct cnx *c) Err bitreich.org 70 i { Err bitreich.org 70 i int r; Err bitreich.org 70 i Err bitreich.org 70 i- if (tls) { Err bitreich.org 70 i- if (c->tls) { Err bitreich.org 70 i- do { Err bitreich.org 70 i- r = tls_close(c->tls); Err bitreich.org 70 i- } while (r == TLS_WANT_POLLIN || r == TLS_WANT_POLLOUT); Err bitreich.org 70 i- } Err bitreich.org 70 i+ if (tls && c->tls) { Err bitreich.org 70 i+ do { Err bitreich.org 70 i+ r = tls_close(c->tls); Err bitreich.org 70 i+ } while (r == TLS_WANT_POLLIN || r == TLS_WANT_POLLOUT); Err bitreich.org 70 i+ Err bitreich.org 70 i tls_free(c->tls); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i@@ -33,46 +32,44 @@ static int Err bitreich.org 70 i connect_tls(struct cnx *c, struct addrinfo *ai, const char *host) Err bitreich.org 70 i { Err bitreich.org 70 i struct tls *t; Err bitreich.org 70 i- char *r; Err bitreich.org 70 i- int s; Err bitreich.org 70 i+ char *s; Err bitreich.org 70 i+ int r; Err bitreich.org 70 i Err bitreich.org 70 i c->tls = NULL; Err bitreich.org 70 i- s = c->sock; Err bitreich.org 70 i Err bitreich.org 70 i- if (connect(s, ai->ai_addr, ai->ai_addrlen) == -1) Err bitreich.org 70 i+ if (connect(c->sock, ai->ai_addr, ai->ai_addrlen) == -1) Err bitreich.org 70 i return -1; Err bitreich.org 70 i Err bitreich.org 70 i- if (tls) { Err bitreich.org 70 i- if ((t = tls_client()) == NULL) Err bitreich.org 70 i- return -1; Err bitreich.org 70 i- if (tls_connect_socket(t, s, host) == 0) { Err bitreich.org 70 i- do { Err bitreich.org 70 i- s = tls_handshake(t); Err bitreich.org 70 i- } while (s == TLS_WANT_POLLIN || s == TLS_WANT_POLLOUT); Err bitreich.org 70 i- if (s == 0) { Err bitreich.org 70 i- c->tls = t; Err bitreich.org 70 i- } else { Err bitreich.org 70 i- diag("Can't establish TLS with \"%s\": %s", Err bitreich.org 70 i- host, tls_error(t)); Err bitreich.org 70 i- r = uiprompt("Retry on cleartext? [Yn]: "); Err bitreich.org 70 i- switch (*r) { Err bitreich.org 70 i- case 'Y': Err bitreich.org 70 i- case 'y': Err bitreich.org 70 i- case '\0': Err bitreich.org 70 i- tls = 0; Err bitreich.org 70 i- s = -2; Err bitreich.org 70 i- break; Err bitreich.org 70 i- default: Err bitreich.org 70 i- s = -3; Err bitreich.org 70 i- } Err bitreich.org 70 i- free(r); Err bitreich.org 70 i- } Err bitreich.org 70 i- } else { Err bitreich.org 70 i- s = -1; Err bitreich.org 70 i+ if (!tls) Err bitreich.org 70 i+ return 0; Err bitreich.org 70 i+ Err bitreich.org 70 i+ if ((t = tls_client()) == NULL) Err bitreich.org 70 i+ return -1; Err bitreich.org 70 i+ if (tls_connect_socket(t, c->sock, host) == -1) Err bitreich.org 70 i+ return -1; Err bitreich.org 70 i+ do { Err bitreich.org 70 i+ r = tls_handshake(t); Err bitreich.org 70 i+ } while (r == TLS_WANT_POLLIN || r == TLS_WANT_POLLOUT); Err bitreich.org 70 i+ if (r == 0) { Err bitreich.org 70 i+ c->tls = t; Err bitreich.org 70 i+ } else { Err bitreich.org 70 i+ diag("Can't establish TLS with \"%s\": %s", Err bitreich.org 70 i+ host, tls_error(t)); Err bitreich.org 70 i+ s = uiprompt("Retry on cleartext? [Yn]: "); Err bitreich.org 70 i+ switch (*s) { Err bitreich.org 70 i+ case 'Y': Err bitreich.org 70 i+ case 'y': Err bitreich.org 70 i+ case '\0': Err bitreich.org 70 i+ tls = 0; Err bitreich.org 70 i+ r = -2; Err bitreich.org 70 i+ break; Err bitreich.org 70 i+ default: Err bitreich.org 70 i+ r = -3; Err bitreich.org 70 i } Err bitreich.org 70 i+ free(s); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i- return s; Err bitreich.org 70 i+ return r; Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i static void Err bitreich.org 70 .