Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse code

fork AMF data serialization part from Kamaitachi

  • Loading branch information...
commit e5c49aeb820884fc4a8a256713466a7f2277dcc8 0 parents
Daisuke Murase authored June 17, 2008
4  .shipit
... ...
@@ -0,0 +1,4 @@
  1
+steps = FindVersion, ChangeVersion, CheckChangeLog, DistTest, Commit, Tag, MakeDist, UploadCPAN
  2
+
  3
+git.tagpattern = %v
  4
+git.push_to    = origin
4  Changes
... ...
@@ -0,0 +1,4 @@
  1
+Revision history for Perl extension Data::AMF
  2
+
  3
+  0.01  Tue Jun 17 20:10:35 2008
  4
+        - original version
381  LICENSE
... ...
@@ -0,0 +1,381 @@
  1
+Terms of Perl itself
  2
+
  3
+a) the GNU General Public License as published by the Free
  4
+   Software Foundation; either version 1, or (at your option) any
  5
+   later version, or
  6
+b) the "Artistic License"
  7
+
  8
+---------------------------------------------------------------------------
  9
+
  10
+The General Public License (GPL)
  11
+Version 2, June 1991
  12
+
  13
+Copyright (C) 1989, 1991 Free Software Foundation, Inc. 675 Mass Ave,
  14
+Cambridge, MA 02139, USA. Everyone is permitted to copy and distribute
  15
+verbatim copies of this license document, but changing it is not allowed.
  16
+
  17
+Preamble
  18
+
  19
+The licenses for most software are designed to take away your freedom to share
  20
+and change it. By contrast, the GNU General Public License is intended to
  21
+guarantee your freedom to share and change free software--to make sure the
  22
+software is free for all its users. This General Public License applies to most of
  23
+the Free Software Foundation's software and to any other program whose
  24
+authors commit to using it. (Some other Free Software Foundation software is
  25
+covered by the GNU Library General Public License instead.) You can apply it to
  26
+your programs, too.
  27
+
  28
+When we speak of free software, we are referring to freedom, not price. Our
  29
+General Public Licenses are designed to make sure that you have the freedom
  30
+to distribute copies of free software (and charge for this service if you wish), that
  31
+you receive source code or can get it if you want it, that you can change the
  32
+software or use pieces of it in new free programs; and that you know you can do
  33
+these things.
  34
+
  35
+To protect your rights, we need to make restrictions that forbid anyone to deny
  36
+you these rights or to ask you to surrender the rights. These restrictions
  37
+translate to certain responsibilities for you if you distribute copies of the
  38
+software, or if you modify it.
  39
+
  40
+For example, if you distribute copies of such a program, whether gratis or for a
  41
+fee, you must give the recipients all the rights that you have. You must make
  42
+sure that they, too, receive or can get the source code. And you must show
  43
+them these terms so they know their rights.
  44
+
  45
+We protect your rights with two steps: (1) copyright the software, and (2) offer
  46
+you this license which gives you legal permission to copy, distribute and/or
  47
+modify the software.
  48
+
  49
+Also, for each author's protection and ours, we want to make certain that
  50
+everyone understands that there is no warranty for this free software. If the
  51
+software is modified by someone else and passed on, we want its recipients to
  52
+know that what they have is not the original, so that any problems introduced by
  53
+others will not reflect on the original authors' reputations.
  54
+
  55
+Finally, any free program is threatened constantly by software patents. We wish
  56
+to avoid the danger that redistributors of a free program will individually obtain
  57
+patent licenses, in effect making the program proprietary. To prevent this, we
  58
+have made it clear that any patent must be licensed for everyone's free use or
  59
+not licensed at all.
  60
+
  61
+The precise terms and conditions for copying, distribution and modification
  62
+follow.
  63
+
  64
+GNU GENERAL PUBLIC LICENSE
  65
+TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND
  66
+MODIFICATION
  67
+
  68
+0. This License applies to any program or other work which contains a notice
  69
+placed by the copyright holder saying it may be distributed under the terms of
  70
+this General Public License. The "Program", below, refers to any such program
  71
+or work, and a "work based on the Program" means either the Program or any
  72
+derivative work under copyright law: that is to say, a work containing the
  73
+Program or a portion of it, either verbatim or with modifications and/or translated
  74
+into another language. (Hereinafter, translation is included without limitation in
  75
+the term "modification".) Each licensee is addressed as "you".
  76
+
  77
+Activities other than copying, distribution and modification are not covered by
  78
+this License; they are outside its scope. The act of running the Program is not
  79
+restricted, and the output from the Program is covered only if its contents
  80
