123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- /* echoclient.c */
- #include "openssl/ssl.h"
- #include "../test.h"
- int main(int argc, char** argv)
- {
- SOCKET_T sockfd = 0;
- FILE* fin = stdin;
- FILE* fout = stdout;
- int inCreated = 0;
- int outCreated = 0;
- char send[1024];
- char reply[1024];
- SSL_METHOD* method = 0;
- SSL_CTX* ctx = 0;
- SSL* ssl = 0;
- #ifdef _WIN32
- WSADATA wsd;
- WSAStartup(0x0002, &wsd);
- #endif
- if (argc >= 2) {
- fin = fopen(argv[1], "r");
- inCreated = 1;
- }
- if (argc >= 3) {
- fout = fopen(argv[2], "w");
- outCreated = 1;
- }
- if (!fin) err_sys("can't open input file");
- if (!fout) err_sys("can't open output file");
- tcp_connect(&sockfd);
- method = SSLv3_client_method();
- ctx = SSL_CTX_new(method);
- if (SSL_CTX_load_verify_locations(ctx, caCert, 0) != SSL_SUCCESS)
- err_sys("can't load ca file");
- ssl = SSL_new(ctx);
- SSL_set_fd(ssl, sockfd);
- if (SSL_connect(ssl) != SSL_SUCCESS) err_sys("SSL_connect failed");
- while (fgets(send, sizeof(send), fin)) {
- int sendSz = strlen(send) + 1;
- if (SSL_write(ssl, send, sendSz) != sendSz)
- err_sys("SSL_write failed");
- if (strncmp(send, "quit", 4) == 0) {
- fputs("sending server shutdown command: quit!\n", fout);
- break;
- }
- if (SSL_read(ssl, reply, sizeof(reply)) > 0)
- fputs(reply, fout);
- }
- SSL_shutdown(ssl);
- SSL_free(ssl);
- SSL_CTX_free(ctx);
- fflush(fout);
- if (inCreated) fclose(fin);
- if (outCreated) fclose(fout);
- #ifdef _WIN32
- closesocket(sockfd);
- #else
- close(sockfd);
- #endif
- return 0;
- }
|