static int connect_to_host(const char *hostname, const char *port);
static int read_http_request(FILE *client_fd, char *request, size_t length);
+#if 0
+static void log_function_gnutls(int level, const char *string) {
+ (void)level;
+ fprintf(stderr, " => %s", string);
+}
+#endif
int main (int argc, char *argv[]) {
int result, response;
gnutls_global_init();
gnutls_certificate_allocate_credentials(&xcred);
+#if 0
+ gnutls_global_set_log_level(10);
+ gnutls_global_set_log_function(log_function_gnutls);
+#endif
+
gnutls_certificate_set_x509_trust_file(xcred,
argv[1], GNUTLS_X509_FMT_PEM);
return EXIT_FAILURE;
}
+#ifdef HAVE_GNUTLS_TRANSPORT_SET_INT2
+ /* gnutls_transport_set_int() is a macro. */
+ gnutls_transport_set_int(session, server);
+#else
gnutls_transport_set_ptr(session, (gnutls_transport_ptr_t)server);
+#endif
result = gnutls_handshake(session);
if (result != GNUTLS_E_SUCCESS) {
gnutls_x509_crt_deinit(cert);
+ /* Send a bogus request to the server. Otherwise recent gnutls-serv won't
+ * terminate the connection when gnutls_bye() is used. */
+ gnutls_record_send(session, "GET / HTTP/1.0\r\n\r\n",
+ strlen("GET / HTTP/1.0\r\n\r\n"));
+
gnutls_bye(session, GNUTLS_SHUT_RDWR);
fclose(fd_read);
fclose(fd_write);
gai_hints.ai_socktype = SOCK_STREAM;
gai_hints.ai_protocol = 0;
gai_hints.ai_flags = AI_NUMERICSERV /* given port is numeric */
+#ifdef AI_ADDRCONFIG
| AI_ADDRCONFIG /* supported by this computer */
- | AI_V4MAPPED; /* support IPv4 through IPv6 */
+#endif
+ ;
gai_return = getaddrinfo(hostname, port, &gai_hints, &gai_result);
if (gai_return != 0) {
if (gai_return == EAI_SYSTEM) {