MCPcopy Create free account
hub / github.com/apache/cloudberry / http_parse_host

Function http_parse_host

gpcontrib/gpcloud/lib/http_parser.cpp:2287–2366  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2285}
2286
2287static int
2288http_parse_host(const char * buf, struct http_parser_url *u, int found_at) {
2289 assert(u->field_set & (1 << UF_HOST));
2290 enum http_host_state s;
2291
2292 const char *p;
2293 size_t buflen = u->field_data[UF_HOST].off + u->field_data[UF_HOST].len;
2294
2295 u->field_data[UF_HOST].len = 0;
2296
2297 s = found_at ? s_http_userinfo_start : s_http_host_start;
2298
2299 for (p = buf + u->field_data[UF_HOST].off; p < buf + buflen; p++) {
2300 enum http_host_state new_s = http_parse_host_char(s, *p);
2301
2302 if (new_s == s_http_host_dead) {
2303 return 1;
2304 }
2305
2306 switch(new_s) {
2307 case s_http_host:
2308 if (s != s_http_host) {
2309 u->field_data[UF_HOST].off = p - buf;
2310 }
2311 u->field_data[UF_HOST].len++;
2312 break;
2313
2314 case s_http_host_v6:
2315 if (s != s_http_host_v6) {
2316 u->field_data[UF_HOST].off = p - buf;
2317 }
2318 u->field_data[UF_HOST].len++;
2319 break;
2320
2321 case s_http_host_v6_zone_start:
2322 case s_http_host_v6_zone:
2323 u->field_data[UF_HOST].len++;
2324 break;
2325
2326 case s_http_host_port:
2327 if (s != s_http_host_port) {
2328 u->field_data[UF_PORT].off = p - buf;
2329 u->field_data[UF_PORT].len = 0;
2330 u->field_set |= (1 << UF_PORT);
2331 }
2332 u->field_data[UF_PORT].len++;
2333 break;
2334
2335 case s_http_userinfo:
2336 if (s != s_http_userinfo) {
2337 u->field_data[UF_USERINFO].off = p - buf ;
2338 u->field_data[UF_USERINFO].len = 0;
2339 u->field_set |= (1 << UF_USERINFO);
2340 }
2341 u->field_data[UF_USERINFO].len++;
2342 break;
2343
2344 default:

Callers 1

http_parser_parse_urlFunction · 0.85

Calls 1

http_parse_host_charFunction · 0.85

Tested by

no test coverage detected