From 2759be0c6fdc8227eada40ff8a8b65523d385dee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gr=C3=A9gory=20Soutad=C3=A9?= Date: Thu, 13 May 2021 09:39:51 +0200 Subject: [PATCH] Initial commit --- .gitignore | 2 + LICENCE | 674 ++++++++++++++++++ Makefile | 75 ++ README.md | 90 +++ include/log.h | 35 + include/rmsdk/adept.h | 802 +++++++++++++++++++++ include/rmsdk/aescrypt.h | 51 ++ include/rmsdk/cossl.h | 184 +++++ include/rmsdk/dp.h | 411 +++++++++++ include/rmsdk/dpcrypt.h | 143 ++++ include/rmsdk/dpdev.h | 260 +++++++ include/rmsdk/dpdoc.h | 491 +++++++++++++ include/rmsdk/dpdrm.h | 188 +++++ include/rmsdk/dpext.h | 33 + include/rmsdk/dpio.h | 204 ++++++ include/rmsdk/dplib.h | 351 +++++++++ include/rmsdk/dpnet.h | 24 + include/rmsdk/dpres.h | 24 + include/rmsdk/dpsec.h | 21 + include/rmsdk/dptimer.h | 87 +++ include/rmsdk/dputils.h | 68 ++ include/rmsdk/librmsdk.h | 308 ++++++++ include/rmsdk/mdom.h | 956 +++++++++++++++++++++++++ include/rmsdk/meta.h | 66 ++ include/rmsdk/metro.h | 26 + include/rmsdk/package.h | 477 +++++++++++++ include/rmsdk/rib.h | 21 + include/rmsdk/uft.h | 1409 +++++++++++++++++++++++++++++++++++++ include/rmsdk/xpath.h | 507 +++++++++++++ include/rmsdk/zip.h | 252 +++++++ include/rmsdk_wrapper.h | 684 ++++++++++++++++++ scripts/acsmdownloader.sh | 4 + scripts/activate.sh | 4 + scripts/find_libs.sh | 178 +++++ scripts/setup.sh | 74 ++ src/acsmdownloader.cpp | 263 +++++++ src/activate.cpp | 382 ++++++++++ 37 files changed, 9829 insertions(+) create mode 100644 .gitignore create mode 100644 LICENCE create mode 100644 Makefile create mode 100644 README.md create mode 100644 include/log.h create mode 100644 include/rmsdk/adept.h create mode 100644 include/rmsdk/aescrypt.h create mode 100644 include/rmsdk/cossl.h create mode 100644 include/rmsdk/dp.h create mode 100644 include/rmsdk/dpcrypt.h create mode 100644 include/rmsdk/dpdev.h create mode 100644 include/rmsdk/dpdoc.h create mode 100644 include/rmsdk/dpdrm.h create mode 100644 include/rmsdk/dpext.h create mode 100644 include/rmsdk/dpio.h create mode 100644 include/rmsdk/dplib.h create mode 100644 include/rmsdk/dpnet.h create mode 100644 include/rmsdk/dpres.h create mode 100644 include/rmsdk/dpsec.h create mode 100644 include/rmsdk/dptimer.h create mode 100644 include/rmsdk/dputils.h create mode 100644 include/rmsdk/librmsdk.h create mode 100644 include/rmsdk/mdom.h create mode 100644 include/rmsdk/meta.h create mode 100644 include/rmsdk/metro.h create mode 100644 include/rmsdk/package.h create mode 100644 include/rmsdk/rib.h create mode 100644 include/rmsdk/uft.h create mode 100644 include/rmsdk/xpath.h create mode 100644 include/rmsdk/zip.h create mode 100644 include/rmsdk_wrapper.h create mode 100755 scripts/acsmdownloader.sh create mode 100755 scripts/activate.sh create mode 100755 scripts/find_libs.sh create mode 100755 scripts/setup.sh create mode 100644 src/acsmdownloader.cpp create mode 100644 src/activate.cpp diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4325fa5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +output/ +lib/ diff --git a/LICENCE b/LICENCE new file mode 100644 index 0000000..94a9ed0 --- /dev/null +++ b/LICENCE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..46d2f61 --- /dev/null +++ b/Makefile @@ -0,0 +1,75 @@ +RMSDK_VERSION ?= 10.0.4 +RMSDK_C_VERSION ?= 10_0 +CROSS ?= arm-linux-gnueabihf- +CXX = $(CROSS)g++ +CC = $(CROSS)gcc + +DEBUG ?= 1 +NO_BUILD_OPENSSL ?= 0 +INSTALL_DIR ?= $(PWD)/deploy +RMSDK_LIBDIR = $(PWD)/lib/rmsdk/$(RMSDK_VERSION) + +OUTPUT_DIR ?= output/$(RMSDK_VERSION) + +TARGET_ACSM = $(OUTPUT_DIR)/acsmdownloader +SRCS_ACSM = src/acsmdownloader.cpp +TARGET_ACTIVATE = $(OUTPUT_DIR)/activate +SRCS_ACTIVATE = src/activate.cpp + +TARGETS = $(TARGET_ACSM) $(TARGET_ACTIVATE) +CXXFLAGS += -I./include -I./include/rmsdk/ `pkg-config --cflags Qt5Core Qt5Network` -fPIC -DRMSDK_$(RMSDK_C_VERSION) -Wall + +ifeq ($(DEBUG),1) +CXXFLAGS += -ggdb +endif + +LDFLAGS=-L. -L$(RMSDK_LIBDIR) -L./lib -lrmsdk -lQt5Core -lQt5Network -lpthread + +all: $(RMSDK_LIBDIR) $(OUTPUT_DIR) $(TARGETS) + +clean: + rm -rf $(TARGETS) + +ultraclean: + rm -rf output lib tmp $(INSTALL_DIR) + +prepare: $(RMSDK_LIBDIR) + +install: $(TARGETS) + rm -rf $(INSTALL_DIR) + mkdir -p $(INSTALL_DIR) + cp -r $(RMSDK_LIBDIR) $(INSTALL_DIR)/lib + cp $(TARGETS) $(INSTALL_DIR) + cp scripts/acsmdownloader.sh $(INSTALL_DIR) + cp scripts/activate.sh $(INSTALL_DIR) + @echo + @echo "Files installed into $(INSTALL_DIR)" + +$(RMSDK_LIBDIR): + CC=$(CC) NO_BUILD_OPENSSL=$(NO_BUILD_OPENSSL) RMSDK_VERSION=$(RMSDK_VERSION) $(PWD)/scripts/setup.sh + +$(OUTPUT_DIR): + mkdir -p $@ + +$(TARGET_ACTIVATE): $(SRCS_ACTIVATE) + $(CXX) $(CXXFLAGS) $^ $(LDFLAGS) -ldl -o $@ +$(TARGET_ACSM): $(SRCS_ACSM) + $(CXX) $(CXXFLAGS) $^ $(LDFLAGS) -o $@ + +help: + @echo "" + @echo "ACSMDownloader Makefile" + @echo "" + @echo "Targets :" + @echo "\tall \t\tDownload external libraries and build all targets (acsmdownloader and activate)" + @echo "\tclean \t\tClean targets" + @echo "\tultraclean \tClean targets, lib and install directory" + @echo "\tprepare \tDownload libraries from Kobo (done by default)" + @echo "\tinstall \tInstall result" + @echo "" + @echo "Main environment variables :" + @echo "\tCROSS : \tthat defines cross compilation prefix (default \"arm-linux-gnueabihf-\")" + @echo "\tDEBUG : 1|0 \tto enable debug symbols (default 0)" + @echo "\tNO_BUILD_OPENSSL : 1|0 \tto disable OpenSSL build and not use the one from Kobo (default 0)" + @echo "\tINSTALL_DIR : \tdirectory to put everythong needed (default ./deploy)" + @echo "" diff --git a/README.md b/README.md new file mode 100644 index 0000000..54ad90b --- /dev/null +++ b/README.md @@ -0,0 +1,90 @@ +ACSMDownloader +-------------- + +ACSMDownloader is a tool to download _epub_ file from Adobe _acsm_ request file. +It was developed to overcome the lack of Adobe Digital Editions (ADE) software on Linux platforms. +Which is ironic as *ALL* eReaders are based on Linux systems (at least Android/Linux). + +ACSMDownloader is the result of a lot of reverse engineering on Kobo _librmsdk.so_ shared library but it's not included with this package as I cannot distribute it without a license from Adobe (that I don't own). + +**Warning** : It acts like a client for _librmsdk.so_ which has been built for ARMv7 platform and can only be run on these kind of platform ! Until someone find an x64 version (GNU/Linux compliant) of this library, ACSMDownloader cannot be run on your computer. A solution is to build a web frontend that run on an ARM server. + +Current RMSDK version is 10.0.4 + +**Caution** : This tool was not designed for piracy and any request for this will be ignored. + + + +Compilation +----------- + +Simple _make_ will do the job. + +Some environment variables can be defined before running _make_ : + + * DEBUG : 1|0 to enable debug symbols + * NO_BUILD_OPENSSL : 1 to don't build OpenSSL library (use the one of Kobo or your own) + * CROSS : cross compiler prefix (default arm-linux-gnueabihf-) + * INSTALL_DIR : default (./deploy) + +First step of compilation is to download all libraries in binary form from Kobo update file. It also downloads OpenSSL and compile it because the one from Kobo may crash (compiled with specific target options). + +Be careful : Kobo software has been compiled with an old version of Qt Embedded (4.6), but a reference from Qt5 shared library is made. It implies that some functions may not work (especially QString --> std::string conversion). + + + +Adobe files +----------- + +ACSMDownloader requires some generated files present in the eReader. These files are _device.xml_, _activation.xml_ and _devicesalt_ (or _devicekey.bin_), they're generally stored into _.adept_ or _adobe-digital-edition_ directory. + +The first one describes eReader characteristics (serial, name, RMSDK version...) while the second contains ADEPT certificates and user information, they're easy to find. _devicesalt_/_devkey.bin_ is a base file for ADEPT cryptography and may be harder to find, it may requires root filesystem access via ADB/SSH. + +In addition to _acsmdownloader_ binary, an util called _activate_ is delivered. It'll create the necessary _xml_ files and link them to your AdobeID account if you don't want to use the ones from your eReader. Be careful as there is a limited number of devices authorized per Adobe account (5 or 6 in theory, but more than 20 in facts). + + + +Dependencies +------------ + + * Qt5 + + + +Usage +----- + + ./acsmdownloader [(-d|--device-file) device.xml] [(-a|--activation-file) activation.xml] [(-s|--device-key-file) devicesalt] [(-O|--output-dir) dir] [(-o|--output-file) output.epub] [(-v|--verbose)] [(-h|--help)] (-f|--acsm-file) file.acsm + + -d|--device-file device.xml file from eReader + -a|--activation-file activation.xml file from eReader + -k|--device-key-file private device key file (eg devicesalt/devkey.bin) from eReader + -O|--output-dir Optional output directory were to put result (default ./) + -o|--output-file Optional output epub filename (default ) + -f|--acsm-file ACSM request file for epub download + -v|--verbose Increase verbosity, can be set multiple times + -h|--help This help + + +It's recommended to use _acsmdownloader.sh_ script to launch _acsmdownloader_ util + + + +Sources +------- + +Sources can be found @ http://indefero.soutade.fr/p/acsmdownloader + + + +Copyright +--------- + +Grégory Soutadé + + + +Licence +------- + +GNU GPLv3 diff --git a/include/log.h b/include/log.h new file mode 100644 index 0000000..bde35b5 --- /dev/null +++ b/include/log.h @@ -0,0 +1,35 @@ +/* + Copyright 2021 Grégory Soutadé + + This is a free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + It is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with it. If not, see . +*/ + +#ifndef _LOG_H_ +#define _LOG_H_ + +extern int verbose; + +enum { + ERROR, + INFO, + WARN, + DEBUG, + TRACE +}; + +#define LOG(lvl, msg) if (lvl <= verbose) {std::cout << msg << std::endl << std::flush;} + +#define LOG_FUNC() LOG(TRACE, __FUNCTION__ << "() @ " << __FILE__ << ":" << __LINE__) + +#endif diff --git a/include/rmsdk/adept.h b/include/rmsdk/adept.h new file mode 100644 index 0000000..95ec4ac --- /dev/null +++ b/include/rmsdk/adept.h @@ -0,0 +1,802 @@ +/* + File automatically generated by SOAdvancedDissector.py + More information at http://indefero.soutade.fr/p/soadvanceddissector +*/ + +#ifndef _ADEPT_H +#define _ADEPT_H + +// #include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class MockDevice; +class MetroWisDOM; + +namespace adept { + + class ActivationData; + class ActivationImpl; + class ActivationList; + class ActivationRecord; + class ActivationServiceInfo; + class Constraints; + class ConsumableCount; + class DRMProcessorImpl; + class DRMProviderImpl; + class FulfillmentItemData; + class FulfillmentItemImpl; + class FulfillmentItemList; + class GPFile; + class GPFileLock; + class IdentityWrapper; + class InfoSetSHA1Hasher; + //class IoCallbackWrapper; + class License; + class LicenseData; + class LicenseImpl; + class LicenseList; + class LicenseRequestInfo; + class LicenseServiceInfo; + class LoanToken; + class PermissionImpl; + class PermissionList; + class Permissions; + class RightsImpl; + class SyntheticRightsImpl; + class UnverifiedRightsImpl; + //class UrlLoader; + class User; + + + class ActivationData + { + public: + ActivationData(); + ActivationData(adept::ActivationData const&); + + ~ActivationData(); + + void getWeakReferencePtr(); + void* operator new(unsigned int, uft::Value&); + void query(uft::Value const&, void*); + void staticInit(); + void toString() const; + + void* s_descriptor; + + }; + + class ActivationImpl: public dpdrm::Activation + { + public: + ActivationImpl(uft::sref const&); + + virtual ~ActivationImpl(); + virtual void addRef(); + virtual void release(); + virtual uft::String getUserID(); + virtual uft::String getDeviceID(); + virtual void getExpiration(); + virtual void getAuthority(); + virtual void getUsername(); + virtual bool hasCredentials(); + + }; + + class ActivationList: public dp::List + { + public: + ActivationList(uft::Vector const&); + + virtual ~ActivationList(); + virtual void addRef(); + virtual void release(); + virtual int length(); + virtual dp::ref operator[](unsigned int); + + }; + + class ActivationRecord + { + public: + ActivationRecord(); + ActivationRecord(adept::ActivationRecord const&); + + ~ActivationRecord(); + + void getWeakReferencePtr(); + void* operator new(unsigned int, uft::Value&); + void query(uft::Value const&, void*); + void staticInit(); + void toString() const; + + void* s_descriptor; + + }; + + class ActivationServiceInfo + { + public: + ActivationServiceInfo(); + ActivationServiceInfo(adept::ActivationServiceInfo const&); + + ~ActivationServiceInfo(); + + void getWeakReferencePtr(); + void* operator new(unsigned int, uft::Value&); + void query(uft::Value const&, void*); + void staticInit(); + void toString() const; + + void* s_descriptor; + + }; + + class Constraints + { + public: + Constraints(); + Constraints(adept::Constraints const&); + + ~Constraints(); + + void getWeakReferencePtr(); + void* operator new(unsigned int, uft::Value&); + void query(uft::Value const&, void*); + void staticInit(); + void toString() const; + + void* s_descriptor; + + }; + + class ConsumableCount + { + public: + ConsumableCount(); + + ~ConsumableCount(); + + void getWeakReferencePtr(); + void* operator new(unsigned int, uft::Value&); + void query(uft::Value const&, void*); + void staticInit(); + void toString() const; + + void* s_descriptor; + + }; + + class DRMProcessorImpl: public dpdrm::DRMProcessor, public dpdoc::DocumentClient, public uft::ErrorHandler + { + public: + DRMProcessorImpl(dpdrm::DRMProcessorClient*, dpdev::Device*); + + class DRMStep {}; + + virtual ~DRMProcessorImpl(); + virtual void* getOptionalInterface(char const*); + virtual void release(); + virtual dp::list getActivations(); + virtual void setUser(dp::String const&); + virtual void setPartition(dpio::Partition*); + virtual void reset(); + virtual void initWorkflows(unsigned int, dp::Data const&); + virtual void initSignInWorkflow(unsigned int, dp::String const&, dp::String const&, dp::String const&); + virtual void initSignInWorkflow(unsigned int, dp::String const&, dp::String const&, dp::Data const&); + virtual void initLoanReturnWorkflow(dp::String const&); + virtual void initUpdateLoansWorkflow(dp::String const&, dp::String const&); + virtual void initJoinAccountsWorkflow(dp::String const&, dp::String const&, dp::String const&); + virtual int startWorkflows(unsigned int); + virtual void providePasshash(dp::Data const&); + virtual void provideInput(dp::Data const&); + virtual void provideConfirmation(dp::String const&, int); + virtual void transferLoanTokensFrom(dpdev::Device*); + virtual void transferCredentialsFrom(dpdev::Device*, dp::String const&, bool); + virtual dp::list getFulfillmentItems(); + virtual void getFulfillmentID(); + virtual void isReturnable(); + virtual void addPasshash(dp::String const&, dp::Data const&); + virtual void removePasshash(dp::String const&, dp::Data const&); + virtual void calculatePasshash(dp::String const&, dp::String const&); + virtual void getInterfaceVersion(); + virtual void getResourceStream(dp::String const&, unsigned int); + virtual void canContinueProcessing(int); + virtual void reportLoadingState(int); + virtual void reportDocumentError(dp::String const&); + virtual void reportErrorListChange(); + virtual void requestLicense(dp::String const&, dp::String const&, dp::Data const&); + virtual void requestDocumentPassword(); + virtual void documentSerialized(); + virtual void reportStateError(uft::String const&); + virtual void reportProcessError(uft::String const&); + virtual void setURLString(uft::String const&); + virtual uft::String getURLString(); + virtual void changeURL(uft::String const&); + + void activate(); + void activateErr(uft::String const&); + void activateResp(uft::String const&, uft::Buffer const&); + void activationIsLess(uft::sref const&, uft::sref const&); + void addDeviceSections(mdom::Node const&); + void addSignIn(); + void addSignInErr(uft::String const&); + void addSignInResp(uft::String const&, uft::Buffer const&); + void addSlashIfNeeded(uft::String const&); + void authSignIn(); + void authSignInErr(uft::String const&); + void authSignInResp(uft::String const&, uft::Buffer const&); + void checkCurrentUserIsAuthorized(); + void createCertificate(dp::Data const&); + void documentWithLicenseError(dp::String const&); + void documentWithLicenseProgress(double); + void documentWrittenWithLicense(dp::Unknown*, bool); + void encryptWithDeviceKey(dp::Data const&); + void endDownload(); + void finishFulfillmentResultProcessing(); + void finishWorkflow(int, bool, dp::Data const&); + void fulfill(); + void fulfillErr(uft::String const&); + void fulfillPasshash(); + void fulfillResp(uft::String const&, uft::Buffer const&); + void getCredentialList(); + void getCredentialListErr(uft::String const&); + void getCredentialListResp(uft::String const&, uft::Buffer const&); + void getDefaultActivationForUser(uft::Vector const&, uft::String const&); + void getIdentityByUser(uft::sref const&); + void getNotifications(mdom::Node const&); + void getReportedErrorString(); + void guessMimeType(); + void guessMimeTypeErr(uft::String const&); + void guessMimeTypeResp(uft::String const&, uft::Buffer const&); + void initAct(); + void initActErr(uft::String const&); + void initActResp(uft::String const&, uft::Buffer const&); + void initAuth(); + void initAuthErr(uft::String const&); + void initAuthResp(uft::String const&, uft::Buffer const&); + void initLicense(); + void initLicenseErr(uft::String const&); + void initLicenseResp(uft::String const&, uft::Buffer const&); + void initSignInWorkflowCommon(unsigned int); + void joinAccounts(); + void joinAccountsErr(uft::String const&); + void joinAccountsResp(uft::String const&, uft::Buffer const&); + void licenseServiceInfo(uft::String const&); + void licenseServiceInfoErr(uft::String const&); + void licenseServiceInfoResp(uft::String const&, uft::Buffer const&); + void makeSignInKey(); + void makeUserFromCredentials(mdom::Node const&, bool); + void nextDownload(); + void nextFulfillmentItemNode(); + void nextNotification(); + void nextStep(adept::DRMProcessorImpl::DRMStep); + void nextWorkflow(); + void notificationErr(uft::String const&); + void notificationResp(uft::String const&, uft::Buffer const&); + void operatorAuth(); + void operatorAuthErr(uft::String const&); + void operatorAuthResp(uft::String const&, uft::Buffer const&); + void processFulfillmentItemNode(mdom::Node const&); + void processFulfillmentResult(mdom::Node const&, uft::String const&); + void reportWorkflowError(unsigned int, dp::String const&); + void resetWorkflowData(); + void returnLoan(); + void returnLoanErr(uft::String const&); + void returnLoanResp(uft::String const&, uft::Buffer const&); + void startActivationWorkflow(); + void startAddSignInWorkflow(); + void startAuthSignInWorkflow(); + void startDownloadWorkflow(); + void startFulfillmentWorkflow(); + void startGetCredentialListWorkflow(); + void startJoinAccountsWorkflow(); + void startLoanReturnWorkflow(); + void startNotificationWorkflow(); + void startUpdateLoansWorkflow(); + void tempFileError(dp::String const&); + void tempFileProgress(double); + void tempFileWritten(dp::Unknown*, bool); + void uniqueFileCreated(dp::Unknown*, bool); + void uniqueFileError(dp::String const&); + void updateActivationServiceInfo(dpdev::Device*, uft::sref const&); + void updateLoans(); + void updateLoansErr(uft::String const&); + void updateLoansResp(uft::String const&, uft::Buffer const&); + + void* ACTIVATION_SERVICE_URL; + void* ADEPT_MIME_TYPE; + void* REQ_ACTIVATE; + void* REQ_ACTIVATION_SERVICE_INFO; + void* REQ_ADD_SIGN_IN_DIRECT; + void* REQ_AUTH; + void* REQ_AUTHENTICATION_SERVICE_INFO; + void* REQ_FULFILL; + void* REQ_GET_CREDENTIAL_LIST; + void* REQ_GET_LICENSE; + void* REQ_INIT_LICENSE_SERVICE; + void* REQ_JOIN_ACCOUNTS; + void* REQ_LICENSE_SERVICE_INFO; + void* REQ_LOAN_RETURN; + void* REQ_SIGN_IN_DIRECT; + + }; + + class DRMProviderImpl: public dpdrm::DRMProvider + { + public: + DRMProviderImpl(); + + virtual ~DRMProviderImpl(); + virtual DRMProcessorImpl* createDRMProcessor(dpdrm::DRMProcessorClient*, dpdev::Device*); + virtual void parseLicense(dp::Data const&); + + }; + + class FulfillmentItemData + { + public: + FulfillmentItemData(); + FulfillmentItemData(adept::FulfillmentItemData const&); + + ~FulfillmentItemData(); + + void getWeakReferencePtr(); + void* operator new(unsigned int, uft::Value&); + void query(uft::Value const&, void*); + void staticInit(); + uft::String toString() const; + + void* s_descriptor; + + }; + + class FulfillmentItemImpl: public dpdrm::FulfillmentItem + { + public: + FulfillmentItemImpl(uft::sref const&); + + virtual ~FulfillmentItemImpl(); + virtual void addRef(); + virtual void release(); + virtual dp::ref getRights(); + virtual dp::String getMetadata(dp::String const&); + virtual dp::String getDownloadMethod(); + virtual dp::String getDownloadURL(); + virtual dp::Data getPostData(); + + }; + + class FulfillmentItemList: public dp::List + { + public: + FulfillmentItemList(uft::Vector const&); + + virtual ~FulfillmentItemList(); + virtual void addRef(); + virtual void release(); + virtual int length(); + virtual dp::ref operator[](unsigned int); + + }; + + class GPFile + { + public: + GPFile(uft::Buffer const&); + + ~GPFile(); + + void assertLocked() const; + void getCheckCode(bool); + void getExtraFileInfo() const; + void getPtr(); + void getRecordOffset(uft::Buffer const&, bool); + void getWeakReferencePtr(); + void lock(); + void* operator new(unsigned int, uft::Value&); + void query(uft::Value const&, void*); + void resize(unsigned int, bool); + void staticInit(); + void supportCheckCode(); + void toString() const; + void unlock(); + + void* s_descriptor; + + }; + + class GPFileLock + { + public: + GPFileLock(adept::GPFile*); + + ~GPFileLock(); + + }; + + class IdentityWrapper + { + public: + IdentityWrapper(); + IdentityWrapper(adept::IdentityWrapper const&); + + ~IdentityWrapper(); + + void getWeakReferencePtr(); + void* operator new(unsigned int, uft::Value&); + void query(uft::Value const&, void*); + void staticInit(); + void toString() const; + + void* s_descriptor; + + }; + + class InfoSetSHA1Hasher: public mdom::InfoSetHasher + { + public: + InfoSetSHA1Hasher(); + + ~InfoSetSHA1Hasher(); + + virtual void update(unsigned char const*, unsigned int); + + void getHash(); + + }; + + template + class IoCallbackWrapper: public dp::Callback + { + public: + virtual ~IoCallbackWrapper(); + virtual void reportProgress(double); + virtual void reportError(dp::String const&); + virtual void invoke(dp::Unknown*); + + IoCallbackWrapper(T*, void (T::*)(dp::Unknown*, bool), void (T::*)(double), void (T::*)(dp::String const&)); + + }; + + class License + { + public: + License(adept::License const&); + License(uft::String const&, uft::String const&, uft::String const&, uft::String const&, uft::String const&, uft::String const&, uft::String const&, uft::String const&, uft::Buffer const&, uft::sref const&, uft::String const&); + License(uft::sref const&, uft::String const&); + + ~License(); + + void getWeakReferencePtr(); + void* operator new(unsigned int, uft::Value&); + void query(uft::Value const&, void*); + void staticInit(); + void toString() const; + + void* s_descriptor; + + }; + + class LicenseData + { + public: + LicenseData(); + LicenseData(adept::LicenseData const&); + + ~LicenseData(); + + void getWeakReferencePtr(); + void* operator new(unsigned int, uft::Value&); + void query(uft::Value const&, void*); + void staticInit(); + void toString() const; + + void* s_descriptor; + + }; + + class LicenseImpl: public dpdrm::License + { + public: + LicenseImpl(uft::sref const&); + + virtual ~LicenseImpl(); + virtual void addRef(); + virtual void release(); + virtual void getUserID(); + virtual void getResourceID(); + virtual dp::String getVoucherID(); + virtual void getLicenseURL(); + virtual void getOperatorURL(); + virtual void getFulfillmentID(); + virtual void getDistributorID(); + virtual void getLicensee(); + virtual void getPermissions(dp::String const&); + virtual void getCurrentCount(dp::String const&); + virtual void consume(dp::String const&, int); + virtual void getFlavor(); + + void adjustCounts(uft::sref const&, int, int); + void initializeLicenseCounts(uft::sref const&); + + }; + + class LicenseList: public dp::List + { + public: + LicenseList(uft::Vector const&); + + virtual ~LicenseList(); + virtual void addRef(); + virtual void release(); + virtual int length(); + virtual dp::ref operator[](unsigned int); + + }; + + class LicenseRequestInfo + { + public: + LicenseRequestInfo(adept::LicenseRequestInfo const&); + LicenseRequestInfo(uft::String const&, uft::String const&, uft::Buffer const&); + + ~LicenseRequestInfo(); + + void getWeakReferencePtr(); + void* operator new(unsigned int, uft::Value&); + void query(uft::Value const&, void*); + void staticInit(); + void toString() const; + + void* s_descriptor; + + }; + + class LicenseServiceInfo + { + public: + LicenseServiceInfo(); + LicenseServiceInfo(adept::LicenseServiceInfo const&); + + ~LicenseServiceInfo(); + + void getWeakReferencePtr(); + void* operator new(unsigned int, uft::Value&); + void query(uft::Value const&, void*); + void staticInit(); + void toString() const; + + void* s_descriptor; + + }; + + class LoanToken + { + public: + LoanToken(); + LoanToken(adept::LoanToken const&); + + ~LoanToken(); + + void getWeakReferencePtr(); + void* operator new(unsigned int, uft::Value&); + void query(uft::Value const&, void*); + void staticInit(); + void toString() const; + + void* s_descriptor; + + }; + + class PermissionImpl: public dpdrm::Permission + { + public: + PermissionImpl(uft::String const&, uft::sref const&); + + virtual ~PermissionImpl(); + virtual void addRef(); + virtual void release(); + virtual void getPermissionType(); + virtual void getExpiration(); + virtual void getLoanID(); + virtual void getDeviceID(); + virtual void getDeviceType(); + virtual void getMaxResoultion(); + virtual void getParts(); + virtual void isConsumable(); + virtual void getInitialCount(); + virtual void getMaxCount(); + virtual void getIncrementInterval(); + + }; + + class PermissionList: public dp::List + { + public: + PermissionList(uft::String const&, uft::Vector const&); + + virtual ~PermissionList(); + virtual void addRef(); + virtual void release(); + virtual int length(); + virtual dp::ref operator[](unsigned int); + + }; + + class Permissions + { + public: + Permissions(); + Permissions(adept::Permissions const&); + + ~Permissions(); + + void getWeakReferencePtr(); + void* operator new(unsigned int, uft::Value&); + void query(uft::Value const&, void*); + void staticInit(); + void toString() const; + + void* s_descriptor; + + }; + + class RightsImpl: public dpdrm::Rights + { + public: + RightsImpl(dp::Data const&, uft::Vector const&); + RightsImpl(mdom::Node const&, uft::Vector const&); + + virtual ~RightsImpl(); + virtual void addRef(); + virtual void release(); + virtual dp::list getLicenses(); + virtual void getValidLicenses(dpdev::Device*); + virtual dp::Data serialize(); + + void getLicensesInternal(dpdev::Device*, bool); + + }; + + class SyntheticRightsImpl: public dpdrm::Rights + { + public: + SyntheticRightsImpl(uft::sref const&); + + virtual ~SyntheticRightsImpl(); + virtual void addRef(); + virtual void release(); + virtual dp::list getLicenses(); + virtual void getValidLicenses(dpdev::Device*); + virtual dp::Data serialize(); + + }; + + class UnverifiedRightsImpl: public adept::RightsImpl + { + public: + UnverifiedRightsImpl(dp::Data const&, uft::Vector const&); + UnverifiedRightsImpl(mdom::Node const&, uft::Vector const&); + + virtual ~UnverifiedRightsImpl(); + virtual void addRef(); + virtual void release(); + virtual dp::list getLicenses(); + virtual void getValidLicenses(dpdev::Device*); + virtual dp::Data serialize(); + + }; + + template + class UrlLoader: public dpio::StreamClient, public dputils::GuardedObject + { + public: + virtual ~UrlLoader(); + virtual void propertyReady(dp::String const&, dp::String const&); + virtual void totalLengthReady(unsigned int); + virtual void propertiesReady(); + virtual void bytesReady(unsigned int, dp::Data const&, bool); + virtual void reportError(dp::String const&); + virtual void deleteThis(); + + UrlLoader(T*, void (T::*)(uft::String const&, uft::Buffer const&), void (T::*)(uft::String const&)); + + void internalReportError(dp::String const&); + void startReadingStream(dp::String const&, dp::String const&, unsigned int, dpio::Stream*, unsigned int); + void startReadingStream(dpio::Stream*, unsigned int); + + }; + + class User + { + public: + User(); + User(adept::User const&); + + ~User(); + + void getWeakReferencePtr(); + void* operator new(unsigned int, uft::Value&); + void query(uft::Value const&, void*); + void staticInit(); + dp::String toString() const; + + void* s_descriptor; + + }; + + + void addExpiration(mdom::Node&); + void addNode(mdom::Node&, uft::QName const&, uft::Buffer const&); + void addNode(mdom::Node&, uft::QName const&, uft::String const&); + void addNode(mdom::Node&, uft::String const&, uft::Buffer const&); + void addNode(mdom::Node&, uft::String const&, uft::String const&); + void addNonce(mdom::Node&); + void addSignature(mdom::Node&, dp::ref); + void checkPartPermission(uft::String const&, uft::Value const&, int); + void checkSignatureWithCert(uft::Buffer const&, uft::String const&, uft::Buffer const&, uft::Buffer const&, dpcrypt::Role); + void checkSignatureWithCertList(uft::Vector const&, uft::String const&, uft::Buffer const&, uft::Buffer const&, dpcrypt::Role); + void countPendingLicenseRequests(uft::Vector const&); + void createActivationDOM(dpdev::Device*); + void createDom(uft::String const&); + void createLicenseDOM(uft::ErrorHandler*); + void deriveKeyForPart(uft::Buffer const&, int); + void derivePDFPartsKey(uft::Buffer const&, int*, unsigned int); + void deviceVerify(unsigned char const*, unsigned char const*, unsigned char const*); + void extractActivationData(mdom::Node const&); + void extractActivationRecord(dpdev::Device*, bool, uft::ErrorHandler*); + void extractActivationServiceInfo(mdom::Node const&); + void extractConstraints(mdom::Node const&); + void extractLicenseData(mdom::Node const&); + void extractLicenseServiceInfo(mdom::Node const&); + void extractLoanToken(mdom::Node const&); + void extractUser(mdom::Node const&); + void fillActivationServiceNode(mdom::Node&, uft::sref const&); + void fillUserNode(mdom::Node&, uft::sref const&); + void findACS4ResourceIdFromVoucherId(mdom::Node const&, uft::String const&); + void findAcsmNode(mdom::DOM*, unsigned int); + void findAnonymousUser(uft::Dict const&); + void findLicenseRequest(uft::Vector const&, uft::String const&, uft::String const&, bool); + void findNode(mdom::Node const&, unsigned int, unsigned int, uft::String, unsigned int, uft::Buffer); + void findNode(mdom::Node const&, unsigned int, unsigned int, unsigned int*, uft::String*, unsigned int, unsigned int*, uft::Buffer*); + uft::sref findUserByName(uft::Dict const&, uft::String const&); + void getActivationService(dpdev::Device*, uft::String const&); + void getBase64EncodedContent(mdom::Node); + uft::String getChildValue(mdom::Node const& node, unsigned int nodeType); + void getLicense(mdom::Node const&, uft::String const&, uft::Vector const&, dpdev::Device*, uft::ErrorHandler*); + void getLicenses(mdom::Node const&, uft::String const&, uft::Vector const&, dpdev::Device*, bool, uft::ErrorHandler*); + uft::Dict getValidUsers(dpdev::Device*, uft::ErrorHandler*); + void hashNode(mdom::Node); + void isDeviceAvailable(dpdev::Device*); + void managePasshash(dpdev::Device*, dp::String const&, dp::Data const&, bool); + void mergeIn(mdom::Node const&, char const*, uft::ErrorHandler*); + void mergeInLoanTokenNode(mdom::DOM*, uft::sref const&, mdom::Node const&); + void nodeToString(mdom::Node const&); + MetroWisDOM* parseXML(char const*); + MetroWisDOM* parseXML(dp::Data const&); + void removeChildren(mdom::Node const&, unsigned int, unsigned int, uft::String, unsigned int, uft::Buffer); + void removeChildren(mdom::Node const&, unsigned int, unsigned int, unsigned int*, uft::String*, unsigned int, unsigned int*, uft::Buffer*); + void renderFPH(uft::Buffer const&); + void requestLicenses(uft::Vector const&, dpdoc::DocumentClient*); + void scrambleActivation(mdom::Node const&, bool, dpdev::Device*); + void scramblePrivateLicenseKey(uft::Buffer const&, bool, dpdev::Device*, bool*); + + void* ACS3CompatCertificate; + void* ACS3CompatCertificateSize; + void* ACS3CompatPrivateKey; + void* ACS3CompatPrivateKeySize; + +} + + + +#endif // _ADEPT_H diff --git a/include/rmsdk/aescrypt.h b/include/rmsdk/aescrypt.h new file mode 100644 index 0000000..5736464 --- /dev/null +++ b/include/rmsdk/aescrypt.h @@ -0,0 +1,51 @@ +/* + File automatically generated by SOAdvancedDissector.py + More information at http://indefero.soutade.fr/p/soadvanceddissector +*/ + +#ifndef _AESCRYPT_H +#define _AESCRYPT_H + +namespace aescrypt { + + class AESCryptFactory; + class AESCryptor; + class iAESCryptImpl; + + + class AESCryptFactory + { + public: + void CreateAESCryptor(unsigned char const*, unsigned int, unsigned char const*, unsigned int, bool); + void DestroyAESCryptor(aescrypt::AESCryptor*); + + }; + + class AESCryptor + { + public: + virtual void GetRequiredLengthForEncryption(unsigned int) = 0; + virtual void Decrypt(unsigned char const*, unsigned int, unsigned char*, unsigned int, aescrypt::DecryptMode) = 0; + virtual void Finish(unsigned char*, unsigned int) = 0; + virtual void Encrypt(unsigned char const*, unsigned int, unsigned char*, unsigned int) = 0; + + }; + + class iAESCryptImpl: public aescrypt::AESCryptor + { + public: + virtual void GetRequiredLengthForEncryption(unsigned int); + virtual void Decrypt(unsigned char const*, unsigned int, unsigned char*, unsigned int, aescrypt::DecryptMode); + virtual void Finish(unsigned char*, unsigned int); + virtual void Encrypt(unsigned char const*, unsigned int, unsigned char*, unsigned int); + + void* iAESCryptImpl; + + }; + + +} + + + +#endif // _AESCRYPT_H \ No newline at end of file diff --git a/include/rmsdk/cossl.h b/include/rmsdk/cossl.h new file mode 100644 index 0000000..d0681fc --- /dev/null +++ b/include/rmsdk/cossl.h @@ -0,0 +1,184 @@ +/* + File automatically generated by SOAdvancedDissector.py + More information at http://indefero.soutade.fr/p/soadvanceddissector +*/ + +#ifndef _COSSL_H +#define _COSSL_H + +#include +#include + + +namespace cossl { + + class AESStreamCryptorImpl; + class AES128StreamCryptorImpl; + class AES256StreamCryptorImpl; + class CertificateImpl; + class CryptProviderImpl; + class CryptorImpl; + class IdentityImpl; + class RSAKeyImpl; + class SHA1HashImpl; + class SymKeyImpl; + + + class AESStreamCryptorImpl: public dpcrypt::StreamCryptor + { + public: + virtual ~AESStreamCryptorImpl(); + virtual void addRef(); + virtual void release(); + virtual void initDecrypt(dp::ref const&, dp::Data const&); + virtual void decrypt(unsigned char const*, unsigned int, unsigned int*, unsigned char*, unsigned int); + virtual void finalize(unsigned char*, unsigned int); + virtual void setKeyLength() = 0; + + }; + + class AES128StreamCryptorImpl: public cossl::AESStreamCryptorImpl + { + public: + AES128StreamCryptorImpl(); + + virtual ~AES128StreamCryptorImpl(); + virtual void addRef(); + virtual void release(); + virtual void initDecrypt(dp::ref const&, dp::Data const&); + virtual void decrypt(unsigned char const*, unsigned int, unsigned int*, unsigned char*, unsigned int); + virtual void finalize(unsigned char*, unsigned int); + virtual void setKeyLength(); + + }; + + class AES256StreamCryptorImpl: public cossl::AESStreamCryptorImpl + { + public: + AES256StreamCryptorImpl(); + + virtual ~AES256StreamCryptorImpl(); + virtual void addRef(); + virtual void release(); + virtual void initDecrypt(dp::ref const&, dp::Data const&); + virtual void decrypt(unsigned char const*, unsigned int, unsigned int*, unsigned char*, unsigned int); + virtual void finalize(unsigned char*, unsigned int); + virtual void setKeyLength(); + + }; + + class CertificateImpl: public dpcrypt::Certificate + { + public: + CertificateImpl(dp::Data const&); + CertificateImpl(x509_st*); + + virtual ~CertificateImpl(); + virtual void addRef(); + virtual void release(); + virtual void getCommonName(); + virtual void getPublicKey(); + virtual void serialize(); + virtual void isValidForRole(int); + + }; + + class CryptProviderImpl: public dpcrypt::CryptProvider + { + public: + CryptProviderImpl(); + + virtual ~CryptProviderImpl(); + virtual void getRandomBytes(unsigned int); + virtual void createHash(int); + virtual void createKey(int, int, dp::Data const&); + virtual void generateKey(int); + virtual void generateKeyPair(int, dpcrypt::KeyPair*); + virtual void createCryptor(int); + virtual void createStreamCryptor(int); + virtual void createCertificate(dp::Data const&); + virtual void createIdentity(dp::Data const&, dp::String const&); + virtual void changePKCS12Password(dp::Data const&, dp::String const&, dp::String const&); + + void getInstance(); + + }; + + class CryptorImpl: public dpcrypt::Cryptor + { + public: + CryptorImpl(); + + virtual ~CryptorImpl(); + virtual void addRef(); + virtual void release(); + virtual void encrypt(dp::ref const&, dp::Data const&); + virtual void encrypt(dp::ref const&, dp::Data const&, dp::Data const&, bool); + virtual void decrypt(dp::ref const&, dp::Data const&); + virtual void decrypt(dp::ref const&, dp::Data const&, dp::Data const&); + + }; + + class IdentityImpl: public dpcrypt::Identity + { + public: + IdentityImpl(dp::Data const&, dp::String const&); + + virtual ~IdentityImpl(); + virtual void addRef(); + virtual void release(); + virtual void getEECert(); + virtual void getPrivateKey(); + + void changePKCS12Password(dp::Data const&, dp::String const&, dp::String const&); + + }; + + class RSAKeyImpl: public dpcrypt::Key + { + public: + RSAKeyImpl(int, dp::Data const&); + RSAKeyImpl(int, rsa_st*); + + virtual ~RSAKeyImpl(); + virtual void addRef(); + virtual void release(); + virtual void getKeyBitSize(); + virtual void getKeyType(); + virtual void serialize(); + + }; + + class SHA1HashImpl: public dpcrypt::Hash + { + public: + SHA1HashImpl(); + + virtual ~SHA1HashImpl(); + virtual void addRef(); + virtual void release(); + virtual void update(dp::Data const&); + virtual void finalize(); + + }; + + class SymKeyImpl: public dpcrypt::Key + { + public: + SymKeyImpl(dp::Data const&); + + virtual ~SymKeyImpl(); + virtual void addRef(); + virtual void release(); + virtual void getKeyBitSize(); + virtual void getKeyType(); + virtual void serialize(); + + }; + + +} + + + +#endif // _COSSL_H \ No newline at end of file diff --git a/include/rmsdk/dp.h b/include/rmsdk/dp.h new file mode 100644 index 0000000..25523e1 --- /dev/null +++ b/include/rmsdk/dp.h @@ -0,0 +1,411 @@ +/* + File automatically generated by SOAdvancedDissector.py + More information at http://indefero.soutade.fr/p/soadvanceddissector +*/ + +#ifndef _DP_H +#define _DP_H + +#include + +namespace dptimer { +class Timer; +} + +namespace dp { + + class BindingManager; + class BindingManagerImpl; + class UFTDataManager; + class BufferDataManager; + class Unknown; + class Callback; + class DPBufferManager; + class Data; + class DataManager; + class DataRec; + class StringList; + class ErrorList; + class RefCounted; + class RawPointerVector; + class Releasable; + class String; + class StringDataManager; + class StringListImpl; + class TransientData; + class TransientDataManager; + class UTF16String; + class UTF16StringDataManager; + class VersionInfo; + + + class Unknown + { + public: + Unknown(); + + virtual ~Unknown(); + virtual void* getInterfaceID(); + virtual void* getOptionalInterface(char const*); + + }; + + class BindingManager + { + public: + virtual ~BindingManager(); + virtual void invalidateScriptWrapperFor(dp::Unknown*) = 0; + virtual void addRefNativeWrapper(dp::Unknown*) = 0; + virtual void releaseNativeWrapper(dp::Unknown*) = 0; + virtual void isPrivileged() = 0; + + void getBindingManager(); + void setBindingManager(dp::BindingManager*); + + }; + + class BindingManagerImpl: public dp::BindingManager + { + public: + virtual ~BindingManagerImpl(); + virtual void invalidateScriptWrapperFor(dp::Unknown*); + virtual void addRefNativeWrapper(dp::Unknown*); + virtual void releaseNativeWrapper(dp::Unknown*); + virtual void isPrivileged(); + + }; + + class DataManager + { + public: + virtual ~DataManager(); + virtual void getTypeId() = 0; + virtual void dataPtr(void*, unsigned int*) = 0; + virtual void clone(dp::DataRec const*, dp::DataRec*) = 0; + virtual void release(void*) = 0; + + }; + + class UFTDataManager: public dp::DataManager + { + public: + virtual ~UFTDataManager(); + virtual void getTypeId() = 0; + virtual void dataPtr(void*, unsigned int*) = 0; + virtual void clone(dp::DataRec const*, dp::DataRec*); + virtual void release(void*); + + }; + + class BufferDataManager: public dp::UFTDataManager + { + public: + virtual ~BufferDataManager(); + virtual void getTypeId(); + virtual void dataPtr(void*, unsigned int*); + virtual void clone(dp::DataRec const*, dp::DataRec*); + virtual void release(void*); + + void typeId(); + + }; + + class RefCounted: public dp::Unknown + { + public: + RefCounted(); + + virtual ~RefCounted(); + virtual void* getInterfaceID(); + virtual void* getOptionalInterface(char const*); + virtual void addRef() = 0; + virtual void release() = 0; + + }; + + class Callback: public dp::Unknown + { + public: + Callback(); + + virtual ~Callback(); + virtual void* getInterfaceID(); + virtual void* getOptionalInterface(char const*); + virtual void reportProgress(double); + virtual void reportError(dp::String const&) = 0; + virtual void invoke(dp::Unknown*) = 0; + + }; + + class DPBufferManager: public uft::BufferManager + { + public: + DPBufferManager(dp::Data const&); + + virtual ~DPBufferManager(); + virtual void alloc(uft::BufferRec*, unsigned int, unsigned int); + virtual void realloc(uft::BufferRec*, unsigned int); + virtual void clone(uft::BufferRec const*, uft::BufferRec*, unsigned int); + virtual void pin(uft::BufferRec*); + virtual void unpin(uft::BufferRec*); + virtual void free(uft::BufferRec*); + virtual void toString(uft::BufferRec const*); + + }; + + class Data + { + public: + Data() {data0=0; data1=0;} + Data(dp::Data const&); + Data(uft::Buffer const&); + Data(unsigned char const*, unsigned int); + + ~Data(); + + unsigned char* data(unsigned int *size=0) const; + bool isNull() const; + unsigned int length() const; + operator uft::Buffer() const; + Data& operator=(dp::Data const&); + + protected: + void* data0; + void* data1; + }; + + class DataRec + { + public: + DataRec(); + + }; + + class StringList: public dp::RefCounted + { + public: + virtual ~StringList(); + virtual void* getInterfaceID(); + virtual void* getOptionalInterface(char const*); + virtual void addRef() = 0; + virtual void release() = 0; + virtual void length() = 0; + virtual void item(unsigned int) = 0; + + void makeStringListFromVector(uft::Vector const&); + + }; + + class ErrorList: public dp::StringList + { + public: + virtual ~ErrorList(); + virtual void* getInterfaceID(); + virtual void* getOptionalInterface(char const*); + virtual void addRef() = 0; + virtual void release() = 0; + virtual void length() = 0; + virtual void item(unsigned int) = 0; + virtual void hasFatalErrors() = 0; + virtual void hasErrors() = 0; + virtual void hasWarnings() = 0; + virtual void clear() = 0; + + }; + + class RawPointerVector + { + public: + ~RawPointerVector(); + + void insert(unsigned int, void*); + void remove(unsigned int); + void remove(void*); + + }; + + class Releasable: public dp::Unknown + { + public: + Releasable(); + + virtual ~Releasable(); + virtual void* getInterfaceID(); + //virtual void* getOptionalInterface(char const*); + virtual void release() = 0; + + }; + + class String: public Data + { + public: + String(); + String(char const*); + String(char const*, unsigned int); + String(uft::String const&); + String(unsigned short const*); + String(unsigned short const*, unsigned int); + String(const String& s) : Data(s) {} + + ~String(); + + void base64Decode(dp::String const&); + void base64Encode(dp::Data const&); + operator uft::String() const {return this->uft();}; + String& operator=(dp::String const&); + void stringToTime(dp::String const&); + void timeToString(unsigned long long); + uft::String uft() const; + void urlDecode(dp::String const&); + void urlEncode(dp::String const&); + char* utf8() const; + }; + + class StringDataManager: public dp::UFTDataManager + { + public: + virtual ~StringDataManager(); + virtual void getTypeId(); + virtual void dataPtr(void*, unsigned int*); + virtual void clone(dp::DataRec const*, dp::DataRec*); + virtual void release(void*); + + void typeId(); + + }; + + class StringListImpl: public dp::StringList + { + public: + StringListImpl(uft::Vector const&); + + virtual ~StringListImpl(); + virtual void* getInterfaceID(); + virtual void* getOptionalInterface(char const*); + virtual void addRef(); + virtual void release(); + virtual void length(); + virtual void item(unsigned int); + + }; + + class TransientData + { + public: + TransientData(unsigned char const*, unsigned int); + + ~TransientData(); + + }; + + class TransientDataManager: public dp::DataManager + { + public: + TransientDataManager(); + + virtual ~TransientDataManager(); + virtual void getTypeId(); + virtual void dataPtr(void*, unsigned int*); + virtual void clone(dp::DataRec const*, dp::DataRec*); + virtual void release(void*); + + void typeId(); + + }; + + class UTF16String + { + public: + UTF16String(char const*); + UTF16String(dp::String const&); + UTF16String(uft::UTF16String const&); + UTF16String(unsigned short const*); + + }; + + class UTF16StringDataManager: public dp::UFTDataManager + { + public: + virtual ~UTF16StringDataManager(); + virtual void getTypeId(); + virtual void dataPtr(void*, unsigned int*); + virtual void clone(dp::DataRec const*, dp::DataRec*); + virtual void release(void*); + + void typeId(); + + }; + + class VersionInfo + { + public: + VersionInfo(char const*, char const*); + + }; + + template + class ref{ + public: + operator bool() const; + T* operator->() const {return m;} + ref(T* m):m(m){} + ref(const ref&); + void release(); + T* m; + }; + + template + class List: public dp::RefCounted + { + public: + virtual ~List(); + virtual void* getInterfaceID(); + virtual void* getOptionalInterface(char const*); + virtual void addRef() = 0; + virtual void release() = 0; + virtual int length() = 0; + virtual dp::ref operator[](unsigned int) = 0; + + List(); + + }; + + template + class list { + public: + list(dp::List* p) :m(p){} + int length() {return m->length();} + dp::ref operator[](unsigned int idx) {return (*m)[idx];} + list operator=(const list& other); + list(const list& other); + private: + dp::List* m; + }; + + void broadcast(dp::String const&, dp::Data const&); + void coreInit(); + void cryptRegisterOpenSSL(); + int decodeBase64(char const* in, unsigned char* out, unsigned int outSize); + void decodeURLEncoding(char const*, unsigned char*, unsigned int); + void deviceMountRemovablePartitions(); + void deviceRegisterExternal(); + void deviceRegisterPrimary(); + void documentRegisterEPUB(); + void documentRegisterImages(); + void documentRegisterOPS(); + void documentRegisterPDF(); + void encodeBase64(unsigned char const*, unsigned int, char*, unsigned int); + void getBroadcastFD(); + dp::String getVersionInfo(dp::String const&); + int platformInit(unsigned int); + void processBroadcasts(); + void registerForBroadcast(void (*)(dp::String const&, dp::Data const&)); + void setVersionInfo(dp::String const&, dp::String const&); + void timerGetMasterClient(); + void timerRegisterMasterTimer(dptimer::Timer*); + +} + + + +#endif // _DP_H diff --git a/include/rmsdk/dpcrypt.h b/include/rmsdk/dpcrypt.h new file mode 100644 index 0000000..dc4e46d --- /dev/null +++ b/include/rmsdk/dpcrypt.h @@ -0,0 +1,143 @@ +/* + File automatically generated by SOAdvancedDissector.py + More information at http://indefero.soutade.fr/p/soadvanceddissector +*/ + +#ifndef _DPCRYPT_H +#define _DPCRYPT_H + +#include + + +namespace dpcrypt { + + class Certificate; + class CryptProvider; + class Cryptor; + class Hash; + class Identity; + class Key; + class KeyPair; + class Role; + class StreamCryptor; + + + class Certificate: public dp::RefCounted + { + public: + virtual ~Certificate(); + virtual void* getInterfaceID(); + virtual void addRef() = 0; + virtual void release() = 0; + virtual void getCommonName() = 0; + virtual void getPublicKey() = 0; + virtual void serialize() = 0; + virtual void isValidForRole(int) = 0; + + }; + + class CryptProvider: public dp::Unknown + { + public: + virtual ~CryptProvider(); + virtual void* getInterfaceID(); + virtual void getRandomBytes(unsigned int) = 0; + virtual void createHash(int) = 0; + virtual void createKey(int, int, dp::Data const&) = 0; + virtual void generateKey(int) = 0; + virtual void generateKeyPair(int, dpcrypt::KeyPair*) = 0; + virtual void createCryptor(int) = 0; + virtual void createStreamCryptor(int) = 0; + virtual void createCertificate(dp::Data const&) = 0; + virtual void createIdentity(dp::Data const&, dp::String const&) = 0; + virtual void changePKCS12Password(dp::Data const&, dp::String const&, dp::String const&) = 0; + + void getProvider(); + void setProvider(dpcrypt::CryptProvider*); + + }; + + class Cryptor: public dp::RefCounted + { + public: + virtual ~Cryptor(); + virtual void* getInterfaceID(); + virtual void addRef() = 0; + virtual void release() = 0; + virtual void encrypt(dp::ref const&, dp::Data const&) = 0; + virtual void encrypt(dp::ref const&, dp::Data const&, dp::Data const&, bool) = 0; + virtual void decrypt(dp::ref const&, dp::Data const&) = 0; + virtual void decrypt(dp::ref const&, dp::Data const&, dp::Data const&) = 0; + + }; + + class Hash: public dp::RefCounted + { + public: + virtual ~Hash(); + virtual void* getInterfaceID(); + virtual void addRef() = 0; + virtual void release() = 0; + virtual void update(dp::Data const&) = 0; + virtual void finalize() = 0; + + }; + + class Identity: public dp::RefCounted + { + public: + virtual ~Identity(); + virtual void* getInterfaceID(); + virtual void addRef() = 0; + virtual void release() = 0; + virtual void getEECert() = 0; + virtual void getPrivateKey() = 0; + + }; + + class Key: public dp::RefCounted + { + public: + virtual ~Key(); + virtual void* getInterfaceID(); + virtual void addRef() = 0; + virtual void release() = 0; + virtual void getKeyBitSize() = 0; + virtual void getKeyType() = 0; + virtual void serialize() = 0; + + }; + + class KeyPair + { + public: + KeyPair(); + + ~KeyPair(); + + }; + + class Role + { + public: + }; + + class StreamCryptor: public dp::RefCounted + { + public: + virtual ~StreamCryptor(); + virtual void* getInterfaceID(); + virtual void addRef() = 0; + virtual void release() = 0; + virtual void initDecrypt(dp::ref const&, dp::Data const&) = 0; + virtual void decrypt(unsigned char const*, unsigned int, unsigned int*, unsigned char*, unsigned int) = 0; + virtual void finalize(unsigned char*, unsigned int) = 0; + + }; + + +} + + + +#endif // _DPCRYPT_H diff --git a/include/rmsdk/dpdev.h b/include/rmsdk/dpdev.h new file mode 100644 index 0000000..1a716e9 --- /dev/null +++ b/include/rmsdk/dpdev.h @@ -0,0 +1,260 @@ +/* + File automatically generated by SOAdvancedDissector.py + More information at http://indefero.soutade.fr/p/soadvanceddissector +*/ + +#ifndef _DPDEV_H +#define _DPDEV_H + +#include +#include + +namespace dpio { + class Partition; + class FilesystemPartition; +}; + +namespace dpdev { + + class Device; + class DeviceListener; + class DeviceManager; + class DeviceProvider; + class GenericDevice; + class GenericDeviceProvider; + class LoadableDevice; + class LoadableDeviceProvider; + class LoadableDeviceProviderHolder; + class UNIXDevice; + class UNIXDeviceProvider; + + + class Device: public dp::Unknown + { + public: + virtual ~Device(); + virtual void* getInterfaceID(); + virtual void prepareDeviceKey() = 0; + virtual dpdev::DeviceProvider* getProvider() = 0; + virtual int getIndex() = 0; + virtual dp::String getDeviceName() = 0; + virtual dp::String getDeviceType() = 0; + virtual dp::Data getFingerprint() = 0; + virtual dp::Data getDeviceKey() = 0; + virtual dp::Data getActivationRecord() = 0; + virtual void setActivationRecord(dp::Data const&) = 0; + virtual dpio::Partition* getPartition(int) = 0; + virtual dp::String getVersionInfo(dp::String const&) = 0; + virtual bool isTrusted() = 0; + + }; + + class DeviceListener: public dp::Unknown + { + public: + virtual ~DeviceListener(); + virtual void* getInterfaceID(); + virtual void reportError(int, int, dp::String const&) = 0; + virtual void deviceKeyReady(int, int) = 0; + virtual void deviceAdded(int, int, dpdev::Device*) = 0; + virtual void deviceRemoved(int, int, dpdev::Device*) = 0; + virtual void partitionAdded(int, int, int, dpio::Partition*) = 0; + virtual void partitionRemoved(int, int, int, dpio::Partition*) = 0; + + }; + + class DeviceManager: public dpdev::DeviceListener + { + public: + DeviceManager(); + + virtual ~DeviceManager(); + virtual void* getInterfaceID(); + virtual void reportError(int, int, dp::String const&); + virtual void deviceKeyReady(int, int); + virtual void deviceAdded(int, int, dpdev::Device*); + virtual void deviceRemoved(int, int, dpdev::Device*); + virtual void partitionAdded(int, int, int, dpio::Partition*); + virtual void partitionRemoved(int, int, int, dpio::Partition*); + + void addListener(dpdev::DeviceListener*); + void addProvider(dpdev::DeviceProvider*); + void getDeviceManager(); + void getProvider(int); + void mountRemovablePartition(dp::String const&, dp::String const&, dp::String const&); + void removeListener(dpdev::DeviceListener*); + void unmountRemovablePartition(dp::String const&); + + }; + + class DeviceProvider: public dp::Unknown + { + public: + virtual ~DeviceProvider(); + virtual void* getInterfaceID(); + virtual void getIdentifier() = 0; + virtual int getIndex() = 0; + virtual dpdev::Device* getDevice(int) = 0; + virtual bool mount(dp::String const&, dp::String const&, dp::String const&) = 0; + virtual bool unmount(dp::String const&) = 0; + + static void addListener(dpdev::DeviceListener*); + static void addProvider(dpdev::DeviceProvider*); + static dpdev::DeviceListener* getMasterListener(); + static dpdev::DeviceProvider* getProvider(int); + void mountRemovablePartition(dp::String const&, dp::String const&, dp::String const&); + void unmountRemovablePartition(dp::String const&); + + }; + + // class GenericDevice: public dpdev::Device + // { + // public: + // GenericDevice(int, dp::String const&, dp::String const&, dp::String const&); + + // virtual ~GenericDevice(); + // virtual void* getInterfaceID(); + // virtual void getOptionalInterface(char const*); + // virtual void prepareDeviceKey(); + // virtual void getProvider(); + // virtual void getIndex(); + // virtual void getDeviceName(); + // virtual void getDeviceType(); + // virtual void getFingerprint(); + // virtual void getDeviceKey(); + // virtual void getActivationRecord(); + // virtual void setActivationRecord(dp::Data const&); + // virtual void getPartition(int); + // virtual void getVersionInfo(dp::String const&); + // virtual void isTrusted(); + + // void isValid(); + + // }; + + class GenericDeviceProvider: public dpdev::DeviceProvider + { + public: + GenericDeviceProvider(); + + virtual ~GenericDeviceProvider(); + virtual void* getInterfaceID(); + virtual void getIdentifier(); + virtual int getIndex(); + virtual dpdev::Device* getDevice(int); + virtual bool mount(dp::String const&, dp::String const&, dp::String const&); + virtual bool unmount(dp::String const&); + + void getGenericDeviceProvider(); + + }; + + // class LoadableDevice: public dpdev::Device + // { + // public: + // LoadableDevice(dpdev::LoadableDeviceProvider*, dpext::LoadableDeviceInfo*, int); + + // virtual ~LoadableDevice(); + // virtual void* getInterfaceID(); + // virtual void getOptionalInterface(char const*); + // virtual void prepareDeviceKey(); + // virtual void getProvider(); + // virtual void getIndex(); + // virtual void getDeviceName(); + // virtual void getDeviceType(); + // virtual void getFingerprint(); + // virtual void getDeviceKey(); + // virtual void getActivationRecord(); + // virtual void setActivationRecord(dp::Data const&); + // virtual void getPartition(int); + // virtual void getVersionInfo(dp::String const&); + // virtual void isTrusted(); + + // void updatePartitions(); + + // }; + + // class LoadableDeviceProvider: public dpdev::DeviceProvider, public dpext::LoadableDeviceIteratorListener + // { + // public: + // LoadableDeviceProvider(dp::String const&, dp::String const&); + + // virtual ~LoadableDeviceProvider(); + // virtual void* getInterfaceID(); + // virtual void getIdentifier(); + // virtual void getIndex(); + // virtual void getDevice(int); + // virtual void mount(dp::String const&, dp::String const&, dp::String const&); + // virtual void unmount(dp::String const&); + // virtual void deviceListChanged(); + + // void isMounted(dp::String const&); + // void registerLoadableDevices(); + + // }; + + // class LoadableDeviceProviderHolder + // { + // public: + // ~LoadableDeviceProviderHolder(); + + // void addLoadableDeviceProvider(dpdev::LoadableDeviceProvider*); + + // }; + + class UNIXDevice: public dpdev::Device + { + public: + UNIXDevice(); + + virtual ~UNIXDevice(); + //virtual void* getInterfaceID(); + virtual void* getOptionalInterface(char const*); + virtual void prepareDeviceKey(); + virtual dpdev::DeviceProvider* getProvider(); + virtual int getIndex(); + virtual dp::String getDeviceName(); + virtual dp::String getDeviceType(); + virtual dp::Data getFingerprint(); + virtual dp::Data getDeviceKey(); + virtual dp::Data getActivationRecord(); + virtual void setActivationRecord(dp::Data const&); + virtual dpio::Partition* getPartition(int); + virtual dp::String getVersionInfo(dp::String const&); + virtual bool isTrusted(); + + void addRemovablePartition(dp::String const&, dp::String const&, dp::String const&); + void removeRemovablePartition(dp::String const&); + void writeDeviceFile(char const*); + + dpio::FilesystemPartition* partition; + unsigned int m1, m2; + void *m3, *m4, *m5, *m6; + void *m7, *m8, *m9, *m10; + void *m11; + + }; + + class UNIXDeviceProvider: public dpdev::DeviceProvider + { + public: + UNIXDeviceProvider(); + + virtual ~UNIXDeviceProvider(); + virtual void* getInterfaceID(); + virtual void getIdentifier(); + virtual int getIndex(); + virtual dpdev::Device* getDevice(int); + virtual bool mount(dp::String const&, dp::String const&, dp::String const&); + virtual bool unmount(dp::String const&); + + }; + + + void isMobileOS(); + +} + + + +#endif // _DPDEV_H diff --git a/include/rmsdk/dpdoc.h b/include/rmsdk/dpdoc.h new file mode 100644 index 0000000..528e783 --- /dev/null +++ b/include/rmsdk/dpdoc.h @@ -0,0 +1,491 @@ +/* + File automatically generated by SOAdvancedDissector.py + More information at http://indefero.soutade.fr/p/soadvanceddissector +*/ + +#ifndef _DPDOC_H +#define _DPDOC_H + +#include +#include +#include +#include + + +namespace dpdoc { + + class Annot; + class AnnotParameter; + class Annotation; + class AudioInfo; + class ContentIterator; + class DisplayElement; + class DisplayHandler; + class Document; + class DocumentClient; + class DocumentProvider; + class Event; + class ExternalLinkInfo; + class KeyboardEvent; + class LinkInfo; + class Location; + class Matrix; + class MetadataItem; + class MouseEvent; + class MouseLocationInfo; + class PageDecoration; + class PageNumbers; + class PermReqObj; + class PermReqOpr; + class Range; + class RangeInfo; + class Rectangle; + class Renderer; + class RendererClient; + class Surface; + class TOCItem; + class TextEvent; + class VideoInfo; + + + class Annot + { + public: + virtual void getSubtype() const = 0; + virtual void getParams(uft::Dict&, dpdoc::AnnotParameter) const = 0; + virtual void setParams(uft::Dict const&, dpdoc::AnnotParameter) = 0; + + }; + + class AnnotParameter + { + public: + }; + + class Annotation + { + public: + class StreamReader + { + public: + }; + + virtual void getPropertyType(dp::String const&) const = 0; + virtual void getIntegerProperty(dp::String const&) const = 0; + virtual void getRealProperty(dp::String const&) const = 0; + virtual void getStringProperty(dp::String const&) const = 0; + virtual void getNameProperty(dp::String const&) const = 0; + virtual void setNameProperty(dp::String const&, dp::String const&) = 0; + virtual void getBooleanProperty(dp::String const&) const = 0; + virtual void getStreamProperty(dp::String const&, dpdoc::Annotation::StreamReader&) const = 0; + virtual void setStreamProperty(dp::String const&, dp::String const&) const = 0; + virtual void setStringProperty(dp::String const&, dp::String const&) const = 0; + virtual void getArrayLength(dp::String const&) const = 0; + virtual void getStringArrayProperty(dp::String const&, dp::String*) const = 0; + + }; + + class AudioInfo + { + public: + }; + + class ContentIterator: public dp::Releasable + { + public: + virtual ~ContentIterator(); + virtual void* getInterfaceID(); + virtual void release() = 0; + virtual void next(unsigned int) = 0; + virtual void previous(unsigned int) = 0; + virtual void getCurrentPosition() = 0; + + }; + + class DisplayElement: public dp::Unknown + { + public: + virtual ~DisplayElement(); + virtual void* getInterfaceID(); + virtual void getType() = 0; + virtual void getBeginning() = 0; + virtual void getEnd() = 0; + virtual void getBox(dpdoc::Rectangle*) = 0; + virtual void getTransform(dpdoc::Matrix*) = 0; + virtual void getEmbedURL() = 0; + + }; + + class DisplayHandler: public dp::Unknown + { + public: + virtual ~DisplayHandler(); + virtual void* getInterfaceID(); + virtual void startDisplayElement(dpdoc::DisplayElement*) = 0; + virtual void endDisplayElement(dpdoc::DisplayElement*) = 0; + + }; + + class Document: public dp::Releasable + { + public: + virtual ~Document(); + virtual void* getInterfaceID(); + virtual void release() = 0; + virtual void getInterfaceVersion() = 0; + virtual void getNaturalUnit() = 0; + virtual void setURL(dp::String const&) = 0; + virtual void getMetadata(dp::String const&, int) = 0; + virtual void getTocRoot() = 0; + virtual void getBeginning() = 0; + virtual void getEnd() = 0; + virtual void getLocationFromBookmark(dp::String const&) = 0; + virtual void findText(dp::ref const&, dp::ref const&, unsigned int, dp::String const&, dpdoc::Range*) = 0; + virtual void getText(dp::ref const&, dp::ref const&) = 0; + virtual void getPageCount() = 0; + virtual void getLocationFromPagePosition(double) = 0; + virtual void getPageName(double) = 0; + virtual void getPagePosition(dp::String const&) = 0; + virtual void setSyntheticPageInfo(int, int) = 0; + virtual void setPageMapURL(dp::String const&) = 0; + virtual void getContentIterator(int, dp::ref const&) = 0; + virtual void createRenderer(dpdoc::RendererClient*) = 0; + virtual void getErrorList() = 0; + virtual void setDocumentPassword(dp::String const&) = 0; + virtual void setLicense(dp::String const&, dp::String const&, dp::Data const&) = 0; + virtual void serializeDocumentAndLicense() = 0; + virtual void getRights() = 0; + virtual void setContextDevice(dpdev::Device*) = 0; + virtual void getPageProgressionDirection() = 0; + virtual void createAnnot(uft::Dict const&); + virtual void deleteAnnot(dpdoc::Annot*); + virtual void updatePDF(); + virtual void getPermission(dpdoc::PermReqObj, dpdoc::PermReqOpr); + + void createDocument(dpdoc::DocumentClient*, dp::String const&); + + void* m_bPurgeFontsOnExit; + void* m_dDocumentCount; + + }; + + class DocumentClient: public dp::Unknown + { + public: + DocumentClient(); + + virtual ~DocumentClient(); + virtual void* getInterfaceID(); + virtual void getInterfaceVersion() = 0; + virtual void getResourceStream(dp::String const&, unsigned int) = 0; + virtual void canContinueProcessing(int) = 0; + virtual void reportLoadingState(int) = 0; + virtual void reportDocumentError(dp::String const&) = 0; + virtual void reportErrorListChange() = 0; + virtual void requestLicense(dp::String const&, dp::String const&, dp::Data const&) = 0; + virtual void requestDocumentPassword() = 0; + virtual void requestCredentials(dpsec::SecurityHandlerData*); + virtual void documentSerialized() = 0; + + }; + + class DocumentProvider: public dp::Unknown + { + public: + virtual ~DocumentProvider(); + virtual void* getInterfaceID(); + virtual void createDocument(dpdoc::DocumentClient*, dp::String const&) = 0; + + void addProvider(dpdoc::DocumentProvider*); + + }; + + class Event: public dp::Unknown + { + public: + virtual ~Event(); + virtual void* getInterfaceID(); + virtual void getEventKind() = 0; + virtual void getEventType() = 0; + virtual void reject() = 0; + + }; + + class ExternalLinkInfo + { + public: + }; + + class KeyboardEvent: public dpdoc::Event + { + public: + virtual ~KeyboardEvent(); + virtual void* getInterfaceID(); + virtual void getEventKind() = 0; + virtual void getEventType() = 0; + virtual void reject() = 0; + virtual void getKeyIdentifier() = 0; + virtual void getModifiers() = 0; + virtual void getKeyLocation() = 0; + + }; + + class LinkInfo + { + public: + }; + + class Location: public dp::RefCounted + { + public: + virtual ~Location(); + virtual void* getInterfaceID(); + virtual void addRef() = 0; + virtual void release() = 0; + virtual void setReturnEpubCfiBookmarks(bool); + virtual void getReturnEpubCfiBookmarks(); + virtual void getBookmark() = 0; + virtual void compare(dp::ref const&) = 0; + virtual void getPagePosition() = 0; + + }; + + class Matrix + { + public: + }; + + class MetadataItem: public dp::RefCounted + { + public: + virtual ~MetadataItem(); + virtual void* getInterfaceID(); + virtual void addRef() = 0; + virtual void release() = 0; + virtual void getValue() = 0; + virtual void getAttribute(dp::String const&, dp::String const&) = 0; + + }; + + class MouseEvent: public dpdoc::Event + { + public: + virtual ~MouseEvent(); + virtual void* getInterfaceID(); + virtual void getEventKind() = 0; + virtual void getEventType() = 0; + virtual void reject() = 0; + virtual void getButton() = 0; + virtual void getModifiers() = 0; + virtual void getX() = 0; + virtual void getY() = 0; + + }; + + class MouseLocationInfo + { + public: + }; + + class PageDecoration + { + public: + }; + + class PageNumbers + { + public: + }; + + class PermReqObj + { + public: + }; + + class PermReqOpr + { + public: + }; + + class Range + { + public: + ~Range(); + + }; + + class RangeInfo: public dp::Releasable + { + public: + virtual ~RangeInfo(); + virtual void* getInterfaceID(); + virtual void release() = 0; + virtual void startsBeforeThisScreen() = 0; + virtual void endsBeforeThisScreen() = 0; + virtual void startsAfterThisScreen() = 0; + virtual void endsAfterThisScreen() = 0; + virtual void getBoxCount() = 0; + virtual void getBox(int, bool, dpdoc::Rectangle*) = 0; + virtual void getBoxTransform(int, dpdoc::Matrix*) = 0; + virtual void getBoxFlags(int, unsigned int*) = 0; + + }; + + class Rectangle + { + public: + }; + + class Renderer: public dp::Releasable + { + public: + virtual ~Renderer(); + virtual void* getInterfaceID(); + virtual void release() = 0; + virtual void getInterfaceVersion() = 0; + virtual void getCapabilities() = 0; + virtual void navigateToLocation(dp::ref const&) = 0; + virtual void getCurrentLocation() = 0; + virtual void supportsPixelLayout(int) = 0; + virtual void getScreenBeginning() = 0; + virtual void getScreenEnd() = 0; + virtual void getPageNumbersForScreen(dpdoc::PageNumbers*) = 0; + virtual void getNaturalSize(dpdoc::Rectangle*) = 0; + virtual void getMarkedArea(dpdoc::Rectangle*) = 0; + virtual void setViewport(double, double, bool) = 0; + virtual void setEnvironmentMatrix(dpdoc::Matrix const&) = 0; + virtual void setNavigationMatrix(dpdoc::Matrix const&) = 0; + virtual void getNavigationMatrix(dpdoc::Matrix*) = 0; + virtual void paint(int, int, int, int, dpdoc::Surface*) = 0; + virtual void paint(dpdoc::Matrix const&, int, int, int, int, dpdoc::Surface*, int); + virtual void paint(dpdoc::Matrix const&, int, int, int, int, dpdoc::Surface*, int, int); + virtual void hasOverlayContent(dpdoc::Matrix const&, int, int, int, int, int); + virtual void walkScreen(dpdoc::DisplayHandler*, unsigned int) = 0; + virtual void handleEvent(dpdoc::Event*) = 0; + virtual void hitTest(double, double, unsigned int) = 0; + virtual void hitTestForAnnotation(double, double, int, uft::Dict&); + virtual void hitTestForAnnotation(double const*, double*, dp::String&); + virtual void getAnnotationBounds(dpdoc::Annotation*, double*); + virtual void isFocusable() = 0; + virtual void getPagingMode() = 0; + virtual void setPagingMode(int) = 0; + virtual void setPageDecoration(dpdoc::PageDecoration const&) = 0; + virtual void nextScreen() = 0; + virtual void previousScreen() = 0; + virtual void isAtBeginning() = 0; + virtual void isAtEnd() = 0; + virtual void getDefaultFontSize() = 0; + virtual void setDefaultFontSize(double) = 0; + virtual void addHighlight(int, dp::ref const&, dp::ref const&) = 0; + virtual void setHighlightColor(int, int, unsigned int) = 0; + virtual void getHighlightColor(int, int) = 0; + virtual void navigateToHighlight(int, int) = 0; + virtual void getHighlightCount(int) = 0; + virtual void getHighlight(int, int, dpdoc::Range*) = 0; + virtual void removeHighlight(int, int) = 0; + virtual void removeAllHighlights(int) = 0; + virtual void getLinkCount() = 0; + virtual void getLinkInfo(int, dpdoc::LinkInfo*) = 0; + virtual void getExternalLinkCount() = 0; + virtual void getExternalLinkInfo(int, dpdoc::ExternalLinkInfo*) = 0; + virtual void getRangeInfo(dp::ref const&, dp::ref const&) = 0; + virtual void setMargins(double, double, double, double) = 0; + virtual void setCSSMediaType(dp::String const&) = 0; + virtual void getVideoCountForCurrentScreen() = 0; + virtual void getVideoInfoForVideoOnCurrentScreen(int, dpdoc::VideoInfo*) = 0; + virtual void getAudioCountForCurrentScreen() = 0; + virtual void getAudioInfoForAudioOnCurrentScreen(int, dpdoc::AudioInfo*) = 0; + virtual void setPlayMode(unsigned int) = 0; + virtual void getPlayMode() = 0; + virtual void showPageNumbers(bool) = 0; + virtual void allowExternalLinks(bool) = 0; + virtual void hibernate() = 0; + virtual void wakeUp() = 0; + virtual void performAction(dp::String const&) = 0; + virtual void reflowFailed(); + virtual void convertPointFromDeviceSpaceToDocumentSpace(double, double, double&, double&, int); + virtual void convertPointFromDocumentSpaceToDeviceSpace(double, double, double&, double&, int); + virtual void convertPointFromDocumentSpaceToDeviceSpace(double, double, double&, double&, int, int, dpdoc::Matrix const&); + virtual void getWordBoundary(double, double, unsigned int, dpdoc::Location**, dpdoc::Location**, dpdoc::Location**, double*, double*, int, bool); + virtual void updateTextSelection(dpdoc::Location*, bool); + virtual void getVideoInfoForCurrentScreenAsJSON() = 0; + virtual void getAudioInfoForCurrentScreenAsJSON() = 0; + virtual void getVideoStream(dp::String) = 0; + virtual void getAudioStream(dp::String) = 0; + + }; + + class RendererClient: public dp::Unknown + { + public: + virtual ~RendererClient(); + virtual void* getInterfaceID(); + virtual void getInterfaceVersion() = 0; + virtual void getUnitsPerInch() = 0; + virtual void getPageMarginFontSize() = 0; + virtual void requestRepaint(int, int, int, int) = 0; + virtual void requestHighlightRepaint(int, int, int, int); + virtual void navigateToURL(dp::String const&, dp::String const&) = 0; + virtual void reportMouseLocationInfo(dpdoc::MouseLocationInfo const&) = 0; + virtual void reportInternalNavigation() = 0; + virtual void reportDocumentSizeChange() = 0; + virtual void reportHighlightChange(int) = 0; + virtual void reportRendererError(dp::String const&) = 0; + virtual void finishedPlaying() = 0; + virtual void doIntermediateBlit(dpdoc::Surface*); + + }; + + class Surface: public dp::Unknown + { + public: + virtual ~Surface(); + virtual void* getInterfaceID(); + virtual void getSurfaceKind() = 0; + virtual void getPixelLayout() = 0; + virtual void getTransferMap(int) = 0; + virtual void getDitheringClipMap(int) = 0; + virtual void getDitheringDepth(int) = 0; + virtual void checkOut(int, int, int, int, unsigned int*) = 0; + virtual void checkIn(unsigned char*) = 0; + + void initDitheringClipMap(unsigned char*, int); + + }; + + class TOCItem: public dp::Releasable + { + public: + virtual ~TOCItem(); + virtual void* getInterfaceID(); + virtual void release() = 0; + virtual void getTitle() = 0; + virtual void getLocation() = 0; + virtual void getChildCount() = 0; + virtual void getChild(int) = 0; + + }; + + class TextEvent: public dpdoc::Event + { + public: + virtual ~TextEvent(); + virtual void* getInterfaceID(); + virtual void getEventKind() = 0; + virtual void getEventType() = 0; + virtual void reject() = 0; + virtual void getData() = 0; + + }; + + class VideoInfo + { + public: + }; + + +} + + + +#endif // _DPDOC_H diff --git a/include/rmsdk/dpdrm.h b/include/rmsdk/dpdrm.h new file mode 100644 index 0000000..0b10d8f --- /dev/null +++ b/include/rmsdk/dpdrm.h @@ -0,0 +1,188 @@ +/* + File automatically generated by SOAdvancedDissector.py + More information at http://indefero.soutade.fr/p/soadvanceddissector +*/ + +#ifndef _DPDRM_H +#define _DPDRM_H + +#include +#include +#include + +namespace adept { + class FulfillmentItemList; + class ActivationImpl; +} + +namespace dpdrm { + + class Activation; + class DRMProcessor; + class DRMProcessorClient; + class DRMProvider; + class FulfillmentItem; + class License; + class Permission; + class Rights; + + + class Activation: public dp::RefCounted + { + public: + Activation(); + + virtual ~Activation(); + virtual void* getInterfaceID(); + virtual void addRef() = 0; + virtual void release() = 0; + virtual uft::String getUserID() = 0; + virtual uft::String getDeviceID() = 0; + virtual void getExpiration() = 0; + virtual void getAuthority() = 0; + virtual void getUsername() = 0; + virtual bool hasCredentials() = 0; + + }; + + class DRMProcessor: public dp::Releasable + { + public: + DRMProcessor(); + + virtual ~DRMProcessor(); + virtual void* getInterfaceID(); + virtual void release() = 0; + virtual dp::list getActivations() = 0; + virtual void setUser(dp::String const&) = 0; + virtual void setPartition(dpio::Partition*) = 0; + virtual void reset() = 0; + virtual void initWorkflows(unsigned int, dp::Data const&) = 0; + virtual void initSignInWorkflow(unsigned int, dp::String const&, dp::String const&, dp::String const&) = 0; + virtual void initSignInWorkflow(unsigned int, dp::String const&, dp::String const&, dp::Data const&) = 0; + virtual void initLoanReturnWorkflow(dp::String const&) = 0; + virtual void initUpdateLoansWorkflow(dp::String const&, dp::String const&) = 0; + virtual void initJoinAccountsWorkflow(dp::String const&, dp::String const&, dp::String const&) = 0; + virtual int startWorkflows(unsigned int) = 0; + virtual void providePasshash(dp::Data const&) = 0; + virtual void provideInput(dp::Data const&) = 0; + virtual void provideConfirmation(dp::String const&, int) = 0; + virtual void transferLoanTokensFrom(dpdev::Device*) = 0; + virtual void transferCredentialsFrom(dpdev::Device*, dp::String const&, bool) = 0; + virtual dp::list getFulfillmentItems() = 0; + virtual void getFulfillmentID() = 0; + virtual void isReturnable() = 0; + virtual void addPasshash(dp::String const&, dp::Data const&) = 0; + virtual void removePasshash(dp::String const&, dp::Data const&) = 0; + virtual void calculatePasshash(dp::String const&, dp::String const&) = 0; + + }; + + class DRMProcessorClient + { + public: + }; + + class DRMProvider: public dp::Unknown + { + public: + DRMProvider(); + + virtual ~DRMProvider(); + virtual void* getInterfaceID(); + virtual dpdrm::DRMProcessor* createDRMProcessor(dpdrm::DRMProcessorClient*, dpdev::Device*) = 0; + virtual void parseLicense(dp::Data const&) = 0; + + void getProvider(); + + }; + + class FulfillmentItem: public dp::RefCounted + { + public: + FulfillmentItem(); + + virtual ~FulfillmentItem(); + virtual void* getInterfaceID(); + virtual void addRef() = 0; + virtual void release() = 0; + virtual dp::ref getRights() = 0; + virtual dp::String getMetadata(dp::String const&) = 0; + virtual dp::String getDownloadMethod() = 0; + virtual dp::String getDownloadURL() = 0; + virtual dp::Data getPostData() = 0; + + }; + + class License: public dp::RefCounted + { + public: + License(); + + virtual ~License(); + virtual void* getInterfaceID(); + virtual void addRef() = 0; + virtual void release() = 0; + virtual void getUserID() = 0; + virtual void getResourceID() = 0; + virtual dp::String getVoucherID() = 0; + virtual void getLicenseURL() = 0; + virtual void getOperatorURL() = 0; + virtual void getFulfillmentID() = 0; + virtual void getDistributorID() = 0; + virtual void getLicensee() = 0; + virtual void getPermissions(dp::String const&) = 0; + virtual void getCurrentCount(dp::String const&) = 0; + virtual void consume(dp::String const&, int) = 0; + virtual void getFlavor() = 0; + + }; + + class Permission: public dp::RefCounted + { + public: + Permission(); + + virtual ~Permission(); + virtual void* getInterfaceID(); + virtual void addRef() = 0; + virtual void release() = 0; + virtual void getPermissionType() = 0; + virtual void getExpiration() = 0; + virtual void getLoanID() = 0; + virtual void getDeviceID() = 0; + virtual void getDeviceType() = 0; + virtual void getMaxResoultion() = 0; + virtual void getParts() = 0; + virtual void isConsumable() = 0; + virtual void getInitialCount() = 0; + virtual void getMaxCount() = 0; + virtual void getIncrementInterval() = 0; + + }; + + class Rights: public dp::RefCounted + { + public: + Rights(); + + virtual ~Rights(); + virtual void* getInterfaceID(); + virtual void addRef() = 0; + virtual void release() = 0; + virtual dp::list getLicenses() = 0; + virtual void getValidLicenses(dpdev::Device*) = 0; + virtual dp::Data serialize() = 0; + + }; + + + void getAuthenticationCertificate(dp::ref); + void getUserCertificate(dp::ref); + void signChallenge(dp::String const&, dp::String const&); + +} + + + +#endif // _DPDRM_H diff --git a/include/rmsdk/dpext.h b/include/rmsdk/dpext.h new file mode 100644 index 0000000..08088e5 --- /dev/null +++ b/include/rmsdk/dpext.h @@ -0,0 +1,33 @@ +/* + File automatically generated by SOAdvancedDissector.py + More information at http://indefero.soutade.fr/p/soadvanceddissector +*/ + +#ifndef _DPEXT_H +#define _DPEXT_H + +namespace dpext { + + class LoadableDeviceInfo; + class LoadableDeviceIteratorListener; + + + class LoadableDeviceInfo + { + public: + }; + + class LoadableDeviceIteratorListener + { + public: + virtual ~LoadableDeviceIteratorListener(); + virtual void virtfunc16() = 0; + + }; + + +} + + + +#endif // _DPEXT_H \ No newline at end of file diff --git a/include/rmsdk/dpio.h b/include/rmsdk/dpio.h new file mode 100644 index 0000000..5380835 --- /dev/null +++ b/include/rmsdk/dpio.h @@ -0,0 +1,204 @@ +/* + File automatically generated by SOAdvancedDissector.py + More information at http://indefero.soutade.fr/p/soadvanceddissector +*/ + +#ifndef _DPIO_H +#define _DPIO_H + +#include +#include +#include + +namespace dpio { + + class StreamClient; + class BufferedStreamClient; + class DataStream; + class FileRemover; + class FileStream; + class FileWriter; + class Partition; + class FilesystemPartition; + class MessagePipe; + class Stream; + class UniqueFileCreator; + + + class StreamClient: public dp::Unknown + { + public: + StreamClient(); + + virtual ~StreamClient(); + virtual void* getInterfaceID(); + virtual void propertyReady(dp::String const&, dp::String const&) = 0; + virtual void totalLengthReady(unsigned int) = 0; + virtual void propertiesReady() = 0; + virtual void bytesReady(unsigned int, dp::Data const&, bool) = 0; + virtual void reportError(dp::String const&) = 0; + + void* fields[20]; + }; + + class BufferedStreamClient: public dpio::StreamClient + { + public: + BufferedStreamClient(); + + virtual ~BufferedStreamClient(); + virtual void* getInterfaceID(); + virtual void propertyReady(dp::String const&, dp::String const&); + virtual void totalLengthReady(unsigned int); + virtual void propertiesReady(); + virtual void bytesReady(unsigned int, dp::Data const&, bool); + virtual void reportError(dp::String const&); + + void* getBuffer() const; + void safeBufferAppend(unsigned char const*, unsigned int); + + }; + + class DataStream: public dputils::GuardedStream + { + public: + DataStream(dp::String const&, dp::Data const&, dpio::StreamClient*, dp::Callback*); + + virtual ~DataStream(); + virtual void* getInterfaceID(); + virtual int getCapabilities(); + virtual void requestInfo(); + virtual void requestBytes(unsigned int, unsigned int); + virtual void reportWriteError(dp::String const&); + virtual void adjustModifiedStream(); + virtual void deleteThis(); + + void* fields[10]; + }; + + class FileRemover + { + public: + static void remove(dpio::Partition*, dp::String const&, dp::Callback*); + + }; + + class FileStream: public dputils::GuardedStream + { + public: + FileStream(dpio::Partition*, dp::String const&, dpio::StreamClient*, unsigned int); + + virtual ~FileStream(); + virtual void* getInterfaceID(); + virtual void setStreamClient(dpio::StreamClient*); + virtual int getCapabilities(); + virtual void requestInfo(); + virtual void requestBytes(unsigned int, unsigned int); + virtual void reportWriteError(dp::String const&); + virtual void adjustModifiedStream(); + virtual void deleteThis(); + virtual void virtfunc12(){} + void propertiesReady(){} + + void closeHandles(); + void getTemporaryFolder(); + void isFolder(dpio::Partition*, dp::String const&); + void listFolder(dpio::Partition*, dp::String const&); + + void* fields[10]; + + }; + + class FileWriter: public dpio::StreamClient + { + public: + FileWriter(); + + virtual ~FileWriter(); + virtual void* getInterfaceID(); + virtual void propertyReady(dp::String const&, dp::String const&); + virtual void totalLengthReady(unsigned int); + virtual void propertiesReady(); + virtual void bytesReady(unsigned int, dp::Data const&, bool); + virtual void reportError(dp::String const&); + + void write(dpio::Partition*, dp::String const&, dpio::Stream*, dp::Callback*); + + void* fields[5]; + + }; + + class Partition: public dp::Unknown + { + public: + virtual ~Partition(); + virtual void* getInterfaceID(); + virtual dpdev::Device* getDevice() = 0; + virtual int getIndex() = 0; + virtual dp::String getPartitionName() = 0; + virtual dp::String getPartitionType() = 0; + virtual dp::String getRootURL() = 0; + virtual dp::String getDocumentFolderURL() = 0; + virtual dp::String getTemporaryFolderURL() = 0; + virtual dpio::Stream* readFile(dp::String const&, dpio::StreamClient*, unsigned int); + virtual void createUniqueFile(dp::String const&, dp::String const&, dp::Callback*) = 0; + virtual void writeFile(dp::String const&, dpio::Stream*, dp::Callback*) = 0; + virtual void removeFile(dp::String const&, dp::Callback*) = 0; + + static dpio::FilesystemPartition* createFileSystemPartition(dpdev::Device*, int index, dp::String const& type, dp::String const& rootPath, dp::String const& docPath, dp::String const& tempPath); + void findPartitionForURL(dp::String const&); + void releaseFileSystemPartition(dpio::Partition*); + void setFileSystemPartitionIndex(dpio::Partition*, int); + + }; + + class FilesystemPartition: public dpio::Partition + { + public: + FilesystemPartition(dpdev::Device*, int, dp::String const&, dp::String const&, dp::String const&, dp::String const&); + + virtual ~FilesystemPartition(); + virtual void* getInterfaceID(); + virtual void* getOptionalInterface(char const*); + virtual dpdev::Device* getDevice(); + virtual int getIndex(); + virtual dp::String getPartitionName(); + virtual dp::String getPartitionType(); + virtual dp::String getRootURL(); + virtual dp::String getDocumentFolderURL(); + virtual dp::String getTemporaryFolderURL(); + virtual dpio::Stream* readFile(dp::String const&, dpio::StreamClient*, unsigned int); + virtual void createUniqueFile(dp::String const&, dp::String const&, dp::Callback*); + virtual void writeFile(dp::String const&, dpio::Stream*, dp::Callback*); + virtual void removeFile(dp::String const&, dp::Callback*); + + void setIndex(int); + + void* fields[10]; + }; + + class MessagePipe + { + public: + ~MessagePipe(); + + void processBroadcasts(); + + }; + + class UniqueFileCreator: public dp::Unknown + { + public: + virtual ~UniqueFileCreator(); + virtual void* getOptionalInterface(char const*); + + void createUnique(dpio::Partition*, dp::String const&, dp::String const&, dp::Callback*); + + }; + + +} + + + +#endif // _DPIO_H diff --git a/include/rmsdk/dplib.h b/include/rmsdk/dplib.h new file mode 100644 index 0000000..40cc288 --- /dev/null +++ b/include/rmsdk/dplib.h @@ -0,0 +1,351 @@ +/* + File automatically generated by SOAdvancedDissector.py + More information at http://indefero.soutade.fr/p/soadvanceddissector +*/ + +#ifndef _DPLIB_H +#define _DPLIB_H + +#include +#include +#include +#include +#include +#include + + +namespace dplib { + + class ContentRecord; + class LibraryItem; + class ContentRecordImpl; + class ContentRecordList; + class ContentTag; + class ContentTagImpl; + //class CreateUniqueFileCallback; + //class CreateUniqueFileCallback; + class Library; + class LibraryDeviceListener; + class LibraryImpl; + //class RemoveFileCallback; + //class RemoveFileCallback; + class TagList; + //class WriteFileCallback; + //class WriteFileCallback; + + class LibraryListener {}; + + class ContentRecord: public dp::RefCounted + { + public: + virtual ~ContentRecord(); + virtual void* getInterfaceID(); + virtual void addRef() = 0; + virtual void release() = 0; + virtual void getLibrary() = 0; + virtual void getMetadata(dp::String const&) = 0; + virtual void setMetadata(dp::String const&, dp::String const&) = 0; + virtual void getCreationTime() = 0; + virtual void getLastReadTime() = 0; + virtual void getLastReadBookmark() = 0; + virtual void setLastReadBookmark(dp::String const&) = 0; + virtual void getPrivateData(dp::String const&, dp::String const&) = 0; + virtual void setPrivateData(dp::String const&, dp::String const&, dp::String const&) = 0; + virtual void getContentURL() = 0; + virtual void getThumbnailURL() = 0; + virtual void thumbnailChangeNotify() = 0; + virtual void getAnnotationURL() = 0; + virtual void annotationChangeNotify() = 0; + virtual void isTaggedBy(dp::ref const&) = 0; + virtual void addTag(dp::ref const&) = 0; + virtual void removeTag(dp::ref const&) = 0; + virtual void getTags() = 0; + + }; + + class LibraryItem + { + public: + LibraryItem(dplib::LibraryImpl*, uft::String const&, bool); + + ~LibraryItem(); + + virtual void virtfunc8() = 0; + + void ensureNodeExists(unsigned int); + void getBaseLocalPath(); + void getFirstChildNodeWithType(mdom::Node const&, unsigned int); + void getFirstNodeWithType(unsigned int); + void getMetadata(dp::String const&); + void getMetadataNode(uft::String const&); + void getMetadataNodeType(uft::String const&); + void getPrivateData(dp::String const&, dp::String const&); + void getPrivateDataNode(mdom::Node const&, uft::QName); + void loadXML(unsigned int, dp::Data const&); + void serializeToXML(); + void setMetadata(dp::String const&, dp::String const&); + void setNodeText(mdom::Node const&, uft::String const&); + void setPrivateData(dp::String const&, dp::String const&, dp::String const&); + void setTextValue(unsigned int, unsigned int, uft::String const&); + + }; + + class ContentRecordImpl: public dplib::ContentRecord, public dplib::LibraryItem + { + public: + ContentRecordImpl(dplib::LibraryImpl*, uft::String const&, dp::Data const&); + ContentRecordImpl(dplib::LibraryImpl*, uft::String const&, uft::String const&, dplib::ContentRecordImpl*); + + virtual ~ContentRecordImpl(); + virtual void* getInterfaceID(); + virtual void addRef(); + virtual void release(); + virtual void getLibrary(); + virtual void getMetadata(dp::String const&); + virtual void setMetadata(dp::String const&, dp::String const&); + virtual void getCreationTime(); + virtual void getLastReadTime(); + virtual void getLastReadBookmark(); + virtual void setLastReadBookmark(dp::String const&); + virtual void getPrivateData(dp::String const&, dp::String const&); + virtual void setPrivateData(dp::String const&, dp::String const&, dp::String const&); + virtual void getContentURL(); + virtual void getThumbnailURL(); + virtual void thumbnailChangeNotify(); + virtual void getAnnotationURL(); + virtual void annotationChangeNotify(); + virtual void isTaggedBy(dp::ref const&); + virtual void addTag(dp::ref const&); + virtual void removeTag(dp::ref const&); + virtual void getTags(); + virtual void setDirty(); + + void loadXML(dp::Data const&); + void staticInit(); + + void* s_descriptor; + + }; + + class ContentRecordList: public dp::List + { + public: + virtual ~ContentRecordList(); + virtual void addRef(); + virtual void release(); + virtual void length(); + virtual void operator[](unsigned int); + + }; + + class ContentTag: public dp::RefCounted + { + public: + virtual ~ContentTag(); + virtual void* getInterfaceID(); + virtual void addRef() = 0; + virtual void release() = 0; + virtual void getLibrary() = 0; + virtual void getMetadata(dp::String const&) = 0; + virtual void setMetadata(dp::String const&, dp::String const&) = 0; + virtual void getTagID() = 0; + virtual void getParent() = 0; + virtual void getPrivateData(dp::String const&, dp::String const&) = 0; + virtual void setPrivateData(dp::String const&, dp::String const&, dp::String const&) = 0; + + }; + + class ContentTagImpl: public dplib::ContentTag, public dplib::LibraryItem + { + public: + ContentTagImpl(dplib::LibraryImpl*, dplib::ContentTagImpl const&); + ContentTagImpl(dplib::LibraryImpl*, uft::String const&, dp::Data const&); + ContentTagImpl(dplib::LibraryImpl*, uft::String const&, uft::String const&); + + virtual ~ContentTagImpl(); + virtual void* getInterfaceID(); + virtual void addRef(); + virtual void release(); + virtual void getLibrary(); + virtual void getMetadata(dp::String const&); + virtual void setMetadata(dp::String const&, dp::String const&); + virtual void getTagID(); + virtual void getParent(); + virtual void getPrivateData(dp::String const&, dp::String const&); + virtual void setPrivateData(dp::String const&, dp::String const&, dp::String const&); + virtual void setDirty(); + + void getFinalLeaf(); + void getParentTagID(); + void loadXML(dp::Data const&); + void staticInit(); + + void* s_descriptor; + + }; + + // class CreateUniqueFileCallback: public dp::Callback + // { + // public: + // virtual ~CreateUniqueFileCallback(); + // virtual void reportError(dp::String const&); + // virtual void invoke(dp::Unknown*); + + // }; + + // class CreateUniqueFileCallback: public dp::Callback + // { + // public: + // virtual ~CreateUniqueFileCallback(); + // virtual void reportError(dp::String const&); + // virtual void invoke(dp::Unknown*); + + // }; + + class Library: public dp::Unknown + { + public: + virtual ~Library(); + virtual void* getInterfaceID(); + virtual dpio::Partition* getPartition() = 0; + virtual bool isLoaded() = 0; + virtual void createContentRecord(dp::String const&) = 0; + virtual void cloneContentRecord(dp::ref const&, dp::String const&) = 0; + virtual void getContentRecordByURL(dp::String const&) = 0; + virtual void removeContentRecord(dp::ref const&) = 0; + virtual void getTags(dp::ref const&) = 0; + virtual void getContentRecords(dp::ref const&) = 0; + virtual void getTagByID(dp::String const&) = 0; + virtual void removeTag(dp::ref const&) = 0; + virtual void addListener(dplib::LibraryListener*) = 0; + virtual void removeListener(dplib::LibraryListener*) = 0; + + void getPartitionLibrary(dpio::Partition*); + + }; + + class LibraryDeviceListener: public dpdev::DeviceListener + { + public: + virtual ~LibraryDeviceListener(); + virtual void reportError(int, int, dp::String const&); + virtual void deviceKeyReady(int, int); + virtual void deviceAdded(int, int, dpdev::Device*); + virtual void deviceRemoved(int, int, dpdev::Device*); + virtual void partitionAdded(int, int, int, dpio::Partition*); + virtual void partitionRemoved(int, int, int, dpio::Partition*); + + }; + + // class LibraryImpl: public dplib::Library, public dptimer::TimerClient + // { + // public: + // LibraryImpl(dpio::Partition*, uft::String const&); + + // virtual ~LibraryImpl(); + // virtual void* getInterfaceID(); + // virtual void getPartition(); + // virtual void isLoaded(); + // virtual void createContentRecord(dp::String const&); + // virtual void cloneContentRecord(dp::ref const&, dp::String const&); + // virtual void getContentRecordByURL(dp::String const&); + // virtual void removeContentRecord(dp::ref const&); + // virtual void getTags(dp::ref const&); + // virtual void getContentRecords(dp::ref const&); + // virtual void getTagByID(dp::String const&); + // virtual void removeTag(dp::ref const&); + // virtual void addListener(dplib::LibraryListener*); + // virtual void removeListener(dplib::LibraryListener*); + // virtual void timerFired(dptimer::Timer*); + + // void addContentRecordToSave(dplib::ContentRecordImpl*); + // void addContentTagToSave(dplib::ContentTagImpl*); + // void addDirectoryToLoad(uft::String const&); + // void addFileToLoad(uft::String const&); + // void annotationChangeNotify(dplib::ContentRecordImpl*); + // void armTimer(); + // void assignLocationAndSave(uft::sref const&, uft::String const&); + // void assignLocationAndSave(uft::sref const&, uft::String const&); + // void cloneContentTag(dp::ref const&); + // void cloneTree(mdom::Reference const&); + // void createContentTag(dp::String const&); + // void doSomeLoading(); + // void ensureDomExists(); + // void getAnnotationURLPrefix(); + // void getContentURLPrefix(); + // void getThumbnailURLPrefix(); + // void handleBroadcastMessage(uft::String const&, uft::String const&); + // void itemRemoved(uft::sref const&); + // void itemRemoved(uft::sref const&); + // void itemSaved(uft::sref const&); + // void itemSaved(uft::sref const&); + // void libraryPartitionRemoved(); + // void loadDirectory(uft::String const&); + // void loadFile(uft::String const&); + // void loadXML(unsigned int, dp::Data const&); + // void operationError(dp::String); + // void saveContentRecord(dplib::ContentRecordImpl*); + // void saveContentTag(dplib::ContentTagImpl*); + // void saveDirtyContentRecords(); + // void saveDirtyTags(); + // void shouldSaveContentRecord(dplib::ContentRecordImpl*, bool); + // void staticInit(); + // void thumbnailChangeNotify(dplib::ContentRecordImpl*); + + // void* s_descriptor; + + // }; + + // class RemoveFileCallback: public dp::Callback + // { + // public: + // virtual ~RemoveFileCallback(); + // virtual void reportError(dp::String const&); + // virtual void invoke(dp::Unknown*); + + // }; + + // class RemoveFileCallback: public dp::Callback + // { + // public: + // virtual ~RemoveFileCallback(); + // virtual void reportError(dp::String const&); + // virtual void invoke(dp::Unknown*); + + // }; + + // class TagList: public dp::List + // { + // public: + // virtual ~TagList(); + // virtual void addRef(); + // virtual void release(); + // virtual void length(); + // virtual void operator[](unsigned int); + + // }; + + // class WriteFileCallback: public dp::Callback + // { + // public: + // virtual ~WriteFileCallback(); + // virtual void reportError(dp::String const&); + // virtual void invoke(dp::Unknown*); + + // }; + + // class WriteFileCallback: public dp::Callback + // { + // public: + // virtual ~WriteFileCallback(); + // virtual void reportError(dp::String const&); + // virtual void invoke(dp::Unknown*); + + // }; + + +} + + + +#endif // _DPLIB_H diff --git a/include/rmsdk/dpnet.h b/include/rmsdk/dpnet.h new file mode 100644 index 0000000..12daf65 --- /dev/null +++ b/include/rmsdk/dpnet.h @@ -0,0 +1,24 @@ +/* + File automatically generated by SOAdvancedDissector.py + More information at http://indefero.soutade.fr/p/soadvanceddissector +*/ + +#ifndef _DPNET_H +#define _DPNET_H + +namespace dpnet { + + class NetProvider + { + public: + void getProvider(); + static void setProvider(dpnet::NetProvider*); + + }; + + +} + + + +#endif // _DPNET_H diff --git a/include/rmsdk/dpres.h b/include/rmsdk/dpres.h new file mode 100644 index 0000000..fabeb90 --- /dev/null +++ b/include/rmsdk/dpres.h @@ -0,0 +1,24 @@ +/* + File automatically generated by SOAdvancedDissector.py + More information at http://indefero.soutade.fr/p/soadvanceddissector +*/ + +#ifndef _DPRES_H +#define _DPRES_H + +namespace dpres { + + class ResourceProvider + { + public: + void getProvider(); + void setProvider(dpres::ResourceProvider*); + + }; + + +} + + + +#endif // _DPRES_H \ No newline at end of file diff --git a/include/rmsdk/dpsec.h b/include/rmsdk/dpsec.h new file mode 100644 index 0000000..be18f31 --- /dev/null +++ b/include/rmsdk/dpsec.h @@ -0,0 +1,21 @@ +/* + File automatically generated by SOAdvancedDissector.py + More information at http://indefero.soutade.fr/p/soadvanceddissector +*/ + +#ifndef _DPSEC_H +#define _DPSEC_H + +namespace dpsec { + + class SecurityHandlerData + { + public: + }; + + +} + + + +#endif // _DPSEC_H \ No newline at end of file diff --git a/include/rmsdk/dptimer.h b/include/rmsdk/dptimer.h new file mode 100644 index 0000000..719eaf4 --- /dev/null +++ b/include/rmsdk/dptimer.h @@ -0,0 +1,87 @@ +/* + File automatically generated by SOAdvancedDissector.py + More information at http://indefero.soutade.fr/p/soadvanceddissector +*/ + +#ifndef _DPTIMER_H +#define _DPTIMER_H + +#include + + +namespace dptimer { + + class Timer; + class MultiplexedTimer; + class TimerClient; + class TimerProvider; + class MultiplexedTimerProvider; + + + class Timer: public dp::Releasable + { + public: + virtual ~Timer(); + virtual void* getInterfaceID(); + virtual void release() = 0; + virtual void setTimeout(int) = 0; + virtual void cancel() = 0; + + }; + + class MultiplexedTimer: public dptimer::Timer + { + public: + MultiplexedTimer(dptimer::TimerClient*); + + virtual ~MultiplexedTimer(); + virtual void* getInterfaceID(); + virtual void release(); + virtual void setTimeout(int); + virtual void cancel(); + + }; + + class TimerClient: public dp::Unknown + { + public: + virtual ~TimerClient(); + virtual void* getInterfaceID(); + virtual void timerFired(dptimer::Timer*) = 0; + + }; + + class TimerProvider: public dp::Unknown + { + public: + virtual ~TimerProvider(); + virtual void* getInterfaceID(); + virtual void virtfunc24() = 0; + + void getProvider(); + void setProvider(dptimer::TimerProvider*); + + }; + + class MultiplexedTimerProvider: public dptimer::TimerClient, public dptimer::TimerProvider + { + public: + MultiplexedTimerProvider(); + + virtual ~MultiplexedTimerProvider(); + virtual void* getInterfaceID(); + virtual void timerFired(dptimer::Timer*); + virtual void createTimer(dptimer::TimerClient*); + + void add(dptimer::MultiplexedTimer*); + void rearm(); + void remove(dptimer::MultiplexedTimer*); + + }; + + +} + + + +#endif // _DPTIMER_H diff --git a/include/rmsdk/dputils.h b/include/rmsdk/dputils.h new file mode 100644 index 0000000..8bc68d9 --- /dev/null +++ b/include/rmsdk/dputils.h @@ -0,0 +1,68 @@ +/* + File automatically generated by SOAdvancedDissector.py + More information at http://indefero.soutade.fr/p/soadvanceddissector +*/ + +#ifndef _DPUTILS_H +#define _DPUTILS_H + +#include +#include + +namespace dpio { + class StreamClient; + class Stream: public dp::Releasable + { + public: + virtual ~Stream(); + virtual void* getInterfaceID(); + virtual void release() = 0; + virtual void setStreamClient(dpio::StreamClient*) = 0; + virtual int getCapabilities() = 0; + virtual void requestInfo() = 0; + virtual void requestBytes(unsigned int, unsigned int) = 0; + virtual void reportWriteError(dp::String const&) = 0; + virtual void adjustModifiedStream(); + + static dpio::Stream* createDataStream(dp::String const&, dp::Data const&, dpio::StreamClient*, dp::Callback*); + static dpio::Stream* createDataURLStream(dp::String const&, dpio::StreamClient*, dp::Callback*); + static dp::Data readSynchronousStream(dpio::Stream*); + + }; +} + +namespace dputils { + + class GuardedObject; + class GuardedStream; + + class GuardedObject + { + public: + GuardedObject(); + + virtual void release(); + virtual void virtfunc12() = 0; + + }; + + class GuardedStream: public dpio::Stream, public dputils::GuardedObject + { + public: + virtual ~GuardedStream(); + virtual void release(); + virtual void setStreamClient(dpio::StreamClient*); + virtual int getCapabilities() = 0; + virtual void requestInfo() = 0; + virtual void requestBytes(unsigned int, unsigned int) = 0; + virtual void reportWriteError(dp::String const&) = 0; + virtual void propertiesReady() = 0; + + }; + + +} + + + +#endif // _DPUTILS_H diff --git a/include/rmsdk/librmsdk.h b/include/rmsdk/librmsdk.h new file mode 100644 index 0000000..9d73a25 --- /dev/null +++ b/include/rmsdk/librmsdk.h @@ -0,0 +1,308 @@ +/* + File automatically generated by SOAdvancedDissector.py + More information at http://indefero.soutade.fr/p/soadvanceddissector +*/ + +#ifndef _LIBRMSDK_H +#define _LIBRMSDK_H + +// #include +#include +#include +//#include +//#include +//#include +//#include +#include + +#define WORKFLOW_AUTH_SIGN_IN 0x2 +#define WORKFLOW_ADD_SIGN_IN 0x4 +#define WORKFLOW_ACTIVATION 0x10 +#define WORKFLOW_FULFILLMENT 0x20 +#define WORKFLOW_LOAN_RETURN 0x80 +#define WORKFLOW_UPDATE_LOAN 0x100 +#define WORKFLOW_DOWNLOAD 0x200 +#define WORKFLOW_JOIN_ACCOUNTS 0x400 +#define WORKFLOW_GET_CREDENTIAL_LIST 0x800 +#define WORKFLOW_NOTIFICATION 0x1000 + +namespace rmsdk { + + adept::DRMProviderImpl* getProvider(); + +} + +class MetroWisDOM: public mdom::DOM, public mdom::DataSink +{ +public: + MetroWisDOM(MetroWisDOM&); + MetroWisDOM(MetroWisDOM&, bool); + MetroWisDOM(uft::ErrorHandler*, int); + + virtual ~MetroWisDOM(); + virtual void getDOMId(); + virtual void getDOMCaps(); + virtual void query(uft::Value const&, void*); + virtual void setElementConfigs(mdom::Node const&, mdom::ElementConfig const*, unsigned int); + virtual void setPreParser(uft::ValueParser*); + virtual mdom::Node getRoot(); + virtual void getResource(uft::URL const&); + virtual void attachDOMListener(unsigned int, mdom::DOMListener*); + virtual void clearChanges(); + virtual void cloneConfig(); + virtual void setDOMHost(mdom::DOMHost*); + virtual void setMasterURL(uft::URL const&); + virtual void writeData(uft::URL const&, unsigned char const*, unsigned int, mdom::ParseException*, mdom::ExternalEntityResolver*); + virtual void xformsProcessorHalted(); + virtual void xformsFatalError(uft::String); + +}; + +class WisDOMTraversal; +class WisDOMTree; +class WDLinkSnapshot{}; +class WDIdAttrValue{}; +class WisDOM_NodeTypes{}; +class WDNodeReference; +class WDNodeClass; + +class WDLinkAttrValue +{ +public: + WDLinkAttrValue(uft::sref const&, uft::Value const&, WisDOMTraversal*, int, WisDOMTraversal*, int); + + void query(uft::Value const&, void*); + void staticInit(); + + void* s_descriptor; + +}; + +class WDNodeParserContext: public uft::ParserContext +{ +public: + WDNodeParserContext(mdom::Node const&, unsigned int); + + virtual void resolveNSPrefix(uft::String const&); + virtual void prefixBindingsChanged(); + virtual void getNodeType(); + +}; + +class WDSelectorLink +{ +public: + WDSelectorLink(uft::Value const&, xpath::Expression const&, mdom::Node&, uft::sref const&); + + void staticInit(); + + void* s_descriptor; + +}; + +class WDStringHash +{ +public: + WDStringHash(WDStringHash&); + WDStringHash(WisDOMTree*, unsigned long); + + virtual ~WDStringHash(); + + void get(unsigned long) const; + void hash(char const*, unsigned long); + void lookup(char const*, unsigned long*, unsigned long) const; + void minimizeHash(int*); + void put(char const*); + +}; + +class WisDOMMemory +{ +public: + WisDOMMemory(); + + ~WisDOMMemory(); + + void Alloc(unsigned int); + void Free(void*); + void Realloc(void*, unsigned int); + void appendCommentChars(char*, int, int); + void appendDataChars(char*, int, int, bool); + void getCommentStringBuffer(int); + void getDataStringBuffer(int); + void trimCommentChars(); + void trimDataChars(); + +}; + +class WisDOMTraversal: public mdom::Traversal +{ +public: + WisDOMTraversal(MetroWisDOM*, WisDOMTraversal const&); + WisDOMTraversal(MetroWisDOM*, uft::URL const&); + WisDOMTraversal(WisDOMTraversal const&, WisDOMTree*); + + virtual void incRef(mdom::NodeData*); + virtual void decRef(mdom::NodeData*); + virtual void getDOM(); + virtual void owner(mdom::Node*); + virtual void parent(mdom::Node*); + virtual void child(mdom::Node*, int, bool); + virtual void sibling(mdom::Node*, int, bool); + virtual void childCount(mdom::Node const*, bool); + virtual void nextLink(mdom::Node const*, unsigned int, unsigned int, mdom::Node*, uft::Value const**); + virtual void finishLinkIteration(mdom::Node const*, unsigned int, unsigned int); + virtual void create(mdom::Node*, int, uft::Value const&); + virtual void clone(mdom::Node*, bool); + virtual void insertBefore(mdom::Node const*, mdom::Node const*, mdom::Node const*); + virtual void remove(mdom::Node const*); + virtual void getNodeType(mdom::Node const*); + virtual uft::String getNodeName(mdom::Node const*); + virtual uft::Value getNodeValue(mdom::Node const*, unsigned int, unsigned int); + virtual void changeNodeValue(mdom::Node const*, unsigned int, unsigned int, uft::Value const&); + virtual void resolvePrefix(mdom::Node const*, uft::String const&); + virtual void getBaseURL(mdom::Node const*); + virtual void nextAttribute(mdom::Node const*, unsigned int, unsigned int, uft::Value const**, uft::Value const**); + virtual void finishAttributeIteration(mdom::Node const*, unsigned int, unsigned int); + virtual void getAttribute(mdom::Node const*, uft::Value const&); + virtual void setAttribute(mdom::Node const*, uft::Value const&, uft::Value const&); + virtual void compareNodes(mdom::Node const*, mdom::Node const*); + virtual void evaluate(xpath::Expression const&, mdom::Node const*, xpath::Context*, xpath::ResultType); + virtual void iterate(xpath::Expression const&, xpath::Context*, mdom::Node*); + virtual void finishIteration(xpath::Expression const&, xpath::Context*); + virtual void getChangeFlags(mdom::Node const*); + virtual void invalidate(mdom::Node const*, unsigned int); + virtual void iterateChangedAttributes(mdom::Node const*, unsigned int, uft::Value*, uft::Value*); + virtual void finishChangedAttributeIteration(mdom::Node const*, unsigned int); + virtual void iterateNodeValueChanges(mdom::Node const*, unsigned int, mdom::TextChangeRecord*); + virtual void finishNodeValueChangeIteration(mdom::Node const*, unsigned int); + virtual void iterateRemovedChildren(mdom::Node const*, unsigned int, mdom::RemovedChildRecord*); + virtual void finishRemovedChildIteration(mdom::Node const*, unsigned int); + virtual void getAttachment(mdom::Node const*, uft::Value const&); + virtual void setAttachment(mdom::Node const*, uft::Value const&, uft::Value const&); + virtual void getAttachment(uft::Value const&); + virtual void setAttachment(uft::Value const&, uft::Value const&); + virtual void getReference(mdom::Node const*, bool); + virtual void destroy(); + virtual ~WisDOMTraversal(); + virtual void nextNamespaceDecl(mdom::Node const*, unsigned int, unsigned int, uft::Value const**); + virtual void finishNamespaceIteration(mdom::Node const*, unsigned int, unsigned int); + + void addRulesToList(mdom::Node const*, uft::Vector const&, uft::Value const&); + void afterInsertion(int); + void afterRemoval(int); + void afterShadowInsertion(int, uft::Dict&); + void allocLinkSnap(); + void beforeInsertion(int, uft::Dict&); + void beforeRemoval(int, uft::Dict&); + void cacheChangedAttribute(int, uft::Value const&, uft::Value const&); + void cacheChangedValue(int, uft::Value const&); + void characterData(char const*, int); + void clearChangeCaches(); + void clearChanges(); + void cloneChildren(int, int, int, int); + void cloneNode(int); + void comment(char const*, bool); + void createElementWithQName(uft::QName const&, char const**, bool); + void createSelectorLink(mdom::Node*, mdom::Reference, uft::Value const&); + void createTextNode(bool); + void deleteLinkSnap(WDLinkSnapshot*); + void detachChildren(int, int, int); + void detachNode(int); + void docTypeName(char const*); + void docTypePublicID(char const*); + void docTypeSystemID(char const*); + void endCDATASection(); + void endElement(char const*); + void endNamespace(char const*); + void ensureNSStackCapacity(); + void filterAndAddRulesToList(mdom::Node const*, uft::Vector const&, uft::Value const&); + void findDOMInsertIndex(int, int, int); + void findFragInsertIndex(int, int, int, int*, int*, int*); + void findLinkAttr(xpath::Expression const&, int, uft::sref const&); + void findUnattachedNodeIdx(int, int*, int*); + void getAttributeByName(int, uft::Value const&); + void getAttributeConfig(int, uft::Value const&); + void getBranchRoot(int); + void getChangedValue(int, unsigned int); + void getDOMTree(); + void getIdAttr(int); + void getIdAttrFromMap(int, uft::String const&); + void getIdMap(); + void getLinkCache(int); + void getLocalizedIdMap(int); + void getNode(WDNodeReference*); + void getRoot(); + void getSelectorLink(int); + void initDocumentModel(bool); + void internalEntity(char const*, char const*, int); + void newAttribute(int, uft::Value const&, uft::Value const&); + void parsedAttribute(int, WDNodeClass*, uft::Value const&, uft::Value const&); + void processSimpleMatch(xpath::SimpleMatch const&, uft::Value const&, bool); + void processingInstruction(char const*, char const*, bool); + void reconfigureAttribute(mdom::Node*, int, int, uft::QName const&, WDNodeClass*, bool); + void reconfigureElement(mdom::Node*, int, WDNodeClass*, bool); + void registerId(uft::Dict&, uft::sref const&); + void registerLink(int, uft::sref const&); + void remapFromDocIndex(int); + void removeAttribute(int, int); + void removeSelectorLink(mdom::Node*, mdom::Reference, uft::Value const&); + void resolvePrefixLocal(int, uft::String const&); + void setDirtyBits(int, unsigned int); + void startCDATASection(); + void startElement(char const*, char const**, bool); + void startNamespace(char const*, char const*); + void staticInit(); + void unregisterId(uft::Dict&, uft::sref const&); + void unregisterLink(int, uft::sref const&); + void updateSelectorLinks(); + void writeData(unsigned char const*, unsigned int, mdom::ParseException*, mdom::ExternalEntityResolver*); + + void* s_descriptor; + +}; + +class WisDOMTree +{ +public: + WisDOMTree(WisDOMTraversal*, int); + WisDOMTree(WisDOMTree&); + WisDOMTree(int); + + ~WisDOMTree(); + + void addAttribute(int, uft::Value const&, uft::Value const&); + void addDynamicAttribute(int, uft::Value const&, uft::Value const&, int); + void addNamespace(int, uft::Value const&); + void addNode(WisDOM_NodeTypes, int, int, int, uft::Value const&, bool); + void appendHashKey(char const*, int, int); + void cacheUnattachedNode(int); + void clearChanges(); + void closeElements(_IO_FILE*, int); + void copyAttribute(int, uft::Value, uft::Value); + void copyNode(int); + void ensureAttributeCapacity(); + void ensureDynamicAttributeCapacity(); + void ensureNamespaceCapacity(); + void ensureNodeCapacity(); + void ensurePriorIndex(); + void freePriorIndex(); + void getRoot(); + void initDocumentModel(bool); + void insertUnattachedNode(int, int, int); + void isUsingNamespaces(); + void makePriorIndex(); + void makeSerialIndex(); + void serializeAttribute(_IO_FILE*, uft::Value, uft::Value); + void serializeComment(_IO_FILE*, int); + void serializeDOM(_IO_FILE*); + void serializeElement(_IO_FILE*, int); + void serializeNamespace(_IO_FILE*, int); + void serializePI(_IO_FILE*, int); + void serializeText(_IO_FILE*, int); + void setTraversal(WisDOMTraversal*); + void writeData(unsigned char const*, unsigned int, mdom::ParseException*, mdom::ExternalEntityResolver*); + +}; + +#endif // _LIBRMSDK_H diff --git a/include/rmsdk/mdom.h b/include/rmsdk/mdom.h new file mode 100644 index 0000000..2a0e1fe --- /dev/null +++ b/include/rmsdk/mdom.h @@ -0,0 +1,956 @@ +/* + File automatically generated by SOAdvancedDissector.py + More information at http://indefero.soutade.fr/p/soadvanceddissector +*/ + +#ifndef _MDOM_H +#define _MDOM_H + +#include +#include + + +namespace mdom { + + class AttrConfig; + class NameValueIterator; + class AttributeIterator; + class Traversal; + class TearOffNodeTraversal; + class AttributeNodeTraversal; + class AttributeValueTraversal; + class DOM; + class DOMHost; + class DOMListener; + class DOMListenerMultiplex; + class DocumentHandler; + class DOMSerializer; + class DataSink; + class DelegatingDOM; + class DelegatingDOMLink; + class LinkAccessor; + class DelegatingDOMLinkAccessor; + class DelegatingDOMNodeRef; + class DelegatingTraversal; + class ElementConfig; + class ExternalEntityResolver; + class GenericAttributeValue; + class InfoSetHasher; + class Link; + class NamespaceNodeTraversal; + class Node; + class NodeData; + class NodeIterator; + class NodeLine; + class NodeLineTranslationIterator; + class NodeTranslationIterator; + class Node_firstChild; + class Node_firstChildElement; + class Node_lastChildElement; + class Node_nextSibling; + class ParseException; + class Reference; + class RemovedChildRecord; + class ShiftedNodeLine; + class SingleNodeLineTranslationIterator; + class SourceNodeLine; + class TearOffNodeReference; + class TextChangeRecord; + class TraversalRef; + + + class AttrConfig + { + public: + AttrConfig(uft::QName const&, uft::ValueParser const*, unsigned int, unsigned int, uft::Value const&, unsigned int); + + void getCanonicalName() const; + void setFlags(unsigned int); + void staticInit(); + + void* s_descriptor; + + }; + + class NameValueIterator + { + public: + virtual ~NameValueIterator(); + virtual void next(uft::Value*, uft::Value*) = 0; + + }; + + class AttributeIterator: public mdom::NameValueIterator + { + public: + AttributeIterator(mdom::Node const&); + + virtual ~AttributeIterator(); + virtual void next(uft::Value*, uft::Value*); + + }; + + class Traversal + { + public: + virtual void incRef(mdom::NodeData*) = 0; + virtual void decRef(mdom::NodeData*) = 0; + virtual void getDOM() = 0; + virtual void owner(mdom::Node*) = 0; + virtual void parent(mdom::Node*) = 0; + virtual void child(mdom::Node*, int, bool) = 0; + virtual void sibling(mdom::Node*, int, bool) = 0; + virtual void attributeNode(mdom::Node*, uft::Value const&); + virtual void namespaceNode(mdom::Node*, uft::Value const&); + virtual void childCount(mdom::Node const*, bool); + virtual void getChildrenCountsToNode(mdom::Node const*, mdom::Node const*, unsigned int*, unsigned int*); + virtual void getChildrenCountsToElement(mdom::Node const*, uft::String, unsigned int*, unsigned int*, mdom::Node*, unsigned int); + virtual int iterateBranch(mdom::Node const*, mdom::Node*, unsigned int); + virtual void iterateDirtyBranch(mdom::Node const*, mdom::Node*, unsigned int); + virtual void nextLink(mdom::Node const*, unsigned int, unsigned int, mdom::Node*, uft::Value const**) = 0; + virtual void finishLinkIteration(mdom::Node const*, unsigned int, unsigned int) = 0; + virtual void create(mdom::Node*, int, uft::Value const&) = 0; + virtual void clone(mdom::Node*, bool) = 0; + virtual void import(mdom::Node*, mdom::Node const*, bool); + virtual void insertBefore(mdom::Node const*, mdom::Node const*, mdom::Node const*) = 0; + virtual void remove(mdom::Node const*) = 0; + virtual void getNodeType(mdom::Node const*) = 0; + virtual uft::String getNodeName(mdom::Node const*) = 0; + virtual uft::Value getNodeValue(mdom::Node const*, unsigned int, unsigned int) = 0; + virtual void changeNodeValue(mdom::Node const*, unsigned int, unsigned int, uft::Value const&) = 0; + virtual void resolvePrefix(mdom::Node const*, uft::String const&) = 0; + virtual void getBaseURL(mdom::Node const*) = 0; + virtual void nextAttribute(mdom::Node const*, unsigned int, unsigned int, uft::Value const**, uft::Value const**) = 0; + virtual void finishAttributeIteration(mdom::Node const*, unsigned int, unsigned int) = 0; + virtual void getAttribute(mdom::Node const*, uft::Value const&) = 0; + virtual void setAttribute(mdom::Node const*, uft::Value const&, uft::Value const&) = 0; + virtual void compareNodes(mdom::Node const*, mdom::Node const*); + virtual void evaluate(xpath::Expression const&, mdom::Node const*, xpath::Context*, xpath::ResultType); + virtual void iterate(xpath::Expression const&, xpath::Context*, mdom::Node*); + virtual void finishIteration(xpath::Expression const&, xpath::Context*); + virtual void getChangeFlags(mdom::Node const*) = 0; + virtual void invalidate(mdom::Node const*, unsigned int) = 0; + virtual void iterateChangedAttributes(mdom::Node const*, unsigned int, uft::Value*, uft::Value*) = 0; + virtual void finishChangedAttributeIteration(mdom::Node const*, unsigned int) = 0; + virtual void iterateNodeValueChanges(mdom::Node const*, unsigned int, mdom::TextChangeRecord*) = 0; + virtual void finishNodeValueChangeIteration(mdom::Node const*, unsigned int) = 0; + virtual void iterateRemovedChildren(mdom::Node const*, unsigned int, mdom::RemovedChildRecord*) = 0; + virtual void finishRemovedChildIteration(mdom::Node const*, unsigned int) = 0; + virtual void getAttachment(mdom::Node const*, uft::Value const&) = 0; + virtual void setAttachment(mdom::Node const*, uft::Value const&, uft::Value const&) = 0; + virtual void getCacheID(mdom::Node const*); + virtual void getAttachment(uft::Value const&) = 0; + virtual void setAttachment(uft::Value const&, uft::Value const&) = 0; + virtual void getReference(mdom::Node const*, bool) = 0; + virtual void destroy() = 0; + virtual ~Traversal(); + + void addRef(); + void release(); + + }; + + class TearOffNodeTraversal: public mdom::Traversal + { + public: + TearOffNodeTraversal(mdom::Node const&); + + virtual void incRef(mdom::NodeData*); + virtual void decRef(mdom::NodeData*); + virtual void getDOM(); + virtual void owner(mdom::Node*); + virtual void parent(mdom::Node*); + virtual void child(mdom::Node*, int, bool); + virtual void sibling(mdom::Node*, int, bool); + virtual void attributeNode(mdom::Node*, uft::Value const&); + virtual void namespaceNode(mdom::Node*, uft::Value const&); + virtual void childCount(mdom::Node const*, bool); + virtual void getChildrenCountsToNode(mdom::Node const*, mdom::Node const*, unsigned int*, unsigned int*); + virtual void getChildrenCountsToElement(mdom::Node const*, uft::String, unsigned int*, unsigned int*, mdom::Node*, unsigned int); + virtual int iterateBranch(mdom::Node const*, mdom::Node*, unsigned int); + virtual void iterateDirtyBranch(mdom::Node const*, mdom::Node*, unsigned int); + virtual void nextLink(mdom::Node const*, unsigned int, unsigned int, mdom::Node*, uft::Value const**); + virtual void finishLinkIteration(mdom::Node const*, unsigned int, unsigned int); + virtual void create(mdom::Node*, int, uft::Value const&); + virtual void clone(mdom::Node*, bool); + virtual void import(mdom::Node*, mdom::Node const*, bool); + virtual void insertBefore(mdom::Node const*, mdom::Node const*, mdom::Node const*); + virtual void remove(mdom::Node const*); + virtual void getNodeType(mdom::Node const*); + virtual uft::String getNodeName(mdom::Node const*); + virtual uft::Value getNodeValue(mdom::Node const*, unsigned int, unsigned int); + virtual void changeNodeValue(mdom::Node const*, unsigned int, unsigned int, uft::Value const&); + virtual void resolvePrefix(mdom::Node const*, uft::String const&); + virtual void getBaseURL(mdom::Node const*); + virtual void nextAttribute(mdom::Node const*, unsigned int, unsigned int, uft::Value const**, uft::Value const**); + virtual void finishAttributeIteration(mdom::Node const*, unsigned int, unsigned int); + virtual void getAttribute(mdom::Node const*, uft::Value const&); + virtual void setAttribute(mdom::Node const*, uft::Value const&, uft::Value const&); + virtual void compareNodes(mdom::Node const*, mdom::Node const*); + virtual void evaluate(xpath::Expression const&, mdom::Node const*, xpath::Context*, xpath::ResultType); + virtual void iterate(xpath::Expression const&, xpath::Context*, mdom::Node*); + virtual void finishIteration(xpath::Expression const&, xpath::Context*); + virtual void getChangeFlags(mdom::Node const*); + virtual void invalidate(mdom::Node const*, unsigned int); + virtual void iterateChangedAttributes(mdom::Node const*, unsigned int, uft::Value*, uft::Value*); + virtual void finishChangedAttributeIteration(mdom::Node const*, unsigned int); + virtual void iterateNodeValueChanges(mdom::Node const*, unsigned int, mdom::TextChangeRecord*); + virtual void finishNodeValueChangeIteration(mdom::Node const*, unsigned int); + virtual void iterateRemovedChildren(mdom::Node const*, unsigned int, mdom::RemovedChildRecord*); + virtual void finishRemovedChildIteration(mdom::Node const*, unsigned int); + virtual void getAttachment(mdom::Node const*, uft::Value const&); + virtual void setAttachment(mdom::Node const*, uft::Value const&, uft::Value const&); + virtual void getCacheID(mdom::Node const*); + virtual void getAttachment(uft::Value const&); + virtual void setAttachment(uft::Value const&, uft::Value const&); + virtual void getReference(mdom::Node const*, bool); + virtual void destroy(); + virtual ~TearOffNodeTraversal(); + virtual void getKey(); + virtual void getAttKey(); + + void createTearOffNode(mdom::Node const&, uft::Value const&, unsigned int); + void staticInit(); + + void* s_descriptor; + + }; + + class AttributeNodeTraversal: public mdom::TearOffNodeTraversal + { + public: + AttributeNodeTraversal(mdom::Node const&); + + virtual void incRef(mdom::NodeData*); + virtual void decRef(mdom::NodeData*); + virtual void getDOM(); + virtual void owner(mdom::Node*); + virtual void parent(mdom::Node*); + virtual void child(mdom::Node*, int, bool); + virtual void sibling(mdom::Node*, int, bool); + virtual void attributeNode(mdom::Node*, uft::Value const&); + virtual void namespaceNode(mdom::Node*, uft::Value const&); + virtual void childCount(mdom::Node const*, bool); + virtual void getChildrenCountsToNode(mdom::Node const*, mdom::Node const*, unsigned int*, unsigned int*); + virtual void getChildrenCountsToElement(mdom::Node const*, uft::String, unsigned int*, unsigned int*, mdom::Node*, unsigned int); + virtual int iterateBranch(mdom::Node const*, mdom::Node*, unsigned int); + virtual void iterateDirtyBranch(mdom::Node const*, mdom::Node*, unsigned int); + virtual void nextLink(mdom::Node const*, unsigned int, unsigned int, mdom::Node*, uft::Value const**); + virtual void finishLinkIteration(mdom::Node const*, unsigned int, unsigned int); + virtual void create(mdom::Node*, int, uft::Value const&); + virtual void clone(mdom::Node*, bool); + virtual void import(mdom::Node*, mdom::Node const*, bool); + virtual void insertBefore(mdom::Node const*, mdom::Node const*, mdom::Node const*); + virtual void remove(mdom::Node const*); + virtual void getNodeType(mdom::Node const*); + virtual uft::String getNodeName(mdom::Node const*); + virtual uft::Value getNodeValue(mdom::Node const*, unsigned int, unsigned int); + virtual void changeNodeValue(mdom::Node const*, unsigned int, unsigned int, uft::Value const&); + virtual void resolvePrefix(mdom::Node const*, uft::String const&); + virtual void getBaseURL(mdom::Node const*); + virtual void nextAttribute(mdom::Node const*, unsigned int, unsigned int, uft::Value const**, uft::Value const**); + virtual void finishAttributeIteration(mdom::Node const*, unsigned int, unsigned int); + virtual void getAttribute(mdom::Node const*, uft::Value const&); + virtual void setAttribute(mdom::Node const*, uft::Value const&, uft::Value const&); + virtual void compareNodes(mdom::Node const*, mdom::Node const*); + virtual void evaluate(xpath::Expression const&, mdom::Node const*, xpath::Context*, xpath::ResultType); + virtual void iterate(xpath::Expression const&, xpath::Context*, mdom::Node*); + virtual void finishIteration(xpath::Expression const&, xpath::Context*); + virtual void getChangeFlags(mdom::Node const*); + virtual void invalidate(mdom::Node const*, unsigned int); + virtual void iterateChangedAttributes(mdom::Node const*, unsigned int, uft::Value*, uft::Value*); + virtual void finishChangedAttributeIteration(mdom::Node const*, unsigned int); + virtual void iterateNodeValueChanges(mdom::Node const*, unsigned int, mdom::TextChangeRecord*); + virtual void finishNodeValueChangeIteration(mdom::Node const*, unsigned int); + virtual void iterateRemovedChildren(mdom::Node const*, unsigned int, mdom::RemovedChildRecord*); + virtual void finishRemovedChildIteration(mdom::Node const*, unsigned int); + virtual void getAttachment(mdom::Node const*, uft::Value const&); + virtual void setAttachment(mdom::Node const*, uft::Value const&, uft::Value const&); + virtual void getCacheID(mdom::Node const*); + virtual void getAttachment(uft::Value const&); + virtual void setAttachment(uft::Value const&, uft::Value const&); + virtual void getReference(mdom::Node const*, bool); + virtual void destroy(); + virtual ~AttributeNodeTraversal(); + virtual void getKey(); + virtual void getAttKey(); + + }; + + class AttributeValueTraversal: public mdom::TearOffNodeTraversal + { + public: + AttributeValueTraversal(mdom::Node const&); + + virtual void incRef(mdom::NodeData*); + virtual void decRef(mdom::NodeData*); + virtual void getDOM(); + virtual void owner(mdom::Node*); + virtual void parent(mdom::Node*); + virtual void child(mdom::Node*, int, bool); + virtual void sibling(mdom::Node*, int, bool); + virtual void attributeNode(mdom::Node*, uft::Value const&); + virtual void namespaceNode(mdom::Node*, uft::Value const&); + virtual void childCount(mdom::Node const*, bool); + virtual void getChildrenCountsToNode(mdom::Node const*, mdom::Node const*, unsigned int*, unsigned int*); + virtual void getChildrenCountsToElement(mdom::Node const*, uft::String, unsigned int*, unsigned int*, mdom::Node*, unsigned int); + virtual int iterateBranch(mdom::Node const*, mdom::Node*, unsigned int); + virtual void iterateDirtyBranch(mdom::Node const*, mdom::Node*, unsigned int); + virtual void nextLink(mdom::Node const*, unsigned int, unsigned int, mdom::Node*, uft::Value const**); + virtual void finishLinkIteration(mdom::Node const*, unsigned int, unsigned int); + virtual void create(mdom::Node*, int, uft::Value const&); + virtual void clone(mdom::Node*, bool); + virtual void import(mdom::Node*, mdom::Node const*, bool); + virtual void insertBefore(mdom::Node const*, mdom::Node const*, mdom::Node const*); + virtual void remove(mdom::Node const*); + virtual void getNodeType(mdom::Node const*); + virtual uft::String getNodeName(mdom::Node const*); + virtual uft::Value getNodeValue(mdom::Node const*, unsigned int, unsigned int); + virtual void changeNodeValue(mdom::Node const*, unsigned int, unsigned int, uft::Value const&); + virtual void resolvePrefix(mdom::Node const*, uft::String const&); + virtual void getBaseURL(mdom::Node const*); + virtual void nextAttribute(mdom::Node const*, unsigned int, unsigned int, uft::Value const**, uft::Value const**); + virtual void finishAttributeIteration(mdom::Node const*, unsigned int, unsigned int); + virtual void getAttribute(mdom::Node const*, uft::Value const&); + virtual void setAttribute(mdom::Node const*, uft::Value const&, uft::Value const&); + virtual void compareNodes(mdom::Node const*, mdom::Node const*); + virtual void evaluate(xpath::Expression const&, mdom::Node const*, xpath::Context*, xpath::ResultType); + virtual void iterate(xpath::Expression const&, xpath::Context*, mdom::Node*); + virtual void finishIteration(xpath::Expression const&, xpath::Context*); + virtual void getChangeFlags(mdom::Node const*); + virtual void invalidate(mdom::Node const*, unsigned int); + virtual void iterateChangedAttributes(mdom::Node const*, unsigned int, uft::Value*, uft::Value*); + virtual void finishChangedAttributeIteration(mdom::Node const*, unsigned int); + virtual void iterateNodeValueChanges(mdom::Node const*, unsigned int, mdom::TextChangeRecord*); + virtual void finishNodeValueChangeIteration(mdom::Node const*, unsigned int); + virtual void iterateRemovedChildren(mdom::Node const*, unsigned int, mdom::RemovedChildRecord*); + virtual void finishRemovedChildIteration(mdom::Node const*, unsigned int); + virtual void getAttachment(mdom::Node const*, uft::Value const&); + virtual void setAttachment(mdom::Node const*, uft::Value const&, uft::Value const&); + virtual void getCacheID(mdom::Node const*); + virtual void getAttachment(uft::Value const&); + virtual void setAttachment(uft::Value const&, uft::Value const&); + virtual void getReference(mdom::Node const*, bool); + virtual void destroy(); + virtual ~AttributeValueTraversal(); + virtual void getKey(); + virtual void getAttKey(); + + }; + + class DOM + { + public: + DOM(uft::ErrorHandler*); + + virtual ~DOM(); + virtual void getDOMId() = 0; + virtual void getDOMCaps() = 0; + virtual void query(uft::Value const&, void*) = 0; + virtual void setElementConfigs(mdom::Node const&, mdom::ElementConfig const*, unsigned int) = 0; + virtual void setPreParser(uft::ValueParser*) = 0; + virtual mdom::Node getRoot() = 0; + virtual void getResource(uft::URL const&) = 0; + virtual void attachDOMListener(unsigned int, mdom::DOMListener*) = 0; + virtual void getErrorHandler(); + virtual void clearChanges() = 0; + virtual void cloneConfig() = 0; + virtual void setDOMHost(mdom::DOMHost*) = 0; + + }; + + class DOMHost + { + public: + virtual ~DOMHost(); + virtual void requestClearChanges(mdom::Node const&) = 0; + virtual void requestResource(uft::URL const&) = 0; + virtual void showErrorMessage(uft::String&) = 0; + + }; + + class DOMListener + { + public: + virtual ~DOMListener(); + virtual void created(mdom::Node const*) = 0; + virtual void inserting(mdom::Node const*, mdom::Node const*) = 0; + virtual void inserted(mdom::Node const*, mdom::Node const*) = 0; + virtual void removing(mdom::Node const*, mdom::Node const*) = 0; + virtual void removed(mdom::Node const*, mdom::Node const*) = 0; + virtual void changingNodeValue(mdom::Node const*, unsigned int, unsigned int, uft::Value const&) = 0; + virtual void wantChangedNodeValueCall(mdom::Node const*) = 0; + virtual void changedNodeValue(mdom::Node const*, unsigned int, unsigned int, uft::Value const&) = 0; + virtual void changingAttribute(mdom::Node const*, uft::Value const&, uft::Value const&) = 0; + virtual void wantChangedAttributeCall(mdom::Node const*, uft::Value const&) = 0; + virtual void changedAttribute(mdom::Node const*, uft::Value const&, uft::Value const&, uft::Value const&) = 0; + virtual void changingLink(mdom::Node const*, uft::Value const&, mdom::Node const*, mdom::Node const*) = 0; + virtual void wantChangedLinkCall(mdom::Node const*, uft::Value const&) = 0; + virtual void changedLink(mdom::Node const*, uft::Value const&, mdom::Node const*, mdom::Node const*) = 0; + virtual void changingElementConfig(mdom::Node const*, unsigned int) = 0; + virtual void changedElementConfig(mdom::Node const*) = 0; + virtual void changedBranch(mdom::Node const*) = 0; + + }; + + class DOMListenerMultiplex + { + public: + DOMListenerMultiplex(); + DOMListenerMultiplex(mdom::DOMListenerMultiplex const&); + + ~DOMListenerMultiplex(); + + void attachDOMListener(unsigned int, mdom::DOMListener*); + void changedAttribute(mdom::Node const*, uft::Value const&, uft::Value const&, uft::Value const&); + void changedBranch(mdom::Node const*); + void changedElementConfig(mdom::Node const*); + // void changedLink(mdom::Node const*, uft::sref const&, mdom::Node const*, mdom::Node const*); + void changedNodeValue(mdom::Node const*, unsigned int, unsigned int, uft::Value const&); + void changingAttribute(mdom::Node const*, uft::Value const&, uft::Value const&); + void changingElementConfig(mdom::Node const*, unsigned int); + // void changingLink(mdom::Node const*, uft::sref const&, mdom::Node const*, mdom::Node const*); + void changingNodeValue(mdom::Node const*, unsigned int, unsigned int, uft::Value const&); + void created(mdom::Node const*); + void inserted(mdom::Node const*, mdom::Node const*); + void inserting(mdom::Node const*, mdom::Node const*); + void removed(mdom::Node const*, mdom::Node const*); + void removing(mdom::Node const*, mdom::Node const*); + void wantChangedAttributeCall(mdom::Node const*, uft::Value const&); + // void wantChangedLinkCall(mdom::Node const*, uft::sref const&); + void wantChangedNodeValueCall(mdom::Node const*); + + }; + + class DocumentHandler + { + public: + DocumentHandler(); + + virtual ~DocumentHandler(); + virtual bool characters(uft::Value const&) = 0; + virtual bool comment(uft::Value const&) = 0; + virtual bool endDocument() = 0; + virtual bool endElement(uft::Value const&, uft::Value const&, uft::Value const&) = 0; + virtual bool endEntity(uft::Value const&) = 0; + virtual bool processingInstruction(uft::Value const&, uft::Value const&) = 0; + virtual bool startDocument() = 0; + virtual bool startElement(mdom::Node const&, uft::Value const&, uft::Value const&, uft::Value const&, mdom::NameValueIterator*) = 0; + virtual bool startEntity(uft::Value const&) = 0; + }; + + class DOMSerializer: public mdom::DocumentHandler + { + public: + DOMSerializer(); + + virtual ~DOMSerializer(); + virtual bool characters(uft::Value const&); + virtual bool comment(uft::Value const&); + virtual bool endDocument(); + virtual bool endElement(uft::Value const&, uft::Value const&, uft::Value const&); + virtual bool endEntity(uft::Value const&); + virtual bool processingInstruction(uft::Value const&, uft::Value const&); + virtual bool startDocument(); + virtual bool startElement(mdom::Node const&, uft::Value const&, uft::Value const&, uft::Value const&, mdom::NameValueIterator*); + virtual bool startEntity(uft::Value const&); + virtual bool getOutputString(); + + void appendValue(uft::Value const&, unsigned int); + void lookupAutogenNSStack(uft::String&, uft::String&); + void lookupNSStack(uft::String&, uft::String&); + + }; + + class DataSink + { + public: + virtual void virtfunc8() = 0; + virtual void virtfunc12() = 0; + + }; + + class DelegatingDOM: public mdom::DOM + { + public: + DelegatingDOM(mdom::DOM*); + DelegatingDOM(mdom::Node const&); + + virtual ~DelegatingDOM(); + virtual void getDOMId() = 0; + virtual void getDOMCaps() = 0; + virtual void query(uft::Value const&, void*) = 0; + virtual void setElementConfigs(mdom::Node const&, mdom::ElementConfig const*, unsigned int); + virtual void setPreParser(uft::ValueParser*); + virtual mdom::Node getRoot(); + virtual void getResource(uft::URL const&); + virtual void attachDOMListener(unsigned int, mdom::DOMListener*); + virtual void getErrorHandler(); + virtual void clearChanges(); + virtual void cloneConfig(); + virtual void setDOMHost(mdom::DOMHost*); + virtual void baseNode(mdom::Node const&); + virtual void traversalSwitch(mdom::Node*); + virtual void traversalSwitch(mdom::Node*, uft::Value const&); + virtual void createDelegateFor(mdom::Node*, uft::Value const&); + virtual void destroyDelegate(mdom::DelegatingTraversal*); + virtual void getDefaultKey() const; + + void refreshBase(mdom::Node const&); + void registerRef(mdom::DelegatingDOMNodeRef*); + void translateNode(mdom::Node const&); + void translateNode(mdom::Node const&, uft::Value const&); + void unregisterRef(mdom::DelegatingDOMNodeRef*); + + }; + + class DelegatingDOMLink + { + public: + void query(uft::Value const&, void*); + void staticInit(); + void toString() const; + + void* s_descriptor; + + }; + + class LinkAccessor + { + public: + virtual void getFirstLinkedNode(uft::Value const&, mdom::Node const&); + virtual void iterateLinkedNodes(uft::Value const&, mdom::Node const&, unsigned int*); + virtual void finishLinkedNodeIteration(uft::Value const&, mdom::Node const&, unsigned int); + + void* s_instance; + + }; + + class DelegatingDOMLinkAccessor: public mdom::LinkAccessor + { + public: + virtual void getFirstLinkedNode(uft::Value const&, mdom::Node const&); + virtual void iterateLinkedNodes(uft::Value const&, mdom::Node const&, unsigned int*); + virtual void finishLinkedNodeIteration(uft::Value const&, mdom::Node const&, unsigned int); + + void* s_instance; + + }; + + class DelegatingDOMNodeRef + { + public: + DelegatingDOMNodeRef(mdom::DelegatingDOM*, mdom::Reference const&, uft::Value const&); + + ~DelegatingDOMNodeRef(); + + void query(uft::Value const&, void*); + void staticInit(); + void toString() const; + + void* s_descriptor; + + }; + + class DelegatingTraversal: public mdom::Traversal + { + public: + DelegatingTraversal(mdom::Traversal*, mdom::DelegatingDOM*, uft::Value const&); + + virtual void incRef(mdom::NodeData*); + virtual void decRef(mdom::NodeData*); + virtual void getDOM(); + virtual void owner(mdom::Node*); + virtual void parent(mdom::Node*); + virtual void child(mdom::Node*, int, bool); + virtual void sibling(mdom::Node*, int, bool); + virtual void attributeNode(mdom::Node*, uft::Value const&); + virtual void namespaceNode(mdom::Node*, uft::Value const&); + virtual void childCount(mdom::Node const*, bool); + virtual void getChildrenCountsToNode(mdom::Node const*, mdom::Node const*, unsigned int*, unsigned int*); + virtual void getChildrenCountsToElement(mdom::Node const*, uft::String, unsigned int*, unsigned int*, mdom::Node*, unsigned int); + virtual int iterateBranch(mdom::Node const*, mdom::Node*, unsigned int); + virtual void iterateDirtyBranch(mdom::Node const*, mdom::Node*, unsigned int); + virtual void nextLink(mdom::Node const*, unsigned int, unsigned int, mdom::Node*, uft::Value const**); + virtual void finishLinkIteration(mdom::Node const*, unsigned int, unsigned int); + virtual void create(mdom::Node*, int, uft::Value const&); + virtual void clone(mdom::Node*, bool); + virtual void import(mdom::Node*, mdom::Node const*, bool); + virtual void insertBefore(mdom::Node const*, mdom::Node const*, mdom::Node const*); + virtual void remove(mdom::Node const*); + virtual void getNodeType(mdom::Node const*); + virtual uft::String getNodeName(mdom::Node const*); + virtual uft::Value getNodeValue(mdom::Node const*, unsigned int, unsigned int); + virtual void changeNodeValue(mdom::Node const*, unsigned int, unsigned int, uft::Value const&); + virtual void resolvePrefix(mdom::Node const*, uft::String const&); + virtual void getBaseURL(mdom::Node const*); + virtual void nextAttribute(mdom::Node const*, unsigned int, unsigned int, uft::Value const**, uft::Value const**); + virtual void finishAttributeIteration(mdom::Node const*, unsigned int, unsigned int); + virtual void getAttribute(mdom::Node const*, uft::Value const&); + virtual void setAttribute(mdom::Node const*, uft::Value const&, uft::Value const&); + virtual void compareNodes(mdom::Node const*, mdom::Node const*); + virtual void evaluate(xpath::Expression const&, mdom::Node const*, xpath::Context*, xpath::ResultType); + virtual void iterate(xpath::Expression const&, xpath::Context*, mdom::Node*); + virtual void finishIteration(xpath::Expression const&, xpath::Context*); + virtual void getChangeFlags(mdom::Node const*); + virtual void invalidate(mdom::Node const*, unsigned int); + virtual void iterateChangedAttributes(mdom::Node const*, unsigned int, uft::Value*, uft::Value*); + virtual void finishChangedAttributeIteration(mdom::Node const*, unsigned int); + virtual void iterateNodeValueChanges(mdom::Node const*, unsigned int, mdom::TextChangeRecord*); + virtual void finishNodeValueChangeIteration(mdom::Node const*, unsigned int); + virtual void iterateRemovedChildren(mdom::Node const*, unsigned int, mdom::RemovedChildRecord*); + virtual void finishRemovedChildIteration(mdom::Node const*, unsigned int); + virtual void getAttachment(mdom::Node const*, uft::Value const&); + virtual void setAttachment(mdom::Node const*, uft::Value const&, uft::Value const&); + virtual void getCacheID(mdom::Node const*); + virtual void getAttachment(uft::Value const&); + virtual void setAttachment(uft::Value const&, uft::Value const&); + virtual void getReference(mdom::Node const*, bool); + virtual void destroy(); + virtual ~DelegatingTraversal(); + virtual void traversalSwitch(mdom::Node*); + virtual void traversalSwitchForResource(mdom::Node*, mdom::Node const&); + + }; + + class ElementConfig + { + public: + }; + + class ExternalEntityResolver + { + public: + virtual void getExternalEntity(uft::String const&, uft::URL const&) = 0; + + }; + + class GenericAttributeValue + { + public: + void staticInit(); + + void* s_descriptor; + + }; + + class InfoSetHasher + { + public: + InfoSetHasher(); + + ~InfoSetHasher(); + + virtual void update(unsigned char const*, unsigned int) = 0; + + void flushText(); + void hashInfoset(mdom::Node const&); + void updateStr(char const*, unsigned int); + void updateStr(uft::String const&); + + }; + + class Link + { + public: + void finishLinkedNodeIteration(mdom::Node const&, unsigned int) const; + void getFirstLinkedNode(mdom::Node const&) const; + void getLinkAccessor() const; + void isInstanceOf(uft::Value const&); + void iterateLinkedNodes(mdom::Node const&, unsigned int*) const; + + }; + + class NamespaceNodeTraversal: public mdom::TearOffNodeTraversal + { + public: + NamespaceNodeTraversal(mdom::Node const&); + + virtual void incRef(mdom::NodeData*); + virtual void decRef(mdom::NodeData*); + virtual void getDOM(); + virtual void owner(mdom::Node*); + virtual void parent(mdom::Node*); + virtual void child(mdom::Node*, int, bool); + virtual void sibling(mdom::Node*, int, bool); + virtual void attributeNode(mdom::Node*, uft::Value const&); + virtual void namespaceNode(mdom::Node*, uft::Value const&); + virtual void childCount(mdom::Node const*, bool); + virtual void getChildrenCountsToNode(mdom::Node const*, mdom::Node const*, unsigned int*, unsigned int*); + virtual void getChildrenCountsToElement(mdom::Node const*, uft::String, unsigned int*, unsigned int*, mdom::Node*, unsigned int); + virtual int iterateBranch(mdom::Node const*, mdom::Node*, unsigned int); + virtual void iterateDirtyBranch(mdom::Node const*, mdom::Node*, unsigned int); + virtual void nextLink(mdom::Node const*, unsigned int, unsigned int, mdom::Node*, uft::Value const**); + virtual void finishLinkIteration(mdom::Node const*, unsigned int, unsigned int); + virtual void create(mdom::Node*, int, uft::Value const&); + virtual void clone(mdom::Node*, bool); + virtual void import(mdom::Node*, mdom::Node const*, bool); + virtual void insertBefore(mdom::Node const*, mdom::Node const*, mdom::Node const*); + virtual void remove(mdom::Node const*); + virtual void getNodeType(mdom::Node const*); + virtual uft::String getNodeName(mdom::Node const*); + virtual uft::Value getNodeValue(mdom::Node const*, unsigned int, unsigned int); + virtual void changeNodeValue(mdom::Node const*, unsigned int, unsigned int, uft::Value const&); + virtual void resolvePrefix(mdom::Node const*, uft::String const&); + virtual void getBaseURL(mdom::Node const*); + virtual void nextAttribute(mdom::Node const*, unsigned int, unsigned int, uft::Value const**, uft::Value const**); + virtual void finishAttributeIteration(mdom::Node const*, unsigned int, unsigned int); + virtual void getAttribute(mdom::Node const*, uft::Value const&); + virtual void setAttribute(mdom::Node const*, uft::Value const&, uft::Value const&); + virtual void compareNodes(mdom::Node const*, mdom::Node const*); + virtual void evaluate(xpath::Expression const&, mdom::Node const*, xpath::Context*, xpath::ResultType); + virtual void iterate(xpath::Expression const&, xpath::Context*, mdom::Node*); + virtual void finishIteration(xpath::Expression const&, xpath::Context*); + virtual void getChangeFlags(mdom::Node const*); + virtual void invalidate(mdom::Node const*, unsigned int); + virtual void iterateChangedAttributes(mdom::Node const*, unsigned int, uft::Value*, uft::Value*); + virtual void finishChangedAttributeIteration(mdom::Node const*, unsigned int); + virtual void iterateNodeValueChanges(mdom::Node const*, unsigned int, mdom::TextChangeRecord*); + virtual void finishNodeValueChangeIteration(mdom::Node const*, unsigned int); + virtual void iterateRemovedChildren(mdom::Node const*, unsigned int, mdom::RemovedChildRecord*); + virtual void finishRemovedChildIteration(mdom::Node const*, unsigned int); + virtual void getAttachment(mdom::Node const*, uft::Value const&); + virtual void setAttachment(mdom::Node const*, uft::Value const&, uft::Value const&); + virtual void getCacheID(mdom::Node const*); + virtual void getAttachment(uft::Value const&); + virtual void setAttachment(uft::Value const&, uft::Value const&); + virtual void getReference(mdom::Node const*, bool); + virtual void destroy(); + virtual ~NamespaceNodeTraversal(); + virtual void getKey(); + virtual void getAttKey(); + + }; + + class NodeIterator + { + public: + virtual ~NodeIterator(); + virtual void next() = 0; + virtual void current() = 0; + + }; + + class Node + { + public: + Node(); + Node(mdom::Node const&); + Node(mdom::Node_firstChild const&); + Node(mdom::Node_firstChildElement const&); + Node(mdom::Node_lastChildElement const&); + Node(mdom::Node_nextSibling const&); + + ~Node(); + + void appendChild(mdom::Node const&) const; + void createElement(uft::QName const&) const; + void createNode(int, uft::Value const&) const; + void createTextNode(uft::String const&) const; + void finishIteration(xpath::Expression const&, xpath::Context*); + void getAttribute(uft::Value const&) const; + mdom::Node_firstChild getFirstChild() const; + mdom::Node_firstChildElement getFirstChildElement() const; + void getLastChildElement() const; + void getNextSibling() const; + void getNodeType() const; + void getOwner() const; + void getReference(bool) const; + void importNode(mdom::Node const&, bool) const; + void inPlaceCreate(int, uft::Value const&); + void isValid() const; + void iterate(xpath::Expression const&, xpath::Context*); + mdom::NodeIterator* iterateBranch(mdom::Node const&, unsigned int*); + void operator=(mdom::Node const&); + void remove() const; + void setAttribute(uft::Value const&, uft::Value const&) const; + void toChild(int, bool); + Node toFirstChild(); + void toFirstChildElement(); + void toLastChildElement(); + void toNextSibling(); + void toNextSiblingElement(); + void toOwner(); + void toPreviousSiblingElement(); + void toSibling(int, bool); + void walkBranch(mdom::DocumentHandler*) const; + + }; + + class NodeData + { + public: + }; + + class NodeLine + { + public: + virtual ~NodeLine(); + virtual void length() = 0; + virtual void item(unsigned int) = 0; + virtual void last(); + + }; + + class NodeLineTranslationIterator + { + public: + virtual ~NodeLineTranslationIterator(); + virtual void next() = 0; + virtual void current() = 0; + virtual void consumed() = 0; + virtual void endTranslation() = 0; + virtual void translationInfo() = 0; + + void* RETURN_UNTRANSLATED; + + }; + + class NodeTranslationIterator: public mdom::NodeIterator + { + public: + NodeTranslationIterator(mdom::NodeLineTranslationIterator*, mdom::NodeLine*); + + virtual ~NodeTranslationIterator(); + virtual void next(); + virtual void current(); + + }; + + class Node_firstChild + { + public: + Node_firstChild(mdom::Node const&); + + }; + + class Node_firstChildElement + { + public: + Node_firstChildElement(mdom::Node const&); + + }; + + class Node_lastChildElement + { + public: + Node_lastChildElement(mdom::Node const&); + + }; + + class Node_nextSibling + { + public: + Node_nextSibling(mdom::Node const&); + + }; + + class ParseException + { + public: + ParseException(); + ParseException(int); + ParseException(uft::String const&); + + ~ParseException(); + + void getErrorCode() const; + void getMessage() const; + + }; + + class Reference + { + public: + void getDOM() const; + void getNode() const; + void isInstanceOf(uft::Value const&); + + }; + + class RemovedChildRecord + { + public: + void staticInit(); + + void* s_descriptor; + + }; + + class ShiftedNodeLine: public mdom::NodeLine + { + public: + ShiftedNodeLine(mdom::NodeLine*, unsigned int); + + virtual ~ShiftedNodeLine(); + virtual void length(); + virtual void item(unsigned int); + virtual void last(); + + }; + + class SingleNodeLineTranslationIterator: public mdom::NodeLineTranslationIterator + { + public: + SingleNodeLineTranslationIterator(mdom::NodeLine*); + + virtual ~SingleNodeLineTranslationIterator(); + virtual void next(); + virtual void current(); + virtual void consumed(); + virtual void virtfunc28() = 0; + virtual void translationInfo(); + + }; + + class SourceNodeLine: public mdom::NodeLine + { + public: + SourceNodeLine(mdom::Node const&, mdom::Node const&); + + virtual ~SourceNodeLine(); + virtual void length(); + virtual void item(unsigned int); + virtual void last(); + + }; + + class TearOffNodeReference + { + public: + void extractNode(); + void staticInit(); + + void* s_descriptor; + + }; + + class TextChangeRecord + { + public: + void staticInit(); + + void* s_descriptor; + + }; + + class TraversalRef + { + public: + void staticInit(); + + void* s_descriptor; + + }; + + + void changeNodeTextContent(mdom::Node const&, unsigned int, unsigned int, uft::Value const&); + void getW3CNodeType(unsigned int); + // void registerAttrKey(uft::QName const&, uft::sref const&); + void setNodeTextContent(mdom::Node const&, uft::Value const&); + +} + + + +#endif // _MDOM_H diff --git a/include/rmsdk/meta.h b/include/rmsdk/meta.h new file mode 100644 index 0000000..a2e7998 --- /dev/null +++ b/include/rmsdk/meta.h @@ -0,0 +1,66 @@ +/* + File automatically generated by SOAdvancedDissector.py + More information at http://indefero.soutade.fr/p/soadvanceddissector +*/ + +#ifndef _META_H +#define _META_H + +#include +#include +#include +#include + + +namespace meta { + + class Entry; + class Metadata; + + + class Entry: public dpdoc::MetadataItem + { + public: + Entry(uft::String const&, uft::String const&); + Entry(uft::String const&, uft::String const&, uft::Dict const&); + + virtual ~Entry(); + virtual void addRef(); + virtual void release(); + virtual void getValue(); + virtual void getAttribute(dp::String const&, dp::String const&); + + void getEntryAttribute(uft::String const&, uft::String const&); + void staticInit(); + + void* s_descriptor; + + }; + + class Metadata + { + public: + Metadata(); + + void addEntry(uft::sref const&); + void get(uft::String const&, unsigned int); + void getCount(uft::String const&); + void getMetadataItem(dp::String const&, int); + void getMetadataValue(dp::String const&, int); + void* operator new(unsigned int, uft::Value&); + void staticInit(); + + void* s_descriptor; + + }; + + + void collect(mdom::Node const&, uft::sref const&); + void getMetadataElement(mdom::Node const&, unsigned int); + void readFrom(mdom::Node const&, uft::sref const&); + +} + + + +#endif // _META_H \ No newline at end of file diff --git a/include/rmsdk/metro.h b/include/rmsdk/metro.h new file mode 100644 index 0000000..8765e26 --- /dev/null +++ b/include/rmsdk/metro.h @@ -0,0 +1,26 @@ +/* + File automatically generated by SOAdvancedDissector.py + More information at http://indefero.soutade.fr/p/soadvanceddissector +*/ + +#ifndef _METRO_H +#define _METRO_H + +#include + + +namespace metro { + + class WisDOM + { + public: + void Create(uft::ErrorHandler*, int); + + }; + + +} + + + +#endif // _METRO_H \ No newline at end of file diff --git a/include/rmsdk/package.h b/include/rmsdk/package.h new file mode 100644 index 0000000..4d1f364 --- /dev/null +++ b/include/rmsdk/package.h @@ -0,0 +1,477 @@ +/* + File automatically generated by SOAdvancedDissector.py + More information at http://indefero.soutade.fr/p/soadvanceddissector +*/ + +#ifndef _PACKAGE_H +#define _PACKAGE_H + +#include +#include +#include +#include +#include +#include +#include +#include + + +namespace package { + + class AESZipDecryptor; + class DisplayElementProxy; + class DisplayHandlerProxy; + class EPUBProvider; + class EncryptionStreamReceiver; + class LazyHighlightData; + class NCXStreamReceiver; + class OCFStreamReceiver; + class OPFStreamReceiver; + class PackageContentIterator; + class PackageDocument; + class PackageErrorHandler; + class PackageLocation; + class PackageRangeInfo; + class PackageRenderer; + class PageMap; + class PageMapStreamReceiver; + class RightsStreamReceiver; + class Subdocument; + class Subrenderer; + + + class AESZipDecryptor: public zip::FilteredStream + { + public: + AESZipDecryptor(dpio::Stream*, unsigned char const*, unsigned int); + + virtual ~AESZipDecryptor(); + virtual void getCapabilities(); + virtual void requestBytes(unsigned int, unsigned int); + virtual void bytesReady(unsigned int, dp::Data const&, bool); + virtual void totalLengthReady(unsigned int); + + }; + + class DisplayElementProxy: public dpdoc::DisplayElement + { + public: + virtual ~DisplayElementProxy(); + virtual void getType(); + virtual void getBeginning(); + virtual void getEnd(); + virtual void getBox(dpdoc::Rectangle*); + virtual void getTransform(dpdoc::Matrix*); + virtual void getEmbedURL(); + + }; + + class DisplayHandlerProxy: public dpdoc::DisplayHandler + { + public: + virtual ~DisplayHandlerProxy(); + virtual void startDisplayElement(dpdoc::DisplayElement*); + virtual void endDisplayElement(dpdoc::DisplayElement*); + + }; + + class EPUBProvider: public dpdoc::DocumentProvider + { + public: + virtual ~EPUBProvider(); + virtual void createDocument(dpdoc::DocumentClient*, dp::String const&); + + }; + + class EncryptionStreamReceiver: public dpio::StreamClient + { + public: + EncryptionStreamReceiver(package::PackageDocument*, uft::URL const&, dpio::Stream*); + + virtual ~EncryptionStreamReceiver(); + virtual void propertyReady(dp::String const&, dp::String const&); + virtual void totalLengthReady(unsigned int); + virtual void propertiesReady(); + virtual void bytesReady(unsigned int, dp::Data const&, bool); + virtual void reportError(dp::String const&); + + }; + + class LazyHighlightData + { + public: + void checkValid(uft::String); + void compare(uft::sref, int&); + void staticInit(); + + void* s_descriptor; + + }; + + class NCXStreamReceiver: public dpio::StreamClient + { + public: + NCXStreamReceiver(package::PackageDocument*, uft::URL const&, dpio::Stream*); + + virtual ~NCXStreamReceiver(); + virtual void propertyReady(dp::String const&, dp::String const&); + virtual void totalLengthReady(unsigned int); + virtual void propertiesReady(); + virtual void bytesReady(unsigned int, dp::Data const&, bool); + virtual void reportError(dp::String const&); + + }; + + class OCFStreamReceiver: public dpio::StreamClient + { + public: + OCFStreamReceiver(package::PackageDocument*, uft::URL const&, dpio::Stream*); + + virtual ~OCFStreamReceiver(); + virtual void propertyReady(dp::String const&, dp::String const&); + virtual void totalLengthReady(unsigned int); + virtual void propertiesReady(); + virtual void bytesReady(unsigned int, dp::Data const&, bool); + virtual void reportError(dp::String const&); + + }; + + class OPFStreamReceiver: public dpio::StreamClient + { + public: + OPFStreamReceiver(package::PackageDocument*, uft::URL const&, dpio::Stream*); + + virtual ~OPFStreamReceiver(); + virtual void propertyReady(dp::String const&, dp::String const&); + virtual void totalLengthReady(unsigned int); + virtual void propertiesReady(); + virtual void bytesReady(unsigned int, dp::Data const&, bool); + virtual void reportError(dp::String const&); + + }; + + class PackageContentIterator: public dpdoc::ContentIterator + { + public: + PackageContentIterator(package::PackageDocument*, dp::ref const&); + + virtual ~PackageContentIterator(); + virtual void release(); + virtual void next(unsigned int); + virtual void previous(unsigned int); + virtual void getCurrentPosition(); + + }; + + class PackageDocument: public dpdoc::Document, public zip::ArchiveListener + { + public: + PackageDocument(dpdoc::DocumentClient*); + + virtual ~PackageDocument(); + virtual void getOptionalInterface(char const*); + virtual void release(); + virtual void getInterfaceVersion(); + virtual void getNaturalUnit(); + virtual void setURL(dp::String const&); + virtual void getMetadata(dp::String const&, int); + virtual void getTocRoot(); + virtual void getBeginning(); + virtual void getEnd(); + virtual void getLocationFromBookmark(dp::String const&); + virtual void findText(dp::ref const&, dp::ref const&, unsigned int, dp::String const&, dpdoc::Range*); + virtual void getText(dp::ref const&, dp::ref const&); + virtual void getPageCount(); + virtual void getLocationFromPagePosition(double); + virtual void getPageName(double); + virtual void getPagePosition(dp::String const&); + virtual void setSyntheticPageInfo(int, int); + virtual void setPageMapURL(dp::String const&); + virtual void getContentIterator(int, dp::ref const&); + virtual void createRenderer(dpdoc::RendererClient*); + virtual void getErrorList(); + virtual void setDocumentPassword(dp::String const&); + virtual void setLicense(dp::String const&, dp::String const&, dp::Data const&); + virtual void serializeDocumentAndLicense(); + virtual void getRights(); + virtual void setContextDevice(dpdev::Device*); + virtual void getPageProgressionDirection(); + virtual void process(); + virtual void getPagePositionFromLocation(dp::ref const&); + virtual void archiveDirectoryReady(); + virtual void archiveError(uft::String); + virtual void processDRM(); + + void addErrorToList(uft::String const&); + void encryptionReady(); + void finishOPFLoad(); + void freeUnusedSubdocument(package::Subdocument*); + void getAdeptResource(int); + void getLocationFromBookmarkCFI(dp::String const&); + void getResourceStream(uft::String, unsigned int); + void getSubdocumentLocation(unsigned int, uft::String const&); + void getSubdocumentLocationCFI(unsigned int, uft::String const&); + void isSubdocumentStartBookmark(unsigned int, uft::String const&); + void ncxReady(); + void ocfReady(); + void opfReady(); + void pagemapReady(); + void processEncryptedData(mdom::Node const&, uft::Dict const&, uft::Dict const&, bool); + void processEncryptedKey(mdom::Node const&, uft::Dict const&); + void processOCFEncryption(bool); + void processOCFRoot(mdom::Node const&); + void processOPFManifest(uft::Dict const&, mdom::Node const&); + void processOPFMetadata(mdom::Node const&); + void processOPFSpine(uft::Dict const&, mdom::Node const&); + void processPageMap(mdom::Node const&); + void readContainer(); + void readEncryption(); + void readOCF(); + void readPageMap(uft::sref&); + void reloadSubdocuments(); + void reportDocumentProcessError(uft::String const&); + void reportLoadState(); + void requestFullRepaint(); + void rightsReady(); + + }; + + class PackageErrorHandler: public uft::ErrorHandler + { + public: + virtual ~PackageErrorHandler(); + virtual void reportStateError(uft::String const&); + virtual void reportProcessError(uft::String const&); + virtual void getURLString(); + virtual void changeURL(uft::String const&); + + }; + + class PackageLocation: public dpdoc::Location + { + public: + PackageLocation(package::PackageDocument*, unsigned int, dp::ref const&); + PackageLocation(package::PackageDocument*, unsigned int, uft::String const&, dp::ref const&); + + virtual ~PackageLocation(); + virtual void addRef(); + virtual void release(); + virtual void getBookmark(); + virtual void compare(dp::ref const&); + virtual void getPagePosition(); + + void getBookmarkCFI(); + void getBookmarkInternal(); + void getSubdocumentLocation(); + + }; + + class PackageRangeInfo: public dpdoc::RangeInfo + { + public: + PackageRangeInfo(package::PackageRenderer*, dp::ref const&, dp::ref const&); + + virtual ~PackageRangeInfo(); + virtual void release(); + virtual void startsBeforeThisScreen(); + virtual void endsBeforeThisScreen(); + virtual void startsAfterThisScreen(); + virtual void endsAfterThisScreen(); + virtual void getBoxCount(); + virtual void getBox(int, bool, dpdoc::Rectangle*); + virtual void getBoxTransform(int, dpdoc::Matrix*); + virtual void getBoxFlags(int, unsigned int*); + + }; + + class PackageRenderer: public dpdoc::Renderer + { + public: + PackageRenderer(package::PackageDocument*, dpdoc::RendererClient*); + + virtual ~PackageRenderer(); + virtual void getOptionalInterface(char const*); + virtual void release(); + virtual void getInterfaceVersion(); + virtual void getCapabilities(); + virtual void navigateToLocation(dp::ref const&); + virtual void getCurrentLocation(); + virtual void supportsPixelLayout(int); + virtual void getScreenBeginning(); + virtual void getScreenEnd(); + virtual void getPageNumbersForScreen(dpdoc::PageNumbers*); + virtual void getNaturalSize(dpdoc::Rectangle*); + virtual void getMarkedArea(dpdoc::Rectangle*); + virtual void setViewport(double, double, bool); + virtual void setEnvironmentMatrix(dpdoc::Matrix const&); + virtual void setNavigationMatrix(dpdoc::Matrix const&); + virtual void getNavigationMatrix(dpdoc::Matrix*); + virtual void paint(int, int, int, int, dpdoc::Surface*); + virtual void walkScreen(dpdoc::DisplayHandler*, unsigned int); + virtual void handleEvent(dpdoc::Event*); + virtual void hitTest(double, double, unsigned int); + virtual void isFocusable(); + virtual void getPagingMode(); + virtual void setPagingMode(int); + virtual void setPageDecoration(dpdoc::PageDecoration const&); + virtual void nextScreen(); + virtual void previousScreen(); + virtual void isAtBeginning(); + virtual void isAtEnd(); + virtual void getDefaultFontSize(); + virtual void setDefaultFontSize(double); + virtual void addHighlight(int, dp::ref const&, dp::ref const&); + virtual void setHighlightColor(int, int, unsigned int); + virtual void getHighlightColor(int, int); + virtual void navigateToHighlight(int, int); + virtual void getHighlightCount(int); + virtual void getHighlight(int, int, dpdoc::Range*); + virtual void removeHighlight(int, int); + virtual void removeAllHighlights(int); + virtual void getLinkCount(); + virtual void getLinkInfo(int, dpdoc::LinkInfo*); + virtual void getExternalLinkCount(); + virtual void getExternalLinkInfo(int, dpdoc::ExternalLinkInfo*); + virtual void getRangeInfo(dp::ref const&, dp::ref const&); + virtual void setMargins(double, double, double, double); + virtual void setCSSMediaType(dp::String const&); + virtual void getVideoCountForCurrentScreen(); + virtual void getVideoInfoForVideoOnCurrentScreen(int, dpdoc::VideoInfo*); + virtual void getAudioCountForCurrentScreen(); + virtual void getAudioInfoForAudioOnCurrentScreen(int, dpdoc::AudioInfo*); + virtual void setPlayMode(unsigned int); + virtual void getPlayMode(); + virtual void showPageNumbers(bool); + virtual void allowExternalLinks(bool); + virtual void hibernate(); + virtual void wakeUp(); + virtual void performAction(dp::String const&); + virtual void getVideoInfoForCurrentScreenAsJSON(); + virtual void getAudioInfoForCurrentScreenAsJSON(); + virtual void getVideoStream(dp::String); + virtual void getAudioStream(dp::String); + + void checkPartAccess(); + void getChapterCount(); + void getChapterMimeType(unsigned int); + void getChapterRenderer(unsigned int); + void getCurrentSubdocument(); + void getCurrentSubrenderer(); + void getSubDocIdxForHighlight(int, int); + void requestFullRepaint(); + void restoreHighlights(package::Subrenderer*); + void saveHighlights(package::Subrenderer*); + void swapOutSubrenderers(); + void wrapCurrentSubdocumentLocation(dp::ref const&); + + }; + + class PageMap + { + public: + PageMap(package::PageMap const&); + PageMap(uft::String const&, int, uft::String const&); + + ~PageMap(); + + void staticInit(); + + void* s_descriptor; + + }; + + class PageMapStreamReceiver: public dpio::StreamClient + { + public: + PageMapStreamReceiver(package::PackageDocument*, uft::URL const&, dpio::Stream*); + + virtual ~PageMapStreamReceiver(); + virtual void propertyReady(dp::String const&, dp::String const&); + virtual void totalLengthReady(unsigned int); + virtual void propertiesReady(); + virtual void bytesReady(unsigned int, dp::Data const&, bool); + virtual void reportError(dp::String const&); + + }; + + class RightsStreamReceiver: public dpio::StreamClient + { + public: + RightsStreamReceiver(package::PackageDocument*, uft::URL const&, dpio::Stream*); + + virtual ~RightsStreamReceiver(); + virtual void propertyReady(dp::String const&, dp::String const&); + virtual void totalLengthReady(unsigned int); + virtual void propertiesReady(); + virtual void bytesReady(unsigned int, dp::Data const&, bool); + virtual void reportError(dp::String const&); + + }; + + class Subdocument: public dpdoc::DocumentClient + { + public: + Subdocument(); + + virtual ~Subdocument(); + virtual void getOptionalInterface(char const*); + virtual void getInterfaceVersion(); + virtual void getResourceStream(dp::String const&, unsigned int); + virtual void canContinueProcessing(int); + virtual void reportLoadingState(int); + virtual void reportDocumentError(dp::String const&); + virtual void reportErrorListChange(); + virtual void requestLicense(dp::String const&, dp::String const&, dp::Data const&); + virtual void requestDocumentPassword(); + virtual void documentSerialized(); + virtual void requestProcessing(int); + virtual void toString() const; + + void freeDocument(); + void getDocument(bool); + void getLocationFromPagePosition(double); + void getPageCount(); + void getPagePositionFromLocation(dp::ref const&); + void initialize(package::PackageDocument*, uft::sref const&, int); + + }; + + class Subrenderer: public dpdoc::RendererClient + { + public: + Subrenderer(); + + virtual ~Subrenderer(); + virtual void getOptionalInterface(char const*); + virtual void getInterfaceVersion(); + virtual void getUnitsPerInch(); + virtual void getPageMarginFontSize(); + virtual void requestRepaint(int, int, int, int); + virtual void navigateToURL(dp::String const&, dp::String const&); + virtual void reportMouseLocationInfo(dpdoc::MouseLocationInfo const&); + virtual void reportInternalNavigation(); + virtual void reportDocumentSizeChange(); + virtual void reportHighlightChange(int); + virtual void reportRendererError(dp::String const&); + virtual void finishedPlaying(); + + void clearPageCounts(); + void freeRenderer(); + void getDocument(bool); + void getNumHighlights(int); + void getRenderer(bool); + void initialize(package::PackageRenderer*, package::Subdocument*); + void setDefaultFontSize(double); + void setEnvironmentMatrix(dpdoc::Matrix const&); + void setNumHighlights(int, int); + void setPagingMode(int); + void setViewport(double, double, bool); + + }; + + +} + + + +#endif // _PACKAGE_H \ No newline at end of file diff --git a/include/rmsdk/rib.h b/include/rmsdk/rib.h new file mode 100644 index 0000000..0174663 --- /dev/null +++ b/include/rmsdk/rib.h @@ -0,0 +1,21 @@ +/* + File automatically generated by SOAdvancedDissector.py + More information at http://indefero.soutade.fr/p/soadvanceddissector +*/ + +#ifndef _RIB_H +#define _RIB_H + +namespace rib { + + class Binder + { + public: + }; + + +} + + + +#endif // _RIB_H \ No newline at end of file diff --git a/include/rmsdk/uft.h b/include/rmsdk/uft.h new file mode 100644 index 0000000..a42f717 --- /dev/null +++ b/include/rmsdk/uft.h @@ -0,0 +1,1409 @@ +/* + File automatically generated by SOAdvancedDissector.py + More information at http://indefero.soutade.fr/p/soadvanceddissector +*/ + +#ifndef _UFT_H +#define _UFT_H + +#include + +namespace uft { + + class ADEPTName; + class AllocBase; + class Allocator; + class ValueParser; + class AtomListParser; + class AtomParser; + class BitmapImage; + class BitmapImageStruct; + class BlockHead; + class Buffer; + class BufferManager; + class BufferPin; + class BufferRec; + class BufferStruct; + class CachingValue; + class ChainingParser; + class ContextParser; + class Date; + class DateStruct; + class Dict; + class DictStruct; + class DoubleParser; + class EVName; + class EnumParser; + class ErrorHandler; + class Float; + class FloatParser; + class IntParser; + class IntRectStruct; + class LazyRef; + class LazyRefStruct; + class LongParser; + class LowercasingAtomParser; + class ParserContext; + class MSchemaParserContext; + class MutableRef; + class MutableRefAccessor; + class MutableRefAccessorImpl; + class NameParser; + class NullParser; + class Opaque; + class OpaqueStruct; + class ParseErrorHandler; + class PassThruParser; + class PlatformString; + class QName; + class QNameParser; + class QNameStruct; + class Real; + class RealPoint; + class RealRect; + class Runtime; + class RuntimeImpl; + class Set; + class SimpleRefStruct; + class SizedBlock; + class StdBufferManager; + class String; + class StringBlock; + class StringBuffer; + class StringBufferStruct; + class StringParser; + class StructBlock; + class StructDescriptor; + class SubBufferManager; + class Token; + class TransientStringBuffer; + class Tuple; + class UFTInitializer; + class URL; + class URLStruct; + class UTF16String; + class Value; + class ValueRef; + class Vector; + class VectorStruct; + class WeakRef; + + + class ADEPTName + { + public: + ADEPTName(uft::String const&); + + ~ADEPTName(); + + }; + + class NoThrow + { + + }; + + class ValueType + { + + }; + + class CacheFlushContext + { + + }; + + class CacheCostInfo + { + }; + + class AllocBase + { + public: + void operator delete(void*); + void operator delete(void*, uft::NoThrow const&); + void operator delete[](void*); + void operator delete[](void*, uft::NoThrow const&); + void* operator new(unsigned int); + void* operator new(unsigned int, uft::NoThrow const&); + void* operator new[](unsigned int); + void* operator new[](unsigned int, uft::NoThrow const&); + + }; + + class Allocator + { + public: + void free(void*); + void freeClientMaintainsSize(void*, unsigned int); + void malloc(unsigned int); + void mallocClientMaintainsSize(unsigned int); + void mallocClientMaintainsSizeThrow(unsigned int); + void mallocThrow(unsigned int); + + }; + + class ValueParser + { + public: + virtual void parse(uft::ParserContext*, uft::Value const&) const = 0; + virtual void getValidStartChars() const = 0; + + void* s_atomListParser; + void* s_atomParser; + void* s_contextParser; + void* s_doubleParser; + void* s_floatParser; + void* s_intParser; + void* s_longParser; + void* s_lowercasingAtomParser; + void* s_nameParser; + void* s_nullParser; + void* s_passthruParser; + void* s_qnameParser; + void* s_stringParser; + + }; + + class AtomListParser: public uft::ValueParser + { + public: + virtual void parse(uft::ParserContext*, uft::Value const&) const; + virtual void getValidStartChars() const; + + }; + + class AtomParser: public uft::ValueParser + { + public: + virtual void parse(uft::ParserContext*, uft::Value const&) const; + virtual void getValidStartChars() const; + + }; + + class BitmapImage + { + public: + BitmapImage(); + BitmapImage(unsigned int, unsigned int, uft::String); + + }; + + class BitmapImageStruct + { + public: + BitmapImageStruct(); + BitmapImageStruct(uft::BitmapImageStruct const&); + + ~BitmapImageStruct(); + + void addUpdatedRect(uft::IntRectStruct const&); + void getPixelSize(uft::String const&); + void init(uft::Buffer const&, unsigned int, uft::String const&, uft::IntRectStruct const&); + void staticInit(); + void validate(int, int); + + void* s_descriptor; + + }; + + class BlockHead + { + public: + void addRef(); + void allocBlock(uft::StructDescriptor const*); + void allocBlock(uft::ValueType, unsigned int); + void clone() const; + void freeBlock(uft::BlockHead*); + void getType() const; + void isString() const; + void isStruct() const; + void release(); + void toString() const; + + }; + + class Buffer + { + public: + Buffer(); + Buffer(uft::Buffer const&); + Buffer(uft::String const&); + Buffer(uft::String const&, unsigned int, unsigned int); + Buffer(unsigned char const*, unsigned int); + Buffer(unsigned int, uft::BufferManager*, unsigned int); + Buffer(unsigned int, unsigned int); + + ~Buffer(); + + void append(uft::Buffer const&); + void append(unsigned char const*, unsigned int); + void buffer() const; + void clone() const; + void ensure(unsigned int); + void ensureWritableAndResize(unsigned int); + void insert(unsigned int, uft::Buffer const&); + void insert(unsigned int, unsigned char const*, unsigned int); + void isImmovable() const; + void isInstanceOf(uft::Value const&); + void isResizable() const; + void isWritable() const; + void length() const; + void nullValue(); + void operator=(uft::Buffer const&); + void pin() const; + void readonly() const; + void region(unsigned int) const; + void region(unsigned int, unsigned int) const; + void splice(unsigned int, unsigned int, uft::Buffer const&); + void splice(unsigned int, unsigned int, unsigned char const*, unsigned int); + void unpin() const; + void writableBuffer() const; + + }; + + class BufferManager + { + public: + virtual ~BufferManager(); + virtual void alloc(uft::BufferRec*, unsigned int, unsigned int) = 0; + virtual void realloc(uft::BufferRec*, unsigned int) = 0; + virtual void clone(uft::BufferRec const*, uft::BufferRec*, unsigned int) = 0; + virtual void pin(uft::BufferRec*) = 0; + virtual void unpin(uft::BufferRec*) = 0; + virtual void free(uft::BufferRec*) = 0; + virtual void toString(uft::BufferRec const*) = 0; + + void getBuffer(uft::Buffer const&); + + }; + + class BufferPin + { + public: + BufferPin(uft::Buffer const&); + + ~BufferPin(); + + void buffer() const; + + }; + + class BufferRec + { + public: + }; + + class BufferStruct + { + public: + BufferStruct(); + BufferStruct(uft::BufferStruct const&); + BufferStruct(unsigned int, uft::BufferManager*, unsigned int); + + ~BufferStruct(); + + void query(uft::Value const&, void*); + + }; + + class CachingValue + { + public: + void flush(uft::CacheFlushContext*); + void isInstanceOf(uft::Value const&); + void queryCost(uft::CacheCostInfo*); + + }; + + class ChainingParser: public uft::ValueParser + { + public: + ChainingParser(uft::ValueParser const**, int); + ChainingParser(uft::ValueParser const*, uft::ValueParser const*); + ChainingParser(uft::ValueParser const*, uft::ValueParser const*, uft::ValueParser const*); + + virtual void parse(uft::ParserContext*, uft::Value const&) const; + virtual void getValidStartChars() const; + virtual ~ChainingParser(); + + void init(uft::ValueParser const**, int); + + }; + + class ContextParser: public uft::ValueParser + { + public: + virtual void parse(uft::ParserContext*, uft::Value const&) const; + virtual void getValidStartChars() const; + + }; + + class Date + { + public: + Date(); + Date(long long); + Date(uft::Date const&); + + ~Date(); + + void breakUpTime(long long, int*, unsigned int*, unsigned int*, unsigned int*, unsigned int*, unsigned int*, unsigned int*, unsigned int*, unsigned int*); + void getCurrentDate(); + void getCurrentTime(); + void getDateStruct() const; + void getDayOfMonth() const; + void getDayOfWeek() const; + void getDayOfYear() const; + void getHours() const; + void getMilliseconds() const; + void getMinutes() const; + void getMonth() const; + void getSeconds() const; + void getTime() const; + void getYear() const; + void getYear1970GMT(); + void isInstanceOf(uft::Value const&); + void makeTime(int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int); + void nullValue(); + void operator=(uft::Date const&); + void timeFromW3CDTFString(uft::String const&); + void toDateString(long long); + void toMMDDYYYYString(long long); + void toString() const; + void toString(long long); + void toW3CDTFString() const; + void toW3CDTFString(long long); + + }; + + class DateStruct + { + public: + void getTime(); + void toString() const; + void toW3CDTFString() const; + + }; + + class Dict + { + public: + Dict(); + Dict(uft::Dict const&); + Dict(uft::Value const*, uft::Value const*, unsigned int); + Dict(uft::Value const*, unsigned int); + Dict(unsigned int); + + ~Dict(); + + class Action {}; + + void contains(uft::Value const&) const; + void emptyValue(); + void get(uft::Value const&) const; + void getSelf() const; + void getValueLoc(uft::Value const&, uft::Dict::Action) const; + void isInstanceOf(uft::Value const&); + void makeEmpty() const; + void mergeDict(uft::Dict const&, bool) const; + void nextKey(unsigned int, uft::Value const**, uft::Value**) const; + void nullValue(); + void operator=(uft::Dict const&); + void set(uft::Value const&, uft::Value const&) const; + + }; + + class DictStruct + { + public: + DictStruct(uft::DictStruct const&); + DictStruct(uft::Value const*, uft::Value const*, unsigned int); + DictStruct(uft::Value const*, unsigned int); + DictStruct(unsigned int); + + ~DictStruct(); + + void getValueLoc(uft::Value const&, unsigned int); + void makeEmpty(); + void nextKey(unsigned int, uft::Value const**, uft::Value**) const; + void setCapacity(unsigned int, bool); + void sort(); + uft::String toString() const; + + }; + + class DoubleParser: public uft::ValueParser + { + public: + virtual void parse(uft::ParserContext*, uft::Value const&) const; + virtual void getValidStartChars() const; + + }; + + class EVName + { + public: + ~EVName(); + + }; + + class EnumParser: public uft::ValueParser + { + public: + EnumParser(uft::Set const&, bool); + + ~EnumParser(); + + virtual void parse(uft::ParserContext*, uft::Value const&) const; + virtual void getValidStartChars() const; + + }; + + class ErrorHandler + { + public: + ErrorHandler(); + + virtual ~ErrorHandler(); + virtual void reportStateError(uft::String const&) = 0; + virtual void reportProcessError(uft::String const&) = 0; + virtual uft::String getURLString() = 0; + virtual void changeURL(uft::String const&) = 0; + + }; + + class Float + { + public: + Float(float); + + ~Float(); + + }; + + class FloatParser: public uft::ValueParser + { + public: + virtual void parse(uft::ParserContext*, uft::Value const&) const; + virtual void getValidStartChars() const; + + }; + + class IntParser: public uft::ValueParser + { + public: + virtual void parse(uft::ParserContext*, uft::Value const&) const; + virtual void getValidStartChars() const; + + }; + + class IntRectStruct + { + public: + void contains(uft::IntRectStruct const&) const; + void intersectWidth(uft::IntRectStruct const&); + void makeEmpty(); + void staticInit(); + void toString() const; + void unionWith(uft::IntRectStruct const&); + + void* s_descriptor; + + }; + + class LazyRef + { + public: + LazyRef(uft::Value const&, uft::Value (*)(uft::Value const&), bool); + + }; + + class LazyRefStruct + { + public: + void copy(uft::StructDescriptor const*, void*, void const*); + void destroy(uft::StructDescriptor const*, void*); + void extractValue(bool); + void flush(uft::StructDescriptor const*, void*, uft::CacheFlushContext*); + void query(uft::StructDescriptor const*, void*, uft::Value const&, void*); + void queryCached(uft::StructDescriptor const*, void*, uft::Value const&, void*); + void toString(uft::StructDescriptor const*, void*); + + }; + + class LongParser: public uft::ValueParser + { + public: + virtual void parse(uft::ParserContext*, uft::Value const&) const; + virtual void getValidStartChars() const; + + }; + + class LowercasingAtomParser: public uft::ValueParser + { + public: + virtual void parse(uft::ParserContext*, uft::Value const&) const; + virtual void getValidStartChars() const; + + }; + + class ParserContext + { + public: + virtual void resolveNSPrefix(uft::String const&) = 0; + virtual void prefixBindingsChanged() = 0; + virtual void getNodeType() = 0; + virtual void getErrorHandler(); + + void getMSchemaContext(); + + }; + + class MSchemaParserContext: public uft::ParserContext + { + public: + virtual void resolveNSPrefix(uft::String const&); + virtual void prefixBindingsChanged(); + virtual void getNodeType(); + virtual void getErrorHandler(); + + }; + + class MutableRef + { + public: + void assign(uft::Value const&) const; + + }; + + class MutableRefAccessor + { + public: + virtual void assign(uft::Value const&, uft::Value const&) = 0; + + void* CLASS_ID; + + }; + + class MutableRefAccessorImpl: public uft::MutableRefAccessor + { + public: + virtual void assign(uft::Value const&, uft::Value const&); + + void* s_instance; + + }; + + class NameParser: public uft::ValueParser + { + public: + virtual void parse(uft::ParserContext*, uft::Value const&) const; + virtual void getValidStartChars() const; + + }; + + class NullParser: public uft::ValueParser + { + public: + virtual void parse(uft::ParserContext*, uft::Value const&) const; + virtual void getValidStartChars() const; + + }; + + class Opaque + { + public: + Opaque(unsigned int); + + void getStoredValue() const; + void isInstanceOf(uft::Value const&); + + }; + + class OpaqueStruct + { + public: + void staticInit(); + + void* s_descriptor; + + }; + + class ParseErrorHandler: public uft::ErrorHandler + { + public: + virtual ~ParseErrorHandler(); + virtual void reportStateError(uft::String const&); + virtual void reportProcessError(uft::String const&); + virtual uft::String getURLString(); + virtual void changeURL(uft::String const&); + virtual void setURLString(uft::String const&); + + }; + + class PassThruParser: public uft::ValueParser + { + public: + virtual void parse(uft::ParserContext*, uft::Value const&) const; + virtual void getValidStartChars() const; + + }; + + class PlatformString + { + public: + PlatformString(char const*); + PlatformString(char const*, unsigned int); + PlatformString(uft::PlatformString const&); + PlatformString(uft::String const&); + PlatformString(uft::String const&, unsigned int, unsigned int); + PlatformString(uft::StringBuffer const&); + PlatformString(uft::UTF16String const&); + PlatformString(uft::UTF16String const&, unsigned int, unsigned int); + PlatformString(unsigned short const*); + PlatformString(unsigned short const*, unsigned int); + + void initUTF16(unsigned short const*, unsigned int); + void initUTF8(char const*, unsigned int); + + }; + + class QName + { + public: + QName(uft::String const&); + QName(uft::String const&, bool); + QName(uft::String const&, uft::String const&, uft::String const&); + + ~QName(); + + void atomID() const; + void fromCanonicalString(uft::String); + void getCanonicalNS(uft::String const&); + void getCanonicalName() const; + void getCanonicalPrefix(uft::String const&); + void getLocalName() const; + void getNamespaceURI() const; + void getPrefix() const; + void getTriplet() const; + + }; + + class QNameParser: public uft::ValueParser + { + public: + virtual void parse(uft::ParserContext*, uft::Value const&) const; + virtual void getValidStartChars() const; + + }; + + class QNameStruct + { + public: + QNameStruct(uft::String const&, uft::String const&, uft::String const&); + + void getTriplet() const; + + }; + + class Real + { + public: + }; + + class RealPoint + { + public: + }; + + class RealRect + { + public: + void intersectWith(uft::RealRect const&); + void makeEmpty(); + void toString(); + void unionWith(uft::RealRect const&); + + }; + + class Runtime + { + public: + virtual ~Runtime(); + virtual void allocUFTBlock(unsigned int) = 0; + virtual void allocUFTBlock(unsigned int, char const*, int) = 0; + virtual void freeUFTBlock(void*) = 0; + virtual void allocCachingBlock(unsigned int) = 0; + virtual void allocCachingBlock(unsigned int, char const*, int) = 0; + virtual void freeCachingBlock(void*) = 0; + virtual void allocBlock(unsigned int) = 0; + virtual void allocBlock(unsigned int, char const*, int) = 0; + virtual void freeBlock(unsigned int, void*) = 0; + virtual void iterateCache(unsigned int*, uft::CachingValue*) = 0; + virtual void finishCacheIteration(unsigned int) = 0; + virtual void getHeapSize() = 0; + virtual void getStructDescriptor(uft::String const&) = 0; + virtual void getAtom(uft::String const&) = 0; + virtual void getAtom(unsigned int) = 0; + virtual void removeAtom(uft::StringBlock*) = 0; + virtual void initPredefinedAtoms(char**, unsigned int) = 0; + virtual void getStdBufferManager() = 0; + + void staticInit(); + + void* s_instance; + + }; + + class RuntimeImpl: public uft::Runtime + { + public: + RuntimeImpl(); + + virtual ~RuntimeImpl(); + virtual void allocUFTBlock(unsigned int); + virtual void allocUFTBlock(unsigned int, char const*, int); + virtual void freeUFTBlock(void*); + virtual void allocCachingBlock(unsigned int); + virtual void allocCachingBlock(unsigned int, char const*, int); + virtual void freeCachingBlock(void*); + virtual void allocBlock(unsigned int); + virtual void allocBlock(unsigned int, char const*, int); + virtual void freeBlock(unsigned int, void*); + virtual void iterateCache(unsigned int*, uft::CachingValue*); + virtual void finishCacheIteration(unsigned int); + virtual void getHeapSize(); + virtual void getStructDescriptor(uft::String const&); + virtual void getAtom(uft::String const&); + virtual void getAtom(unsigned int); + virtual void removeAtom(uft::StringBlock*); + virtual void initPredefinedAtoms(char**, unsigned int); + virtual void getStdBufferManager(); + + void alloc(unsigned int); + void getIndex(uft::StringBlock*, unsigned int*); + void initAllocator(); + void resize(unsigned int); + void shutdownAllocator(); + + }; + + class Set + { + public: + Set(); + Set(uft::Set const&); + Set(uft::Value const&); + Set(uft::Value const&, uft::Value const&); + Set(uft::Value const&, uft::Value const&, uft::Value const&); + Set(uft::Value const&, uft::Value const&, uft::Value const&, uft::Value const&); + Set(uft::Value const&, uft::Value const&, uft::Value const&, uft::Value const&, uft::Value const&); + Set(unsigned int); + + ~Set(); + + class Action {}; + + void add(uft::Value const&) const; + void contains(uft::Value const&) const; + void emptyValue(); + void init(uft::Value const*, unsigned int, unsigned int); + void length() const; + void makeEmpty() const; + void manage(uft::Value const&, uft::Set::Action) const; + void nextItem(unsigned int, uft::Value const**) const; + void operator=(uft::Set const&); + void setCapacity(unsigned int) const; + + }; + + class SimpleRefStruct + { + public: + void copy(uft::StructDescriptor const*, void*, void const*); + void destroy(uft::StructDescriptor const*, void*); + void destroyWeak(uft::StructDescriptor const*, void*); + void flush(uft::StructDescriptor const*, void*, uft::CacheFlushContext*); + void query(uft::StructDescriptor const*, void*, uft::Value const&, void*); + void queryCached(uft::StructDescriptor const*, void*, uft::Value const&, void*); + void queryMutable(uft::StructDescriptor const*, void*, uft::Value const&, void*); + void queryMutableCached(uft::StructDescriptor const*, void*, uft::Value const&, void*); + void queryWeak(uft::StructDescriptor const*, void*, uft::Value const&, void*); + void toString(uft::StructDescriptor const*, void*); + + }; + + class SizedBlock + { + public: + void getByteSize() const; + + }; + + class StdBufferManager: public uft::BufferManager + { + public: + virtual ~StdBufferManager(); + virtual void alloc(uft::BufferRec*, unsigned int, unsigned int); + virtual void realloc(uft::BufferRec*, unsigned int); + virtual void clone(uft::BufferRec const*, uft::BufferRec*, unsigned int); + virtual void pin(uft::BufferRec*); + virtual void unpin(uft::BufferRec*); + virtual void free(uft::BufferRec*); + virtual void toString(uft::BufferRec const*); + + void getInstance(); + + }; + + class String + { + public: + String(); + String(char const*); + String(char const*, unsigned int); + String(uft::PlatformString const&); + String(uft::String const&); + String(uft::TransientStringBuffer const&); + String(uft::UTF16String const&); + String(uft::UTF16String const&, unsigned int, unsigned int); + String(unsigned short const*); + String(unsigned short const*, unsigned int); + + ~String(); + + void atof() const; + void atof(char const*); + void atof(char const*, unsigned int); + void atom() const; + void atom(char const*); + void atom(char const*, unsigned int); + void atom(unsigned int); + void atomID() const; + char* c_str() const; + int compare(char const*) const; + int compare(uft::String const&) const; + int compareRegion(unsigned int, char const*, unsigned int) const; + int compareRegion(unsigned int, uft::String const&, unsigned int, unsigned int) const; + bool endsWith(char const*) const; + bool endsWith(uft::String const&) const; + void filename(unsigned int) const; + int findFirstNotOf(char const*, unsigned int) const; + int findFirstNotOf(char const*, unsigned int, unsigned int, unsigned int) const; + int findFirstNotOf(uft::String const&, unsigned int, unsigned int) const; + int findFirstNotOf(uft::StringBuffer const&, unsigned int, unsigned int) const; + int findFirstOf(char const*, unsigned int) const; + int findFirstOf(char const*, unsigned int, unsigned int, unsigned int) const; + int findFirstOf(uft::String const&, unsigned int, unsigned int) const; + int findFirstOf(uft::StringBuffer const&, unsigned int, unsigned int) const; + int findLastOf(char const*, unsigned int, unsigned int) const; + int findLastOf(char const*, unsigned int, unsigned int, unsigned int) const; + int findLastOf(uft::String const&, unsigned int, unsigned int) const; + int findLastOf(uft::StringBuffer const&, unsigned int, unsigned int) const; + void getStringBlock() const; + int indexOf(char const*, unsigned int) const; + int indexOf(char const*, unsigned int, unsigned int, unsigned int) const; + int indexOf(char, unsigned int, unsigned int) const; + int indexOf(uft::String const&, unsigned int, unsigned int) const; + int indexOf(uft::StringBuffer const&, unsigned int, unsigned int) const; + void initUTF16(unsigned short const*, unsigned int); + bool isEmpty() const; + bool isInstanceOf(uft::Value const&); + bool isXMLName(char const*, unsigned int); + int lastIndexOf(char const* token, unsigned int endCharacterIdx) const; + int lastIndexOf(char const*, unsigned int, unsigned int, unsigned int) const; + int lastIndexOf(char, unsigned int, unsigned int) const; + int lastIndexOf(uft::String const&, unsigned int, unsigned int) const; + int lastIndexOf(uft::StringBuffer const&, unsigned int, unsigned int) const; + int length() const; + uft::String lowercase() const; + uft::String nullValue(); + bool operator!=(char const*) const; + bool operator!=(uft::String const&) const; + uft::TransientStringBuffer operator+(char const*) const; + uft::TransientStringBuffer operator+(int) const; + uft::TransientStringBuffer operator+(uft::String const&) const; + uft::TransientStringBuffer operator+(uft::Value const&) const; + String operator=(uft::String const&); + bool operator==(char const*) const; + bool operator==(uft::String const&) const; + void parseASCIIIdent(char const*, uft::String*, bool, char const*); + void parseDouble(char const*, double*, char const*); + void parseFloat(char const*, float*, char const*); + void parseInt(char const*, int*, char const*); + void parseLong(char const*, long long*, char const*); + void parseNonWhitespace(char const*, uft::String*, char const*); + void predefinedAtom(unsigned int); + void replaceAll(char, char); + void replaceAll(uft::String const&, uft::String const&); + void skipWhitespace(char const*, char const*); + void skipWhitespaceOrComma(char const*, bool*, char const*); + bool startsWith(char const*) const; + bool startsWith(uft::String const&) const; + uft::TransientStringBuffer substr(unsigned int start, unsigned int end) const; + static uft::String toString(double); + static uft::String toString(float); + static uft::String toString(int); + static uft::String toString(long long); + void uppercase() const; + int utf16length() const; + char* utf8() const; + int utf8RoundOffLen(char const*, unsigned int); + int utf8count(char const*, unsigned int, unsigned int); + + void* s_rawAtomList; + + }; + + class StringBlock + { + public: + void atomID() const; + char* utf8(); + + }; + + class StringBuffer + { + public: + StringBuffer(int); + StringBuffer(uft::Buffer const&, unsigned int, unsigned int); + StringBuffer(uft::String const&); + StringBuffer(uft::String const&, unsigned int start); + StringBuffer(uft::String const&, unsigned int start, unsigned int end); + StringBuffer(uft::StringBuffer const&); + StringBuffer(uft::Value const&, char*, unsigned int); + + ~StringBuffer(); + + void append(char const*); + void append(char const*, unsigned int); + void append(char); + void append(float); + void append(int); + void append(uft::String const&); + void append(uft::StringBuffer const&); + void append(uft::Value const&); + void compare(char const*) const; + void compare(uft::String const&) const; + void compare(uft::StringBuffer const&) const; + void compareRegion(unsigned int, char const*, unsigned int) const; + void compareRegion(unsigned int, uft::String const&, unsigned int, unsigned int) const; + void compareRegion(unsigned int, uft::StringBuffer const&, unsigned int, unsigned int) const; + void endsWith(char const*) const; + void endsWith(char const*, unsigned int) const; + void endsWith(uft::String const&) const; + void endsWith(uft::StringBuffer const&) const; + void findFirstOf(char const*, unsigned int) const; + void findFirstOf(char const*, unsigned int, unsigned int, unsigned int) const; + void findFirstOf(uft::String const&, unsigned int, unsigned int) const; + void findFirstOf(uft::StringBuffer const&, unsigned int, unsigned int) const; + void findLastOf(char const*, unsigned int, unsigned int) const; + void findLastOf(char const*, unsigned int, unsigned int, unsigned int) const; + void findLastOf(uft::String const&, unsigned int, unsigned int) const; + void findLastOf(uft::StringBuffer const&, unsigned int, unsigned int) const; + void indexOf(char const*, unsigned int) const; + void indexOf(char const*, unsigned int, unsigned int, unsigned int) const; + void indexOf(char, unsigned int, unsigned int) const; + void indexOf(uft::String const&, unsigned int, unsigned int) const; + void indexOf(uft::StringBuffer const&, unsigned int, unsigned int) const; + void isXMLName() const; + void lastIndexOf(char const*, unsigned int) const; + void lastIndexOf(char const*, unsigned int, unsigned int, unsigned int) const; + void lastIndexOf(char, unsigned int, unsigned int) const; + void lastIndexOf(uft::String const&, unsigned int, unsigned int) const; + void lastIndexOf(uft::StringBuffer const&, unsigned int, unsigned int) const; + void lowercase() const; + void operator!=(char const*) const; + void operator!=(uft::String const&) const; + void operator!=(uft::StringBuffer const&) const; + void operator==(char const*) const; + void operator==(uft::String const&) const; + void operator==(uft::StringBuffer const&) const; + void splice(unsigned int, unsigned int, char const*); + void splice(unsigned int, unsigned int, char const*, unsigned int); + void splice(unsigned int, unsigned int, uft::String const&); + void splice(unsigned int, unsigned int, uft::String const&, unsigned int, unsigned int); + void splice(unsigned int, unsigned int, uft::StringBuffer const&); + void splice(unsigned int, unsigned int, uft::StringBuffer const&, unsigned int, unsigned int); + void splice(unsigned int, unsigned int, uft::Value const&); + void startsWith(char const*) const; + void startsWith(char const*, unsigned int) const; + void startsWith(uft::String const&) const; + void startsWith(uft::StringBuffer const&) const; + void substr(unsigned int) const; + void substr(unsigned int, unsigned int) const; + void trimWhitespace() const; + void uppercase() const; + void utf16length() const; + char* utf8() const; + void writableBuffer() const; + void writableBuffer(unsigned int) const; + + }; + + class StringBufferStruct + { + public: + StringBufferStruct(uft::Buffer const&, unsigned int, unsigned int); + StringBufferStruct(uft::Value const&, char*, unsigned int); + + ~StringBufferStruct(); + + }; + + class StringParser: public uft::ValueParser + { + public: + virtual void parse(uft::ParserContext*, uft::Value const&) const; + virtual void getValidStartChars() const; + + }; + + class StructBlock + { + public: + void getStructDescriptor(); + void getStructPtr(); + void staticInit(); + + }; + + class StructDescriptor + { + public: + StructDescriptor(); + + }; + + class SubBufferManager: public uft::BufferManager + { + public: + SubBufferManager(uft::Buffer const&, unsigned int); + + virtual ~SubBufferManager(); + virtual void alloc(uft::BufferRec*, unsigned int, unsigned int); + virtual void realloc(uft::BufferRec*, unsigned int); + virtual void clone(uft::BufferRec const*, uft::BufferRec*, unsigned int); + virtual void pin(uft::BufferRec*); + virtual void unpin(uft::BufferRec*); + virtual void free(uft::BufferRec*); + virtual void toString(uft::BufferRec const*); + + void init(uft::BufferRec*, uft::Buffer const&, unsigned int, unsigned int, unsigned int); + + }; + + class Token + { + public: + ~Token(); + + void newToken(); + + }; + + class TransientStringBuffer + { + public: + TransientStringBuffer(uft::String const&); + TransientStringBuffer(uft::String const&, unsigned int, unsigned int); + TransientStringBuffer(uft::TransientStringBuffer const&); + + ~TransientStringBuffer(); + + void operator+(char const*); + void operator+(int); + void operator+(uft::String const&); + void operator+(uft::Value const&); + + }; + + class Tuple + { + public: + Tuple(); + Tuple(uft::SizedBlock*); + Tuple(uft::Value const&); + Tuple(uft::Value const&, uft::Value const&); + Tuple(uft::Value const&, uft::Value const&, uft::Value const&); + Tuple(uft::Value const&, uft::Value const&, uft::Value const&, uft::Value const&); + Tuple(uft::Value const*, unsigned int); + + ~Tuple(); + + void append(uft::Value const&) const; + void contains(uft::Value const&) const; + void emptyValue(); + void insert(unsigned int, uft::Value const&) const; + void range(unsigned int, unsigned int) const; + void remove(unsigned int) const; + void replace(unsigned int, uft::Value const&) const; + + }; + + class UFTInitializer + { + public: + UFTInitializer(); + + ~UFTInitializer(); + + }; + + class URL + { + public: + URL(uft::String const&); + + ~URL(); + + void decode(uft::StringBuffer const&); + void encode(uft::StringBuffer const&, bool); + void getBaseURL() const; + void getDomain() const; + void getFragment() const; + void getHost() const; + void getLogin() const; + void getParams() const; + void getParser(); + void getPassword() const; + void getPath() const; + void getPort() const; + void getProtocol() const; + void getQuery() const; + void initAbsoluteURL(uft::String const&, uft::String const&); + void initFileURL(uft::String const&); + void initOtherURL(uft::String const&, uft::String const&); + void initRelativeURL(uft::String const&); + void isAbsolute() const; + void isSelfReferring() const; + void parse(char const*, uft::Value*); + void resolve(uft::URL const&) const; + + }; + + class URLStruct + { + public: + void constructStandardBaseURL() const; + void query(uft::Value const&, void*); + void toString() const; + + }; + + class UTF16StringBlock {}; + class UTF16String + { + public: + UTF16String(char const*); + UTF16String(char const*, unsigned int); + UTF16String(uft::PlatformString const&); + UTF16String(uft::String const&); + UTF16String(uft::String const&, unsigned int, unsigned int); + UTF16String(uft::StringBuffer const&); + UTF16String(uft::StringBuffer const&, unsigned int, unsigned int); + UTF16String(uft::UTF16StringBlock*); + + ~UTF16String(); + + void initPlatform(char const*, unsigned int); + void initUTF8(char const*, unsigned int); + void isWhiteSpace(unsigned short); + void length() const; + void str16len(unsigned short const*); + void utf16() const; + void utf16length(char const*, unsigned int); + + void* s_empty; + + }; + + class Value + { + public: + Value(); + Value(bool); + Value(char const*); + Value(char const*, unsigned int); + Value(float); + Value(uft::Value const&); + + ~Value(); + + void addRefStructPtr(void*); + void allocStruct(uft::StructDescriptor const*); + Value clone() const; + void createdCircularReference(uft::Value const&); + void destroy(); + void enterCircularReferenceCleanup(void*); + void exitCircularReferenceCleanup(void*); + void extractValue() const; + void fromStructPtr(void*); + BlockHead* getBlock() const; + void getNumber() const; + void getStructDescriptor() const; + void init(char const*); + void init(char const*, unsigned int); + void init(char const*, unsigned int, bool, bool); + void init(double); + void init(float); + void init(long long); + void init(uft::Value const&); + void init(unsigned short const*); + void init(unsigned short const*, unsigned int); + bool isAtom() const; + bool isFalse() const; + bool isInstanceOf(uft::StructDescriptor const*) const; + bool isNull() const; + bool isNumber() const; + bool isRefCounted() const; + bool isString() const; + bool isStringBuffer() const; + bool isStruct() const; + bool isTrue() const; + void makeNumber(double); + Value nullValue(); + Value operator=(uft::Value const&); + void ptrEq(uft::Value const&) const; + void query(uft::Value const&, void*) const; + void releaseStructPtr(void*); + void setNull(); + uft::String toString() const; + void* toStringOrNull() const; + void uniqueRef(); + + void* sNull; + void* m1, *m2, *m3; + + }; + + class ValueRef + { + public: + ValueRef(uft::Value const&, unsigned int); + + }; + + class Vector + { + public: + Vector(uft::Value const*, unsigned int); + Vector(uft::Value); + Vector(uft::Value, uft::Value const&); + Vector(uft::Value, uft::Value const&, uft::Value const&); + Vector(uft::Value, uft::Value const&, uft::Value const&, uft::Value const&); + Vector(uft::Vector const&); + Vector(unsigned int, unsigned int); + + ~Vector(); + + virtual void vectorfn0(void) {} + virtual void vectorfn1(void) {} + void append(uft::Value const&) const; + void appendElements(uft::Tuple const&) const; + void appendElements(uft::Tuple const&, unsigned int, unsigned int) const; + void appendElements(uft::Vector const&) const; + void appendElements(uft::Vector const&, unsigned int, unsigned int) const; + void capacity() const; + void emptyValue(); + void findFirst(uft::Value const&) const; + void init(unsigned int, unsigned int); + void insert(unsigned int, uft::Value const&) const; + void isInstanceOf(uft::Value const&); + void lastElement() const; + void lcs(uft::Vector const&); + int length() const; + void makeEmpty() const; + void nullValue(); + Vector operator=(uft::Vector const&); + uft::Value operator[](unsigned int) const; + void pop() const; + void range(unsigned int, unsigned int) const; + void rangeToTuple(unsigned int, unsigned int) const; + void remove(unsigned int) const; + void setCapacity(unsigned int) const; + void setLength(unsigned int) const; + void toTuple() const; + + }; + + class VectorStruct + { + public: + VectorStruct(uft::VectorStruct const&); + VectorStruct(unsigned int, unsigned int); + + ~VectorStruct(); + + void setCapacity(unsigned int); + void setLength(unsigned int); + void set_manage(uft::Value const&, uft::Set::Action); + void set_nextItem(unsigned int, uft::Value const**) const; + void toString() const; + + }; + + class WeakRef + { + public: + WeakRef(uft::Value const&); + + }; + + template + class sref{ + public: + ~sref(); + + bool isInstanceOf(uft::Value const&); + void nullValue(); + T* operator->() const; + void operator=(uft::sref const&); + sref(); + sref(uft::sref const&); + }; + + class TraceFlag{}; + + void UFT_FORMAT_ARGS(char const*, ...); + void allocBlock(unsigned int); + void allocBlock(unsigned int, char const*, int); + void finishCacheIteration(unsigned int); + void flushCache(uft::CacheFlushContext*); + void freeBlock(unsigned int, void*); + void getHeapSize(); + void hash(unsigned char const*, unsigned int, unsigned int); + void hash4(unsigned int); + void hash8(unsigned long long); + void iterateCache(unsigned int*); + void operator+(char const*, uft::String const&); + void trace(uft::TraceFlag, char const*, char const*); + void traceFlush(); + + void* isLittleEndian; + void* s_bufferDescriptor; + void* s_cacheRefDescriptor; + void* s_dateDescriptor; + void* s_dictDescriptor; + void* s_doubleDescriptor; + void* s_lazyCacheRefDescriptor; + void* s_lazyRefDescriptor; + void* s_longIntDescriptor; + void* s_mutableCacheRefDescriptor; + void* s_mutableRefDescriptor; + void* s_qnameDescriptor; + void* s_setDescriptor; + void* s_simpleRefDescriptor; + void* s_stringBufferDescriptor; + void* s_tokenDescriptor; + void* s_urlDescriptor; + void* s_vectorDescriptor; + void* s_weakRefDescriptor; + +} + + + +#endif // _UFT_H diff --git a/include/rmsdk/xpath.h b/include/rmsdk/xpath.h new file mode 100644 index 0000000..637c34e --- /dev/null +++ b/include/rmsdk/xpath.h @@ -0,0 +1,507 @@ +/* + File automatically generated by SOAdvancedDissector.py + More information at http://indefero.soutade.fr/p/soadvanceddissector +*/ + +#ifndef _XPATH_H +#define _XPATH_H + +#include + +namespace mdom { + class Node; + class Reference; +}; + +namespace xpath { + + class Parser; + class AttributeParser; + class AxesNodeTest; + class Context; + class CurlyBracketAttributeParser; + class CurlyBracketExpression; + class Dependency; + class DependencyType; + class DynamicContext; + class ExplicitReference; + class Expression; + class Function; + class NodeTest; + class NodeTypeTest; + class Operator; + class ResultType; + class Root; + class Scan; + class SimpleMatch; + class SimpleUserFunction; + class StaticContext; + class Step; + class StepDynamicContext; + class Variable; + class XPathIdMatch; + class XPathVTable; + class YaccParser; + + + class Error {}; + class Token {}; + + class Parser: public uft::ValueParser + { + public: + virtual void parse(uft::ParserContext*, uft::Value const&) const; + virtual void getValidStartChars() const; + virtual void handlerParseFailure(uft::ParserContext*, uft::Value const&) const; + + }; + + class AttributeParser: public xpath::Parser + { + public: + virtual void parse(uft::ParserContext*, uft::Value const&) const; + virtual void getValidStartChars() const; + virtual void handlerParseFailure(uft::ParserContext*, uft::Value const&) const; + + }; + + class AxesNodeTest + { + public: + AxesNodeTest(uft::String const&, uft::Value const&); + + void InitVirtualTables(); + void getSourceDOMExpr(uft::Set const&); + void getSourceDOMExpr_impl(uft::Value const&, uft::Set const&); + void isAxesDefault(); + void isValidNode(mdom::Node*, xpath::Context*) const; + void query(uft::Value const&, void*); + void setAxes(uft::String const&); + void setAxesAsChild(); + void setAxesAsDescendantOrSelf(); + void staticInit(); + void toString(); + + void* s_descriptor; + + }; + + class Context + { + public: + Context(mdom::Node const&, bool, xpath::StaticContext*); + + // ~DynamicContextHelper(); + + virtual ~Context(); + virtual void handleExpressionError(uft::String); + + // void DynamicContextHelper(xpath::Context*, xpath::DynamicContext*); + // void DynamicContextHelper(xpath::Context*, xpath::DynamicContext*, mdom::Node const&); + void getDynamicContext(xpath::Expression const&, bool); + void incrementCurrentPosition(uft::Value const&); + void removeDynamicContext(uft::Value const&); + void setDynamicContext(uft::Value const&, uft::Value const&, xpath::StepDynamicContext*); + void setDynamicContext(uft::Value const&, xpath::DynamicContext*); + void setInitialContext(unsigned int, unsigned int); + void setReferenceNode(mdom::Node const&); + + }; + + class CurlyBracketAttributeParser: public xpath::Parser + { + public: + virtual void parse(uft::ParserContext*, uft::Value const&) const; + virtual void getValidStartChars() const; + virtual void handlerParseFailure(uft::ParserContext*, uft::Value const&) const; + + }; + + class CurlyBracketExpression + { + public: + void staticInit(); + + void* s_descriptor; + + }; + + class Dependency + { + public: + }; + + class DependencyType + { + public: + }; + + class DynamicContext + { + public: + DynamicContext(unsigned int, unsigned int); + DynamicContext(xpath::Expression const&, bool); + + virtual ~DynamicContext(); + virtual void getContextSize(); + virtual void resetContext(mdom::Node const&); + + }; + + class ExplicitReference + { + public: + ExplicitReference(mdom::Reference const&); + + void getDependencyType(xpath::DependencyType, xpath::Dependency*); + void getDependencyType_impl(uft::Value const&, xpath::DependencyType, xpath::Dependency*); + void isNodeInNodeset_impl(uft::Value const&, xpath::Context*, mdom::Node*); + void iterate(xpath::Context*, mdom::Node*); + void iterate_impl(uft::Value const&, xpath::Context*, mdom::Node*); + void query(uft::Value const&, void*); + void staticInit(); + void toString(); + + void* ExplicitReference_vtable; + void* s_descriptor; + + }; + + class Expression + { + public: + Expression(char const*); + Expression(uft::URL const&); + Expression(uft::Value const&); + + ~Expression(); + + void evaluate_impl(mdom::Node const&, xpath::Context*, xpath::ResultType) const; + void finishIteration_impl(xpath::Context*) const; + void getAttributeParser(); + void getCurlyBracketAttributeParser(); + void getDependencyType_impl(xpath::DependencyType, xpath::Dependency*) const; + void getExpressionForIDMatch(uft::String const&, uft::String const&); + void getExpressionForNodeTypes(uft::String const&, unsigned int*, unsigned int, bool); + void getExpressionType_impl() const; + void getParser(); + void getSourceDOMExpr_impl(uft::Set const&) const; + // void gotoPreviousStep(mdom::Node const*, uft::sref&); + void isNodeInNodeset_impl(xpath::Context*, mdom::Node*) const; + void isSimpleMatch(xpath::SimpleMatch*, bool); + void iterate_impl(xpath::Context*, mdom::Node*) const; + void match(mdom::Node const*, bool); + // void matchSingleNode(mdom::Node const*, uft::sref&); + void toString() const; + + }; + + class Function + { + public: + Function(uft::QName const&, uft::Vector const&); + + void evaluate_impl(mdom::Node const&, xpath::Context*, xpath::ResultType); + void evaluate_impl(uft::Value const&, mdom::Node const&, xpath::Context*, xpath::ResultType); + void getDependencyType(xpath::DependencyType, xpath::Dependency*); + void getDependencyType_impl(uft::Value const&, xpath::DependencyType, xpath::Dependency*); + void getExpressionType(); + void getExpressionType_impl(uft::Value const&); + void iterate_impl(uft::Value const&, xpath::Context*, mdom::Node*); + void iterate_impl(xpath::Context*, mdom::Node*); + void query(uft::Value const&, void*); + void staticInit(); + void toString(); + + void* XPathFunction_vtable; + void* s_descriptor; + + }; + + class NodeTest + { + public: + NodeTest(uft::String); + + void isValidNode(mdom::Node*); + void staticInit(); + void toString(); + + void* s_descriptor; + + }; + + class NodeTypeTest + { + public: + NodeTypeTest(unsigned int*, unsigned int, bool); + NodeTypeTest(unsigned int, uft::String); + + void isValidNode(mdom::Node*); + void staticInit(); + void toString(); + + void* s_descriptor; + + }; + + class Operator + { + public: + Operator(uft::String const&, uft::Value const&, uft::Value const&); + + void andFn(mdom::Node const&, xpath::Context*, xpath::ResultType); + void equalFn(mdom::Node const&, xpath::Context*, xpath::ResultType); + void evaluate(mdom::Node const&, xpath::Context*, xpath::ResultType); + void evaluate_impl(uft::Value const&, mdom::Node const&, xpath::Context*, xpath::ResultType); + void getDependencyType(xpath::DependencyType, xpath::Dependency*); + void getDependencyType_impl(uft::Value const&, xpath::DependencyType, xpath::Dependency*); + void getExpressionType(); + void getExpressionType_impl(uft::Value const&); + void getSourceDOMExpr(uft::Set const&); + void getSourceDOMExpr_impl(uft::Value const&, uft::Set const&); + void getValues(uft::Value&, uft::Value&, mdom::Node const&, xpath::Context*, xpath::ResultType); + void greaterFn(mdom::Node const&, xpath::Context*, xpath::ResultType); + void isNodeInNodeset(xpath::Context*, mdom::Node*); + void isNodeInNodeset_impl(uft::Value const&, xpath::Context*, mdom::Node*); + void isValidBinaryOperation(xpath::Context*); + void lessFn(mdom::Node const&, xpath::Context*, xpath::ResultType); + void numberCompare(mdom::Node const&, xpath::Context*, xpath::ResultType, int); + void orFn(mdom::Node const&, xpath::Context*, xpath::ResultType); + void query(uft::Value const&, void*); + void staticInit(); + void stringCompare(mdom::Node const&, xpath::Context*, xpath::ResultType); + void toString(); + + void* XPathOperator_vtable; + void* s_descriptor; + + }; + + class ResultType + { + public: + }; + + class Root + { + public: + Root(); + + void getDependencyType(xpath::DependencyType, xpath::Dependency*); + void getDependencyType_impl(uft::Value const&, xpath::DependencyType, xpath::Dependency*); + void isNodeInNodeset_impl(uft::Value const&, xpath::Context*, mdom::Node*); + void iterate(xpath::Context*, mdom::Node*); + void iterate_impl(uft::Value const&, xpath::Context*, mdom::Node*); + void query(uft::Value const&, void*); + void staticInit(); + void toString(); + + void* XPathRoot_vtable; + void* s_descriptor; + + }; + + class Scan + { + public: + Scan(char const*, char const*); + + virtual ~Scan(); + + void getDebugErrMsg(xpath::Error) const; + void getError() const; + void getOptionFlags() const; + void isNCNameChar(char); + void nextToken(char const**, char const**, char const**); + void safeMatch(char const*, char const*, char const**); + void safePeekNCNameTo(char const*, char, bool); + void setOptionFlags(long); + void skipTo(char const*, char); + void terminalToToken(char); + + void* sCharTest; + void* sType1; + + }; + + class SimpleMatch + { + public: + ~SimpleMatch(); + + }; + + class SimpleUserFunction + { + public: + void staticInit(); + + void* s_descriptor; + + }; + + class StaticContext + { + public: + virtual void virtfunc8() = 0; + virtual void virtfunc12() = 0; + + }; + + class Step + { + public: + Step(uft::String const&, uft::Value const&); + Step(xpath::Expression&); + Step(xpath::Root&); + + void evaluate(mdom::Node const&, xpath::Context*, xpath::ResultType); + void evaluate_impl(uft::Value const&, mdom::Node const&, xpath::Context*, xpath::ResultType); + void getDependencyType(xpath::DependencyType, xpath::Dependency*); + void getDependencyType_impl(uft::Value const&, xpath::DependencyType, xpath::Dependency*); + void getDynamicContext(xpath::Context*); + void getExpressionType(); + void getExpressionType_impl(uft::Value const&); + void getRootAxesNodeTest(); + void getRootStep(); + void getSourceDOMExpr(uft::Set const&); + void getSourceDOMExpr_impl(uft::Value const&, uft::Set const&); + void isNodeInNodeset(xpath::Context*, mdom::Node*); + void isNodeInNodeset_impl(uft::Value const&, xpath::Context*, mdom::Node*); + void iterate(xpath::Context*, mdom::Node*); + void iterate_impl(uft::Value const&, xpath::Context*, mdom::Node*); + void query(uft::Value const&, void*); + void removeDynamicContext(xpath::Context*) const; + void setPrevStep(xpath::Step&); + void staticInit(); + void toString(); + + void* XPathStep_vtable; + void* s_descriptor; + + }; + + class StepDynamicContext: public xpath::DynamicContext + { + public: + StepDynamicContext(xpath::Context*, uft::Value const&, uft::Value const&); + + virtual ~StepDynamicContext(); + virtual void getContextSize(); + virtual void resetContext(mdom::Node const&); + + void getContextPosition(); + void getNext(mdom::Node&); + void getNextForCurrentExpression(mdom::Node&); + void getPrevDynamicContextInternal(); + void isNodeInNodeset(mdom::Node&); + void setCurrentNode(mdom::Node const&); + + }; + + class Variable + { + public: + Variable(uft::QName const&); + + void evaluate_impl(mdom::Node const&, xpath::Context*, xpath::ResultType); + void evaluate_impl(uft::Value const&, mdom::Node const&, xpath::Context*, xpath::ResultType); + void getDependencyType(xpath::DependencyType, xpath::Dependency*); + void getDependencyType_impl(uft::Value const&, xpath::DependencyType, xpath::Dependency*); + void getExpressionType(); + void getExpressionType_impl(uft::Value const&); + void iterate_impl(uft::Value const&, xpath::Context*, mdom::Node*); + void iterate_impl(xpath::Context*, mdom::Node*); + void query(uft::Value const&, void*); + void staticInit(); + void toString(); + + void* XPathVariable_vtable; + void* s_descriptor; + + }; + + class XPathIdMatch + { + public: + XPathIdMatch(uft::Value const&); + + void evaluate_impl(uft::Value const&, mdom::Node const&, xpath::Context*, xpath::ResultType); + void query(uft::Value const&, void*); + void staticInit(); + void toString(); + + void* XPathIdMatch_vtable; + void* s_descriptor; + + }; + + class XPathVTable + { + public: + }; + + class YaccParser + { + public: + YaccParser(char const*, uft::ParserContext*); + + ~YaccParser(); + + void createXPathObject(); + void getObjectPointer(uft::Value*&, bool); + void getReturnValueObject(); + void parse(); + void performLexicalAnalysis(uft::Value*&); + void setReturnValueObject(uft::Value&); + + }; + + + void GetOneArgument(uft::Value const&, mdom::Node const&, xpath::Context*, uft::Value&, xpath::ResultType); + void SubstituteFunctionDefaults(xpath::XPathVTable*, unsigned int); + void booleanValue(uft::Value const&); + void convertNodeValue(mdom::Node const&, xpath::Context*, xpath::ResultType); + void convertValue(uft::Value const&, xpath::ResultType); + void createExplicitReference(mdom::Node const&); + void evalBooleanFunction(uft::Value const&, mdom::Node const&, xpath::Context*, xpath::ResultType); + void evalNumberFunction(uft::Value const&, mdom::Node const&, xpath::Context*, xpath::ResultType); + void evalStringFunction(uft::Value const&, mdom::Node const&, xpath::Context*, xpath::ResultType); + void evaluate_through_iterate_impl(uft::Value const&, mdom::Node const&, xpath::Context*, xpath::ResultType); + void extractExpression(uft::Value const&); + void extractXPathExpression(uft::Value const&); + void getAxisName(xpath::Token); + void getCSSAbsoluteExpression(xpath::Expression const&); + void getCSSAttributeExpression(xpath::Expression const&, xpath::Expression const&); + void getCSSChildExpression(xpath::Expression const&, xpath::Expression const&); + void getCSSDescendantExpression(xpath::Expression const&, xpath::Expression const&); + void getCSSDirectAdjacentExpression(xpath::Expression const&, xpath::Expression const&); + void getCSSEqualsAttributeExpression(uft::QName const&, uft::String const&); + void getCSSFirstChildExpression(uft::QName const&); + void getCSSIndirectAdjacentExpression(xpath::Expression const&, xpath::Expression const&); + void getCSSMatchHypenSeparatedAttributeExpression(uft::QName const&, uft::String const&); + void getCSSMatchWholeWordAttributeExpression(uft::QName const&, uft::String const&); + void getCSSTypeExpression(uft::QName const&); + void getCSSUniversalExpression(); + void getDependencyTypeFromArguments(uft::Value const&, xpath::DependencyType, xpath::Dependency*); + void getDependencyTypeNone(uft::Value const&, xpath::DependencyType, xpath::Dependency*); + void getDependencyTypeOutsideSubtree(uft::Value const&, xpath::DependencyType, xpath::Dependency*); + void getExpressionTypeImplAttribute(uft::Value const&); + void getExpressionTypeImplBoolean(uft::Value const&); + void getExpressionTypeImplNamespace(uft::Value const&); + void getExpressionTypeImplNodeset(uft::Value const&); + void getExpressionTypeImplNumber(uft::Value const&); + void getExpressionTypeImplString(uft::Value const&); + void getFunctionVTable(uft::QName const&); + void getSourceDOMExprSelf(uft::Value const&, uft::Set const&); + void getSourceDOMNULL(uft::Value const&, uft::Set const&); + void isNodeInNodesetTrue(uft::Value const&, xpath::Context*, mdom::Node*); + void numericalValue(uft::Value const&); + uft::String stringValue(mdom::Node const&, xpath::Context*); + +} + + + +#endif // _XPATH_H diff --git a/include/rmsdk/zip.h b/include/rmsdk/zip.h new file mode 100644 index 0000000..0cb1919 --- /dev/null +++ b/include/rmsdk/zip.h @@ -0,0 +1,252 @@ +/* + File automatically generated by SOAdvancedDissector.py + More information at http://indefero.soutade.fr/p/soadvanceddissector +*/ + +#ifndef _ZIP_H +#define _ZIP_H + +#include +#include +#include +#include + + +namespace zip { + + class AdeptKey; + class Archive; + class ArchiveListener; + class FilteredStream; + class BufferingStream; + class CDEntry; + class EditableStream; + class Entry; + class Request; + class XORPadStream; + class ZLibDecompressorStream; + class ZipEntryStream; + + + class AdeptKey + { + public: + void staticInit(); + + void* s_descriptor; + + }; + + class Archive: public dpio::StreamClient + { + public: + Archive(dpio::Stream*, zip::ArchiveListener*); + + virtual ~Archive(); + virtual void propertyReady(dp::String const&, dp::String const&); + virtual void totalLengthReady(unsigned int); + virtual void propertiesReady(); + virtual void bytesReady(unsigned int, dp::Data const&, bool); + virtual void reportError(dp::String const&); + + zip::EditableStream* createStream(uft::String const& newFile, uft::String const& data); + void* findEntryIndexByOffset(unsigned int); + void* getEntry(uft::String const&); + unsigned int getMaxSizeForEntryAt(unsigned int); + void readDirectory(); + void sendCommonProperties(dpio::StreamClient*); + + void* fields[30]; + + }; + + class ArchiveListener + { + public: + virtual ~ArchiveListener(); + virtual void endReadDirectory(zip::Archive* archive) = 0; + virtual void virtfunc20() = 0; + + }; + + class FilteredStream: public dputils::GuardedStream, public dpio::StreamClient + { + public: + FilteredStream(dpio::Stream*); + + virtual ~FilteredStream(); + virtual int getCapabilities(); + virtual void requestInfo(); + virtual void requestBytes(unsigned int, unsigned int); + virtual void reportWriteError(dp::String const&); + virtual void deleteThis(); + virtual void bytesReady(unsigned int, dp::Data const&, bool); + virtual void propertyReady(dp::String const&, dp::String const&); + virtual void propertiesReady(); + virtual void totalLengthReady(unsigned int); + virtual void reportError(dp::String const&); + + }; + + class BufferingStream: public zip::FilteredStream + { + public: + BufferingStream(dpio::Stream*, unsigned int); + + virtual ~BufferingStream(); + virtual int getCapabilities(); + virtual void requestInfo(); + virtual void requestBytes(unsigned int, unsigned int); + virtual void reportWriteError(dp::String const&); + virtual void deleteThis(); + virtual void bytesReady(unsigned int, dp::Data const&, bool); + virtual void propertyReady(dp::String const&, dp::String const&); + virtual void propertiesReady(); + virtual void totalLengthReady(unsigned int); + virtual void reportError(dp::String const&); + virtual void mimeTypeReady(dp::String const&); + + void request(); + + }; + + class Central_Directory + {}; + + class CDEntry + { + public: + CDEntry(zip::CDEntry const&); + CDEntry(zip::Central_Directory*); + CDEntry(zip::Central_Directory*, uft::String const&); + + virtual ~CDEntry(); + + void getOffset() const; + void staticInit(); + void updateOffset(unsigned int); + + void* s_descriptor; + + }; + + class EditableStream: public dputils::GuardedStream, public dpio::StreamClient + { + public: + EditableStream(zip::Archive*); + + virtual ~EditableStream(); + virtual void setStreamClient(dpio::StreamClient*); + virtual int getCapabilities(); + virtual void requestInfo(); + virtual void requestBytes(unsigned int, unsigned int); + virtual void reportWriteError(dp::String const&); + virtual void deleteThis(); + virtual void propertyReady(dp::String const&, dp::String const&); + virtual void totalLengthReady(unsigned int); + virtual void propertiesReady(); + virtual void bytesReady(unsigned int, dp::Data const&, bool); + virtual void reportError(dp::String const&); + virtual void virtfunc12() {}; + + void addFile(uft::String const&, uft::Buffer const&); + void requestTheRest(); + + void* fields[16]; + + }; + + class Entry + { + public: + Entry(zip::Archive*, zip::Central_Directory*, uft::String const&); + Entry(zip::Entry const&); + + virtual ~Entry(); + + void bytesReady(unsigned int, dp::Data const&, bool); + void checkPartAccess(); + void getStream(unsigned int, bool); + void initializeZip(unsigned char const*, unsigned int, unsigned int); + void processDataDesc(unsigned char const*); + void processNextRequest(); + void requestBytes(zip::ZipEntryStream*, unsigned int, unsigned int); + void staticInit(); + + void* s_descriptor; + + }; + + class Request + { + public: + void staticInit(); + + void* s_descriptor; + + }; + + class XORPadStream: public zip::FilteredStream + { + public: + XORPadStream(dpio::Stream*, uft::Buffer const&, unsigned int); + + virtual ~XORPadStream(); + virtual int getCapabilities(); + virtual void requestInfo(); + virtual void requestBytes(unsigned int, unsigned int); + virtual void reportWriteError(dp::String const&); + virtual void deleteThis(); + virtual void bytesReady(unsigned int, dp::Data const&, bool); + virtual void propertyReady(dp::String const&, dp::String const&); + virtual void propertiesReady(); + virtual void totalLengthReady(unsigned int); + virtual void reportError(dp::String const&); + + }; + + class ZLibDecompressorStream: public zip::FilteredStream + { + public: + ZLibDecompressorStream(dpio::Stream*, bool); + + virtual ~ZLibDecompressorStream(); + virtual int getCapabilities(); + virtual void requestInfo(); + virtual void requestBytes(unsigned int, unsigned int); + virtual void reportWriteError(dp::String const&); + virtual void deleteThis(); + virtual void bytesReady(unsigned int, dp::Data const&, bool); + virtual void propertyReady(dp::String const&, dp::String const&); + virtual void propertiesReady(); + virtual void totalLengthReady(unsigned int); + virtual void reportError(dp::String const&); + + }; + + class ZipEntryStream: public dputils::GuardedStream + { + public: + ZipEntryStream(zip::Entry*, bool); + + virtual ~ZipEntryStream(); + virtual int getCapabilities(); + virtual void requestInfo(); + virtual void requestBytes(unsigned int, unsigned int); + virtual void reportWriteError(dp::String const&); + virtual void deleteThis(); + + void bytesReady(unsigned int, dp::Data const&, bool); + void processNextRequest(); + void staticInit(); + + void* s_descriptor; + + }; + + +} + + + +#endif // _ZIP_H diff --git a/include/rmsdk_wrapper.h b/include/rmsdk_wrapper.h new file mode 100644 index 0000000..2a4c8ac --- /dev/null +++ b/include/rmsdk_wrapper.h @@ -0,0 +1,684 @@ +/* + Copyright 2021 Grégory Soutadé + + This is a free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + It is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with it. If not, see . +*/ + +#ifndef RMSDK_WRAPPER_H +#define RMSDK_WRAPPER_H + +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include + +class MockDevice; + +class MockCallback : public dp::Callback +{ + virtual void* getOptionalInterface(char const*p0) {return 0;} + virtual void reportError(dp::String const&) {LOG_FUNC();} + virtual void invoke(dp::Unknown*) {LOG_FUNC();} + virtual void virtfunc0(){LOG_FUNC();} + virtual void virtfunc4(){LOG_FUNC();} + virtual void virtfunc8(){LOG_FUNC();} + virtual void virtfunc12(){LOG_FUNC();} +}; + +class MockArchiveListener : public zip::ArchiveListener +{ + virtual void endReadDirectory(zip::Archive* archive){LOG_FUNC();} + virtual void virtfunc20(){LOG_FUNC();} +}; + +class MockDRMProcessorClient: public dpdrm::DRMProcessorClient +{ +public: + MockDRMProcessorClient(const char* outputDir, const char* outputFile, const char* tmpDir=0): + outputDir(outputDir), outputFile(outputFile), tmpDir(tmpDir), + sourceName(0), targetName(0), rightsXML(0), errors(0) + {} + + virtual ~MockDRMProcessorClient() { + if (sourceName) free(sourceName); + if (targetName) free(targetName); + if (rightsXML) free(rightsXML); + } + + virtual void mockclientfn0() {LOG_FUNC();} + virtual void mockclientfn1() {LOG_FUNC();} + + virtual void workflowFinished(unsigned int workflow, dp::String& str) + { + LOG(DEBUG, "Workflow finished " << workflow); + if (str.utf8()) + { + LOG(DEBUG, str.utf8()); + } + if ((workflow & WORKFLOW_FULFILLMENT) && !errors) + { + dp::list list = processor->getFulfillmentItems(); + if (list.length()) + { + dp::String title = getMetadata(list[0], "title"); + uft::String fullName; + + if (outputFile) + targetName = strdup(outputFile); + else + { + if (title.utf8()) + { + uft::String fullName = title.uft() + ".epub"; + targetName = fullName.utf8(); + + // Duplicate code here because fullName is destroyed + if (!targetName || !strlen(targetName)) + targetName = strdup("output.epub"); + else + targetName = strdup(targetName); + } + else + { + if (!targetName || !strlen(targetName)) + targetName = strdup("output.epub"); + else + targetName = strdup(targetName); + } + } + + dp::String author = getMetadata(list[0], "creator"); + dp::String publisher = getMetadata(list[0], "publisher"); + dp::String language = getMetadata(list[0], "language"); + + LOG(INFO, "Title : " << title.utf8()); + LOG(INFO, "Author : " << author.utf8()); + LOG(INFO, "Publisher : " << publisher.utf8()); + LOG(INFO, "Language : " << language.utf8()); + + dp::Data postData = list[0]->getPostData(); + if (postData.data()) + { + LOG(DEBUG, "Post data " << std::endl << postData.data()); + } + + dp::ref rights = list[0]->getRights(); + dp::Data _rightsXML = rights->serialize(); + if (_rightsXML.data()) + { + rightsXML = strdup((const char*)_rightsXML.data()); + LOG(DEBUG, "Rights : " << std::endl << rightsXML); + } + + // Downloaded file + dp::list licenses = rights->getLicenses(); + // Should be wrote @ /tmp/ + if (licenses.length()) + { + uft::StringBuffer fullTmpName = uft::String("file:///tmp/"); + fullTmpName.append(licenses[0]->getVoucherID().utf8()); + sourceName = strdup(fullTmpName.utf8()); + } + } + } + else if (workflow & WORKFLOW_AUTH_SIGN_IN) + { + } + else if (workflow & WORKFLOW_ACTIVATION) + { + QDir dir; + if (!errors) + { + LOG(DEBUG, "Move dir " << tmpDir << "/.adept -> " << outputDir); + if (dir.rename(QString(tmpDir) + "/.adept", QString(outputDir))) + { + LOG(INFO, "Created " << outputDir); + dir.setPath(tmpDir); + dir.removeRecursively(); + } + else + { + LOG(ERROR, "Error : Unable to move " << tmpDir << "/.adept into " << outputDir); + } + } + else + { + if (verbose >= DEBUG) + { + LOG(DEBUG, "Temp path available at " << tmpDir << "/.adept"); + } + else + { + LOG(INFO, "Cleaning temp path"); + dir.setPath(tmpDir); + dir.removeRecursively(); + } + } + } + } + + virtual void mockclientfn3(void) {LOG_FUNC();} + virtual void mockclientfn4(void) {LOG_FUNC();} + virtual void mockclientfn5(void) {LOG_FUNC();} + virtual void workflowProgress(unsigned int workflow, dp::String& title, double progress) + { + LOG(WARN, "Progress " << workflow << " " << title.utf8() << " " << progress << " %%"); + if (workflow & WORKFLOW_DOWNLOAD) + { + if (progress == 100.0) + { + // Copy tmp file into destination + if (!outputDir) + outputDir = "."; + + // Add rights into downloaded file + MockCallback callback; + MockArchiveListener archiveListener; + + dpdev::DeviceProvider* provider = dpdev::DeviceProvider::getProvider(0); + dpio::Partition* partition = provider->getDevice(0)->getPartition(0); + + dpio::BufferedStreamClient streamClient; + + LOG(DEBUG, "Insert rights into " << sourceName); + // Auto deleted + dpio::Stream* stream = partition->readFile(sourceName, &streamClient, 0); + if (stream) + { + zip::Archive archive(stream, &archiveListener); + archive.readDirectory(); + // Auto deleted + zip::EditableStream* editableStream = new zip::EditableStream(&archive); + editableStream->addFile("META-INF/rights.xml", dp::String(rightsXML)); + uft::StringBuffer targetFileName(outputDir); + targetFileName.append("/"); + targetFileName.append(targetName); + partition->writeFile(targetFileName.utf8(), editableStream, &callback); + partition->removeFile(sourceName, &callback); + LOG(INFO, "Created " << outputDir << "/" << targetName); + } + else + { + LOG(ERROR, "Source file " << sourceName << " not found"); + } + } + } + } + virtual void workflowError(unsigned int workflow, dp::String& error) + { + LOG(ERROR, "Workflow error " << workflow << " " << error.utf8()); + errors |= workflow; + } + + void setProcessor(adept::DRMProcessorImpl* processor) + { this->processor = processor; } + + unsigned int getErrors(void) {return errors;} + +private: + adept::DRMProcessorImpl* processor; + const char *outputDir, *outputFile, *tmpDir; + char* sourceName; + char* targetName; + char* rightsXML; + unsigned int errors; + + /* + Try to get metadata with : + * DC. + name + * dc. + name + * name + */ + dp::String getMetadata(dp::ref item, const char* name) + { + uft::String newName = uft::String("DC.") + name; + + dp::String res = item->getMetadata(newName.utf8()); + if (res.utf8()) + return res; + + newName = uft::String("dc.") + name; + res = item->getMetadata(newName); + if (res.utf8()) + return res; + + return item->getMetadata(name); + } +}; + +class MockPartition : public dpio::FilesystemPartition +{ +public: + MockPartition(dpdev::Device* device, int index, + dp::String name, dp::String type, + dp::String rootPath, dp::String docPath, + dp::String tempPath): + FilesystemPartition(device, index, type, rootPath, docPath, tempPath), + docPath(docPath), tempPath(tempPath) + { + + } + + virtual void* getInterfaceID(){return 0;} + virtual dp::String getDocumentFolderURL() {LOG_FUNC(); return docPath;} + virtual dp::String getTemporaryFolderURL() {LOG_FUNC(); return tempPath;} + + virtual void createUniqueFile( const dp::String& path, const dp::String& extension, dp::Callback* callback ) + { + LOG_FUNC(); + + uft::StringBuffer _path(path.utf8()); + _path.append(extension.utf8()); + + QFile file(_path.utf8()); + file.open(QIODevice::WriteOnly|QIODevice::Truncate); + file.close(); + } + + virtual void writeFile( const dp::String& path, dpio::Stream* streamData, dp::Callback* callback ) + { + LOG_FUNC(); + + QFile file(path.utf8()); + bool ret = file.open(QIODevice::WriteOnly|QIODevice::Truncate); + if (!ret) + { + LOG(ERROR, "Unable to open file " << path.utf8()); + return; + } + else + LOG(WARN, "Write file " << path.utf8()); + + dp::Data data = dpio::Stream::readSynchronousStream(streamData); + LOG(DEBUG, "Read from stream " << data.length() << " bytes"); + + file.write((const char*)data.data(), data.length()); + file.close(); + + callback->reportProgress(100.0); + } + +private: + dp::String docPath; + dp::String tempPath; +}; + +class MockProvider : public dpdev::DeviceProvider +{ + +public: + MockProvider(dpdev::Device* device):device(device) {} + void getIdentifier() {LOG_FUNC();} + virtual int getIndex() {LOG_FUNC(); return 0;} + virtual dpdev::Device* getDevice( int index ){ + LOG_FUNC(); + if (index == 0) + return device; + else + return 0; + } + virtual bool mount(const dp::String& root, const dp::String& name, const dp::String& type) + { + LOG(INFO, "Mount " << root.utf8() << " " << name.utf8() << " " << type.utf8()); + return true; + } + virtual bool unmount(const dp::String& root) {LOG_FUNC(); return true;} + virtual void mockproviderfn0(void) {LOG_FUNC();} + virtual void mockproviderfn1(void) {LOG_FUNC();} + virtual void mockproviderfn2(void) {LOG_FUNC();} + virtual void mockproviderfn3(void) {LOG_FUNC();} + +private: + dpdev::Device* device; +}; + + +class MockDevice : public dpdev::Device, public mdom::DocumentHandler +{ +public: + class InvalidDeviceFile : public std::exception { + const char * what () const throw () { + return "Invalid device File"; + } + }; + + class InvalidDeviceKeyFile : public std::exception { + const char * what () const throw () { + return "Invalid device key File"; + } + }; + + MockDevice(dpdrm::DRMProcessorClient* processorClient, const char* deviceFile, const char* activationFile, const char* devkeyFile) : + deviceProvider(0), processorClient(processorClient), activationFile(activationFile) + { + partition = new MockPartition(this, 0, "root", "Fixed", "/", "/tmp", "/tmp"); + + readFile(activationFile, &activationRecord, &activationRecordLength); + + uft::String librmsdkVersion = dp::getVersionInfo("hobbes"); + + /* Default values */ + dp::setVersionInfo("hobbes", "9.2.38311"); + dp::setVersionInfo("clientVersion", "Boo Reader"); + dp::setVersionInfo("clientOS", "Linux 2.6.32 armv7l"); + dp::setVersionInfo("clientLocale", "fr"); + + unsigned char* deviceXML; + readFile(deviceFile, &deviceXML, 0, true); + + wisdom = adept::parseXML((const char*)deviceXML); + if (!wisdom) + throw MockDevice::InvalidDeviceFile(); + mdom::Node node = wisdom->getRoot(); + node.walkBranch(this); + + uft::String deviceVersion = dp::getVersionInfo("hobbes"); + if (librmsdkVersion != deviceVersion) + { + LOG(INFO, "Device RMSDK version " << deviceVersion.utf8()); + } + + // deviceXML is already freed... + // delete[] deviceXML; + + readFile(devkeyFile, &devkey, &devkeyLength); + + if (devkeyLength != 16) + throw MockDevice::InvalidDeviceKeyFile(); + } + + void setProvider(dpdev::DeviceProvider* deviceProvider) + {this->deviceProvider = deviceProvider;} + + void setProcessorClient(dpdrm::DRMProcessorClient* processorClient) + {this->processorClient = processorClient;} + + virtual void * getOptionalInterface( const char * name ) {LOG_FUNC(); return 0;} + virtual void prepareDeviceKey() {LOG_FUNC();} + virtual dpdev::DeviceProvider* getProvider() {LOG_FUNC(); return deviceProvider;} + virtual int getIndex() {LOG_FUNC(); return 0;} + virtual dp::String getDeviceName() {LOG_FUNC(); return deviceName;} + virtual dp::Data getDeviceKey() {LOG_FUNC(); return dp::Data(devkey, devkeyLength);} + virtual dp::String getDeviceType() {LOG_FUNC(); return deviceType;} + virtual dp::Data getFingerprint() {LOG_FUNC(); return fingerprint;} + virtual dp::Data getActivationRecord() {LOG_FUNC(); return dp::Data(activationRecord, activationRecordLength);} + virtual void setActivationRecord(const dp::Data& data); + virtual dpio::Partition* getPartition(int index) {LOG_FUNC(); return partition;} + virtual dp::String getVersionInfo(const dp::String& name); + virtual bool isTrusted() {LOG_FUNC();return true;}; + + /* mdom::DocumentHandler */ + virtual bool characters(uft::Value const&) {return true;} + virtual bool comment(uft::Value const&) {return true;} + virtual bool endDocument() {return true;} + virtual bool endElement(uft::Value const& p0, uft::Value const& p1, uft::Value const& p2) {return true;} + virtual bool endEntity(uft::Value const&) {return true;} + virtual bool processingInstruction(uft::Value const&, uft::Value const&) {return true;} + virtual bool startDocument() {return true;} + virtual bool startElement(mdom::Node const& node, uft::Value const& xmlns, uft::Value const& element, uft::Value const& ns, mdom::NameValueIterator* attributesIterator) { + if (!element.isNull() && element.isString()) + { + char* name = element.toString().c_str(); + uft::String value = adept::getChildValue(node, 3); + + if (!strcmp(name, "deviceClass")) + deviceClass = dp::String(value.utf8()); + else if (!strcmp(name, "deviceSerial")) + deviceSerial = dp::String(value.utf8()); + else if (!strcmp(name, "deviceName")) + deviceName = dp::String(value.utf8()); + else if (!strcmp(name, "deviceType")) + deviceType = dp::String(value.utf8()); + // + else if (!strcmp(name, "version")) + { + /* Hardcode decode because p0 is a structure */ + uft::Value p0, p1; + attributesIterator->next(&p0, &p1); + char* attrName = p1.toString().c_str(); + attributesIterator->next(&p0, &p1); + char* attrValue = p1.toString().c_str(); + if (attrName && attrValue) + dp::setVersionInfo(attrName, attrValue); + } + else if (!strcmp(name, "fingerprint")) + { + unsigned char rawFingerprint[32]; + int res = dp::decodeBase64(value.c_str(), rawFingerprint, sizeof(rawFingerprint)); + fingerprint = dp::Data(rawFingerprint, res); + } + } + return true; + } + virtual bool startEntity(uft::Value const&) {return true;} + + static int readFile(const char* filePath, unsigned char** res, int* length = 0, bool addFinalZero=false) + { + int _length, fd; + QFile file(filePath); + + *res = 0; + if (!length) length = &_length; + + if (!file.exists()) + { + *length = 0; + return 0; + } + + if (addFinalZero) + *res = new unsigned char[file.size()+1]; + else + *res = new unsigned char[file.size()]; + fd = open(filePath, O_RDONLY); + *length = read(fd, *res, file.size()); + close (fd); + if (*length > 0 && addFinalZero) + { + (*res)[*length] = 0; + *length += 1; + } + + return *length; + } + +private: + dpdev::DeviceProvider* deviceProvider; + dpdrm::DRMProcessorClient* processorClient; + const char *activationFile; + unsigned char *activationRecord; + int activationRecordLength; + unsigned char *devkey; + int devkeyLength; + dpio::Partition* partition; + dp::String deviceSerial; + dp::String deviceClass; + dp::String deviceName; + dp::String deviceType; + dp::Data fingerprint; + MetroWisDOM* wisdom; +}; + +void MockDevice::setActivationRecord( const dp::Data& data ) { + LOG_FUNC(); + if (activationRecord) + delete[] activationRecord; + activationRecordLength = data.length(); + activationRecord = new unsigned char[activationRecordLength]; + memcpy(activationRecord, data.data(), activationRecordLength); + + LOG(DEBUG, "New activation record :" << std::endl << activationRecord); + + if (activationFile) + { + QFile file(activationFile); + + bool ret = file.open(QIODevice::WriteOnly|QIODevice::Truncate); + if (!ret) + { + LOG(ERROR, "Unable to open file " << activationFile); + return; + } + else + LOG(WARN, "Write file " << activationFile); + + file.write((const char*)data.data(), data.length()); + file.close(); + } +} + +dp::String MockDevice::getVersionInfo( const dp::String& name ) { + LOG_FUNC(); + LOG(DEBUG, ">>> " << name.utf8()); + dp::String res = dp::getVersionInfo(name); + return res; +} + +class MockStream : public dpio::Stream { +public: + MockStream(const dp::String& method, const dp::String& url, dpio::StreamClient* client, + dpio::Stream* postData): + method(method), url(url), client(client) + { + + LOG(DEBUG, "New stream " << method.utf8() << " " << url.utf8()); + + QNetworkRequest request(QUrl(url.utf8())); + request.setRawHeader("Accept", "*/*"); + request.setRawHeader("User-Agent", "book2png"); + if (method.uft() == "POST") + { + request.setRawHeader("Content-Type", "application/vnd.adobe.adept+xml"); + dp::Data data = dpio::Stream::readSynchronousStream(postData); + LOG(DEBUG, "Len " << data.length()); + LOG(DEBUG, "data " << data.data()); + reply = networkManager.post(request, QByteArray((const char*)data.data(), data.length())); + } + else + { + reply = networkManager.get(request); + } + } + + virtual void release() {LOG_FUNC();} + virtual void setStreamClient(dpio::StreamClient * client) + { + LOG_FUNC(); + this->client = client; + } + virtual int getCapabilities() + { + LOG_FUNC(); + return 1; + } + virtual void requestInfo() + { + LOG_FUNC(); + + QCoreApplication* app = QCoreApplication::instance(); + networkManager.moveToThread(app->thread()); + while (!reply->isFinished()) + app->processEvents(); + requestBytes(0, -1); + } + + virtual void requestBytes(unsigned int offset, unsigned int len) + { + LOG_FUNC(); + + LOG(DEBUG, "Offset " << offset << ", Len " << len); + + if (!client) + { + LOG(ERROR, "Error, No client"); + return; + } + + size_t bytes = (size_t)reply->bytesAvailable(); + QByteArray _replyData = reply->readAll(); + const unsigned char* replyData = (const unsigned char*)_replyData.constData(); + LOG(DEBUG, "Reply " << bytes << " bytes"); + + if (reply->hasRawHeader("Content-Type")) + { + client->propertyReady("Content-Type", reply->rawHeader("Content-Type").constData()); + LOG(DEBUG, "Content-Type " << reply->rawHeader("Content-Type").constData()); + if (!strcmp(reply->rawHeader("Content-Type").constData(), "application/vnd.adobe.adept+xml")) + LOG(DEBUG, "<<< " << replyData); + } + if (reply->hasRawHeader("Content-Length")) + client->propertyReady("Content-Length", reply->rawHeader("Content-Length").constData()); + + client->totalLengthReady(bytes); + client->bytesReady(0, dp::Data(replyData, bytes), true); + } + + virtual void reportWriteError(const dp::String& error) + { + LOG_FUNC(); + } + + virtual void adjustModifiedStream(unsigned int offset, unsigned int len, void* param2, dpio::StreamClient* client) + { + LOG_FUNC(); + setStreamClient(client); + requestBytes(offset, len); + } + virtual void streamfn2() {LOG_FUNC();} + virtual void streamfn3() {LOG_FUNC();} + virtual void streamfn4() {LOG_FUNC();} + +private: + dp::String method; + dp::String url; + dpio::StreamClient *client; + QNetworkAccessManager networkManager; + QNetworkReply *reply; +}; + +class MockNetProvider : public dpnet::NetProvider +{ + virtual void netfn0() {LOG_FUNC();} + virtual void netfn1() {LOG_FUNC();} + virtual void netfn2() {LOG_FUNC();} + virtual void netfn3() {LOG_FUNC();} + virtual dpio::Stream * netfn4(dp::String& method, dp::String& url, adept::UrlLoader* client, unsigned int param1, dpio::Stream* stream) { + LOG_FUNC(); + return new MockStream(method, url, (dpio::StreamClient*)(client), stream); + } + virtual void netfn5() {LOG_FUNC();} + virtual void netfn6() {LOG_FUNC();} +}; + +#endif diff --git a/scripts/acsmdownloader.sh b/scripts/acsmdownloader.sh new file mode 100755 index 0000000..703caf2 --- /dev/null +++ b/scripts/acsmdownloader.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +export LD_LIBRARY_PATH=$PWD/lib:$LD_LIBRARY_PATH +./acsmdownloader $@ diff --git a/scripts/activate.sh b/scripts/activate.sh new file mode 100755 index 0000000..7476517 --- /dev/null +++ b/scripts/activate.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +export LD_LIBRARY_PATH=$PWD/lib:$LD_LIBRARY_PATH +./activate $@ diff --git a/scripts/find_libs.sh b/scripts/find_libs.sh new file mode 100755 index 0000000..d7eae6d --- /dev/null +++ b/scripts/find_libs.sh @@ -0,0 +1,178 @@ +#!/bin/bash + +# Copyright Grégory Soutadé + +# This is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with iwla. If not, see . +# + + +# +# Find all dependant shared libraries of a target (using objdump) and copy them into a directory +# + + +# Options +TARGET="" +OUTPUT="" +ROOT_LIB_DIRECTORY="" +OBJDUMP=objdump +VERBOSE=0 +EXIT_ON_ERROR=0 +QUIET_NOT_FOUND=0 +CLEAN_BEFORE_START=0 +COPY_TARGET=0 + +function debug() +{ + if [ $VERBOSE -eq 1 ] ; then + echo -e "$1" + fi +} + +function copy() +{ + target=$1 + symlink_name=$2 + + if [ ! -e ${target} ] ; then + debug "${target} not found" + return + fi + + debug "cp --no-dereference ${target} ${OUTPUT}" + cp --no-dereference ${target} ${OUTPUT} + + if [ ! $? -eq 0 ] ; then + [ ${EXIT_ON_ERROR} -eq 1 ] && exit 1 + return + fi + + if [ ! -z "${symlink_name}" ] ; then + echo ln -s `basename ${target}` ${OUTPUT}/${symlink_name} + ln -s `basename ${target}` ${OUTPUT}/${symlink_name} + fi + + # Symlink ? Copy target file + if [ -L ${target} ] ; then + copy `readlink -e ${target}` + fi +} + +nb_tabs=0 +function find_lib() +{ + target="$1" + + if [ ! -e ${target} ] ; then + debug "${target} not found" + return + fi + + nb_tabs=$((${nb_tabs}+1)) + local tabs="" + for i in `seq 1 ${nb_tabs}`; do + tabs="${tabs} " + done + + dependencies=`${OBJDUMP} -p ${target}|grep NEEDED|sed "s/ \+/ /g"|cut -d' ' -f3` + for dependency in ${dependencies} ; do + symlink_name="" + echo -e "${tabs}${dependency}" + debug "find ${ROOT_LIB_DIRECTORY} -name ${dependency}" + file=`find ${ROOT_LIB_DIRECTORY} -name ${dependency}|head -n 1` + if [ -z "$file" ] ; then + # Try lib.so* + file=`find ${ROOT_LIB_DIRECTORY} -name ${dependency}*|head -n 1` + if [ -z "$file" ] ; then + [ ${QUIET_NOT_FOUND} -eq 0 ] && echo "ERROR : ${dependency} not found in ${ROOT_LIB_DIRECTORY}" + [ ${EXIT_ON_ERROR} -eq 1 ] && exit 1 + continue + else + symlink_name=${dependency} + fi + fi + # Already copied + [ -e "${OUTPUT}/${dependency}" ] && continue + copy $file ${symlink_name} + find_lib $file + done + + nb_tabs=$((${nb_tabs}-1)) +} + +function usage() +{ + echo "Usage : ./find_libs [-O OBJDUMP] [-v] [-e] [-q] [-c] [-C] -t TARGET -o OUTPUT_DIR -l ROOT_LIBDIR" + echo -e "\t-O OBJDUMP objdump command" + echo -e "\t-v verbose" + echo -e "\t-e exit on error" + echo -e "\t-q quiet when dependency not found" + echo -e "\t-c clean target before start" + echo -e "\t-C Copy target in output directory" + echo -e "\t-t TARGET first executable or library to analyze" + echo -e "\t-o OUTPUT_DIR output directory where to place find libs" + echo -e "\t-l ROOT_LIBDIR root directory where to search dependancy libs" +} + +while getopts "ht:o:l:O:veqcC" arg; do + case $arg in + t) + TARGET=$OPTARG + ;; + o) + OUTPUT=$OPTARG + ;; + l) + ROOT_LIB_DIRECTORY=$OPTARG + ;; + O) + OBJDUMP=$OPTARG + ;; + v) + VERBOSE=1 + ;; + e) + EXIT_ON_ERROR=1 + ;; + q) + QUIET_NOT_FOUND=1 + ;; + c) + CLEAN_BEFORE_START=1 + ;; + C) + COPY_TARGET=1 + ;; + h) + usage + ;; + *) + usage + ;; + esac +done + +if [ -z "${TARGET}" -o -z "${OUTPUT}" -o -z "${ROOT_LIB_DIRECTORY}" ] ; then + usage + exit 0 +fi + +[ ${CLEAN_BEFORE_START} -eq 1 ] && rm -rf ${OUTPUT} + +mkdir -p ${OUTPUT} || exit 1 + +echo ${TARGET} +[ ${COPY_TARGET} -eq 1 ] && copy ${TARGET} + +find_lib ${TARGET} diff --git a/scripts/setup.sh b/scripts/setup.sh new file mode 100755 index 0000000..0130dec --- /dev/null +++ b/scripts/setup.sh @@ -0,0 +1,74 @@ +#!/bin/bash + +ROOT=${PWD} +TARGET_DIR="${ROOT}/lib/rmsdk/${RMSDK_VERSION}" +TMP_DIR="${ROOT}/tmp" +# From https://wiki.mobileread.com/wiki/Kobo_Firmware_Releases#Firmware +KOBO_FIRMWARE="http://download.kobobooks.com/firmwares/kobo4/january2016/kobo-update-3.19.5761.zip" +# 2016 revision, same as Kobo firmware +OPENSSL="https://www.openssl.org/source/old/1.0.1/openssl-1.0.1u.tar.gz" + + +[ -e ${TMP_DIR} ] && rm -rf ${TMP_DIR} +mkdir ${TMP_DIR} +pushd ${TMP_DIR} + +echo "Download Kobo firmware..." + +curl ${KOBO_FIRMWARE} -o kobo_firmware.zip || exit 1 + +echo "Uncompress firmware" + +unzip kobo_firmware.zip || exit 1 + +tar -zxvf KoboRoot.tgz + +echo "Extract libraries" + +${ROOT}/scripts/find_libs.sh -q -C -t "${TMP_DIR}/usr/local/Kobo/librmsdk.so" -l "${TMP_DIR}" -o "${TARGET_DIR}" +${ROOT}/scripts/find_libs.sh -q -C -t "${TMP_DIR}/usr/local/Trolltech/QtEmbedded-4.6.2-arm/lib/libQtCore.so.4.6.2" -l "${TMP_DIR}" -o "${TARGET_DIR}" +${ROOT}/scripts/find_libs.sh -q -C -t "${TMP_DIR}/usr/local/Trolltech/QtEmbedded-4.6.2-arm/lib/libQtNetwork.so.4.6.2" -l "${TMP_DIR}" -o "${TARGET_DIR}" + +echo "Fix libraries" + +pushd "${TARGET_DIR}" +ln -s libQtCore.so.4.6.2 libQt5Core.so.5 +ln -s libQt5Core.so.5 libQt5Core.so +ln -s libQtNetwork.so.4.6.2 libQt5Network.so.5 +ln -s libQt5Network.so.5 libQt5Network.so +ln -s librmsdk.so.1.0.0 librmsdk.so.1 +rm -f libgcc* libstdc++* +popd + +if [ -z "${NO_BUILD_OPENSSL}" -o ${NO_BUILD_OPENSSL} -eq 0 ] ; then + + echo "Downloading OpenSSL" + + curl ${OPENSSL} -o openssl.tgz || exit 1 + + echo "Uncompress OpenSSL" + + tar -zxvf openssl.tgz + + pushd openssl-1.0.1u + + echo "Compile OpenSSL" + + ./Configure linux-armv4 shared --prefix="${PWD}/root" || exit 1 + + make CC=${CC} -j4 build_libs || exit 1 + + echo "Install OpenSSL" + + rm -f ${TARGET_DIR}/libcrypto* ${TARGET_DIR}/libssl* + + cp --no-dereference libcrypto.so* libssl.so* ${TARGET_DIR} + + popd +fi + +popd + +echo "Cleaning tmp dir" + +rm -rf ${TMP_DIR} diff --git a/src/acsmdownloader.cpp b/src/acsmdownloader.cpp new file mode 100644 index 0000000..20fa713 --- /dev/null +++ b/src/acsmdownloader.cpp @@ -0,0 +1,263 @@ +/* + Copyright 2021 Grégory Soutadé + + This is a free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + It is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with it. If not, see . +*/ + +#include +#include + +#include +#include + +#include +#include + +#include +#include + +#define ARRAY_SIZE(arr) (sizeof(arr)/sizeof(arr[0])) + +int verbose = INFO; + +static const char* deviceFile = "device.xml"; +static const char* activationFile = "activation.xml"; +static const char* devicekeyFile = "devicesalt"; +static const char* acsmFile = 0; +static const char* outputFile = 0; +static const char* outputDir = 0; +static const char* defaultDirs[] = { + ".adept/", + "./adobe-digital-editions/", + "./.adobe-digital-editions/" +}; + +class ACSMDownloader +{ +public: + ACSMDownloader(QCoreApplication* app): + app(app) + { + + } + + static void* run(void* param) + { + ACSMDownloader* _this; + + LOG_FUNC(); + + int ret = dp::platformInit(0xFFFFFFFF); + + if (ret) { + LOG(ERROR, "Error platform init " << ret); + _this->app->exit(ret); + return 0; + } + + dp::cryptRegisterOpenSSL(); + dp::documentRegisterEPUB(); + dp::documentRegisterPDF(); + + LOG(DEBUG, "Create Adobe objects"); + + try + { + MockDRMProcessorClient processorClient(outputDir, outputFile); + MockDevice device(&processorClient, deviceFile, activationFile, devicekeyFile); + MockProvider provider(&device); + device.setProvider(&provider); + dpdev::DeviceProvider::addProvider(&provider); + + MockNetProvider netProvider; + dpnet::NetProvider::setProvider(&netProvider); + + adept::DRMProviderImpl* _prov = rmsdk::getProvider(); + + LOG(DEBUG, "Create DRM Processor"); + adept::DRMProcessorImpl* drmprocessor = _prov->createDRMProcessor(&processorClient, &device); + + processorClient.setProcessor(drmprocessor); + + unsigned char* buffer; + int buffer_size; + MockDevice::readFile(acsmFile, &buffer, &buffer_size, true); + + LOG(DEBUG, "Init workflow "); + + drmprocessor->initWorkflows(WORKFLOW_AUTH_SIGN_IN|WORKFLOW_FULFILLMENT|WORKFLOW_DOWNLOAD|WORKFLOW_NOTIFICATION, dp::Data(buffer, buffer_size)); + + LOG(DEBUG, "Start work"); + drmprocessor->startWorkflows(WORKFLOW_AUTH_SIGN_IN|WORKFLOW_FULFILLMENT|WORKFLOW_DOWNLOAD|WORKFLOW_NOTIFICATION); + delete[] buffer; + + LOG(DEBUG, "Bye bye"); + + ret = (int)processorClient.getErrors(); + } + catch(std::exception& e) + { + LOG(ERROR, e.what()); + ret = 1; + } + + _this->app->exit(ret); + + return 0; + } + +private: + QCoreApplication* app; +}; + +static const char* findFile(const char* filename, bool inDefaultDirs=true) +{ + QFile file(filename); + + if (file.exists()) + return strdup(filename); + + if (!inDefaultDirs) return 0; + + for (int i=0; i<(int)ARRAY_SIZE(defaultDirs); i++) + { + uft::String path = uft::String(defaultDirs[i]) + filename; + file.setFileName(path.c_str()); + if (file.exists()) + return strdup(path.c_str()); + } + + return 0; +} + +static void usage(void) +{ + std::cout << "Download EPUB file from ACSM request file" << std::endl; + + std::cout << "Usage: ./acsmdownloader [(-d|--device-file) device.xml] [(-a|--activation-file) activation.xml] [(-s|--device-key-file) devicesalt] [(-O|--output-dir) dir] [(-o|--output-file) output.epub] [(-v|--verbose)] [(-h|--help)] (-f|--acsm-file) file.acsm" << std::endl << std::endl; + + std::cout << " " << "-d|--device-file" << "\t" << "device.xml file from eReader" << std::endl; + std::cout << " " << "-a|--activation-file" << "\t" << "activation.xml file from eReader" << std::endl; + std::cout << " " << "-k|--device-key-file" << "\t" << "private device key file (eg devicesalt/devkey.bin) from eReader" << std::endl; + std::cout << " " << "-O|--output-dir" << "\t" << "Optional output directory were to put result (default ./)" << std::endl; + std::cout << " " << "-o|--output-file" << "\t" << "Optional output epub filename (default )" << std::endl; + std::cout << " " << "-f|--acsm-file" << "\t" << "ACSM request file for epub download" << std::endl; + std::cout << " " << "-v|--verbose" << "\t\t" << "Increase verbosity, can be set multiple times" << std::endl; + std::cout << " " << "-h|--help" << "\t\t" << "This help" << std::endl; + + std::cout << std::endl; + std::cout << "Device file, activation file and device key file are optionals. If not set, they are looked into :" << std::endl; + std::cout << " * Current directory" << std::endl; + std::cout << " * .adept" << std::endl; + std::cout << " * adobe-digital-editions directory" << std::endl; + std::cout << " * .adobe-digital-editions directory" << std::endl; +} + +int main(int argc, char** argv) +{ + int c, ret = -1; + + const char** files[] = {&devicekeyFile, &deviceFile, &activationFile}; + + while (1) { + int option_index = 0; + static struct option long_options[] = { + {"device-file", required_argument, 0, 'd' }, + {"activation-file", required_argument, 0, 'a' }, + {"device-key-file", required_argument, 0, 'k' }, + {"output-dir", required_argument, 0, 'O' }, + {"output-file", required_argument, 0, 'o' }, + {"acsm-file", required_argument, 0, 'f' }, + {"verbose", no_argument, 0, 'v' }, + {"help", no_argument, 0, 'h' }, + {0, 0, 0, 0 } + }; + + c = getopt_long(argc, argv, "d:a:k:O:o:f:vh", + long_options, &option_index); + if (c == -1) + break; + + switch (c) { + case 'd': + deviceFile = optarg; + break; + case 'a': + activationFile = optarg; + break; + case 'k': + devicekeyFile = optarg; + break; + case 'f': + acsmFile = optarg; + break; + case 'O': + outputDir = optarg; + break; + case 'o': + outputFile = optarg; + break; + case 'v': + verbose++; + break; + case 'h': + usage(); + return 0; + break; + default: + usage(); + return -1; + } + } + + if (!acsmFile || (outputDir && !outputDir[0]) || + (outputFile && !outputFile[0])) + { + usage(); + return -1; + } + + int i; + for (i=0; i<(int)ARRAY_SIZE(files); i++) + { + *files[i] = findFile(*files[i]); + if (!*files[i]) + { + LOG(ERROR, "Error : " << *files[i] << " doesn't exists"); + return -1; + } + } + + QFile file(acsmFile); + if (!file.exists()) + { + LOG(ERROR, "Error : " << acsmFile << " doesn't exists"); + return -1; + } + + LOG(INFO, "RMSDK Version " << dp::getVersionInfo("hobbes").utf8()); + + QCoreApplication app(argc, argv); + + ACSMDownloader downloader(&app); + pthread_t thread; + pthread_create(&thread, NULL, ACSMDownloader::run, (void*)&downloader); + + ret = app.exec(); + + for (i=0; i<(int)ARRAY_SIZE(files); i++) + free((void*)*files[i]); + + return ret; +} diff --git a/src/activate.cpp b/src/activate.cpp new file mode 100644 index 0000000..49cbd89 --- /dev/null +++ b/src/activate.cpp @@ -0,0 +1,382 @@ +/* + Copyright 2021 Grégory Soutadé + + This is a free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + It is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with it. If not, see . +*/ + +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + +#include +#include + +#define RANDOM_NAME_SIZE 64 +#define ARRAY_SIZE(arr) (sizeof(arr)/sizeof(arr[0])) + +int verbose = INFO; + +static const char* username = 0; +static const char* password = 0; +static const char* outputDir = 0; +static const char* hobbesVersion = 0; +static bool randomSerial = false; +static char randomName[RANDOM_NAME_SIZE]; + +/* Overload libc getpwuid function (used to generate device serial) */ +struct passwd *getpwuid(uid_t uid) +{ + struct passwd *res; + void *handle; + struct passwd* (*_getpwuid)(uid_t uid); + + handle = dlopen(LIBC_SO, RTLD_LAZY); + + if (!handle) { + LOG(ERROR, "Unable to open libc (" << dlerror() << ")"); + return 0; + } + + // Original getpwuid() + _getpwuid = (struct passwd *(*)(uid_t uid)) dlsym(handle, "getpwuid"); + + if (!_getpwuid) + { + LOG(ERROR, "getpwuid() not found in libc (" << dlerror() << ")"); + return 0; + } + + res = _getpwuid(uid); + + LOG(DEBUG, "Original name " << res->pw_name); + + if (res && randomSerial) + { + // Already generated + if (randomName[0] == 0) + { + unsigned int seed; + + LOG(WARN, "Generate random name"); + + getrandom((void*)&seed, sizeof(seed), GRND_RANDOM); + + rand_r(&seed); rand_r(&seed); rand_r(&seed); + + for(int i=0; ipw_name = randomName; + } + + dlclose(handle); + + return res; +} + +// From http://www.cplusplus.com/articles/E6vU7k9E/ +static int getch() { + int ch; + struct termios t_old, t_new; + + tcgetattr(STDIN_FILENO, &t_old); + t_new = t_old; + t_new.c_lflag &= ~(ICANON | ECHO); + tcsetattr(STDIN_FILENO, TCSANOW, &t_new); + + ch = getchar(); + + tcsetattr(STDIN_FILENO, TCSANOW, &t_old); + return ch; +} + +static std::string getpass(const char *prompt, bool show_asterisk=false) +{ + const char BACKSPACE=127; + const char RETURN=10; + + std::string password; + unsigned char ch=0; + + std::cout <app->exit(ret); + return (void*)ret; + } + + dp::cryptRegisterOpenSSL(); + dp::documentRegisterEPUB(); + dp::documentRegisterPDF(); + + LOG(DEBUG, "Create Adobe objects"); + + char tmpActivate [] = "/tmp/activateXXXXXX"; + char* tmpDir = mkdtemp(tmpActivate); + setenv((char*)"HOME", tmpDir, 1); + + LOG(DEBUG, tmpDir << " created"); + + /* Will create a new dir at /tmp/activateXXXXXX/.adept */ + dpdev::UNIXDevice uDevice; + uDevice.getFingerprint(); + + + uft::String root(tmpDir); + uft::String tmpDevice = root + "/.adept/device.xml"; + uft::String tmpActivation = root + "/.adept/activation.xml"; + uft::String tmpDevicekey = root + "/.adept/devicesalt"; + + MockDRMProcessorClient processorClient(outputDir, 0, tmpDir); + MockDevice device(&processorClient, tmpDevice.utf8(), tmpActivation.utf8(), tmpDevicekey.utf8()); + MockProvider provider(&device); + device.setProvider(&provider); + dpdev::DeviceProvider::addProvider(&provider); + + MockNetProvider netProvider; + dpnet::NetProvider::setProvider(&netProvider); + + adept::DRMProviderImpl* _prov = rmsdk::getProvider(); + + LOG(DEBUG, "Create DRM Processor"); + adept::DRMProcessorImpl* drmprocessor = _prov->createDRMProcessor(&processorClient, &device); + + processorClient.setProcessor(drmprocessor); + + LOG(DEBUG, "Init workflow "); + + unsigned int workflows = WORKFLOW_AUTH_SIGN_IN|WORKFLOW_ACTIVATION; + drmprocessor->initSignInWorkflow(workflows, + dp::String("AdobeID"), + username, + password); + + LOG(DEBUG, "Start work"); + drmprocessor->startWorkflows(workflows); + + LOG(DEBUG, "Bye bye"); + + _this->app->exit(processorClient.getErrors()); + + return 0; + } + +private: + QCoreApplication* app; +}; + +static void usage(void) +{ + std::cout << "Create new device files used by ADEPT DRM" << std::endl; + + std::cout << "Usage: ./activate (-u|--username) username [(-p|--password) password] [(-O|--output-dir) dir] [(-r|--random-serial)] [(-v|--verbose)] [(-h|--help)]" << std::endl << std::endl; + + std::cout << " " << "-u|--username" << "\t\t" << "AdobeID username (ie adobe.com email account)" << std::endl; + std::cout << " " << "-p|--password" << "\t\t" << "AdobeID password (asked if not set via command line) " << std::endl; + std::cout << " " << "-O|--output-dir" << "\t" << "Optional output directory were to put result (default ./.adept). This directory must not already exists" << std::endl; + std::cout << " " << "-H|--hobbes-version" << "\t"<< "Force RMSDK version to a specific value (default: version of current librmsdk)" << std::endl; + std::cout << " " << "-r|--random-serial" << "\t"<< "Generate a random device serial (if not set, it will be dependent of your current configuration)" << std::endl; + std::cout << " " << "-v|--verbose" << "\t\t" << "Increase verbosity, can be set multiple times" << std::endl; + std::cout << " " << "-h|--help" << "\t\t" << "This help" << std::endl; + + std::cout << std::endl; +} + +static const char* abspath(const char* filename) +{ + const char* root = getcwd(0, PATH_MAX); + uft::StringBuffer fullPath(root); + fullPath.append("/"); + fullPath.append(filename); + const char* res = strdup(fullPath.utf8()); + + free((void*)root); + + return res; +} + +int main(int argc, char** argv) +{ + int c, ret = -1; + const char* _outputDir = outputDir; + + while (1) { + int option_index = 0; + static struct option long_options[] = { + {"username", required_argument, 0, 'u' }, + {"password", required_argument, 0, 'p' }, + {"output-dir", required_argument, 0, 'O' }, + {"hibbes-version",required_argument, 0, 'H' }, + {"random-serial", no_argument, 0, 'r' }, + {"verbose", no_argument, 0, 'v' }, + {"help", no_argument, 0, 'h' }, + {0, 0, 0, 0 } + }; + + c = getopt_long(argc, argv, "u:p:O:H:rvh", + long_options, &option_index); + if (c == -1) + break; + + switch (c) { + case 'u': + username = optarg; + break; + case 'p': + password = optarg; + break; + case 'O': + _outputDir = optarg; + break; + case 'H': + hobbesVersion = optarg; + break; + case 'v': + verbose++; + break; + case 'h': + usage(); + return 0; + break; + case 'r': + randomSerial = true; + break; + default: + usage(); + return -1; + } + } + + if (!username) + { + usage(); + return -1; + } + + if (!_outputDir || _outputDir[0] == 0) + { + outputDir = abspath(".adept"); + } + else + { + // Relative path + if (_outputDir[0] == '.' || _outputDir[0] != '/') + { + QFile file(_outputDir); + // realpath doesn't works if file/dir doesn't exists + if (file.exists()) + outputDir = realpath(_outputDir, 0); + else + outputDir = abspath(_outputDir); + } + else + outputDir = strdup(_outputDir); + } + + QDir dir; + dir.setPath(outputDir); + if (dir.exists()) + { + LOG(ERROR, "Error, output directory ./.adept already exists"); + return -1; + } + + if (!password) + { + char prompt[128]; + std::snprintf(prompt, sizeof(prompt), "Enter password for <%s> : ", username); + std::string pass = getpass((const char*)prompt, false); + password = pass.c_str(); + } + + if (hobbesVersion) + { + dp::setVersionInfo("hobbes", hobbesVersion); + LOG(INFO, "RMSDK Version forced to " << dp::getVersionInfo("hobbes").utf8()); + } + else + { + LOG(INFO, "RMSDK Version " << dp::getVersionInfo("hobbes").utf8()); + } + + QCoreApplication app(argc, argv); + + ACSMDownloader downloader(&app); + pthread_t thread; + pthread_create(&thread, NULL, ACSMDownloader::run, (void*)&downloader); + + ret = app.exec(); + + free((void*)outputDir); + return ret; +}