/*
- * $Id: gopher.cc,v 1.206 2007/05/23 20:59:14 hno Exp $
+ * $Id: gopher.cc,v 1.207 2007/05/23 21:07:43 hno Exp $
*
* DEBUG: section 10 Gopher
* AUTHOR: Harvest Derived
if (request) {
xstrncpy(request, path + 1, MAX_URL);
/* convert %xx to char */
- rfc1738_unescape(request);
+ url_convert_hex(request, 0);
}
}
/*
- * $Id: protos.h,v 1.544 2007/05/23 20:59:14 hno Exp $
+ * $Id: protos.h,v 1.545 2007/05/23 21:07:43 hno Exp $
*
*
* SQUID Web Proxy Cache http://www.squid-cache.org/
SQUIDCEXTERN void unlinkdUnlink(const char *);
#endif
+SQUIDCEXTERN char *url_convert_hex(char *org_url, int allocate);
+SQUIDCEXTERN char *url_escape(const char *url);
SQUIDCEXTERN protocol_t urlParseProtocol(const char *, const char *e = NULL);
SQUIDCEXTERN void urlInitialize(void);
SQUIDCEXTERN HttpRequest *urlParse(method_t, char *, HttpRequest *request = NULL);
/*
- * $Id: url.cc,v 1.159 2007/05/23 20:59:14 hno Exp $
+ * $Id: url.cc,v 1.160 2007/05/23 21:07:43 hno Exp $
*
* DEBUG: section 23 URL Parsing
* AUTHOR: Duane Wessels
"0123456789-."
;
+/* convert %xx in url string to a character
+ * Allocate a new string and return a pointer to converted string */
+
+char *
+url_convert_hex(char *org_url, int allocate)
+{
+ static char code[] = "00";
+ char *url = NULL;
+ char *s = NULL;
+ char *t = NULL;
+ url = allocate ? (char *) xstrdup(org_url) : org_url;
+
+ if ((int) strlen(url) < 3 || !strchr(url, '%'))
+ return url;
+
+ for (s = t = url; *s; s++) {
+ if (*s == '%' && *(s + 1) && *(s + 2)) {
+ code[0] = *(++s);
+ code[1] = *(++s);
+ *t++ = (char) strtol(code, NULL, 16);
+ } else {
+ *t++ = *s;
+ }
+ }
+
+ do {
+ *t++ = *s;
+ } while (*s++);
+
+ return url;
+}
+
void
urlInitialize(void)
{