+constitute a work based on the Program (independent of having been made by
  81
+running the Program). Whether that is true depends on what the Program does.
  82
+
  83
+1. You may copy and distribute verbatim copies of the Program's source code as
  84
+you receive it, in any medium, provided that you conspicuously and appropriately
  85
+publish on each copy an appropriate copyright notice and disclaimer of warranty;
  86
+keep intact all the notices that refer to this License and to the absence of any
  87
+warranty; and give any other recipients of the Program a copy of this License
  88
+along with the Program.
  89
+
  90
+You may charge a fee for the physical act of transferring a copy, and you may at
  91
+your option offer warranty protection in exchange for a fee.
  92
+
  93
+2. You may modify your copy or copies of the Program or any portion of it, thus
  94
+forming a work based on the Program, and copy and distribute such
  95
+modifications or work under the terms of Section 1 above, provided that you also
  96
+meet all of these conditions:
  97
+
  98
+a) You must cause the modified files to carry prominent notices stating that you
  99
+changed the files and the date of any change.
  100
+
  101
+b) You must cause any work that you distribute or publish, that in whole or in
  102
+part contains or is derived from the Program or any part thereof, to be licensed
  103
+as a whole at no charge to all third parties under the terms of this License.
  104
+
  105
+c) If the modified program normally reads commands interactively when run, you
  106
+must cause it, when started running for such interactive use in the most ordinary
  107
+way, to print or display an announcement including an appropriate copyright
  108
+notice and a notice that there is no warranty (or else, saying that you provide a
  109
+warranty) and that users may redistribute the program under these conditions,
  110
+and telling the user how to view a copy of this License. (Exception: if the
  111
+Program itself is interactive but does not normally print such an announcement,
  112
+your work based on the Program is not required to print an announcement.)
  113
+
  114
+These requirements apply to the modified work as a whole. If identifiable
  115
+sections of that work are not derived from the Program, and can be reasonably
  116
+considered independent and separate works in themselves, then this License,
  117
+and its terms, do not apply to those sections when you distribute them as
  118
+separate works. But when you distribute the same sections as part of a whole
  119
+which is a work based on the Program, the distribution of the whole must be on
  120
+the terms of this License, whose permissions for other licensees extend to the
  121
+entire whole, and thus to each and every part regardless of who wrote it.
  122
+
  123
+Thus, it is not the intent of this section to claim rights or contest your rights to
  124
+work written entirely by you; rather, the intent is to exercise the right to control
  125
+the distribution of derivative or collective works based on the Program.
  126
+
  127
+In addition, mere aggregation of another work not based on the Program with the
  128
+Program (or with a work based on the Program) on a volume of a storage or
  129
+distribution medium does not bring the other work under the scope of this
  130
+License.
  131
+
  132
+3. You may copy and distribute the Program (or a work based on it, under
  133
+Section 2) in object code or executable form under the terms of Sections 1 and 2
  134
+above provided that you also do one of the following:
  135
+
  136
+a) Accompany it with the complete corresponding machine-readable source
  137
+code, which must be distributed under the terms of Sections 1 and 2 above on a
  138
+medium customarily used for software interchange; or,
  139
+
  140
+b) Accompany it with a written offer, valid for at least three years, to give any
  141
+third party, for a charge no more than your cost of physically performing source
  142
+distribution, a complete machine-readable copy of the corresponding source
  143
+code, to be distributed under the terms of Sections 1 and 2 above on a medium
  144
+customarily used for software interchange; or,
  145
+
  146
+c) Accompany it with the information you received as to the offer to distribute
  147
+corresponding source code. (This alternative is allowed only for noncommercial
  148
+distribution and only if you received the program in object code or executable
  149
+form with such an offer, in accord with Subsection b above.)
  150
+
  151
+The source code for a work means the preferred form of the work for making
  152
+modifications to it. For an executable work, complete source code means all the
  153
+source code for all modules it contains, plus any associated interface definition
  154
+files, plus the scripts used to control compilation and installation of the
  155
+executable. However, as a special exception, the source code distributed need
  156
+not include anything that is normally distributed (in either source or binary form)
  157
+with the major components (compiler, kernel, and so on) of the operating system
  158
+on which the executable runs, unless that component itself accompanies the
  159
+executable.
  160
+
  161
+If distribution of executable or object code is made by offering access to copy
  162
+from a designated place, then offering equivalent access to copy the source
  163
+code from the same place counts as distribution of the source code, even though
  164
+third parties are not compelled to copy the source along with the object code.
  165
+
  166
+4. You may not copy, modify, sublicense, or distribute the Program except as
  167
+expressly provided under this License. Any attempt otherwise to copy, modify,
  168
