diff options
Diffstat (limited to 'demos/easy_tls/test.c')
-rw-r--r-- | demos/easy_tls/test.c | 247 |
1 files changed, 0 insertions, 247 deletions
diff --git a/demos/easy_tls/test.c b/demos/easy_tls/test.c deleted file mode 100644 index 713da09063..0000000000 --- a/demos/easy_tls/test.c +++ /dev/null @@ -1,247 +0,0 @@ -/* $Id: test.c,v 1.1 2001/09/17 19:06:59 bodo Exp $ */ - -#define L_PORT 9999 -#define C_PORT 443 - -#include <arpa/inet.h> -#include <assert.h> -#include <errno.h> -#include <fcntl.h> -#include <netinet/in.h> -#include <netinet/tcp.h> -#include <stdlib.h> -#include <stdio.h> -#include <string.h> -#include <sys/select.h> -#include <sys/socket.h> -#include <unistd.h> - -#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; -} |