viotest-sslconnect.cpp
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:1k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* 
  2. **  Virtual I/O library
  3. **  Written by Andrei Errapart <andreie@no.spam.ee>
  4. */
  5. #include "all.h"
  6. #include <sys/types.h>
  7. #include <sys/socket.h>
  8. #include <netinet/in.h>
  9. #include <stdio.h>
  10. #include <unistd.h>
  11. void
  12. fatal_error( const char* r)
  13. {
  14. perror(r);
  15. exit(0);
  16. }
  17. void
  18. print_usage()
  19. {
  20. printf("viotest-sslconnect: testing SSL virtual IO. Usage:n");
  21. printf("viotest-sslconnect key certn");
  22. }
  23. int
  24. main( int argc,
  25. char** argv)
  26. {
  27. char* key = 0;
  28. char* cert = 0;
  29. if (argc<3)
  30. {
  31. print_usage();
  32. return 1;
  33. }
  34. char ip[4] = {127, 0, 0, 1};
  35. unsigned long addr = (unsigned long)
  36. ((unsigned long)ip[0]<<24L)|
  37. ((unsigned long)ip[1]<<16L)|
  38. ((unsigned long)ip[2]<< 8L)|
  39. ((unsigned long)ip[3]);
  40. int fd = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
  41. if (fd<0)
  42. fatal_error("socket");
  43. struct sockaddr_in sa;
  44. sa.sin_family = AF_INET;
  45. sa.sin_port=htons(4433);
  46. sa.sin_addr.s_addr=htonl(addr);
  47. int sa_size = sizeof sa;
  48. if (connect(fd, reinterpret_cast<const sockaddr*>(&sa), sa_size)==-1)
  49. fatal_error("connect");
  50. key = argv[1];
  51. cert = argv[2];
  52. printf("Key  : %sn", key);
  53. printf("Cert : %sn", cert);
  54. VIO_NS::VioSSLConnectorFd* ssl_connector = new VIO_NS::VioSSLConnectorFd(cert, key,0,0);
  55. VIO_NS::VioSSL* vio = ssl_connector->connect(fd);
  56. char xbuf[100];
  57. int r = vio->read(xbuf, sizeof(xbuf));
  58. if (r<=0) {
  59. delete ssl_connector;
  60. delete vio;
  61. fatal_error("client:SSL_read");
  62. }
  63. xbuf[r] = 0;
  64. printf("client:got %sn", xbuf);
  65. delete vio;
  66. delete ssl_connector;
  67. return 0;
  68. }