+sublicense or distribute the Program is void, and will automatically terminate
  169
+your rights under this License. However, parties who have received copies, or
  170
+rights, from you under this License will not have their licenses terminated so long
  171
+as such parties remain in full compliance.
  172
+
  173
+5. You are not required to accept this License, since you have not signed it.
  174
+However, nothing else grants you permission to modify or distribute the Program
  175
+or its derivative works. These actions are prohibited by law if you do not accept
  176
+this License. Therefore, by modifying or distributing the Program (or any work
  177
+based on the Program), you indicate your acceptance of this License to do so,
  178
+and all its terms and conditions for copying, distributing or modifying the
  179
+Program or works based on it.
  180
+
  181
+6. Each time you redistribute the Program (or any work based on the Program),
  182
+the recipient automatically receives a license from the original licensor to copy,
  183
+distribute or modify the Program subject to these terms and conditions. You
  184
+may not impose any further restrictions on the recipients' exercise of the rights
  185
+granted herein. You are not responsible for enforcing compliance by third parties
  186
+to this License.
  187
+
  188
+7. If, as a consequence of a court judgment or allegation of patent infringement
  189
+or for any other reason (not limited to patent issues), conditions are imposed on
  190
+you (whether by court order, agreement or otherwise) that contradict the
  191
+conditions of this License, they do not excuse you from the conditions of this
  192
+License. If you cannot distribute so as to satisfy simultaneously your obligations
  193
+under this License and any other pertinent obligations, then as a consequence
  194
+you may not distribute the Program at all. For example, if a patent license would
  195
+not permit royalty-free redistribution of the Program by all those who receive
  196
+copies directly or indirectly through you, then the only way you could satisfy
  197
+both it and this License would be to refrain entirely from distribution of the
  198
+Program.
  199
+
  200
+If any portion of this section is held invalid or unenforceable under any particular
  201
+circumstance, the balance of the section is intended to apply and the section as
  202
+a whole is intended to apply in other circumstances.
  203
+
  204
+It is not the purpose of this section to induce you to infringe any patents or other
  205
+property right claims or to contest validity of any such claims; this section has
  206
+the sole purpose of protecting the integrity of the free software distribution
  207
+system, which is implemented by public license practices. Many people have
  208
+made generous contributions to the wide range of software distributed through
  209
+that system in reliance on consistent application of that system; it is up to the
  210
+author/donor to decide if he or she is willing to distribute software through any
  211
+other system and a licensee cannot impose that choice.
  212
+
  213
+This section is intended to make thoroughly clear what is believed to be a
  214
+consequence of the rest of this License.
  215
+
  216
+8. If the distribution and/or use of the Program is restricted in certain countries
  217
+either by patents or by copyrighted interfaces, the original copyright holder who
  218
+places the Program under this License may add an explicit geographical
  219
+distribution limitation excluding those countries, so that distribution is permitted
  220
+only in or among countries not thus excluded. In such case, this License
  221
+incorporates the limitation as if written in the body of this License.
  222
+
  223
+9. The Free Software Foundation may publish revised and/or new versions of the
  224
+General Public License from time to time. Such new versions will be similar in
  225
+spirit to the present version, but may differ in detail to address new problems or
  226
+concerns.
  227
+
  228
+Each version is given a distinguishing version number. If the Program specifies a
  229
+version number of this License which applies to it and "any later version", you
  230
+have the option of following the terms and conditions either of that version or of
  231
+any later version published by the Free Software Foundation. If the Program does
  232
+not specify a version number of this License, you may choose any version ever
  233
+published by the Free Software Foundation.
  234
+
  235
+10. If you wish to incorporate parts of the Program into other free programs
  236
+whose distribution conditions are different, write to the author to ask for
  237
+permission. For software which is copyrighted by the Free Software Foundation,
  238
+write to the Free Software Foundation; we sometimes make exceptions for this.
  239
+Our decision will be guided by the two goals of preserving the free status of all
  240
+derivatives of our free software and of promoting the sharing and reuse of
  241
+software generally.
  242
+
  243
+NO WARRANTY
  244
+
  245
+11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS
  246
+NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
  247
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE
  248
+COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM
  249
+"AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR
  250
+IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  251
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
  252
+ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
  253
+PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE,
  254
+YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR
  255
+CORRECTION.
  256
+
  257
+12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED
  258
+TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY
  259
+WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS
  260
+PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
  261
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES
  262
+ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM
  263
