commit - abe1778147e9ae26eeb75ba1feb5060ee40e28ee
commit + 28239bac769c9db0bcc8f48bdd16db80886f84e9
blob - a9cfbd10ff1a48e28fa49445e79272d079414db4
blob + ca72d81c7c2c00b392c169b96e90353c7d5d1e0c
--- fcgi.c
+++ fcgi.c
char pname[32];
char server[HOST_NAME_MAX + 1];
char path[PATH_MAX];
+ char query[GEMINI_MAXLEN];
int nlen, vlen;
while (fcgi->fcg_toread > 0) {
log_debug("clt %d: path_info: %s", clt->clt_id,
clt->clt_path_info);
+ continue;
+ }
+
+ if (!strcmp(pname, "QUERY_STRING") &&
+ (size_t)vlen < sizeof(query) &&
+ vlen > 0) {
+ fcgi->fcg_toread -= vlen;
+ evbuffer_remove(src, &query, vlen);
+
+ free(clt->clt_query);
+ if ((clt->clt_query = strdup(query)) == NULL)
+ return (-1);
+
+ log_debug("clt %d: query: %s", clt->clt_id,
+ clt->clt_query);
continue;
}
blob - c58fdc1a1477f7d707cd7ad6810cca22c7ebaeac
blob + 45fe5a76745182c85ebc18cb5f8bbbac17c3045e
--- galileo.h
+++ galileo.h
#define PROC_MAX_INSTANCES 32
#define PROXY_NUMPROC 3
#define PROC_PARENT_SOCK_FILENO 3
+#define GEMINI_MAXLEN (1024 + 1) /* NULL */
enum {
IMSG_NONE,
char *clt_server_name;
char *clt_script_name;
char *clt_path_info;
+ char *clt_query;
struct proxy_config *clt_pc;
struct event_asr *clt_evasr;
struct addrinfo *clt_addrinfo;
blob - 537ced406bbea0c7920e338d794faf0ab2550bc7
blob + a8313a7a6bcf16c034dd7cfc8ad9e088e2f833be
--- proxy.c
+++ proxy.c
bufferevent_enable(clt->clt_bev, EV_READ|EV_WRITE);
/* TODO: compute the URL */
- if (evbuffer_add_printf(out, "gemini://%s/%s\r\n",
+ if (evbuffer_add_printf(out, "gemini://%s/%s",
clt->clt_pc->proxy_name, clt->clt_path_info) == -1) {
+ log_warn("bufferevent_printf failed");
+ goto err;
+ }
+
+ if (clt->clt_query &&
+ evbuffer_add_printf(out, "?%s", clt->clt_query) == -1) {
log_warn("bufferevent_printf failed");
+ goto err;
+ }
+
+ if (evbuffer_add(out, "\r\n", 2) == -1) {
+ log_warn("bufferevent_add failed");
goto err;
}
free(clt->clt_server_name);
free(clt->clt_script_name);
free(clt->clt_path_info);
+ free(clt->clt_query);
free(clt);
}