1
2 #ifdef HAVE_CONFIG_H
3 # include <config.h>
4 #endif
5
6 #include <gwenhywfar/syncio_socket.h>
7 #include <gwenhywfar/syncio_tls.h>
8 #include <gwenhywfar/buffer.h>
9
10 #include <unistd.h>
11 #include <sys/types.h>
12 #include <sys/stat.h>
13 #include <fcntl.h>
14 #include <stdio.h>
15 #include <errno.h>
16 #include <string.h>
17
18
19 #define TEST_PATTERN1 \
20 "GET / HTTP/1.1\r\n" \
21 "host: sourceforge.net\r\n" \
22 "Connection: close\r\n" \
23 "\r\n"
24
25
26
27
check_syncio_tls1()28 static int check_syncio_tls1()
29 {
30 GWEN_SYNCIO *sio;
31 GWEN_SYNCIO *baseLayer;
32 int rv;
33 char buffer[2048];
34
35
36 /* create socket layer */
37 sio=GWEN_SyncIo_Socket_new(GWEN_SocketTypeTCP, GWEN_AddressFamilyIP);
38 if (sio==NULL) {
39 fprintf(stderr,
40 "ERROR in check_io_tls1: Could not create socket io layer.\n");
41 return 2;
42 }
43 GWEN_SyncIo_Socket_SetAddress(sio, "sourceforge.net");
44 GWEN_SyncIo_Socket_SetPort(sio, 443);
45
46 baseLayer=sio;
47
48 sio=GWEN_SyncIo_Tls_new(baseLayer);
49 if (sio==NULL) {
50 fprintf(stderr,
51 "ERROR in check_io_tls1: Could not create TLS io layer.\n");
52 return 2;
53 }
54 //GWEN_SyncIo_Tls_SetLocalTrustFile(sio, "test.crt");
55
56 rv=GWEN_SyncIo_Connect(sio);
57 if (rv) {
58 fprintf(stderr,
59 "ERROR in check_io_tls1: Could not connect (%d)\n", rv);
60 return 2;
61 }
62
63 rv=GWEN_SyncIo_WriteForced(sio, (const uint8_t *)TEST_PATTERN1, strlen(TEST_PATTERN1));
64 if (rv<1) {
65 fprintf(stderr,
66 "ERROR in check_io_tls1: Could not write (%d)\n", rv);
67 return 2;
68 }
69
70 for (;;) {
71 rv=GWEN_SyncIo_Read(sio, (uint8_t *)buffer, sizeof(buffer)-1);
72 if (rv==0)
73 break;
74 else if (rv<1) {
75 if (rv==GWEN_ERROR_TIMEOUT || rv==GWEN_ERROR_EOF || rv==GWEN_ERROR_SSL_PREMATURE_CLOSE)
76 break;
77 fprintf(stderr,
78 "ERROR in check_io_tls1: Could not read (%d)\n", rv);
79 return 2;
80 }
81 else {
82 buffer[rv]=0;
83 fprintf(stderr, "Data received: %s\n", buffer);
84 }
85 }
86
87 rv=GWEN_SyncIo_Disconnect(sio);
88 if (rv) {
89 fprintf(stderr,
90 "WARNING in check_io_tls1: Could not disconnect (%d)\n", rv);
91 }
92
93 return 0;
94 }
95
96
97
check_syncio_tls()98 int check_syncio_tls()
99 {
100 int errs=0;
101 int chks=0;
102
103 fprintf(stderr, "IO tls checks... ");
104 chks++;
105 if (check_syncio_tls1())
106 errs++;
107
108 if (chks) {
109 if (chks==errs) {
110 fprintf(stderr, "IO tls checks: all failed.\n");
111 }
112 else if (errs) {
113 fprintf(stderr, "IO tls checks: some failed.\n");
114 }
115 else {
116 fprintf(stderr, "passed.\n");
117 }
118 }
119
120 return errs;
121 }
122
123
124
125
126
127