1656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* apps/s_time.c */ 2656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 3656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * All rights reserved. 4656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 5656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * This package is an SSL implementation written 6656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * by Eric Young (eay@cryptsoft.com). 7656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * The implementation was written so as to conform with Netscapes SSL. 8656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 9656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * This library is free for commercial and non-commercial use as long as 10656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * the following conditions are aheared to. The following conditions 11656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * apply to all code found in this distribution, be it the RC4, RSA, 12656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * lhash, DES, etc., code; not just the SSL code. The SSL documentation 13656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * included with this distribution is covered by the same copyright terms 14656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * except that the holder is Tim Hudson (tjh@cryptsoft.com). 15656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 16656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Copyright remains Eric Young's, and as such any Copyright notices in 17656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * the code are not to be removed. 18656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * If this package is used in a product, Eric Young should be given attribution 19656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * as the author of the parts of the library used. 20656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * This can be in the form of a textual message at program startup or 21656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * in documentation (online or textual) provided with the package. 22656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 23656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Redistribution and use in source and binary forms, with or without 24656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * modification, are permitted provided that the following conditions 25656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * are met: 26656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 1. Redistributions of source code must retain the copyright 27656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * notice, this list of conditions and the following disclaimer. 28656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 29656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * notice, this list of conditions and the following disclaimer in the 30656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * documentation and/or other materials provided with the distribution. 31656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 3. All advertising materials mentioning features or use of this software 32656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * must display the following acknowledgement: 33656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * "This product includes cryptographic software written by 34656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Eric Young (eay@cryptsoft.com)" 35656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * The word 'cryptographic' can be left out if the rouines from the library 36656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * being used are not cryptographic related :-). 37656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 4. If you include any Windows specific code (or a derivative thereof) from 38656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * the apps directory (application code) you must include an acknowledgement: 39656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" 40656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 41656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND 42656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 43656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 44656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 45656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 46656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 47656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 48656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 49656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 50656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 51656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * SUCH DAMAGE. 52656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 53656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * The licence and distribution terms for any publically available version or 54656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * derivative of this code cannot be changed. i.e. this code cannot simply be 55656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * copied and put under another distribution licence 56656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * [including the GNU Public Licence.] 57656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */ 58656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 59656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define NO_SHUTDOWN 60656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 61656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/*----------------------------------------- 62656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s_time - SSL client connection timer program 63656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Written and donated by Larry Streepy <streepy@healthcare.com> 64656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project -----------------------------------------*/ 65656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 66656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <stdio.h> 67656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <stdlib.h> 68656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <string.h> 69656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 70656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define USE_SOCKETS 71656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include "apps.h" 72656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef OPENSSL_NO_STDIO 73656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define APPS_WIN16 74656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif 75656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <openssl/x509.h> 76656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <openssl/ssl.h> 77656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <openssl/pem.h> 78656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include "s_apps.h" 79656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <openssl/err.h> 80656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef WIN32_STUFF 81656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include "winmain.h" 82656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include "wintext.h" 83656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif 84656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#if !defined(OPENSSL_SYS_MSDOS) 85656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include OPENSSL_UNISTD 86656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif 87656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 88656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#undef PROG 89656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define PROG s_time_main 90656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 91656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#undef ioctl 92656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define ioctl ioctlsocket 93656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 94656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define SSL_CONNECT_NAME "localhost:4433" 95656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 96656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/*#define TEST_CERT "client.pem" */ /* no default cert. */ 97656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 98656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#undef BUFSIZZ 99656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define BUFSIZZ 1024*10 100656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 101656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define MYBUFSIZ 1024*8 102656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 103656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#undef min 104656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#undef max 105656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define min(a,b) (((a) < (b)) ? (a) : (b)) 106656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define max(a,b) (((a) > (b)) ? (a) : (b)) 107656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 108656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#undef SECONDS 109656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define SECONDS 30 110656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectextern int verify_depth; 111656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectextern int verify_error; 112656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 113656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic void s_time_usage(void); 114656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic int parseArgs( int argc, char **argv ); 115656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic SSL *doConnection( SSL *scon ); 116656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic void s_time_init(void); 117656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 118656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/*********************************************************************** 119656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Static data declarations 120656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */ 121656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 122656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* static char *port=PORT_STR;*/ 123656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic char *host=SSL_CONNECT_NAME; 124656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic char *t_cert_file=NULL; 125656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic char *t_key_file=NULL; 126656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic char *CApath=NULL; 127656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic char *CAfile=NULL; 128656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic char *tm_cipher=NULL; 129656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic int tm_verify = SSL_VERIFY_NONE; 130656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic int maxTime = SECONDS; 131656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic SSL_CTX *tm_ctx=NULL; 132221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromstatic const SSL_METHOD *s_time_meth=NULL; 133656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic char *s_www_path=NULL; 134656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic long bytes_read=0; 135656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic int st_bugs=0; 136656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic int perform=0; 137656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef FIONBIO 138656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic int t_nbio=0; 139656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif 140656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef OPENSSL_SYS_WIN32 141656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic int exitNow = 0; /* Set when it's time to exit main */ 142656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif 143656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 144656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic void s_time_init(void) 145656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 146656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project host=SSL_CONNECT_NAME; 147656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t_cert_file=NULL; 148656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t_key_file=NULL; 149656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CApath=NULL; 150656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CAfile=NULL; 151656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project tm_cipher=NULL; 152656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project tm_verify = SSL_VERIFY_NONE; 153656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project maxTime = SECONDS; 154656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project tm_ctx=NULL; 155656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s_time_meth=NULL; 156656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s_www_path=NULL; 157656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bytes_read=0; 158656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project st_bugs=0; 159656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project perform=0; 160656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 161656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef FIONBIO 162656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t_nbio=0; 163656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif 164656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef OPENSSL_SYS_WIN32 165656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project exitNow = 0; /* Set when it's time to exit main */ 166656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif 167656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 168656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 169656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/*********************************************************************** 170656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * usage - display usage message 171656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */ 172656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic void s_time_usage(void) 173656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{ 174656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project static char umsg[] = "\ 175656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project-time arg - max number of seconds to collect data, default %d\n\ 176656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project-verify arg - turn on peer certificate verification, arg == depth\n\ 177656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project-cert arg - certificate file to use, PEM format assumed\n\ 178656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project-key arg - RSA file to use, PEM format assumed, key is in cert file\n\ 179656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project file if not specified by this option\n\ 180656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project-CApath arg - PEM format directory of CA's\n\ 181656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project-CAfile arg - PEM format file of CA's\n\ 182656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project-cipher - preferred cipher to use, play with 'openssl ciphers'\n\n"; 183656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 184656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project printf( "usage: s_time <args>\n\n" ); 185656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 186656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project printf("-connect host:port - host:port to connect to (default is %s)\n",SSL_CONNECT_NAME); 187656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef FIONBIO 188656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project printf("-nbio - Run with non-blocking IO\n"); 189656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project printf("-ssl2 - Just use SSLv2\n"); 190656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project printf("-ssl3 - Just use SSLv3\n"); 191656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project printf("-bugs - Turn on SSL bug compatibility\n"); 192656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project printf("-new - Just time new connections\n"); 193656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project printf("-reuse - Just time connection reuse\n"); 194656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project printf("-www page - Retrieve 'page' from the site\n"); 195656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif 196656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project printf( umsg,SECONDS ); 197656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project} 198656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 199656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/*********************************************************************** 200656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * parseArgs - Parse command line arguments and initialize data 201656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 202656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Returns 0 if ok, -1 on bad args 203656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */ 204656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic int parseArgs(int argc, char **argv) 205656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{ 206656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project int badop = 0; 207656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 208656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project verify_depth=0; 209656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project verify_error=X509_V_OK; 210656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 211656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project argc--; 212656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project argv++; 213656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 214656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project while (argc >= 1) { 215656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (strcmp(*argv,"-connect") == 0) 216656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 217656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (--argc < 1) goto bad; 218656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project host= *(++argv); 219656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 220656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#if 0 221656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project else if( strcmp(*argv,"-host") == 0) 222656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 223656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (--argc < 1) goto bad; 224656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project host= *(++argv); 225656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 226656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project else if( strcmp(*argv,"-port") == 0) 227656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 228656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (--argc < 1) goto bad; 229656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project port= *(++argv); 230656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 231656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif 232656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project else if (strcmp(*argv,"-reuse") == 0) 233656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project perform=2; 234656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project else if (strcmp(*argv,"-new") == 0) 235656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project perform=1; 236656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project else if( strcmp(*argv,"-verify") == 0) { 237656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 238656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project tm_verify=SSL_VERIFY_PEER|SSL_VERIFY_CLIENT_ONCE; 239656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (--argc < 1) goto bad; 240656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project verify_depth=atoi(*(++argv)); 241656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project BIO_printf(bio_err,"verify depth is %d\n",verify_depth); 242656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 243656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } else if( strcmp(*argv,"-cert") == 0) { 244656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 245656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (--argc < 1) goto bad; 246656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t_cert_file= *(++argv); 247656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 248656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } else if( strcmp(*argv,"-key") == 0) { 249656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 250656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (--argc < 1) goto bad; 251656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t_key_file= *(++argv); 252656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 253656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } else if( strcmp(*argv,"-CApath") == 0) { 254656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 255656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (--argc < 1) goto bad; 256656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CApath= *(++argv); 257656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 258656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } else if( strcmp(*argv,"-CAfile") == 0) { 259656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 260656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (--argc < 1) goto bad; 261656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CAfile= *(++argv); 262656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 263656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } else if( strcmp(*argv,"-cipher") == 0) { 264656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 265656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (--argc < 1) goto bad; 266656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project tm_cipher= *(++argv); 267656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 268656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef FIONBIO 269656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project else if(strcmp(*argv,"-nbio") == 0) { 270656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t_nbio=1; 271656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 272656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif 273656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project else if(strcmp(*argv,"-www") == 0) 274656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 275656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (--argc < 1) goto bad; 276656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s_www_path= *(++argv); 277656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if(strlen(s_www_path) > MYBUFSIZ-100) 278656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 279656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project BIO_printf(bio_err,"-www option too long\n"); 280656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project badop=1; 281656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 282656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 283656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project else if(strcmp(*argv,"-bugs") == 0) 284656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project st_bugs=1; 285656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifndef OPENSSL_NO_SSL2 286656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project else if(strcmp(*argv,"-ssl2") == 0) 287656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s_time_meth=SSLv2_client_method(); 288656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif 289656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifndef OPENSSL_NO_SSL3 290656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project else if(strcmp(*argv,"-ssl3") == 0) 291656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s_time_meth=SSLv3_client_method(); 292656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif 293656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project else if( strcmp(*argv,"-time") == 0) { 294656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 295656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (--argc < 1) goto bad; 296656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project maxTime= atoi(*(++argv)); 297656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 298656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project else { 299656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project BIO_printf(bio_err,"unknown option %s\n",*argv); 300656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project badop=1; 301656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project break; 302656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 303656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 304656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project argc--; 305656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project argv++; 306656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 307656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 308656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (perform == 0) perform=3; 309656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 310656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if(badop) { 311656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectbad: 312656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s_time_usage(); 313656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return -1; 314656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 315656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 316656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return 0; /* Valid args */ 317656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project} 318656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 319656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/*********************************************************************** 320656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * TIME - time functions 321656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */ 322656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define START 0 323656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define STOP 1 324656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 325656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic double tm_Time_F(int s) 326656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 327221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom return app_tminterval(s,1); 328656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 329656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 330656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/*********************************************************************** 331656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * MAIN - main processing area for client 332656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * real name depends on MONOLITH 333656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */ 334656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint MAIN(int, char **); 335656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 336656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint MAIN(int argc, char **argv) 337656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 338656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project double totalTime = 0.0; 339656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project int nConn = 0; 340656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SSL *scon=NULL; 341656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project long finishtime=0; 342656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project int ret=1,i; 343656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MS_STATIC char buf[1024*8]; 344656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project int ver; 345656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 346656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project apps_startup(); 347656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s_time_init(); 348656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 349656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (bio_err == NULL) 350656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bio_err=BIO_new_fp(stderr,BIO_NOCLOSE); 351656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 352656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#if !defined(OPENSSL_NO_SSL2) && !defined(OPENSSL_NO_SSL3) 353656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s_time_meth=SSLv23_client_method(); 354656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#elif !defined(OPENSSL_NO_SSL3) 355656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s_time_meth=SSLv3_client_method(); 356656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#elif !defined(OPENSSL_NO_SSL2) 357656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s_time_meth=SSLv2_client_method(); 358656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif 359656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 360656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /* parse the command line arguments */ 361656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if( parseArgs( argc, argv ) < 0 ) 362656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project goto end; 363656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 364656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project OpenSSL_add_ssl_algorithms(); 365656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if ((tm_ctx=SSL_CTX_new(s_time_meth)) == NULL) return(1); 366656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 367656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SSL_CTX_set_quiet_shutdown(tm_ctx,1); 368656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 369656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (st_bugs) SSL_CTX_set_options(tm_ctx,SSL_OP_ALL); 370656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SSL_CTX_set_cipher_list(tm_ctx,tm_cipher); 371656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if(!set_cert_stuff(tm_ctx,t_cert_file,t_key_file)) 372656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project goto end; 373656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 374656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SSL_load_error_strings(); 375656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 376656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if ((!SSL_CTX_load_verify_locations(tm_ctx,CAfile,CApath)) || 377656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project (!SSL_CTX_set_default_verify_paths(tm_ctx))) 378656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 379656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /* BIO_printf(bio_err,"error setting default verify locations\n"); */ 380656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ERR_print_errors(bio_err); 381656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /* goto end; */ 382656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 383656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 384656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (tm_cipher == NULL) 385656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project tm_cipher = getenv("SSL_CIPHER"); 386656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 387656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (tm_cipher == NULL ) { 388656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project fprintf( stderr, "No CIPHER specified\n" ); 389656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 390656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 391656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (!(perform & 1)) goto next; 392656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project printf( "Collecting connection statistics for %d seconds\n", maxTime ); 393656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 394656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /* Loop and time how long it takes to make connections */ 395656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 396656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bytes_read=0; 397656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project finishtime=(long)time(NULL)+maxTime; 398656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project tm_Time_F(START); 399656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project for (;;) 400656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 401656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (finishtime < (long)time(NULL)) break; 402656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef WIN32_STUFF 403656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 404656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if( flushWinMsgs(0) == -1 ) 405656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project goto end; 406656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 407656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if( waitingToDie || exitNow ) /* we're dead */ 408656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project goto end; 409656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif 410656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 411656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if( (scon = doConnection( NULL )) == NULL ) 412656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project goto end; 413656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 414656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (s_www_path != NULL) 415656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 416656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project BIO_snprintf(buf,sizeof buf,"GET %s HTTP/1.0\r\n\r\n",s_www_path); 417656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SSL_write(scon,buf,strlen(buf)); 418656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project while ((i=SSL_read(scon,buf,sizeof(buf))) > 0) 419656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bytes_read+=i; 420656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 421656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 422656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef NO_SHUTDOWN 423656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SSL_set_shutdown(scon,SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN); 424656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#else 425656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SSL_shutdown(scon); 426656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif 427656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SHUTDOWN2(SSL_get_fd(scon)); 428656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 429656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project nConn += 1; 430656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (SSL_session_reused(scon)) 431656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ver='r'; 432656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project else 433656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 434656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ver=SSL_version(scon); 435656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (ver == TLS1_VERSION) 436656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ver='t'; 437656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project else if (ver == SSL3_VERSION) 438656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ver='3'; 439656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project else if (ver == SSL2_VERSION) 440656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ver='2'; 441656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project else 442656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ver='*'; 443656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 444656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project fputc(ver,stdout); 445656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project fflush(stdout); 446656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 447656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SSL_free( scon ); 448656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project scon=NULL; 449656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 450656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project totalTime += tm_Time_F(STOP); /* Add the time for this iteration */ 451656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 452656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project i=(int)((long)time(NULL)-finishtime+maxTime); 453656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project printf( "\n\n%d connections in %.2fs; %.2f connections/user sec, bytes read %ld\n", nConn, totalTime, ((double)nConn/totalTime),bytes_read); 454656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project printf( "%d connections in %ld real seconds, %ld bytes read per connection\n",nConn,(long)time(NULL)-finishtime+maxTime,bytes_read/nConn); 455656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 456656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /* Now loop and time connections using the same session id over and over */ 457656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 458656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectnext: 459656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (!(perform & 2)) goto end; 460656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project printf( "\n\nNow timing with session id reuse.\n" ); 461656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 462656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /* Get an SSL object so we can reuse the session id */ 463656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if( (scon = doConnection( NULL )) == NULL ) 464656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 465656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project fprintf( stderr, "Unable to get connection\n" ); 466656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project goto end; 467656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 468656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 469656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (s_www_path != NULL) 470656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 471656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project BIO_snprintf(buf,sizeof buf,"GET %s HTTP/1.0\r\n\r\n",s_www_path); 472656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SSL_write(scon,buf,strlen(buf)); 473656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project while (SSL_read(scon,buf,sizeof(buf)) > 0) 474656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; 475656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 476656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef NO_SHUTDOWN 477656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SSL_set_shutdown(scon,SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN); 478656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#else 479656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SSL_shutdown(scon); 480656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif 481656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SHUTDOWN2(SSL_get_fd(scon)); 482656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 483656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project nConn = 0; 484656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project totalTime = 0.0; 485656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 486656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project finishtime=(long)time(NULL)+maxTime; 487656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 488656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project printf( "starting\n" ); 489656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bytes_read=0; 490656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project tm_Time_F(START); 491656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 492656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project for (;;) 493656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 494656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (finishtime < (long)time(NULL)) break; 495656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 496656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef WIN32_STUFF 497656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if( flushWinMsgs(0) == -1 ) 498656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project goto end; 499656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 500656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if( waitingToDie || exitNow ) /* we're dead */ 501656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project goto end; 502656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif 503656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 504656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if( (doConnection( scon )) == NULL ) 505656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project goto end; 506656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 507656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (s_www_path) 508656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 509656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project BIO_snprintf(buf,sizeof buf,"GET %s HTTP/1.0\r\n\r\n",s_www_path); 510656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SSL_write(scon,buf,strlen(buf)); 511656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project while ((i=SSL_read(scon,buf,sizeof(buf))) > 0) 512656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bytes_read+=i; 513656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 514656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 515656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef NO_SHUTDOWN 516656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SSL_set_shutdown(scon,SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN); 517656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#else 518656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SSL_shutdown(scon); 519656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif 520656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SHUTDOWN2(SSL_get_fd(scon)); 521656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 522656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project nConn += 1; 523656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (SSL_session_reused(scon)) 524656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ver='r'; 525656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project else 526656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 527656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ver=SSL_version(scon); 528656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (ver == TLS1_VERSION) 529656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ver='t'; 530656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project else if (ver == SSL3_VERSION) 531656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ver='3'; 532656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project else if (ver == SSL2_VERSION) 533656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ver='2'; 534656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project else 535656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ver='*'; 536656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 537656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project fputc(ver,stdout); 538656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project fflush(stdout); 539656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 540656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project totalTime += tm_Time_F(STOP); /* Add the time for this iteration*/ 541656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 542656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 543656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project printf( "\n\n%d connections in %.2fs; %.2f connections/user sec, bytes read %ld\n", nConn, totalTime, ((double)nConn/totalTime),bytes_read); 544656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project printf( "%d connections in %ld real seconds, %ld bytes read per connection\n",nConn,(long)time(NULL)-finishtime+maxTime,bytes_read/nConn); 545656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 546656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ret=0; 547656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectend: 548656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (scon != NULL) SSL_free(scon); 549656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 550656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (tm_ctx != NULL) 551656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 552656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SSL_CTX_free(tm_ctx); 553656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project tm_ctx=NULL; 554656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 555656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project apps_shutdown(); 556656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project OPENSSL_EXIT(ret); 557656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 558656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 559656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/*********************************************************************** 560656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * doConnection - make a connection 561656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Args: 562656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * scon = earlier ssl connection for session id, or NULL 563656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Returns: 564656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * SSL * = the connection pointer. 565656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */ 566656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic SSL *doConnection(SSL *scon) 567656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 568656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project BIO *conn; 569656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SSL *serverCon; 570656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project int width, i; 571656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project fd_set readfds; 572656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 573656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if ((conn=BIO_new(BIO_s_connect())) == NULL) 574656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return(NULL); 575656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 576656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* BIO_set_conn_port(conn,port);*/ 577656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project BIO_set_conn_hostname(conn,host); 578656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 579656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (scon == NULL) 580656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project serverCon=SSL_new(tm_ctx); 581656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project else 582656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 583656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project serverCon=scon; 584656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SSL_set_connect_state(serverCon); 585656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 586656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 587656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SSL_set_bio(serverCon,conn,conn); 588656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 589656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#if 0 590656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if( scon != NULL ) 591656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SSL_set_session(serverCon,SSL_get_session(scon)); 592656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif 593656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 594656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /* ok, lets connect */ 595656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project for(;;) { 596656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project i=SSL_connect(serverCon); 597656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (BIO_sock_should_retry(i)) 598656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 599656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project BIO_printf(bio_err,"DELAY\n"); 600656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 601656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project i=SSL_get_fd(serverCon); 602656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project width=i+1; 603656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FD_ZERO(&readfds); 604221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom openssl_fdset(i,&readfds); 605656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /* Note: under VMS with SOCKETSHR the 2nd parameter 606656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * is currently of type (int *) whereas under other 607656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * systems it is (void *) if you don't have a cast it 608656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * will choke the compiler: if you do have a cast then 609656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * you can either go for (int *) or (void *). 610656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */ 611656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project select(width,(void *)&readfds,NULL,NULL,NULL); 612656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project continue; 613656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 614656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project break; 615656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 616656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if(i <= 0) 617656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 618656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project BIO_printf(bio_err,"ERROR\n"); 619656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (verify_error != X509_V_OK) 620656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project BIO_printf(bio_err,"verify error:%s\n", 621656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project X509_verify_cert_error_string(verify_error)); 622656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project else 623656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ERR_print_errors(bio_err); 624656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (scon == NULL) 625656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SSL_free(serverCon); 626656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return NULL; 627656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 628656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 629656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return serverCon; 630656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 631656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 632656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 633