The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package APR::Request::StructureTable;

# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
# ! WARNING: generated by My::ParseSource/
# !          Thu Mar  5 19:44:19 2009
# !          do NOT edit, any changes will be lost !
# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

$APR::Request::StructureTable = [
  {
    'type' => 'apreq_cookie_t',
    'stype' => 'struct apreq_cookie_t',
    'elts' => [
      {
        'type' => 'char *',
        'name' => 'path',
        'comment' => '*< Restricts url path'
      },
      {
        'type' => 'char *',
        'name' => 'domain',
        'comment' => '*< Restricts server domain'
      },
      {
        'type' => 'char *',
        'name' => 'port',
        'comment' => '*< Restricts server port'
      },
      {
        'type' => 'char *',
        'name' => 'comment',
        'comment' => '*< RFC cookies may send a comment'
      },
      {
        'type' => 'char *',
        'name' => 'commentURL',
        'comment' => '*< RFC cookies may place an URL here'
      },
      {
        'type' => 'apr_time_t',
        'name' => 'max_age',
        'comment' => '*< total duration of cookie: -1 == session'
      },
      {
        'type' => 'unsigned',
        'name' => 'flags',
        'comment' => '*< charsets, taint marks, app-specific bits'
      },
      {
        'type' => 'const apreq_value_t',
        'name' => 'v',
        'comment' => '*< "raw" cookie value'
      }
    ],
    'comment' => '* @brief Cookie type, supporting both Netscape and RFC cookie specifications.'
  },
  {
    'type' => 'apreq_handle_t',
    'stype' => 'struct apreq_handle_t',
    'elts' => [
      {
        'type' => 'const struct apreq_module_t *',
        'name' => 'module',
        'comment' => '* the apreq module which implements this handle'
      },
      {
        'type' => 'apr_pool_t *',
        'name' => 'pool',
        'comment' => '* the pool which defines the lifetime of the parsed data'
      },
      {
        'type' => 'apr_bucket_alloc_t *',
        'name' => 'bucket_alloc',
        'comment' => '* the allocator, which persists at least as long as the pool'
      }
    ],
    'comment' => '*
 * @file apreq_module.h
 * @brief Module API
 * @ingroup libapreq2 *
 * An apreq handle associated with a module. The structure
 * may have variable size, because the module may append its own data
 * structures after it.'
  },
  {
    'type' => 'apreq_hook_find_param_ctx_t',
    'stype' => 'struct apreq_hook_find_param_ctx_t',
    'elts' => [
      {
        'type' => 'const char *',
        'name' => 'name'
      },
      {
        'type' => 'apreq_param_t *',
        'name' => 'param'
      },
      {
        'type' => 'apreq_hook_t *',
        'name' => 'prev'
      }
    ],
    'comment' => '*
 * Context struct for the apreq_hook_find_param hook.'
  },
  {
    'type' => 'apreq_hook_t',
    'stype' => 'struct apreq_hook_t',
    'elts' => [
      {
        'type' => 'apreq_hook_function_t',
        'name' => 'hook',
        'comment' => '*< the hook function'
      },
      {
        'type' => 'apreq_hook_t *',
        'name' => 'next',
        'comment' => '*< next item in the linked list'
      },
      {
        'type' => 'apr_pool_t *',
        'name' => 'pool',
        'comment' => '*< pool which allocated this hook'
      },
      {
        'type' => 'void *',
        'name' => 'ctx',
        'comment' => '*< a user defined pointer passed to the hook function'
      }
    ],
    'comment' => '*
 * A hook is called by the parser whenever data arrives in a file
 * upload parameter of the request body. You may associate any number
 * of hooks with a parser instance with apreq_parser_add_hook().'
  },
  {
    'type' => 'apreq_module_t',
    'stype' => 'struct apreq_module_t',
    'elts' => [
      {
        'type' => 'const char *',
        'name' => 'name',
        'comment' => '* name of this apreq module'
      },
      {
        'type' => 'apr_uint32_t',
        'name' => 'magic_number',
        'comment' => '* magic number identifying the module and version'
      },
      {
        'type' => 'apr_status_t(*)(apreq_handle_t * ,const apr_table_t * * )',
        'name' => 'jar',
        'comment' => '* get a table with all cookies'
      },
      {
        'type' => 'apr_status_t(*)(apreq_handle_t * ,const apr_table_t * * )',
        'name' => 'args',
        'comment' => '* get a table with all query string parameters'
      },
      {
        'type' => 'apr_status_t(*)(apreq_handle_t * ,const apr_table_t * * )',
        'name' => 'body',
        'comment' => '* get a table with all body parameters'
      },
      {
        'type' => 'apreq_cookie_t *(*)(apreq_handle_t * ,const char * )',
        'name' => 'jar_get',
        'comment' => '* get a cookie by its name'
      },
      {
        'type' => 'apreq_param_t *(*)(apreq_handle_t * ,const char * )',
        'name' => 'args_get',
        'comment' => '* get a query string parameter by its name'
      },
      {
        'type' => 'apreq_param_t *(*)(apreq_handle_t * ,const char * )',
        'name' => 'body_get',
        'comment' => '* get a body parameter by its name'
      },
      {
        'type' => 'apr_status_t(*)(apreq_handle_t * ,const apreq_parser_t * * )',
        'name' => 'parser_get',
        'comment' => '* gets the parser associated with the request body'
      },
      {
        'type' => 'apr_status_t(*)(apreq_handle_t * ,apreq_parser_t * )',
        'name' => 'parser_set',
        'comment' => '* manually set a parser for the request body'
      },
      {
        'type' => 'apr_status_t(*)(apreq_handle_t * ,apreq_hook_t * )',
        'name' => 'hook_add',
        'comment' => '* add a hook function'
      },
      {
        'type' => 'apr_status_t(*)(apreq_handle_t * ,apr_size_t * )',
        'name' => 'brigade_limit_get',
        'comment' => '* determine the maximum in-memory bytes a brigade may use'
      },
      {
        'type' => 'apr_status_t(*)(apreq_handle_t * ,apr_size_t )',
        'name' => 'brigade_limit_set',
        'comment' => '* set the maximum in-memory bytes a brigade may use'
      },
      {
        'type' => 'apr_status_t(*)(apreq_handle_t * ,apr_uint64_t * )',
        'name' => 'read_limit_get',
        'comment' => '* determine the maximum amount of data that will be fed into a parser'
      },
      {
        'type' => 'apr_status_t(*)(apreq_handle_t * ,apr_uint64_t )',
        'name' => 'read_limit_set',
        'comment' => '* set the maximum amount of data that will be fed into a parser'
      },
      {
        'type' => 'apr_status_t(*)(apreq_handle_t * ,const char * * )',
        'name' => 'temp_dir_get',
        'comment' => '* determine the directory used by the parser for temporary files'
      },
      {
        'type' => 'apr_status_t(*)(apreq_handle_t * ,const char * )',
        'name' => 'temp_dir_set',
        'comment' => '* set the directory used by the parser for temporary files'
      }
    ],
    'comment' => '*
 * @brief Vtable describing the necessary environment functions.'
  },
  {
    'type' => 'apreq_param_t',
    'stype' => 'struct apreq_param_t',
    'elts' => [
      {
        'type' => 'apr_table_t *',
        'name' => 'info',
        'comment' => '*< header table associated with the param'
      },
      {
        'type' => 'apr_bucket_brigade *',
        'name' => 'upload',
        'comment' => '*< brigade used to spool upload files'
      },
      {
        'type' => 'unsigned',
        'name' => 'flags',
        'comment' => '*< charsets, taint marks, app-specific bits'
      },
      {
        'type' => 'const apreq_value_t',
        'name' => 'v',
        'comment' => '*< underlying name/value info'
      }
    ],
    'comment' => '*
 * @file apreq_param.h
 * @brief Request parsing and parameter API
 * @ingroup libapreq2 * Common data structure for params and file uploads'
  },
  {
    'type' => 'apreq_parser_t',
    'stype' => 'struct apreq_parser_t',
    'elts' => [
      {
        'type' => 'apreq_parser_function_t',
        'name' => 'parser',
        'comment' => '* the function which parses chunks of body data'
      },
      {
        'type' => 'const char *',
        'name' => 'content_type',
        'comment' => '* the Content-Type request header'
      },
      {
        'type' => 'apr_pool_t *',
        'name' => 'pool',
        'comment' => '* a pool which outlasts the bucket_alloc.'
      },
      {
        'type' => 'apr_bucket_alloc_t *',
        'name' => 'bucket_alloc',
        'comment' => '* bucket allocator used to create bucket brigades'
      },
      {
        'type' => 'apr_size_t',
        'name' => 'brigade_limit',
        'comment' => '* the maximum in-memory bytes a brigade may use'
      },
      {
        'type' => 'const char *',
        'name' => 'temp_dir',
        'comment' => '* the directory for generating temporary files'
      },
      {
        'type' => 'apreq_hook_t *',
        'name' => 'hook',
        'comment' => '* linked list of hooks'
      },
      {
        'type' => 'void *',
        'name' => 'ctx',
        'comment' => '* internal context pointer used by the parser function'
      }
    ],
    'comment' => '*
 * A request body parser instance.'
  },
  {
    'type' => 'apreq_value_t',
    'stype' => 'struct apreq_value_t',
    'elts' => [
      {
        'type' => 'char *',
        'name' => 'name',
        'comment' => '*< value name'
      },
      {
        'type' => 'apr_size_t',
        'name' => 'nlen',
        'comment' => '*< length of name'
      },
      {
        'type' => 'apr_size_t',
        'name' => 'dlen',
        'comment' => '*< length of data'
      },
      {
        'type' => 'char',
        'name' => 'data[1]',
        'comment' => '*< value data'
      }
    ],
    'comment' => '* @brief libapreq\'s pre-extensible string type'
  },
  {
    'type' => 'struct hook_ctx',
    'stype' => 'struct hook_ctx',
    'elts' => [
      {
        'type' => 'SV *',
        'name' => 'hook'
      },
      {
        'type' => 'SV *',
        'name' => 'bucket_data'
      },
      {
        'type' => 'SV *',
        'name' => 'parent'
      },
      {
        'type' => 'PerlInterpreter *',
        'name' => 'perl'
      }
    ]
  }
];


1;