This file is indexed.

/usr/share/perl5/Net/AMQP.pm is in libnet-amqp-perl 0.06~dfsg-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
package Net::AMQP;

=head1 NAME

Net::AMQP - Advanced Message Queue Protocol (de)serialization and representation

=head1 SYNOPSIS

  use Net::AMQP;

  Net::AMQP::Protocol->load_xml_spec('amqp0-8.xml');

  ...

  my @frames = Net::AMQP->parse_raw_frames(\$input);
  
  ...

  foreach my $frame (@frames) {
      if ($frame->can('method_frame') && $frame->method_frame->isa('Net::AMQP::Protocol::Connection::Start')) {
          my $output = Net::AMQP::Frame::Method->new(
              channel => 0,
              method_frame => Net::AMQP::Protocol::Connection::StartOk->new(
                  client_properties => { ... },
                  mechanism         => 'AMQPLAIN',
                  locale            => 'en_US',
                  response          => {
                      LOGIN    => 'guest',
                      PASSWORD => 'guest',
                  },
              ),
          );
          print OUT $output->to_raw_frame();
      }
  }

=head1 DESCRIPTION

This module implements the frame (de)serialization and representation of the Advanced Message Queue Protocol (http://www.amqp.org/).  It is to be used in conjunction with client or server software that does the actual TCP/IP communication.

=cut

use strict;
use warnings;
use Net::AMQP::Protocol;
use Net::AMQP::Frame;
use Net::AMQP::Value;
use Carp;

our $VERSION = 0.06;

use constant {
    _HEADER_LEN => 7,  # 'CnN'
    _FOOTER_LEN => 1,  # 'C'
};

=head1 CLASS METHODS

=head2 parse_raw_frames

  Net::AMQP->parse_raw_frames(\$binary_payload)

Given a scalar reference to a binary string, return a list of L<Net::AMQP::Frame> objects, consuming the data in the string.  Croaks on invalid input.

=cut

sub parse_raw_frames {
    my ($class, $input_ref) = @_;

    my @frames;
    while (length($$input_ref) >= _HEADER_LEN + _FOOTER_LEN) {
        my ($type_id, $channel, $size) = unpack 'CnN', $$input_ref;
        last if length($$input_ref) < _HEADER_LEN + $size + _FOOTER_LEN;
        substr $$input_ref, 0, _HEADER_LEN, '';

        my $payload = substr $$input_ref, 0, $size, '';

        my $frame_end_octet = unpack 'C', substr $$input_ref, 0, _FOOTER_LEN, '';
        if ($frame_end_octet != 206) {
            croak "Invalid frame-end octet ($frame_end_octet)";
        }

        push @frames, Net::AMQP::Frame->factory(
            type_id => $type_id,
            channel => $channel,
            payload => $payload,
        );
    }
    return @frames;
}

=head1 SEE ALSO

L<Net::AMQP::Value>, L<Net::RabbitMQ>, L<AnyEvent::RabbitMQ>,
L<Net::RabbitFoot>, L<POE::Component::Client::AMQP>

=head1 AMQP VERSIONS

AMQP 0-8 is fully supported.

AMQP 0-9, 0-9-1, and 0-10 are usably supported.  There are interoperability
issues with table encodings because the standard disagrees with the dialects of
major implementations (RabbitMQ and Qpid).  For now, Net::AMQP limits itself to
universally agreed table elements.  See
L<http://www.rabbitmq.com/amqp-0-9-1-errata.html> for details.

AMQP 1.0 has not been tested.

=head1 TODO

Address the dialect problem, either via modified spec files that completely
control the wire protocol, or by programmatic request.  The former has
precedent (viz L<spec/qpid.amqp0-8.xml>), but could cause a combinatorial explosion
as more brokers and versions are added.  The latter adds interface complexity.

=head1 QUOTES

"All problems in computer science can be solved by another level of indirection." -- David Wheeler's observation

"...except for the problem of too many layers of indirection." -- Kevlin Henney's corollary

=head1 COPYRIGHT

Copyright (c) 2009 Eric Waters and XMission LLC (http://www.xmission.com/).
Copyright (c) 2012, 2013 Chip Salzenberg and Topsy Labs (http://labs.topsy.com/).
All rights reserved.

This program is free software; you can redistribute it and/or modify it under
the same terms as Perl itself.  The full text of the license can be found in
the LICENSE file included with this module.

=head1 AUTHOR

Eric Waters <ewaters@gmail.com>

=cut

1;