src: Initial reorganization for NFD Control Center
Change-Id: Ic8bc4b9168df83bd706f780187a5993292565f95
diff --git a/AUTHORS.md b/AUTHORS.md
new file mode 100644
index 0000000..ca686c7
--- /dev/null
+++ b/AUTHORS.md
@@ -0,0 +1,2 @@
+Ilya Moiseenko <http://ilyamoiseenko.com/>
+Alexander Afanasyev <http://lasr.cs.ucla.edu/afanasyev/index.html>
diff --git a/COPYING.md b/COPYING.md
new file mode 100644
index 0000000..d799430
--- /dev/null
+++ b/COPYING.md
@@ -0,0 +1,677 @@
+GNU GENERAL PUBLIC LICENSE
+==========================
+Version 3, 29 June 2007
+=======================
+
+> Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ 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.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ 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 <http://www.gnu.org/licenses/>.
+
+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:
+
+ <program> Copyright (C) <year> <name of author>
+ 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
+<http://www.gnu.org/licenses/>.
+
+ 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
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/LICENSE b/LICENSE
deleted file mode 100644
index c0cd90e..0000000
--- a/LICENSE
+++ /dev/null
@@ -1,28 +0,0 @@
-Copyright (c) 2013, Regents of the University of California
-All rights reserved.
-
-Authors of individual source files and components are listed in the
-respective files.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- * Neither the name of the Regents of the University of California nor
- the names of its contributors may be used to endorse or promote
- products derived from this software without specific prior written
- permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL REGENTS BE LIABLE FOR ANY DIRECT, INDIRECT,
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
-OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
-EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/linux/fib-input-dialog.cpp b/linux/fib-input-dialog.cpp
deleted file mode 100644
index d205f45..0000000
--- a/linux/fib-input-dialog.cpp
+++ /dev/null
@@ -1,86 +0,0 @@
-/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
-/*
- * @copyright See LICENCE for copyright and license information.
- *
- * @author Ilya Moiseenko <iliamo@ucla.edu>
- */
-
-#include "fib-input-dialog.h"
-#include <QVBoxLayout>
-#include <QHBoxLayout>
-
-FibInputDialog::FibInputDialog(QWidget *parent)
- : QDialog(parent)
-{
- prefixLabel = new QLabel(tr("NDN name (prefix): "));
- prefixTextField = new QLineEdit;
- prefixLabel->setBuddy(prefixTextField);
-
- tunnelLabel = new QLabel(tr("Tunnel type: "));
- tunnelComboBox = new QComboBox;
- tunnelComboBox->addItem(tr("TCP"));
- tunnelComboBox->addItem(tr("UDP"));
- tunnelComboBox->setEditable(false);
- tunnelComboBox->setCurrentIndex(0);
-
- endpointLabel = new QLabel(tr("Endpoint (IP address): "));
- endpointTextField = new QLineEdit;
- endpointLabel->setBuddy(endpointTextField);
-
- okButton = new QPushButton(tr("&Ok"));
- cancelButton = new QPushButton(tr("&Cancel"));
-
- connect(okButton,SIGNAL(pressed()), parent, SLOT(addFibEntry()));
- connect(cancelButton,SIGNAL(pressed()), this, SLOT(hide()));
-
- buttonBox = new QDialogButtonBox(Qt::Horizontal);
- buttonBox->addButton(cancelButton, QDialogButtonBox::ActionRole);
- buttonBox->addButton(okButton, QDialogButtonBox::ActionRole);
-
- QHBoxLayout *hlayout = new QHBoxLayout;
- hlayout->addWidget(tunnelLabel);
- hlayout->addWidget(tunnelComboBox);
-
- QVBoxLayout *layout = new QVBoxLayout;
- layout->addWidget(prefixLabel);
- layout->addWidget(prefixTextField);
- layout->addLayout(hlayout);
- layout->addWidget(endpointLabel);
- layout->addWidget(endpointTextField);
- layout->addWidget(buttonBox);
-
- setLayout(layout);
-
- setWindowTitle(tr("NDNx Control Center"));
-}
-
-QString
-FibInputDialog::getPrefixName()
-{
- return prefixTextField->text();
-}
-
-QString
-FibInputDialog::getEndpoint()
-{
- return endpointTextField->text();
-}
-
-QString
-FibInputDialog::getTunnelType()
-{
- return tunnelComboBox->currentText();
-}
-
-void
-FibInputDialog::clear()
-{
- prefixTextField->setText("");
- tunnelComboBox->setCurrentIndex(0);
- endpointTextField->setText("");
-}
-
-#if WAF
-#include "fib-input-dialog.moc"
-#include "fib-input-dialog.cpp.moc"
-#endif
diff --git a/linux/main.cpp b/linux/main.cpp
deleted file mode 100644
index 867abdb..0000000
--- a/linux/main.cpp
+++ /dev/null
@@ -1,17 +0,0 @@
-/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
-/*
- * @copyright See LICENCE for copyright and license information.
- *
- * @author Ilya Moiseenko <iliamo@ucla.edu>
- */
-
-#include <QtGui/QApplication>
-#include "tray-menu.h"
-
-int main(int argc, char *argv[])
-{
- QApplication a(argc, argv);
- TrayMenu w;
-
- return a.exec();
-}
diff --git a/linux/ndnxcontrolcenter.desktop.in b/linux/ndnxcontrolcenter.desktop.in
deleted file mode 100644
index 7eecf80..0000000
--- a/linux/ndnxcontrolcenter.desktop.in
+++ /dev/null
@@ -1,7 +0,0 @@
-[Desktop Entry]
-Type=Application
-Name=NDNx Control Center
-Exec=@BINDIR@/@BINARY@
-X-GNOME-Autostart-enabled=true
-X-KDE-autostart-after=panel
-X-GNOME-Autostart-Phase=Application
diff --git a/linux/network-manager.cpp b/linux/network-manager.cpp
deleted file mode 100644
index 65a04cd..0000000
--- a/linux/network-manager.cpp
+++ /dev/null
@@ -1,64 +0,0 @@
-/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
-/*
- * @copyright See LICENCE for copyright and license information.
- *
- * @author Ilya Moiseenko <iliamo@ucla.edu>
- */
-
-#include "config.h"
-#include "network-manager.h"
-
-NetworkManager::NetworkManager()
- : isAutoconfigRunning(false)
-{
- if (!QDBusConnection::systemBus().isConnected())
- {
- return;
- }
-
- autoconfigProcess = new QProcess(this);
- connect(autoconfigProcess,SIGNAL(finished(int)),this,SLOT(autoconfigFinished()));
- connect(autoconfigProcess, SIGNAL(error(QProcess::ProcessError)), this, SLOT(autoconfigFinished()));
-
- QDBusConnection::systemBus().connect("org.freedesktop.NetworkManager",
- "/org/freedesktop/NetworkManager",
- "org.freedesktop.NetworkManager",
- "StateChanged", this, SLOT(stateChanged(uint)));
-
- QDBusConnection::systemBus().connect("org.freedesktop.UPower",
- "/org/freedesktop/UPower",
- "org.freedesktop.UPower",
- "Resuming", this, SLOT(autoconfigDaemon()));
-}
-
-void NetworkManager::stateChanged(uint state)
-{
- if(state == NM_STATE_CONNECTED_GLOBAL)
- autoconfigDaemon();
-}
-
-void NetworkManager::autoconfigDaemon()
-{
- if(IsAutoconfigRunning())
- return;
-
- isAutoconfigRunning = true;
-
- if(autoconfigProcess != NULL)
- autoconfigProcess->start(NDND_AUTOCONFIG_COMMAND);
-}
-
-void NetworkManager::autoconfigFinished()
-{
- isAutoconfigRunning = false;
-}
-
-bool NetworkManager::IsAutoconfigRunning()
-{
- return isAutoconfigRunning;
-}
-
-#if WAF
-#include "network-manager.moc"
-#include "network-manager.cpp.moc"
-#endif
diff --git a/linux/network-manager.h b/linux/network-manager.h
deleted file mode 100644
index e62ab6d..0000000
--- a/linux/network-manager.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
-/*
- * @copyright See LICENCE for copyright and license information.
- *
- * @author Ilya Moiseenko <iliamo@ucla.edu>
- */
-
-#include <QtDBus>
-#include <QProcess>
-
-#ifndef NETWORKMANAGER_H
-#define NETWORKMANAGER_H
-
-#define NM_STATE_DISCONNECTED 20
-#define NM_STATE_CONNECTING 40
-#define NM_STATE_CONNECTED_GLOBAL 70
-
-class NetworkManager : public QObject
-{
- Q_OBJECT
-
-public:
- NetworkManager();
- bool IsAutoconfigRunning();
-
-public slots:
- void autoconfigDaemon();
-
-private:
- QProcess *autoconfigProcess;
- bool isAutoconfigRunning;
-
-private slots:
- void stateChanged(uint state);
- void autoconfigFinished();
-};
-
-
-#endif // NETWORKMANAGER_H
diff --git a/linux/quit-dialog.cpp b/linux/quit-dialog.cpp
deleted file mode 100644
index a99ce5c..0000000
--- a/linux/quit-dialog.cpp
+++ /dev/null
@@ -1,45 +0,0 @@
-/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
-/*
- * @copyright See LICENCE for copyright and license information.
- *
- * @author Ilya Moiseenko <iliamo@ucla.edu>
- */
-
-#include "quit-dialog.h"
-#include <QVBoxLayout>
-#include <QApplication>
-
-QuitDialog::QuitDialog(QWidget *parent)
- : QDialog(parent)
-{
- question = new QLabel(tr("Shutdown NDN daemon as well?"));
- information = new QLabel(tr("All NDN operations will become unavailable."));
-
- confirmButton = new QPushButton(tr("Yes"));
- noButton = new QPushButton(tr("No"));
- cancelButton = new QPushButton(tr("Cancel"));
- cancelButton->setDefault(true);
-
- buttonBox = new QDialogButtonBox(Qt::Horizontal);
- buttonBox->addButton(cancelButton, QDialogButtonBox::ActionRole);
- buttonBox->addButton(noButton, QDialogButtonBox::ActionRole);
- buttonBox->addButton(confirmButton, QDialogButtonBox::ActionRole);
-
- connect(confirmButton,SIGNAL(pressed()), parent, SLOT(terminateDaemonAndClose()));
- connect(noButton,SIGNAL(pressed()), qApp, SLOT(quit()));
- connect(cancelButton,SIGNAL(pressed()), this, SLOT(hide()));
-
- QVBoxLayout *layout = new QVBoxLayout;
- layout->addWidget(question);
- layout->addWidget(information);
- layout->addWidget(buttonBox);
-
- setLayout(layout);
-
- setWindowTitle(tr("NDNx Control Center"));
-}
-
-#if WAF
-#include "quit-dialog.moc"
-#include "quit-dialog.cpp.moc"
-#endif
diff --git a/linux/quit-dialog.h b/linux/quit-dialog.h
deleted file mode 100644
index e6fc7e3..0000000
--- a/linux/quit-dialog.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
-/*
- * @copyright See LICENCE for copyright and license information.
- *
- * @author Ilya Moiseenko <iliamo@ucla.edu>
- */
-
-#include <QDialog>
-#include <QLabel>
-#include <QDialogButtonBox>
-#include <QPushButton>
-
-#ifndef QUITDIALOG_H
-#define QUITDIALOG_H
-
-class QuitDialog : public QDialog
-{
- Q_OBJECT
-
-public:
- QuitDialog(QWidget *parent = 0);
-
-private:
- QLabel *question;
- QLabel *information;
- QDialogButtonBox *buttonBox;
- QPushButton *confirmButton;
- QPushButton *noButton;
- QPushButton *cancelButton;
-};
-
-#endif // QUITDIALOG_H
diff --git a/linux/tray-menu.cpp b/linux/tray-menu.cpp
deleted file mode 100644
index 3dd006a..0000000
--- a/linux/tray-menu.cpp
+++ /dev/null
@@ -1,590 +0,0 @@
-/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
-/*
- * @copyright See LICENCE for copyright and license information.
- *
- * @author Ilya Moiseenko <iliamo@ucla.edu>
- */
-
-#include "config.h"
-
-#include "tray-menu.h"
-#include "ui_traymenu.h" //generated from traymenu.ui
-#include "quit-dialog.h"
-#include "fib-input-dialog.h"
-#include "network-manager.h"
-
-#include <QMenu>
-#include <QCloseEvent>
-#include <QDesktopServices>
-#include <QUrl>
-#include <QCheckBox>
-#include <QLabel>
-#include <QHBoxLayout>
-#include <QLineEdit>
-#include <QDir>
-#include <QScrollBar>
-#include <QHBoxLayout>
-#include <QVBoxLayout>
-
-TrayMenu::TrayMenu(QWidget *parent) :
- QMainWindow(parent),
- ui(new Ui::TrayMenu)
-{
- processLookup = new QProcess(this);
- QStringList arguments;
- arguments << "-al";
- connect(processLookup,SIGNAL(finished(int)), this, SLOT(parseProcessLookup()));
- processLookup->start("ps",arguments);
-
- networkManager = new NetworkManager();
-
- QCoreApplication::setOrganizationName("UCLA");
- QCoreApplication::setOrganizationDomain("named-data.net");
- QCoreApplication::setApplicationName("NDNx Control Center");
-
- persistentSettings = new QSettings();
-
- ui->setupUi(this);
-
- createTrayIcon();
- setIcon(true);
- createToolbar();
- createTableView();
-
- loadSettings();
-
- connect(ui->openTrafficMapButton, SIGNAL(pressed()), this, SLOT(openTrafficMap()));
- connect(ui->openRoutingStatusButton, SIGNAL(pressed()), this, SLOT(openRoutingStatus()));
- connect(ui->addFibButton, SIGNAL(pressed()), this, SLOT(showFibInputDialog()));
- connect(ui->deleteFibButton, SIGNAL(released()), this, SLOT(deleteFibEntry()));
- connect(ui->hubDiscoveryCheckbox, SIGNAL(stateChanged(int)), this, SLOT(changeHubDiscovery()));
- connect(ui->loginStartCheckbox, SIGNAL(stateChanged(int)), this, SLOT(changeLoginStart()));
- connect(ui->tableView, SIGNAL(clicked(QModelIndex)), this, SLOT(selectTableRow()));
- connect(ui->openNdnCertificationButton, SIGNAL(released()), this, SLOT(openCertificationPage()));
-
- statusUpdateThread = new QThread();
- statusUpdateThread->start();
-
- daemonStatusTimer = new QTimer(statusUpdateThread);
- connect(daemonStatusTimer, SIGNAL(timeout()), this, SLOT(daemonStatusUpdate()));
- daemonStatusTimer->start(2000);
-
- trayIcon->show();
- model = NULL;
- dialog = new FibInputDialog(this);
-
- urlManager = new QNetworkAccessManager(this);
- connect(urlManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(runXmlProc(QNetworkReply*)));
-}
-
-void TrayMenu::loadSettings()
-{
- QVariant value;
-
- value = persistentSettings->value(ENABLE_HUB_DISCOVERY);
- if(!value.isNull())
- {
- enableHubDiscovery = value.toBool();
- ui->hubDiscoveryCheckbox->setChecked(enableHubDiscovery);
- }
- else
- {
- ui->hubDiscoveryCheckbox->setChecked(true);
- changeHubDiscovery();
- }
-
- value = persistentSettings->value(ENABLE_START_ON_LOGIN);
- if(!value.isNull())
- {
- enableStartOnLogin = value.toBool();
- ui->loginStartCheckbox->setChecked(enableStartOnLogin);
- }
- else
- {
- ui->loginStartCheckbox->setChecked(false);
- changeLoginStart();
- }
-}
-
-void TrayMenu::changeHubDiscovery()
-{
- if(ui->hubDiscoveryCheckbox->isChecked())
- {
- enableHubDiscovery = true;
- persistentSettings->setValue(ENABLE_HUB_DISCOVERY, true);
- }
- else
- {
- enableHubDiscovery = false;
- persistentSettings->setValue(ENABLE_HUB_DISCOVERY, false);
- }
-}
-
-void TrayMenu::changeLoginStart()
-{
- if(ui->loginStartCheckbox->isChecked())
- {
- enableStartOnLogin = true;
- persistentSettings->setValue(ENABLE_START_ON_LOGIN, true);
- makeAutostartDirectory();
- }
- else
- {
- enableStartOnLogin = false;
- persistentSettings->setValue(ENABLE_START_ON_LOGIN, false);
-
- QProcess *process = new QProcess();
- connect(process,SIGNAL(finished(int)),process, SLOT(deleteLater()));
- QStringList arguments;
- arguments << QDir::homePath() + AUTOSTART_DIRECTORY + SHORTCUT_FILE;
- process->start("rm", arguments);
- }
-}
-
-void TrayMenu::makeAutostartDirectory()
-{
- QProcess *process = new QProcess();
- connect(process, SIGNAL(finished(int)), this, SLOT(copyFile()));
- connect(process,SIGNAL(finished(int)),process, SLOT(deleteLater()));
- QStringList arguments;
- arguments << QDir::homePath() + AUTOSTART_DIRECTORY;
- process->start("mkdir", arguments);
-}
-
-void TrayMenu::copyFile()
-{
- QProcess *process = new QProcess();
- connect(process,SIGNAL(finished(int)),process, SLOT(deleteLater()));
- QStringList arguments;
- arguments << QString(RESOURCES_DIR) + "/" + SHORTCUT_FILE << QDir::homePath() + AUTOSTART_DIRECTORY;
- process->start("cp",arguments);
-}
-
-void TrayMenu::showFibInputDialog()
-{
- dialog->clear();
- dialog->exec();
-}
-
-void TrayMenu::openTrafficMap()
-{
- QDesktopServices::openUrl(QUrl("http://ndnmap.arl.wustl.edu/", QUrl::TolerantMode));
-}
-
-void TrayMenu::openRoutingStatus()
-{
- QDesktopServices::openUrl(QUrl("http://netlab.cs.memphis.edu/script/htm/status.htm", QUrl::TolerantMode));
-}
-
-void TrayMenu::openCertificationPage()
-{
- QDesktopServices::openUrl(QUrl("http://ndncert.named-data.net", QUrl::TolerantMode));
-}
-
-void TrayMenu::createTrayIcon()
-{
- trayIconMenu = new QMenu(this);
-
- statusIndicator = new QAction("Inactive", this);
- trayIconMenu->addAction(statusIndicator);
-
- trayIconMenu->addSeparator();
-
- displayStatus = new QAction(" Sent / Recv ", this);
- trayIconMenu->addAction(displayStatus);
- interestSentRecv = new QAction("Interests 0 / 0", this);
- trayIconMenu->addAction(interestSentRecv);
- dataSentRecv = new QAction("Data 0 / 0", this);
- trayIconMenu->addAction(dataSentRecv);
-
- trayIconMenu->addSeparator();
-
- open = new QAction("Preferences...", this);
- connect(open, SIGNAL(triggered()), this, SLOT(show()));
- trayIconMenu->addAction(open);
-
- close = new QAction("Quit", this);
- // connect(close, SIGNAL(triggered()), this, SLOT(confirmQuit()));
- connect(close, SIGNAL(triggered()), qApp, SLOT(quit()));
- trayIconMenu->addAction(close);
-
- trayIcon = new QSystemTrayIcon(this);
- trayIcon->setContextMenu(trayIconMenu);
-
- connect(
- trayIcon,
- SIGNAL(activated(QSystemTrayIcon::ActivationReason)),
- this,
- SLOT(trayIconClicked(QSystemTrayIcon::ActivationReason))
- );
-}
-
-void TrayMenu::createToolbar()
-{
- ui->toolBar->setFloatable(false);
- ui->toolBar->setMovable(false);
- ui->toolBar->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
- ui->toolBar->setAllowedAreas(Qt::TopToolBarArea);
- ui->toolBar->setOrientation(Qt::Horizontal);
- ui->toolBar->setIconSize(QSize(32,32));
- ui->toolBar->resize(this->width(), 64);
-
- openGeneralSettings = new QAction("General", this);
- openGeneralSettings->setIcon(QIcon(":/resource/Resources/preferences-desktop.png"));
- connect(openGeneralSettings,SIGNAL(triggered()),this, SLOT(generalSettingsClicked()));
-
- openForwardingSettings = new QAction("Forwarding", this);
- openForwardingSettings->setIcon(QIcon(":/resource/Resources/emblem-web.png"));
- connect(openForwardingSettings,SIGNAL(triggered()),this, SLOT(forwardingSettingsClicked()));
-
- openSecuritySettings = new QAction("Security", this);
- openSecuritySettings->setIcon(QIcon(":/resource/Resources/emblem-system.png"));
- connect(openSecuritySettings,SIGNAL(triggered()),this, SLOT(securitySettingsClicked()));
-
- ui->toolBar->addAction(openGeneralSettings);
- ui->toolBar->addAction(openForwardingSettings);
- ui->toolBar->addAction(openSecuritySettings);
-}
-
-void TrayMenu::generalSettingsClicked()
-{
- ui->generalSettingsWidget->show();
- ui->forwardingSettingsWidget->hide();
- ui->securitySettingsWidget->hide();
-}
-
-void TrayMenu::forwardingSettingsClicked()
-{
- ui->generalSettingsWidget->hide();
- ui->forwardingSettingsWidget->show();
- ui->securitySettingsWidget->hide();
-}
-
-void TrayMenu::securitySettingsClicked()
-{
- ui->generalSettingsWidget->hide();
- ui->forwardingSettingsWidget->hide();
- ui->securitySettingsWidget->show();
-}
-
-void TrayMenu::displayPopup()
-{
- trayIcon->showMessage("NDNx Status", statusXml);
-}
-
-void TrayMenu::addFibEntry()
-{
- QString name = dialog->getPrefixName();
- QString tunnelType = dialog->getTunnelType();
- QString endpoint = dialog->getEndpoint();
-
- QStringList arguments;
- arguments << "add" << name << tunnelType << endpoint;
-
- dialog->hide();
-
- QProcess *process = new QProcess();
- connect(process,SIGNAL(finished(int)),process, SLOT(deleteLater()));
- process->start(NDND_FIB_COMMAND, arguments);
-}
-
-void TrayMenu::closeEvent(QCloseEvent *event)
-{
- if (trayIcon->isVisible())
- {
- hide();
- event->ignore();
- }
-}
-
-void TrayMenu::showEvent(QShowEvent * event)
-{
- ui->generalSettingsWidget->show();
- ui->forwardingSettingsWidget->hide();
- ui->securitySettingsWidget->hide();
-}
-
-void TrayMenu::trayIconClicked(QSystemTrayIcon::ActivationReason reason)
-{
- if(reason == QSystemTrayIcon::Trigger)
- this->show();
-}
-
-void TrayMenu::setIcon(bool isConnected)
-{
- if(isConnected)
- trayIcon->setIcon(QIcon(":/resource/Resources/icon-connected-white.png"));
- else
- trayIcon->setIcon(QIcon(":/resource/Resources/icon-disconnected-white.png"));
-}
-
-void TrayMenu::daemonStatusUpdate()
-{
- urlManager->get(QNetworkRequest(QUrl("http://localhost:6363/?f=xml")));
-}
-
-void TrayMenu::runXmlProc(QNetworkReply *reply)
-{
- QByteArray buffer = reply->readAll();
- applyStatusXslt = new QProcess();
-
- QStringList arguments;
- arguments << QString(RESOURCES_DIR) + "/" + STATUS_XSLT_FILE << "-";
- connect(applyStatusXslt,SIGNAL(finished(int)), this, SLOT(parseStatusXml()));
- //connect(applyStatusXslt,SIGNAL(finished(int)), applyStatusXslt, SLOT(deleteLater()));
- applyStatusXslt->start(XSLTPROC,arguments);
- applyStatusXslt->write(buffer);
- applyStatusXslt->closeWriteChannel();
-
- applyFibXslt = new QProcess();
- QStringList args;
- args << QString(RESOURCES_DIR) + "/" + FIB_XSLT_FILE << "-";
- connect(applyFibXslt,SIGNAL(finished(int)), this, SLOT(parseFibXml()));
- //connect(applyFibXslt,SIGNAL(finished(int)), applyFibXslt, SLOT(deleteLater()));
- applyFibXslt->start(XSLTPROC,args);
- applyFibXslt->write(buffer);
- applyFibXslt->closeWriteChannel();
-}
-
-void TrayMenu::parseStatusXml()
-{
- QByteArray stdout = applyStatusXslt->readAllStandardOutput();
- QByteArray stderr = applyStatusXslt->readAllStandardError();
- applyStatusXslt->deleteLater();
-
- statusXml = QString(stdout);
-
- if((statusXml == "") || (stderr.length()>0)) // there was an error during Query evaluation
- {
- daemonStarted = false;
- setIcon(false);
- statusIndicator->setText("Inactive");
-
- // QProcess *process = new QProcess();
- // if(enableHubDiscovery)
- // connect(process, SIGNAL(finished(int)), networkManager, SLOT(autoconfigDaemon()));
- //
- // connect(process,SIGNAL(finished(int)), process, SLOT(deleteLater()));
- // process->start(NDND_START_COMMAND);
- }
- else
- {
- daemonStarted = true;
- setIcon(true);
- statusIndicator->setText("Active");
-
- QString interestIn = statusXml.mid(statusXml.indexOf("<in>")+4, statusXml.indexOf("</in>") - (statusXml.indexOf("<in>")+4));
- QString interestOut = statusXml.mid(statusXml.indexOf("<out>")+5, statusXml.indexOf("</out>") - (statusXml.indexOf("<out>")+5));
- QString dataIn = statusXml.mid(statusXml.lastIndexOf("<in>")+4, statusXml.lastIndexOf("</in>") - (statusXml.lastIndexOf("<in>")+4));
- QString dataOut = statusXml.mid(statusXml.lastIndexOf("<out>")+5, statusXml.lastIndexOf("</out>") - (statusXml.lastIndexOf("<out>")+5));
-
- int i = 0;
- int k = 0;
- if((dataOut.length() - interestOut.length()) > 0)
- {
- i = dataOut.length() - interestOut.length();
- i*=2; //because space takes less space than a letter
- }
-
- if((interestOut.length() - dataOut.length()) > 0)
- {
- k = interestOut.length() - dataOut.length();
- k*=2; //because space takes less space than a letter
- }
-
- QString interestStats = QString("%1%2%3%4").arg("Interests",-16,' ').arg(interestOut,6+i,' ').arg(" / ",3).arg(interestIn,-6,' ');
- QString dataStats = QString("%1%2%3%4").arg("Data",-20,' ').arg(dataOut,6+k,' ').arg(" / ",3).arg(dataIn,-6,' ');
-
- //Now I try to align header "Sent / Recv" centrally with the upper line
- QString padding;
- for(int j = 0; j < interestStats.indexOf(interestOut); j++)
- {
- if(interestStats.at(j)==' ')
- padding +=" ";
- else
- padding += " "; //because space takes less space than a letter
- }
-
- QString header;
- int m = 0;
- if(interestOut.length() - QString("Sent").length() > 0)
- {
- m = interestOut.length() - QString("Sent").length();
- m *=3;
- header = QString("%1%2").arg(padding).arg(" Sent / Recv",QString(" Sent / Recv").length() + m,' ');
- }
- else if(interestOut.length() - QString("Sent").length() < 0)
- {
- padding.truncate(padding.length()-(QString("Sent").length() - interestOut.length()));
- header = padding + "Sent / Recv";
- }
- else
- {
- header = padding + " Sent / Recv";
- }
-
- interestSentRecv->setText(interestStats);
- dataSentRecv->setText(dataStats);
- displayStatus->setText(header);
- }
-}
-
-void TrayMenu::parseFibXml()
-{
- QByteArray stdout = applyFibXslt->readAllStandardOutput();
- QByteArray stderr = applyFibXslt->readAllStandardError();
- applyFibXslt->deleteLater();
-
- fibContentsXml = QString(stdout);
-
- if((stdout == "") || (stderr.length()>0))
- return;
-
- if ((enableHubDiscovery) && (fibContentsXml.indexOf("ndn:/autoconf-route",0,Qt::CaseInsensitive) == -1))
- {
- networkManager->autoconfigDaemon();
- }
-
- QDomDocument xmldoc;
- QDomElement root;
-
- xmldoc.setContent(fibContentsXml);
- root=xmldoc.documentElement();
-
- if(model != NULL)
- {
- scrollPosition = ui->tableView->verticalScrollBar()->value();
- model->clear();
- delete model;
- }
-
- model = new QStandardItemModel(root.childNodes().count(),3);
- model->setHorizontalHeaderItem(0, new QStandardItem("NDN prefix"));
- model->setHorizontalHeaderItem(1, new QStandardItem("Face ID"));
- model->setHorizontalHeaderItem(2, new QStandardItem("Endpoint"));
-
- int row = 0;
- QDomNode fibEntry=root.firstChild();
-
- while (!fibEntry.isNull())
- {
- QDomNodeList properties = fibEntry.childNodes();
-
- QDomNode faceID = properties.at(0);
- QDomNode ip = properties.at(1);
- QDomNode prefix = properties.at(2);
-
- model->setItem(row, 0, new QStandardItem(prefix.toElement().text()));
- model->setItem(row, 1, new QStandardItem(faceID.toElement().text()));
- model->setItem(row, 2, new QStandardItem(ip.toElement().text()));
-
- fibEntry = fibEntry.nextSibling();
- row++;
- }
-
- ui->tableView->setModel(model);
-
- ui->tableView->setColumnWidth(0, ui->tableView->size().width() / 2 );
- ui->tableView->setColumnWidth(1, ui->tableView->size().width() / 6 );
-
- if(selectedRow >= 0)
- ui->tableView->selectRow(selectedRow);
-
- if(scrollPosition >= 0)
- ui->tableView->verticalScrollBar()->setValue(scrollPosition);
-}
-
-void TrayMenu::createTableView()
-{
- ui->tableView->horizontalHeader()->setResizeMode(QHeaderView::Fixed);
- ui->tableView->horizontalHeader()->setStretchLastSection(true);
- ui->tableView->setSelectionMode(QAbstractItemView::SingleSelection);
- ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
-
- selectedRow = -1;
- scrollPosition = -1;
-
- QHBoxLayout *hlayout = new QHBoxLayout();
- hlayout->addWidget(ui->addFibButton,0, Qt::AlignLeft);
- hlayout->addWidget(ui->deleteFibButton, 20, Qt::AlignLeft);
-
- QVBoxLayout *vlayout = new QVBoxLayout();
- vlayout->addWidget(ui->label);
- vlayout->addWidget(ui->tableView);
- vlayout->addLayout(hlayout);
-
- ui->forwardingSettingsWidget->setLayout(vlayout);
-
- QVBoxLayout *expanding = new QVBoxLayout();
- expanding->addWidget(ui->forwardingSettingsWidget);
- ui->centralWidget->setLayout(expanding);
-}
-
-void TrayMenu::selectTableRow()
-{
- selectedRow = ui->tableView->selectionModel()->selection().indexes().at(0).row();
-}
-
-void TrayMenu::deleteFibEntry()
-{
- if(selectedRow < 0)
- return;
-
- QStandardItem *prefix = model->item(selectedRow,0);
- if(prefix == NULL)
- return;
-
- QStandardItem *faceID = model->item(selectedRow,1);
- if(faceID == NULL)
- return;
-
- QStringList arguments;
- arguments << "del" << prefix->text() << "face" << faceID->text();
-
- QProcess *process = new QProcess();
- connect(process,SIGNAL(finished(int)), process, SLOT(deleteLater()));
- process->start(NDND_FIB_COMMAND, arguments);
-}
-
-void TrayMenu::resizeEvent(QResizeEvent * event)
-{
- ui->tableView->setColumnWidth(0, ui->tableView->size().width() / 2);
- ui->tableView->setColumnWidth(1, ui->tableView->size().width() / 6);
-}
-
-
-void TrayMenu::parseProcessLookup()
-{
- QByteArray stdout = processLookup->readAllStandardOutput();
- processLookup->deleteLater();
-
- QString s = QString(stdout);
-
- if(s == "")
- return;
- else if(s.indexOf("ndnx-control") != s.lastIndexOf("ndnx-control"))
- qApp->quit();
-}
-
-TrayMenu::~TrayMenu()
-{
- daemonStatusTimer->stop();
- statusUpdateThread->exit(0);
- delete ui;
- delete trayIcon;
- delete trayIconMenu;
- delete open;
- delete close;
- delete openGeneralSettings;
- delete openForwardingSettings;
- delete openSecuritySettings;
- delete statusUpdateThread;
- delete dialog;
- delete networkManager;
- delete persistentSettings;
-}
-
-#if WAF
-#include "tray-menu.moc"
-#include "tray-menu.cpp.moc"
-#endif
diff --git a/linux/tray-menu.h b/linux/tray-menu.h
deleted file mode 100644
index 174e338..0000000
--- a/linux/tray-menu.h
+++ /dev/null
@@ -1,132 +0,0 @@
-/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
-/*
- * @copyright See LICENCE for copyright and license information.
- *
- * @author Ilya Moiseenko <iliamo@ucla.edu>
- */
-
-#ifndef TRAYMENU_H
-#define TRAYMENU_H
-
-#include <QMainWindow>
-#include <QWidget>
-#include <QSystemTrayIcon>
-#include <QMenu>
-#include <QTimer>
-#include <QProcess>
-#include <QThread>
-#include <QStandardItemModel>
-#include <QtXml>
-#include <QThread>
-#include <QSettings>
-#include <QNetworkAccessManager>
-#include <QNetworkRequest>
-#include <QNetworkReply>
-
-#include "fib-input-dialog.h"
-#include "quit-dialog.h"
-#include "network-manager.h"
-
-#define ALLOW_SOFTWARE_UPDATES "AllowAutomaticUpdates"
-#define ENABLE_HUB_DISCOVERY "EnableHubDiscovery"
-#define ENABLE_START_ON_LOGIN "enableStartOnLogin"
-#define SHUTDOWN_ON_EXIT "ShutdownOnExit"
-
-#define AUTOSTART_DIRECTORY "/.config/autostart/"
-#define SHORTCUT_FILE "ndnxcontrolcenter.desktop"
-#define STATUS_XSLT_FILE "status.xslt"
-#define FIB_XSLT_FILE "status-to-fib.xslt"
-
-namespace Ui
-{
- class TrayMenu;
-}
-
-class TrayMenu : public QMainWindow
-{
- Q_OBJECT
-
-public:
- explicit TrayMenu(QWidget *parent = 0);
- ~TrayMenu();
-
-private:
- Ui::TrayMenu *ui;
-
- void createTrayIcon();
- void setIcon(bool isConnected);
- void createToolbar();
- void createTableView();
- void closeEvent(QCloseEvent *); // Overriding the window's close event
- void showEvent(QShowEvent * event); //Overriding the window's show event
-
- void loadSettings();
- void makeAutostartDirectory();
-
- void resizeEvent (QResizeEvent * event);
-
- bool daemonStarted;
-
- QSettings *persistentSettings;
-
- QSystemTrayIcon *trayIcon;
- QMenu *trayIconMenu;
-
- QTimer *daemonStatusTimer;
- QThread *statusUpdateThread;
-
- QProcess *processLookup;
- QProcess *applyStatusXslt;
- QProcess *applyFibXslt;
-
- QString statusXml;
- QString fibContentsXml;
-
- QStandardItemModel *model;
- int selectedRow;
- int scrollPosition;
-
- QAction *statusIndicator;
- QAction *displayStatus;
- QAction *interestSentRecv;
- QAction *dataSentRecv;
- QAction *open;
- QAction *close;
- QAction *openGeneralSettings;
- QAction *openForwardingSettings;
- QAction *openSecuritySettings;
-
- FibInputDialog *dialog;
-
- bool enableHubDiscovery;
- bool enableStartOnLogin;
-
- NetworkManager *networkManager;
- QNetworkAccessManager *urlManager;
-
-private slots:
- void trayIconClicked(QSystemTrayIcon::ActivationReason);
- void generalSettingsClicked();
- void forwardingSettingsClicked();
- void securitySettingsClicked();
- void openTrafficMap();
- void openRoutingStatus();
- void openCertificationPage();
- void displayPopup();
- // void confirmQuit();
- void showFibInputDialog();
- // void terminateDaemonAndClose();
- void addFibEntry();
- void daemonStatusUpdate();
- void selectTableRow();
- void deleteFibEntry();
- void changeHubDiscovery();
- void changeLoginStart();
- void copyFile();
- void runXmlProc(QNetworkReply *reply);
- void parseStatusXml();
- void parseFibXml();
- void parseProcessLookup();
-};
-
-#endif // TRAYMENU_H
diff --git a/osx/Info.plist b/osx/Info.plist
index bafb8e6..bb7bbb1 100644
--- a/osx/Info.plist
+++ b/osx/Info.plist
@@ -5,15 +5,15 @@
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
- <string>NDNx Control Center</string>
+ <string>NFD Control Center</string>
<key>CFBundleIconFile</key>
- <string>ndnx-main.icns</string>
+ <string>nfd-main.icns</string>
<key>CFBundleIdentifier</key>
<string>net.named-data.control-center</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
- <string>NDNx Control Center</string>
+ <string>NFD Control Center</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleSignature</key>
diff --git a/osx/LaunchAtLoginController/launch-at-login-controller.mm b/osx/LaunchAtLoginController/launch-at-login-controller.mm
index 88ba818..3354b1c 100644
--- a/osx/LaunchAtLoginController/launch-at-login-controller.mm
+++ b/osx/LaunchAtLoginController/launch-at-login-controller.mm
@@ -49,14 +49,14 @@
self = [super init];
loginItems = LSSharedFileListCreate(NULL, kLSSharedFileListSessionLoginItems, NULL);
LSSharedFileListAddObserver(loginItems, CFRunLoopGetMain(),
- (CFStringRef)NSDefaultRunLoopMode, sharedFileListDidChange, (voidPtr)CFBridgingRetain(self));
+ (__bridge CFStringRef)NSDefaultRunLoopMode, sharedFileListDidChange, (voidPtr)CFBridgingRetain(self));
return self;
}
- (void) dealloc
{
LSSharedFileListRemoveObserver(loginItems, CFRunLoopGetMain(),
- (CFStringRef)NSDefaultRunLoopMode, sharedFileListDidChange, (__bridge void *)(self));
+ (__bridge CFStringRef)NSDefaultRunLoopMode, sharedFileListDidChange, (__bridge void *)(self));
CFRelease(loginItems);
}
diff --git a/osx/Resources/ndnx-main.icns b/osx/Resources/nfd-main.icns
similarity index 100%
rename from osx/Resources/ndnx-main.icns
rename to osx/Resources/nfd-main.icns
Binary files differ
diff --git a/osx/Resources/ndnx-tray.icns b/osx/Resources/nfd-tray.icns
similarity index 100%
rename from osx/Resources/ndnx-tray.icns
rename to osx/Resources/nfd-tray.icns
Binary files differ
diff --git a/osx/fib-table-controller.h b/osx/fib-table-controller.h
index 65d60f7..1912521 100644
--- a/osx/fib-table-controller.h
+++ b/osx/fib-table-controller.h
@@ -1,9 +1,23 @@
/* -*- Mode: objc; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
-/*
- * @copyright See LICENCE for copyright and license information.
+/**
+ * Copyright (c) 2013-2014, Regents of the University of California,
*
- * @author Alexander Afanasyev <alexander.afanasyev@ucla.edu>
- * @author Ilya Moiseenko <iliamo@ucla.edu>
+ * This file is part of NFD Control Center. See AUTHORS.md for complete list of NFD
+ * authors and contributors.
+ *
+ * NFD Control Center 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.
+ *
+ * NFD Control Center 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 NFD
+ * Control Center, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * \author Alexander Afanasyev <http://lasr.cs.ucla.edu/afanasyev/index.html>
+ * \author Ilya Moiseenko <http://ilyamoiseenko.com/>
*/
#import <Cocoa/Cocoa.h>
diff --git a/osx/fib-table-controller.mm b/osx/fib-table-controller.mm
index 04821d0..8d56cea 100644
--- a/osx/fib-table-controller.mm
+++ b/osx/fib-table-controller.mm
@@ -1,12 +1,26 @@
/* -*- Mode: objc; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
-/*
- * @copyright See LICENCE for copyright and license information.
+/**
+ * Copyright (c) 2013-2014, Regents of the University of California,
*
- * @author Alexander Afanasyev <alexander.afanasyev@ucla.edu>
- * @author Ilya Moiseenko <iliamo@ucla.edu>
+ * This file is part of NFD Control Center. See AUTHORS.md for complete list of NFD
+ * authors and contributors.
+ *
+ * NFD Control Center 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.
+ *
+ * NFD Control Center 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 NFD
+ * Control Center, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * \author Alexander Afanasyev <http://lasr.cs.ucla.edu/afanasyev/index.html>
+ * \author Ilya Moiseenko <http://ilyamoiseenko.com/>
*/
-#include "config.h"
+#include "config.hpp"
#import "fib-table-controller.h"
@implementation FibTableController
@@ -29,7 +43,7 @@
}
-(id)tableView:(NSTableView *)aTableView
- objectValueForTableColumn:(NSTableColumn *)aTableColumn
+ objectValueForTableColumn:(NSTableColumn *)aTableColumn
row:(NSInteger)rowIndex
{
NSXMLNode *element = [[m_document rootElement] childAtIndex:rowIndex];
@@ -46,7 +60,7 @@
{
return [[element childAtIndex:1] stringValue];
}
-
+
return nil;
}
diff --git a/osx/main.mm b/osx/main.mm
index e9b10aa..f0f20fa 100644
--- a/osx/main.mm
+++ b/osx/main.mm
@@ -1,9 +1,23 @@
/* -*- Mode: objc; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
-/*
- * @copyright See LICENCE for copyright and license information.
+/**
+ * Copyright (c) 2013-2014, Regents of the University of California,
*
- * @author Alexander Afanasyev <alexander.afanasyev@ucla.edu>
- * @author Ilya Moiseenko <iliamo@ucla.edu>
+ * This file is part of NFD Control Center. See AUTHORS.md for complete list of NFD
+ * authors and contributors.
+ *
+ * NFD Control Center 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.
+ *
+ * NFD Control Center 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 NFD
+ * Control Center, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * \author Alexander Afanasyev <http://lasr.cs.ucla.edu/afanasyev/index.html>
+ * \author Ilya Moiseenko <http://ilyamoiseenko.com/>
*/
#import <Cocoa/Cocoa.h>
diff --git a/osx/menu-delegate.h b/osx/menu-delegate.h
index dc736a6..4fe76b9 100644
--- a/osx/menu-delegate.h
+++ b/osx/menu-delegate.h
@@ -1,9 +1,23 @@
/* -*- Mode: objc; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
-/*
- * @copyright See LICENCE for copyright and license information.
+/**
+ * Copyright (c) 2013-2014, Regents of the University of California,
*
- * @author Alexander Afanasyev <alexander.afanasyev@ucla.edu>
- * @author Ilya Moiseenko <iliamo@ucla.edu>
+ * This file is part of NFD Control Center. See AUTHORS.md for complete list of NFD
+ * authors and contributors.
+ *
+ * NFD Control Center 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.
+ *
+ * NFD Control Center 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 NFD
+ * Control Center, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * \author Alexander Afanasyev <http://lasr.cs.ucla.edu/afanasyev/index.html>
+ * \author Ilya Moiseenko <http://ilyamoiseenko.com/>
*/
#import <Cocoa/Cocoa.h>
@@ -14,7 +28,7 @@
@interface MenuDelegate : NSObject <NSApplicationDelegate>
{
NSOperationQueue *m_operationQueue;
-
+
NSStatusItem *statusItem;
NSImage *m_connectedIcon;
@@ -31,16 +45,16 @@
IBOutlet NSMenuItem *routingStatus;
IBOutlet NSMenuItem *trafficMap;
IBOutlet NSMenuItem *ndnPreferences;
-
+
BOOL m_daemonStarted;
-
+
IBOutlet NSTextField *interestSentRecv;
IBOutlet NSTextField *dataSentRecv;
-
+
IBOutlet NSView *daemonStatusView;
-
+
TightMenuItemView *connectionStatusView;
-
+
IBOutlet PreferenceDelegate *preferencesDelegate;
SystemEvents *m_systemEvents;
diff --git a/osx/menu-delegate.mm b/osx/menu-delegate.mm
index 6b6c75e..4eff7f9 100644
--- a/osx/menu-delegate.mm
+++ b/osx/menu-delegate.mm
@@ -1,12 +1,26 @@
-/* -*- Mode: obj; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
-/*
- * @copyright See LICENCE for copyright and license information.
+/* -*- Mode: objc; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
+/**
+ * Copyright (c) 2013-2014, Regents of the University of California,
*
- * @author Alexander Afanasyev <alexander.afanasyev@ucla.edu>
- * @author Ilya Moiseenko <iliamo@ucla.edu>
+ * This file is part of NFD Control Center. See AUTHORS.md for complete list of NFD
+ * authors and contributors.
+ *
+ * NFD Control Center 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.
+ *
+ * NFD Control Center 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 NFD
+ * Control Center, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * \author Alexander Afanasyev <http://lasr.cs.ucla.edu/afanasyev/index.html>
+ * \author Ilya Moiseenko <http://ilyamoiseenko.com/>
*/
-#include "config.h"
+#include "config.hpp"
#import "menu-delegate.h"
#import "ndnd-status-operation.h"
#import "tight-menu-item-view.h"
@@ -28,9 +42,9 @@
interestRecv = @"N/A";
dataSent = @"N/A";
dataRecv = @"N/A";
-
+
m_autoconfInProgress = false;
- m_operationQueue = [[NSOperationQueue alloc] init];
+ // m_operationQueue = [[NSOperationQueue alloc] init];
return self;
}
@@ -45,30 +59,33 @@
nil
];
[[NSUserDefaults standardUserDefaults] registerDefaults:appDefaults];
-
+
// Other initialization...
- m_daemonStarted = false;
+ m_daemonStarted = false;
NSBundle *bundle = [NSBundle bundleForClass:[self class]];
m_connectedIcon = [[NSImage alloc] initWithContentsOfFile:[bundle pathForResource:@"FlatConnected" ofType:@"png"]];
m_disconnectedIcon = [[NSImage alloc] initWithContentsOfFile:[bundle pathForResource:@"FlatDisconnected" ofType:@"png"]];
- m_statusXslt = [NSData dataWithContentsOfFile:[bundle pathForResource:@"status" ofType:@"xslt"]];
- m_statusToFibXslt = [NSData dataWithContentsOfFile:[bundle pathForResource:@"status-to-fib" ofType:@"xslt"]];
-
- [NSTimer scheduledTimerWithTimeInterval: 1.0
- target: self
- selector:@selector(onTick:)
- userInfo: nil
- repeats:YES];
- [self updateStatus];
- m_systemEvents = [[SystemEvents alloc] init];
+ [statusItem setImage:m_disconnectedIcon];
+
+ // m_statusXslt = [NSData dataWithContentsOfFile:[bundle pathForResource:@"status" ofType:@"xslt"]];
+ // m_statusToFibXslt = [NSData dataWithContentsOfFile:[bundle pathForResource:@"status-to-fib" ofType:@"xslt"]];
+
+ // [NSTimer scheduledTimerWithTimeInterval: 1.0
+ // target: self
+ // selector:@selector(onTick:)
+ // userInfo: nil
+ // repeats:YES];
+ // [self updateStatus];
+
+ // m_systemEvents = [[SystemEvents alloc] init];
}
- (void)applicationWillTerminate:(NSNotification *)aNotification
{
- [m_systemEvents disable];
+ // [m_systemEvents disable];
}
-(void)awakeFromNib
@@ -81,8 +98,7 @@
//[statusItem setTarget:self];
[statusItem setTitle:@""];
- [statusItem setImage:m_disconnectedIcon];
-
+
float menuItemHeight = 20;
NSRect viewRect = NSMakeRect(0, 0, /* width autoresizes */ 1, menuItemHeight);
@@ -91,7 +107,7 @@
[connectionStatus setView:connectionStatusView];
[connectionStatus setTarget:self];
-
+
[daemonStatus setView: daemonStatusView];
[daemonStatus setTarget:self];
}
@@ -105,12 +121,12 @@
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"shutdownNdndOnExit"]) {
[m_operationQueue cancelAllOperations];
- [m_operationQueue addOperationWithBlock:^{
- NSTask *task = [[NSTask alloc] init];
- [task setLaunchPath: @NDND_STOP_COMMAND];
- [task launch];
- [task waitUntilExit];
- }];
+ // [m_operationQueue addOperationWithBlock:^{
+ // NSTask *task = [[NSTask alloc] init];
+ // [task setLaunchPath: @NDND_STOP_COMMAND];
+ // [task launch];
+ // [task waitUntilExit];
+ // }];
[m_operationQueue waitUntilAllOperationsAreFinished];
[NSApp terminate:self];
@@ -130,12 +146,12 @@
// "YES" stop ndnd
[m_operationQueue cancelAllOperations];
- [m_operationQueue addOperationWithBlock:^{
- NSTask *task = [[NSTask alloc] init];
- [task setLaunchPath: @NDND_STOP_COMMAND];
- [task launch];
- [task waitUntilExit];
- }];
+ // [m_operationQueue addOperationWithBlock:^{
+ // NSTask *task = [[NSTask alloc] init];
+ // [task setLaunchPath: @NDND_STOP_COMMAND];
+ // [task launch];
+ // [task waitUntilExit];
+ // }];
[m_operationQueue waitUntilAllOperationsAreFinished];
[NSApp terminate:self];
@@ -169,102 +185,102 @@
- (void)statusUpdated:(NSXMLDocument*)document
{
- if (!m_daemonStarted) {
- m_daemonStarted = true;
- [connectionStatusView setStatus:@"Active"];
-
- [statusItem setImage:m_connectedIcon];
- }
+ // if (!m_daemonStarted) {
+ // m_daemonStarted = true;
+ // [connectionStatusView setStatus:@"Active"];
- NSXMLDocument *statusXml = [document objectByApplyingXSLT:m_statusXslt
- arguments:nil
- error:nil];
+ // [statusItem setImage:m_connectedIcon];
+ // }
- NSXMLDocument *statusFibXml = [document objectByApplyingXSLT:m_statusToFibXslt
- arguments:nil
- error:nil];
-
- NSXMLNode *element = [[statusXml rootElement] childAtIndex:0]; //data
- [self setDataRecv:[[element childAtIndex:0] stringValue]];
- [self setDataSent:[[element childAtIndex:1] stringValue]];
-
- element = [[statusXml rootElement] childAtIndex:1]; //interests
- [self setInterestRecv:[[element childAtIndex:0] stringValue]];
- [self setInterestSent:[[element childAtIndex:1] stringValue]];
+ // NSXMLDocument *statusXml = [document objectByApplyingXSLT:m_statusXslt
+ // arguments:nil
+ // error:nil];
- [preferencesDelegate updateFibStatus:statusFibXml];
+ // NSXMLDocument *statusFibXml = [document objectByApplyingXSLT:m_statusToFibXslt
+ // arguments:nil
+ // error:nil];
- if ([[NSUserDefaults standardUserDefaults] boolForKey:@"enableHubDiscovery"]) {
- NSArray *autoconf = [[statusFibXml rootElement] nodesForXPath:@"//fib/prefix[text()='ndn:/autoconf-route']" error:nil];
- if ([autoconf count] == 0)
- {
- [self restartDaemon:nil];
- }
- }
+ // NSXMLNode *element = [[statusXml rootElement] childAtIndex:0]; //data
+ // [self setDataRecv:[[element childAtIndex:0] stringValue]];
+ // [self setDataSent:[[element childAtIndex:1] stringValue]];
+
+ // element = [[statusXml rootElement] childAtIndex:1]; //interests
+ // [self setInterestRecv:[[element childAtIndex:0] stringValue]];
+ // [self setInterestSent:[[element childAtIndex:1] stringValue]];
+
+ // [preferencesDelegate updateFibStatus:statusFibXml];
+
+ // if ([[NSUserDefaults standardUserDefaults] boolForKey:@"enableHubDiscovery"]) {
+ // NSArray *autoconf = [[statusFibXml rootElement] nodesForXPath:@"//fib/prefix[text()='ndn:/autoconf-route']" error:nil];
+ // if ([autoconf count] == 0)
+ // {
+ // [self restartDaemon:nil];
+ // }
+ // }
}
- (void)statusUnavailable:(id)none
{
- // try start ndnd if it is not started yet
- if (m_daemonStarted) {
- m_daemonStarted = false;
-
- [connectionStatusView setStatus:@"Starting..."];
-
- [statusItem setImage:m_disconnectedIcon];
- }
+ // // try start ndnd if it is not started yet
+ // if (m_daemonStarted) {
+ // m_daemonStarted = false;
- [self setInterestSent:@"N/A"];
- [self setInterestRecv:@"N/A"];
- [self setDataSent:@"N/A"];
- [self setDataRecv:@"N/A"];
+ // [connectionStatusView setStatus:@"Starting..."];
- [preferencesDelegate updateFibStatus:nil];
+ // [statusItem setImage:m_disconnectedIcon];
+ // }
- m_autoconfInProgress = true;
-
- NSOperation *startOp = [NSBlockOperation blockOperationWithBlock:^{
- NSTask *task = [[NSTask alloc] init];
- [task setLaunchPath: @NDND_START_COMMAND];
- [task launch];
- }];
+ // [self setInterestSent:@"N/A"];
+ // [self setInterestRecv:@"N/A"];
+ // [self setDataSent:@"N/A"];
+ // [self setDataRecv:@"N/A"];
- if ([[NSUserDefaults standardUserDefaults] boolForKey:@"enableHubDiscovery"]) {
- NSOperation *autoconfOp = [NSBlockOperation blockOperationWithBlock:^{
- NSTask *task = [[NSTask alloc] init];
- [task setLaunchPath: @NDND_AUTOCONFIG_COMMAND];
- [task launch];
- [task waitUntilExit];
+ // [preferencesDelegate updateFibStatus:nil];
- m_autoconfInProgress = false;
- }];
+ // m_autoconfInProgress = true;
- [autoconfOp addDependency:startOp];
- [m_operationQueue addOperation:autoconfOp];
- }
+ // // NSOperation *startOp = [NSBlockOperation blockOperationWithBlock:^{
+ // // NSTask *task = [[NSTask alloc] init];
+ // // [task setLaunchPath: @NDND_START_COMMAND];
+ // // [task launch];
+ // // }];
- [m_operationQueue addOperation:startOp];
+ // // if ([[NSUserDefaults standardUserDefaults] boolForKey:@"enableHubDiscovery"]) {
+ // // NSOperation *autoconfOp = [NSBlockOperation blockOperationWithBlock:^{
+ // // NSTask *task = [[NSTask alloc] init];
+ // // [task setLaunchPath: @NDND_AUTOCONFIG_COMMAND];
+ // // [task launch];
+ // // [task waitUntilExit];
+
+ // // m_autoconfInProgress = false;
+ // // }];
+
+ // // [autoconfOp addDependency:startOp];
+ // // [m_operationQueue addOperation:autoconfOp];
+ // // }
+
+ // // [m_operationQueue addOperation:startOp];
}
-(void)restartDaemon:(id)none
{
- if (![[NSUserDefaults standardUserDefaults] boolForKey:@"enableHubDiscovery"])
- return;
-
- if (m_autoconfInProgress)
- return;
+ // if (![[NSUserDefaults standardUserDefaults] boolForKey:@"enableHubDiscovery"])
+ // return;
- NSLog (@"No automatically detected route configured, trying to get one");
-
- m_autoconfInProgress = true;
- [m_operationQueue addOperationWithBlock:^{
- NSTask *task = [[NSTask alloc] init];
- [task setLaunchPath: @NDND_AUTOCONFIG_COMMAND];
- [task launch];
- [task waitUntilExit];
+ // if (m_autoconfInProgress)
+ // return;
- m_autoconfInProgress = false;
- }];
+ // NSLog(@"No automatically detected route configured, trying to get one");
+
+ // // m_autoconfInProgress = true;
+ // // [m_operationQueue addOperationWithBlock:^{
+ // // NSTask *task = [[NSTask alloc] init];
+ // // [task setLaunchPath: @NDND_AUTOCONFIG_COMMAND];
+ // // [task launch];
+ // // [task waitUntilExit];
+
+ // // m_autoconfInProgress = false;
+ // // }];
}
@end
diff --git a/osx/ndnd-status-operation.h b/osx/ndnd-status-operation.h
index 8970288..2226cd7 100644
--- a/osx/ndnd-status-operation.h
+++ b/osx/ndnd-status-operation.h
@@ -1,9 +1,23 @@
/* -*- Mode: objc; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
-/*
- * @copyright See LICENCE for copyright and license information.
+/**
+ * Copyright (c) 2013-2014, Regents of the University of California,
*
- * @author Alexander Afanasyev <alexander.afanasyev@ucla.edu>
- * @author Ilya Moiseenko <iliamo@ucla.edu>
+ * This file is part of NFD Control Center. See AUTHORS.md for complete list of NFD
+ * authors and contributors.
+ *
+ * NFD Control Center 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.
+ *
+ * NFD Control Center 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 NFD
+ * Control Center, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * \author Alexander Afanasyev <http://lasr.cs.ucla.edu/afanasyev/index.html>
+ * \author Ilya Moiseenko <http://ilyamoiseenko.com/>
*/
#import <Cocoa/Cocoa.h>
diff --git a/osx/ndnd-status-operation.mm b/osx/ndnd-status-operation.mm
index 8bd5ac9..be7632b 100644
--- a/osx/ndnd-status-operation.mm
+++ b/osx/ndnd-status-operation.mm
@@ -1,12 +1,26 @@
/* -*- Mode: objc; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
-/*
- * @copyright See LICENCE for copyright and license information.
+/**
+ * Copyright (c) 2013-2014, Regents of the University of California,
*
- * @author Alexander Afanasyev <alexander.afanasyev@ucla.edu>
- * @author Ilya Moiseenko <iliamo@ucla.edu>
+ * This file is part of NFD Control Center. See AUTHORS.md for complete list of NFD
+ * authors and contributors.
+ *
+ * NFD Control Center 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.
+ *
+ * NFD Control Center 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 NFD
+ * Control Center, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * \author Alexander Afanasyev <http://lasr.cs.ucla.edu/afanasyev/index.html>
+ * \author Ilya Moiseenko <http://ilyamoiseenko.com/>
*/
-#include "config.h"
+#include "config.hpp"
#import "ndnd-status-operation.h"
@implementation NdndStatusOperation
@@ -20,38 +34,36 @@
-(void)main
{
- NSTask *task = [[NSTask alloc] init];
- [task setLaunchPath: @NDND_STATUS_COMMAND];
- [task setArguments: [NSArray arrayWithObjects: @"status",@"-x",nil]];
+ // NSTask *task = [[NSTask alloc] init];
+ // [task setLaunchPath: @NDND_STATUS_COMMAND];
+ // [task setArguments: [NSArray arrayWithObjects: @"status",@"-x",nil]];
- NSPipe * out = [NSPipe pipe];
- [task setStandardOutput:out];
+ // NSPipe * out = [NSPipe pipe];
+ // [task setStandardOutput:out];
- [task launch];
- [task waitUntilExit];
+ // [task launch];
+ // [task waitUntilExit];
- NSFileHandle * read = [out fileHandleForReading];
- NSData * dataRead = [read readDataToEndOfFile];
- NSString *stringRead = [[NSString alloc] initWithData:dataRead encoding:NSUTF8StringEncoding];
+ // NSFileHandle * read = [out fileHandleForReading];
+ // NSData * dataRead = [read readDataToEndOfFile];
+ // NSString *stringRead = [[NSString alloc] initWithData:dataRead encoding:NSUTF8StringEncoding];
- if ([stringRead isEqualToString:@""]) {
- [m_delegate performSelectorOnMainThread:@selector(statusUnavailable:)
- withObject:nil
- waitUntilDone:YES];
-
- } else {
- NSError *error = nil;
- NSXMLDocument *document = [[NSXMLDocument alloc]
- initWithXMLString:stringRead
- options:0
- error:&error];
+ // if ([stringRead isEqualToString:@""]) {
+ // [m_delegate performSelectorOnMainThread:@selector(statusUnavailable:)
+ // withObject:nil
+ // waitUntilDone:YES];
- [m_delegate performSelectorOnMainThread:@selector(statusUpdated:)
- withObject:document
- waitUntilDone:YES];
- }
-
- // [daemonStatusText setStringValue:stringRead];
+ // } else {
+ // NSError *error = nil;
+ // NSXMLDocument *document = [[NSXMLDocument alloc]
+ // initWithXMLString:stringRead
+ // options:0
+ // error:&error];
+
+ // [m_delegate performSelectorOnMainThread:@selector(statusUpdated:)
+ // withObject:document
+ // waitUntilDone:YES];
+ // }
}
@end
diff --git a/osx/preference-delegate.h b/osx/preference-delegate.h
index aa2d28b..efe0b16 100644
--- a/osx/preference-delegate.h
+++ b/osx/preference-delegate.h
@@ -1,9 +1,23 @@
/* -*- Mode: objc; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
-/*
- * @copyright See LICENCE for copyright and license information.
+/**
+ * Copyright (c) 2013-2014, Regents of the University of California,
*
- * @author Alexander Afanasyev <alexander.afanasyev@ucla.edu>
- * @author Ilya Moiseenko <iliamo@ucla.edu>
+ * This file is part of NFD Control Center. See AUTHORS.md for complete list of NFD
+ * authors and contributors.
+ *
+ * NFD Control Center 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.
+ *
+ * NFD Control Center 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 NFD
+ * Control Center, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * \author Alexander Afanasyev <http://lasr.cs.ucla.edu/afanasyev/index.html>
+ * \author Ilya Moiseenko <http://ilyamoiseenko.com/>
*/
#import <Cocoa/Cocoa.h>
@@ -12,7 +26,7 @@
@interface PreferenceDelegate : NSObject
{
IBOutlet NSWindow *preferencesPanel;
-
+
IBOutlet NSView *generalSettingsView;
IBOutlet NSButton *checkAllowSoftwareUpdates;
IBOutlet NSButton *checkEnableHubDiscovery;
@@ -20,15 +34,15 @@
IBOutlet NSView *forwardingSettingsView;
IBOutlet NSTableView *fibTableView;
-
+
IBOutlet NSView *securitySettingsView;
IBOutlet NSView *testbedSettingsView;
-
+
IBOutlet NSPanel *prefixRegistrationSheet;
IBOutlet NSComboBox *tunnelCombobox;
IBOutlet NSTextField *namePrefixText;
IBOutlet NSTextField *endpointText;
-
+
IBOutlet FibTableController *tableController;
}
diff --git a/osx/preference-delegate.mm b/osx/preference-delegate.mm
index dd0bfaf..f164c10 100644
--- a/osx/preference-delegate.mm
+++ b/osx/preference-delegate.mm
@@ -1,12 +1,26 @@
/* -*- Mode: objc; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
-/*
- * @copyright See LICENCE for copyright and license information.
+/**
+ * Copyright (c) 2013-2014, Regents of the University of California,
*
- * @author Alexander Afanasyev <alexander.afanasyev@ucla.edu>
- * @author Ilya Moiseenko <iliamo@ucla.edu>
+ * This file is part of NFD Control Center. See AUTHORS.md for complete list of NFD
+ * authors and contributors.
+ *
+ * NFD Control Center 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.
+ *
+ * NFD Control Center 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 NFD
+ * Control Center, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * \author Alexander Afanasyev <http://lasr.cs.ucla.edu/afanasyev/index.html>
+ * \author Ilya Moiseenko <http://ilyamoiseenko.com/>
*/
-#include "config.h"
+#include "config.hpp"
#import "preference-delegate.h"
#import "menu-delegate.h"
@@ -17,7 +31,7 @@
[preferencesPanel setContentView:generalSettingsView];
[preferencesPanel makeKeyAndOrderFront:sender];
[preferencesPanel setLevel: NSStatusWindowLevel];
-
+
tableController.m_tableView = fibTableView;
}
@@ -46,29 +60,29 @@
{
[NSApp endSheet:prefixRegistrationSheet];
[prefixRegistrationSheet orderOut:sender];
-
+
NSString *prefixName = [namePrefixText stringValue];
NSString *tunnelType = [tunnelCombobox itemObjectValueAtIndex:[tunnelCombobox indexOfSelectedItem]];
NSString *endpoint = [endpointText stringValue];
- NSOperation *operation = [NSBlockOperation blockOperationWithBlock:^{
- NSTask *task = [[NSTask alloc] init];
- [task setLaunchPath: @NDND_FIB_COMMAND];
- [task setArguments: [NSArray arrayWithObjects: @"add", prefixName, tunnelType, endpoint, nil]];
- [task launch];
- [task waitUntilExit];
- }];
+ // NSOperation *operation = [NSBlockOperation blockOperationWithBlock:^{
+ // NSTask *task = [[NSTask alloc] init];
+ // [task setLaunchPath: @NDND_FIB_COMMAND];
+ // [task setArguments: [NSArray arrayWithObjects: @"add", prefixName, tunnelType, endpoint, nil]];
+ // [task launch];
+ // [task waitUntilExit];
+ // }];
- [(MenuDelegate*)[[NSApplication sharedApplication] delegate] updateStatusWithDependency:operation];
+ // [(MenuDelegate*)[[NSApplication sharedApplication] delegate] updateStatusWithDependency:operation];
}
-(IBAction)removeFibEntry:(id)sender
{
NSInteger selectedRow = [fibTableView selectedRow];
-
+
if(selectedRow == -1)
return;
-
+
NSString *faceID = [tableController getFaceByRowIndex:selectedRow];
if (faceID == nil)
return;
@@ -77,15 +91,15 @@
if (prefix == nil)
return;
- NSOperation *operation = [NSBlockOperation blockOperationWithBlock:^{
- NSTask *task = [[NSTask alloc] init];
- [task setLaunchPath: @NDND_FIB_COMMAND];
- [task setArguments: [NSArray arrayWithObjects: @"del", prefix, @"face", faceID, nil]];
- [task launch];
- [task waitUntilExit];
- }];
+ // NSOperation *operation = [NSBlockOperation blockOperationWithBlock:^{
+ // NSTask *task = [[NSTask alloc] init];
+ // [task setLaunchPath: @NDND_FIB_COMMAND];
+ // [task setArguments: [NSArray arrayWithObjects: @"del", prefix, @"face", faceID, nil]];
+ // [task launch];
+ // [task waitUntilExit];
+ // }];
- [(MenuDelegate*)[[NSApplication sharedApplication] delegate] updateStatusWithDependency:operation];
+ // [(MenuDelegate*)[[NSApplication sharedApplication] delegate] updateStatusWithDependency:operation];
}
- (IBAction) showFibEntrySheet:(id)sender
@@ -95,7 +109,7 @@
modalDelegate:self
didEndSelector:nil
contextInfo:nil];
-
+
[tunnelCombobox selectItemAtIndex:0];
}
diff --git a/osx/sparkle-auto-update.h b/osx/sparkle-auto-update.h
index 78c793f..b8c850f 100644
--- a/osx/sparkle-auto-update.h
+++ b/osx/sparkle-auto-update.h
@@ -1,9 +1,23 @@
/* -*- Mode: objc; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
-/*
- * @copyright See LICENCE for copyright and license information.
+/**
+ * Copyright (c) 2013-2014, Regents of the University of California,
*
- * @author Zhenkai Zhu <zhenkai@cs.ucla.edu>
- * @author Alexander Afanasyev <alexander.afanasyev@ucla.edu>
+ * This file is part of NFD Control Center. See AUTHORS.md for complete list of NFD
+ * authors and contributors.
+ *
+ * NFD Control Center 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.
+ *
+ * NFD Control Center 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 NFD
+ * Control Center, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * \author Alexander Afanasyev <http://lasr.cs.ucla.edu/afanasyev/index.html>
+ * \author Ilya Moiseenko <http://ilyamoiseenko.com/>
*/
#ifndef SPARKLE_AUTO_UPDATE_H
diff --git a/osx/sparkle-auto-update.mm b/osx/sparkle-auto-update.mm
index a3a9b20..84612b3 100644
--- a/osx/sparkle-auto-update.mm
+++ b/osx/sparkle-auto-update.mm
@@ -1,9 +1,23 @@
/* -*- Mode: objc; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
-/*
- * @copyright See LICENCE for copyright and license information.
+/**
+ * Copyright (c) 2013-2014, Regents of the University of California,
*
- * @author Zhenkai Zhu <zhenkai@cs.ucla.edu>
- * @author Alexander Afanasyev <alexander.afanasyev@ucla.edu>
+ * This file is part of NFD Control Center. See AUTHORS.md for complete list of NFD
+ * authors and contributors.
+ *
+ * NFD Control Center 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.
+ *
+ * NFD Control Center 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 NFD
+ * Control Center, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * \author Alexander Afanasyev <http://lasr.cs.ucla.edu/afanasyev/index.html>
+ * \author Ilya Moiseenko <http://ilyamoiseenko.com/>
*/
#include "sparkle-auto-update.h"
diff --git a/osx/system-events.h b/osx/system-events.h
index 52370ce..fa8cd25 100644
--- a/osx/system-events.h
+++ b/osx/system-events.h
@@ -1,9 +1,23 @@
/* -*- Mode: objc; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
-/*
- * @copyright See LICENCE for copyright and license information.
+/**
+ * Copyright (c) 2013-2014, Regents of the University of California,
*
- * @author Alexander Afanasyev <alexander.afanasyev@ucla.edu>
- * @author Ilya Moiseenko <iliamo@ucla.edu>
+ * This file is part of NFD Control Center. See AUTHORS.md for complete list of NFD
+ * authors and contributors.
+ *
+ * NFD Control Center 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.
+ *
+ * NFD Control Center 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 NFD
+ * Control Center, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * \author Alexander Afanasyev <http://lasr.cs.ucla.edu/afanasyev/index.html>
+ * \author Ilya Moiseenko <http://ilyamoiseenko.com/>
*/
#import <Cocoa/Cocoa.h>
diff --git a/osx/system-events.mm b/osx/system-events.mm
index b7297f8..812ebf4 100644
--- a/osx/system-events.mm
+++ b/osx/system-events.mm
@@ -1,24 +1,38 @@
/* -*- Mode: objc; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
-/*
- * @copyright See LICENCE for copyright and license information.
+/**
+ * Copyright (c) 2013-2014, Regents of the University of California,
*
- * @author Alexander Afanasyev <alexander.afanasyev@ucla.edu>
- * @author Ilya Moiseenko <iliamo@ucla.edu>
+ * This file is part of NFD Control Center. See AUTHORS.md for complete list of NFD
+ * authors and contributors.
+ *
+ * NFD Control Center 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.
+ *
+ * NFD Control Center 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 NFD
+ * Control Center, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * \author Alexander Afanasyev <http://lasr.cs.ucla.edu/afanasyev/index.html>
+ * \author Ilya Moiseenko <http://ilyamoiseenko.com/>
*/
/*
Potentially useful System Configuration regex patterns:
(backslash quoting below is only to protect the C comment)
- State:/Network/Interface/.*\/Link
+ State:/Network/Interface/.*\/Link
State:/Network/Interface/.*\/IPv4
State:/Network/Interface/.*\/IPv6
-
+
State:/Network/Global/DNS
State:/Network/Global/IPv4
-
+
Potentially useful notifications from Darwin Notify Center:
-
+
com.apple.system.config.network_change
*/
@@ -60,8 +74,8 @@
return nil;
}
- [[[NSWorkspace sharedWorkspace] notificationCenter] addObserver:self
- selector: @selector(wakeUpNotification:)
+ [[[NSWorkspace sharedWorkspace] notificationCenter] addObserver:self
+ selector: @selector(wakeUpNotification:)
name: NSWorkspaceDidWakeNotification object: NULL];
CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(),
@@ -70,7 +84,7 @@
CFSTR ("com.apple.system.config.network_change"), // name of notification
NULL, // object to observe
NSNotificationSuspensionBehaviorDeliverImmediately);
-
+
return self;
}
diff --git a/osx/tight-menu-item-view.h b/osx/tight-menu-item-view.h
index 43b04b6..c0925a5 100644
--- a/osx/tight-menu-item-view.h
+++ b/osx/tight-menu-item-view.h
@@ -1,9 +1,23 @@
/* -*- Mode: objc; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
-/*
- * @copyright See LICENCE for copyright and license information.
+/**
+ * Copyright (c) 2013-2014, Regents of the University of California,
*
- * @author Alexander Afanasyev <alexander.afanasyev@ucla.edu>
- * @author Ilya Moiseenko <iliamo@ucla.edu>
+ * This file is part of NFD Control Center. See AUTHORS.md for complete list of NFD
+ * authors and contributors.
+ *
+ * NFD Control Center 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.
+ *
+ * NFD Control Center 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 NFD
+ * Control Center, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * \author Alexander Afanasyev <http://lasr.cs.ucla.edu/afanasyev/index.html>
+ * \author Ilya Moiseenko <http://ilyamoiseenko.com/>
*/
#import <Foundation/Foundation.h>
diff --git a/osx/tight-menu-item-view.mm b/osx/tight-menu-item-view.mm
index acd7830..65e0125 100644
--- a/osx/tight-menu-item-view.mm
+++ b/osx/tight-menu-item-view.mm
@@ -1,10 +1,23 @@
-//
/* -*- Mode: objc; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
-/*
- * @copyright See LICENCE for copyright and license information.
+/**
+ * Copyright (c) 2013-2014, Regents of the University of California,
*
- * @author Alexander Afanasyev <alexander.afanasyev@ucla.edu>
- * @author Ilya Moiseenko <iliamo@ucla.edu>
+ * This file is part of NFD Control Center. See AUTHORS.md for complete list of NFD
+ * authors and contributors.
+ *
+ * NFD Control Center 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.
+ *
+ * NFD Control Center 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 NFD
+ * Control Center, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * \author Alexander Afanasyev <http://lasr.cs.ucla.edu/afanasyev/index.html>
+ * \author Ilya Moiseenko <http://ilyamoiseenko.com/>
*/
#import "tight-menu-item-view.h"
@@ -30,7 +43,7 @@
blue:(70.0f/255.0f)
alpha:1.0] set];
NSRectFill(fullBounds);
-
+
NSTextField *connectionStatusText = [[NSTextField alloc] initWithFrame:[self bounds]];
[connectionStatusText setTextColor:[NSColor whiteColor]];
[connectionStatusText setStringValue:status];
@@ -41,7 +54,7 @@
[connectionStatusText setAlignment:NSCenterTextAlignment];
NSFont *theFont = [NSFont fontWithName:@"Lucida Grande" size:14];
[connectionStatusText setFont:theFont];
-
+
[self addSubview: connectionStatusText];
}
diff --git a/osx/wscript b/osx/wscript
new file mode 100644
index 0000000..9a6c4bf
--- /dev/null
+++ b/osx/wscript
@@ -0,0 +1,76 @@
+# -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
+
+from waflib import Logs, Utils, Task, TaskGen
+
+top = '..'
+
+def configure(conf):
+
+ conf.find_program('ibtool', var='IBTOOL', mandatory=False)
+
+ conf.check_cxx(framework_name='Foundation', uselib_store='FOUNDATION',
+ compile_filename='test.mm')
+ conf.check_cxx(framework_name='AppKit', uselib_store='APPKIT',
+ compile_filename='test.mm')
+ conf.check_cxx(framework_name='Cocoa', uselib_store='COCOA',
+ compile_filename='test.mm')
+
+ conf.env.ARCH_OSX = 'x86_64'
+ conf.env.CXXFLAGS_OSX += ['-fobjc-arc', '-mmacosx-version-min=10.7']
+ conf.env.LINKFLAGS_OSX += ['-mmacosx-version-min=10.7']
+ conf.env.MACOSX_DEPLOYMENT_TARGET = '10.7'
+
+ conf.load('sparkle')
+
+def build(bld):
+ bld(
+ target = "../NFD Control Center",
+ features=['cxxprogram', 'cxx'],
+ includes = ".. .",
+ source = bld.path.ant_glob(['**/*.mm', 'MainMenu.xib']),
+
+ mac_app = True,
+ use = "OSX COCOA FOUNDATION APPKIT SPARKLE",
+
+ mac_plist = 'Info.plist',
+ mac_resources = [i.path_from(bld.path) for i in bld.path.ant_glob('Resources/**/*')],
+ mac_frameworks = "Frameworks/Sparkle.framework",
+ )
+
+from waflib import TaskGen
+@TaskGen.extension('.mm')
+def m_hook(self, node):
+ """Alias .mm files to be compiled the same as .cc files, gcc/clang will do the right thing."""
+ return self.create_compiled_task('cxx', node)
+
+@TaskGen.extension('.m')
+def m_hook(self, node):
+ """Alias .m files to be compiled the same as .c files, gcc/clang will do the right thing."""
+ return self.create_compiled_task('c', node)
+
+
+def bundle_name_for_output(name):
+ return "%s.app" % name
+ # k = name.rfind('.')
+ # if k >= 0:
+ # name = name[:k] + '.app'
+ # else:
+ # name = name + '.app'
+ # return name
+
+@TaskGen.extension('.xib')
+def xib(self,node):
+ out = node.change_ext('.nib')
+
+ name = self.path.get_bld().find_or_declare(bundle_name_for_output(self.target))
+ resources = name.find_or_declare(['Contents', 'Resources'])
+ resources.mkdir()
+ real_out = resources.make_node(out.name)
+
+ self.create_task('xib', node, real_out)
+ inst_to = getattr(self, 'install_path', '/Applications') + '/%s/Contents/Resources' % name
+ self.bld.install_as(inst_to + '/%s' % real_out.name, real_out)
+
+class xib(Task.Task):
+ color='PINK'
+ run_str = '${IBTOOL} --errors --warnings --notices --output-format human-readable-text --compile ${TGT} ${SRC}'
diff --git a/linux/Resources/emblem-dropbox-unsyncable.png b/qt/Resources/emblem-dropbox-unsyncable.png
similarity index 100%
rename from linux/Resources/emblem-dropbox-unsyncable.png
rename to qt/Resources/emblem-dropbox-unsyncable.png
Binary files differ
diff --git a/linux/Resources/emblem-system.png b/qt/Resources/emblem-system.png
similarity index 100%
rename from linux/Resources/emblem-system.png
rename to qt/Resources/emblem-system.png
Binary files differ
diff --git a/linux/Resources/emblem-web.png b/qt/Resources/emblem-web.png
similarity index 100%
rename from linux/Resources/emblem-web.png
rename to qt/Resources/emblem-web.png
Binary files differ
diff --git a/linux/Resources/gnome-system.png b/qt/Resources/gnome-system.png
similarity index 100%
rename from linux/Resources/gnome-system.png
rename to qt/Resources/gnome-system.png
Binary files differ
diff --git a/linux/Resources/icon-connected-white.png b/qt/Resources/icon-connected-white.png
similarity index 100%
rename from linux/Resources/icon-connected-white.png
rename to qt/Resources/icon-connected-white.png
Binary files differ
diff --git a/linux/Resources/icon-disconnected-white.png b/qt/Resources/icon-disconnected-white.png
similarity index 100%
rename from linux/Resources/icon-disconnected-white.png
rename to qt/Resources/icon-disconnected-white.png
Binary files differ
diff --git a/linux/Resources/mail-send-receive.png b/qt/Resources/mail-send-receive.png
similarity index 100%
rename from linux/Resources/mail-send-receive.png
rename to qt/Resources/mail-send-receive.png
Binary files differ
diff --git a/linux/Resources/ndnx-main.png b/qt/Resources/ndnx-main.png
similarity index 100%
rename from linux/Resources/ndnx-main.png
rename to qt/Resources/ndnx-main.png
Binary files differ
diff --git a/linux/Resources/ndnx-main.xpm b/qt/Resources/ndnx-main.xpm
similarity index 100%
rename from linux/Resources/ndnx-main.xpm
rename to qt/Resources/ndnx-main.xpm
diff --git a/linux/Resources/preferences-desktop.png b/qt/Resources/preferences-desktop.png
similarity index 100%
rename from linux/Resources/preferences-desktop.png
rename to qt/Resources/preferences-desktop.png
Binary files differ
diff --git a/linux/Resources/status-to-fib.xslt b/qt/Resources/status-to-fib.xslt
similarity index 100%
rename from linux/Resources/status-to-fib.xslt
rename to qt/Resources/status-to-fib.xslt
diff --git a/linux/Resources/status.xslt b/qt/Resources/status.xslt
similarity index 100%
rename from linux/Resources/status.xslt
rename to qt/Resources/status.xslt
diff --git a/linux/Resources/system-run.png b/qt/Resources/system-run.png
similarity index 100%
rename from linux/Resources/system-run.png
rename to qt/Resources/system-run.png
Binary files differ
diff --git a/qt/disabled/fib-input-dialog.cpp b/qt/disabled/fib-input-dialog.cpp
new file mode 100644
index 0000000..69700db
--- /dev/null
+++ b/qt/disabled/fib-input-dialog.cpp
@@ -0,0 +1,87 @@
+/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
+/*
+ * @copyright See LICENCE for copyright and license information.
+ *
+ * @author Ilya Moiseenko <iliamo@ucla.edu>
+ */
+
+#include "fib-input-dialog.hpp"
+
+#include <QVBoxLayout>
+#include <QHBoxLayout>
+
+FibInputDialog::FibInputDialog(QWidget *parent)
+ : QDialog(parent)
+{
+ prefixLabel = new QLabel(tr("NDN name (prefix): "));
+ prefixTextField = new QLineEdit;
+ prefixLabel->setBuddy(prefixTextField);
+
+ tunnelLabel = new QLabel(tr("Tunnel type: "));
+ tunnelComboBox = new QComboBox;
+ tunnelComboBox->addItem(tr("TCP"));
+ tunnelComboBox->addItem(tr("UDP"));
+ tunnelComboBox->setEditable(false);
+ tunnelComboBox->setCurrentIndex(0);
+
+ endpointLabel = new QLabel(tr("Endpoint (IP address): "));
+ endpointTextField = new QLineEdit;
+ endpointLabel->setBuddy(endpointTextField);
+
+ okButton = new QPushButton(tr("&Ok"));
+ cancelButton = new QPushButton(tr("&Cancel"));
+
+ connect(okButton,SIGNAL(pressed()), parent, SLOT(addFibEntry()));
+ connect(cancelButton,SIGNAL(pressed()), this, SLOT(hide()));
+
+ buttonBox = new QDialogButtonBox(Qt::Horizontal);
+ buttonBox->addButton(cancelButton, QDialogButtonBox::ActionRole);
+ buttonBox->addButton(okButton, QDialogButtonBox::ActionRole);
+
+ QHBoxLayout *hlayout = new QHBoxLayout;
+ hlayout->addWidget(tunnelLabel);
+ hlayout->addWidget(tunnelComboBox);
+
+ QVBoxLayout *layout = new QVBoxLayout;
+ layout->addWidget(prefixLabel);
+ layout->addWidget(prefixTextField);
+ layout->addLayout(hlayout);
+ layout->addWidget(endpointLabel);
+ layout->addWidget(endpointTextField);
+ layout->addWidget(buttonBox);
+
+ setLayout(layout);
+
+ setWindowTitle(tr("NDNx Control Center"));
+}
+
+QString
+FibInputDialog::getPrefixName()
+{
+ return prefixTextField->text();
+}
+
+QString
+FibInputDialog::getEndpoint()
+{
+ return endpointTextField->text();
+}
+
+QString
+FibInputDialog::getTunnelType()
+{
+ return tunnelComboBox->currentText();
+}
+
+void
+FibInputDialog::clear()
+{
+ prefixTextField->setText("");
+ tunnelComboBox->setCurrentIndex(0);
+ endpointTextField->setText("");
+}
+
+#if WAF
+#include "fib-input-dialog.moc"
+#include "fib-input-dialog.cpp.moc"
+#endif
diff --git a/linux/fib-input-dialog.h b/qt/disabled/fib-input-dialog.hpp
similarity index 100%
rename from linux/fib-input-dialog.h
rename to qt/disabled/fib-input-dialog.hpp
diff --git a/qt/main.cpp b/qt/main.cpp
new file mode 100644
index 0000000..5268e80
--- /dev/null
+++ b/qt/main.cpp
@@ -0,0 +1,32 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+ * Copyright (c) 2013-2014, Regents of the University of California,
+ *
+ * This file is part of NFD Control Center. See AUTHORS.md for complete list of NFD
+ * authors and contributors.
+ *
+ * NFD Control Center 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.
+ *
+ * NFD Control Center 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 NFD
+ * Control Center, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * \author Ilya Moiseenko <iliamo@ucla.edu>
+ */
+
+#include "tray-menu.hpp"
+
+#include <QtGui/QApplication>
+
+int main(int argc, char *argv[])
+{
+ QApplication a(argc, argv);
+ TrayMenu w;
+
+ return a.exec();
+}
diff --git a/qt/network-manager.cpp b/qt/network-manager.cpp
new file mode 100644
index 0000000..05bf378
--- /dev/null
+++ b/qt/network-manager.cpp
@@ -0,0 +1,79 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+ * Copyright (c) 2013-2014, Regents of the University of California,
+ *
+ * This file is part of NFD Control Center. See AUTHORS.md for complete list of NFD
+ * authors and contributors.
+ *
+ * NFD Control Center 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.
+ *
+ * NFD Control Center 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 NFD
+ * Control Center, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * \author Ilya Moiseenko <iliamo@ucla.edu>
+ */
+
+#include "network-manager.hpp"
+#include "config.hpp"
+
+NetworkManager::NetworkManager()
+ : isAutoconfigRunning(false)
+{
+ if (!QDBusConnection::systemBus().isConnected())
+ {
+ return;
+ }
+
+ autoconfigProcess = new QProcess(this);
+ connect(autoconfigProcess,SIGNAL(finished(int)),this,SLOT(autoconfigFinished()));
+ connect(autoconfigProcess, SIGNAL(error(QProcess::ProcessError)),
+ this, SLOT(autoconfigFinished()));
+
+ QDBusConnection::systemBus().connect("org.freedesktop.NetworkManager",
+ "/org/freedesktop/NetworkManager",
+ "org.freedesktop.NetworkManager",
+ "StateChanged", this, SLOT(stateChanged(uint)));
+
+ QDBusConnection::systemBus().connect("org.freedesktop.UPower",
+ "/org/freedesktop/UPower",
+ "org.freedesktop.UPower",
+ "Resuming", this, SLOT(autoconfigDaemon()));
+}
+
+void NetworkManager::stateChanged(uint state)
+{
+ if (state == NM_STATE_CONNECTED_GLOBAL)
+ autoconfigDaemon();
+}
+
+void NetworkManager::autoconfigDaemon()
+{
+ if (IsAutoconfigRunning())
+ return;
+
+ isAutoconfigRunning = true;
+
+ if (autoconfigProcess != 0)
+ autoconfigProcess->start(NFD_AUTOCONFIG_COMMAND);
+}
+
+void NetworkManager::autoconfigFinished()
+{
+ isAutoconfigRunning = false;
+}
+
+bool NetworkManager::IsAutoconfigRunning()
+{
+ return isAutoconfigRunning;
+}
+
+#if WAF
+#include "network-manager.moc"
+#include "network-manager.cpp.moc"
+#endif
diff --git a/qt/network-manager.hpp b/qt/network-manager.hpp
new file mode 100644
index 0000000..f111fc6
--- /dev/null
+++ b/qt/network-manager.hpp
@@ -0,0 +1,53 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+ * Copyright (c) 2013-2014, Regents of the University of California,
+ *
+ * This file is part of NFD Control Center. See AUTHORS.md for complete list of NFD
+ * authors and contributors.
+ *
+ * NFD Control Center 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.
+ *
+ * NFD Control Center 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 NFD
+ * Control Center, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * \author Ilya Moiseenko <iliamo@ucla.edu>
+ */
+
+#include <QtDBus>
+#include <QProcess>
+
+#ifndef NCC_QT_NETWORK_MANAGER_HPP
+#define NCC_QT_NETWORK_MANAGER_HPP
+
+#define NM_STATE_DISCONNECTED 20
+#define NM_STATE_CONNECTING 40
+#define NM_STATE_CONNECTED_GLOBAL 70
+
+class NetworkManager : public QObject
+{
+ Q_OBJECT
+
+public:
+ NetworkManager();
+ bool IsAutoconfigRunning();
+
+public slots:
+ void autoconfigDaemon();
+
+private:
+ QProcess *autoconfigProcess;
+ bool isAutoconfigRunning;
+
+private slots:
+ void stateChanged(uint state);
+ void autoconfigFinished();
+};
+
+
+#endif // NCC_QT_NETWORK_MANAGER_HPP
diff --git a/linux/ndnx-control-center.desktop.in b/qt/nfd-control-center.desktop.in
similarity index 100%
rename from linux/ndnx-control-center.desktop.in
rename to qt/nfd-control-center.desktop.in
diff --git a/qt/quit-dialog.cpp b/qt/quit-dialog.cpp
new file mode 100644
index 0000000..98e993f
--- /dev/null
+++ b/qt/quit-dialog.cpp
@@ -0,0 +1,60 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+ * Copyright (c) 2013-2014, Regents of the University of California,
+ *
+ * This file is part of NFD Control Center. See AUTHORS.md for complete list of NFD
+ * authors and contributors.
+ *
+ * NFD Control Center 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.
+ *
+ * NFD Control Center 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 NFD
+ * Control Center, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * \author Ilya Moiseenko <iliamo@ucla.edu>
+ */
+
+#include "quit-dialog.hpp"
+
+#include <QVBoxLayout>
+#include <QApplication>
+
+QuitDialog::QuitDialog(QWidget *parent)
+ : QDialog(parent)
+{
+ question = new QLabel(tr("Shutdown NDN daemon as well?"));
+ information = new QLabel(tr("All NDN operations will become unavailable."));
+
+ confirmButton = new QPushButton(tr("Yes"));
+ noButton = new QPushButton(tr("No"));
+ cancelButton = new QPushButton(tr("Cancel"));
+ cancelButton->setDefault(true);
+
+ buttonBox = new QDialogButtonBox(Qt::Horizontal);
+ buttonBox->addButton(cancelButton, QDialogButtonBox::ActionRole);
+ buttonBox->addButton(noButton, QDialogButtonBox::ActionRole);
+ buttonBox->addButton(confirmButton, QDialogButtonBox::ActionRole);
+
+ connect(confirmButton,SIGNAL(pressed()), parent, SLOT(terminateDaemonAndClose()));
+ connect(noButton,SIGNAL(pressed()), qApp, SLOT(quit()));
+ connect(cancelButton,SIGNAL(pressed()), this, SLOT(hide()));
+
+ QVBoxLayout *layout = new QVBoxLayout;
+ layout->addWidget(question);
+ layout->addWidget(information);
+ layout->addWidget(buttonBox);
+
+ setLayout(layout);
+
+ setWindowTitle(tr("NDNx Control Center"));
+}
+
+#if WAF
+#include "quit-dialog.moc"
+#include "quit-dialog.cpp.moc"
+#endif
diff --git a/qt/quit-dialog.hpp b/qt/quit-dialog.hpp
new file mode 100644
index 0000000..c28c300
--- /dev/null
+++ b/qt/quit-dialog.hpp
@@ -0,0 +1,46 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+ * Copyright (c) 2013-2014, Regents of the University of California,
+ *
+ * This file is part of NFD Control Center. See AUTHORS.md for complete list of NFD
+ * authors and contributors.
+ *
+ * NFD Control Center 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.
+ *
+ * NFD Control Center 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 NFD
+ * Control Center, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * \author Ilya Moiseenko <iliamo@ucla.edu>
+ */
+
+#include <QDialog>
+#include <QLabel>
+#include <QDialogButtonBox>
+#include <QPushButton>
+
+#ifndef NCC_QT_QUIT_DIALOG_H
+#define NCC_QT_QUIT_DIALOG_H
+
+class QuitDialog : public QDialog
+{
+ Q_OBJECT
+
+public:
+ QuitDialog(QWidget *parent = 0);
+
+private:
+ QLabel *question;
+ QLabel *information;
+ QDialogButtonBox *buttonBox;
+ QPushButton *confirmButton;
+ QPushButton *noButton;
+ QPushButton *cancelButton;
+};
+
+#endif // NCC_QT_QUIT_DIALOG_H
diff --git a/linux/resource.qrc b/qt/resource.qrc
similarity index 100%
rename from linux/resource.qrc
rename to qt/resource.qrc
diff --git a/qt/tray-menu.cpp b/qt/tray-menu.cpp
new file mode 100644
index 0000000..da9874d
--- /dev/null
+++ b/qt/tray-menu.cpp
@@ -0,0 +1,605 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+ * Copyright (c) 2013-2014, Regents of the University of California,
+ *
+ * This file is part of NFD Control Center. See AUTHORS.md for complete list of NFD
+ * authors and contributors.
+ *
+ * NFD Control Center 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.
+ *
+ * NFD Control Center 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 NFD
+ * Control Center, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * \author Ilya Moiseenko <iliamo@ucla.edu>
+ */
+
+#include "config.hpp"
+
+#include "tray-menu.hpp"
+#include "ui_traymenu.h" //generated from traymenu.ui
+
+#include "quit-dialog.hpp"
+// #include "fib-input-dialog.hpp"
+#include "network-manager.hpp"
+
+#include <QMenu>
+#include <QCloseEvent>
+#include <QDesktopServices>
+#include <QUrl>
+#include <QCheckBox>
+#include <QLabel>
+#include <QHBoxLayout>
+#include <QLineEdit>
+#include <QDir>
+#include <QScrollBar>
+#include <QHBoxLayout>
+#include <QVBoxLayout>
+
+TrayMenu::TrayMenu(QWidget *parent)
+ : QMainWindow(parent)
+ , ui(new Ui::TrayMenu)
+{
+ processLookup = new QProcess(this);
+ QStringList arguments;
+ arguments << "-al";
+ connect(processLookup,SIGNAL(finished(int)), this, SLOT(parseProcessLookup()));
+ processLookup->start("ps",arguments);
+
+ networkManager = new NetworkManager();
+
+ QCoreApplication::setOrganizationName("UCLA");
+ QCoreApplication::setOrganizationDomain("named-data.net");
+ QCoreApplication::setApplicationName("NDNx Control Center");
+
+ persistentSettings = new QSettings();
+
+ ui->setupUi(this);
+
+ createTrayIcon();
+ setIcon(true);
+ createToolbar();
+ createTableView();
+
+ loadSettings();
+
+ connect(ui->openTrafficMapButton, SIGNAL(pressed()), this, SLOT(openTrafficMap()));
+ connect(ui->openRoutingStatusButton, SIGNAL(pressed()), this, SLOT(openRoutingStatus()));
+ connect(ui->addFibButton, SIGNAL(pressed()), this, SLOT(showFibInputDialog()));
+ // connect(ui->deleteFibButton, SIGNAL(released()), this, SLOT(deleteFibEntry()));
+ connect(ui->hubDiscoveryCheckbox, SIGNAL(stateChanged(int)), this, SLOT(changeHubDiscovery()));
+ connect(ui->loginStartCheckbox, SIGNAL(stateChanged(int)), this, SLOT(changeLoginStart()));
+ connect(ui->tableView, SIGNAL(clicked(QModelIndex)), this, SLOT(selectTableRow()));
+ connect(ui->openNdnCertificationButton, SIGNAL(released()), this, SLOT(openCertificationPage()));
+
+ statusUpdateThread = new QThread();
+ statusUpdateThread->start();
+
+ // daemonStatusTimer = new QTimer(statusUpdateThread);
+ // connect(daemonStatusTimer, SIGNAL(timeout()), this, SLOT(daemonStatusUpdate()));
+ // daemonStatusTimer->start(2000);
+
+ trayIcon->show();
+ model = NULL;
+ // dialog = new FibInputDialog(this);
+
+ // urlManager = new QNetworkAccessManager(this);
+ // connect(urlManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(runXmlProc(QNetworkReply*)));
+}
+
+void TrayMenu::loadSettings()
+{
+ QVariant value;
+
+ value = persistentSettings->value(ENABLE_HUB_DISCOVERY);
+ if(!value.isNull())
+ {
+ enableHubDiscovery = value.toBool();
+ ui->hubDiscoveryCheckbox->setChecked(enableHubDiscovery);
+ }
+ else
+ {
+ ui->hubDiscoveryCheckbox->setChecked(true);
+ changeHubDiscovery();
+ }
+
+ value = persistentSettings->value(ENABLE_START_ON_LOGIN);
+ if(!value.isNull())
+ {
+ enableStartOnLogin = value.toBool();
+ ui->loginStartCheckbox->setChecked(enableStartOnLogin);
+ }
+ else
+ {
+ ui->loginStartCheckbox->setChecked(false);
+ changeLoginStart();
+ }
+}
+
+void TrayMenu::changeHubDiscovery()
+{
+ if(ui->hubDiscoveryCheckbox->isChecked())
+ {
+ enableHubDiscovery = true;
+ persistentSettings->setValue(ENABLE_HUB_DISCOVERY, true);
+ }
+ else
+ {
+ enableHubDiscovery = false;
+ persistentSettings->setValue(ENABLE_HUB_DISCOVERY, false);
+ }
+}
+
+void TrayMenu::changeLoginStart()
+{
+ if(ui->loginStartCheckbox->isChecked())
+ {
+ enableStartOnLogin = true;
+ persistentSettings->setValue(ENABLE_START_ON_LOGIN, true);
+ makeAutostartDirectory();
+ }
+ else
+ {
+ enableStartOnLogin = false;
+ persistentSettings->setValue(ENABLE_START_ON_LOGIN, false);
+
+ QProcess *process = new QProcess();
+ connect(process,SIGNAL(finished(int)),process, SLOT(deleteLater()));
+ QStringList arguments;
+ arguments << QDir::homePath() + AUTOSTART_DIRECTORY + SHORTCUT_FILE;
+ process->start("rm", arguments);
+ }
+}
+
+void TrayMenu::makeAutostartDirectory()
+{
+ QProcess *process = new QProcess();
+ connect(process, SIGNAL(finished(int)), this, SLOT(copyFile()));
+ connect(process,SIGNAL(finished(int)),process, SLOT(deleteLater()));
+ QStringList arguments;
+ arguments << QDir::homePath() + AUTOSTART_DIRECTORY;
+ process->start("mkdir", arguments);
+}
+
+void TrayMenu::copyFile()
+{
+ QProcess *process = new QProcess();
+ connect(process,SIGNAL(finished(int)),process, SLOT(deleteLater()));
+ QStringList arguments;
+ arguments << QString(RESOURCES_DIR) + "/" + SHORTCUT_FILE << QDir::homePath() + AUTOSTART_DIRECTORY;
+ process->start("cp",arguments);
+}
+
+void TrayMenu::showFibInputDialog()
+{
+ // dialog->clear();
+ // dialog->exec();
+}
+
+void TrayMenu::openTrafficMap()
+{
+ QDesktopServices::openUrl(QUrl("http://ndnmap.arl.wustl.edu/", QUrl::TolerantMode));
+}
+
+void TrayMenu::openRoutingStatus()
+{
+ QDesktopServices::openUrl(QUrl("http://netlab.cs.memphis.edu/script/htm/status.htm", QUrl::TolerantMode));
+}
+
+void TrayMenu::openCertificationPage()
+{
+ QDesktopServices::openUrl(QUrl("http://ndncert.named-data.net", QUrl::TolerantMode));
+}
+
+void TrayMenu::createTrayIcon()
+{
+ trayIconMenu = new QMenu(this);
+
+ statusIndicator = new QAction("Inactive", this);
+ trayIconMenu->addAction(statusIndicator);
+
+ trayIconMenu->addSeparator();
+
+ displayStatus = new QAction(" Sent / Recv ", this);
+ trayIconMenu->addAction(displayStatus);
+ interestSentRecv = new QAction("Interests 0 / 0", this);
+ trayIconMenu->addAction(interestSentRecv);
+ dataSentRecv = new QAction("Data 0 / 0", this);
+ trayIconMenu->addAction(dataSentRecv);
+
+ trayIconMenu->addSeparator();
+
+ open = new QAction("Preferences...", this);
+ connect(open, SIGNAL(triggered()), this, SLOT(show()));
+ trayIconMenu->addAction(open);
+
+ close = new QAction("Quit", this);
+ // connect(close, SIGNAL(triggered()), this, SLOT(confirmQuit()));
+ connect(close, SIGNAL(triggered()), qApp, SLOT(quit()));
+ trayIconMenu->addAction(close);
+
+ trayIcon = new QSystemTrayIcon(this);
+ trayIcon->setContextMenu(trayIconMenu);
+
+ connect(
+ trayIcon,
+ SIGNAL(activated(QSystemTrayIcon::ActivationReason)),
+ this,
+ SLOT(trayIconClicked(QSystemTrayIcon::ActivationReason))
+ );
+}
+
+void TrayMenu::createToolbar()
+{
+ ui->toolBar->setFloatable(false);
+ ui->toolBar->setMovable(false);
+ ui->toolBar->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
+ ui->toolBar->setAllowedAreas(Qt::TopToolBarArea);
+ ui->toolBar->setOrientation(Qt::Horizontal);
+ ui->toolBar->setIconSize(QSize(32,32));
+ ui->toolBar->resize(this->width(), 64);
+
+ openGeneralSettings = new QAction("General", this);
+ openGeneralSettings->setIcon(QIcon(":/resource/Resources/preferences-desktop.png"));
+ connect(openGeneralSettings,SIGNAL(triggered()),this, SLOT(generalSettingsClicked()));
+
+ openForwardingSettings = new QAction("Forwarding", this);
+ openForwardingSettings->setIcon(QIcon(":/resource/Resources/emblem-web.png"));
+ connect(openForwardingSettings,SIGNAL(triggered()),this, SLOT(forwardingSettingsClicked()));
+
+ openSecuritySettings = new QAction("Security", this);
+ openSecuritySettings->setIcon(QIcon(":/resource/Resources/emblem-system.png"));
+ connect(openSecuritySettings,SIGNAL(triggered()),this, SLOT(securitySettingsClicked()));
+
+ ui->toolBar->addAction(openGeneralSettings);
+ ui->toolBar->addAction(openForwardingSettings);
+ ui->toolBar->addAction(openSecuritySettings);
+}
+
+void TrayMenu::generalSettingsClicked()
+{
+ ui->generalSettingsWidget->show();
+ ui->forwardingSettingsWidget->hide();
+ ui->securitySettingsWidget->hide();
+}
+
+void TrayMenu::forwardingSettingsClicked()
+{
+ ui->generalSettingsWidget->hide();
+ ui->forwardingSettingsWidget->show();
+ ui->securitySettingsWidget->hide();
+}
+
+void TrayMenu::securitySettingsClicked()
+{
+ ui->generalSettingsWidget->hide();
+ ui->forwardingSettingsWidget->hide();
+ ui->securitySettingsWidget->show();
+}
+
+void TrayMenu::displayPopup()
+{
+ trayIcon->showMessage("NDNx Status", statusXml);
+}
+
+void TrayMenu::addFibEntry()
+{
+ // QString name = dialog->getPrefixName();
+ // QString tunnelType = dialog->getTunnelType();
+ // QString endpoint = dialog->getEndpoint();
+
+ // QStringList arguments;
+ // arguments << "add" << name << tunnelType << endpoint;
+
+ // dialog->hide();
+
+ // QProcess *process = new QProcess();
+ // connect(process,SIGNAL(finished(int)),process, SLOT(deleteLater()));
+ // process->start(NDND_FIB_COMMAND, arguments);
+}
+
+void TrayMenu::closeEvent(QCloseEvent *event)
+{
+ if (trayIcon->isVisible())
+ {
+ hide();
+ event->ignore();
+ }
+}
+
+void TrayMenu::showEvent(QShowEvent * event)
+{
+ ui->generalSettingsWidget->show();
+ ui->forwardingSettingsWidget->hide();
+ ui->securitySettingsWidget->hide();
+}
+
+void TrayMenu::trayIconClicked(QSystemTrayIcon::ActivationReason reason)
+{
+ if(reason == QSystemTrayIcon::Trigger)
+ this->show();
+}
+
+void TrayMenu::setIcon(bool isConnected)
+{
+ if(isConnected)
+ trayIcon->setIcon(QIcon(":/resource/Resources/icon-connected-white.png"));
+ else
+ trayIcon->setIcon(QIcon(":/resource/Resources/icon-disconnected-white.png"));
+}
+
+// void TrayMenu::daemonStatusUpdate()
+// {
+// urlManager->get(QNetworkRequest(QUrl("http://localhost:6363/?f=xml")));
+// }
+
+// void TrayMenu::runXmlProc(QNetworkReply *reply)
+// {
+// QByteArray buffer = reply->readAll();
+// applyStatusXslt = new QProcess();
+
+// QStringList arguments;
+// arguments << QString(RESOURCES_DIR) + "/" + STATUS_XSLT_FILE << "-";
+// connect(applyStatusXslt,SIGNAL(finished(int)), this, SLOT(parseStatusXml()));
+// //connect(applyStatusXslt,SIGNAL(finished(int)), applyStatusXslt, SLOT(deleteLater()));
+// applyStatusXslt->start(XSLTPROC,arguments);
+// applyStatusXslt->write(buffer);
+// applyStatusXslt->closeWriteChannel();
+
+// applyFibXslt = new QProcess();
+// QStringList args;
+// args << QString(RESOURCES_DIR) + "/" + FIB_XSLT_FILE << "-";
+// connect(applyFibXslt,SIGNAL(finished(int)), this, SLOT(parseFibXml()));
+// //connect(applyFibXslt,SIGNAL(finished(int)), applyFibXslt, SLOT(deleteLater()));
+// applyFibXslt->start(XSLTPROC,args);
+// applyFibXslt->write(buffer);
+// applyFibXslt->closeWriteChannel();
+// }
+
+// void TrayMenu::parseStatusXml()
+// {
+// QByteArray stdout = applyStatusXslt->readAllStandardOutput();
+// QByteArray stderr = applyStatusXslt->readAllStandardError();
+// applyStatusXslt->deleteLater();
+
+// statusXml = QString(stdout);
+
+// if((statusXml == "") || (stderr.length()>0)) // there was an error during Query evaluation
+// {
+// daemonStarted = false;
+// setIcon(false);
+// statusIndicator->setText("Inactive");
+
+// // QProcess *process = new QProcess();
+// // if(enableHubDiscovery)
+// // connect(process, SIGNAL(finished(int)), networkManager, SLOT(autoconfigDaemon()));
+// //
+// // connect(process,SIGNAL(finished(int)), process, SLOT(deleteLater()));
+// // process->start(NDND_START_COMMAND);
+// }
+// else
+// {
+// daemonStarted = true;
+// setIcon(true);
+// statusIndicator->setText("Active");
+
+// QString interestIn = statusXml.mid(statusXml.indexOf("<in>")+4, statusXml.indexOf("</in>") - (statusXml.indexOf("<in>")+4));
+// QString interestOut = statusXml.mid(statusXml.indexOf("<out>")+5, statusXml.indexOf("</out>") - (statusXml.indexOf("<out>")+5));
+// QString dataIn = statusXml.mid(statusXml.lastIndexOf("<in>")+4, statusXml.lastIndexOf("</in>") - (statusXml.lastIndexOf("<in>")+4));
+// QString dataOut = statusXml.mid(statusXml.lastIndexOf("<out>")+5, statusXml.lastIndexOf("</out>") - (statusXml.lastIndexOf("<out>")+5));
+
+// int i = 0;
+// int k = 0;
+// if((dataOut.length() - interestOut.length()) > 0)
+// {
+// i = dataOut.length() - interestOut.length();
+// i*=2; //because space takes less space than a letter
+// }
+
+// if((interestOut.length() - dataOut.length()) > 0)
+// {
+// k = interestOut.length() - dataOut.length();
+// k*=2; //because space takes less space than a letter
+// }
+
+// QString interestStats = QString("%1%2%3%4").arg("Interests",-16,' ').arg(interestOut,6+i,' ').arg(" / ",3).arg(interestIn,-6,' ');
+// QString dataStats = QString("%1%2%3%4").arg("Data",-20,' ').arg(dataOut,6+k,' ').arg(" / ",3).arg(dataIn,-6,' ');
+
+// //Now I try to align header "Sent / Recv" centrally with the upper line
+// QString padding;
+// for(int j = 0; j < interestStats.indexOf(interestOut); j++)
+// {
+// if(interestStats.at(j)==' ')
+// padding +=" ";
+// else
+// padding += " "; //because space takes less space than a letter
+// }
+
+// QString header;
+// int m = 0;
+// if(interestOut.length() - QString("Sent").length() > 0)
+// {
+// m = interestOut.length() - QString("Sent").length();
+// m *=3;
+// header = QString("%1%2").arg(padding).arg(" Sent / Recv",QString(" Sent / Recv").length() + m,' ');
+// }
+// else if(interestOut.length() - QString("Sent").length() < 0)
+// {
+// padding.truncate(padding.length()-(QString("Sent").length() - interestOut.length()));
+// header = padding + "Sent / Recv";
+// }
+// else
+// {
+// header = padding + " Sent / Recv";
+// }
+
+// interestSentRecv->setText(interestStats);
+// dataSentRecv->setText(dataStats);
+// displayStatus->setText(header);
+// }
+// }
+
+// void TrayMenu::parseFibXml()
+// {
+// QByteArray stdout = applyFibXslt->readAllStandardOutput();
+// QByteArray stderr = applyFibXslt->readAllStandardError();
+// applyFibXslt->deleteLater();
+
+// fibContentsXml = QString(stdout);
+
+// if((stdout == "") || (stderr.length()>0))
+// return;
+
+// if ((enableHubDiscovery) && (fibContentsXml.indexOf("ndn:/autoconf-route",0,Qt::CaseInsensitive) == -1))
+// {
+// networkManager->autoconfigDaemon();
+// }
+
+// QDomDocument xmldoc;
+// QDomElement root;
+
+// xmldoc.setContent(fibContentsXml);
+// root=xmldoc.documentElement();
+
+// if(model != NULL)
+// {
+// scrollPosition = ui->tableView->verticalScrollBar()->value();
+// model->clear();
+// delete model;
+// }
+
+// model = new QStandardItemModel(root.childNodes().count(),3);
+// model->setHorizontalHeaderItem(0, new QStandardItem("NDN prefix"));
+// model->setHorizontalHeaderItem(1, new QStandardItem("Face ID"));
+// model->setHorizontalHeaderItem(2, new QStandardItem("Endpoint"));
+
+// int row = 0;
+// QDomNode fibEntry=root.firstChild();
+
+// while (!fibEntry.isNull())
+// {
+// QDomNodeList properties = fibEntry.childNodes();
+
+// QDomNode faceID = properties.at(0);
+// QDomNode ip = properties.at(1);
+// QDomNode prefix = properties.at(2);
+
+// model->setItem(row, 0, new QStandardItem(prefix.toElement().text()));
+// model->setItem(row, 1, new QStandardItem(faceID.toElement().text()));
+// model->setItem(row, 2, new QStandardItem(ip.toElement().text()));
+
+// fibEntry = fibEntry.nextSibling();
+// row++;
+// }
+
+// ui->tableView->setModel(model);
+
+// ui->tableView->setColumnWidth(0, ui->tableView->size().width() / 2 );
+// ui->tableView->setColumnWidth(1, ui->tableView->size().width() / 6 );
+
+// if(selectedRow >= 0)
+// ui->tableView->selectRow(selectedRow);
+
+// if(scrollPosition >= 0)
+// ui->tableView->verticalScrollBar()->setValue(scrollPosition);
+// }
+
+void TrayMenu::createTableView()
+{
+ ui->tableView->horizontalHeader()->setResizeMode(QHeaderView::Fixed);
+ ui->tableView->horizontalHeader()->setStretchLastSection(true);
+ ui->tableView->setSelectionMode(QAbstractItemView::SingleSelection);
+ ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
+
+ selectedRow = -1;
+ scrollPosition = -1;
+
+ QHBoxLayout *hlayout = new QHBoxLayout();
+ hlayout->addWidget(ui->addFibButton,0, Qt::AlignLeft);
+ // hlayout->addWidget(ui->deleteFibButton, 20, Qt::AlignLeft);
+
+ QVBoxLayout *vlayout = new QVBoxLayout();
+ vlayout->addWidget(ui->label);
+ vlayout->addWidget(ui->tableView);
+ vlayout->addLayout(hlayout);
+
+ ui->forwardingSettingsWidget->setLayout(vlayout);
+
+ QVBoxLayout *expanding = new QVBoxLayout();
+ expanding->addWidget(ui->forwardingSettingsWidget);
+ ui->centralWidget->setLayout(expanding);
+}
+
+void TrayMenu::selectTableRow()
+{
+ selectedRow = ui->tableView->selectionModel()->selection().indexes().at(0).row();
+}
+
+// void TrayMenu::deleteFibEntry()
+// {
+// if(selectedRow < 0)
+// return;
+
+// QStandardItem *prefix = model->item(selectedRow,0);
+// if(prefix == NULL)
+// return;
+
+// QStandardItem *faceID = model->item(selectedRow,1);
+// if(faceID == NULL)
+// return;
+
+// QStringList arguments;
+// arguments << "del" << prefix->text() << "face" << faceID->text();
+
+// QProcess *process = new QProcess();
+// connect(process,SIGNAL(finished(int)), process, SLOT(deleteLater()));
+// process->start(NDND_FIB_COMMAND, arguments);
+// }
+
+void TrayMenu::resizeEvent(QResizeEvent * event)
+{
+ ui->tableView->setColumnWidth(0, ui->tableView->size().width() / 2);
+ ui->tableView->setColumnWidth(1, ui->tableView->size().width() / 6);
+}
+
+
+void TrayMenu::parseProcessLookup()
+{
+ QByteArray stdout = processLookup->readAllStandardOutput();
+ processLookup->deleteLater();
+
+ QString s = QString(stdout);
+
+ if(s == "")
+ return;
+ else if(s.indexOf("ndnx-control") != s.lastIndexOf("ndnx-control"))
+ qApp->quit();
+}
+
+TrayMenu::~TrayMenu()
+{
+ daemonStatusTimer->stop();
+ statusUpdateThread->exit(0);
+ delete ui;
+ delete trayIcon;
+ delete trayIconMenu;
+ delete open;
+ delete close;
+ delete openGeneralSettings;
+ delete openForwardingSettings;
+ delete openSecuritySettings;
+ delete statusUpdateThread;
+ // delete dialog;
+ delete networkManager;
+ delete persistentSettings;
+}
+
+#if WAF
+#include "tray-menu.moc"
+#include "tray-menu.cpp.moc"
+#endif
diff --git a/qt/tray-menu.hpp b/qt/tray-menu.hpp
new file mode 100644
index 0000000..966db12
--- /dev/null
+++ b/qt/tray-menu.hpp
@@ -0,0 +1,145 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+ * Copyright (c) 2013-2014, Regents of the University of California,
+ *
+ * This file is part of NFD Control Center. See AUTHORS.md for complete list of NFD
+ * authors and contributors.
+ *
+ * NFD Control Center 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.
+ *
+ * NFD Control Center 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 NFD
+ * Control Center, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * \author Ilya Moiseenko <iliamo@ucla.edu>
+ */
+
+#ifndef NCC_QT_TRAY_MENU_H
+#define NCC_QT_TRAY_MENU_H
+
+#include <QMainWindow>
+#include <QWidget>
+#include <QSystemTrayIcon>
+#include <QMenu>
+#include <QTimer>
+#include <QProcess>
+#include <QThread>
+#include <QStandardItemModel>
+#include <QtXml>
+#include <QThread>
+#include <QSettings>
+#include <QNetworkAccessManager>
+#include <QNetworkRequest>
+#include <QNetworkReply>
+
+// #include "fib-input-dialog.hpp"
+#include "quit-dialog.hpp"
+#include "network-manager.hpp"
+
+#define ALLOW_SOFTWARE_UPDATES "AllowAutomaticUpdates"
+#define ENABLE_HUB_DISCOVERY "EnableHubDiscovery"
+#define ENABLE_START_ON_LOGIN "enableStartOnLogin"
+#define SHUTDOWN_ON_EXIT "ShutdownOnExit"
+
+#define AUTOSTART_DIRECTORY "/.config/autostart/"
+#define SHORTCUT_FILE "ndnxcontrolcenter.desktop"
+#define STATUS_XSLT_FILE "status.xslt"
+#define FIB_XSLT_FILE "status-to-fib.xslt"
+
+namespace Ui {
+class TrayMenu;
+}
+
+class TrayMenu : public QMainWindow
+{
+ Q_OBJECT
+
+public:
+ explicit TrayMenu(QWidget *parent = 0);
+ ~TrayMenu();
+
+private:
+ Ui::TrayMenu *ui;
+
+ void createTrayIcon();
+ void setIcon(bool isConnected);
+ void createToolbar();
+ void createTableView();
+ void closeEvent(QCloseEvent *); // Overriding the window's close event
+ void showEvent(QShowEvent * event); //Overriding the window's show event
+
+ void loadSettings();
+ void makeAutostartDirectory();
+
+ void resizeEvent (QResizeEvent * event);
+
+ bool daemonStarted;
+
+ QSettings *persistentSettings;
+
+ QSystemTrayIcon *trayIcon;
+ QMenu *trayIconMenu;
+
+ QTimer *daemonStatusTimer;
+ QThread *statusUpdateThread;
+
+ QProcess *processLookup;
+ QProcess *applyStatusXslt;
+ QProcess *applyFibXslt;
+
+ QString statusXml;
+ QString fibContentsXml;
+
+ QStandardItemModel *model;
+ int selectedRow;
+ int scrollPosition;
+
+ QAction *statusIndicator;
+ QAction *displayStatus;
+ QAction *interestSentRecv;
+ QAction *dataSentRecv;
+ QAction *open;
+ QAction *close;
+ QAction *openGeneralSettings;
+ QAction *openForwardingSettings;
+ QAction *openSecuritySettings;
+
+ // FibInputDialog *dialog;
+
+ bool enableHubDiscovery;
+ bool enableStartOnLogin;
+
+ NetworkManager *networkManager;
+ QNetworkAccessManager *urlManager;
+
+private slots:
+ void trayIconClicked(QSystemTrayIcon::ActivationReason);
+ void generalSettingsClicked();
+ void forwardingSettingsClicked();
+ void securitySettingsClicked();
+ void openTrafficMap();
+ void openRoutingStatus();
+ void openCertificationPage();
+ void displayPopup();
+ // void confirmQuit();
+ void showFibInputDialog();
+ // void terminateDaemonAndClose();
+ void addFibEntry();
+ // void daemonStatusUpdate();
+ void selectTableRow();
+ // void deleteFibEntry();
+ void changeHubDiscovery();
+ void changeLoginStart();
+ void copyFile();
+ // void runXmlProc(QNetworkReply *reply);
+ // void parseStatusXml();
+ // void parseFibXml();
+ void parseProcessLookup();
+};
+
+#endif // NCC_QT_TRAY_MENU_H
diff --git a/linux/traymenu.ui b/qt/traymenu.ui
similarity index 100%
rename from linux/traymenu.ui
rename to qt/traymenu.ui
diff --git a/qt/wscript b/qt/wscript
new file mode 100644
index 0000000..c1441e6
--- /dev/null
+++ b/qt/wscript
@@ -0,0 +1,46 @@
+# -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
+
+from waflib import Logs, Utils, Task, TaskGen
+
+top = '..'
+
+def configure(conf):
+ conf.load(['gnu_dirs', 'qt4'])
+
+ # conf.find_program('xsltproc', mandatory=True)
+ # conf.define('XSLTPROC', conf.env['XSLTPROC'])
+
+ conf.define('RESOURCES_DIR', Utils.subst_vars("${DATAROOTDIR}/nfd-control-center", conf.env))
+
+ if Utils.unversioned_sys_platform() == "darwin":
+ conf.define('OSX_BUILD', 1)
+
+def build(bld):
+ app = bld(
+ features=['qt4', 'cxxprogram', 'cxx'],
+ includes = ".. .",
+
+ use = "QTCORE QTGUI QTXML QTXMLPATTERNS QTDBUS",
+
+ defines = "WAF",
+ source = bld.path.ant_glob(['*.cpp', '**/*.ui', '**/*.qrc']),
+ )
+
+ if Utils.unversioned_sys_platform() != "darwin":
+ app.target = "../nfd-control-center",
+
+ bld(features = "subst",
+ source = 'nfd-control-center.desktop.in',
+ target = 'nfd-control-center.desktop',
+ BINARY = "nfd-control-center",
+ install_path = "${DATAROOTDIR}/nfd-control-center"
+ )
+
+ bld.install_files("${DATAROOTDIR}/nfd-control-center",
+ bld.path.ant_glob(['Resources/*']))
+ else:
+ app.target = "../NFD Control Center"
+ app.mac_app = True,
+ app.mac_plist = '../osx/Info.plist',
+ app.mac_resources = [i.path_from(bld.path)
+ for i in bld.path.ant_glob('../osx/Resources/**/*')],
diff --git a/waf-tools/sparkle.py b/waf-tools/sparkle.py
index 3d628aa..f186199 100644
--- a/waf-tools/sparkle.py
+++ b/waf-tools/sparkle.py
@@ -6,44 +6,44 @@
@conf
def check_sparkle_base (self, *k, **kw):
- self.check_cxx (framework_name="Sparkle", header_name=["Foundation/Foundation.h", "AppKit/AppKit.h"],
- uselib_store='SPARKLE', define_name='HAVE_SPARKLE',
- compile_filename='test.mm', use="FOUNDATION APPKIT",
- *k,
- **kw
- )
+ self.check_cxx(framework_name="Sparkle", header_name=["Foundation/Foundation.h", "AppKit/AppKit.h"],
+ uselib_store='SPARKLE', define_name='HAVE_SPARKLE',
+ compile_filename='test.mm', use="FOUNDATION APPKIT",
+ *k,
+ **kw
+ )
@conf
-def check_sparkle (self, *k, **kw):
+def check_sparkle(self, *k, **kw):
try:
- self.check_sparkle_base (*k, **kw)
+ self.check_sparkle_base(*k, **kw)
except:
try:
# Try local path
- # Logs.info ("Check local version of Sparkle framework")
- self.check_sparkle_base (cxxflags="-F%s/osx/Frameworks/" % self.path.abspath(),
- linkflags="-F%s/osx/Frameworks/" % self.path.abspath())
+ # Logs.info("Check local version of Sparkle framework")
+ self.check_sparkle_base(cxxflags="-F%s/Frameworks/" % self.path.abspath(),
+ linkflags="-F%s/Frameworks/" % self.path.abspath())
except:
import urllib, subprocess, os, shutil
if not os.path.exists('osx/Frameworks/Sparkle.framework'):
# Download to local path and retry
- Logs.info ("Sparkle framework not found, trying to download it to 'build/'")
+ Logs.info("Sparkle framework not found, trying to download it to 'build/'")
- urllib.urlretrieve ("http://sparkle.andymatuschak.org/files/Sparkle%201.5b6.zip", "build/Sparkle.zip")
+ urllib.urlretrieve("http://sparkle.andymatuschak.org/files/Sparkle%201.5b6.zip", "build/Sparkle.zip")
if os.path.exists('build/Sparkle.zip'):
- try:
- subprocess.check_call (['unzip', '-qq', 'build/Sparkle.zip', '-d', 'build/Sparkle'])
- os.remove ("build/Sparkle.zip")
+ # try:
+ subprocess.check_call(['unzip', '-qq', 'build/Sparkle.zip', '-d', 'build/Sparkle'])
+ os.remove("build/Sparkle.zip")
if not os.path.exists("osx/Frameworks"):
- os.mkdir ("osx/Frameworks")
- os.rename ("build/Sparkle/Sparkle.framework", "osx/Frameworks/Sparkle.framework")
+ os.mkdir("osx/Frameworks")
+ os.rename("build/Sparkle/Sparkle.framework", "osx/Frameworks/Sparkle.framework")
shutil.rmtree("build/Sparkle", ignore_errors=True)
- self.check_sparkle_base (cxxflags="-F%s/osx/Frameworks/" % self.path.abspath(),
- linkflags="-F%s/osx/Frameworks/" % self.path.abspath())
- except subprocess.CalledProcessError as e:
- self.fatal("Cannot find Sparkle framework. Auto download failed: '%s' returned %s" % (' '.join(e.cmd), e.returncode))
- except:
- self.fatal("Unknown Error happened when auto downloading Sparkle framework")
+ self.check_sparkle_base(cxxflags="-F%s/Frameworks/" % self.path.abspath(),
+ linkflags="-F%s/Frameworks/" % self.path.abspath())
+ # except subprocess.CalledProcessError as e:
+ # self.fatal("Cannot find Sparkle framework. Auto download failed: '%s' returned %s" %(' '.join(e.cmd), e.returncode))
+ # except:
+ # self.fatal("Unknown Error happened when auto downloading Sparkle framework")
def configure(conf):
- conf.check_sparkle ()
+ conf.check_sparkle()
diff --git a/waf-tools/xcode.py b/waf-tools/xcode.py
index b3b8789..b2b3fd8 100644
--- a/waf-tools/xcode.py
+++ b/waf-tools/xcode.py
@@ -150,7 +150,7 @@
def add(self, root, sources):
folders = {}
def folder(n):
- if n == root:
+ if not n.is_child_of(root):
return self
try:
return folders[n]
@@ -308,5 +308,3 @@
node.mkdir()
node = node.make_node('project.pbxproj')
p.write(open(node.abspath(), 'w'))
-
-
diff --git a/wscript b/wscript
index 7af03ca..66b998a 100644
--- a/wscript
+++ b/wscript
@@ -1,6 +1,6 @@
# -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
-VERSION='1.0'
-APPNAME='ndnx-control-center'
+VERSION='0.1'
+APPNAME='nfd-control-center'
from waflib import Logs, Utils, Task, TaskGen
@@ -8,136 +8,43 @@
opt.load('compiler_c compiler_cxx qt4 gnu_dirs')
opt.load('sparkle xcode', tooldir='waf-tools')
- grp = opt.add_option_group ('NDNx Control Center options')
- grp.add_option ('--ndnx', help='''Root path to NDNx installation (default: /usr/local/ndn)''',
- dest='ndnx_root', type=str, default='/usr/local/ndn')
+ grp = opt.add_option_group('NFD Control Center options')
+ grp.add_option('--with-nfd', dest='with_nfd', type=str, default='/usr/local',
+ help='''Root path to NFD installation (default: /usr/local)''')
if Utils.unversioned_sys_platform () == "darwin":
- grp.add_option ('--qt4', help='''Build QT4 app, instead of native one''',
- action='store_true', dest='build_qt', default=False)
+ grp.add_option('--with-qt', help='''Build QT4 app, instead of native one''',
+ action='store_true', dest='with_qt', default=False)
-
def configure(conf):
conf.load('compiler_c compiler_cxx')
- conf.start_msg('Checking for ndnd-tlv in %s' % conf.options.ndnx_root)
- if not conf.find_file('ndnd-tlv ndnd-tlv-status ndnd-tlv-start ndnd-tlv-stop', path_list='%s/bin' % conf.options.ndnx_root, mandatory=False):
- conf.fatal ('not found', 'RED')
+ conf.start_msg('Checking for NFD tools in %s' % conf.options.with_nfd)
+ if not conf.find_file(['nfd-start', 'nfd-stop'],
+ path_list='%s/bin' % conf.options.with_nfd, mandatory=False):
+ conf.fatal('not found', 'RED')
else:
- conf.end_msg ('ok')
+ conf.end_msg('ok')
- conf.define('NDNX_ROOT', conf.options.ndnx_root)
- conf.define('NDND_STATUS_COMMAND', '%s/bin/ndndsmoketest' % conf.options.ndnx_root)
- conf.define('NDND_FIB_COMMAND', '%s/bin/ndndc' % conf.options.ndnx_root)
- conf.define('NDND_AUTOCONFIG_COMMAND', '%s/bin/ndnd-autoconfig' % conf.options.ndnx_root)
-
- if Utils.unversioned_sys_platform () == "darwin" and not conf.options.build_qt:
- conf.define('NDND_START_COMMAND', '%s/bin/ndnd-tlv-start' % conf.options.ndnx_root)
- conf.define('NDND_STOP_COMMAND', '%s/bin/ndnd-tlv-stop' % conf.options.ndnx_root)
+ conf.check_cfg(package='libndn-cxx', args=['--cflags', '--libs'],
+ uselib_store='NDN_CXX', mandatory=True)
+ conf.define('NFD_ROOT', conf.options.with_nfd)
+ conf.define('NFD_START_COMMAND', '%s/bin/nfd-start' % conf.options.with_nfd)
+ conf.define('NFD_STOP_COMMAND', '%s/bin/nfd-stop' % conf.options.with_nfd)
+ conf.define('NFD_AUTOCONFIG_COMMAND', '%s/bin/ndn-autoconfig' % conf.options.with_nfd)
+
+ if not conf.options.with_qt and Utils.unversioned_sys_platform() == "darwin":
+ # conf.fatal("Native implementation of NFD Control Center is not yet available")
conf.env.BUILD_OSX_NATIVE = 1
-
- conf.find_program('ibtool', var='IBTOOL', mandatory=False)
-
- conf.check_cxx(framework_name='Foundation', uselib_store='FOUNDATION', compile_filename='test.mm')
- conf.check_cxx(framework_name='AppKit', uselib_store='APPKIT', compile_filename='test.mm')
- conf.check_cxx(framework_name='Cocoa', uselib_store='COCOA', compile_filename='test.mm')
-
- conf.env.ARCH_OSX = 'x86_64'
- conf.env.CXXFLAGS_OSX += ['-fobjc-arc', '-mmacosx-version-min=10.7']
- conf.env.LINKFLAGS_OSX += ['-mmacosx-version-min=10.7']
- conf.env.MACOSX_DEPLOYMENT_TARGET = '10.7'
-
- conf.load('sparkle')
+ conf.recurse('osx')
else:
- conf.load('qt4')
- conf.load('gnu_dirs')
- conf.find_program('xsltproc', mandatory=True)
- conf.define('XSLTPROC', conf.env['XSLTPROC'])
+ conf.recurse('qt')
- conf.define('RESOURCES_DIR', Utils.subst_vars("${DATAROOTDIR}/ndnx-control-center", conf.env))
-
- if Utils.unversioned_sys_platform () == "darwin":
- conf.define('OSX_BUILD', 1)
-
- conf.write_config_header('config.h')
+ conf.write_config_header('config.hpp')
-def build (bld):
+def build(bld):
if bld.env.BUILD_OSX_NATIVE:
- bld (
- target = "NDNx Control Center",
- features=['cxxprogram', 'cxx'],
- includes = ". osx",
- source = bld.path.ant_glob (['osx/**/*.mm', 'osx/MainMenu.xib']),
-
- mac_app = True,
- use = "OSX COCOA FOUNDATION APPKIT SPARKLE",
-
- mac_plist = 'osx/Info.plist',
- mac_resources = [i.path_from(bld.path) for i in bld.path.ant_glob ('osx/Resources/**/*')],
- mac_frameworks = "osx/Frameworks/Sparkle.framework",
- )
+ bld.recurse('osx')
else:
- bld (features = "subst",
- source = 'linux/ndnxcontrolcenter.desktop.in',
- target = 'linux/ndnxcontrolcenter.desktop',
- BINARY = "ndnx-control-center",
- install_path = "${DATAROOTDIR}/ndnx-control-center"
- )
- bld (features = "subst",
- source = 'linux/ndnx-control-center.desktop.in',
- target = 'linux/ndnx-control-center.desktop',
- BINARY = "ndnx-control-center",
- install_path = "${DATAROOTDIR}/applications"
- )
- bld.install_files("${DATAROOTDIR}/ndnx-control-center",
- bld.path.ant_glob(['linux/Resources/*']))
-
- bld (
- target = "ndnx-control-center",
- features=['qt4', 'cxxprogram', 'cxx'],
- includes = ". linux",
-
- use = "QTCORE QTGUI QTXML QTXMLPATTERNS QTDBUS",
-
- defines = "WAF",
- source = bld.path.ant_glob (['linux/**/*.cpp', 'linux/**/*.ui', 'linux/**/*.qrc']),
- )
-
-
-from waflib import TaskGen
-@TaskGen.extension('.mm')
-def m_hook(self, node):
- """Alias .mm files to be compiled the same as .cc files, gcc/clang will do the right thing."""
- return self.create_compiled_task('cxx', node)
-
-@TaskGen.extension('.m')
-def m_hook(self, node):
- """Alias .m files to be compiled the same as .c files, gcc/clang will do the right thing."""
- return self.create_compiled_task('c', node)
-
-
-def bundle_name_for_output(name):
- k = name.rfind('.')
- if k >= 0:
- name = name[:k] + '.app'
- else:
- name = name + '.app'
- return name
-
-@TaskGen.extension('.xib')
-def xib(self,node):
- out = node.change_ext ('.nib')
-
- name = self.path.get_bld ().find_or_declare (bundle_name_for_output(self.target))
- resources = name.find_or_declare(['Contents', 'Resources'])
- resources.mkdir()
- real_out = resources.make_node (out.name)
-
- self.create_task('xib', node, real_out)
- inst_to = getattr(self, 'install_path', '/Applications') + '/%s/Contents/Resources' % name
- self.bld.install_as (inst_to + '/%s' % real_out.name, real_out)
-
-class xib(Task.Task):
- color='PINK'
- run_str = '${IBTOOL} --errors --warnings --notices --output-format human-readable-text --compile ${TGT} ${SRC}'
+ bld.recurse('qt')