X-Git-Url: https://git.openssl.org/?p=openssl.git;a=blobdiff_plain;f=demos%2Fbio%2Fsaccept.c;h=8d02610cbf08b68db36cb8aff26aeb675f310681;hp=920eab397ca3110508899951505bda841f337069;hb=10621efd3296a92f489f6ab26a88e88d9790930e;hpb=78414a6a897db42c9bcf06aa21c705811ab33921 diff --git a/demos/bio/saccept.c b/demos/bio/saccept.c index 920eab397c..8d02610cbf 100644 --- a/demos/bio/saccept.c +++ b/demos/bio/saccept.c @@ -1,7 +1,8 @@ /* NOCW */ /* demos/bio/saccept.c */ -/* A minimal program to server an SSL connection. +/*- + * A minimal program to server an SSL connection. * It uses blocking. * saccept host:port * host is the interface IP to use. If any interface, use *:port @@ -12,96 +13,105 @@ #include #include -#include "err.h" -#include "ssl.h" +#include +#include -#define CERT_FILE "server.pem" +#define CERT_FILE "server.pem" -BIO *in=NULL; +BIO *in = NULL; void close_up() - { - if (in != NULL) - BIO_free(in); - } +{ + if (in != NULL) + BIO_free(in); +} -int main(argc,argv) +int main(argc, argv) int argc; char *argv[]; - { - char *port=NULL; - BIO *ssl_bio,*tmp; - SSL_CTX *ctx; - SSL *ssl; - char buf[512]; - int ret=1,i; - - if (argc <= 1) - port="*:4433"; - else - port=argv[1]; - - signal(SIGINT,close_up); - - SSL_load_error_strings(); - - /* Add ciphers and message digests */ - SSLeay_add_ssl_algorithms(); - - ctx=SSL_CTX_new(SSLv23_server_method()); - if (!SSL_CTX_use_certificate_file(ctx,CERT_FILE,SSL_FILETYPE_PEM)) - goto err; - if (!SSL_CTX_use_PrivateKey_file(ctx,CERT_FILE,SSL_FILETYPE_PEM)) - goto err; - if (!SSL_CTX_check_private_key(ctx)) - goto err; - - /* Setup server side SSL bio */ - ssl=SSL_new(ctx); - ssl_bio=BIO_new_ssl(ctx,0); - - if ((in=BIO_new_accept(port)) == NULL) goto err; - - /* This means that when a new connection is acceptede on 'in', - * The ssl_bio will be 'dupilcated' and have the new socket - * BIO push into it. Basically it means the SSL BIO will be - * automatically setup */ - BIO_set_accept_bios(in,ssl_bio); - -again: - /* The first call will setup the accept socket, and the second - * will get a socket. In this loop, the first actual accept - * will occur in the BIO_read() function. */ - - if (BIO_do_accept(in) <= 0) goto err; - - for (;;) - { - i=BIO_read(in,buf,512); - if (i == 0) - { - /* If we have finished, remove the underlying - * BIO stack so the next time we call any function - * for this BIO, it will attempt to do an - * accept */ - printf("Done\n"); - tmp=BIO_pop(in); - BIO_free_all(tmp); - goto again; - } - if (i < 0) goto err; - fwrite(buf,1,i,stdout); - fflush(stdout); - } - - ret=0; -err: - if (ret) - { - ERR_print_errors_fp(stderr); - } - if (in != NULL) BIO_free(in); - exit(ret); - return(!ret); - } - +{ + char *port = NULL; + BIO *ssl_bio, *tmp; + SSL_CTX *ctx; + SSL *ssl; + char buf[512]; + int ret = 1, i; + + if (argc <= 1) + port = "*:4433"; + else + port = argv[1]; + + signal(SIGINT, close_up); + + SSL_load_error_strings(); + +#ifdef WATT32 + dbug_init(); + sock_init(); +#endif + + /* Add ciphers and message digests */ + OpenSSL_add_ssl_algorithms(); + + ctx = SSL_CTX_new(SSLv23_server_method()); + if (!SSL_CTX_use_certificate_file(ctx, CERT_FILE, SSL_FILETYPE_PEM)) + goto err; + if (!SSL_CTX_use_PrivateKey_file(ctx, CERT_FILE, SSL_FILETYPE_PEM)) + goto err; + if (!SSL_CTX_check_private_key(ctx)) + goto err; + + /* Setup server side SSL bio */ + ssl = SSL_new(ctx); + ssl_bio = BIO_new_ssl(ctx, 0); + + if ((in = BIO_new_accept(port)) == NULL) + goto err; + + /* + * This means that when a new connection is acceptede on 'in', The + * ssl_bio will be 'dupilcated' and have the new socket BIO push into it. + * Basically it means the SSL BIO will be automatically setup + */ + BIO_set_accept_bios(in, ssl_bio); + + again: + /* + * The first call will setup the accept socket, and the second will get a + * socket. In this loop, the first actual accept will occur in the + * BIO_read() function. + */ + + if (BIO_do_accept(in) <= 0) + goto err; + + for (;;) { + i = BIO_read(in, buf, 512); + if (i == 0) { + /* + * If we have finished, remove the underlying BIO stack so the + * next time we call any function for this BIO, it will attempt + * to do an accept + */ + printf("Done\n"); + tmp = BIO_pop(in); + BIO_free_all(tmp); + goto again; + } + if (i < 0) + goto err; + fwrite(buf, 1, i, stdout); + fflush(stdout); + } + + ret = 0; + err: + if (ret) { + ERR_print_errors_fp(stderr); + } + if (in != NULL) + BIO_free(in); + exit(ret); + return (!ret); +}