summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsandmann <sandmann>2007-01-16 06:48:53 +0000
committersandmann <sandmann>2007-01-16 06:48:53 +0000
commita737ebdf4e09a0f9b420b9598a6c55bc4762ca29 (patch)
tree6b9fbec17cbb0fa7a449ccd8033171cb2fea9dfb
parent9bd1d808e6677a0a4781a3b59816955fa1eedaa4 (diff)
Some more bytequeue
-rw-r--r--src/lacdns-config.c2
-rw-r--r--src/lacdns-nameserver.c6
-rw-r--r--src/lachttp.c69
3 files changed, 35 insertions, 42 deletions
diff --git a/src/lacdns-config.c b/src/lacdns-config.c
index d7e66aa..0f6f231 100644
--- a/src/lacdns-config.c
+++ b/src/lacdns-config.c
@@ -38,7 +38,7 @@ static void read_etc_resolv_conf (void);
enum {
DEFAULT_N_DOTS = 1,
- DEFAULT_TIMEOUT = 1000,
+ DEFAULT_TIMEOUT = 2000,
DEFAULT_ATTEMPTS = 10,
DEFAULT_ROTATE = FALSE,
};
diff --git a/src/lacdns-nameserver.c b/src/lacdns-nameserver.c
index f9a795f..6662859 100644
--- a/src/lacdns-nameserver.c
+++ b/src/lacdns-nameserver.c
@@ -32,9 +32,9 @@ enum {
QUERY_TIMEOUT = 900000, /* after this long, we consider any
* replies spurious
*/
- MAX_UDP_QUERIES = 64 /* maximum number of outstanding
- * UDP queries
- */
+ MAX_UDP_QUERIES = 8 /* maximum number of outstanding
+ * UDP queries
+ */
};
/*
diff --git a/src/lachttp.c b/src/lachttp.c
index 4175bba..a4603b8 100644
--- a/src/lachttp.c
+++ b/src/lachttp.c
@@ -179,8 +179,8 @@ static void request_emit_header (LacHttpRequest *re
static void request_emit_begin_content (LacHttpRequest *request,
gint length);
static void request_emit_content (LacHttpRequest *request,
- gint length,
- const gchar *data);
+ gsize n_bytes,
+ LacByteQueue *queue);
static void request_emit_end_content (LacHttpRequest *request);
static void request_emit_no_content (LacHttpRequest *request);
static void request_emit_error (LacHttpRequest *request,
@@ -926,10 +926,10 @@ request_parse_chunk_data (LacHttpRequest *request)
unparsed[request->current_chunk_size + 1] == LF)
{
request_emit_content (
- request, request->current_chunk_size, unparsed);
+ request, request->current_chunk_size, request->unparsed);
- lac_byte_queue_delete_head (
- request->unparsed, request->current_chunk_size + 2);
+ /* Delete the CRLF */
+ lac_byte_queue_delete_head (request->unparsed, 2);
request->parser_state = EXPECT_CHUNK_HEADER;
return OK;
@@ -951,9 +951,7 @@ request_parse_chunk_data (LacHttpRequest *request)
if (!request->sent_begin_content)
request_emit_begin_content (request, -1);
- request_emit_content (request, n_bytes, unparsed);
-
- lac_byte_queue_delete_head (request->unparsed, n_bytes);
+ request_emit_content (request, n_bytes, request->unparsed);
}
return NEED_MORE_DATA;
@@ -987,8 +985,8 @@ request_parse_chunk_trailer (LacHttpRequest *request)
static ParseResult
request_parse_length_delimited_body (LacHttpRequest *request)
{
- gsize emit_size, n_bytes;
- const gchar *unparsed = lac_byte_queue_peek (request->unparsed, &n_bytes);
+ gsize emit_size;
+ gsize n_bytes = lac_byte_queue_get_length (request->unparsed);
g_assert (request->content_length > request->n_content_bytes);
@@ -998,9 +996,7 @@ request_parse_length_delimited_body (LacHttpRequest *request)
emit_size = MIN (
n_bytes, request->content_length - request->n_content_bytes);
- request_emit_content (request, emit_size, unparsed);
-
- lac_byte_queue_delete_head (request->unparsed, emit_size);
+ request_emit_content (request, emit_size, request->unparsed);
g_assert (request->n_content_bytes <= request->content_length);
@@ -1021,11 +1017,9 @@ request_parse_length_delimited_body (LacHttpRequest *request)
static ParseResult
request_parse_close_delimited_body (LacHttpRequest *request)
{
- gsize n_bytes;
- const gchar *unparsed = lac_byte_queue_peek (request->unparsed, &n_bytes);
-
- request_emit_content (request, n_bytes, unparsed);
- lac_byte_queue_delete_head (request->unparsed, n_bytes);
+ request_emit_content (
+ request, lac_byte_queue_get_length (request->unparsed),
+ request->unparsed);
return NEED_MORE_DATA;
}
@@ -1131,15 +1125,11 @@ request_parse_end_of_file (LacHttpRequest *request)
if (request->parser_state == EXPECT_CLOSE_DELIMITED_BODY)
{
- gsize n_bytes;
- const gchar *unparsed =
- lac_byte_queue_peek (request->unparsed, &n_bytes);
+ gsize n_bytes = lac_byte_queue_get_length (request->unparsed);
if (n_bytes > 0)
- {
- request_emit_content (request, n_bytes, unparsed);
- lac_byte_queue_delete_head (request->unparsed, n_bytes);
- }
+ request_emit_content (request, n_bytes, request->unparsed);
+
request_emit_end_content (request);
request->parser_state = DONE;
}
@@ -1399,12 +1389,13 @@ request_emit_begin_content (LacHttpRequest *request,
* to avoid copying the data, if possible
*/
static void
-request_emit_content (LacHttpRequest *request,
- gint length,
- const gchar *data)
+request_emit_content (LacHttpRequest *request,
+ gsize length,
+ LacByteQueue *queue)
{
- LacHttpEvent *event = g_new (LacHttpEvent, 1);
gint bytes_to_emit;
+ LacHttpEvent *event = g_new (LacHttpEvent, 1);
+ const gchar *data = lac_byte_queue_peek (queue, NULL);
if (!request->sent_begin_content)
request_emit_begin_content (request, -1);
@@ -1419,16 +1410,18 @@ request_emit_content (LacHttpRequest *request,
request->n_content_bytes += length;
- if (bytes_to_emit <= 0)
- return;
-
- data = data + (length - bytes_to_emit);
-
- event->type = LAC_HTTP_EVENT_CONTENT;
- event->content.length = bytes_to_emit;
- event->content.data = g_memdup (data, bytes_to_emit);
+ if (bytes_to_emit > 0)
+ {
+ data = data + (length - bytes_to_emit);
+
+ event->type = LAC_HTTP_EVENT_CONTENT;
+ event->content.length = bytes_to_emit;
+ event->content.data = g_memdup (data, bytes_to_emit);
+
+ request_queue_event (request, event);
+ }
- request_queue_event (request, event);
+ lac_byte_queue_delete_head (queue, length);
}
static void