static HTTP_HEADER * parse_http_headers (unsigned char **buf, int *num_headers) { int i; HTTP_HEADER *hdrs; char *hdr_end; errno_t safec_rc; *num_headers = 0; hdrs = malloc(sizeof(HTTP_HEADER) * MAX_HEADERS); if (!hdrs) { EST_LOG_ERR("malloc failure"); return (NULL); } /* * Find offset of header deliminter */ safec_rc = strstr_s((char *) *buf, strnlen_s((char *) *buf, RSIZE_MAX_STR), "\r\n\r\n", MAX_HEADER_DELIMITER_LEN, &hdr_end); if (safec_rc != EOK) { EST_LOG_INFO("strstr_s error 0x%xO\n", safec_rc); } /* * Skip the first line */ skip((char **)buf, "\r\n"); for (i = 0; i < MAX_HEADERS; i++) { hdrs[i].name = skip_quoted((char **)buf, ":", " ", 0); hdrs[i].value = skip((char **)buf, "\r\n"); fflush(stdout); EST_LOG_INFO("Found HTTP header -> %s:%s", hdrs[i].name, hdrs[i].value); fflush(stdout); if (hdrs[i].name[0] == '\0') { break; } *num_headers = i + 1; if ((*buf) > (unsigned char *)hdr_end) { break; } } EST_LOG_INFO("Found %d HTTP headers\n", *num_headers); return (hdrs); }
const char * getmark(const char * mark, const char * buf) { return strstr_s(buf, mark); }