MySQL 5.6.14 Source Code Document
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
viotest-sslconnect.cc
1 /* Copyright (c) 2000 MySQL AB
2  Use is subject to license terms.
3 
4  This program is free software; you can redistribute it and/or modify
5  it under the terms of the GNU General Public License as published by
6  the Free Software Foundation; version 2 of the License.
7 
8  This program is distributed in the hope that it will be useful,
9  but WITHOUT ANY WARRANTY; without even the implied warranty of
10  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11  GNU General Public License for more details.
12 
13  You should have received a copy of the GNU General Public License
14  along with this program; if not, write to the Free Software
15  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
16 
17 /*
18 ** Virtual I/O library
19 ** Written by Andrei Errapart <andreie@no.spam.ee>
20 */
21 
22 #include "all.h"
23 
24 #include <sys/types.h>
25 #include <sys/socket.h>
26 #include <netinet/in.h>
27 #include <stdio.h>
28 #include <unistd.h>
29 
30 
31 void
32 fatal_error( const char* r)
33 {
34  perror(r);
35  exit(0);
36 }
37 
38 void
39 print_usage()
40 {
41  printf("viotest-sslconnect: testing SSL virtual IO. Usage:\n");
42  printf("viotest-sslconnect key cert\n");
43 }
44 
45 int
46 main( int argc,
47  char** argv)
48 {
49  char* key = 0;
50  char* cert = 0;
51 
52  if (argc<3)
53  {
54  print_usage();
55  return 1;
56  }
57 
58  char ip[4] = {127, 0, 0, 1};
59  unsigned long addr = (unsigned long)
60  ((unsigned long)ip[0]<<24L)|
61  ((unsigned long)ip[1]<<16L)|
62  ((unsigned long)ip[2]<< 8L)|
63  ((unsigned long)ip[3]);
64  int fd = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
65  if (fd<0)
66  fatal_error("socket");
67  struct sockaddr_in sa;
68  sa.sin_family = AF_INET;
69  sa.sin_port=htons(4433);
70  sa.sin_addr.s_addr=htonl(addr);
71  int sa_size = sizeof sa;
72  if (connect(fd, reinterpret_cast<const sockaddr*>(&sa), sa_size)==-1)
73  fatal_error("connect");
74  key = argv[1];
75  cert = argv[2];
76  printf("Key : %s\n", key);
77  printf("Cert : %s\n", cert);
78 
79  VIO_NS::VioSSLConnectorFd* ssl_connector = new VIO_NS::VioSSLConnectorFd(cert, key,0,0);
80 
81  VIO_NS::VioSSL* vio = ssl_connector->connect(fd);
82 
83  char xbuf[100];
84  int r = vio->read(xbuf, sizeof(xbuf));
85  if (r<=0) {
86  delete ssl_connector;
87  delete vio;
88  fatal_error("client:SSL_read");
89  }
90  xbuf[r] = 0;
91  printf("client:got %s\n", xbuf);
92  delete vio;
93  delete ssl_connector;
94  return 0;
95 }