+(INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
  264
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
  265
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY
  266
+OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS
  267
+BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
  268
+
  269
+END OF TERMS AND CONDITIONS
  270
+
  271
+
  272
+---------------------------------------------------------------------------
  273
+
  274
+The Artistic License
  275
+
  276
+Preamble
  277
+
  278
+The intent of this document is to state the conditions under which a Package
  279
+may be copied, such that the Copyright Holder maintains some semblance of
  280
+artistic control over the development of the package, while giving the users of the
  281
+package the right to use and distribute the Package in a more-or-less customary
  282
+fashion, plus the right to make reasonable modifications.
  283
+
  284
+Definitions:
  285
+
  286
+-    "Package" refers to the collection of files distributed by the Copyright
  287
+     Holder, and derivatives of that collection of files created through textual
  288
+     modification. 
  289
+-    "Standard Version" refers to such a Package if it has not been modified,
  290
+     or has been modified in accordance with the wishes of the Copyright
  291
+     Holder. 
  292
+-    "Copyright Holder" is whoever is named in the copyright or copyrights for
  293
+     the package. 
  294
+-    "You" is you, if you're thinking about copying or distributing this Package.
  295
+-    "Reasonable copying fee" is whatever you can justify on the basis of
  296
+     media cost, duplication charges, time of people involved, and so on. (You
  297
+     will not be required to justify it to the Copyright Holder, but only to the
  298
+     computing community at large as a market that must bear the fee.) 
  299
+-    "Freely Available" means that no fee is charged for the item itself, though
  300
+     there may be fees involved in handling the item. It also means that
  301
+     recipients of the item may redistribute it under the same conditions they
  302
+     received it. 
  303
+
  304
+1. You may make and give away verbatim copies of the source form of the
  305
+Standard Version of this Package without restriction, provided that you duplicate
  306
+all of the original copyright notices and associated disclaimers.
  307
+
  308
+2. You may apply bug fixes, portability fixes and other modifications derived from
  309
+the Public Domain or from the Copyright Holder. A Package modified in such a
  310
+way shall still be considered the Standard Version.
  311
+
  312
+3. You may otherwise modify your copy of this Package in any way, provided
  313
+that you insert a prominent notice in each changed file stating how and when
  314
+you changed that file, and provided that you do at least ONE of the following:
  315
+
  316
+     a) place your modifications in the Public Domain or otherwise
  317
+     make them Freely Available, such as by posting said modifications
  318
+     to Usenet or an equivalent medium, or placing the modifications on
  319
+     a major archive site such as ftp.uu.net, or by allowing the
  320
+     Copyright Holder to include your modifications in the Standard
  321
+     Version of the Package.
  322
+
  323
+     b) use the modified Package only within your corporation or
  324
+     organization.
  325
+
  326
+     c) rename any non-standard executables so the names do not
  327
+     conflict with standard executables, which must also be provided,
  328
+     and provide a separate manual page for each non-standard
  329
+     executable that clearly documents how it differs from the Standard
  330
+     Version.
  331
+
  332
+     d) make other distribution arrangements with the Copyright Holder.
  333
+
  334
+4. You may distribute the programs of this Package in object code or executable
  335
+form, provided that you do at least ONE of the following:
  336
+
  337
+     a) distribute a Standard Version of the executables and library
  338
+     files, together with instructions (in the manual page or equivalent)
  339
+     on where to get the Standard Version.
  340
+
  341
+     b) accompany the distribution with the machine-readable source of
  342
+     the Package with your modifications.
  343
+
  344
+     c) accompany any non-standard executables with their
  345
+     corresponding Standard Version executables, giving the
  346
+     non-standard executables non-standard names, and clearly
  347
+     documenting the differences in manual pages (or equivalent),
  348
+     together with instructions on where to get the Standard Version.
  349
+
  350
+     d) make other distribution arrangements with the Copyright Holder.
  351
+
  352
+5. You may charge a reasonable copying fee for any distribution of this Package.
  353
+You may charge any fee you choose for support of this Package. You may not
  354
+charge a fee for this Package itself. However, you may distribute this Package in
  355
+aggregate with other (possibly commercial) programs as part of a larger
  356
+(possibly commercial) software distribution provided that you do not advertise
  357
+this Package as a product of your own.
  358
+
  359
+6. The scripts and library files supplied as input to or produced as output from
  360
+the programs of this Package do not automatically fall under the copyright of this
  361
+Package, but belong to whomever generated them, and may be sold
  362
+commercially, and may be aggregated with this Package.
  363
+
  364
+7. C or perl subroutines supplied by you and linked into this Package shall not
  365
+be considered part of this Package.
  366
+
  367
+8. Aggregation of this Package with a commercial distribution is always permitted
  368
+provided that the use of this Package is embedded; that is, when no overt attempt
  369
