You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

80 lines
1.5 KiB

26 years ago
  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 cert\n");
  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 : %s\n", key);
  53. printf("Cert : %s\n", 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 %s\n", xbuf);
  65. delete vio;
  66. delete ssl_connector;
  67. return 0;
  68. }