projects
/
project
/
uhttpd.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Load plugins with RTLD_GLOBAL, fixes Lua library exports
[project/uhttpd.git]
/
relay.c
diff --git
a/relay.c
b/relay.c
index
09f53a1
..
83664e6
100644
(file)
--- a/
relay.c
+++ b/
relay.c
@@
-76,6
+76,9
@@
static void relay_process_headers(struct relay *r)
char *val;
buf = ustream_get_read_buf(s, &len);
char *val;
buf = ustream_get_read_buf(s, &len);
+ if (!buf || !len)
+ break;
+
newline = strchr(buf, '\n');
if (!newline)
break;
newline = strchr(buf, '\n');
if (!newline)
break;
@@
-130,6
+133,9
@@
static void relay_read_cb(struct ustream *s, int bytes)
}
buf = ustream_get_read_buf(s, &len);
}
buf = ustream_get_read_buf(s, &len);
+ if (!buf || !len)
+ return;
+
uh_chunk_write(cl, buf, len);
ustream_consume(s, len);
}
uh_chunk_write(cl, buf, len);
ustream_consume(s, len);
}
@@
-162,6
+168,15
@@
static void relay_proc_cb(struct uloop_process *proc, int ret)
relay_close_if_done(r);
}
relay_close_if_done(r);
}
+void uh_relay_kill(struct client *cl, struct relay *r)
+{
+ struct ustream *us = &r->sfd.stream;
+
+ kill(r->proc.pid, SIGKILL);
+ us->eof = true;
+ ustream_state_change(us);
+}
+
void uh_relay_open(struct client *cl, struct relay *r, int fd, int pid)
{
struct ustream *us = &r->sfd.stream;
void uh_relay_open(struct client *cl, struct relay *r, int fd, int pid)
{
struct ustream *us = &r->sfd.stream;