+is made to make this Package's interfaces visible to the end user of the
  370
+commercial distribution. Such use shall not be construed as a distribution of
  371
+this Package.
  372
+
  373
+9. The name of the Copyright Holder may not be used to endorse or promote
  374
+products derived from this software without specific prior written permission.
  375
+
  376
+10. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
  377
+IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  378
+WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
  379
+PURPOSE.
  380
+
  381
+The End
26  MANIFEST
... ...
@@ -0,0 +1,26 @@
  1
+Changes
  2
+inc/Module/Install.pm
  3
+inc/Module/Install/Base.pm
  4
+inc/Module/Install/Can.pm
  5
+inc/Module/Install/Fetch.pm
  6
+inc/Module/Install/Include.pm
  7
+inc/Module/Install/Makefile.pm
  8
+inc/Module/Install/Metadata.pm
  9
+inc/Module/Install/TestBase.pm
  10
+inc/Module/Install/Win32.pm
  11
+inc/Module/Install/WriteAll.pm
  12
+inc/Spiffy.pm
  13
+inc/Test/Base.pm
  14
+inc/Test/Base/Filter.pm
  15
+inc/Test/Builder.pm
  16
+inc/Test/Builder/Module.pm
  17
+inc/Test/More.pm
  18
+lib/Data/AMF.pm
  19
+LICENSE
  20
+Makefile.PL
  21
+MANIFEST			This list of files
  22
+META.yml
  23
+README
  24
+t/00_compile.t
  25
+t/pod.t
  26
+t/pod_coverage.t
14  MANIFEST.SKIP
... ...
@@ -0,0 +1,14 @@
  1
+\bRCS\b
  2
+\bCVS\b
  3
+^MANIFEST\.
  4
+^Makefile$
  5
+~$
  6
+\.old$
  7
+^blib/
  8
+^pm_to_blib
  9
+^MakeMaker-\d
  10
+\.gz$
  11
+\.cvsignore
  12
+^9\d_.*\.t
  13
+^\.git/
  14
+^\.shipit$
8  Makefile.PL
... ...
@@ -0,0 +1,8 @@
  1
+use inc::Module::Install;
  2
+name 'Data-AMF';
  3
+all_from 'lib/Data/AMF.pm';
  4
+
  5
+test_requires 'Test::More';
  6
+use_test_base;
  7
+auto_include;
  8
+WriteAll;
27  README
... ...
@@ -0,0 +1,27 @@
  1
+This is Perl module Data::AMF.
  2
+
  3
+INSTALLATION
  4
+
  5
+Data::AMF installation is straightforward. If your CPAN shell is set up,
  6
+you should just be able to do
  7
+
  8
+    % cpan Data::AMF
  9
+
  10
+Download it, unpack it, then build it as per the usual:
  11
+
  12
+    % perl Makefile.PL
  13
+    % make && make test
  14
+
  15
+Then install it:
  16
+
  17
+    % make install
  18
+
  19
+DOCUMENTATION
  20
+
  21
+Data::AMF documentation is available as in POD. So you can do:
  22
+
  23
+    % perldoc Data::AMF
  24
+
  25
+to read the documentation online with your favorite pager.
  26
+
  27
+Daisuke Murase
46  lib/Data/AMF.pm
... ...
@@ -0,0 +1,46 @@
  1
+package Data::AMF;
  2
+use 0.008001;
  3
+use strict;
  4
+use warnings;
  5
+
  6
+our $VERSION = '0.01';
  7
+
  8
+use Data::AMF::Parser;
  9
+
  10
+sub deserialize {
  11
+    my ($class, $data) = @_;
  12
+    Data::AMF::Parser->parse($data);
  13
+}
  14
+
  15
+=head1 NAME
  16
+
  17
+Data::AMF - Module abstract (<= 44 characters) goes here
  18
+
  19
+=head1 SYNOPSIS
  20
+
  21
+  use Data::AMF;
  22
+  blah blah blah
  23
+
  24
+=head1 DESCRIPTION
  25
+
  26
+Stub documentation for this module was created by ExtUtils::ModuleMaker.
  27
+It looks like the author of the extension was negligent enough
  28
+to leave the stub unedited.
  29
+
  30
+Blah blah blah.
  31
+
  32
+=head1 AUTHOR
  33
+
  34
+Daisuke Murase <typester@cpan.org>
  35
+
  36
+=head1 COPYRIGHT
  37
+
  38
+This program is free software; you can redistribute
  39
+it and/or modify it under the same terms as Perl itself.
  40
+
  41
+The full text of the license can be found in the
  42
+LICENSE file included with this module.
  43
+
  44
