projects
/
pazpar2-moved-to-github.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Updates to pz:authentication documentation
[pazpar2-moved-to-github.git]
/
src
/
http.c
diff --git
a/src/http.c
b/src/http.c
index
8dc082d
..
994a452
100644
(file)
--- a/
src/http.c
+++ b/
src/http.c
@@
-1,5
+1,5
@@
/* This file is part of Pazpar2.
/* This file is part of Pazpar2.
- Copyright (C) 2006-2013 Index Data
+ Copyright (C) Index Data
Pazpar2 is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free
Pazpar2 is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free
@@
-81,6
+81,7
@@
struct http_buf
struct http_buf *next;
};
struct http_buf *next;
};
+static int log_level_post = 0;
static void proxy_io(IOCHAN i, int event);
static struct http_channel *http_channel_create(http_server_t http_server,
static void proxy_io(IOCHAN i, int event);
static struct http_channel *http_channel_create(http_server_t http_server,
@@
-606,7
+607,8
@@
struct http_request *http_parse_request(struct http_channel *c,
r->content_len = start + len - buf;
r->content_buf = buf;
r->content_len = start + len - buf;
r->content_buf = buf;
- if (!yaz_strcmp_del("application/x-www-form-urlencoded",
+ if (content_type &&
+ !yaz_strcmp_del("application/x-www-form-urlencoded",
content_type, "; "))
{
http_parse_arguments(r, c->nmem, r->content_buf);
content_type, "; "))
{
http_parse_arguments(r, c->nmem, r->content_buf);
@@
-655,6
+657,7
@@
static struct http_buf *http_serialize_response(struct http_channel *c,
FILE *lf = yaz_log_file();
yaz_log(YLOG_LOG, "Response:");
fwrite(wrbuf_buf(c->wrbuf), 1, wrbuf_len(c->wrbuf), lf);
FILE *lf = yaz_log_file();
yaz_log(YLOG_LOG, "Response:");
fwrite(wrbuf_buf(c->wrbuf), 1, wrbuf_len(c->wrbuf), lf);
+ fputc('\n', lf);
}
return http_buf_bywrbuf(c->http_server, c->wrbuf);
}
}
return http_buf_bywrbuf(c->http_server, c->wrbuf);
}
@@
-839,6
+842,16
@@
void http_send_response(struct http_channel *ch)
struct http_response *rs = ch->response;
struct http_buf *hb;
struct http_response *rs = ch->response;
struct http_buf *hb;
+ yaz_timing_stop(ch->yt);
+ if (ch->request)
+ {
+ yaz_log(YLOG_LOG, "Response: %6.5f %d %s%s%s ",
+ yaz_timing_get_real(ch->yt),
+ iochan_getfd(ch->iochan),
+ ch->request->path,
+ *ch->request->search ? "?" : "",
+ ch->request->search);
+ }
assert(rs);
hb = http_serialize_response(ch, rs);
if (!hb)
assert(rs);
hb = http_serialize_response(ch, rs);
if (!hb)
@@
-934,6
+947,7
@@
static void http_io(IOCHAN i, int event)
fflush(hc->http_server->record_file);
}
#endif
fflush(hc->http_server->record_file);
}
#endif
+ yaz_timing_start(hc->yt);
if (!(hc->request = http_parse_request(hc, &hc->iqueue, reqlen)))
{
yaz_log(YLOG_WARN, "Failed to parse request");
if (!(hc->request = http_parse_request(hc, &hc->iqueue, reqlen)))
{
yaz_log(YLOG_WARN, "Failed to parse request");
@@
-941,12
+955,14
@@
static void http_io(IOCHAN i, int event)
return;
}
hc->response = 0;
return;
}
hc->response = 0;
- yaz_log(YLOG_LOG, "Request: %s %s%s%s", hc->request->method,
+ yaz_log(YLOG_LOG, "Request: - %d %s %s%s%s",
+ iochan_getfd(i),
+ hc->request->method,
hc->request->path,
*hc->request->search ? "?" : "",
hc->request->search);
hc->request->path,
*hc->request->search ? "?" : "",
hc->request->search);
- if (hc->request->content_buf)
- yaz_log(YLOG_LOG, "%s", hc->request->content_buf);
+ if (hc->request->content_buf && log_level_post)
+ yaz_log(log_level_post, "%s", hc->request->content_buf);
if (http_weshouldproxy(hc->request))
http_proxy(hc->request);
else
if (http_weshouldproxy(hc->request))
http_proxy(hc->request);
else
@@
-985,7
+1001,6
@@
static void http_io(IOCHAN i, int event)
(long long) iochan_getfd(i), sz);
fwrite(wb->buf, 1, wb->offset + wb->len,
hc->http_server->record_file);
(long long) iochan_getfd(i), sz);
fwrite(wb->buf, 1, wb->offset + wb->len,
hc->http_server->record_file);
- fputc('\n', hc->http_server->record_file);
fflush(hc->http_server->record_file);
}
#endif
fflush(hc->http_server->record_file);
}
#endif
@@
-1121,6
+1136,7
@@
static void http_channel_destroy(IOCHAN i)
http_buf_destroy_queue(s->http_server, s->proxy->oqueue);
xfree(s->proxy);
}
http_buf_destroy_queue(s->http_server, s->proxy->oqueue);
xfree(s->proxy);
}
+ yaz_timing_destroy(&s->yt);
http_buf_destroy_queue(s->http_server, s->iqueue);
http_buf_destroy_queue(s->http_server, s->oqueue);
http_fire_observers(s);
http_buf_destroy_queue(s->http_server, s->iqueue);
http_buf_destroy_queue(s->http_server, s->oqueue);
http_fire_observers(s);
@@
-1168,6
+1184,7
@@
static struct http_channel *http_channel_create(http_server_t hs,
}
strcpy(r->addr, addr);
r->observers = 0;
}
strcpy(r->addr, addr);
r->observers = 0;
+ r->yt = yaz_timing_create();
return r;
}
return r;
}
@@
-1267,7
+1284,7
@@
int http_init(struct conf_server *server, const char *record_fname)
if (s == -1)
{
yaz_log(YLOG_FATAL|YLOG_ERRNO, "socket");
if (s == -1)
{
yaz_log(YLOG_FATAL|YLOG_ERRNO, "socket");
- freeaddrinfo(ai);
+ freeaddrinfo(af);
return 1;
}
if (ipv6_only >= 0 && ai->ai_family == AF_INET6 &&
return 1;
}
if (ipv6_only >= 0 && ai->ai_family == AF_INET6 &&
@@
-1275,7
+1292,7
@@
int http_init(struct conf_server *server, const char *record_fname)
{
yaz_log(YLOG_FATAL|YLOG_ERRNO, "setsockopt IPV6_V6ONLY %s:%s %d",
server->host, server->port, ipv6_only);
{
yaz_log(YLOG_FATAL|YLOG_ERRNO, "setsockopt IPV6_V6ONLY %s:%s %d",
server->host, server->port, ipv6_only);
- freeaddrinfo(ai);
+ freeaddrinfo(af);
CLOSESOCKET(s);
return 1;
}
CLOSESOCKET(s);
return 1;
}
@@
-1283,7
+1300,7
@@
int http_init(struct conf_server *server, const char *record_fname)
{
yaz_log(YLOG_FATAL|YLOG_ERRNO, "setsockopt SO_REUSEADDR %s:%s",
server->host, server->port);
{
yaz_log(YLOG_FATAL|YLOG_ERRNO, "setsockopt SO_REUSEADDR %s:%s",
server->host, server->port);
- freeaddrinfo(ai);
+ freeaddrinfo(af);
CLOSESOCKET(s);
return 1;
}
CLOSESOCKET(s);
return 1;
}
@@
-1291,11
+1308,11
@@
int http_init(struct conf_server *server, const char *record_fname)
{
yaz_log(YLOG_FATAL|YLOG_ERRNO, "bind %s:%s",
server->host, server->port);
{
yaz_log(YLOG_FATAL|YLOG_ERRNO, "bind %s:%s",
server->host, server->port);
- freeaddrinfo(ai);
+ freeaddrinfo(af);
CLOSESOCKET(s);
return 1;
}
CLOSESOCKET(s);
return 1;
}
- freeaddrinfo(ai);
+ freeaddrinfo(af);
if (listen(s, SOMAXCONN) < 0)
{
yaz_log(YLOG_FATAL|YLOG_ERRNO, "listen %s:%s",
if (listen(s, SOMAXCONN) < 0)
{
yaz_log(YLOG_FATAL|YLOG_ERRNO, "listen %s:%s",
@@
-1436,8
+1453,10
@@
http_server_t http_server_create(void)
hs->proxy_addr = 0;
hs->ref_count = 1;
hs->http_sessions = 0;
hs->proxy_addr = 0;
hs->ref_count = 1;
hs->http_sessions = 0;
-
hs->record_file = 0;
hs->record_file = 0;
+
+ log_level_post = yaz_log_module_level("post");
+
return hs;
}
return hs;
}