The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
To parse the libapreq headers into xsbuilder/tables:

        % perl ../../build/xsbuilder.pl run

To build the xs/ directory and configure the tests:

        % perl Makefile.PL -apxs /path/to/apache2/bin/apxs        

To run the test suite:

        % make test




DEVELOPER NOTES

APR::Request::* should be a simple translation of the apreq C API:

apreq_handle_t -> APR::Request-derived instance.
apreq_module_t -> APR::Request-derived class.
apreq_param_t  -> APR::Request::Param
apreq_cookie_t -> APR::Request::Cookie
apreq_parser_t -> APR::Request::Parser (todo)
apreq_hook_t   -> APR::Request::Hook (todo)


--------------------------------------------------
Current APR:: module breakdown
--------------------------------------------------

APR::Request

  subs:
    encode
    decode

  methods:
    parse
    read_limit
    brigade_limit
    temp_dir
    header_in
    header_out
    jar_status
    args_status
    body_status
    param_status
    disable_uploads

  missing:
    add_hook (requires APR::Request::Hook)
    parser (requires APR::Request::Parser)

==================================================

APR::Request::CGI @ISA=(APR::Request)

  method:
    param

  ctor:
    new

==================================================

APR::Request::Apache2 @ISA=(APR::Request)

  method:
    param

  ctor:
    new

==================================================

APR::Request::Error  @ISA=(APR::Error, APR::Request)

  subs:
    strerror

==================================================

APR::Request::Cookie

  provides:
    APR::Request::jar()
    APR::Request::Cookie::Table
      methods:
        get, FETCH
        FIRSTKEY, NEXTKEY
        cookie_class
      missing:
        rest of const apr_table_t * API (do, etc)

  methods:
    name
    value
    secure
    version
    is_tainted
    as_string
    bake
    bake2
    expires
    path
    domain
    port
    comment
    commentURL

    freeze
    thaw

    bind_handle

  ctor:
    new

==================================================

APR::Request::Param

  provides:
    APR::Request::args()
    APR::Request::body()
    APR::Request::param()
    APR::Request::params()

    APR::Request::Param::Table
      methods:
        get, FETCH
        FIRSTKEY, NEXTKEY
        param_class
        uploads
        do
      missing:
        rest of const apr_table_t * API

    APR::Request::Brigade
      methods:
        TIEHANDLE, new
        READ
        READLINE
    APR::Request::Brigade::IO
        read
        readline

  methods:
    name
    value
    info
    upload
    upload_link
    upload_slurp
    upload_size
    upload_type
    upload_tempname
    upload_io
    upload_fh

--------------------------------------------------
Current (pure-perl) Apache2:: module breakdown
--------------------------------------------------

Apache2::Request @ISA=(Apache2::RequestRec, APR::Request::Apache2)

  ctor:
    new

  methods:
    instance           (deprecated, ok to remove this)
    disable_uploads

  missing:
    hook_data
    upload_hook

  2.04-deltas:
    env() removed
    params() method inherited from APR::Request; not deprecated anymore.
    parms() removed
    status() removed.
    args() needs to become Apache2::RequestRec::args!!!
    The args() change probably deserves a runtime warning in 2.05-dev.

==================================================

Apache2::Cookie @ISA=(APR::Request::Cookie)

  provides:
    Apache2::Cookie::Jar @ISA=(APR::Request::Apache2)
      methods:
        cookies
        status

  subs:
    encode
    decode

  methods:
    new
    fetch
    set_attr
    freeze
    thaw
    value

  2.04-deltas:
    env() removed

==================================================

Apache2::Upload @ISA=(APR::Request::Param)

  provides:
    Apache2::Request::upload

  methods:
    slurp
    type
    size
    link
    tempname
    fh
    io
    filename
    bb          (need to deprecate this)

  2.04-deltas:
    Apache::Upload::Brigade is now APR::Request::Brigade.