=head1 NAME

Net::FastCGI::Constant - FastCGI protocol constants.

=head1 DESCRIPTION

FastCGI protocol constants.

=head1 CONSTANTS

Constants can either be imported individually or in sets grouped by tag names. 
The tag names are:

=head2 C<:common>

=over 4

=item C<FCGI_MAX_CONTENT_LEN>

Maximum number of octets that the content component of the record can hold. (C<65535>)

=item C<FCGI_HEADER_LEN>

Number of octets in C<FCGI_Header>. (C<8>)

=item C<FCGI_VERSION_1>

Value for C<version> component of C<FCGI_Header>. (C<1>)

=item C<FCGI_NULL_REQUEST_ID>

Value for C<request_id> component of C<FCGI_Header>. (C<0>)

=back

=head2 C<:type>

Values for C<type> component of C<FCGI_Header>.

=over 4

=item C<FCGI_BEGIN_REQUEST>

=item C<FCGI_ABORT_REQUEST>

=item C<FCGI_END_REQUEST>

=item C<FCGI_PARAMS>

=item C<FCGI_STDIN>

=item C<FCGI_STDOUT>

=item C<FCGI_STDERR>

=item C<FCGI_DATA>

=item C<FCGI_GET_VALUES>

=item C<FCGI_GET_VALUES_RESULT>

=item C<FCGI_UNKNOWN_TYPE>

=item C<FCGI_MAXTYPE>

=back

=head2 C<:flag>

Mask for C<flags> component of C<FCGI_BeginRequestBody>.

=over 4

=item C<FCGI_KEEP_CONN>

=back

=head2 C<:role>

Values for C<role> component of C<FCGI_BeginRequestBody>.

=over 4

=item C<FCGI_RESPONDER>

=item C<FCGI_AUTHORIZER>

=item C<FCGI_FILTER>

=back

=head2 C<:protocol_status>

Values for C<protocol_status> component of C<FCGI_EndRequestBody>.

=over 4

=item C<FCGI_REQUEST_COMPLETE>

=item C<FCGI_CANT_MPX_CONN>

=item C<FCGI_OVERLOADED>

=item C<FCGI_UNKNOWN_ROLE>

=back

=head2 C<:value>

Variable names for C<FCGI_GET_VALUES> / C<FCGI_GET_VALUES_RESULT> records.

=over 4

=item C<FCGI_MAX_CONNS>

=item C<FCGI_MAX_REQS>

=item C<FCGI_MPXS_CONNS>

=back

=head2 C<:pack>

C<pack()> / C<unpack()> templates

=over 4

=item C<FCGI_Header>

    Octet/      0        |        1        |
        /                |                 |
       | 0 1 2 3 4 5 6 7 | 0 1 2 3 4 5 6 7 |
       +-----------------+-----------------+
     0 |     Version     |      Type       |
       +-----------------+-----------------+
     2 |             Request ID            |
       +-----------------+-----------------+
     4 |          Content Length           |
       +-----------------+-----------------+
     6 | Padding Length  |    Reserved     |
       +-----------------+-----------------+
       Total 8 octets

    Template: CCnnCx

    my ($version, $type, $request_id, $content_length, $padding_length)
      = unpack(FCGI_Header, $octets);

=item C<FCGI_BeginRequestBody> 

    Octet/      0        |        1        |
        /                |                 |
       | 0 1 2 3 4 5 6 7 | 0 1 2 3 4 5 6 7 |
       +-----------------+-----------------+
     0 |                Role               |
       +-----------------+-----------------+
     2 |      Flags      |                 |
       +-----------------+                 +
     4 |                                   |
       +              Reserved             +
     6 |                                   |
       +-----------------+-----------------+
       Total 8 octets

    Template: nCx5

    my ($role, $flags) = unpack(FCGI_BeginRequestBody, $octets);

=item C<FCGI_EndRequestBody> 

    Octet/      0        |        1        |
        /                |                 |
       | 0 1 2 3 4 5 6 7 | 0 1 2 3 4 5 6 7 |
       +-----------------+-----------------+
     0 |                                   |
       +        Application Status         +
     2 |                                   |
       +-----------------+-----------------+
     4 | Protocol Status |                 |
       +-----------------+    Reserved     +
     6 |                                   |
       +-----------------+-----------------+
       Total 8 octets

    Template: NCx3

    my ($app_status, $protocol_status) 
      = unpack(FCGI_EndRequestBody, $octets);

=item C<FCGI_UnknownTypeBody> 

    Octet/      0        |        1        |
        /                |                 |
       | 0 1 2 3 4 5 6 7 | 0 1 2 3 4 5 6 7 |
       +-----------------+-----------------+
     0 |  Unknown Type   |                 |
       +-----------------+                 +
     2 |                                   |
       +                                   +
     4 |              Reserved             |
       +                                   +
     6 |                                   |
       +-----------------+-----------------+
       Total 8 octets

    Template: Cx7

    my $unknown_type = unpack(FCGI_UnknownTypeBody, $octets);

=back

=head2 C<:name>

Arrays containing names of value components. These are read-only.

=over 4

=item C<@FCGI_TYPE_NAME>

    print $FCGI_TYPE_NAME[FCGI_BEGIN_REQUEST]; # FCGI_BEGIN_REQUEST

=item C<@FCGI_ROLE_NAME>

    print $FCGI_ROLE_NAME[FCGI_RESPONDER]; # FCGI_RESPONDER

=item C<@FCGI_PROTOCOL_STATUS_NAME>

    print $FCGI_PROTOCOL_STATUS_NAME[FCGI_OVERLOADED]; # FCGI_OVERLOADED

=back

I<Note>

It's not safe to assume that C<exists> works for validation purposes, index C<0> 
might be C<undef>. 

Use boolean context instead:

    ($FCGI_TYPE_NAME[$type])
      || die;

=head1 EXPORTS

None by default. All functions can be exported using the C<:all> tag or individually.

=head1 SEE ALSO

=over 4

=item L<http://www.fastcgi.com/devkit/doc/fcgi-spec.html>

=back

=head1 AUTHOR

Christian Hansen C<chansen@cpan.org>

=head1 COPYRIGHT

Copyright 2008-2010 by Christian Hansen.

This library is free software; you can redistribute it and/or modify 
it under the same terms as Perl itself.