snprintf(redirect_status, sizeof(redirect_status),
"%d", req->redirect_status);
inet_ntop(cl->srv_addr.family, &cl->srv_addr.in, local_addr, sizeof(local_addr));
+ snprintf(local_port, sizeof(local_port), "%d", cl->srv_addr.port);
inet_ntop(cl->peer_addr.family, &cl->peer_addr.in, remote_addr, sizeof(remote_addr));
+ snprintf(remote_port, sizeof(remote_port), "%d", cl->peer_addr.port);
blobmsg_parse(hdr_policy, __HDR_MAX, tb, blob_data(data), blob_len(data));
for (i = 0; i < ARRAY_SIZE(proc_header_env); i++) {
static void proc_close_fds(struct client *cl)
{
- close(cl->dispatch.proc.r.sfd.fd.fd);
+ struct dispatch_proc *p = &cl->dispatch.proc;
+
+ close(p->r.sfd.fd.fd);
+ if (p->wrfd.fd >= 0)
+ close(p->wrfd.fd);
}
static void proc_handle_close(struct relay *r, int ret)
return retlen;
}
-bool uh_create_process(struct client *cl, struct path_info *pi,
- void (*cb)(struct client *cl, struct path_info *pi))
+bool uh_create_process(struct client *cl, struct path_info *pi, char *url,
+ void (*cb)(struct client *cl, struct path_info *pi, char *url))
{
struct dispatch *d = &cl->dispatch;
struct dispatch_proc *proc = &d->proc;
close(wfd[1]);
uh_close_fds();
- cb(cl, pi);
+ cb(cl, pi, url);
exit(0);
}