diff options
Diffstat (limited to 'src/lachttp.c')
-rw-r--r-- | src/lachttp.c | 24 |
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); } |