diff options
Diffstat (limited to 'vio/test-sslserver.c')
-rw-r--r-- | vio/test-sslserver.c | 119 |
1 files changed, 72 insertions, 47 deletions
diff --git a/vio/test-sslserver.c b/vio/test-sslserver.c index c1a30139888..ad4f653ffa6 100644 --- a/vio/test-sslserver.c +++ b/vio/test-sslserver.c @@ -20,40 +20,68 @@ const char *VER="0.1"; const char *default_dbug_option="d:t:O,-"; #endif -void +static void fatal_error( const char* r) { perror(r); exit(0); } +typedef struct { + int sd; + struct st_VioSSLAcceptorFd* ssl_acceptor; +} TH_ARGS; + +static void +do_ssl_stuff( TH_ARGS* args) +{ + const char* s = "Huhuhuhuuu"; + Vio* server_vio; + int err; + DBUG_ENTER("do_ssl_stuff"); + + server_vio = vio_new(args->sd, VIO_TYPE_TCPIP, TRUE); + + /* ----------------------------------------------- */ + /* TCP connection is ready. Do server side SSL. */ + + err = write(server_vio->sd,(gptr)s, strlen(s)); + sslaccept(args->ssl_acceptor,server_vio); + err = server_vio->write(server_vio,(gptr)s, strlen(s)); + DBUG_VOID_RETURN; +} + +static void* +client_thread( void* arg) +{ + my_thread_init(); + do_ssl_stuff((TH_ARGS*)arg); +} + int -main( int argc, +main( int argc __attribute__((unused)), char** argv) { - char* server_key = 0, *server_cert = 0; - char* ca_file = 0, *ca_path = 0; - struct st_VioSSLAcceptorFd* ssl_acceptor=0; - const char* s = "Huhuhuhuuu"; + char server_key[] = "../SSL/server-key.pem", + server_cert[] = "../SSL/server-cert.pem"; + char ca_file[] = "../SSL/cacert.pem", + *ca_path = 0; + struct st_VioSSLAcceptorFd* ssl_acceptor; + pthread_t th; + TH_ARGS th_args; struct sockaddr_in sa_serv; struct sockaddr_in sa_cli; int listen_sd; - - size_t client_len; int err; - + size_t client_len; + int reuseaddr = 1; /* better testing, uh? */ - Vio* client_vio=0, *server_vio=0; MY_INIT(argv[0]); DBUG_PROCESS(argv[0]); DBUG_PUSH(default_dbug_option); - server_key = "../SSL/server-key.pem"; - server_cert = "../SSL/server-cert.pem"; - ca_file = "../SSL/cacert.pem"; - printf("Server key/cert : %s/%s\n", server_key, server_cert); if (ca_file!=0) @@ -61,51 +89,48 @@ main( int argc, if (ca_path!=0) printf("CApath : %s\n", ca_path); + th_args.ssl_acceptor = ssl_acceptor = new_VioSSLAcceptorFd(server_key, server_cert, ca_file, ca_path); - ssl_acceptor = new_VioSSLAcceptorFd(server_key, server_cert, ca_file, ca_path); - - server_vio = (struct st_vio*)my_malloc(sizeof(struct st_vio),MYF(0)); - - + /* ----------------------------------------------- */ + /* Prepare TCP socket for receiving connections */ - /* ----------------------------------------------- */ - /* Prepare TCP socket for receiving connections */ - - listen_sd = socket (AF_INET, SOCK_STREAM, 0); + listen_sd = socket (AF_INET, SOCK_STREAM, 0); + setsockopt(listen_sd, SOL_SOCKET, SO_REUSEADDR, &reuseaddr, sizeof(&reuseaddr)); - memset (&sa_serv, '\0', sizeof(sa_serv)); - sa_serv.sin_family = AF_INET; - sa_serv.sin_addr.s_addr = INADDR_ANY; - sa_serv.sin_port = htons (1111); /* Server Port number */ + memset (&sa_serv, '\0', sizeof(sa_serv)); + sa_serv.sin_family = AF_INET; + sa_serv.sin_addr.s_addr = INADDR_ANY; + sa_serv.sin_port = htons (1111); /* Server Port number */ - err = bind(listen_sd, (struct sockaddr*) &sa_serv, + err = bind(listen_sd, (struct sockaddr*) &sa_serv, sizeof (sa_serv)); - /* Receive a TCP connection. */ + /* Receive a TCP connection. */ - err = listen (listen_sd, 5); - - client_len = sizeof(sa_cli); - server_vio->sd = accept (listen_sd, (struct sockaddr*) &sa_cli, &client_len); - close (listen_sd); + err = listen (listen_sd, 5); + client_len = sizeof(sa_cli); + th_args.sd = accept (listen_sd, (struct sockaddr*) &sa_cli, &client_len); + close (listen_sd); - printf ("Connection from %lx, port %x\n", - sa_cli.sin_addr.s_addr, sa_cli.sin_port); + printf ("Connection from %lx, port %x\n", + (long)sa_cli.sin_addr.s_addr, sa_cli.sin_port); - /* ----------------------------------------------- */ - /* TCP connection is ready. Do server side SSL. */ + /* ----------------------------------------------- */ + /* TCP connection is ready. Do server side SSL. */ - sslaccept(ssl_acceptor,server_vio); + err = pthread_create(&th, NULL, client_thread, (void*)&th_args); + DBUG_PRINT("info", ("pthread_create: %d", err)); + pthread_join(th, NULL); + +#if 0 + if (err<=0) { + my_free((gptr)ssl_acceptor,MYF(0)); + fatal_error("server:SSL_write"); + } +#endif /* 0 */ -{ -err = server_vio->write(server_vio,(gptr)s, strlen(s)); -if (err<=0) { my_free((gptr)ssl_acceptor,MYF(0)); - fatal_error("server:SSL_write"); -} -} -my_free((gptr)server_vio,MYF(0)); -my_free((gptr)ssl_acceptor,MYF(0)); + return 0; } #else /* HAVE_OPENSSL */ |