/*
* Simple GnuTLS client used for testing.
*
- * Copyright (C) 2011-2013 Simon Ruderich
+ * Copyright (C) 2011-2014 Simon Ruderich
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
#include <config.h>
#include <arpa/inet.h>
+#include <assert.h>
#include <errno.h>
+#include <limits.h>
#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
}
fprintf(fd_write, "\r\n");
fflush(fd_write);
- if (read_http_request(fd_read, buffer, sizeof(buffer)) == -1) {
+ if (read_http_request(fd_read, buffer, sizeof(buffer)) != 0) {
fprintf(stderr, "invalid proxy response\n");
return EXIT_FAILURE;
}
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) {
static int read_http_request(FILE *client_fd, char *request, size_t length) {
char buffer[MAX_REQUEST_LINE];
+ assert(length <= INT_MAX);
if (fgets(request, (int)length, client_fd) == NULL) {
if (ferror(client_fd)) {
perror("read_http_request(): fgets()");
if (ferror(client_fd)) {
perror("read_http_request(): fgets()");
return -1;
+ } else if (feof(client_fd)) {
+ return -2;
}
return 0;