+=cut
  45
+
  46
+1;
28  lib/Data/AMF/Header.pm
... ...
@@ -0,0 +1,28 @@
  1
+package Data::AMF::Header;
  2
+use Moose;
  3
+
  4
+has name => (
  5
+    is       => 'rw',
  6
+    isa      => 'Str',
  7
+    required => 1,
  8
+);
  9
+
  10
+has must_understand => (
  11
+    is       => 'rw',
  12
+    isa      => 'Int',
  13
+    required => 1,
  14
+);
  15
+
  16
+has length => (
  17
+    is       => 'rw',
  18
+    isa      => 'Int',
  19
+    required => 1,
  20
+);
  21
+
  22
+has value => (
  23
+    is => 'rw',
  24
+);
  25
+
  26
+1;
  27
+
  28
+
81  lib/Data/AMF/IO.pm
... ...
@@ -0,0 +1,81 @@
  1
+package Data::AMF::IO;
  2
+use Moose;
  3
+
  4
+use constant ENDIAN => unpack('S', pack('C2', 0, 1)) == 1 ? 'BIG' : 'LITTLE';
  5
+
  6
+has data => (
  7
+    is      => 'rw',
  8
+    isa     => 'Str',
  9
+    default => sub { '' },
  10
+    lazy    => 1,
  11
+);
  12
+
  13
+has pos => (
  14
+    is      => 'rw',
  15
+    isa     => 'Int',
  16
+    default => sub { 0 },
  17
+    lazy    => 1,
  18
+);
  19
+
  20
+__PACKAGE__->meta->make_immutable;
  21
+
  22
+sub read {
  23
+    my ($self, $len) = @_;
  24
+
  25
+    my $data = substr $self->data, $self->pos, $len;
  26
+    $self->pos( $self->pos + $len );
  27
+
  28
+    $data;
  29
+}
  30
+
  31
+sub read_u8 {
  32
+    my $self = shift;
  33
+
  34
+    my $data = $self->read(1);
  35
+    unpack('C', $data);
  36
+}
  37
+
  38
+sub read_u16 {
  39
+    my $self = shift;
  40
+
  41
+    my $data = $self->read(2);
  42
+    unpack('n', $data);
  43
+}
  44
+
  45
+sub read_s16 {
  46
+    my $self = shift;
  47
+
  48
+    my $data = $self->read(2);
  49
+    unpack('s>', $data);
  50
+}
  51
+
  52
+sub read_u32 {
  53
+    my $self = shift;
  54
+
  55
+    my $data = $self->read(4);
  56
+    unpack('N', $data);
  57
+}
  58
+
  59
+sub read_double {
  60
+    my $self = shift;
  61
+
  62
+    my $data = $self->read(8);
  63
+    unpack('d>', $data);
  64
+}
  65
+
  66
+sub read_utf8 {
  67
+    my $self = shift;
  68
+
  69
+    my $len = $self->read_u16;
  70
+    $self->read($len);
  71
+}
  72
+
  73
+sub read_utf8_long {
  74
+    my $self = shift;
  75
+
  76
+    my $len = $self->read_u32;
  77
+    $self->read($len);
  78
+}
  79
+
  80
+1;
  81
+
27  lib/Data/AMF/Message.pm
... ...
@@ -0,0 +1,27 @@
  1
+package Data::AMF::Message;
  2
+use Moose;
  3
+
  4
+has target_uri => (
  5
+    is       => 'rw',
  6
+    isa      => 'Str',
  7
+    required => 1,
  8
+);
  9
+
  10
+has response_uri => (
  11
+    is       => 'rw',
  12
+    isa      => 'Str',
  13
+    required => 1,
  14
+);
  15
+
  16
+has length => (
  17
+    is       => 'rw',
  18
+    isa      => 'Str',
  19
+    required => 1,
  20
+);
  21
+
  22
+has value => (
  23
+    is => 'rw',
  24
+);
  25
+
  26
+1;
  27
+
27  lib/Data/AMF/Object.pm
... ...
@@ -0,0 +1,27 @@
  1
+package Data::AMF::Object;
  2
+use Moose;
  3
+
  4
+use constant PARSER => [
  5
+    \&parse_number,
  6
+    \&parse_boolean,
  7
+    \&parse_string,
  8
+    \&parse_object,
  9
+    \&parse_movieclip,
  10
+    \&parse_null,
  11
+    \&parse_undefined,
  12
+    \&parse_reference,
  13
+    \&parse_ecma_array,
  14
+    sub { },                    # object end
  15
+    \&parse_strict_array,
  16
+    \&parse_date,
  17
+    \&parse_long_string,
  18
+    \&parse_
  19
+];
  20
