]> git.sur5r.net Git - freertos/blob - FreeRTOS-Plus/CyaSSL/input
06dbbf0764acf0ce58df122ad7f799702d5d2ba5
[freertos] / FreeRTOS-Plus / CyaSSL / input
1 /* echoclient.c  */\r
2 \r
3 #include "openssl/ssl.h"\r
4 #include "../test.h"\r
5 \r
6 \r
7 int main(int argc, char** argv)\r
8 {\r
9     SOCKET_T sockfd = 0;\r
10 \r
11     FILE* fin  = stdin;\r
12     FILE* fout = stdout;\r
13 \r
14     int inCreated  = 0;\r
15     int outCreated = 0;\r
16 \r
17     char send[1024];\r
18     char reply[1024];\r
19 \r
20     SSL_METHOD* method = 0;\r
21     SSL_CTX*    ctx    = 0;\r
22     SSL*        ssl    = 0;\r
23 \r
24 #ifdef _WIN32\r
25     WSADATA wsd;\r
26     WSAStartup(0x0002, &wsd);\r
27 #endif\r
28 \r
29     if (argc >= 2) {\r
30         fin  = fopen(argv[1], "r"); \r
31         inCreated = 1;\r
32     }\r
33     if (argc >= 3) {\r
34         fout = fopen(argv[2], "w");\r
35         outCreated = 1;\r
36     }\r
37 \r
38     if (!fin)  err_sys("can't open input file");\r
39     if (!fout) err_sys("can't open output file");\r
40 \r
41     tcp_connect(&sockfd);\r
42 \r
43     method = SSLv3_client_method();\r
44     ctx    = SSL_CTX_new(method);\r
45 \r
46     if (SSL_CTX_load_verify_locations(ctx, caCert, 0) != SSL_SUCCESS)\r
47         err_sys("can't load ca file");\r
48 \r
49     ssl = SSL_new(ctx);\r
50 \r
51     SSL_set_fd(ssl, sockfd);\r
52     if (SSL_connect(ssl) != SSL_SUCCESS) err_sys("SSL_connect failed");\r
53 \r
54     while (fgets(send, sizeof(send), fin)) {\r
55 \r
56         int  sendSz = strlen(send) + 1;\r
57 \r
58         if (SSL_write(ssl, send, sendSz) != sendSz)\r
59             err_sys("SSL_write failed");\r
60 \r
61         if (strncmp(send, "quit", 4) == 0) {\r
62             fputs("sending server shutdown command: quit!\n", fout);\r
63             break;\r
64         }\r
65 \r
66         if (SSL_read(ssl, reply, sizeof(reply)) > 0) \r
67             fputs(reply, fout);\r
68     }\r
69 \r
70     SSL_shutdown(ssl);\r
71     SSL_free(ssl);\r
72     SSL_CTX_free(ctx);\r
73 \r
74     fflush(fout);\r
75     if (inCreated)  fclose(fin);\r
76     if (outCreated) fclose(fout);\r
77 \r
78 #ifdef _WIN32\r
79     closesocket(sockfd);\r
80 #else\r
81     close(sockfd);\r
82 #endif\r
83 \r
84     return 0;\r
85 }\r
86 \r
87 \r