aboutsummaryrefslogtreecommitdiff
path: root/openssl/apps/s_time.c
diff options
context:
space:
mode:
Diffstat (limited to 'openssl/apps/s_time.c')
-rw-r--r--openssl/apps/s_time.c803
1 files changed, 409 insertions, 394 deletions
diff --git a/openssl/apps/s_time.c b/openssl/apps/s_time.c
index 81dad5324..a40997a22 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,422 +209,433 @@ 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));
+ if(maxTime <= 0) {
+ BIO_printf(bio_err, "time must be > 0\n");
+ badop = 1;
+ }
+ } 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);
-
- 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; */
- }
+{
+ 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?nConn:1));
+
+ 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;
+}