+
  21
+sub parse {
  22
+    
  23
+}
  24
+
  25
+1;
  26
+
  27
+
26  lib/Data/AMF/Packet.pm
... ...
@@ -0,0 +1,26 @@
  1
+package Data::AMF::RequestPacket;
  2
+use strict;
  3
+use warnings;
  4
+
  5
+use Data::AMF::Parser;
  6
+use Data::AMF::IO;
  7
+
  8
+sub deserialize {
  9
+    my ($class, $data) = @_;
  10
+
  11
+    my $io = Data::AMF::IO->new( data => $data );
  12
+
  13
+    my $ver           = $io->read_u16;
  14
+    my $header_count  = $io->read_u16;
  15
+    my $message_count = $io->read_u16;
  16
+
  17
+    for my $i (1 .. $header_count) {
  18
+        my $name  = $io->read_utf8;
  19
+        my $must  = $io->read_u32;
  20
+        my $len   = $io->read_u32;
  21
+        my $value = 
  22
+    }
  23
+}
  24
+
  25
+1;
  26
+
159  lib/Data/AMF/Parser.pm
... ...
@@ -0,0 +1,159 @@
  1
+package Data::AMF::Parser;
  2
+use strict;
  3
+use warnings;
  4
+
  5
+use Data::AMF::IO;
  6
+
  7
+use constant PARSERS => [
  8
+    \&parse_number,
  9
+    \&parse_boolean,
  10
+    \&parse_string,
  11
+    \&parse_object,
  12
+    \&parse_movieclip,
  13
+    \&parse_null,
  14
+    \&parse_undefined,
  15
+    \&parse_reference,
  16
+    \&parse_ecma_array,
  17
+    sub { },                    # object end
  18
+    \&parse_strict_array,
  19
+    \&parse_date,
  20
+    \&parse_long_string,
  21
+    \&parse_unsupported,
  22
+    \&parse_recordset,
  23
+    \&parse_xml_document,
  24
+    \&parse_typed_object,
  25
+];
  26
+
  27
+sub parse {
  28
+    my ($class, $data) = @_;
  29
+
  30
+    my @res;
  31
+    my $io = ref($data) eq 'Data::AMF::IO' ? $data : Data::AMF::IO->new(data => $data);
  32
+
  33
+    while (defined( my $marker = $io->read_u8 )) {
  34
+        my $p = PARSERS->[$marker] or die;
  35
+        push @res, $p->($io);
  36
+    }
  37
+
  38
+    @res;
  39
+}
  40
+
  41
+sub parse_one {
  42
+    my ($class, $data) = @_;
  43
+
  44
+    my @res;
  45
+    my $io = ref($data) eq 'Data::AMF::IO' ? $data : Data::AMF::IO->new($data);
  46
+
  47
+    my $marker = $io->read_u8;
  48
+    return unless defined $marker;
  49
+
  50
+    my $p = PARSERS->[$marker] or die;
  51
+    $p->($io);
  52
+}
  53
+
  54
+sub parse_number {
  55
+    my $io = shift;
  56
+
  57
+    $io->read_double;
  58
+}
  59
+
  60
+sub parse_boolean {
  61
+    my $io = shift;
  62
+
  63
+    !!$io->read_u8;
  64
+}
  65
+
  66
+sub parse_string {
  67
+    my $io = shift;
  68
+
  69
+    $io->read_utf8;
  70
+}
  71
+
  72
+sub parse_object {
  73
+    my $io = shift;
  74
+
  75
+    my $obj = {};
  76
+
  77
+    while (1) {
  78
+        my $len = $io->read_u16;
  79
+        if ($len == 0) {
  80
+            $io->read_u8;       # object-end marker
  81
+            last
  82
+        }
  83
+        my $key   = $io->read($len);
  84
+        my $value = Data::AMF::Parser->parse_one($io);
  85
+
  86
+        $obj->{ $key } = $value;
  87
+    }
  88
+
  89
+    $obj;
  90
+}
  91
+
  92
+sub parse_movieclip {  }
  93
+
  94
+sub parse_null {
  95
+    undef;
  96
+}
  97
+
  98
+sub parse_undefined {
  99
+    undef;                      # XXX
  100
+}
  101
+
  102
+sub parse_reference {
  103
+    my $io = shift;
  104
+    $io->read_u16;
  105
+
  106
+    return;                     # XXX
  107
+}
  108
+
  109
+sub parse_ecma_array {
  110
+    my $io = shift;
  111
+
  112
+    my $count = $io->read_u32;
  113
+    parse_object($io);
  114
+}
  115
