diff options
Diffstat (limited to 'openssl/apps/s_time.c')
-rw-r--r-- | openssl/apps/s_time.c | 804 |
1 files changed, 404 insertions, 400 deletions
diff --git a/openssl/apps/s_time.c b/openssl/apps/s_time.c index b823c33c5..5846f3ae1 100644 --- a/openssl/apps/s_time.c +++ b/openssl/apps/s_time.c @@ -5,21 +5,21 @@ * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. - * + * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * + * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. - * + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: @@ -34,10 +34,10 @@ * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from + * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * + * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -49,7 +49,7 @@ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. - * + * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence @@ -58,7 +58,7 @@ #define NO_SHUTDOWN -/*----------------------------------------- +/* ---------------------------------------- s_time - SSL client connection timer program Written and donated by Larry Streepy <streepy@healthcare.com> -----------------------------------------*/ @@ -70,7 +70,7 @@ #define USE_SOCKETS #include "apps.h" #ifdef OPENSSL_NO_STDIO -#define APPS_WIN16 +# define APPS_WIN16 #endif #include <openssl/x509.h> #include <openssl/ssl.h> @@ -78,11 +78,11 @@ #include "s_apps.h" #include <openssl/err.h> #ifdef WIN32_STUFF -#include "winmain.h" -#include "wintext.h" +# include "winmain.h" +# include "wintext.h" #endif #if !defined(OPENSSL_SYS_MSDOS) -#include OPENSSL_UNISTD +# include OPENSSL_UNISTD #endif #undef PROG @@ -91,9 +91,12 @@ #undef ioctl #define ioctl ioctlsocket -#define SSL_CONNECT_NAME "localhost:4433" +#define SSL_CONNECT_NAME "localhost:4433" -/*#define TEST_CERT "client.pem" */ /* no default cert. */ +/* no default cert. */ +/* + * #define TEST_CERT "client.pem" + */ #undef BUFSIZZ #define BUFSIZZ 1024*10 @@ -106,13 +109,13 @@ #define max(a,b) (((a) > (b)) ? (a) : (b)) #undef SECONDS -#define SECONDS 30 +#define SECONDS 30 extern int verify_depth; extern int verify_error; static void s_time_usage(void); -static int parseArgs( int argc, char **argv ); -static SSL *doConnection( SSL *scon ); +static int parseArgs(int argc, char **argv); +static SSL *doConnection(SSL *scon); static void s_time_init(void); /*********************************************************************** @@ -120,58 +123,58 @@ static void s_time_init(void); */ /* static char *port=PORT_STR;*/ -static char *host=SSL_CONNECT_NAME; -static char *t_cert_file=NULL; -static char *t_key_file=NULL; -static char *CApath=NULL; -static char *CAfile=NULL; -static char *tm_cipher=NULL; +static char *host = SSL_CONNECT_NAME; +static char *t_cert_file = NULL; +static char *t_key_file = NULL; +static char *CApath = NULL; +static char *CAfile = NULL; +static char *tm_cipher = NULL; static int tm_verify = SSL_VERIFY_NONE; static int maxTime = SECONDS; -static SSL_CTX *tm_ctx=NULL; -static const SSL_METHOD *s_time_meth=NULL; -static char *s_www_path=NULL; -static long bytes_read=0; -static int st_bugs=0; -static int perform=0; +static SSL_CTX *tm_ctx = NULL; +static const SSL_METHOD *s_time_meth = NULL; +static char *s_www_path = NULL; +static long bytes_read = 0; +static int st_bugs = 0; +static int perform = 0; #ifdef FIONBIO -static int t_nbio=0; +static int t_nbio = 0; #endif #ifdef OPENSSL_SYS_WIN32 -static int exitNow = 0; /* Set when it's time to exit main */ +static int exitNow = 0; /* Set when it's time to exit main */ #endif static void s_time_init(void) - { - host=SSL_CONNECT_NAME; - t_cert_file=NULL; - t_key_file=NULL; - CApath=NULL; - CAfile=NULL; - tm_cipher=NULL; - tm_verify = SSL_VERIFY_NONE; - maxTime = SECONDS; - tm_ctx=NULL; - s_time_meth=NULL; - s_www_path=NULL; - bytes_read=0; - st_bugs=0; - perform=0; +{ + host = SSL_CONNECT_NAME; + t_cert_file = NULL; + t_key_file = NULL; + CApath = NULL; + CAfile = NULL; + tm_cipher = NULL; + tm_verify = SSL_VERIFY_NONE; + maxTime = SECONDS; + tm_ctx = NULL; + s_time_meth = NULL; + s_www_path = NULL; + bytes_read = 0; + st_bugs = 0; + perform = 0; #ifdef FIONBIO - t_nbio=0; + t_nbio = 0; #endif #ifdef OPENSSL_SYS_WIN32 - exitNow = 0; /* Set when it's time to exit main */ + exitNow = 0; /* Set when it's time to exit main */ #endif - } +} /*********************************************************************** * usage - display usage message */ static void s_time_usage(void) { - static char umsg[] = "\ + static char umsg[] = "\ -time arg - max number of seconds to collect data, default %d\n\ -verify arg - turn on peer certificate verification, arg == depth\n\ -cert arg - certificate file to use, PEM format assumed\n\ @@ -181,19 +184,20 @@ static void s_time_usage(void) -CAfile arg - PEM format file of CA's\n\ -cipher - preferred cipher to use, play with 'openssl ciphers'\n\n"; - printf( "usage: s_time <args>\n\n" ); + printf("usage: s_time <args>\n\n"); - printf("-connect host:port - host:port to connect to (default is %s)\n",SSL_CONNECT_NAME); + printf("-connect host:port - host:port to connect to (default is %s)\n", + SSL_CONNECT_NAME); #ifdef FIONBIO - printf("-nbio - Run with non-blocking IO\n"); - printf("-ssl2 - Just use SSLv2\n"); - printf("-ssl3 - Just use SSLv3\n"); - printf("-bugs - Turn on SSL bug compatibility\n"); - printf("-new - Just time new connections\n"); - printf("-reuse - Just time connection reuse\n"); - printf("-www page - Retrieve 'page' from the site\n"); + printf("-nbio - Run with non-blocking IO\n"); + printf("-ssl2 - Just use SSLv2\n"); + printf("-ssl3 - Just use SSLv3\n"); + printf("-bugs - Turn on SSL bug compatibility\n"); + printf("-new - Just time new connections\n"); + printf("-reuse - Just time connection reuse\n"); + printf("-www page - Retrieve 'page' from the site\n"); #endif - printf( umsg,SECONDS ); + printf(umsg, SECONDS); } /*********************************************************************** @@ -205,428 +209,428 @@ static int parseArgs(int argc, char **argv) { int badop = 0; - verify_depth=0; - verify_error=X509_V_OK; + verify_depth = 0; + verify_error = X509_V_OK; argc--; argv++; while (argc >= 1) { - if (strcmp(*argv,"-connect") == 0) - { - if (--argc < 1) goto bad; - host= *(++argv); - } + if (strcmp(*argv, "-connect") == 0) { + if (--argc < 1) + goto bad; + host = *(++argv); + } #if 0 - else if( strcmp(*argv,"-host") == 0) - { - if (--argc < 1) goto bad; - host= *(++argv); - } - else if( strcmp(*argv,"-port") == 0) - { - if (--argc < 1) goto bad; - port= *(++argv); - } + else if (strcmp(*argv, "-host") == 0) { + if (--argc < 1) + goto bad; + host = *(++argv); + } else if (strcmp(*argv, "-port") == 0) { + if (--argc < 1) + goto bad; + port = *(++argv); + } #endif - else if (strcmp(*argv,"-reuse") == 0) - perform=2; - else if (strcmp(*argv,"-new") == 0) - perform=1; - else if( strcmp(*argv,"-verify") == 0) { + else if (strcmp(*argv, "-reuse") == 0) + perform = 2; + else if (strcmp(*argv, "-new") == 0) + perform = 1; + else if (strcmp(*argv, "-verify") == 0) { - tm_verify=SSL_VERIFY_PEER|SSL_VERIFY_CLIENT_ONCE; - if (--argc < 1) goto bad; - verify_depth=atoi(*(++argv)); - BIO_printf(bio_err,"verify depth is %d\n",verify_depth); + tm_verify = SSL_VERIFY_PEER | SSL_VERIFY_CLIENT_ONCE; + if (--argc < 1) + goto bad; + verify_depth = atoi(*(++argv)); + BIO_printf(bio_err, "verify depth is %d\n", verify_depth); - } else if( strcmp(*argv,"-cert") == 0) { + } else if (strcmp(*argv, "-cert") == 0) { - if (--argc < 1) goto bad; - t_cert_file= *(++argv); + if (--argc < 1) + goto bad; + t_cert_file = *(++argv); - } else if( strcmp(*argv,"-key") == 0) { + } else if (strcmp(*argv, "-key") == 0) { - if (--argc < 1) goto bad; - t_key_file= *(++argv); + if (--argc < 1) + goto bad; + t_key_file = *(++argv); - } else if( strcmp(*argv,"-CApath") == 0) { + } else if (strcmp(*argv, "-CApath") == 0) { - if (--argc < 1) goto bad; - CApath= *(++argv); + if (--argc < 1) + goto bad; + CApath = *(++argv); - } else if( strcmp(*argv,"-CAfile") == 0) { + } else if (strcmp(*argv, "-CAfile") == 0) { - if (--argc < 1) goto bad; - CAfile= *(++argv); + if (--argc < 1) + goto bad; + CAfile = *(++argv); - } else if( strcmp(*argv,"-cipher") == 0) { + } else if (strcmp(*argv, "-cipher") == 0) { - if (--argc < 1) goto bad; - tm_cipher= *(++argv); - } + if (--argc < 1) + goto bad; + tm_cipher = *(++argv); + } #ifdef FIONBIO - else if(strcmp(*argv,"-nbio") == 0) { - t_nbio=1; - } + else if (strcmp(*argv, "-nbio") == 0) { + t_nbio = 1; + } #endif - else if(strcmp(*argv,"-www") == 0) - { - if (--argc < 1) goto bad; - s_www_path= *(++argv); - if(strlen(s_www_path) > MYBUFSIZ-100) - { - BIO_printf(bio_err,"-www option too long\n"); - badop=1; - } - } - else if(strcmp(*argv,"-bugs") == 0) - st_bugs=1; + else if (strcmp(*argv, "-www") == 0) { + if (--argc < 1) + goto bad; + s_www_path = *(++argv); + if (strlen(s_www_path) > MYBUFSIZ - 100) { + BIO_printf(bio_err, "-www option too long\n"); + badop = 1; + } + } else if (strcmp(*argv, "-bugs") == 0) + st_bugs = 1; #ifndef OPENSSL_NO_SSL2 - else if(strcmp(*argv,"-ssl2") == 0) - s_time_meth=SSLv2_client_method(); + else if (strcmp(*argv, "-ssl2") == 0) + s_time_meth = SSLv2_client_method(); #endif #ifndef OPENSSL_NO_SSL3 - else if(strcmp(*argv,"-ssl3") == 0) - s_time_meth=SSLv3_client_method(); + else if (strcmp(*argv, "-ssl3") == 0) + s_time_meth = SSLv3_client_method(); #endif - else if( strcmp(*argv,"-time") == 0) { - - if (--argc < 1) goto bad; - maxTime= atoi(*(++argv)); - } - else { - BIO_printf(bio_err,"unknown option %s\n",*argv); - badop=1; - break; - } - - argc--; - argv++; + else if (strcmp(*argv, "-time") == 0) { + + if (--argc < 1) + goto bad; + maxTime = atoi(*(++argv)); + } else { + BIO_printf(bio_err, "unknown option %s\n", *argv); + badop = 1; + break; + } + + argc--; + argv++; } - if (perform == 0) perform=3; + if (perform == 0) + perform = 3; - if(badop) { -bad: - s_time_usage(); - return -1; + if (badop) { + bad: + s_time_usage(); + return -1; } - return 0; /* Valid args */ + return 0; /* Valid args */ } /*********************************************************************** * TIME - time functions */ -#define START 0 -#define STOP 1 +#define START 0 +#define STOP 1 static double tm_Time_F(int s) - { - return app_tminterval(s,1); - } +{ + return app_tminterval(s, 1); +} /*********************************************************************** * MAIN - main processing area for client - * real name depends on MONOLITH + * real name depends on MONOLITH */ int MAIN(int, char **); int MAIN(int argc, char **argv) - { - double totalTime = 0.0; - int nConn = 0; - SSL *scon=NULL; - long finishtime=0; - int ret=1,i; - MS_STATIC char buf[1024*8]; - int ver; - - apps_startup(); - s_time_init(); - - if (bio_err == NULL) - bio_err=BIO_new_fp(stderr,BIO_NOCLOSE); - -#if !defined(OPENSSL_NO_SSL2) && !defined(OPENSSL_NO_SSL3) - s_time_meth=SSLv23_client_method(); -#elif !defined(OPENSSL_NO_SSL3) - s_time_meth=SSLv3_client_method(); -#elif !defined(OPENSSL_NO_SSL2) - s_time_meth=SSLv2_client_method(); -#endif - - /* parse the command line arguments */ - if( parseArgs( argc, argv ) < 0 ) - goto end; - - OpenSSL_add_ssl_algorithms(); - if ((tm_ctx=SSL_CTX_new(s_time_meth)) == NULL) return(1); - - SSL_CTX_set_quiet_shutdown(tm_ctx,1); - - if (st_bugs) SSL_CTX_set_options(tm_ctx,SSL_OP_ALL); - SSL_CTX_set_cipher_list(tm_ctx,tm_cipher); - if(!set_cert_stuff(tm_ctx,t_cert_file,t_key_file)) - goto end; - - SSL_load_error_strings(); - - if ((!SSL_CTX_load_verify_locations(tm_ctx,CAfile,CApath)) || - (!SSL_CTX_set_default_verify_paths(tm_ctx))) - { - /* BIO_printf(bio_err,"error setting default verify locations\n"); */ - ERR_print_errors(bio_err); - /* goto end; */ - } +{ + double totalTime = 0.0; + int nConn = 0; + SSL *scon = NULL; + long finishtime = 0; + int ret = 1, i; + MS_STATIC char buf[1024 * 8]; + int ver; + + apps_startup(); + s_time_init(); + + if (bio_err == NULL) + bio_err = BIO_new_fp(stderr, BIO_NOCLOSE); + + s_time_meth = SSLv23_client_method(); + + /* parse the command line arguments */ + if (parseArgs(argc, argv) < 0) + goto end; + + OpenSSL_add_ssl_algorithms(); + if ((tm_ctx = SSL_CTX_new(s_time_meth)) == NULL) + return (1); + + SSL_CTX_set_quiet_shutdown(tm_ctx, 1); + + if (st_bugs) + SSL_CTX_set_options(tm_ctx, SSL_OP_ALL); + SSL_CTX_set_cipher_list(tm_ctx, tm_cipher); + if (!set_cert_stuff(tm_ctx, t_cert_file, t_key_file)) + goto end; + + SSL_load_error_strings(); + + if ((!SSL_CTX_load_verify_locations(tm_ctx, CAfile, CApath)) || + (!SSL_CTX_set_default_verify_paths(tm_ctx))) { + /* + * BIO_printf(bio_err,"error setting default verify locations\n"); + */ + ERR_print_errors(bio_err); + /* goto end; */ + } - if (tm_cipher == NULL) - tm_cipher = getenv("SSL_CIPHER"); + if (tm_cipher == NULL) + tm_cipher = getenv("SSL_CIPHER"); - if (tm_cipher == NULL ) { - fprintf( stderr, "No CIPHER specified\n" ); - } + if (tm_cipher == NULL) { + fprintf(stderr, "No CIPHER specified\n"); + } - if (!(perform & 1)) goto next; - printf( "Collecting connection statistics for %d seconds\n", maxTime ); + if (!(perform & 1)) + goto next; + printf("Collecting connection statistics for %d seconds\n", maxTime); - /* Loop and time how long it takes to make connections */ + /* Loop and time how long it takes to make connections */ - bytes_read=0; - finishtime=(long)time(NULL)+maxTime; - tm_Time_F(START); - for (;;) - { - if (finishtime < (long)time(NULL)) break; + bytes_read = 0; + finishtime = (long)time(NULL) + maxTime; + tm_Time_F(START); + for (;;) { + if (finishtime < (long)time(NULL)) + break; #ifdef WIN32_STUFF - if( flushWinMsgs(0) == -1 ) - goto end; + if (flushWinMsgs(0) == -1) + goto end; - if( waitingToDie || exitNow ) /* we're dead */ - goto end; + if (waitingToDie || exitNow) /* we're dead */ + goto end; #endif - if( (scon = doConnection( NULL )) == NULL ) - goto end; - - if (s_www_path != NULL) - { - BIO_snprintf(buf,sizeof buf,"GET %s HTTP/1.0\r\n\r\n",s_www_path); - SSL_write(scon,buf,strlen(buf)); - while ((i=SSL_read(scon,buf,sizeof(buf))) > 0) - bytes_read+=i; - } + if ((scon = doConnection(NULL)) == NULL) + goto end; + if (s_www_path != NULL) { + BIO_snprintf(buf, sizeof buf, "GET %s HTTP/1.0\r\n\r\n", + s_www_path); + SSL_write(scon, buf, strlen(buf)); + while ((i = SSL_read(scon, buf, sizeof(buf))) > 0) + bytes_read += i; + } #ifdef NO_SHUTDOWN - SSL_set_shutdown(scon,SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN); + SSL_set_shutdown(scon, SSL_SENT_SHUTDOWN | SSL_RECEIVED_SHUTDOWN); #else - SSL_shutdown(scon); + SSL_shutdown(scon); #endif - SHUTDOWN2(SSL_get_fd(scon)); - - nConn += 1; - if (SSL_session_reused(scon)) - ver='r'; - else - { - ver=SSL_version(scon); - if (ver == TLS1_VERSION) - ver='t'; - else if (ver == SSL3_VERSION) - ver='3'; - else if (ver == SSL2_VERSION) - ver='2'; - else - ver='*'; - } - fputc(ver,stdout); - fflush(stdout); - - SSL_free( scon ); - scon=NULL; - } - totalTime += tm_Time_F(STOP); /* Add the time for this iteration */ - - i=(int)((long)time(NULL)-finishtime+maxTime); - printf( "\n\n%d connections in %.2fs; %.2f connections/user sec, bytes read %ld\n", nConn, totalTime, ((double)nConn/totalTime),bytes_read); - printf( "%d connections in %ld real seconds, %ld bytes read per connection\n",nConn,(long)time(NULL)-finishtime+maxTime,bytes_read/nConn); - - /* Now loop and time connections using the same session id over and over */ - -next: - if (!(perform & 2)) goto end; - printf( "\n\nNow timing with session id reuse.\n" ); - - /* Get an SSL object so we can reuse the session id */ - if( (scon = doConnection( NULL )) == NULL ) - { - fprintf( stderr, "Unable to get connection\n" ); - goto end; - } - - if (s_www_path != NULL) - { - BIO_snprintf(buf,sizeof buf,"GET %s HTTP/1.0\r\n\r\n",s_www_path); - SSL_write(scon,buf,strlen(buf)); - while (SSL_read(scon,buf,sizeof(buf)) > 0) - ; - } + SHUTDOWN2(SSL_get_fd(scon)); + + nConn += 1; + if (SSL_session_reused(scon)) + ver = 'r'; + else { + ver = SSL_version(scon); + if (ver == TLS1_VERSION) + ver = 't'; + else if (ver == SSL3_VERSION) + ver = '3'; + else if (ver == SSL2_VERSION) + ver = '2'; + else + ver = '*'; + } + fputc(ver, stdout); + fflush(stdout); + + SSL_free(scon); + scon = NULL; + } + totalTime += tm_Time_F(STOP); /* Add the time for this iteration */ + + i = (int)((long)time(NULL) - finishtime + maxTime); + printf + ("\n\n%d connections in %.2fs; %.2f connections/user sec, bytes read %ld\n", + nConn, totalTime, ((double)nConn / totalTime), bytes_read); + printf + ("%d connections in %ld real seconds, %ld bytes read per connection\n", + nConn, (long)time(NULL) - finishtime + maxTime, bytes_read / nConn); + + /* + * Now loop and time connections using the same session id over and over + */ + + next: + if (!(perform & 2)) + goto end; + printf("\n\nNow timing with session id reuse.\n"); + + /* Get an SSL object so we can reuse the session id */ + if ((scon = doConnection(NULL)) == NULL) { + fprintf(stderr, "Unable to get connection\n"); + goto end; + } + + if (s_www_path != NULL) { + BIO_snprintf(buf, sizeof buf, "GET %s HTTP/1.0\r\n\r\n", s_www_path); + SSL_write(scon, buf, strlen(buf)); + while (SSL_read(scon, buf, sizeof(buf)) > 0) ; + } #ifdef NO_SHUTDOWN - SSL_set_shutdown(scon,SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN); + SSL_set_shutdown(scon, SSL_SENT_SHUTDOWN | SSL_RECEIVED_SHUTDOWN); #else - SSL_shutdown(scon); + SSL_shutdown(scon); #endif - SHUTDOWN2(SSL_get_fd(scon)); + SHUTDOWN2(SSL_get_fd(scon)); - nConn = 0; - totalTime = 0.0; + nConn = 0; + totalTime = 0.0; - finishtime=(long)time(NULL)+maxTime; + finishtime = (long)time(NULL) + maxTime; - printf( "starting\n" ); - bytes_read=0; - tm_Time_F(START); - - for (;;) - { - if (finishtime < (long)time(NULL)) break; + printf("starting\n"); + bytes_read = 0; + tm_Time_F(START); + + for (;;) { + if (finishtime < (long)time(NULL)) + break; #ifdef WIN32_STUFF - if( flushWinMsgs(0) == -1 ) - goto end; + if (flushWinMsgs(0) == -1) + goto end; - if( waitingToDie || exitNow ) /* we're dead */ - goto end; + if (waitingToDie || exitNow) /* we're dead */ + goto end; #endif - if( (doConnection( scon )) == NULL ) - goto end; - - if (s_www_path) - { - BIO_snprintf(buf,sizeof buf,"GET %s HTTP/1.0\r\n\r\n",s_www_path); - SSL_write(scon,buf,strlen(buf)); - while ((i=SSL_read(scon,buf,sizeof(buf))) > 0) - bytes_read+=i; - } + if ((doConnection(scon)) == NULL) + goto end; + if (s_www_path) { + BIO_snprintf(buf, sizeof buf, "GET %s HTTP/1.0\r\n\r\n", + s_www_path); + SSL_write(scon, buf, strlen(buf)); + while ((i = SSL_read(scon, buf, sizeof(buf))) > 0) + bytes_read += i; + } #ifdef NO_SHUTDOWN - SSL_set_shutdown(scon,SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN); + SSL_set_shutdown(scon, SSL_SENT_SHUTDOWN | SSL_RECEIVED_SHUTDOWN); #else - SSL_shutdown(scon); + SSL_shutdown(scon); #endif - SHUTDOWN2(SSL_get_fd(scon)); - - nConn += 1; - if (SSL_session_reused(scon)) - ver='r'; - else - { - ver=SSL_version(scon); - if (ver == TLS1_VERSION) - ver='t'; - else if (ver == SSL3_VERSION) - ver='3'; - else if (ver == SSL2_VERSION) - ver='2'; - else - ver='*'; - } - fputc(ver,stdout); - fflush(stdout); - } - totalTime += tm_Time_F(STOP); /* Add the time for this iteration*/ - - - printf( "\n\n%d connections in %.2fs; %.2f connections/user sec, bytes read %ld\n", nConn, totalTime, ((double)nConn/totalTime),bytes_read); - printf( "%d connections in %ld real seconds, %ld bytes read per connection\n",nConn,(long)time(NULL)-finishtime+maxTime,bytes_read/nConn); - - ret=0; -end: - if (scon != NULL) SSL_free(scon); - - if (tm_ctx != NULL) - { - SSL_CTX_free(tm_ctx); - tm_ctx=NULL; - } - apps_shutdown(); - OPENSSL_EXIT(ret); - } + SHUTDOWN2(SSL_get_fd(scon)); + + nConn += 1; + if (SSL_session_reused(scon)) + ver = 'r'; + else { + ver = SSL_version(scon); + if (ver == TLS1_VERSION) + ver = 't'; + else if (ver == SSL3_VERSION) + ver = '3'; + else if (ver == SSL2_VERSION) + ver = '2'; + else + ver = '*'; + } + fputc(ver, stdout); + fflush(stdout); + } + totalTime += tm_Time_F(STOP); /* Add the time for this iteration */ + + printf + ("\n\n%d connections in %.2fs; %.2f connections/user sec, bytes read %ld\n", + nConn, totalTime, ((double)nConn / totalTime), bytes_read); + printf + ("%d connections in %ld real seconds, %ld bytes read per connection\n", + nConn, (long)time(NULL) - finishtime + maxTime, bytes_read / nConn); + + ret = 0; + end: + if (scon != NULL) + SSL_free(scon); + + if (tm_ctx != NULL) { + SSL_CTX_free(tm_ctx); + tm_ctx = NULL; + } + apps_shutdown(); + OPENSSL_EXIT(ret); +} -/*********************************************************************** +/*- * doConnection - make a connection * Args: - * scon = earlier ssl connection for session id, or NULL + * scon = earlier ssl connection for session id, or NULL * Returns: - * SSL * = the connection pointer. + * SSL * = the connection pointer. */ static SSL *doConnection(SSL *scon) - { - BIO *conn; - SSL *serverCon; - int width, i; - fd_set readfds; - - if ((conn=BIO_new(BIO_s_connect())) == NULL) - return(NULL); - -/* BIO_set_conn_port(conn,port);*/ - BIO_set_conn_hostname(conn,host); - - if (scon == NULL) - serverCon=SSL_new(tm_ctx); - else - { - serverCon=scon; - SSL_set_connect_state(serverCon); - } +{ + BIO *conn; + SSL *serverCon; + int width, i; + fd_set readfds; + + if ((conn = BIO_new(BIO_s_connect())) == NULL) + return (NULL); + +/* BIO_set_conn_port(conn,port);*/ + BIO_set_conn_hostname(conn, host); + + if (scon == NULL) + serverCon = SSL_new(tm_ctx); + else { + serverCon = scon; + SSL_set_connect_state(serverCon); + } - SSL_set_bio(serverCon,conn,conn); + SSL_set_bio(serverCon, conn, conn); #if 0 - if( scon != NULL ) - SSL_set_session(serverCon,SSL_get_session(scon)); + if (scon != NULL) + SSL_set_session(serverCon, SSL_get_session(scon)); #endif - /* ok, lets connect */ - for(;;) { - i=SSL_connect(serverCon); - if (BIO_sock_should_retry(i)) - { - BIO_printf(bio_err,"DELAY\n"); - - i=SSL_get_fd(serverCon); - width=i+1; - FD_ZERO(&readfds); - openssl_fdset(i,&readfds); - /* Note: under VMS with SOCKETSHR the 2nd parameter - * is currently of type (int *) whereas under other - * systems it is (void *) if you don't have a cast it - * will choke the compiler: if you do have a cast then - * you can either go for (int *) or (void *). - */ - select(width,(void *)&readfds,NULL,NULL,NULL); - continue; - } - break; - } - if(i <= 0) - { - BIO_printf(bio_err,"ERROR\n"); - if (verify_error != X509_V_OK) - BIO_printf(bio_err,"verify error:%s\n", - X509_verify_cert_error_string(verify_error)); - else - ERR_print_errors(bio_err); - if (scon == NULL) - SSL_free(serverCon); - return NULL; - } - - return serverCon; - } - + /* ok, lets connect */ + for (;;) { + i = SSL_connect(serverCon); + if (BIO_sock_should_retry(i)) { + BIO_printf(bio_err, "DELAY\n"); + + i = SSL_get_fd(serverCon); + width = i + 1; + FD_ZERO(&readfds); + openssl_fdset(i, &readfds); + /* + * Note: under VMS with SOCKETSHR the 2nd parameter is currently + * of type (int *) whereas under other systems it is (void *) if + * you don't have a cast it will choke the compiler: if you do + * have a cast then you can either go for (int *) or (void *). + */ + select(width, (void *)&readfds, NULL, NULL, NULL); + continue; + } + break; + } + if (i <= 0) { + BIO_printf(bio_err, "ERROR\n"); + if (verify_error != X509_V_OK) + BIO_printf(bio_err, "verify error:%s\n", + X509_verify_cert_error_string(verify_error)); + else + ERR_print_errors(bio_err); + if (scon == NULL) + SSL_free(serverCon); + return NULL; + } + return serverCon; +} |