Blame alp2/alp2_pp.h

Packit Service 384592
/*
Packit Service 384592
* ModSecurity for Apache 2.x, http://www.modsecurity.org/
Packit Service 384592
* Copyright (c) 2004-2013 Trustwave Holdings, Inc. (http://www.trustwave.com/)
Packit Service 384592
*
Packit Service 384592
* You may not use this file except in compliance with
Packit Service 384592
* the License.  You may obtain a copy of the License at
Packit Service 384592
*
Packit Service 384592
*     http://www.apache.org/licenses/LICENSE-2.0
Packit Service 384592
*
Packit Service 384592
* If any of the files related to licensing are missing or if you have any
Packit Service 384592
* other questions related to licensing please contact Trustwave Holdings, Inc.
Packit Service 384592
* directly using the email address security@modsecurity.org.
Packit Service 384592
*/
Packit Service 384592
Packit Service 384592
#ifndef _ALP2_LL_H_
Packit Service 384592
#define _ALP2_LL_H_
Packit Service 384592
Packit Service 384592
#include <apr_general.h>
Packit Service 384592
#include <apr_md5.h>
Packit Service 384592
#include <apr_strings.h>
Packit Service 384592
#include <apr_tables.h>
Packit Service 384592
#include <apr_md5.h>
Packit Service 384592
Packit Service 384592
/* -- Constants -- */
Packit Service 384592
Packit Service 384592
#define ALP2_MAX_LINE_SIZE 16384
Packit Service 384592
Packit Service 384592
#define ALP2_ERROR_INCORRECT_STATE  -1001
Packit Service 384592
#define ALP2_ERROR_FATAL            -1002
Packit Service 384592
Packit Service 384592
#define ALP2_DONE       0
Packit Service 384592
#define ALP2_NEED_DATA  1
Packit Service 384592
Packit Service 384592
#define ALP2_EVENT_ENTRY_START          1
Packit Service 384592
#define ALP2_EVENT_ENTRY_END            2
Packit Service 384592
#define ALP2_EVENT_PART_START           3
Packit Service 384592
#define ALP2_EVENT_PART_END             4
Packit Service 384592
#define ALP2_EVENT_PART_DATA            5
Packit Service 384592
Packit Service 384592
Packit Service 384592
/* -- Data structures -- */
Packit Service 384592
Packit Service 384592
typedef struct alp2_pp_part_t alp2_pp_part_t;
Packit Service 384592
Packit Service 384592
struct alp2_pp_part_t {
Packit Service 384592
    int id; // XXX int here but unsigned int other places???
Packit Service 384592
    
Packit Service 384592
    /* Relative to the beginning of the entry, not
Packit Service 384592
     * including the boundary lines. Just content.
Packit Service 384592
     */
Packit Service 384592
    size_t offset;
Packit Service 384592
    
Packit Service 384592
    size_t size;
Packit Service 384592
};
Packit Service 384592
Packit Service 384592
typedef struct alp2_pp_entry_t alp2_pp_entry_t;
Packit Service 384592
Packit Service 384592
struct alp2_pp_entry_t {
Packit Service 384592
    apr_pool_t *mp;
Packit Service 384592
    apr_array_header_t *parts;
Packit Service 384592
    
Packit Service 384592
    /* Entry offset and size include 
Packit Service 384592
     * the delimiting boundaries. 
Packit Service 384592
     */
Packit Service 384592
    size_t offset;
Packit Service 384592
    size_t size;
Packit Service 384592
Packit Service 384592
    const char *boundary;
Packit Service 384592
Packit Service 384592
    apr_md5_ctx_t *md5_context;
Packit Service 384592
    uint8_t md5_digest[APR_MD5_DIGESTSIZE];
Packit Service 384592
};
Packit Service 384592
Packit Service 384592
typedef struct alp2_pp_t alp2_pp_t;
Packit Service 384592
Packit Service 384592
struct alp2_pp_t {
Packit Service 384592
    void *user_data;
Packit Service 384592
    int (*callback)(alp2_pp_t *alp, int event_type);
Packit Service 384592
Packit Service 384592
    /* The memory pool used during the parsing of
Packit Service 384592
     * individual audit log entries. Cleared between
Packit Service 384592
     * entries.
Packit Service 384592
     */
Packit Service 384592
    apr_pool_t *mp;
Packit Service 384592
Packit Service 384592
    unsigned int errored;
Packit Service 384592
    unsigned int done;
Packit Service 384592
    
Packit Service 384592
    const char *boundary;
Packit Service 384592
    char *last_processed_part;
Packit Service 384592
    char *current_line;
Packit Service 384592
    
Packit Service 384592
    /* The number of bytes processed since
Packit Service 384592
     * the beginning or the last reset.
Packit Service 384592
     */
Packit Service 384592
    size_t current_offset;
Packit Service 384592
    
Packit Service 384592
    const char *input_buf;
Packit Service 384592
    size_t input_len;
Packit Service 384592
    size_t input_pos;
Packit Service 384592
Packit Service 384592
    char *line_buf;
Packit Service 384592
    size_t line_pos;
Packit Service 384592
    size_t line_size;
Packit Service 384592
    unsigned int line_has_start;
Packit Service 384592
    size_t line_offset;
Packit Service 384592
    
Packit Service 384592
    alp2_pp_part_t *current_part;
Packit Service 384592
    alp2_pp_entry_t *current_entry;
Packit Service 384592
};
Packit Service 384592
Packit Service 384592
Packit Service 384592
/* Functions. */
Packit Service 384592
Packit Service 384592
int alp2_pp_init(alp2_pp_t *alp_pp, void *user_data,
Packit Service 384592
    int (*callback)(alp2_pp_t *alp, int event_type), apr_pool_t *mp);
Packit Service 384592
Packit Service 384592
int alp2_pp_process(alp2_pp_t *alp_pp, const char *data, size_t len);
Packit Service 384592
Packit Service 384592
void alp2_pp_terminate(alp2_pp_t *alp_pp);
Packit Service 384592
Packit Service 384592
char *alp2_pp_line_chomp(alp2_pp_t *alp_pp);
Packit Service 384592
Packit Service 384592
#endif