From 3562e78743202e43aec8727005182a2558117eca Mon Sep 17 00:00:00 2001 From: marha Date: Sun, 28 Jun 2009 22:07:26 +0000 Subject: Checked in the following released items: xkeyboard-config-1.4.tar.gz ttf-bitstream-vera-1.10.tar.gz font-alias-1.0.1.tar.gz font-sun-misc-1.0.0.tar.gz font-sun-misc-1.0.0.tar.gz font-sony-misc-1.0.0.tar.gz font-schumacher-misc-1.0.0.tar.gz font-mutt-misc-1.0.0.tar.gz font-misc-misc-1.0.0.tar.gz font-misc-meltho-1.0.0.tar.gz font-micro-misc-1.0.0.tar.gz font-jis-misc-1.0.0.tar.gz font-isas-misc-1.0.0.tar.gz font-dec-misc-1.0.0.tar.gz font-daewoo-misc-1.0.0.tar.gz font-cursor-misc-1.0.0.tar.gz font-arabic-misc-1.0.0.tar.gz font-winitzki-cyrillic-1.0.0.tar.gz font-misc-cyrillic-1.0.0.tar.gz font-cronyx-cyrillic-1.0.0.tar.gz font-screen-cyrillic-1.0.1.tar.gz font-xfree86-type1-1.0.1.tar.gz font-adobe-utopia-type1-1.0.1.tar.gz font-ibm-type1-1.0.0.tar.gz font-bitstream-type1-1.0.0.tar.gz font-bitstream-speedo-1.0.0.tar.gz font-bh-ttf-1.0.0.tar.gz font-bh-type1-1.0.0.tar.gz font-bitstream-100dpi-1.0.0.tar.gz font-bh-lucidatypewriter-100dpi-1.0.0.tar.gz font-bh-100dpi-1.0.0.tar.gz font-adobe-utopia-100dpi-1.0.1.tar.gz font-adobe-100dpi-1.0.0.tar.gz font-util-1.0.1.tar.gz font-bitstream-75dpi-1.0.0.tar.gz font-bh-lucidatypewriter-75dpi-1.0.0.tar.gz font-adobe-utopia-75dpi-1.0.1.tar.gz font-bh-75dpi-1.0.0.tar.gz bdftopcf-1.0.1.tar.gz font-adobe-75dpi-1.0.0.tar.gz mkfontscale-1.0.6.tar.gz openssl-0.9.8k.tar.gz bigreqsproto-1.0.2.tar.gz xtrans-1.2.2.tar.gz resourceproto-1.0.2.tar.gz inputproto-1.4.4.tar.gz compositeproto-0.4.tar.gz damageproto-1.1.0.tar.gz zlib-1.2.3.tar.gz xkbcomp-1.0.5.tar.gz freetype-2.3.9.tar.gz pthreads-w32-2-8-0-release.tar.gz pixman-0.12.0.tar.gz kbproto-1.0.3.tar.gz evieext-1.0.2.tar.gz fixesproto-4.0.tar.gz recordproto-1.13.2.tar.gz randrproto-1.2.2.tar.gz scrnsaverproto-1.1.0.tar.gz renderproto-0.9.3.tar.gz xcmiscproto-1.1.2.tar.gz fontsproto-2.0.2.tar.gz xextproto-7.0.3.tar.gz xproto-7.0.14.tar.gz libXdmcp-1.0.2.tar.gz libxkbfile-1.0.5.tar.gz libfontenc-1.0.4.tar.gz libXfont-1.3.4.tar.gz libX11-1.1.5.tar.gz libXau-1.0.4.tar.gz libxcb-1.1.tar.gz xorg-server-1.5.3.tar.gz --- openssl/demos/easy_tls/test.c | 244 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 244 insertions(+) create mode 100644 openssl/demos/easy_tls/test.c (limited to 'openssl/demos/easy_tls/test.c') diff --git a/openssl/demos/easy_tls/test.c b/openssl/demos/easy_tls/test.c new file mode 100644 index 000000000..21f679afd --- /dev/null +++ b/openssl/demos/easy_tls/test.c @@ -0,0 +1,244 @@ +/* test.c */ +/* $Id: test.c,v 1.1 2001/09/17 19:06:59 bodo Exp $ */ + +#define L_PORT 9999 +#define C_PORT 443 + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "test.h" +#include "easy-tls.h" + +void +test_process_init(int fd, int client_p, void *apparg) +{ + fprintf(stderr, "test_process_init(fd = %d, client_p = %d, apparg = %p)\n", fd, client_p, apparg); +} + +void +test_errflush(int child_p, char *errbuf, size_t num, void *apparg) +{ + fputs(errbuf, stderr); +} + + +int +main(int argc, char *argv[]) +{ + int s, fd, r; + FILE *conn_in; + FILE *conn_out; + char buf[256]; + SSL_CTX *ctx; + int client_p = 0; + int port; + int tls = 0; + char infobuf[TLS_INFO_SIZE + 1]; + + if (argc > 1 && argv[1][0] == '-') { + fputs("Usage: test [port] -- server\n" + " test num.num.num.num [port] -- client\n", + stderr); + exit(1); + } + + if (argc > 1) { + if (strchr(argv[1], '.')) { + client_p = 1; + } + } + + fputs(client_p ? "Client\n" : "Server\n", stderr); + + { + struct tls_create_ctx_args a = tls_create_ctx_defaultargs(); + a.client_p = client_p; + a.certificate_file = "cert.pem"; + a.key_file = "cert.pem"; + a.ca_file = "cacerts.pem"; + + ctx = tls_create_ctx(a, NULL); + if (ctx == NULL) + exit(1); + } + + s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); + if (s == -1) { + perror("socket"); + exit(1); + } + + if (client_p) { + struct sockaddr_in addr; + size_t addr_len = sizeof addr; + + addr.sin_family = AF_INET; + assert(argc > 1); + if (argc > 2) + sscanf(argv[2], "%d", &port); + else + port = C_PORT; + addr.sin_port = htons(port); + addr.sin_addr.s_addr = inet_addr(argv[1]); + + r = connect(s, &addr, addr_len); + if (r != 0) { + perror("connect"); + exit(1); + } + fd = s; + fprintf(stderr, "Connect (fd = %d).\n", fd); + } else { + /* server */ + { + int i = 1; + + r = setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (void *) &i, sizeof i); + if (r == -1) { + perror("setsockopt"); + exit(1); + } + } + + { + struct sockaddr_in addr; + size_t addr_len = sizeof addr; + + if (argc > 1) + sscanf(argv[1], "%d", &port); + else + port = L_PORT; + addr.sin_family = AF_INET; + addr.sin_port = htons(port); + addr.sin_addr.s_addr = INADDR_ANY; + + r = bind(s, &addr, addr_len); + if (r != 0) { + perror("bind"); + exit(1); + } + } + + r = listen(s, 1); + if (r == -1) { + perror("listen"); + exit(1); + } + + fprintf(stderr, "Listening at port %i.\n", port); + + fd = accept(s, NULL, 0); + if (fd == -1) { + perror("accept"); + exit(1); + } + + fprintf(stderr, "Accept (fd = %d).\n", fd); + } + + conn_in = fdopen(fd, "r"); + if (conn_in == NULL) { + perror("fdopen"); + exit(1); + } + conn_out = fdopen(fd, "w"); + if (conn_out == NULL) { + perror("fdopen"); + exit(1); + } + + setvbuf(conn_in, NULL, _IOLBF, 256); + setvbuf(conn_out, NULL, _IOLBF, 256); + + while (fgets(buf, sizeof buf, stdin) != NULL) { + if (buf[0] == 'W') { + fprintf(conn_out, "%.*s\r\n", (int)(strlen(buf + 1) - 1), buf + 1); + fprintf(stderr, ">>> %.*s\n", (int)(strlen(buf + 1) - 1), buf + 1); + } else if (buf[0] == 'C') { + fprintf(stderr, "Closing.\n"); + fclose(conn_in); + fclose(conn_out); + exit(0); + } else if (buf[0] == 'R') { + int lines = 0; + + sscanf(buf + 1, "%d", &lines); + do { + if (fgets(buf, sizeof buf, conn_in) == NULL) { + if (ferror(conn_in)) { + fprintf(stderr, "ERROR\n"); + exit(1); + } + fprintf(stderr, "CLOSED\n"); + return 0; + } + fprintf(stderr, "<<< %s", buf); + } while (--lines > 0); + } else if (buf[0] == 'T') { + int infofd; + + tls++; + { + struct tls_start_proxy_args a = tls_start_proxy_defaultargs(); + a.fd = fd; + a.client_p = client_p; + a.ctx = ctx; + a.infofd = &infofd; + r = tls_start_proxy(a, NULL); + } + assert(r != 1); + if (r != 0) { + fprintf(stderr, "tls_start_proxy failed: %d\n", r); + switch (r) { + case -1: + fputs("socketpair", stderr); break; + case 2: + fputs("FD_SETSIZE exceeded", stderr); break; + case -3: + fputs("pipe", stderr); break; + case -4: + fputs("fork", stderr); break; + case -5: + fputs("dup2", stderr); break; + default: + fputs("?", stderr); + } + if (r < 0) + perror(""); + else + fputc('\n', stderr); + exit(1); + } + + r = read(infofd, infobuf, sizeof infobuf - 1); + if (r > 0) { + const char *info = infobuf; + const char *eol; + + infobuf[r] = '\0'; + while ((eol = strchr(info, '\n')) != NULL) { + fprintf(stderr, "+++ `%.*s'\n", eol - info, info); + info = eol+1; + } + close (infofd); + } + } else { + fprintf(stderr, "W... write line to network\n" + "R[n] read line (n lines) from network\n" + "C close\n" + "T start %sTLS proxy\n", tls ? "another " : ""); + } + } + return 0; +} -- cgit v1.2.3