1 /* This example code is placed in the public domain. */
10 #include <gnutls/gnutls.h>
12 /* Those functions are defined in other examples.
14 extern void check_alert (gnutls_session_t session
, int ret
);
15 extern int tcp_connect (void);
16 extern void tcp_close (int sd
);
19 #define USERNAME "user"
20 #define PASSWORD "pass"
21 #define CAFILE "/etc/ssl/certs/ca-certificates.crt"
22 #define MSG "GET / HTTP/1.0\r\n\r\n"
29 gnutls_session_t session
;
30 char buffer
[MAX_BUF
+ 1];
31 gnutls_srp_client_credentials_t srp_cred
;
32 gnutls_certificate_credentials_t cert_cred
;
34 gnutls_global_init ();
36 gnutls_srp_allocate_client_credentials (&srp_cred
);
37 gnutls_certificate_allocate_credentials (&cert_cred
);
39 gnutls_certificate_set_x509_trust_file (cert_cred
, CAFILE
,
41 gnutls_srp_set_client_credentials (srp_cred
, USERNAME
, PASSWORD
);
47 /* Initialize TLS session
49 gnutls_init (&session
, GNUTLS_CLIENT
);
52 /* Set the priorities.
54 gnutls_priority_set_direct (session
, "NORMAL:+SRP:+SRP-RSA:+SRP-DSS", NULL
);
56 /* put the SRP credentials to the current session
58 gnutls_credentials_set (session
, GNUTLS_CRD_SRP
, srp_cred
);
59 gnutls_credentials_set (session
, GNUTLS_CRD_CERTIFICATE
, cert_cred
);
61 gnutls_transport_set_ptr (session
, (gnutls_transport_ptr_t
) sd
);
63 /* Perform the TLS handshake
67 ret
= gnutls_handshake (session
);
69 while (ret
< 0 && gnutls_error_is_fatal (ret
) == 0);
73 fprintf (stderr
, "*** Handshake failed\n");
79 printf ("- Handshake was completed\n");
82 gnutls_record_send (session
, MSG
, strlen (MSG
));
84 ret
= gnutls_record_recv (session
, buffer
, MAX_BUF
);
85 if (gnutls_error_is_fatal (ret
) != 0 || ret
== 0)
89 printf ("- Peer has closed the GnuTLS connection\n");
94 fprintf (stderr
, "*** Error: %s\n", gnutls_strerror (ret
));
99 check_alert (session
, ret
);
103 printf ("- Received %d bytes: ", ret
);
104 for (ii
= 0; ii
< ret
; ii
++)
106 fputc (buffer
[ii
], stdout
);
108 fputs ("\n", stdout
);
110 gnutls_bye (session
, GNUTLS_SHUT_RDWR
);
116 gnutls_deinit (session
);
118 gnutls_srp_free_client_credentials (srp_cred
);
119 gnutls_certificate_free_credentials (cert_cred
);
121 gnutls_global_deinit ();