- static const char *oprot[] = {
- "http://", "https://"
- };
-
- if (!lws_hdr_total_length(wsi, WSI_TOKEN_HOST))
- goto bail_nuke_ah;
- if (lws_add_http_header_status(wsi, 301, &p, end))
- goto bail_nuke_ah;
-
- lwsl_err("**** %s", hit->origin);
-
- /* > at start indicates deal with by redirect */
- if (hit->origin_protocol & 4)
- n = snprintf((char *)end, 256, "%s%s",
- oprot[hit->origin_protocol & 1],
- hit->origin);
- else
- n = snprintf((char *)end, 256,
- "https://%s/%s/",
- lws_hdr_simple_ptr(wsi, WSI_TOKEN_HOST),
- uri_ptr);
- if (lws_add_http_header_by_token(wsi,
- WSI_TOKEN_HTTP_LOCATION,
- end, n, &p, end))
- goto bail_nuke_ah;
- if (lws_finalize_http_header(wsi, &p, end))
- goto bail_nuke_ah;
- n = lws_write(wsi, start, p - start,
- LWS_WRITE_HTTP_HEADERS);
- if ((int)n < 0)
- goto bail_nuke_ah;
-
- return lws_http_transaction_completed(wsi);
+ static const char *oprot[] = {
+ "http://", "https://"
+ };
+
+ if (!lws_hdr_total_length(wsi, WSI_TOKEN_HOST))
+ goto bail_nuke_ah;
+ if (lws_add_http_header_status(wsi, 301, &p, end))
+ goto bail_nuke_ah;
+
+ lwsl_debug("**** %s", hit->origin);
+
+ /* > at start indicates deal with by redirect */
+ if (hit->origin_protocol & 4)
+ n = snprintf((char *)end, 256, "%s%s",
+ oprot[hit->origin_protocol & 1],
+ hit->origin);
+ else
+ n = snprintf((char *)end, 256,
+ "https://%s/%s/",
+ lws_hdr_simple_ptr(wsi, WSI_TOKEN_HOST),
+ uri_ptr);
+ if (lws_add_http_header_by_token(wsi,
+ WSI_TOKEN_HTTP_LOCATION,
+ end, n, &p, end))
+ goto bail_nuke_ah;
+ if (lws_finalize_http_header(wsi, &p, end))
+ goto bail_nuke_ah;
+ n = lws_write(wsi, start, p - start,
+ LWS_WRITE_HTTP_HEADERS);
+ if ((int)n < 0)
+ goto bail_nuke_ah;
+
+ return lws_http_transaction_completed(wsi);
+ }
+
+#ifdef LWS_WITH_CGI
+ /* did we hit something with a cgi:// origin? */
+ if (hit->origin_protocol == LWSMPRO_CGI) {
+ const char *cmd[] = {
+ NULL, /* replace with cgi path */
+ NULL
+ };
+ unsigned char *p, *end, buffer[256];
+
+ lwsl_debug("%s: cgi\n", __func__);
+ cmd[0] = hit->origin;
+ n = lws_cgi(wsi, cmd, hit->mountpoint_len, 5,
+ hit->cgienv);
+ if (n) {
+ lwsl_err("%s: cgi failed\n");
+ return -1;