+
  116
+sub parse_strict_array {
  117
+    my $io = shift;
  118
+
  119
+    my $count = $io->read_u32;
  120
+
  121
+    my @res;
  122
+    for (1 .. $count) {
  123
+        push @res, Data::AMF::Parser->parse_one($io);
  124
+    }
  125
+
  126
+    \@res;
  127
+}
  128
+
  129
+sub parse_date {
  130
+    my $io = shift;
  131
+
  132
+    my $msec = $io->read_double;
  133
+    my $tz   = $io->read_s16;
  134
+
  135
+    $msec;
  136
+}
  137
+
  138
+sub parse_long_string {
  139
+    my $io = shift;
  140
+
  141
+    $io->read_utf8_long;
  142
+}
  143
+
  144
+sub parse_unsupported { }
  145
+sub parse_recordset { }
  146
+
  147
+sub parse_xml_document {
  148
+    parse_long_string(shift)  # XXX
  149
+}
  150
+
  151
+sub parse_typed_object {
  152
+    my $io = shift;
  153
+
  154
+    my $class = $io->read_utf8;
  155
+    parse_object($io);
  156
+}
  157
+
  158
+1;
  159
+
74  lib/Data/AMF/RequestPacket.pm
... ...
@@ -0,0 +1,74 @@
  1
+package Data::AMF::RequestPacket;
  2
+use Moose;
  3
+
  4
+use Data::AMF::Parser;
  5
+use Data::AMF::IO;
  6
+
  7
+use Data::AMF::Header;
  8
+use Data::AMF::Message;
  9
+
  10
+has version => (
  11
+    is  => 'rw',
  12
+    isa => 'Int',
  13
+);
  14
+
  15
+has headers => (
  16
+    is  => 'rw',
  17
+    isa => 'ArrayRef',
  18
+);
  19
+
  20
+has messages => (
  21
+    is  => 'rw',
  22
+    isa => 'ArrayRef',
  23
+);
  24
+
  25
+sub deserialize {
  26
+    my ($class, $data) = @_;
  27
+
  28
+    my $io = Data::AMF::IO->new( data => $data );
  29
+
  30
+    my $ver           = $io->read_u16;
  31
+    my $header_count  = $io->read_u16;
  32
+    my $message_count = $io->read_u16;
  33
+
  34
+    my @headers;
  35
+    for my $i (1 .. $header_count) {
  36
+        my $name  = $io->read_utf8;
  37
+        my $must  = $io->read_u32;
  38
+        my $len   = $io->read_u32;
  39
+        my $value = Data::AMF::Parser->parse_one($io);
  40
+
  41
+        push @headers, Data::AMF::Header->new(
  42
+            name            => $name,
  43
+            must_understand => $must,
  44
+            length          => $len,
  45
+            value           => $value,
  46
+        );
  47
+    }
  48
+
  49
+    my @messages;
  50
+    for my $i (1 .. $message_count) {
  51
+        my $target_uri   = $io->read_utf8;
  52
+        my $response_uri = $io->read_utf8;
  53
+        my $len          = $io->read_u32;
  54
+
  55
+        my $data    = $io->read($len);
  56
+        my ($value) = Data::AMF::Parser->parse($data);
  57
+
  58
+        push @messages, Data::AMF::Message->new(
  59
+            target_uri   => $target_uri,
  60
+            response_uri => $response_uri,
  61
+            length       => $len,
  62
+            value        => $value,
  63
+        );
  64
+    }
  65
+
  66
+    Data::AMF::RequestPacket->new(
  67
+        version  => $ver,
  68
+        headers  => \@headers,
  69
+        messages => \@messages,
  70
+    );
  71
+}
  72
+
  73
+1;
  74
+
4  t/00_compile.t
... ...
@@ -0,0 +1,4 @@
  1
+use strict;
  2
+use Test::More tests => 1;
  3
+
  4
+BEGIN { use_ok 'Data::AMF' }
4  t/pod.t
... ...
@@ -0,0 +1,4 @@
  1
+use Test::More;
  2
+eval "use Test::Pod 1.00";
  3
+plan skip_all => "Test::Pod 1.00 required for testing POD" if $@;
  4
+all_pod_files_ok();
5  t/pod_coverage.t
... ...
@@ -0,0 +1,5 @@
  1
+use Test::More;
  2
+eval "use Test::Pod::Coverage 1.04";
  3
+plan skip_all => "Test::Pod::Coverage 1.04 required for testing POD coverage"
  4
+    if $@;
  5
+all_pod_coverage_ok();

0 notes on commit e5c49ae

Please sign in to comment.
Something went wrong with that request. Please try again.