1 /* This example code is placed in the public domain. */
10 #include <sys/types.h>
11 #include <sys/socket.h>
12 #include <arpa/inet.h>
14 #include <gnutls/gnutls.h>
16 /* A very basic TLS client, with anonymous authentication.
20 #define MSG "GET / HTTP/1.0\r\n\r\n"
22 extern int tcp_connect (void);
23 extern void tcp_close (int sd
);
29 gnutls_session_t session
;
30 char buffer
[MAX_BUF
+ 1];
31 gnutls_anon_client_credentials_t anoncred
;
32 /* Need to enable anonymous KX specifically. */
34 gnutls_global_init ();
36 gnutls_anon_allocate_client_credentials (&anoncred
);
38 /* Initialize TLS session
40 gnutls_init (&session
, GNUTLS_CLIENT
);
42 /* Use default priorities */
43 gnutls_priority_set_direct (session
, "PERFORMANCE:+ANON-DH:!ARCFOUR-128",
46 /* put the anonymous credentials to the current session
48 gnutls_credentials_set (session
, GNUTLS_CRD_ANON
, anoncred
);
50 /* connect to the peer
54 gnutls_transport_set_ptr (session
, (gnutls_transport_ptr_t
) sd
);
56 /* Perform the TLS handshake
58 ret
= gnutls_handshake (session
);
62 fprintf (stderr
, "*** Handshake failed\n");
68 printf ("- Handshake was completed\n");
71 gnutls_record_send (session
, MSG
, strlen (MSG
));
73 ret
= gnutls_record_recv (session
, buffer
, MAX_BUF
);
76 printf ("- Peer has closed the TLS connection\n");
81 fprintf (stderr
, "*** Error: %s\n", gnutls_strerror (ret
));
85 printf ("- Received %d bytes: ", ret
);
86 for (ii
= 0; ii
< ret
; ii
++)
88 fputc (buffer
[ii
], stdout
);
92 gnutls_bye (session
, GNUTLS_SHUT_RDWR
);
98 gnutls_deinit (session
);
100 gnutls_anon_free_client_credentials (anoncred
);
102 gnutls_global_deinit ();