static RequestInfo * create_request_info(TSHttpTxn txn) { RequestInfo *req_info; char *url; int url_len; TSMBuffer buf; TSMLoc loc; req_info = (RequestInfo *)TSmalloc(sizeof(RequestInfo)); url = TSHttpTxnEffectiveUrlStringGet(txn, &url_len); req_info->effective_url = TSstrndup(url, url_len); TSfree(url); TSHttpTxnClientReqGet(txn, &buf, &loc); req_info->buf = TSMBufferCreate(); TSHttpHdrClone(req_info->buf, buf, loc, &(req_info->http_hdr_loc)); TSHandleMLocRelease(buf, TS_NULL_MLOC, loc); req_info->client_addr = TSmalloc(sizeof(struct sockaddr)); memmove((void *)req_info->client_addr, (void *)TSHttpTxnClientAddrGet(txn), sizeof(struct sockaddr)); return req_info; }
static RequestInfo * create_request_info(TSHttpTxn txn) { RequestInfo *req_info; char *url; int url_len; TSMBuffer buf; TSMLoc loc; const struct sockaddr *sa; req_info = (RequestInfo *)TSmalloc(sizeof(RequestInfo)); memset(req_info, 0, sizeof(RequestInfo)); url = TSHttpTxnEffectiveUrlStringGet(txn, &url_len); req_info->effective_url = TSstrndup(url, url_len); TSfree(url); TSHttpTxnClientReqGet(txn, &buf, &loc); req_info->buf = TSMBufferCreate(); TSHttpHdrClone(req_info->buf, buf, loc, &(req_info->http_hdr_loc)); TSHandleMLocRelease(buf, TS_NULL_MLOC, loc); sa = TSHttpTxnClientAddrGet(txn); switch (sa->sa_family) { case AF_INET: memcpy(&req_info->client_addr.sin, sa, sizeof(struct sockaddr_in)); break; case AF_INET6: memcpy(&req_info->client_addr.sin6, sa, sizeof(struct sockaddr_in6)); break; default: break; } return req_info; }