/** * Creates a new connection parser using the provided configuration. Because * the configuration structure is used directly, in a multithreaded environment * you are not allowed to change the structure, ever. If you have a need to * change configuration on per-connection basis, make a copy of the configuration * structure to go along with every connection parser. * * @param cfg * @return A pointer to a newly created htp_connp_t instance. */ htp_connp_t *htp_connp_create(htp_cfg_t *cfg) { htp_connp_t *connp = calloc(1, sizeof (htp_connp_t)); if (connp == NULL) return NULL; // Use the supplied configuration structure connp->cfg = cfg; // Create a new connection object connp->conn = htp_conn_create(connp); if (connp->conn == NULL) { free(connp); return NULL; } connp->in_status = HTP_OK; // Request parsing connp->in_line_size = cfg->field_limit_hard; connp->in_line_len = 0; connp->in_line = malloc(connp->in_line_size); if (connp->in_line == NULL) { htp_conn_destroy(connp->conn); free(connp); return NULL; } connp->in_header_line_index = -1; connp->in_state = htp_connp_REQ_IDLE; // Response parsing connp->out_line_size = cfg->field_limit_hard; connp->out_line_len = 0; connp->out_line = malloc(connp->out_line_size); if (connp->out_line == NULL) { free(connp->in_line); htp_conn_destroy(connp->conn); free(connp); return NULL; } connp->out_header_line_index = -1; connp->out_state = htp_connp_RES_IDLE; connp->in_status = STREAM_STATE_NEW; connp->out_status = STREAM_STATE_NEW; return connp; }
htp_connp_t *htp_connp_create(htp_cfg_t *cfg) { htp_connp_t *connp = calloc(1, sizeof (htp_connp_t)); if (connp == NULL) return NULL; // Use the supplied configuration structure connp->cfg = cfg; // Create a new connection. connp->conn = htp_conn_create(); if (connp->conn == NULL) { free(connp); return NULL; } // Request parsing connp->in_state = htp_connp_REQ_IDLE; connp->in_status = HTP_STREAM_NEW; // Response parsing connp->out_state = htp_connp_RES_IDLE; connp->out_status = HTP_STREAM_NEW; return connp; }