From 88b2727cbe5eb12a74f83085938670ac348a27d3 Mon Sep 17 00:00:00 2001 From: Chip Black Date: Tue, 28 Dec 2010 04:33:29 -0600 Subject: [PATCH] Add /info method to cgi_blerg --- cgi/cgi_blerg.c | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/cgi/cgi_blerg.c b/cgi/cgi_blerg.c index 6469289..db791a0 100644 --- a/cgi/cgi_blerg.c +++ b/cgi/cgi_blerg.c @@ -135,6 +135,48 @@ int main(int argc, char *argv[]) { } blerg_close(b); + } else if (strncmp(path, "/info", 5) == 0) { + if (strcmp(request_method, "GET") != 0) { + respond_405(); + exit(0); + } + + if (path[5] != '/') { + respond_404(); + exit(0); + } + + ret = parse_url_info(path + 6, &info); + if ((ret & URL_INFO_AUTHOR) == 0) { + respond_404(); + exit(0); + } + + if (!blerg_exists(info.author)) { + respond_404(); + exit(0); + } + + struct blerg *b = blerg_open(info.author); + uint64_t record_count = blerg_get_record_count(b); + blerg_close(b); + + char number[21]; + yajl_gen g = yajl_gen_alloc(&yajl_c, NULL); + yajl_gen_map_open(g); + yajl_gen_string(g, "record_count", 12); + snprintf(number, 21, "%llu", record_count); + yajl_gen_string(g, number, strlen(number)); + yajl_gen_map_close(g); + + const unsigned char *ybuf; + yajl_gen_get_buf(g, &ybuf, &len); + + printf("Content-type: application/json\r\n"); + printf("Content-length: %d\r\n\r\n", len); + write(0, ybuf, len); + + yajl_gen_free(g); } else { respond_404(); exit(0); -- 2.25.1