{
int i;
int len = 0;
- const char hex[] = "0123456789abcdef";
+ static const char hex[] = "0123456789abcdef";
for (i = 0; (i < slen) && (len < blen); i++)
{
return (i == slen) ? len : -1;
}
-int uh_b64decode(char *buf, int blen, const unsigned char *src, int slen)
+int uh_b64decode(char *buf, int blen, const void *src, int slen)
{
+ const unsigned char *str = src;
unsigned int cout = 0;
unsigned int cin = 0;
int len = 0;
int i = 0;
- for (i = 0; (i <= slen) && (src[i] != 0); i++)
+ for (i = 0; (i <= slen) && (str[i] != 0); i++)
{
- cin = src[i];
+ cin = str[i];
if ((cin >= '0') && (cin <= '9'))
cin = cin - '0' + 52;
buf[len++] = 0;
return len;
}
+
+bool uh_path_match(const char *prefix, const char *url)
+{
+ int len = strlen(prefix);
+
+ if (strncmp(url, prefix, len) != 0)
+ return false;
+
+ return url[len] == '/' || url[len] == 0;
+}
+
+char *uh_split_header(char *str)
+{
+ char *val;
+
+ val = strchr(str, ':');
+ if (!val)
+ return NULL;
+
+ *val = 0;
+ val++;
+
+ while (isspace(*val))
+ val++;
+
+ return val;
+}
+
+bool uh_addr_rfc1918(struct uh_addr *addr)
+{
+ uint32_t a;
+
+ if (addr->family != AF_INET)
+ return false;
+
+ a = htonl(addr->in.s_addr);
+ return ((a >= 0x0A000000) && (a <= 0x0AFFFFFF)) ||
+ ((a >= 0xAC100000) && (a <= 0xAC1FFFFF)) ||
+ ((a >= 0xC0A80000) && (a <= 0xC0A8FFFF));
+
+ return 0;
+}