package Net::OBEX::Packet::Request::Put;
use strict;
use warnings;
our $VERSION = '1.001001'; # VERSION
use Carp;
use base 'Net::OBEX::Packet::Request::Base';
# opcodes 0x02 (0x82)
sub new {
my $class = shift;
croak "Must have even number of arguments to new()"
if @_ & 1;
my %args = @_;
$args{ +lc } = delete $args{ $_ } for keys %args;
%args = (
is_final => 0,
headers => [],
%args,
);
return bless \%args, $class;
}
sub make {
my $self = shift;
my $packet = $self->is_final() ? "\x82" : "\x02";
my $headers = join '', @{$self->headers};
$packet .= pack 'n', 3+length $headers;
$packet .= $headers;
return $self->raw($packet);
}
sub is_final {
my $self = shift;
if ( @_ ) {
$self->{ is_final } = shift;
}
return $self->{ is_final };
}
1;
__END__
=head1 NAME
Net::OBEX::Packet::Request::Put - create OBEX protocol C<Put> request packets.
=head1 SYNOPSIS
use Net::OBEX::Packet::Request::Put;
my $put = Net::OBEX::Packet::Request::Put->new(
headers => [ $bunch, $of, $raw, $headers ],
);
my $put_packet = $put->make;
$put->headers([]); # reset headers.
$put->is_final( 1 ); # set final bit
my $put_packet2 = $put->make;
=head1 DESCRIPTION
B<WARNING!!! This module is in an early alpha stage. It is recommended
that you use it only for testing.>
The module provides means to create OBEX protocol C<Put>
(C<0x02> and C<0x82>) packets.
It is used internally by L<Net::OBEX::Packet::Request> module and you
probably want to use that instead.
=head1 CONSTRUCTOR
=head2 new
$pack = Net::OBEX::Packet::Request::Put->new;
$pack2 = Net::OBEX::Packet::Request::Put->new(
is_final => 1,
headers => [ $some, $raw, $headers ],
);
Returns a Net::OBEX::Packet::Request::Put object, takes
two arguments, all of which are optional. The possible arguments are
as follows:
=head3 headers
Net::OBEX::Packet::Request::Put->new(
headers => [ $some, $raw, $headers ],
);
B<Optional>. Takes an arrayref as a value, elements of which are raw OBEX
packet headers. See L<Net::OBEX::Packet::Headers> if you want to create
those.
=head3 is_final
Net::OBEX::Packet::Request::Put->new( is_final => 1 );
B<Optional>. When set to a true value will set packet's "Final Bit".
B<Defaults to:> C<0>
=head1 METHODS
=head2 make
my $raw_packet = $pack->make;
Takes no arguments, returns a raw OBEX packet ready to go down the wire.
=head2 raw
my $raw_packet = $pack->raw;
Takes no arguments, must be called after C<make()> call, returns the
raw OBEX packet which was made with last C<make()> (i.e. the last
return value of C<make()>).
=head2 is_final
my $old_is_final = $pack->is_final;
$pack->is_final( 1 );
Returns either true or false value indicating whether or not the
"final bit" of the packet is set. Takes one argument, which is either
a true or false value, indicating if the next packet made by C<make()>
should have its final bit set.
=head2 headers
my $headers_ref = $pack->headers;
$pack->headers( [ $bunch, $of, $raw, $headers ] );
Returns an arrayref of currently set OBEX packet
headers. Takes one optional argument which is an arrayref, elements of
which are raw OBEX
packet headers. See L<Net::OBEX::Packet::Headers> if you want to create
those. If you want a packet with no headers use an empty arrayref
as an argument.
=head1 REPOSITORY
Fork this module on GitHub:
L<https://github.com/zoffixznet/Net-OBEX>
=head1 BUGS
To report bugs or request features, please use
L<https://github.com/zoffixznet/Net-OBEX/issues>
If you can't access GitHub, you can email your request
to C<bug-Net-OBEX at rt.cpan.org>
=head1 AUTHOR
Zoffix Znet <zoffix at cpan.org>
(L<http://zoffix.com/>, L<http://haslayout.net/>)
=head1 LICENSE
You can use and distribute this module under the same terms as Perl itself.
See the C<LICENSE> file included in this distribution for complete
details.
=cut