in native/common/jk_ajp_common.c [248:322]
static int sc_for_req_header(const char *header_name)
{
char header[16];
size_t len = strlen(header_name);
const char *p = header_name;
int i = 0;
/* ACCEPT-LANGUAGE is the longest header
* that is of interest.
*/
if (len < 4 || len > 15)
return UNKNOWN_METHOD;
while (*p) {
header[i++] = toupper((unsigned char)*p);
p++;
}
header[i] = '\0';
p = &header[1];
/* Always do memcmp including the final \0-termination character.
*/
switch (header[0]) {
case 'A':
if (memcmp(p, "CCEPT", 6) == 0) {
if (!header[6])
return SC_ACCEPT;
if (header[6] == '-') {
p += 6;
if (memcmp(p, "CHARSET", 8) == 0)
return SC_ACCEPT_CHARSET;
if (memcmp(p, "ENCODING", 9) == 0)
return SC_ACCEPT_ENCODING;
if (memcmp(p, "LANGUAGE", 9) == 0)
return SC_ACCEPT_LANGUAGE;
}
return UNKNOWN_METHOD;
}
if (memcmp(p, "UTHORIZATION", 13) == 0)
return SC_AUTHORIZATION;
break;
case 'C':
if(memcmp(p, "OOKIE2", 7) == 0)
return SC_COOKIE2;
if (memcmp(p, "OOKIE", 6) == 0)
return SC_COOKIE;
if(memcmp(p, "ONNECTION", 10) == 0)
return SC_CONNECTION;
if(memcmp(p, "ONTENT-TYPE", 12) == 0)
return SC_CONTENT_TYPE;
if(memcmp(p, "ONTENT-LENGTH", 14) == 0)
return SC_CONTENT_LENGTH;
break;
case 'H':
if(memcmp(p, "OST", 4) == 0)
return SC_HOST;
break;
case 'P':
if(memcmp(p, "RAGMA", 6) == 0)
return SC_PRAGMA;
break;
case 'R':
if(memcmp(p, "EFERER", 7) == 0)
return SC_REFERER;
break;
case 'U':
if(memcmp(p, "SER-AGENT", 10) == 0)
return SC_USER_AGENT;
break;
default:
break;;
}
return UNKNOWN_METHOD;
}