gnutls_datum_t session_ticket_key;
gnutls_anti_replay_t anti_replay;
int record_max_size;
+const char *http_data_file = NULL;
static void tcp_server(const char *name, int port);
/* end of globals */
return http_buffer;
}
+static char *peer_print_data(gnutls_session_t session, int *ret_length)
+{
+ gnutls_datum_t data;
+ char *http_buffer;
+ size_t len;
+ int ret;
+
+ ret = gnutls_load_file(http_data_file, &data);
+ if (ret < 0) {
+ ret = asprintf(&http_buffer,
+ "HTTP/1.0 404 Not Found\r\n"
+ "Content-type: text/html\r\n"
+ "\r\n"
+ "<HTML><HEAD><TITLE>404 Not Found</TITLE></HEAD>\n"
+ "<BODY><H1>Couldn't read %s</H1></BODY></HTML>\n\n",
+ http_data_file);
+ if (ret < 0)
+ return NULL;
+
+ *ret_length = strlen(http_buffer);
+ return http_buffer;
+ }
+
+ ret = asprintf(&http_buffer,
+ "HTTP/1.0 200 OK\r\n"
+ "Content-Type: application/octet-stream\r\n"
+ "Content-Length: %u\r\n"
+ "\r\n",
+ data.size);
+ if (ret < 0)
+ return NULL;
+ len = ret;
+ http_buffer = realloc(http_buffer, len + data.size);
+ memcpy(&http_buffer[len], data.data, data.size);
+ gnutls_free(data.data);
+ *ret_length = len + data.size;
+ return http_buffer;
+}
+
const char *human_addr(const struct sockaddr *sa, socklen_t salen,
char *buf, size_t buflen)
{
}
/* *response = peer_print_info(session, request+4, h, response_length); */
if (http != 0) {
- *response = peer_print_info(session, response_length, h);
+ if (http_data_file == NULL)
+ *response = peer_print_info(session, response_length, h);
+ else
+ *response = peer_print_data(session, response_length);
} else {
int ret;
strip(request);
if (HAVE_OPT(SNI_HOSTNAME_FATAL))
sni_hostname_fatal = 1;
+ if (HAVE_OPT(HTTPDATA))
+ http_data_file = OPT_ARG(HTTPDATA);
+
}
/* session resuming support */