summaryrefslogtreecommitdiff
path: root/src/lachttp.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lachttp.c')
-rw-r--r--src/lachttp.c24
1 files changed, 16 insertions, 8 deletions
diff --git a/src/lachttp.c b/src/lachttp.c
index c68858f..7265f71 100644
--- a/src/lachttp.c
+++ b/src/lachttp.c
@@ -45,9 +45,14 @@ enum {
* choked on the pipeline and retry all
* outstanding requests.
*/
- MAX_LINE = 4096 /* we won't accept headers or status
+ MAX_LINE = 4096, /* we won't accept headers or status
* lines longer than this
*/
+
+ CHOKE_RECOVERY = 0 /* number of milliseconds we wait before
+ * retrying on a server that choked on a
+ * pipeline
+ */
};
typedef enum {
@@ -161,6 +166,7 @@ static void request_emit_events (LacHttpRequest *re
static void request_emit_connecting (LacHttpRequest *request);
static void request_emit_sent (LacHttpRequest *request);
static void request_emit_host_found (LacHttpRequest *request,
+ const char *hostname,
const LacAddress *addr);
static void request_emit_status_line (LacHttpRequest *request,
gint major,
@@ -1265,12 +1271,14 @@ request_emit_sent (LacHttpRequest *request)
}
static void
-request_emit_host_found (LacHttpRequest *request,
- const LacAddress *addr)
+request_emit_host_found (LacHttpRequest *request,
+ const char *hostname,
+ const LacAddress *addr)
{
LacHttpEvent *event = g_new (LacHttpEvent, 1);
event->type = LAC_HTTP_EVENT_HOST_FOUND;
+ event->host_found.hostname = hostname;
event->host_found.address = lac_address_copy (addr);
request_queue_event (request, event);
@@ -1503,8 +1511,8 @@ lac_http_request_cancel (LacHttpRequest *request)
static void
address_callback (const LacAddress *new_addr,
- gpointer data,
- const GError *err)
+ gpointer data,
+ const GError *err)
{
LacHttpRequest *request = data;
@@ -1521,7 +1529,7 @@ address_callback (const LacAddress *new_addr,
http_host = http_host_new (
new_addr, request->uri->u.http.port);
- request_emit_host_found (request, new_addr);
+ request_emit_host_found (request, request->uri->u.http.host, new_addr);
http_host_add_request (http_host, request);
request->host = http_host;
@@ -1953,8 +1961,8 @@ answer_timeout (gpointer data)
if (transport->did_pipeline &&
(!g_queue_is_empty (transport->in_progress) || transport->current))
{
- g_print ("CHOKED\n");
- server_choked_on_pipeline (transport, 4000);
+ g_print ("CHOKED (%s)\n");
+ server_choked_on_pipeline (transport, CHOKE_RECOVERY);
http_host_transport_will_close_notify (transport->host, transport);
lac_connection_close (transport->connection);
}