b61d135abcd656964b1c9fedb938d0f47a44357f galt Wed Apr 17 16:06:06 2013 -0700 adding support for HTTPS by not hardwiring the protocol and port in the URL but detecting when https is in use diff --git src/lib/cheapcgi.c src/lib/cheapcgi.c index f91eaf7..b82a932 100644 --- src/lib/cheapcgi.c +++ src/lib/cheapcgi.c @@ -78,40 +78,54 @@ actual URL construction */ { return getenv("SERVER_NAME"); } char *cgiServerPort() /* Return port number of server, default 80 if not found */ { char *port = getenv("SERVER_PORT"); if (port) return port; else return "80"; } +boolean cgiServerHttpsIsOn() +/* Return true if HTTPS is on */ +{ +char *httpsIsOn = getenv("HTTPS"); +if (httpsIsOn) + return sameString(httpsIsOn, "on"); +else + return FALSE; +} + char *cgiServerNamePort() /* Return name of server with port if different than 80 */ { char *port = cgiServerPort(); -char *namePort = cgiServerName(); +char *name = cgiServerName(); struct dyString *result = newDyString(256); -if (namePort) +char *defaultPort = "80"; +if (cgiServerHttpsIsOn()) + defaultPort = "443"; + +if (name) { - dyStringPrintf(result,"%s",namePort); - if (differentString(port, "80")) + dyStringPrintf(result,"%s",name); + if (differentString(port, defaultPort)) dyStringPrintf(result,":%s",port); return dyStringCannibalize(&result); } else return NULL; } char *cgiRemoteAddr() /* Return IP address of client (or "unknown"). */ { static char *dunno = "unknown"; char *remoteAddr = getenv("REMOTE_ADDR"); if (remoteAddr == NULL) remoteAddr = dunno; return remoteAddr;