Compare commits

...
324 Commits
Author SHA1 Message Date
SunnyQjm 58b423fe00 feta(mgmt): Support set bandwith while create face by nfdc 2023-12-15 14:56:35 +00:00
SunnyQjm e72ce81d2b feat: Add qsccp tags 2023-12-03 19:02:32 +08:00
Eric Newberry bdfb53aa09 Prepare release 0.7.1
refs #5129

Change-Id: I3c86a1fb10e542f825c92bd0d935a2814fea1f04
2020-10-08 16:19:10 -07:00
Davide Pesavento 287a7faad9 tlv: introduce NullSignature signature type
Refs: #4900
Change-Id: Ib5ab76e1e7a4b0cbec09b945859fb30e9322dd6b
2020-10-01 22:46:43 -04:00
Davide Pesavento fa33f8d532 docs: refresh and improve the "named data" sphinx theme
Change-Id: I6c04bb94e33191a2b0d32e0d7bc61ab44af9d84d
2020-09-28 13:37:43 -07:00
Eric Newberry 1caa634dca security: add validator for signed Interests
refs #4804

Change-Id: Ie6b64e9758591b54639c67e565abb3fdf40fb652
2020-09-23 20:57:55 -07:00
Eric Newberry e36aae1eb8 security: fix extraction of signed portion during Data signature verification
refs #4583

Change-Id: Ia0fc93a6e2408bb5f0de16fd76fcb6d9f06a0398
2020-09-03 12:18:06 -07:00
Jeremy Clark 670a52f2a3 security: add certificate bundle decoder
Refs: #5004
Change-Id: I0f035caf8f6975ba2322a7f6629312d3dcab910d
2020-08-29 21:48:55 -04:00
Davide Pesavento 97ee811129 util: backport scope_exit & co. from the Library Fundamentals TS v3
Implementation taken from scope-lite by Martin Moene,
commit 197cd4240069b2b8c393ad0d9eabdee601b606b4

Change-Id: I872b6821504b3270ebdc4c48b7255731fb2efc57
2020-08-27 16:20:07 -04:00
Davide Pesavento 599623c303 ci: disable frames in lcov HTML coverage report
Change-Id: I0c24a412ca33be034fb27b7055a868112bede462
2020-08-07 21:00:45 -04:00
Davide Pesavento 483087f56d util: fix time::toIsoString with Boost 1.73.0
Change-Id: Id8d65db9020c3efefab0453c83e39e5e2771ce3a
2020-08-04 22:38:05 -04:00
Davide Pesavento 81bd696ed9 data: do not encode a Content element if not set
Add Data::hasContent() and Data::unsetContent().
Change the behavior of Interest::setApplicationParameters(Block{}) for
consistency with the corresponding getter and with Data::setContent().

Change-Id: I4cc9058912510db0dfe3da614adee727db149415
2020-07-27 10:50:54 -07:00
Eric Newberry 17d7c47ca9 security: support new signed Interest format in Validator
refs #4804

Change-Id: I0391709dc1486c8156c03cf8e9d94e6cfbe30303
2020-07-22 20:56:05 -07:00
Davide Pesavento 933a567c8a docs: fix syntax highlighting of code blocks
And various other cleanups

Change-Id: If945f5407036e73db980cafd2185359a488a0ff1
2020-07-10 17:54:12 -04:00
Davide Pesavento f2c4c53208 ci: add Xcode 11.6 and 12 to Travis CI build matrix
Change-Id: Ied88268107c94523ea651fae101274083d12f8fd
2020-07-01 14:44:53 -04:00
Eric Newberry 6b2cb79748 docs: deprecate signed Interest v0.2 specification
refs #4804

Change-Id: Ie7258b1ecce8ab88e6f902f268554a4be4f7bdd2
2020-06-30 23:15:46 -07:00
Eric Newberry b74bbdab84 security: sign and verify new signed Interest format
refs #4804

Change-Id: Ib819edb977fa06c670b04185a0d730203c7d7fdb
2020-06-22 17:22:27 -07:00
Eric Newberry 6d024bad65 security: add vectored API for verify and sign
Add vectored input for BufferSource transform

refs #4804

Change-Id: I4949afe5ddb5a49ce6a956da6bc7931cf3719021
2020-06-17 21:04:37 -07:00
Alexander Afanasyev 8afba42296 security: Support name options in the KeyLocator when using ValidationPolicySimpleHierarchy
Change-Id: I828e65a964d4d410e314f7bfc024ee749ac9757b
Refs: #5115
2020-06-17 10:36:48 -07:00
Davide Pesavento 2ca5e79633 security: fix inverted logic in CertificateBundleFetcher
Fixes regression introduced in ebfe4a207f

Change-Id: I9187a4f033be2705d5ad17c4dc221eaa28855192
2020-06-16 22:52:23 -04:00
Davide Pesavento 905d40fad9 data: avoid unnecessarily invalidating cached wire encoding
Also, improve unit testing of Interest and Data classes and
cleanup some doxygen comments.

Change-Id: Ia7ef0af88fc84976ae72f9b99a281300717ced3e
2020-06-13 00:00:33 -04:00
Alexander Afanasyev 355fd789c8 security: Correct behavior of PibImpl::setDefaultIdentity
The high level logic of Pib class ensures that an identity exists (i.e.,
creates when missing).  With this correction, specific realizations
of the low-level logic (PibSqlite and PibMemory) simply throw an error
if the caller attempts to set a non-existing identity as default.

Change-Id: I9d07ca8db4817b7938c04b05341444f1150948f8
Refs: #4136
2020-06-11 12:54:14 -04:00
Alexander Afanasyev 75c3af824a util: Introduce NDN_LOG_NOFLUSH env variable to disable auto-flushing logs
Change-Id: Id1699d044e318aac315a545e913d0fc80306939b
Refs: #3668
2020-06-10 17:05:43 -04:00
Davide Pesavento 46cdf909a5 Remove some long-deprecated functions and enums
Change-Id: Iae88534ce7d58a35217dfdb7d97b011b7905be19
2020-06-09 01:17:33 -04:00
Davide Pesavento 9d1089aa29 util: update bundled copies of {any,optional,variant}-lite
any-lite commit 56cdca9c94af84c6e643a05c9105cb1dc38c5d8c
optional-lite commit 5e8a82ac029aebfd2f5708f183a00eda2be132cc
variant-lite commit 1f79b88132687b0ab1efdcf6e4120724e813602b

Change-Id: I7149abedade21f91e673770169ab7cd6062f02c7
2020-06-09 01:16:58 -04:00
Eric Newberry 6e262f0f1e interest: add signature fields
refs #4804

Change-Id: I4c8ecf65a3616833020d8edf8ba3d0c2d8427e87
2020-06-08 18:28:13 -07:00
Alexander Afanasyev 09236c2b8d security: Rename security/v2/* to security/*
Security v1-v2 transition has been completed for a while and path
separation is no longer needed. However, this commit preserves
`ndn::security::v2` namespace, but makes it inline.

Some commonly used v2 headers are preserved, but are deprecated and
should be avoided in the dependent software.

Change-Id: I26056cb3d34bcdc0a16e06dea8c1a78c03da2d40
2020-06-06 16:15:38 -04:00
Alexander Afanasyev f601e1988b security: Add check for success of TPM signing
Change-Id: I5c0fc958f4d359354391a30c62791e877052b97e
Refs: #4585, #5086
2020-06-03 12:47:36 -04:00
Alexander Afanasyev ab9d7ed25a security: Create PIB implementation as shared_ptr
While existing code is valid, it caused strange crashes on Android/ARM
platform.

Change-Id: I29c4879c65b3c844abb2d75f267c44a0b959a6f7
2020-05-30 18:34:19 -04:00
Alexander Afanasyev 3de8aac22d Rename VERSION to VERSION.info to avoid conflicts with modern STL
On case-insensitive file systems (e.g., macOS), inclusion of the new
standard <version> header resulted in unexpected inclusion of VERSION
file.

Change-Id: Ie858b8966496d23f38f722d8115be988e6b4d048
2020-05-30 18:14:45 -04:00
Eric Newberry f165bb4e77 signature-info: add signed Interest elements
refs #4804

Change-Id: Ice910b7740212cf116ddac24e12634877f75c71e
2020-05-29 00:21:48 -07:00
Eric Newberry 78ffc635cc security: clean up KeyChain and SigningInfo APIs
refs #4804

Change-Id: I55ad2b61f05aec8c75d5f6bafc4eea8e1e1100e9
2020-05-24 15:06:12 -07:00
Davide Pesavento 14c56cd8bd data: add shortcuts to access SignatureType and KeyLocator
Also, modernize the API of SignatureInfo and deprecate
unsetKeyLocator() and unsetValidityPeriod()

Change-Id: I8b775a4deb185784a3dcc8bd96c8f5f0c2915854
2020-05-24 13:16:25 -04:00
Junxiao Shi bc2e78e074 tools: export non-default key/cert in ndnsec export
refs #5043

Change-Id: Ida6e3c041b850a132160660a58d1f219defedf22
2020-05-20 15:01:08 -06:00
Eric Newberry a3c8bd1772 signature: deprecate Signature in favor of SignatureInfo
The Signature in Data packets and Certificates
has been deprecated in favor of separate objects
representing the Signature info and value.

Also deprecate type-specific Signature helpers.

refs #4804

Change-Id: Iab5b5c618e75cc11d31801d86a89a550a6add7a0
2020-05-17 17:30:40 -07:00
jrclark2 40ebaad603 util: add "in order" mode to SegmentFetcher
This commit adds an option for the fetcher to emit a signal when a segment
has arrived in order. Out-of-order segments are maintained internally by
the fetcher and are deleted when the signal is emitted.

Change-Id: I84aec680774af3e3c07bb07c881eab8908b5c9c2
2020-05-09 23:30:32 -04:00
Eric Newberry 3ad8923060 docs: remove invalid option from ndnsec-cert-gen example
Change-Id: I2d51474c8293fd45e1998a4ea39d9ba7de7964cb
2020-05-01 12:16:14 -04:00
Davide Pesavento 25d4f1c95e build: add PCHs for ndnsec and unit tests, fine-tune the existing ones
A full debug+tests build now takes 10% less time with gcc-9 and 21% less
with clang-10. Release builds (without tests) are only marginally faster
with gcc and 7% faster with clang.

Change-Id: I494778fe44cecc6209819a49f48a03f4d16c36af
2020-04-29 23:31:04 -04:00
Davide Pesavento 71c622bb68 build: require clang >= 4.0, Xcode >= 9.0
Also, recommend using gcc 7.4.0 or later, and silence
an ABI-related diagnostic message from gcc on armv7

Refs: #5087, #5106
Change-Id: I4d9841bea9df19cbb9ba3b0865949b1d66e6ec3e
2020-04-27 20:02:56 -04:00
Davide Pesavento 394977c2f2 tests: rename integrated -> integration
And move benchmarks to their own subdir

Change-Id: I23460e1135b47d505eacf0571ced1cbf810b7680
2020-04-26 00:29:04 -04:00
Junxiao Shi fbb6990abc security: encode EC public key with named curve
refs #5037

Change-Id: I5d77782e347579fe6dffb188a92178f592bcd492
2020-04-24 08:39:18 +00:00
Davide Pesavento 702467b816 tools: in ndnsec-key-gen, change default key type to ECDSA
Change-Id: Ib80da42d2969bb6288ee7949e6588c260476ef39
2020-04-22 21:41:23 -04:00
Zhiyi Zhang 4c68b6e62c tools: fix a bug in ndnsec-key-gen when --keyid is specified
Refs: #5057
Change-Id: Iaa29b7670d9cb85373d87cae0f0be377e7e65a1d
2020-04-22 21:40:03 -04:00
Davide Pesavento 78338c5ee8 build: recommend boost >= 1.65.1
With this commit, Ubuntu 16.04 is no longer officially supported
and may require manual installation of a newer version of Boost.

Refs: #5087
Change-Id: I17197f72ee8f7cd4d0954658fe57c324076f1311
2020-04-22 17:09:24 -04:00
Eric Newberry 9603325ba6 build: link against libatomic if necessary
refs #5100

Change-Id: Ida51c0830d3f0ce5ea949745b879a65b3e446111
2020-04-10 15:37:55 -07:00
Davide Pesavento ab7300b747 ci+docs: minor cleanups
Change-Id: I280fd84d89061e34ad4e2aaa00ce63ad21b03565
2020-04-09 21:48:06 -04:00
Eric Newberry 52a803cb9d transport: use /run/nfd.sock on Linux
refs #5039

Change-Id: Ia81115676427db1ebdf4d72d9aadf2e34e2f0ae6
2020-04-07 18:10:04 -07:00
Davide Pesavento 2349e28c6d build: add CentOS 8 support; drop CentOS 7
Refs: #5040, #5087
Change-Id: I6dcc5e9ee6b4839a6b3f15f1ad6dabf140301ae4
2020-03-26 17:56:05 -04:00
Davide Pesavento d776a93c9c build: switch to python3
Refs: #5095
Change-Id: Iedc107d41d4832682071986678b015980354786d
2020-03-23 22:55:23 -04:00
Eric Newberry ce9c1952ff mgmt: add MTU to FaceUpdateCommand
refs #5056

Change-Id: I53d64c869b45d3d582eefd50b8161d90aaf90705
2020-03-12 13:47:33 -07:00
Davide Pesavento 53533947d1 interest: refactor nonce handling
Nonce is a sequence of 4 bytes, not a 32-bit unsigned integer.
This also fixes various endianness bugs in unit tests.

Refs: #3294
Change-Id: I057b7b771fecb0bc997b0b11a03e6660c9b7a826
2020-03-09 01:50:37 -04:00
Davide Pesavento 97242f78e9 ci: update Travis configuration
* Add testing on arm64, ppc64le, and s390x with select compiler versions
 * Allow disabling the headers check by setting DISABLE_HEADERS_CHECK
 * Drop all versions of gcc < 7 and clang < 5
 * Add clang 11 (development branch)
 * Reenable ASan on Linux with gcc 9 and clang 7, the upstream
   bugs have been fixed; ASan on clang 8 remains disabled
 * Drop Xcode 9.2 (macOS 10.12 is no longer supported)
 * Upgrade Xcode 11 to 11.3
 * Remove USE_OPENSSL_1_1 and always build with openssl 1.1.1,
   since that's the only version available on Homebrew now
 * Workaround issue with missing /usr/local/opt/openssl on macOS
 * Various cleanups

Change-Id: I90e7d61d176b60c1e6b90d2374a7a51dd1deabb3
2020-02-29 20:56:32 -05:00
Davide Pesavento bc17d950e0 name: provide more fine-grained choices for UriFormat
Refs: #4777
Change-Id: I967a3b522cbe0719dfc95123bb75517518c74c72
2020-02-15 20:10:52 -05:00
Davide Pesavento d247d49469 face: remove deprecated PendingInterestId, InterestFilterId, RegisteredPrefixId
Plus some refactoring in Face::Impl

Refs: #4885
Change-Id: I5c46aaef35eb618d6f4934d4629c473c7fdde456
2020-02-13 11:55:13 -05:00
Eric Newberry 8d6d10ae53 docs: restructure and update AUTHORS.md
refs #5078

Change-Id: Iac341c29560b183066f7d1892359d262787655bd
2020-02-05 15:35:53 -08:00
Davide Pesavento 9c8f00e3fb util: delete unused field in SegmentFetcher
Change-Id: I341278fdb620dd531980050eb03b372f4dbd0147
2020-01-20 20:04:29 -05:00
Davide Pesavento 3b9a2c8b74 build: upgrade waf to version 2.0.19
Change-Id: Ifd57ed4e4a3039906a36f3a14f6e71e45167e44e
2020-01-13 19:25:26 -05:00
Alexander Afanasyev cf8ffd495a Prepare release 0.7.0
Change-Id: Id6bba5f9b83c3f317f5ee81b170bc5ce50806a29
Refs: #5045
2020-01-13 13:22:16 -05:00
Junxiao Shi a39c0b5c48 name: select canonical vs alternate URI representation
refs #4777

Change-Id: Ic644593228bd155de9dcd7005e1b9dc5303a6e66
2019-12-31 15:13:15 -07:00
Davide Pesavento 21a4ea5ad7 tests: avoid deprecated boost headers
Change-Id: I05aa8d5fd22843415db09478f7b53f1810b38db3
2019-12-22 17:17:15 -05:00
Davide Pesavento 813ae5831b encoding: use boost::endian::endian_load() if available
Refs: #4612
Change-Id: I034f246848c5ae2c8e0ff02f7ec52d26ef8a73e0
2019-12-16 20:34:04 -05:00
Davide Pesavento 7c67ab5938 security: remove deprecated HmacFilter
Change-Id: I27e37724efe83e161ce5b012d83f8f6165a9c7d0
2019-12-10 00:04:52 -05:00
Davide Pesavento 39cb402377 util: partial support for abstract types in NDN_LOG_MEMBER_* macros
Change-Id: I6b2a0e8fb86cb83040d24e3d4d5ba8a872ca031c
2019-12-09 23:55:19 -05:00
Davide Pesavento 39570d9313 tests: fix Interest name in face integration test
Refs: #4567
Change-Id: I6886c93695c563dbcba2feb0706e6459d0176154
2019-12-09 23:52:46 -05:00
Davide Pesavento 009062db2e name: alternative URI syntax for component types used in naming conventions
Refs: #4777
Change-Id: I4647fee54dffe104ca3cc31d67b0ad44fcf0de76
2019-11-20 20:10:15 -05:00
Davide Pesavento a421c80b10 face+transport: minor code cleanup
Change-Id: Ibe7d4b7fafdc4848ae9b6ae1e0db7e8d79ea1015
2019-11-16 11:42:43 -05:00
Davide Pesavento 0a6456cbe7 security: don't throw when loading an empty validation policy
Refs: #5049
Change-Id: I44feff5f4c83995e7d9f848c3c0cd71825920606
2019-11-14 13:04:24 -05:00
Davide Pesavento 4fb35d8a35 security: stop installing headers of concrete PIB, TPM, and KeyHandle implementations
Refs: #4782
Change-Id: I23bb75c485034140f29b10bd3a103f4aa480be4b
2019-11-01 11:07:48 -04:00
Davide Pesavento 12cef87c0c security: make BackEnd::Error an alias of Tpm::Error
Change-Id: Id38011529907e1dacdcb6107ab52ae273d302a1e
2019-11-01 11:07:06 -04:00
laqinfan bc997e5ddd security: add HMAC support in verification helpers
Add two more verifySignature() overloads with tpm and keyname as parameters

Change-Id: I53ef8f15c8764b17a26df3216c25f6b19f7c1719
2019-10-29 19:43:46 -05:00
Davide Pesavento 73940c93a6 security: avoid potential undefined behavior in const_cast
Change-Id: I24cee635d5a3da95bdfd2566f2e4232e4b9ac358
2019-10-17 14:58:01 -04:00
laqinfan 56a812d633 security: add HMAC support in KeyChain and SigningInfo
Refs: #3075
Change-Id: Ia1f557ca7c83f4df7f9f87bbe1b4fc214940dcd8
2019-10-17 14:56:44 -04:00
Davide Pesavento e6e125ea1b ci: output Travis folding markers for each build stage
Makes build logs vastly more readable on Travis web UI

Change-Id: I00ebf48f80d73d7aad00b890d9c16c2254cb609c
2019-10-09 01:00:14 -04:00
Davide Pesavento 5e494c0c3b security: accept HMAC keys shorter than the hash function's output length
Refs: #3075
Change-Id: Id4798a420f2f75cbc3269e3629c397b8fb729d21
2019-09-29 16:33:36 -04:00
Davide Pesavento cb672523a5 ci: upgrade Travis config to Ubuntu 18.04
Also in this commit:

 * Disable ASan with gcc 9 due to a compiler bug
 * Drop clang 3.8 (no easy way to install it on 18.04)
 * Add clang 10 (trunk)
 * Drop Xcode 8.3
 * Upgrade Xcode 10.2 to 10.3

Change-Id: I424d189e037d82d1230a12e72bea479f42dd680c
2019-09-23 18:08:22 -04:00
Davide Pesavento 835f027df8 interest: don't force the generation of a nonce during decoding
Refs: #4685
Change-Id: If6402fba79ccb3e2434278e646b1b034597bec29
2019-09-22 15:52:15 -04:00
Davide Pesavento 28a5bf107b interest: minor cleanups
Refs: #4567
Change-Id: I4e2428cc7f64cc9fceaae5c8f928fe4fc52e4cc7
2019-09-22 15:51:57 -04:00
Davide Pesavento 75c56016a9 util: make overload() function public
Rename backports-ostream-joiner.hpp to ostream-joiner.hpp
and deprecate its inclusion from backports.hpp

Change-Id: I1df03506e92da97a98871a56787e346ae328323d
2019-09-22 15:51:10 -04:00
Davide Pesavento 2fdb274627 interest: update toUri() for packet format v0.3
Refs: #4709
Change-Id: Id8c6fee0e8d2ad4e9d267854cdf0f41bb46f453a
2019-08-29 00:23:17 -04:00
Davide Pesavento 0e0b389c80 interest: drop support for packet format v0.2
Interests are now always encoded into v0.3 format and decoding
from v0.2 format is no longer supported. Deprecated Exclude and
Selectors are completely removed.

Refs: #4567
Change-Id: I977a833253e63e28ac6eea85be0a7b449c76584a
2019-08-29 00:16:34 -04:00
Davide Pesavento ef654dd3ba Remove ill-defined equality operators (part 1)
This removes overloaded operator== and operator!= from those classes
for which it is unclear what semantics such operators should have,
and whose current definitions are unsound or confusing for the user.

Refs: #4569
Change-Id: Ic385ac1e376a9916e762b1a0f790e4caae7c955b
2019-08-27 00:25:05 -04:00
Davide Pesavento 140e9cbc62 util: backport C++17 [[nodiscard]] attribute
Change-Id: I6bdeeaed09a4a5d36647ec967aead47e4461e583
2019-08-27 00:22:12 -04:00
Davide Pesavento 869b11e5c5 util: backport std::to_underlying()
Change-Id: I239ceb6be20d56343917cfcd7e1049fc852c1ced
2019-08-22 17:57:54 -04:00
Davide Pesavento 4c5b7b88d6 util: split RttEstimator into two classes
Also remove afterMeasurement signal, effectively reverting
commit 4ad933a757

Refs: #4887
Change-Id: I6c9b1620250992e07bed0773ee8f043e8e1e1f04
2019-08-22 17:57:20 -04:00
Ju Pan 92dbb008fe Revert "mgmt: add EndpointId field to NextHopRecord class"
This reverts commit ccce0bc969.

Refs: #4973
Change-Id: I21b5fc5f405e8856d5615d966911c6372c3f1d3b
2019-08-14 00:09:09 -04:00
Davide Pesavento 6c6e3854be util: add io::loadBuffer and io::saveBuffer
Change-Id: Ifa9d3bc44bba5dd8e2bd5d419629763936f355d4
2019-08-08 21:55:31 -04:00
Davide Pesavento b3f78b5db8 Introduce NDN_CXX_UNREACHABLE macro
Change-Id: I5549c436cfb8fb30da94cbbdbc221c622fca24c2
2019-08-08 12:07:14 -04:00
Junxiao Shi 43eac58ed6 lp: introduce PIT token
PIT token is a hop-by-hop header field that identifies an
Interest-Data exchange. The downstream node can assign an
opaque token to an outgoing Interest, and the upstream node
is expected to return the same token on the Data or Nack in
reply to that Interest. This would allow the downstream node
to accelerate its processing, especially in PIT lookup.

This commit adds basic encoding and decoding support for
PIT token, as an NDNLPv2 header field as well as a Tag.

refs #4532

Change-Id: I633fc451393746ebe199f41e44e245361b058d5e
2019-08-01 12:14:46 -06:00
Davide Pesavento 5149350bb4 key-locator: reimplement using a sum type
Deprecate KeyLocator::Type enum. Improve test coverage.

Change-Id: I1bf13db9b174ea66c4e978eb20659af5f12b9633
2019-07-22 18:18:00 -04:00
Alexander Afanasyev 7b2f58c9df util: Generalize logger backend support
This commit introduces a public API change for changing log
destinations.

Refs: #3782
Change-Id: I329c60f510d9493af5959b34eea93b81e15fe698
2019-07-22 02:46:25 -07:00
Davide Pesavento fe407f2ddc ci: add Xcode 11 to Travis CI build matrix
Also reenable ASan on Linux with clang 9, it seems to be working now.

Change-Id: I65d3b6dc90303255f9cc16318d38aaa4d43efcfd
2019-07-16 23:03:08 -04:00
Davide Pesavento 65f697f5e8 ims: drop support for ChildSelector
Change-Id: I672d89884680cfb171e8314413bc57a08b0491aa
2019-07-14 17:36:17 -04:00
Davide Pesavento 2b0cc7bf01 interest: implement HopLimit encoding/decoding
Refs: #4806
Change-Id: I42ad15221575001d66747aa9f7eafcf3f00acf47
2019-07-14 16:50:04 -04:00
Davide Pesavento 720e25c294 detail: improve ScopedCancelHandle
This also removes deprecated implicit conversion operators
from 'FooHandle' types to 'const FooId*'

Change-Id: I5b412bf833bb106b8f5aa483dbe09b6c58736e19
2019-07-14 14:28:51 -04:00
Davide Pesavento adc9aa230c interest: add support for ParametersSha256DigestComponent
Add Name::set(), Name::appendParametersSha256Digest(),
Name::appendParametersSha256DigestPlaceholder(), Name::erase()

Refs: #4658
Change-Id: Ic688030504804158ef8627a5f751ebc8b2587611
2019-07-13 11:19:04 -04:00
Alexander Afanasyev 576b4ff50e util: Make use of attributes in logging facilities
Refs: #4969
Change-Id: Ib7e495629107d9ebe2105a7fe1f99d89ad92e244
2019-07-12 13:06:29 -04:00
Davide Pesavento ecfb391e20 Declare overloaded comparison operators as non-member functions
Change-Id: I4fd4638c29d01b39df69ad6d8cbc3a0dc9604db3
2019-07-04 18:43:00 -04:00
Davide Pesavento 700e12a0b8 util: import nonstd::get into namespace ndn, for use with variant
Change-Id: Ie2b608bf6f5d4d5a96c483243f390976bb6c8085
2019-07-04 18:42:40 -04:00
Junxiao Shi 9a04ddacb9 docs: write CertificateV2 and SafeBag syntax in ABNF
refs #4928

Change-Id: I80d8a37f609bfbccb5f73f7e1f442c1b35061123
2019-07-04 12:53:54 -07:00
laqinfan cf0baa2375 security: add signature verification support in TPM
Refs: #3075
Change-Id: Idb17ee0e3a071e133527b6e17d4ecc06d922a798
2019-07-02 11:42:45 -04:00
Zhiyi Zhang 8b0344d4bc examples: fix "CanBePrefix unset" warning and general cleanup
refs: #4581
Change-Id: Ia1955e1c1eb746221adc88bfde093d5eadbd88e5
2019-06-28 11:36:19 -04:00
Davide Pesavento 57a3276d44 util: use time::nanoseconds in RttEstimator
Refs: #4887
Change-Id: Ie6469732fec53cca4b274b36d7ec58eff7addc1b
2019-06-24 02:36:21 -04:00
Davide Pesavento c81637150c ci: add gcc-9 to Travis CI build matrix
Change-Id: I7b3a7306c92f355c7585ad49a7a2d9d9a402e2ea
2019-06-23 16:35:47 -04:00
Davide Pesavento 1bac111c3c security: make PrivateKey::getKeySize() work in all cases
Change-Id: I9c010d57220a27c5f2a248aca53e56ae6fe5a539
2019-06-19 20:54:54 -04:00
Ju Pan ccce0bc969 mgmt: add EndpointId field to NextHopRecord class
Refs: #4816
Change-Id: I1e0fb691ca520679f491502a62d827672ec53d8b
2019-06-14 17:27:20 -07:00
Ernest McCracken 3243c3dad3 util: Add a getter for the smoothed RTT value
Refs: #4892
Change-Id: Ic2efc6f80058cbdd0bdbe9a4047856d75b54d04e
2019-06-13 18:50:01 -04:00
laqinfan 48f97244b8 security: add PrivateKey::loadRaw() for HMAC keys
Refs: #3075
Change-Id: I535a0e1ec2a48fba0e1dccc4b77ea9900a61a464
2019-06-13 18:44:02 -04:00
Davide Pesavento 4ad933a757 util: add afterMeasurement signal to RttEstimator
Refs: #4887
Change-Id: Ie48871a346f2960a7894c45a9386c52f3e1d9af2
2019-06-06 14:03:42 -04:00
Davide Pesavento 77d9e815c5 security: remove unused KeyClass and AclType enums
Also remove v2::PublicKey alias of transform::PublicKey

Change-Id: I891ffca065613d37c5534b9729c1b6827d440f47
2019-06-03 22:05:54 -04:00
Laqin Fan 0fe72eacc6 security: add HMAC support to SignerFilter and VerifierFilter
Introduce HmacKeyParams
Add HMAC support to transform::PrivateKey
Deprecate HmacFilter

Refs: #3075
Change-Id: I16e24c1c4f278b08c7f51c91e9317b7820943536
2019-05-30 20:36:56 -04:00
Junxiao Shi 2ad2fbeb20 interest: drop Selectors from matching functions
matchesData and matchesInterest only consider Name, CanBePrefix,
and MustBeFresh. matchesName is deprecated.

refs #4913

Change-Id: I6f29a98f09f1b6f97e379f4c7d74d9b18da75d0e
2019-05-24 03:11:06 +00:00
Davide Pesavento 3510d299ba lp: add missing std::move to Nack constructor
Change-Id: I15a304caea4df2de1b804554e2cd60e74bd93c0d
2019-05-10 14:57:33 -04:00
Davide Pesavento e37ec7ded4 net: NetworkMonitor: set NETLINK_GET_STRICT_CHK on netlink socket
Change-Id: I1ce7750fa68e29dee20987e5cfd49e46e3a26a52
2019-05-02 20:02:45 -04:00
Davide Pesavento 530c10f523 net: use the correct netlink message payload to request an address dump
RTM_GETADDR wants an ifaddrmsg structure as payload, not ifinfomsg

Change-Id: I441d07f873668fac296085547458ef6ea077945b
2019-05-02 20:00:23 -04:00
Davide Pesavento 5223ea82f5 net: use generic::raw_protocol instead of posix::stream_descriptor for netlink
Netlink sockets are not stream-oriented

Change-Id: I8dfde18eba8403bce4a8ec6bffe1680233ec8dfc
2019-04-30 22:42:09 -04:00
Davide Pesavento c9650e4cb5 net: NetworkMonitor: use an enum to track the interface enumeration phase
Change-Id: Idf8e53025f9648f346c65bbf90007028a4f1b586
2019-04-30 17:57:26 -04:00
Davide Pesavento 2ec13ebc10 net: NetworkMonitor: improve handling of NLMSG_DONE
It can also include extended ACK TLVs after the payload, similar to
NLMSG_ERROR. Therefore, parse the attributes and log NLMSGERR_ATTR_MSG,
if present, which can be quite helpful for debugging.

Change-Id: Ic3bf95d76523a198fd4b57efe6d4ea74e512073f
2019-04-30 17:55:58 -04:00
Davide Pesavento fcdc873185 net: NetworkMonitor: set NETLINK_CAP_ACK on netlink socket
This allows the kernel to exclude the payload of the original
netlink message from a NLMSG_ERROR message. We use the sequence
number in nlmsghdr to keep track of replies, so we can safely
enable this (minor) optimization.

Change-Id: Ib02b36346fa20045ca4eb9f77c79688fd45c6525
2019-04-30 15:00:54 -04:00
Davide Pesavento f1bb38d3aa util: move Scheduler and related classes to ndn::scheduler
Remove deprecated header util/scheduler-scoped-event-id.hpp
Remove deprecated functions and type aliases

Refs: #4883
Change-Id: I83c6700c568db7fbbece98d9691ab3d75ff5d2f2
2019-04-29 18:48:02 -04:00
Alexander Afanasyev 0d748af32f Prepare release 0.6.6
Change-Id: I2896cf769547e7afbedcc4f00bf28b48e0729426
Refs: #4916
2019-04-27 15:00:06 -04:00
Davide Pesavento 0c31537e48 Fix compilation with Boost 1.70.0
Refs: #4923
Change-Id: Ic0cb78586cee1ad5e527f7d2a23fd2e1bdbd0bcb
2019-04-25 17:00:49 -04:00
Davide Pesavento 6b33040eae encoding: treat TLV-TYPE zero as invalid
* Use tlv::Invalid to indicate an invalid Block, instead of
   UINT32_MAX (which is a valid type), thus fixing bug #4726
 * Introduce Block::isValid as a replacement for Block::empty
   and soft-deprecate the latter
 * Improve test coverage of Block and tlv::readType

Refs: #4726, #4895
Change-Id: I1cd3336fcbfe83555f3111738da67041dfae64f3
2019-04-25 17:00:23 -04:00
Davide Pesavento 599ee3f242 ci: adapt to new repo layout for CentOS boost RPMs
Change-Id: I5fc9ed6f94887a4b6125e843474623d1a4ccac95
2019-04-20 16:32:49 -04:00
Davide Pesavento 78e3549c16 util: update bundled copies of {any,optional,variant}-lite
any-lite commit b210d89239c3ffa969bffe8731d287674901a7fb
optional-lite commit a08fda6c674ae4c9ff43dcad89f630da512c24d6
variant-lite commit 94e2844cae3bfe19ab3c0f3a9aaa13f69a43c026

Change-Id: I859eb3d2fca8a74899d887a14f4e1a4361b79a8e
2019-04-16 20:00:00 -04:00
Davide Pesavento b310efbdaa docs+ndnsec: improve description and parsing of command options, rewrite man pages
Replace custom redmine_issue extension with sphinx.ext.extlinks

Refs: #4907
Change-Id: Ib0cb94156ae4fc80cdcaf4c70d7c8d55c16fcbc3
2019-04-14 16:50:19 -04:00
Davide Pesavento fa995ac3d3 docs+tools: improve ndnsec help, error messages, and manual page
Exit with status code 2 on malformed command line

Refs: #3777
Change-Id: Id682a5d69c15c74cfa1903db38b5389936f5be58
2019-04-09 12:18:58 -04:00
Davide Pesavento 3891244ec3 interest: improve setApplicationParameters() behavior
Refs: #4658
Change-Id: Iecc476613d81b2958198a222717e9b5b522d72e2
2019-04-09 12:00:50 -04:00
Davide Pesavento 9c19a3900b interest: rename Parameters to ApplicationParameters
Refs: #4658
Change-Id: I7eee6366545e1832efa07d5503c52f35c3ca6ed0
2019-04-06 15:38:54 -04:00
Davide Pesavento 4bb06bcedf interest: improve the "CanBePrefix unset" warning
Refs: #4581
Change-Id: I4efd885ad4cd502e5fb1630239be08b8f2d39026
2019-04-06 13:59:10 -04:00
Davide Pesavento 46b04a5f84 docs: improve README.md
Change-Id: Iba7aea52bb67dd8ee788734e1141ab2459167090
2019-04-06 13:13:45 -04:00
Junxiao Shi e7b90e5575 face: rework list structures
refs #3919

Change-Id: Ib734923ef5f701d733d5b0f915183f10434ce30b
2019-03-27 13:29:33 -06:00
Davide Pesavento 5437aa2375 tests: fix compilation with Boost 1.69.0
Also fix flawed logic in the same test case

Refs: #4890
Change-Id: Id99e412a2316747e55539955b59d6f6a4c98be47
2019-03-25 23:33:03 -04:00
Alexander Afanasyev 1660d00046 security: Add option to disable infrastructure interest in CertificateFetcherDirectFetch
Refs: #4879
Change-Id: I4ee7f831fde1fe6e951857c279546f7b7433def0
2019-03-19 16:24:23 -04:00
Junxiao Shi a5f233e103 util: rename Scheduler::scheduleEvent to schedule
Deprecate Scheduler::scheduleEvent and Scheduler::cancelEvent

refs #4883

Change-Id: I2bb16922aff04300d92dfd276dd436958a96929a
2019-03-18 09:39:22 -06:00
Davide Pesavento fd6123173d util: add ndn::scheduler namespace alias
This is the new preferred way to refer to Scheduler and related
classes. The Scheduler class itself is also available as ndn::Scheduler
like before. ndn::util::Scheduler and ndn::EventId are deprecated.

Refs: #4883
Change-Id: I825c2a0911a959caa60d7d8a547ca7199c58f61e
2019-03-16 02:52:20 -04:00
Davide Pesavento 4fc9080417 ci: update Travis-CI configuration
* Drop clang 3.6 and 3.7
 * Add clang 9 (trunk)
 * Disable ASan on clang 7 and later due to a problem
   with the ubuntu binary packages from apt.llvm.org
 * Remove all OSX-10.11 configs (no longer supported)
 * Add Xcode 10.2 on macOS 10.14

Change-Id: Ie1baad933798e9c11332050c58a47393c1011615
2019-03-14 15:39:29 -04:00
Davide Pesavento fc27d3b659 Fix build with Xcode 10.2
Refs: #4860
Change-Id: I6a5ee5259185ac6311cc3ea75921a8d0ce522f1b
2019-03-09 15:49:26 -05:00
Davide Pesavento 77f1c7665e build: do not look for unneeded libraries
Change-Id: Ifcf45442b947bf23355e270f1f9bda298792d4a2
2019-02-19 15:06:16 -05:00
Junxiao Shi e209961817 name-component: encode/decode Convention rev2
Naming Conventions rev2 encode sequence numbers, version
numbers, segment numbers, byte offsets, and timestamps as
typed name components.
Markers as defined in Naming Conventions rev1 are still
supported.

The library by default recognizes both styles, and encodes as
markers. These defaults can be changed via
ndn::name::setConventionDecoding and
ndn::name::setConventionEncoding functions.

"segment offset" is renamed to "byte offset". Functions bearing
"SegmentOffset" in the name are deprecated in favor of their
"ByteOffset" counterparts.

refs #4777

Change-Id: I265d69af474ab27d274ee49619f5cae5fb2c429d
2019-02-15 14:46:27 +00:00
Davide Pesavento 923ba4415f Replace all uses of BOOST_THROW_EXCEPTION with NDN_THROW
Refs: #4834
Change-Id: I1f9a614c83954873888d13c7b2b17a4fbff81058
2019-02-14 13:25:48 -05:00
Davide Pesavento fccb2dc91c encoding+interest: change Parameters to use non-critical type 36
Refs: #4780
Change-Id: I2cde10da4586737bb5c687a8aa9589beff1a80e1
2019-02-11 20:13:07 -05:00
Junxiao Shi 4fdcb274a3 face: deprecate Id types in favor of Handles
This includes:
PendingInterestId => PendingInterestHandle
RegisteredPrefixId => RegisteredPrefixHandle
InterestFilterId => InterestFilterHandle

refs #4316, #3919

Change-Id: I3a2d2f813d36a2d6edbb8c460aaa6e2e380f41e3
2019-02-11 15:05:46 -07:00
Junxiao Shi da9761f8e6 face: don't use memory address as PendingInterestId
Using memory address as PendingInterestId may cause false
removal of PendingInterest record if the memory allocator places
a different Interest at the same position in the heap.

refs #2865

Change-Id: Icf4d11509ad5c2acd56f180a333a68aa96f31768
2019-02-11 15:05:33 -07:00
Davide Pesavento fd674016ab util: introduce NDN_THROW
Refs: #4834
Change-Id: I35ff77a1d4e96caa17523cbdbb6f169390975d1b
2019-02-10 19:32:18 -05:00
Alexander Afanasyev 8fdae8909d build: Propagate DEFINES of dependent libraries to libndn-cxx.pc
Refs: #3982
Change-Id: Id3c3bb219fe074c0e7427d34e0a0da4981952be3
2019-02-10 17:17:28 -05:00
Davide Pesavento d0fef21ce5 common: drop inclusion of unistd.h
Change-Id: I1d2a5038f1ecf568eb7ba5cbab28c04c7ca62199
2019-02-05 00:45:10 -05:00
Davide Pesavento 5c803b9b28 encoding: improve documentation of Block class
Also add missing test cases for two constructor overloads

Change-Id: Iab76867b12684481ff5fc2587a3ebc8f5d176e71
2019-02-04 18:58:39 -05:00
Davide Pesavento 459a653226 util: update bundled copies of {any,optional,variant}-lite
any-lite commit 27d4f7dbb853bd28d5324b984bb030d0c7c6eca6
optional-lite commit 6a96f5199c746ac862a2ae184a10f8800b86e20f
variant-lite commit 1051f91afd28fdfc05b2d2b8d1a0359090aabe3e

Change-Id: I8b644419c4e3c1668ae97666af11499db8c3d2b2
2019-02-04 18:58:09 -05:00
Alexander Afanasyev b72360faee Prepare release 0.6.5
Change-Id: Ifc28a3a32d572b2455353bf164427ca2d37aebf9
Refs: #4821
2019-02-04 13:30:04 -05:00
Junxiao Shi 80609d44c3 face: scoped pending Interest
refs #4316

Change-Id: I79f832ce599f09a4d5bbf8cd8c4656d677dd164c
2019-01-29 18:15:22 +00:00
Alexander Afanasyev 7c5bc1e218 build: Upgrade waf build system to version 2.0.14
Version 2.0.6 had some strange issues with Python 3.7.2 on macOS with
Homebrew.

Change-Id: I518659141477f0ca0deee8fbc4608408642bc619
2019-01-29 08:32:40 -05:00
Junxiao Shi 07115cc106 util: reimplement scheduler::EventId with CancelHandle
<ndn-cxx/util/scheduler-scoped-event-id.hpp> header is deprecated.
It has been combined into <ndn-cxx/util/scheduler.hpp>.

Implicit conversion from nullptr to EventId is also deprecated.

refs #4698

Change-Id: I0310d41ac9638cb5be02ae61b887538f562541b2
2019-01-23 19:00:59 +00:00
Alexander Afanasyev 4e0cc6cf21 security: Remove use of ChildSelector in CertificateBundleFetcher
This commit also removes (unused) references to ChildSelector in
CertificateCache and TrustAnchorContainer.

Change-Id: I556382e41442dae172c25cd2de60ccdc28da3876
Refs: #4665
2019-01-23 11:15:19 -05:00
Davide Pesavento 322e76e7ed Use Boost.Range to simplify some code
Change-Id: I8ea55e324205c3f13096be6037e82aaab302bb55
2019-01-18 17:22:08 -05:00
Chavoosh Ghasemi 6b99b6f185 Add MetadataObject class to encode/decode RDR-style metadata
Change-Id: I6688b630a4889614e7df5c1f91b91be370a350cd
Refs: #4707
2019-01-18 17:21:55 -05:00
Davide Pesavento ca48851110 tests: delete goodness-of-fit tests from Util/TestRandom
They're not implemented correctly and fail too frequently.

Change-Id: Ibb228ba3193cd4491b330e22f5d6d8502adf8d3c
2019-01-18 17:20:09 -05:00
Junxiao Shi c53df03ff3 lp: stop accepting NonNegativeInteger as sequence number
This commit also improves Lp/TestPacket/FieldAccess test case.

refs #4598

Change-Id: Iab480226da619a69bb5959c935c63f92d3bb3234
2019-01-14 23:33:25 +00:00
Junxiao Shi 60aaef0622 face: scoped Interest filter
refs #3919

Change-Id: I4e1aed63b2fabe463e9572b99bb3d97b278cabd6
2019-01-14 07:32:31 -08:00
Davide Pesavento 8db6152556 util: add random::getRandomNumberEngine() to the public API
Change-Id: I03d572e3c51a7256f53060e66c9eae0d1ab84c65
2019-01-13 18:08:33 -08:00
Junxiao Shi ec475a7da5 face: scoped prefix registration
refs #3919

Change-Id: I858bf38000014a295cf853635b9c2a4275267d32
2019-01-13 21:53:55 +00:00
Davide Pesavento c554551d96 Add git .mailmap
Change-Id: I949ca290b1a78fc7e2e7ec7659e1068f5348df0b
2019-01-09 17:44:07 -05:00
Davide Pesavento bfe3139ede util: seed the PRNG with more entropy
Change-Id: I0e54079bac039db0a10b2f443a3b02b85dd2bb68
2019-01-03 16:26:51 -05:00
Davide Pesavento 22f7bc3006 tests: don't throw if NetworkMonitor lacks CAP_ENUM
Gracefully handle this case by returning an empty list of interfaces

Change-Id: Ib07215c76dec60ec4bdc86358e1dbecd30a3ca62
Refs: #4796
2018-12-26 10:03:05 -08:00
Davide Pesavento 64ae55d781 build: ensure /usr/local/include is treated as system include path on FreeBSD
Also use the LLD linker by default on FreeBSD.

Change-Id: I42fc1b3688008e6fa40ee5f399501e54dba25a83
Refs: #4790
2018-12-26 10:03:05 -08:00
Davide Pesavento 534b841bc0 docs: refresh installation instructions and general cleanup
Change-Id: Ibfe945887e5cad979c1f9a78fd5a3062bb20a8b5
2018-12-26 10:03:05 -08:00
Ashlesh Gawande ebe156c92f util: fix SegmentFetcher undefined behavior caused by uncanceled pending interest
Change-Id: I4ca80ad00fc52024f35908b21d7c42bffc8a5396
Refs: #4770
2018-12-26 10:03:05 -08:00
Junxiao Shi 19b87de693 detail: move cf-*-osx.hpp to 'detail'
refs #4782

Change-Id: Ie00846ea0afad65ff0e10fb615163318832f127e
2018-12-18 13:24:36 -07:00
Junxiao Shi 70d76eb4da transport: move Impl templates into 'detail'
refs #4782

Change-Id: I011ed5b75430d4235eccdbd5e1b9270ed413cc31
2018-12-18 13:15:43 -07:00
Junxiao Shi 1d23ff9277 detail: move asio-fwd to 'detail'
refs #4782

Change-Id: I9e39e3776669a2b3f69d7a964c0caf6333d1d79c
2018-12-17 13:21:08 -07:00
Junxiao Shi 1e36ceb0ff detail: move packet-base|tag-host.hpp to 'detail'
refs #4782

Change-Id: I3e2e95a1286703bd1fea9c1a7abee9684b2fbd08
2018-12-17 13:20:26 -07:00
Junxiao Shi d1fc9a7104 detail: move common.hpp to 'detail'
common.hpp and config.hpp are implementation details that should be
installed to target system.

common-pch.hpp is moved to 'impl'.

This commit also adds README.md to 'detail' and 'impl'
directories to explain their semantics.

refs #4782

Change-Id: I4f3e607338b3bdccbaddaed735f6326adcc2fda0
2018-12-12 16:35:34 +00:00
Junxiao Shi 24c5a00073 impl: rename 'detail' to 'impl'
'impl' directory contains implementation-detail headers that are NOT
installed. 'detail' directory will be used for implementation-detail
headers that ARE installed.

refs #4782

Change-Id: I13428e032c93207753a6b856c693511c4fc3bbb8
2018-12-12 04:47:15 +00:00
Davide Pesavento 2c1d349bdb docs: display the full include path in doxygen
Change-Id: I15a670f1cd87c0760ba39fcc87129dc1a494c2d0
Refs: #4041
2018-12-08 17:35:24 -05:00
Davide Pesavento 7e78064871 Change #include style
Header files are now always included with their path from the
project's root directory rather than the path relative to
the includer.

Change-Id: If39b8510eef8da00baf5fe88337c45dbdf8c766e
Refs: #3084
2018-12-08 16:03:34 -05:00
Davide Pesavento cf8a3684c2 ci: install gcovr via apt
Change-Id: I017ec6e4281a0348eca0361643cb3af0167c420f
Refs: #4771
2018-11-24 20:33:52 -05:00
Junxiao Shi 946a51cc0e util: stop using ChildSelector in NotificationSubscriber
refs #4664

Change-Id: I9e6c39d49949f0b097c220eafbe4ce990549b54d
2018-11-24 00:25:57 +00:00
Davide Pesavento 74daf741cd Rename 'tests/unit-tests' directory to 'tests/unit'
Change-Id: I78ea29938259fac288781bed12fb2399ac7eba26
2018-11-23 18:27:50 -05:00
Davide Pesavento 1944281719 Rename 'src' directory to 'ndn-cxx'
Change-Id: I14394023680901a86977313ca87fb017333614dd
Refs: #3084
2018-11-23 18:27:19 -05:00
Ashlesh Gawande 3e3a989096 mgmt: Controller cleans up fetchers on destruction
refs: #4775

Change-Id: I795b1ee273d0cca6df23be6c87255fc6d33b3651
2018-11-23 12:26:27 -05:00
Ashlesh Gawande 1bbce6df87 ims: prevent memory pool size from becoming zero
refs: #4769

Change-Id: Id1c1dadf40db6f62bd684391066e7ad45ec8dcd1
2018-11-23 12:25:41 -05:00
Davide Pesavento 17b61b4101 util: backport C++17 std::any and std::variant
The backported implementations are taken from Martin Moene's any-lite
(commit a2ee2e1cc4a3fcfe42ab44c46a65467b76b58f25) and variant-lite
(commit ff251b02253ff28db49bb20a79200514d8267d87).

The bundled copy of optional-lite is updated to commit
9a370efe62e084729a171a407b017aa58dc954c1.

Change-Id: I4afe117e357c82d51002f96b083aed0ec5eeda35
2018-11-21 23:10:48 -05:00
Davide Pesavento 8dfd91367f data: remove deprecated {get,set}FinalBlockId()
Change-Id: Id2baaddae26d4afe0cb35b43f44f1eba9a311da6
2018-11-05 12:12:15 -08:00
Davide Pesavento 511712d863 ci: fix another issue with preinstalled homebrew packages on Travis
Change-Id: I7aa53d7ac0daadf8eb2b970ae0fe289899aa023d
2018-11-03 18:51:10 -04:00
Ju Pan dca56eacba mgmt: augment ForwarderStatus with counters for satisfied and unsatisfied Interests
refs: #4720

Change-Id: I9413aef59a9f4669beaaa214abd93c4bb40e622f
2018-10-28 15:33:51 -07:00
Ashlesh Gawande 679dbb006f util: add stop function to SegmentFetcher
refs: #4692

Change-Id: I8b7f0c52ac9dd22ed9a665daaa62ef130eac2e53
2018-10-28 15:33:18 -07:00
Tianxing Ma 241df42555 encoding: support floating point numbers in TLV-VALUE
refs #4612

Change-Id: I3ca5970b1559c6690826045a0955a26b93663f50
2018-10-26 11:54:06 -04:00
Junxiao Shi 8b753a2e54 interest+data: forbid unrecognized TLV before Name
Change-Id: Id052b02be0aa3e36064c40872cee37f9c8dd3a78
2018-10-24 01:51:40 +00:00
Alexander Afanasyev 7b1124674a security: Throw exception when loading on orphaned ValidationPolicyConfig
ValidationPolicyConfig must be assigned to a Validator instance prior to
loading and it is an API violation to load configuration otherwise.

Change-Id: Ib372cd3b6ab7c7ce1e37039f25b97e1d2f1511f9
Refs: #4758
2018-10-18 14:50:54 -04:00
Davide Pesavento f714d1b520 ci: workaround homebrew issues with python and numpy on Travis's macOS 10.12
Change-Id: I772e13c5395c1fd3467f8405baadd0bb4f795104
2018-10-13 22:50:27 -04:00
Davide Pesavento ee77ca017a security: use AES-256 for private key encryption in PKCS #8 export
Change-Id: Ibe8bb7270017bf9b5241044c983b4df359d73185
2018-10-13 22:49:29 -04:00
Ashlesh Gawande 3e39a4d6a3 security: use exponential backoff in CertificateFetcherFromNetwork
refs: #4718, #4712

Change-Id: I8def533528b82ea00096e9d87897acf31dff24a4
2018-10-13 22:47:34 -04:00
Davide Pesavento 13fffa38f5 security: in tpm::BackEndOsx, unwrap the key before importing it
We use our own openssl-based routines for the PKCS#8 decoding/decryption,
as they support a much wider range of algorithms than macOS's Keychain.

Change-Id: Ia841e7681a47563c696d054d46fe523f427c99cb
Refs: #4450
2018-10-02 23:57:36 -04:00
Ashlesh Gawande 279f366d3f util: remove deprecated SegmentFetcher::fetch
refs: #4464

Change-Id: I1733cf06c8ae30b4aef547e2d9324e8776c39903
2018-09-21 23:05:36 -04:00
Davide Pesavento 2cb33fa5ed net: remove deprecated ndn::ip::address{,V6}FromString
Change-Id: I79974cc06abda11f7e6bbbd307bbe1db1672522a
2018-09-21 22:24:12 -04:00
Alexander Afanasyev a3bf4319ed Prepare release 0.6.3
Change-Id: Ie4bc2812544224110eb371e4dd096fc1681ab1f0
Refs: #4727
2018-09-17 23:50:23 -04:00
Davide Pesavento d2c750b37a util: update bundled copy of optional-lite
This updates optional.hpp to upstream git commit
063af3ed2e830f3fcb77c635c6391e5d65c51fe5

Change-Id: Ie390b2818fa4dff8c600b777b77104b7f0c11f9d
2018-09-16 12:54:42 -04:00
Teng Liang e3ecad7bc7 lp: remove lp::PrefixAnnouncement in favor of ndn::PrefixAnnouncement
refs: #4280

Change-Id: I09847adaeb000ff4b305fb42dd2a1eb2572aff42
2018-09-12 16:59:25 -07:00
Md Ashiqur Rahman 8bd3b8a305 ci: add support for CentOS 7
refs: #4610

Change-Id: I458ee0c2bbe54722cf5874c8725b8126629a4d98
2018-09-10 21:58:13 -04:00
Davide Pesavento cdb5d8f646 ci: introduce helper to preserve select env variables under sudo
Change-Id: I0217b8fbb005a43dddaf0010aa85130411d20813
Refs: #4610
2018-09-09 19:21:54 -07:00
Davide Pesavento e80d1167d4 security: add support for SHA-3
Requires openssl >= 1.1.1-pre1

Change-Id: I8d91ca30425129694f3b0fc40daa891b58ded065
2018-09-08 19:23:09 -04:00
Davide Pesavento 648ae9ef8e security: forbid RSA keys shorter than 2048 bits
Change-Id: Ib4a90c32d8d6065093b01ab3d28e119a232ca638
2018-09-08 15:40:02 -04:00
Davide Pesavento 3c7969fa9d security: support 224-bit and 521-bit NIST elliptic curves
Change-Id: I28d2e5162e1e8fd7261828d435b059093b6989ea
2018-09-08 15:31:35 -04:00
Junxiao Shi 1748b1e817 prefix-ann: provide ==, !=, << operators
Also, ensure toData() adds correct ContentType.

refs #4650

Change-Id: I60956948766190cd713b58c85ba30b3701180b25
2018-09-06 04:13:42 +00:00
Davide Pesavento fbda933b7b security: improve error handling in tpm::BackEndOsx
Change-Id: I1899d9fa622e8379fc38dde914c1c8a9f6fcb77f
2018-09-02 21:29:28 -04:00
Davide Pesavento 4b8eab72f3 build: drop dependency on unused CoreServices framework
Change-Id: I91df33fafbcf275f7b41394112f8c002bc98af97
2018-09-02 12:38:25 -04:00
Davide Pesavento 5ee8ec032a security: code cleanup and doxygen improvements in tpm::BackEndOsx
Change-Id: I6d6d77ab315a10c280e7643d4cec5269ed10fe5e
2018-09-02 12:37:43 -04:00
Teng Liang 502b47956c encoding: replace the route origin selflearning with prefixann
refs: #4280

Change-Id: I9db6b92f681650c21e82251f17f03f4ae2834b24
2018-08-29 14:10:11 -07:00
Sepehr Abdous 4fc6db23b6 docs: Fix a typo
refs: #4232

Change-Id: Ibe4d07fb459ba5052a58cbe6c78cdaa8a2cd423d
2018-08-26 17:17:31 -07:00
Davide Pesavento 474c3b2f33 build: check for linux/genetlink.h
Change-Id: Id18fcc81a49e769a05c4416cdce03022a2179051
Refs: #4020
2018-08-25 16:31:17 -04:00
Junxiao Shi 8127d1ab65 mgmt: encode and decode prefix announcement object
refs #4650

Change-Id: Ie8de492aac1ea9fd51ddc6b50f239913989abe72
2018-08-24 15:29:21 -06:00
Davide Pesavento 755f8a89eb net: NetworkMonitor: gracefully handle backend initialization failure
Change-Id: I1a22fd53e9905b6e5892573d1473d1f4e8969522
Refs: #4668
2018-08-24 12:32:59 -07:00
Davide Pesavento 52bc4e918c build: disable -Wmissing-braces with clang < 6.0
Also remove some -Wno-error= flags that are no longer needed.

Change-Id: I0e0ad52c69fd42b815f5b20f45311d0c9b8cdef3
Refs: #4721
2018-08-24 12:32:41 -07:00
Junxiao Shi 2b322eb8c6 encoding: provide _block literal operator
_block literal operator is moved from tests and becomes public API.

refs #4722

Change-Id: I07cc040af3c4288104b66f11d91830dc9f28835a
2018-08-24 10:43:27 -06:00
Junxiao Shi 426d500681 encoding: update number assignments
This commit declares:

* TLV-TYPEs for typed name components in NDN naming conventions
* SignatureType number for HMAC
* ContentType numbers for Prefix Announcement and FLIC

This commit also:

* Improves stream insertion operator for SignatureTypeValue
* Adds stream insertion operator for ContentTypeValue
* Corrects several references to certificate format spec

refs #4577, #4649

Change-Id: Ibfd5cc1408cf892e38a2be93bf17e76f628f255d
2018-08-23 10:52:29 +00:00
Davide Pesavento 107749982a net: initial support for generic netlink (genl)
Change-Id: Iaea67d08c835b856d2928eb49003ad214de824ca
Refs: #4020
2018-08-20 19:20:30 -04:00
Davide Pesavento dc5bb96988 net: support multiple concurrent netlink requests
In preparation for generic netlink support

Change-Id: I3f648518800176015cf7435b4e61e6e73c83e796
Refs: #4020
2018-08-20 19:20:11 -04:00
Davide Pesavento a0b2a2c1d4 net: refactor netlink socket handling
In preparation for generic netlink support

Change-Id: I69d93b69c08d4c3f7fd0dabbf3e51dbd49f9ef06
Refs: #4020
2018-08-20 19:19:28 -04:00
Junxiao Shi 4053bd525f name: recognize ParametersSha256DigestComponent
refs #4658, #4570

Change-Id: I8001f6aa7a406e9e8eb10fc365bd84bc711cda07
2018-08-16 13:39:25 -06:00
Junxiao Shi d2e6063788 name-component: recognize plain URI syntax
refs #4690

Change-Id: I6e88d88cc62a025edc30b545f1044a225c20213f
2018-08-10 10:48:44 -06:00
Arthi Padmanabhan b38664e317 interest: support Parameters element
Add getter/setters for Parameters, encode as packet format v0.3 if
Parameters are present, have decode03 save Parameters element, and
add encode/decode unit tests for v0.3

Refs: #4658

Change-Id: I70c1072f0003a1b757b8dc484a93ef91bac74496
2018-07-28 09:36:36 -07:00
Junxiao Shi 68b5385cb0 docs: update code-style rule 2.24
This commit also updates existing code to use the new format.

refs #4681

Change-Id: I88e62a34fc55a69cd01d74e80a7000c6cf4d7c2d
2018-07-25 13:56:38 -06:00
Davide Pesavento 3b101d0682 Use std::move in more places
Plus various code simplifications

Change-Id: I19805e4a635e4c74afaff68f9d8968475217ec6e
2018-07-24 15:17:34 -07:00
Junxiao Shi cf0aff8a03 name: accommodate typed components in getSuccessor
refs #4570

Change-Id: I8dae1c983663f1d04fbb2e2b82d9fe1e9b4aabda
2018-07-23 06:42:13 -06:00
Junxiao Shi b55e5d39e2 interest: declare default CanBePrefix setting
refs #4581

Change-Id: I82de3b13c3010242fa7999a2564d4a5442dfd14b
2018-07-18 13:32:00 -06:00
Junxiao Shi 54d74c25a0 security: correct ValidationPolicy docs
refs #4390

Change-Id: I416f8773c9d52e0e7f61edb30d0476f9542fbf2b
2018-07-18 13:30:08 -06:00
Junxiao Shi 643b7f5ddf mgmt: use platform-independent counter type
refs #4229

Change-Id: I147205cceeb84dc7c36be9614f15a9e9a1c880f9
2018-07-18 13:29:42 -06:00
Junxiao Shi 5c1c444c6c security: Improve reliability of TPM BackEnd RandomKeyId test case
refs #4092

Change-Id: I58c6f3efbbbf31a826a7c41ede2494f0fbe313f1
2018-07-18 12:29:06 -07:00
Davide Pesavento 3a3e188d0e encoding+util: ensure move constructors are properly declared
This also fixes a race condition in scheduler::EventId::operator bool()

Change-Id: I468f0c46039a3d1a38c69c419ae45b4445d8205a
Refs: #3414
2018-07-17 18:01:06 -04:00
Davide Pesavento bc76da1fa4 util: update optional-lite to version 3.0.0
Change-Id: Icdc0117234404465a3facb802795a66f27467065
2018-07-17 17:55:54 -04:00
Davide Pesavento 570b20dd9d encoding+lp: declare constexpr and noexcept where possible
Change-Id: Icf708af0b77d62d7d8e75527aaf51c7178e47125
2018-07-15 22:00:21 -04:00
Davide Pesavento 14883ad4c8 encoding: use Boost.Endian for endianness conversions
Change-Id: I1ecaa4c4efa7cc50486b1e8403f049a9ee33156f
2018-07-15 22:00:00 -04:00
Davide Pesavento 2aec97a1d0 net: filter netlink messages based on sender pid and destination group
Change-Id: Ib3f580df63974f7d4e2f009d1f4f9d87662d0832
2018-07-15 14:48:49 -04:00
Davide Pesavento 50b9226465 net: refactor netlink message parsing, add extack support
Change-Id: Iaa132d8cb1aece6cfc608cc1c3b4478982ac706e
2018-07-15 14:48:35 -04:00
Junxiao Shi 4c45fd8906 ims: correct inaccurate comment
refs #4657

Change-Id: I73cf070ac97be4b2beec094b2a8f8a05894c408b
2018-07-13 13:53:24 -04:00
Eric Newberry 2b765f8ae7 util: eliminate selector usage in SegmentFetcher
refs #4555

Change-Id: I61c28a916ca92d30538bfc7a917f0c44c3854722
2018-06-25 21:22:24 -07:00
Eric Newberry 33063399fc docs: unregister prefixes instead of calling Face::shutdown
refs #4636

Change-Id: I15944bcb544bdbf0c253fe390c4ff459735d64a6
2018-06-24 13:20:50 -07:00
Eric Newberry e345baa02a util: augment SegmentFetcher with congestion control
refs #4364

Change-Id: Ibfebc1f173382d1faf88e0d3d707b8ab2dae5e43
2018-06-24 13:13:41 -07:00
Eric Newberry 71a2f03d72 mgmt: fix compilation error on Xcode 8 and earlier
refs #4639

Change-Id: I3c2af9e60f3a9c0c959bd6a52d65c308c234efac
2018-06-19 10:06:34 -07:00
Davide Pesavento ca660f116a build: require clang >= 3.6
3.5 fails with "error: debug information for auto is not yet supported"

Change-Id: I77ac4a064959b26796a4bf3f1dea7c3c08ea60a3
2018-06-18 08:37:00 -07:00
Alexander Afanasyev 31fd46714e security: Correctly handle Sha256-signed Command Interests
Change-Id: Ibcda11627a4be0498dfd894df8b976cb65da308a
Refs: #4635
2018-06-18 11:29:06 -04:00
Alexander Afanasyev 57d02b65ef security: Fix bug preventing customization of KeyChain's TPM on macOS
Implementation incorrectly assumed that default PIB and TPM locators are
in canonical form, potentially leading to an wrong decision to reset
contents of PIB every time KeyChain is initialized.

Change-Id: I8b30f3aa2ac74e859e9225cf03b2b43af27d7d76
Refs: #4297
2018-06-17 17:04:03 -04:00
Davide Pesavento db4da5e4fb Improve and simplify code with modern C++ features
Change-Id: I28d84df3087492ab2ecbeb91169a2cde12c9e31e
2018-06-17 09:29:34 -07:00
Alexander Afanasyev 634a62bb74 tools: Allow specifying passphrase for ndnsec import/export in command line
Change-Id: Ic389249e017df27b0246cdd1fcd3a1431607246b
Refs: #4633
2018-06-15 18:56:47 -04:00
Eric Newberry 3c9bc042f3 mgmt: add Mtu to faces/create and FaceStatus
refs #4005

Change-Id: I26c02aa088dc59aecd331cd579036177fef0f64c
2018-06-14 16:15:57 -07:00
Davide Pesavento 90db7eeafc net+util: remove dependency on Boost.Regex
Use std::regex instead.

Change-Id: I6c53edf177b7861d47a1f256aa975e4100e00d45
2018-06-11 20:28:13 -04:00
Eric Newberry 436e46f73e docs: allow use of "Num" and "No" in entity number variable names
refs #4621

Change-Id: Ibd85f965561d85beef5b4fbb6e05efd9b2657296
2018-06-10 21:45:57 -07:00
Davide Pesavento 59e266ad15 net: deprecate ndn::ip::address{,V6}FromString
Change-Id: I32b26b70ab35e5f365bdb3fbfaad3c4e5f9d6a99
2018-05-28 07:16:28 -04:00
Davide Pesavento 1fd00240e0 build: switch to C++14
Replace our homegrown implementation of optional (based
on Boost.Optional) with optional-lite by Martin Moene.

Change-Id: I4632cbc7c705a94af0b85a335515e3430bf3cb1f
Refs: #3076
2018-05-24 21:41:56 -04:00
Ashlesh Gawande e24042225f face: use post instead of dispatch to avoid re-entrancy issues
This fixes a segfault in satisfyPendingInterests when Face::put is
called in DataCallback. Other functions are also safeguarded
against similar situations.

refs: #4596

Change-Id: I8d1564b0d28d1ee7b80c50712d888f874804823a
2018-05-24 16:05:29 -05:00
Eric Newberry cc910cd0aa util: use signals instead of callbacks in SegmentFetcher
Deprecate fetch() static functions in favor of start()

refs #4464

Change-Id: I8632790e6151ad019b19c89ceae1944d37871da2
2018-05-17 14:07:05 -07:00
Davide Pesavento 21be81676f build: ignore OSError raised by subprocess.check_output()
For example, when git is not installed.

Change-Id: I2a44b9c647e2b2e0344e2c831217db1595a9db68
2018-05-10 20:37:18 -04:00
Davide Pesavento 844b09331b build: require gcc >= 5.3, boost >= 1.58, openssl >= 1.0.2
This effectively drops support for all versions of Ubuntu older than 16.04

Change-Id: Ie3ab7df9147e97f6467658a6399a4f9379f089c1
Refs: #4462
2018-05-08 21:00:00 -04:00
Alexander Afanasyev d9b083e825 Prepare release 0.6.2
Change-Id: Ia5fefd6729fdf9cb5887a5165ba60614ab931280
Refs: #4564
2018-05-03 09:25:10 -04:00
Davide Pesavento 7c4ad512a3 docs: update list of supported platforms
Change-Id: Ib0aca834a90a9efd403d3357f94e482f1bbe82f0
2018-04-30 19:26:00 -04:00
Teng Liang c93c2ce269 encoding: add route origin for self-learning
Change-Id: I2f652ac889095ee9bb7c752e715cfecb41459fa4
refs: #4279
2018-04-29 18:29:03 -07:00
Davide Pesavento d89f002da8 ci: add gcc-8 to Travis-CI build matrix
Change-Id: I6301f06f4d43219da5ff7117708ed896b2dae3eb
2018-04-28 14:48:25 -04:00
Davide Pesavento 1c9c96c3d3 util: fix Logging::getLoggerNames()
Change-Id: Ia243b7eeb7aae69427526e23e7eff4896506871a
2018-04-26 01:02:51 -04:00
Junxiao Shi 974b81aeed lp: encode sequence number as fixed-width integer
refs #4403

Change-Id: I37daeaf3d60dbaf81a8f38ec5deb72eea6dd89c2
2018-04-21 01:37:03 +00:00
Junxiao Shi 72c0c64751 encoding: provide FormattedOutputFunction for Block
refs #2225

Change-Id: Ie38539ff93293b3919789043b01e09b573fb619a
2018-04-20 15:41:09 +00:00
Junxiao Shi 9c9672e230 name: don't strip whitespace when parsing URI
refs #4560

Change-Id: I88d2ba28623b051929a50043c0a46e6a4c6ac7fb
2018-04-18 12:55:08 +00:00
Davide Pesavento 6d43393669 tools: fix compilation with Boost 1.67
Change-Id: I0f4bae23f26eca07044990ce6dd01da750cfb569
Refs: #4584
2018-04-17 21:30:09 -04:00
Junxiao Shi 7d9039bef9 data: recognize Data in Packet Format v0.3
Data::wireDecode accepts both v0.2 and v0.3 formats,
but Data::wireEncode only encodes into v0.2 format.

refs #4568

Change-Id: I287d12c599f44d802a2a2cd2f13132c9f98a842a
2018-04-14 15:56:28 +00:00
Junxiao Shi 6efa3b7124 interest: recognize Interest in Packet Format v0.3
Interest::wireDecode accepts both v0.2 and v0.3 formats,
but Interest::wireEncode only encodes into v0.2 format.

refs #4527

Change-Id: I784b6f1d5c0d93db33155efddc0180359d8cab74
2018-04-14 15:54:08 +00:00
Davide Pesavento d95274bda8 util: let consumers decide the visibility of member loggers
Change-Id: I5d4a2fd1c0dfdea9e93ae411e8c1f1e0f534a5e6
Refs: #4552
2018-04-12 17:45:29 -04:00
Davide Pesavento 0c145ec508 util: support declaring loggers as class members
Change-Id: If6373023d27cf655c1a7f29009edaee0ae21d5b7
Refs: #4552
2018-04-10 22:12:04 -04:00
Junxiao Shi a2550a9d41 encoding: declare TLV-TYPE constants for Packet Format v0.3
refs #4527

Change-Id: I54a260971c6f3b82df53f5c387b132737f567a34
2018-04-10 05:07:48 +00:00
Junxiao Shi 3688d72de5 util: backport optional::reset
refs #3753

Change-Id: I17e77d7b7e3c450fc86aec06f5c2d3ecfcc1444a
2018-04-10 05:04:45 +00:00
Eric Newberry 25038f3034 build: find Boost lib architecture automatically
refs #4573

Change-Id: Id28188a98d710c15f06391d89d13fed91e0ad73f
2018-04-07 16:35:37 -07:00
Junxiao Shi 8d3f834c6c interest: deprecate selectors
NDN Packet Format v0.3 replaces Selectors with CanBePrefix
and MustBeFresh elements.
This commit deprecates getter/setter for Selectors in Interest
class. Getter/setter for CanBePrefix and MustBeFresh are mapped
to the closest v0.2 semantics and encoded as selectors.

refs #4527

Change-Id: Ie3d58d3d73f3bf1d8db3327943e6850a867465b0
2018-04-04 12:46:37 +00:00
Junxiao Shi a36f15d667 name: allow appending typed name components
This commit also adds test coverage for Name::isPrefixOf and
Name comparison operators.

refs #4526

Change-Id: I93996adb97408cbeec0a8b0fd06c3a12cbf5a78f
2018-04-04 02:22:12 +00:00
Junxiao Shi ebfe4a207f meta-info: allow typed name component in FinalBlockId
refs #4526

Change-Id: I3b6667928fa47c631e45ff5f0ca2c5030c5cc2ad
2018-04-01 23:53:40 +00:00
Junxiao Shi b849f61b6b util: give examples for NDN_CXX_DEPRECATED
refs #4566

Change-Id: Iaaebf31d52b9000d0e2ed279b4b8c9a69d0c399b
2018-04-01 23:52:54 +00:00
Junxiao Shi 4ffbb9d937 interest+exclude: rename NameComponent to GenericNameComponent
refs #4526

Change-Id: I8300f68b504ec959ca482759eaa4f7cbf566d729
2018-03-31 17:16:35 +00:00
Junxiao Shi cf4ac5b0c7 name-component: recognize typed name components
refs #4526

Change-Id: I9d32a5dc216c6b0921d181573a4e043fccc2814e
2018-03-28 22:46:06 +00:00
Eric Newberry c6500a9e00 docs: only use sphinxcontrib-doxylink on Python 3
refs #4553

Change-Id: I54fead17b17a835046af73ef6b5e0b169b30654e
2018-03-25 14:34:50 -07:00
Davide Pesavento 92e4d5c170 ci: fix clang-7 (trunk) build job on Travis-CI
The final ".0" was dropped from the package name.

Change-Id: I650f10c17bee2d561da7c8275a556a3a746798ba
2018-03-11 20:05:48 -04:00
Davide Pesavento 8a8c01bb0c tests: fix several instances of the most vexing parse
Change-Id: I6195bb5cd3ea0fb85e4e10a78319936f0fe5f3f3
Refs: #4545
2018-03-11 00:07:52 -05:00
Davide Pesavento 5df42a893d security: minor cleanup
Change-Id: Ibedce96a5f1fecc61149f354384194fae4fa39cb
Refs: #4542
2018-03-09 10:51:14 -08:00
Alexander Afanasyev 5560fd40ae build: update waf to version 2.0.6
Cleanup in most build scripts

Change-Id: Ib024e95fb6f80e72b0c00e1dc8bb9300d6c5f191
2018-03-08 21:49:25 -05:00
Davide Pesavento 5e2ccca06f mgmt: fix conflicting TLV-TYPE assignment
Amends df5053824f

Change-Id: Ifba9fcac63528594c6442973adce313a95116c75
Refs: #4318, #4538
2018-03-06 19:02:07 -05:00
Junxiao Shi df5053824f mgmt: declare cs/erase command
refs #4318

Change-Id: If34ba8d55a4d46d53f552f4edd748623d4c0e55e
2018-03-04 13:40:49 +00:00
Davide Pesavento 3c8a8b08f1 mgmt: Dispatcher: minor code cleanups
Change-Id: I0b092611caaf9f11e42a21061a50d4a3f3834903
2018-03-01 16:00:51 -05:00
susmit f47cef64a2 Prepare for 0.6.1 release
Change-Id: Iaf148b70c3e30a0cd6737239a769d54c24e43a80
Refs: #4497
2018-02-19 09:39:50 -05:00
Davide Pesavento 38a061d1a0 util: introduce escape() and use it in Component::toUri()
Change-Id: Ie476ca0fc909fb275631c60195fb1aa5640cff10
Refs: #4484
2018-02-15 22:47:59 -05:00
Teng Liang 5b323d16c8 lp: wrap Data in PrefixAnnouncement field
Change-Id: I47e33518cec60a29d4518433245f22283b96b747
refs: 4280
2018-02-10 10:23:46 -07:00
Davide Pesavento 08378cb4e3 name: fix encoding of "+" and "~" in Component::toUri()
Change-Id: I101ad74f555ee2738fac73d0e0a022fdd66f8e86
Refs: #4484
2018-02-07 19:28:42 -05:00
Junxiao Shi be86d989cd mgmt: fix CsInfo.Capacity decoding
refs #4050

Change-Id: Icc6d3cc45f1c7ea042b6c0a8c03d70e89852fcee
2018-02-07 14:20:29 +00:00
Junxiao Shi a7ab06d616 mgmt: add capacity and enablement flags to CsInfo
refs #4050

Change-Id: I9363f6735c6917591e0907b3d94f36d7263d10e7
2018-01-29 22:28:47 +00:00
Teng Liang 8b6eda9998 lp: add PrefixAnnouncement field and tag
refs #4280

Change-Id: I05b1f300d188388d60b3ed364f04d03de3fefccb
2018-01-28 11:45:33 -08:00
Davide Pesavento c5ba65bb6a util: fix Y2038 problem in time::toString()
Avoid using time_t, which cannot correctly represent
dates after 19 January 2038 on 32-bit systems.

Change-Id: I04e8d31a1c04a112cbc81810143fe2233e6dcc22
Refs: #3915
2018-01-28 14:30:22 -05:00
Eric Newberry d567aab38e mgmt: make congestion marking parameters optional
refs #4465

Change-Id: I5ab07ecd4f1b7f4c948ba359513e65ac2e96c943
2018-01-27 20:28:24 -07:00
Davide Pesavento b984e3248b net: parse interface names more loosely in FaceUri
Only ':', '/', and whitespace are illegal.

Change-Id: I2c017682d299a12885c96c9b212c503319ca4f08
Refs: #4474
2018-01-27 13:55:11 -05:00
Eric Newberry 07d05c97b4 mgmt: add congestion marking parameters
refs #4465

Change-Id: I5090d93b59fe3fc425e5ce529c4f66b8211155dd
2018-01-26 11:21:13 -07:00
Alexander Afanasyev e66040efa6 util: Fix conversion of large dates from strings to internal type
Change-Id: I13f8d41892dedd0d2feef131a0f09ae5939d124b
Refs: #4478
2018-01-26 13:00:52 -05:00
Junxiao Shi 22f856821a mgmt: declare cs/config command
refs #4050

Change-Id: I779d425d0ca89750cf923c84009c19b37eecc9cf
2018-01-22 19:23:22 +00:00
Junxiao Shi 1534b3dab6 encoding: delete obsolete TLV-TYPE constants
This includes:

* SelectedDelegation
* security v1 KeyBag
* LocalControlFeature

refs #4055, #3098, #3755

Change-Id: I63e5ff423baccf698ec53838d41a0626d61bdf3b
2018-01-22 08:47:03 +00:00
Davide Pesavento 233f67c51f util: silence truncation warning in LoggerTimestamp's operator<<
Change-Id: I681d550f6a9538308146d76804bff8850928ad58
Refs: #4365
2018-01-21 17:23:21 -05:00
Davide Pesavento 0f8308012b util: add literal operators for duration types
Change-Id: I007fa61c80e535c6e4b12e85a32eeeee62fecc3c
Refs: #4468
2018-01-18 21:23:05 -05:00
Muktadir Chowdhury 1c109b4bbd util: add signals to SegmentFetcher for segment retrieval/validation
refs #4438

Change-Id: I5a92e89c733cf49790807edefa1e6c39178de438
2018-01-15 13:19:09 -05:00
Zhiyi Zhang 457f09a1ae tools: Allow 'ndnsec key-gen' to customize KeyId
Change-Id: I9cf8f52ce49088808289fe98760e059cca8ce2ff
refs: #4294
2018-01-09 08:28:52 -08:00
Davide Pesavento 9412d12678 ci: update Travis-CI configuration
* Re-enable ASan with gcc-7
 * Add clang-6.0 to the build matrix (allowed to fail)
 * Remove unsupported OSX-10.10 configuration
 * Upgrade xcode9 to xcode9.2
 * Add testing of openssl 1.1 on osx (allowed to fail)
 * Various simplifications

Change-Id: I3cdfcf78e6a9be66d1063fee710528698ad90bca
2018-01-07 15:25:34 -05:00
Davide Pesavento 5afbb0b3dd util: switch to boost::asio::basic_waitable_timer
Change-Id: I2724befc86482adf84f59063e65509a116bb1b46
Refs: #4431
2018-01-06 12:21:22 -05:00
Ashlesh Gawande e84d1eb0ef util/io: catch invalid_argument generated by trying to load empty file
refs: #4434

Change-Id: I884a5fba25fc5140ef00b492ba655aac87600426
2018-01-04 21:00:28 -06:00
Davide Pesavento 720f3ba262 security: add support for BLAKE2 hash function
Requires openssl >= 1.1.0

Change-Id: I680c948d23561cee8cb62eb8bf757e55bf70abca
2017-12-29 22:07:25 -05:00
Davide Pesavento 82d6a4cf1a security: fix error handling in KeyChain::importSafeBag()
Tpm::importPrivateKey() now throws on error instead of
returning false, for consistency with similar functions.

Change-Id: Id07c2be3809e32d1779c0b5977232e4728528e3c
Refs: #4359
2017-12-25 18:32:05 -08:00
Nick Gordon fe13f56bc7 docs: mention the contributing guide
Change-Id: I9b39d3f01f2973de6cf312e60dee8b6249e7805e
refs: #4414
2017-12-25 18:16:02 -08:00
Zhiyi Zhang 34429cc4f5 util: Add BroadcastLink to DummyClientFace
Change-Id: I2bfe3156016a098b91ff375f2bb83b5e4351317c
Refs: #3913
2017-12-25 17:57:56 -08:00
Ashlesh Gawande 7dffab6f6b Fix missing 'typename' prior to dependent type name error
On Ubuntu 17.10 with gcc 7.2 or clang 3.9,
compiler threw the error when trying to
use the append(Iterator) method on a name

Change-Id: I5252280cfc9021d81d6bb996012255e226006a45
2017-12-25 17:57:15 -08:00
Davide Pesavento 7429390ec7 regex: use a vector in RegexComponentSetMatcher
Change-Id: Iec466b477144a7332d2f1992691601c738dfc3df
Refs: #4120
2017-12-23 18:50:06 -05:00
Davide Pesavento 4d0d096b2e Fix compilation with boost 1.66.0
Change-Id: Ibf2883a974c834a5281c39a551e6d467d4454501
2017-12-19 22:37:15 -05:00
Junxiao Shi 7f01247b5b mgmt: encode/decode CS Information Dataset
refs #4219

Change-Id: Ia51b455fc9b16f8f3c468de2847ced6d73a87bdc
2017-12-07 20:40:47 +00:00
Alexander Afanasyev 130076fd99 build: Fix build when std::to_string is not available
This commit also adds a missing header include

Change-Id: I60857a488031f447c63308600052b1d2e9e3958b
Refs: #4393
2017-12-05 11:29:10 -05:00
Junxiao Shi b6828918cd face: Interest loopback
refs #3979

Change-Id: I6f65b30451939397975a7af40c59002e330afc25
2017-11-20 14:06:32 +00:00
Teng Liang 0296074a34 lp: add NonDiscovery field and tag
refs #4355

Change-Id: Ib3a64589d7ea3bbf204e295a75d91748ef9c85b9
2017-11-15 02:48:26 -07:00
Davide Pesavento 19745dc335 regex: move method definitions to .cpp files
Change-Id: Ifa66c886bd3f920821b0a498f714da24d51b042e
2017-11-12 15:30:50 -05:00
Davide Pesavento 45ab9a9462 regex: modernize and simplify code
Change-Id: Ia4a3046d409ab1e5d8507da4d369dfee203f6256
2017-11-12 15:10:43 -05:00
Davide Pesavento af1d6cfa64 docs: remove GNU-style indentation of braces from code-style
Plus other misc cleanups.

Change-Id: I04917339c80a960a09f77c20af972daa2f888005
2017-11-12 14:09:49 -05:00
Davide Pesavento 7e6f6f8ee3 encoding: avoid UB when casting to tlv::SignatureTypeValue
Change-Id: I52ec0bef8527b6a52208dc07be75e790e504c47e
Refs: #4370
2017-11-05 13:28:08 -05:00
Davide Pesavento e245b055a8 encoding: don't call memcmp() with null pointer
It's undefined behavior.

Change-Id: Id2fd5cbc0483af2bf9857e81fb6cac8163da3474
Refs: #4368
2017-11-04 00:56:57 -04:00
Davide Pesavento 9ced9e690b security: don't call front() on empty vector
Change-Id: Ie267005f2ecc8c57d847ad35095a6df283e146b9
2017-11-03 00:39:45 -04:00
Zhiyi Zhang a1302f64eb security: enable direct fetch for data sig validation
Change-Id: Icae66769cf980a20bc637caca46f381b29361047
2017-11-01 11:30:54 -07:00
Eric Newberry 935d7fe420 docs: update supported platforms for Ubuntu 17.10 and macOS 10.13
Change-Id: Ie073ba5b6f56510a9fac355d77a34c0fb44bcac1
2017-10-29 15:09:36 -07:00
dmcoomes 57e238f8d6 docs: add a manpage for ndn-log
This commit also removes reference to non-existing ndnsec-validator.conf

refs: #3918, #4184

Change-Id: I0413a2418db18db07ed9803ed6c9789374a56ded
2017-10-19 12:48:01 -05:00
Alexander Afanasyev 3647af06a1 docs: Fix wrong version number in the release notes
Change-Id: I7d00c2fd95c7363bcc95497d34f3e4ac140cbc11
Refs: #4275
2017-10-16 16:29:49 -04:00
804 changed files with 48194 additions and 31275 deletions

No files matched your search

+22 -11
View File
@@ -1,18 +1,29 @@
# Emacs temp files
# Emacs
*~
\#*\#
/.emacs.desktop
/.emacs.desktop.lock
*.elc
.\#*
# macOS stuff
.DS_*
# Visual Studio Code
.vscode/
# waf build system
.waf-1*
.waf3-*
.lock*
build/
# macOS
.DS_Store
.AppleDouble
.LSOverride
._*
# Waf build system
/build/
.waf-*-*/
.waf3-*-*/
.lock-waf*
# Compiled python code
*.pyc
*.pyo
__pycache__/
*.py[cod]
# Other
VERSION
/VERSION.info
+25 -3
View File
@@ -1,10 +1,32 @@
#!/usr/bin/env bash
set -e
source .jenkins.d/util.sh
DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
export CACHE_DIR=${CACHE_DIR:-/tmp}
export WAF_JOBS=${WAF_JOBS:-1}
[[ $JOB_NAME == *"code-coverage" ]] && export DISABLE_ASAN=yes
for file in "$DIR"/.jenkins.d/*; do
nanos() {
# Cannot use date(1) because macOS does not support %N format specifier
python3 -c 'import time; print(int(time.time() * 1e9))'
}
for file in .jenkins.d/*; do
[[ -f $file && -x $file ]] || continue
echo "Run: $file"
if [[ -n $TRAVIS ]]; then
label=$(basename "$file" | sed -E 's/[[:digit:]]+-(.*)\..*/\1/')
echo -ne "travis_fold:start:${label}\r"
echo -ne "travis_time:start:${label}\r"
start=$(nanos)
fi
echo "\$ $file"
"$file"
if [[ -n $TRAVIS ]]; then
finish=$(nanos)
echo -ne "travis_time:end:${label}:start=${start},finish=${finish},duration=$((finish-start)),event=${label}\r"
echo -ne "travis_fold:end:${label}\r"
fi
done
+27 -23
View File
@@ -1,34 +1,38 @@
#!/usr/bin/env bash
set -e
JDIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
source "$JDIR"/util.sh
set -x
set -ex
if has OSX $NODE_LABELS; then
FORMULAE=(boost openssl pkg-config)
brew update
if [[ -n $TRAVIS ]]; then
# travis images come with a large number of brew packages
# pre-installed, don't waste time upgrading all of them
for FORMULA in "${FORMULAE[@]}"; do
brew outdated $FORMULA || brew upgrade $FORMULA
done
else
brew upgrade
if has OSX-10.13 $NODE_LABELS || has OSX-10.14 $NODE_LABELS; then
FORMULAE+=(python)
fi
brew install "${FORMULAE[@]}"
brew cleanup
fi
if has Ubuntu $NODE_LABELS; then
if [[ -n $TRAVIS ]]; then
# Travis images come with a large number of pre-installed
# brew packages, don't waste time upgrading all of them
brew list --versions "${FORMULAE[@]}" || brew update
for FORMULA in "${FORMULAE[@]}"; do
brew list --versions "$FORMULA" || brew install "$FORMULA"
done
# Ensure /usr/local/opt/openssl exists
brew reinstall openssl
else
brew update
brew upgrade
brew install "${FORMULAE[@]}"
brew cleanup
fi
elif has Ubuntu $NODE_LABELS; then
sudo apt-get -qq update
sudo apt-get -qy install build-essential pkg-config libboost-all-dev \
libsqlite3-dev libssl-dev
sudo apt-get -qy install g++ pkg-config python3-minimal \
libboost-all-dev libssl-dev libsqlite3-dev
if [[ $JOB_NAME == *"code-coverage" ]]; then
sudo apt-get -qy install lcov libgd-perl python-setuptools
sudo easy_install --upgrade gcovr
sudo apt-get -qy install gcovr lcov
fi
elif has CentOS-8 $NODE_LABELS; then
sudo dnf -y install gcc-c++ libasan pkgconf-pkg-config python3 \
boost-devel openssl-devel sqlite-devel
fi
+7
View File
@@ -0,0 +1,7 @@
#!/usr/bin/env bash
set -ex
sudo rm -f /usr/local/bin/ndnsec*
sudo rm -fr /usr/local/include/ndn-cxx
sudo rm -f /usr/local/lib{,64}/libndn-cxx*
sudo rm -f /usr/local/lib{,64}/pkgconfig/libndn-cxx.pc
+36 -39
View File
@@ -1,51 +1,48 @@
#!/usr/bin/env bash
set -e
set -ex
JDIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
source "$JDIR"/util.sh
git submodule sync
git submodule update --init
set -x
sudo rm -f /usr/local/bin/ndnsec*
sudo rm -fr /usr/local/include/ndn-cxx
sudo rm -f /usr/local/lib/libndn-cxx*
sudo rm -f /usr/local/lib/pkgconfig/libndn-cxx.pc
# Cleanup
sudo env "PATH=$PATH" ./waf --color=yes distclean
if [[ $JOB_NAME != *"code-coverage" && $JOB_NAME != *"limited-build" ]]; then
# Configure/build static library in optimized mode with tests
./waf --color=yes configure --enable-static --disable-shared --with-tests
./waf --color=yes build -j${WAF_JOBS:-1}
# Cleanup
sudo env "PATH=$PATH" ./waf --color=yes distclean
# Configure/build static and shared library in optimized mode without tests
./waf --color=yes configure --enable-static --enable-shared
./waf --color=yes build -j${WAF_JOBS:-1}
# Cleanup
sudo env "PATH=$PATH" ./waf --color=yes distclean
fi
# Configure/build shared library in debug mode with tests/examples and without precompiled headers
if [[ $JOB_NAME == *"code-coverage" ]]; then
COVERAGE="--with-coverage"
elif [[ -n $BUILD_WITH_ASAN || -z $TRAVIS ]]; then
if [[ -z $DISABLE_ASAN ]]; then
ASAN="--with-sanitizer=address"
fi
./waf --color=yes configure --disable-static --enable-shared --debug --with-tests --with-examples --without-pch $COVERAGE $ASAN
./waf --color=yes build -j${WAF_JOBS:-1}
if [[ $JOB_NAME == *"code-coverage" ]]; then
COVERAGE="--with-coverage"
fi
if has CentOS-8 $NODE_LABELS; then
# https://bugzilla.redhat.com/show_bug.cgi?id=1721553
PCH="--without-pch"
fi
# (tests will be run against debug version)
if [[ $JOB_NAME != *"code-coverage" && $JOB_NAME != *"limited-build" ]]; then
# Build static library in release mode with tests and without precompiled headers
./waf --color=yes configure --enable-static --disable-shared --with-tests --without-pch
./waf --color=yes build -j$WAF_JOBS
# Cleanup
./waf --color=yes distclean
# Build static and shared library in release mode without tests
./waf --color=yes configure --enable-static --enable-shared $PCH
./waf --color=yes build -j$WAF_JOBS
# Cleanup
./waf --color=yes distclean
fi
# Build shared library in debug mode with tests and examples
./waf --color=yes configure --disable-static --enable-shared --debug --with-tests --with-examples $ASAN $COVERAGE $PCH
./waf --color=yes build -j$WAF_JOBS
# (tests will be run against the debug version)
# Install
sudo env "PATH=$PATH" ./waf --color=yes install
sudo_preserve_env PATH -- ./waf --color=yes install
if has CentOS-8 $NODE_LABELS; then
sudo tee /etc/ld.so.conf.d/ndn.conf >/dev/null <<< /usr/local/lib64
fi
if has Linux $NODE_LABELS; then
sudo ldconfig
elif has FreeBSD $NODE_LABELS; then
sudo ldconfig -a
fi
+14 -29
View File
@@ -1,13 +1,8 @@
#!/usr/bin/env bash
set -e
JDIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
source "$JDIR"/util.sh
set -x
set -ex
# Prepare environment
rm -Rf ~/.ndn
rm -rf ~/.ndn
if has OSX $NODE_LABELS; then
security unlock-keychain -p named-data
@@ -15,30 +10,20 @@ fi
ndnsec-keygen "/tmp/jenkins/$NODE_NAME" | ndnsec-install-cert -
BOOST_VERSION=$(python -c "import sys; sys.path.append('build/c4che'); import _cache; print(_cache.BOOST_VERSION_NUMBER);")
ut_log_args() {
if (( BOOST_VERSION >= 106200 )); then
echo --logger=HRF,test_suite,stdout:XML,all,build/xunit-${1:-report}.xml
else
if [[ -n $XUNIT ]]; then
echo --log_level=all $( (( BOOST_VERSION >= 106000 )) && echo -- ) \
--log_format2=XML --log_sink2=build/xunit-${1:-report}.xml
else
echo --log_level=test_suite
fi
fi
}
# https://github.com/google/sanitizers/wiki/AddressSanitizerFlags
ASAN_OPTIONS="color=always"
ASAN_OPTIONS+=":detect_stack_use_after_return=true"
ASAN_OPTIONS+=":check_initialization_order=true"
ASAN_OPTIONS+=":strict_init_order=true"
ASAN_OPTIONS+=":detect_invalid_pointer_pairs=1"
ASAN_OPTIONS+=":detect_container_overflow=false"
ASAN_OPTIONS+=":strict_string_checks=true"
ASAN_OPTIONS+=":check_initialization_order=1"
ASAN_OPTIONS+=":detect_stack_use_after_return=1"
ASAN_OPTIONS+=":strict_init_order=1"
ASAN_OPTIONS+=":strict_string_checks=1"
ASAN_OPTIONS+=":detect_invalid_pointer_pairs=2"
ASAN_OPTIONS+=":strip_path_prefix=${PWD}/"
export ASAN_OPTIONS
export BOOST_TEST_BUILD_INFO=1
export BOOST_TEST_COLOR_OUTPUT=1
export BOOST_TEST_DETECT_MEMORY_LEAK=0
export BOOST_TEST_LOGGER=HRF,test_suite,stdout:XML,all,build/xunit-log.xml
# Run unit tests
./build/unit-tests $(ut_log_args)
./build/unit-tests
+2 -8
View File
@@ -1,15 +1,10 @@
#!/usr/bin/env bash
set -e
JDIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
source "$JDIR"/util.sh
set -x
set -ex
if [[ $JOB_NAME == *"code-coverage" ]]; then
gcovr --object-directory=build \
--output=build/coverage.xml \
--filter="$PWD/src" \
--exclude="$PWD/(examples|tests)" \
--root=. \
--xml
@@ -28,7 +23,6 @@ if [[ $JOB_NAME == *"code-coverage" ]]; then
genhtml --branch-coverage \
--demangle-cpp \
--frames \
--legend \
--output-directory build/coverage \
--title "ndn-cxx unit tests" \
@@ -5,9 +5,18 @@
# It's intentional not to use `set -e`, because this script wants to check all headers
# (similar to running all test cases), instead of failing at the first error.
if [[ -n $DISABLE_HEADERS_CHECK ]]; then
echo 'Skipping headers check.'
exit 0
fi
if has CentOS-8 $NODE_LABELS; then
export PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig
fi
CXX=${CXX:-g++}
STD=-std=c++11
CXXFLAGS="-O2 -Wall -Wno-unused-local-typedef $(pkg-config --cflags libndn-cxx)"
STD=-std=c++14
CXXFLAGS="-O2 -Wall -Wno-unneeded-internal-declaration -Wno-unused-const-variable $(pkg-config --cflags libndn-cxx)"
INCLUDEDIR="$(pkg-config --variable=includedir libndn-cxx)"/ndn-cxx
echo "Using: $CXX $STD $CXXFLAGS"
@@ -15,14 +24,14 @@ echo "Using: $CXX $STD $CXXFLAGS"
NCHECKED=0
NERRORS=0
while IFS= read -r -d '' H; do
echo "Verifying standalone header compilation for ${H#${INCLUDEDIR}/}"
echo "Checking header ${H#${INCLUDEDIR}/}"
"$CXX" -xc++ $STD $CXXFLAGS -c -o /dev/null "$H"
[[ $? -eq 0 ]] || ((NERRORS++))
((NCHECKED++))
done < <(find "$INCLUDEDIR" -name '*.hpp' -type f -print0 2>/dev/null)
if [[ $NCHECKED -eq 0 ]]; then
echo 'No header found. Is ndn-cxx installed?'
echo 'No headers found. Is ndn-cxx installed?'
exit 1
else
echo "$NCHECKED headers checked."
+17 -22
View File
@@ -1,33 +1,28 @@
CONTINUOUS INTEGRATION SCRIPTS
==============================
# CONTINUOUS INTEGRATION SCRIPTS
Environment Variables Used in Build Scripts
-------------------------------------------
## Environment Variables Used in Build Scripts
- `NODE_LABELS`: the variable defines a list of OS properties. The set values are used by the
build scripts to select proper behavior for different OS.
- `NODE_LABELS`: space-separated list of platform properties. The included values are used by
the build scripts to select the proper behavior for different operating systems and versions.
The list should include at least `[OS_TYPE]`, `[DISTRO_TYPE]`, and `[DISTRO_VERSION]`.
The list should normally contain `[OS_TYPE]`, `[DISTRO_TYPE]`, and `[DISTRO_VERSION]`.
Possible values for Linux:
Example values:
* `[OS_TYPE]`: `Linux`
* `[DISTRO_TYPE]`: `Ubuntu`
* `[DISTRO_VERSION]`: `Ubuntu-14.04`, `Ubuntu-16.04`
- `[OS_TYPE]`: `Linux`, `OSX`
- `[DISTRO_TYPE]`: `Ubuntu`, `CentOS`
- `[DISTRO_VERSION]`: `Ubuntu-16.04`, `Ubuntu-18.04`, `CentOS-8`, `OSX-10.14`, `OSX-10.15`
Possible values for OS X / macOS:
* `[OS_TYPE]`: `OSX`
* `[DISTRO_TYPE]`: `OSX` (can be absent)
* `[DISTRO_VERSION]`: `OSX-10.10`, `OSX-10.11`, `OSX-10.12`
- `JOB_NAME`: optional variable to define type of the job. Depending on the defined job type,
- `JOB_NAME`: optional variable that defines the type of build job. Depending on the job type,
the build scripts can perform different tasks.
Possible values:
* empty: default build process
* `code-coverage` (Linux OS is assumed): debug build with tests and code coverage analysis
* `limited-build`: only a single debug build with tests
- empty: default build task
- `code-coverage`: debug build with tests and code coverage analysis (Ubuntu Linux is assumed)
- `limited-build`: only a single debug build with tests
- `WAF_JOBS`: number of parallel build jobs used by waf, defaults to 1.
- `CACHE_DIR`: directory containing cached files from previous builds, e.g., a compiled version
of ndn-cxx. If not set, `/tmp` is used.
- `WAF_JOBS`: number of parallel build threads used by waf, defaults to 1.
+21
View File
@@ -16,3 +16,24 @@ has() {
set ${saved_xtrace}
return ${ret}
}
export -f has
sudo_preserve_env() {
local saved_xtrace
[[ $- == *x* ]] && saved_xtrace=-x || saved_xtrace=+x
set +x
local vars=()
while [[ $# -gt 0 ]]; do
local arg=$1
shift
case ${arg} in
--) break ;;
*) vars+=("${arg}=${!arg}") ;;
esac
done
set ${saved_xtrace}
sudo env "${vars[@]}" "$@"
}
export -f sudo_preserve_env
+9
View File
@@ -0,0 +1,9 @@
<jefft0@remap.ucla.edu> <jefft0@gmail.com>
<aa@cs.fiu.edu> <alexander.afanasyev@ucla.edu>
<davidepesa@gmail.com> <davide.pesavento@lip6.fr>
<enewberry@email.arizona.edu> <enewberry@cs.arizona.edu>
Teng Liang <philoliang2011@gmail.com>
<lybmath2009@gmail.com> <lybmath@ucla.edu>
Hila Ben Abraham <hilata@gmail.com>
Laqin Fan <flq12021@gmail.com>
Jeremy Clark <jrclark2@memphis.edu>
+105 -152
View File
@@ -1,163 +1,116 @@
sudo: required
language: generic
version: ~> 1.0
language: cpp
os: linux
dist: bionic
arch:
- amd64
- arm64
- ppc64le
- s390x
env:
global:
- JOB_NAME=limited-build
- WAF_JOBS=2
- COMPILER=g++-7
- COMPILER=g++-9
- COMPILER=clang++-6.0
- COMPILER=clang++-9
matrix:
jobs:
include:
# Linux/gcc
- os: linux
dist: trusty
env:
- CXX=g++-4.8
- NODE_LABELS="Linux Ubuntu Ubuntu-14.04"
- BUILD_WITH_ASAN=yes
- os: linux
dist: trusty
addons:
apt:
sources: ubuntu-toolchain-r-test
packages: g++-4.9
env:
- CXX=g++-4.9
- NODE_LABELS="Linux Ubuntu Ubuntu-14.04"
- BUILD_WITH_ASAN=yes
- os: linux
dist: trusty
addons:
apt:
sources: ubuntu-toolchain-r-test
packages: g++-5
env:
- CXX=g++-5
- NODE_LABELS="Linux Ubuntu Ubuntu-14.04"
- BUILD_WITH_ASAN=yes
- os: linux
dist: trusty
addons:
apt:
sources: ubuntu-toolchain-r-test
packages: g++-6
env:
- CXX=g++-6
- NODE_LABELS="Linux Ubuntu Ubuntu-14.04"
- BUILD_WITH_ASAN=yes
- os: linux
dist: trusty
addons:
apt:
sources: ubuntu-toolchain-r-test
packages: g++-7
env:
- CXX=g++-7
- NODE_LABELS="Linux Ubuntu Ubuntu-14.04"
# BUILD_WITH_ASAN=yes # bug 4147
# Linux
- env: COMPILER=g++-5
- env: COMPILER=g++-6
- env: COMPILER=g++-8
- env: COMPILER=clang++-4.0
- env: COMPILER=clang++-5.0
- env: COMPILER=clang++-7
- env: COMPILER=clang++-8
- env: COMPILER=clang++-10
- env: COMPILER=clang++-11
- env: COMPILER=clang++-12
# Linux/clang
- os: linux
dist: trusty
addons:
apt:
packages: clang-3.5
env:
- CXX=clang++-3.5
- NODE_LABELS="Linux Ubuntu Ubuntu-14.04"
- BUILD_WITH_ASAN=yes
- os: linux
dist: trusty
addons:
apt:
packages: clang-3.6
env:
- CXX=clang++-3.6
- NODE_LABELS="Linux Ubuntu Ubuntu-14.04"
- BUILD_WITH_ASAN=yes
- os: linux
dist: trusty
addons:
apt:
sources:
- llvm-toolchain-precise-3.7
- ubuntu-toolchain-r-test
packages: clang-3.7
env:
- CXX=clang++-3.7
- NODE_LABELS="Linux Ubuntu Ubuntu-14.04"
- os: linux
dist: trusty
addons:
apt:
sources:
- llvm-toolchain-precise-3.8
- ubuntu-toolchain-r-test
packages: clang-3.8
env:
- CXX=clang++-3.8
- NODE_LABELS="Linux Ubuntu Ubuntu-14.04"
- BUILD_WITH_ASAN=yes
- os: linux
dist: trusty
addons:
apt:
sources:
- llvm-toolchain-trusty-3.9
- ubuntu-toolchain-r-test
packages: clang-3.9
env:
- CXX=clang++-3.9
- NODE_LABELS="Linux Ubuntu Ubuntu-14.04"
- os: linux
dist: trusty
addons:
apt:
sources:
- llvm-toolchain-trusty-4.0
- ubuntu-toolchain-r-test
packages: clang-4.0
env:
- CXX=clang++-4.0
- NODE_LABELS="Linux Ubuntu Ubuntu-14.04"
- BUILD_WITH_ASAN=yes
- os: linux
dist: trusty
addons:
apt:
sources:
- llvm-toolchain-trusty-5.0
- ubuntu-toolchain-r-test
packages: clang-5.0
env:
- CXX=clang++-5.0
- NODE_LABELS="Linux Ubuntu Ubuntu-14.04"
- BUILD_WITH_ASAN=yes
# macOS
- os: osx
osx_image: xcode9.4
env: # default compiler
- os: osx
osx_image: xcode10.1
env: # default compiler
- os: osx
osx_image: xcode10.3
env: # default compiler
- os: osx
osx_image: xcode11.3
env: # default compiler
- os: osx
osx_image: xcode11.6
env: # default compiler
- os: osx
osx_image: xcode12
env: # default compiler
# macOS/clang
# https://docs.travis-ci.com/user/osx-ci-environment/#OS-X-Version
- os: osx
osx_image: xcode6.4
env:
- NODE_LABELS="OSX OSX-10.10"
- os: osx
osx_image: xcode7.3
env:
- NODE_LABELS="OSX OSX-10.11"
- BUILD_WITH_ASAN=yes
- os: osx
osx_image: xcode8.3
env:
- NODE_LABELS="OSX OSX-10.12"
- BUILD_WITH_ASAN=yes
- os: osx
osx_image: xcode9
env:
- NODE_LABELS="OSX OSX-10.12"
- BUILD_WITH_ASAN=yes
allow_failures:
- env: COMPILER=g++-5
- env: COMPILER=g++-6
- env: COMPILER=clang++-4.0
- env: COMPILER=clang++-12
fast_finish: true
before_install:
- |
: Adding apt repositories
case ${COMPILER} in
g++-9)
# https://launchpad.net/~ubuntu-toolchain-r/+archive/ubuntu/test/+packages
travis_retry sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test
travis_retry sudo apt-get -qq update
;;
clang++-1?)
# https://apt.llvm.org/
LLVM_REPO=${COMPILER/clang++/llvm-toolchain-${TRAVIS_DIST}}
travis_retry wget -nv -O - "https://apt.llvm.org/llvm-snapshot.gpg.key" | sudo apt-key add -
travis_retry sudo add-apt-repository -y "deb http://apt.llvm.org/${TRAVIS_DIST}/ ${LLVM_REPO%-12} main"
travis_retry sudo apt-get -qq update
;;
esac
install:
- |
: Installing C++ compiler
if [[ -n ${COMPILER} ]]; then
travis_retry sudo apt-get -qy install ${COMPILER/clang++/clang}
fi
before_script:
- |
: Setting environment variables
if [[ -n ${COMPILER} ]]; then
export CXX=${COMPILER}
fi
case ${TRAVIS_OS_NAME} in
linux) export NODE_LABELS="Linux Ubuntu Ubuntu-18.04" ;;
osx) export NODE_LABELS="OSX OSX-$(sw_vers -productVersion | cut -d . -f -2)" ;;
esac
export JOB_NAME=limited-build
export WAF_JOBS=2
- |
: Enabling workarounds
case "${TRAVIS_CPU_ARCH},${COMPILER}" in
arm64,g++*)
# Avoid exceeding the per-job time limit
export DISABLE_HEADERS_CHECK=yes
;;
ppc64le,g++-7)
# AddressSanitizer does not seem to be working
export DISABLE_ASAN=yes
;;
*,clang++-8)
# https://bugs.llvm.org/show_bug.cgi?id=40808
export DISABLE_ASAN=yes
;;
esac
- ${CXX:-c++} --version
- python --version
script:
- ./.jenkins
+53 -38
View File
@@ -54,9 +54,9 @@ from waflib import Utils, Logs, Errors
from waflib.Configure import conf
from waflib.TaskGen import feature, after_method
BOOST_LIBS = ['/usr/lib/x86_64-linux-gnu', '/usr/lib/i386-linux-gnu',
'/usr/lib', '/usr/local/lib', '/opt/local/lib', '/sw/lib', '/lib']
BOOST_LIBS = ['/usr/lib', '/usr/local/lib', '/opt/local/lib', '/sw/lib', '/lib']
BOOST_INCLUDES = ['/usr/include', '/usr/local/include', '/opt/local/include', '/sw/include']
BOOST_VERSION_FILE = 'boost/version.hpp'
BOOST_VERSION_CODE = '''
#include <iostream>
@@ -91,13 +91,18 @@ int main() { boost::thread t; }
BOOST_LOG_CODE = '''
#include <boost/log/trivial.hpp>
int main() { BOOST_LOG_TRIVIAL(info) << "boost_log is working"; }
'''
BOOST_LOG_SETUP_CODE = '''
#include <boost/log/trivial.hpp>
#include <boost/log/utility/setup/console.hpp>
#include <boost/log/utility/setup/common_attributes.hpp>
int main() {
using namespace boost::log;
add_common_attributes();
add_console_log(std::clog, keywords::format = "%Message%");
BOOST_LOG_TRIVIAL(debug) << "log is working" << std::endl;
BOOST_LOG_TRIVIAL(info) << "boost_log_setup is working";
}
'''
@@ -146,7 +151,7 @@ def options(opt):
opt.add_option('--boost-abi', type='string', default='', dest='boost_abi',
help='''select libraries with tags (gd for debug, static is automatically added),
see doc Boost, Getting Started, chapter 6.1''')
opt.add_option('--boost-linkage_autodetect', action="store_true", dest='boost_linkage_autodetect',
opt.add_option('--boost-linkage_autodetect', action='store_true', dest='boost_linkage_autodetect',
help="auto-detect boost linkage options (don't get used to it / might break other stuff)")
opt.add_option('--boost-toolset', type='string',
default='', dest='boost_toolset',
@@ -176,7 +181,7 @@ def boost_get_version(self, d):
try:
txt = node.read()
except EnvironmentError:
Logs.error("Could not read the file %r" % node.abspath())
Logs.error('Could not read the file %r' % node.abspath())
else:
re_but1 = re.compile('^#define\\s+BOOST_LIB_VERSION\\s+"(.+)"', re.M)
m1 = re_but1.search(txt)
@@ -184,7 +189,7 @@ def boost_get_version(self, d):
m2 = re_but2.search(txt)
if m1 and m2:
return (m1.group(1), m2.group(1))
return self.check_cxx(fragment=BOOST_VERSION_CODE, includes=[d], execute=True, define_ret=True).split(":")
return self.check_cxx(fragment=BOOST_VERSION_CODE, includes=[d], execute=True, define_ret=True).split(':')
@conf
def boost_get_includes(self, *k, **kw):
@@ -195,10 +200,10 @@ def boost_get_includes(self, *k, **kw):
if self.__boost_get_version_file(d):
return d
if includes:
self.end_msg('headers not found in %s' % includes)
self.end_msg('headers not found in %s' % includes, 'YELLOW')
self.fatal('The configuration failed')
else:
self.end_msg('headers not found, please provide a --boost-includes argument (see help)')
self.end_msg('headers not found, please provide a --boost-includes argument (see help)', 'YELLOW')
self.fatal('The configuration failed')
@@ -241,10 +246,10 @@ def __boost_get_libs_path(self, *k, **kw):
break
if not path:
if libs:
self.end_msg('libs not found in %s' % libs)
self.end_msg('libs not found in %s' % libs, 'YELLOW')
self.fatal('The configuration failed')
else:
self.end_msg('libs not found, please provide a --boost-libs argument (see help)')
self.end_msg('libs not found, please provide a --boost-libs argument (see help)', 'YELLOW')
self.fatal('The configuration failed')
self.to_log('Found the boost path in %r with the libraries:' % path)
@@ -314,7 +319,7 @@ def boost_get_libs(self, *k, **kw):
libs.append(format_lib_name(file.name))
break
else:
self.end_msg('lib %s not found in %s' % (lib, path.abspath()))
self.end_msg('lib %s not found in %s' % (lib, path.abspath()), 'YELLOW')
self.fatal('The configuration failed')
return libs
@@ -355,7 +360,7 @@ def _check_pthread_flag(self, *k, **kw):
# ... -mt is also the pthreads flag for HP/aCC
# -lpthread: GNU Linux, etc.
# --thread-safe: KAI C++
if Utils.unversioned_sys_platform() == "sunos":
if Utils.unversioned_sys_platform() == 'sunos':
# On Solaris (at least, for some versions), libc contains stubbed
# (non-functional) versions of the pthreads routines, so link-based
# tests will erroneously succeed. (We need to link with -pthreads/-mt/
@@ -363,23 +368,22 @@ def _check_pthread_flag(self, *k, **kw):
# a function called by this macro, so we could check for that, but
# who knows whether they'll stub that too in a future libc.) So,
# we'll just look for -pthreads and -lpthread first:
boost_pthread_flags = ["-pthreads", "-lpthread", "-mt", "-pthread"]
boost_pthread_flags = ['-pthreads', '-lpthread', '-mt', '-pthread']
else:
boost_pthread_flags = ["", "-lpthreads", "-Kthread", "-kthread", "-llthread", "-pthread",
"-pthreads", "-mthreads", "-lpthread", "--thread-safe", "-mt"]
boost_pthread_flags = ['', '-lpthreads', '-Kthread', '-kthread', '-llthread', '-pthread',
'-pthreads', '-mthreads', '-lpthread', '--thread-safe', '-mt']
for boost_pthread_flag in boost_pthread_flags:
try:
self.env.stash()
self.env['CXXFLAGS_%s' % var] += [boost_pthread_flag]
self.env['LINKFLAGS_%s' % var] += [boost_pthread_flag]
self.check_cxx(code=PTHREAD_CODE, msg=None, use=var, execute=False)
self.check_cxx(code=PTHREAD_CODE, msg=None, use=var, execute=False, quiet=True)
self.end_msg(boost_pthread_flag)
return
except self.errors.ConfigurationError:
self.env.revert()
self.end_msg('None')
self.end_msg('none')
@conf
def check_boost(self, *k, **kw):
@@ -404,16 +408,24 @@ def check_boost(self, *k, **kw):
var = kw.get('uselib_store', 'BOOST')
self.start_msg('Checking boost includes')
self.env['INCLUDES_%s' % var] = inc = self.boost_get_includes(**params)
versions = self.boost_get_version(inc)
self.env.BOOST_VERSION = versions[0]
self.env.BOOST_VERSION_NUMBER = int(versions[1])
self.end_msg("%d.%d.%d" % (int(versions[1]) / 100000,
int(versions[1]) / 100 % 1000,
int(versions[1]) % 100))
if Logs.verbose:
Logs.pprint('CYAN', ' path : %s' % self.env['INCLUDES_%s' % var])
if not self.env.DONE_FIND_BOOST_COMMON:
self.find_program('dpkg-architecture', var='DPKG_ARCHITECTURE', mandatory=False)
if self.env.DPKG_ARCHITECTURE:
deb_host_multiarch = self.cmd_and_log([self.env.DPKG_ARCHITECTURE[0], '-qDEB_HOST_MULTIARCH'])
BOOST_LIBS.insert(0, '/usr/lib/%s' % deb_host_multiarch.strip())
self.start_msg('Checking boost includes')
self.env['INCLUDES_%s' % var] = inc = self.boost_get_includes(**params)
versions = self.boost_get_version(inc)
self.env.BOOST_VERSION = versions[0]
self.env.BOOST_VERSION_NUMBER = int(versions[1])
self.end_msg('%d.%d.%d' % (int(versions[1]) / 100000,
int(versions[1]) / 100 % 1000,
int(versions[1]) % 100))
if Logs.verbose:
Logs.pprint('CYAN', ' path : %s' % self.env['INCLUDES_%s' % var])
self.env.DONE_FIND_BOOST_COMMON = True
if not params['lib'] and not params['stlib']:
return
@@ -425,7 +437,7 @@ def check_boost(self, *k, **kw):
self.env['STLIBPATH_%s' % var] = [path]
self.env['LIB_%s' % var] = libs
self.env['STLIB_%s' % var] = stlibs
self.end_msg('ok')
self.end_msg(' '.join(libs + stlibs))
if Logs.verbose:
Logs.pprint('CYAN', ' path : %s' % path)
Logs.pprint('CYAN', ' shared libs : %s' % libs)
@@ -446,15 +458,18 @@ def check_boost(self, *k, **kw):
self.check_cxx(fragment=BOOST_ERROR_CODE, use=var, execute=False)
if has_lib('thread'):
self.check_cxx(fragment=BOOST_THREAD_CODE, use=var, execute=False)
if has_lib('log'):
if has_lib('log') or has_lib('log_setup'):
if not has_lib('thread'):
self.env['DEFINES_%s' % var] += ['BOOST_LOG_NO_THREADS']
if has_shlib('log'):
if has_shlib('log') or has_shlib('log_setup'):
self.env['DEFINES_%s' % var] += ['BOOST_LOG_DYN_LINK']
self.check_cxx(fragment=BOOST_LOG_CODE, use=var, execute=False)
if has_lib('log_setup'):
self.check_cxx(fragment=BOOST_LOG_SETUP_CODE, use=var, execute=False)
else:
self.check_cxx(fragment=BOOST_LOG_CODE, use=var, execute=False)
if params.get('linkage_autodetect', False):
self.start_msg("Attempting to detect boost linkage flags")
self.start_msg('Attempting to detect boost linkage flags')
toolset = self.boost_get_toolset(kw.get('toolset', ''))
if toolset in ('vc',):
# disable auto-linking feature, causing error LNK1181
@@ -476,10 +491,10 @@ def check_boost(self, *k, **kw):
# we attempt to play with some known-to-work CXXFLAGS combinations
for cxxflags in (['/MD', '/EHsc'], []):
self.env.stash()
self.env["CXXFLAGS_%s" % var] += cxxflags
self.env['CXXFLAGS_%s' % var] += cxxflags
try:
try_link()
self.end_msg("ok: winning cxxflags combination: %s" % (self.env["CXXFLAGS_%s" % var]))
self.end_msg('ok: winning cxxflags combination: %s' % (self.env['CXXFLAGS_%s' % var]))
exc = None
break
except Errors.ConfigurationError as e:
@@ -487,17 +502,17 @@ def check_boost(self, *k, **kw):
exc = e
if exc is not None:
self.end_msg("Could not auto-detect boost linking flags combination, you may report it to boost.py author", ex=exc)
self.end_msg('Could not auto-detect boost linking flags combination, you may report it to boost.py author', ex=exc)
self.fatal('The configuration failed')
else:
self.end_msg("Boost linkage flags auto-detection not implemented (needed ?) for this toolchain")
self.end_msg('Boost linkage flags auto-detection not implemented (needed ?) for this toolchain')
self.fatal('The configuration failed')
else:
self.start_msg('Checking for boost linkage')
try:
try_link()
except Errors.ConfigurationError as e:
self.end_msg("Could not link against boost libraries using supplied options")
self.end_msg('Could not link against boost libraries using supplied options', 'YELLOW')
self.fatal('The configuration failed')
self.end_msg('ok')
+1 -24
View File
@@ -23,31 +23,8 @@ main()
@conf
def check_std_to_string(self):
if self.check_cxx(msg='Checking for std::to_string',
fragment=STD_TO_STRING,
features='cxx', mandatory=False):
fragment=STD_TO_STRING, mandatory=False):
self.define('HAVE_STD_TO_STRING', 1)
VECTOR_INSERT_ERASE_CONST_ITERATOR = '''
#include <vector>
int
main()
{
std::vector<int> v;
std::vector<int>::const_iterator it = v.cbegin();
v.insert(it, 2);
it = v.cend() - 1;
v.erase(it);
}
'''
@conf
def check_vector_const_iterators(self):
if self.check_cxx(msg='Checking for std::vector::insert with const_iterator',
fragment=VECTOR_INSERT_ERASE_CONST_ITERATOR,
features='cxx', mandatory=False):
self.define('HAVE_VECTOR_INSERT_ERASE_CONST_ITERATOR', 1)
def configure(conf):
conf.check_std_to_string()
conf.check_vector_const_iterators()
+4 -4
View File
@@ -1,15 +1,15 @@
# -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
from waflib import TaskGen, Logs
from waflib import TaskGen
def options(opt):
opt.add_option('--with-coverage', action='store_true', default=False, dest='with_coverage',
help='''Set compiler flags for gcc to enable code coverage information''')
opt.add_option('--with-coverage', action='store_true', default=False,
help='Add compiler flags to enable code coverage information')
def configure(conf):
if conf.options.with_coverage:
if not conf.options.debug:
conf.fatal("Code coverage flags require debug mode compilation (add --debug)")
conf.fatal('Code coverage flags require debug mode compilation (add --debug)')
conf.check_cxx(cxxflags=['-fprofile-arcs', '-ftest-coverage', '-fPIC'],
linkflags=['-fprofile-arcs'], uselib_store='GCOV', mandatory=True)
+61 -46
View File
@@ -1,44 +1,52 @@
# -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
from waflib import Logs, Configure, Utils
import platform
from waflib import Configure, Logs, Utils
def options(opt):
opt.add_option('--debug', '--with-debug', action='store_true', default=False, dest='debug',
help='''Compile in debugging mode with minimal optimizations (-O0 or -Og)''')
opt.add_option('--debug', '--with-debug', action='store_true', default=False,
help='Compile in debugging mode with minimal optimizations (-Og)')
def configure(conf):
conf.start_msg('Checking C++ compiler version')
cxx = conf.env['CXX_NAME'] # CXX_NAME is the generic name of the compiler
ccver = tuple(int(i) for i in conf.env['CC_VERSION'])
cxx = conf.env.CXX_NAME # generic name of the compiler
ccver = tuple(int(i) for i in conf.env.CC_VERSION)
ccverstr = '.'.join(conf.env.CC_VERSION)
errmsg = ''
warnmsg = ''
if cxx == 'gcc':
if ccver < (4, 8, 2):
if ccver < (5, 3, 0):
errmsg = ('The version of gcc you are using is too old.\n'
'The minimum supported gcc version is 4.8.2.')
'The minimum supported gcc version is 7.4.0.')
elif ccver < (7, 4, 0):
warnmsg = ('Using a version of gcc older than 7.4.0 is not '
'officially supported and may result in build failures.')
conf.flags = GccFlags()
elif cxx == 'clang':
if ccver < (3, 4, 0):
if Utils.unversioned_sys_platform() == 'darwin' and ccver < (9, 0, 0):
errmsg = ('The version of Xcode you are using is too old.\n'
'The minimum supported Xcode version is 9.0.')
elif ccver < (4, 0, 0):
errmsg = ('The version of clang you are using is too old.\n'
'The minimum supported clang version is 3.4.0.')
'The minimum supported clang version is 4.0.')
conf.flags = ClangFlags()
else:
warnmsg = 'Note: %s compiler is unsupported' % cxx
warnmsg = '%s compiler is unsupported' % cxx
conf.flags = CompilerFlags()
if errmsg:
conf.end_msg('.'.join(conf.env['CC_VERSION']), color='RED')
conf.end_msg(ccverstr, color='RED')
conf.fatal(errmsg)
elif warnmsg:
conf.end_msg('.'.join(conf.env['CC_VERSION']), color='YELLOW')
Logs.warn(warnmsg)
conf.end_msg(ccverstr, color='YELLOW')
Logs.warn('WARNING: ' + warnmsg)
else:
conf.end_msg('.'.join(conf.env['CC_VERSION']))
conf.end_msg(ccverstr)
conf.areCustomCxxflagsPresent = (len(conf.env.CXXFLAGS) > 0)
# General flags are always applied (e.g., selecting C++11 mode)
# General flags are always applied (e.g., selecting C++ language standard)
generalFlags = conf.flags.getGeneralFlags(conf)
conf.add_supported_cxxflags(generalFlags['CXXFLAGS'])
conf.add_supported_linkflags(generalFlags['LINKFLAGS'])
@@ -53,10 +61,10 @@ def check_compiler_flags(conf):
extraFlags = conf.flags.getDebugFlags(conf)
if conf.areCustomCxxflagsPresent:
missingFlags = [x for x in extraFlags['CXXFLAGS'] if x not in conf.env.CXXFLAGS]
if len(missingFlags) > 0:
Logs.warn("Selected debug mode, but CXXFLAGS is set to a custom value '%s'"
% " ".join(conf.env.CXXFLAGS))
Logs.warn("Default flags '%s' are not activated" % " ".join(missingFlags))
if missingFlags:
Logs.warn('Selected debug mode, but CXXFLAGS is set to a custom value "%s"'
% ' '.join(conf.env.CXXFLAGS))
Logs.warn('Default flags "%s" will not be used' % ' '.join(missingFlags))
else:
extraFlags = conf.flags.getOptimizedFlags(conf)
@@ -106,6 +114,9 @@ def add_supported_linkflags(self, linkflags):
class CompilerFlags(object):
def getCompilerVersion(self, conf):
return tuple(int(i) for i in conf.env.CC_VERSION)
def getGeneralFlags(self, conf):
"""Get dict of CXXFLAGS, LINKFLAGS, and DEFINES that are always needed"""
return {'CXXFLAGS': [], 'LINKFLAGS': [], 'DEFINES': []}
@@ -124,24 +135,29 @@ class GccBasicFlags(CompilerFlags):
"""
def getGeneralFlags(self, conf):
flags = super(GccBasicFlags, self).getGeneralFlags(conf)
flags['CXXFLAGS'] += ['-std=c++11']
flags['CXXFLAGS'] += ['-std=c++14']
if Utils.unversioned_sys_platform() == 'linux':
flags['LINKFLAGS'] += ['-fuse-ld=gold']
elif Utils.unversioned_sys_platform() == 'freebsd':
flags['LINKFLAGS'] += ['-fuse-ld=lld']
return flags
def getDebugFlags(self, conf):
flags = super(GccBasicFlags, self).getDebugFlags(conf)
flags['CXXFLAGS'] += ['-O0',
'-Og', # gcc >= 4.8, clang >= 4.0
flags['CXXFLAGS'] += ['-Og',
'-g3',
'-pedantic',
'-Wall',
'-Wextra',
'-Werror',
'-Wcatch-value=2',
'-Wextra-semi',
'-Wnon-virtual-dtor',
'-Wno-error=deprecated-declarations', # Bug #3795
'-Wno-error=maybe-uninitialized', # Bug #1615
'-Wno-unused-parameter',
]
flags['LINKFLAGS'] += ['-fuse-ld=gold', '-Wl,-O1']
flags['LINKFLAGS'] += ['-Wl,-O1']
return flags
def getOptimizedFlags(self, conf):
@@ -151,62 +167,61 @@ class GccBasicFlags(CompilerFlags):
'-pedantic',
'-Wall',
'-Wextra',
'-Wcatch-value=2',
'-Wextra-semi',
'-Wnon-virtual-dtor',
'-Wno-unused-parameter',
]
flags['LINKFLAGS'] += ['-fuse-ld=gold', '-Wl,-O1']
flags['LINKFLAGS'] += ['-Wl,-O1']
return flags
class GccFlags(GccBasicFlags):
def getDebugFlags(self, conf):
flags = super(GccFlags, self).getDebugFlags(conf)
version = tuple(int(i) for i in conf.env['CC_VERSION'])
if version < (5, 1, 0):
flags['CXXFLAGS'] += ['-Wno-missing-field-initializers']
flags['CXXFLAGS'] += ['-fdiagnostics-color'] # gcc >= 4.9
flags['CXXFLAGS'] += ['-fdiagnostics-color',
'-Wredundant-tags',
]
if platform.machine() == 'armv7l' and self.getCompilerVersion(conf) >= (7, 1, 0):
flags['CXXFLAGS'] += ['-Wno-psabi'] # Bug #5106
return flags
def getOptimizedFlags(self, conf):
flags = super(GccFlags, self).getOptimizedFlags(conf)
version = tuple(int(i) for i in conf.env['CC_VERSION'])
if version < (5, 1, 0):
flags['CXXFLAGS'] += ['-Wno-missing-field-initializers']
flags['CXXFLAGS'] += ['-fdiagnostics-color'] # gcc >= 4.9
flags['CXXFLAGS'] += ['-fdiagnostics-color',
'-Wredundant-tags',
]
if platform.machine() == 'armv7l' and self.getCompilerVersion(conf) >= (7, 1, 0):
flags['CXXFLAGS'] += ['-Wno-psabi'] # Bug #5106
return flags
class ClangFlags(GccBasicFlags):
def getGeneralFlags(self, conf):
flags = super(ClangFlags, self).getGeneralFlags(conf)
version = tuple(int(i) for i in conf.env['CC_VERSION'])
if Utils.unversioned_sys_platform() == 'darwin' and version >= (9, 0, 0): # Bug #4296
if Utils.unversioned_sys_platform() == 'darwin':
# Bug #4296
flags['CXXFLAGS'] += [['-isystem', '/usr/local/include'], # for Homebrew
['-isystem', '/opt/local/include']] # for MacPorts
elif Utils.unversioned_sys_platform() == 'freebsd':
# Bug #4790
flags['CXXFLAGS'] += [['-isystem', '/usr/local/include']]
return flags
def getDebugFlags(self, conf):
flags = super(ClangFlags, self).getDebugFlags(conf)
flags['CXXFLAGS'] += ['-fcolor-diagnostics',
'-Wextra-semi',
'-Wundefined-func-template',
'-Wno-error=deprecated-register',
'-Wno-error=infinite-recursion', # Bug #3358
'-Wno-error=keyword-macro', # Bug #3235
'-Wno-error=unneeded-internal-declaration', # Bug #1588
'-Wno-unused-local-typedef', # Bugs #2657 and #3209
]
version = tuple(int(i) for i in conf.env['CC_VERSION'])
if version < (3, 9, 0) or (Utils.unversioned_sys_platform() == 'darwin' and version < (8, 1, 0)):
flags['CXXFLAGS'] += ['-Wno-unknown-pragmas']
if self.getCompilerVersion(conf) < (6, 0, 0):
flags['CXXFLAGS'] += ['-Wno-missing-braces'] # Bug #4721
return flags
def getOptimizedFlags(self, conf):
flags = super(ClangFlags, self).getOptimizedFlags(conf)
flags['CXXFLAGS'] += ['-fcolor-diagnostics',
'-Wextra-semi',
'-Wundefined-func-template',
'-Wno-unused-local-typedef', # Bugs #2657 and #3209
]
version = tuple(int(i) for i in conf.env['CC_VERSION'])
if version < (3, 9, 0) or (Utils.unversioned_sys_platform() == 'darwin' and version < (8, 1, 0)):
flags['CXXFLAGS'] += ['-Wno-unknown-pragmas']
if self.getCompilerVersion(conf) < (6, 0, 0):
flags['CXXFLAGS'] += ['-Wno-missing-braces'] # Bug #4721
return flags
+20 -23
View File
@@ -19,23 +19,20 @@ When using this tool, the wscript will look like:
'''
import re
from waflib import Utils, Logs
from waflib import Utils
from waflib.Configure import conf
OPENSSL_VERSION_FILE = 'opensslv.h'
OPENSSL_DIR_OSX = ['/usr/local', '/opt/local', '/usr/local/opt/openssl']
OPENSSL_DIR = ['/usr', '/usr/local', '/opt/local', '/sw']
def options(opt):
opt.add_option('--with-openssl', type='string', default=None, dest='openssl_dir',
help='''Path to where OpenSSL is installed, e.g., /usr/local''')
help='directory where OpenSSL is installed, e.g., /usr/local')
@conf
def __openssl_get_version_file(self, dir):
try:
return self.root.find_dir(dir).find_node('%s/%s' % ('include/openssl',
OPENSSL_VERSION_FILE))
return self.root.find_dir(dir).find_node('include/openssl/opensslv.h')
except:
return None
@@ -47,8 +44,8 @@ def __openssl_find_root_and_version_file(self, *k, **kw):
if root and file:
return (root, file)
openssl_dir = [];
if Utils.unversioned_sys_platform() == "darwin":
openssl_dir = []
if Utils.unversioned_sys_platform() == 'darwin':
openssl_dir = OPENSSL_DIR_OSX
else:
openssl_dir = OPENSSL_DIR
@@ -66,10 +63,7 @@ def __openssl_find_root_and_version_file(self, *k, **kw):
@conf
def check_openssl(self, *k, **kw):
atleast_version = kw.get('atleast_version', 0)
var = kw.get('uselib_store', 'OPENSSL')
self.start_msg('Checking for OpenSSL lib')
self.start_msg('Checking for OpenSSL version')
(root, file) = self.__openssl_find_root_and_version_file(*k, **kw)
try:
@@ -88,18 +82,21 @@ def check_openssl(self, *k, **kw):
except:
self.fatal('OpenSSL version file is not found or is not usable')
atleast_version = kw.get('atleast_version', 0)
if int(version, 16) < atleast_version:
self.fatal("The version of OpenSSL is too old\n" +
"Please upgrade your distribution or install newer version of OpenSSL library")
self.fatal('The version of OpenSSL is too old\n'
'Please upgrade your distribution or manually install a newer version of OpenSSL')
kwargs = {}
if 'msg' not in kw:
kw['msg'] = 'Checking if OpenSSL library works'
if 'lib' not in kw:
kw['lib'] = ['ssl', 'crypto']
if 'uselib_store' not in kw:
kw['uselib_store'] = 'OPENSSL'
if 'define_name' not in kw:
kw['define_name'] = 'HAVE_%s' % kw['uselib_store']
if root:
kwargs['includes'] = "%s/include" % root
kwargs['libpath'] = "%s/lib" % root
kw['includes'] = '%s/include' % root
kw['libpath'] = '%s/lib' % root
libcrypto = self.check_cxx(lib=['ssl', 'crypto'],
msg='Checking if OpenSSL library works',
define_name='HAVE_%s' % var,
uselib_store=var,
mandatory=True,
**kwargs)
self.check_cxx(**kw)
+22 -31
View File
@@ -4,48 +4,39 @@
from waflib import Logs, Utils, TaskGen
from waflib.Configure import conf
OSX_SECURITY_CODE = '''
#include <CoreFoundation/CoreFoundation.h>
#include <Security/Security.h>
#include <Security/SecRandom.h>
#include <CoreServices/CoreServices.h>
#include <Security/SecDigestTransform.h>
int main() {}
'''
@conf
def check_osx_framework_cxx(conf, fw_name, **kw):
conf.check_cxx(framework_name=fw_name,
uselib_store='OSX_' + fw_name.upper(),
fragment='#include <{0}/{0}.h>\nint main() {{}}'.format(fw_name),
**kw)
OSX_SYSTEMCONFIGURATION_CODE = '''
#include <CoreFoundation/CoreFoundation.h>
#include <SystemConfiguration/SystemConfiguration.h>
int main() {}
'''
@conf
def check_osx_framework_mm(conf, fw_name, **kw):
conf.check_cxx(framework_name=fw_name,
uselib_store='OSX_' + fw_name.upper(),
fragment='#import <{0}/{0}.h>\nint main() {{}}'.format(fw_name),
compile_filename='test.mm',
**kw)
@conf
def check_osx_frameworks(conf, *k, **kw):
if Utils.unversioned_sys_platform() == "darwin":
if Utils.unversioned_sys_platform() == 'darwin':
try:
conf.check_cxx(framework_name='CoreFoundation', uselib_store='OSX_COREFOUNDATION',
mandatory=True)
conf.check_cxx(framework_name='CoreServices', uselib_store='OSX_CORESERVICES',
mandatory=True)
conf.check_cxx(framework_name='Security', uselib_store='OSX_SECURITY',
use='OSX_COREFOUNDATION', fragment=OSX_SECURITY_CODE,
mandatory=True)
conf.check_cxx(framework_name='SystemConfiguration', uselib_store='OSX_SYSTEMCONFIGURATION',
use='OSX_COREFOUNDATION', fragment=OSX_SYSTEMCONFIGURATION_CODE,
mandatory=True)
conf.check_osx_framework_cxx('CoreFoundation', mandatory=True)
conf.check_osx_framework_cxx('Security', use='OSX_COREFOUNDATION', mandatory=True)
conf.check_osx_framework_cxx('SystemConfiguration', use='OSX_COREFOUNDATION', mandatory=True)
conf.check_cxx(framework_name='Foundation', uselib_store='OSX_FOUNDATION',
mandatory=True, compile_filename='test.mm')
conf.check_cxx(framework_name='CoreWLAN', uselib_store='OSX_COREWLAN',
use="OSX_FOUNDATION", mandatory=True, compile_filename='test.mm')
conf.check_osx_framework_mm('Foundation', mandatory=True)
conf.check_osx_framework_mm('CoreWLAN', use='OSX_FOUNDATION', mandatory=True)
conf.define('HAVE_OSX_FRAMEWORKS', 1)
conf.env['HAVE_OSX_FRAMEWORKS'] = True
except:
Logs.warn("Compiling on macOS, but required framework(s) is(are) not functional.")
Logs.warn("Note that the frameworks are known to work only with the Apple clang compiler.")
Logs.warn('Building on macOS, but one or more required frameworks are not functional.')
Logs.warn('Note that the frameworks are known to work only with the Apple clang compiler.')
@TaskGen.extension('.mm')
def m_hook(self, node):
"""Alias .mm files to be compiled the same as .cpp files, gcc/clang will do the right thing."""
'''Alias .mm files to be compiled the same as .cpp files, clang will do the right thing.'''
return self.create_compiled_task('cxx', node)
+2 -7
View File
@@ -52,7 +52,7 @@ Note that precompiled header must have multiple inclusion guards. If the guards
"""
import os
from waflib import Task, TaskGen, Logs, Utils
from waflib import Task, TaskGen, Utils
from waflib.Tools import c_preproc, cxx
@@ -67,11 +67,6 @@ def options(opt):
def configure(conf):
if (conf.options.with_pch and conf.env['COMPILER_CXX'] in PCH_COMPILER_OPTIONS.keys()):
if Utils.unversioned_sys_platform() == "darwin" and conf.env['CXX_NAME'] == 'clang':
version = tuple(int(i) for i in conf.env['CC_VERSION'])
if version < (6, 1, 0):
# Issue #2804
return
conf.env.WITH_PCH = True
flags = PCH_COMPILER_OPTIONS[conf.env['COMPILER_CXX']]
conf.env.CXXPCH_F = flags[0]
@@ -134,7 +129,7 @@ def add_pch(self):
x.env.append_value('CXXFLAGS', self.env['CXXPCH_F'] + [pch.target])
class gchx(Task.Task):
run_str = '${CXX} ${ARCH_ST:ARCH} ${CXXFLAGS} ${CPPFLAGS} ${CXXPCH_FLAGS} ${FRAMEWORKPATH_ST:FRAMEWORKPATH} ${CPPPATH_ST:INCPATHS} ${DEFINES_ST:DEFINES} ${CXXPCH_F:SRC} ${CXX_SRC_F}${SRC[0].abspath()} ${CXX_TGT_F}${TGT[0].abspath()}'
run_str = '${CXX} ${ARCH_ST:ARCH} ${CXXFLAGS} ${CXXPCH_FLAGS} ${FRAMEWORKPATH_ST:FRAMEWORKPATH} ${CPPPATH_ST:INCPATHS} ${DEFINES_ST:DEFINES} ${CXXPCH_F:SRC} ${CXX_SRC_F}${SRC[0].abspath()} ${CXX_TGT_F}${TGT[0].abspath()} ${CPPFLAGS}'
scan = c_preproc.scan
color = 'BLUE'
ext_out=['.h']
+8 -8
View File
@@ -44,28 +44,28 @@ def apply_sphinx(self):
task.inputs.append(conf)
confdir = conf.parent.abspath()
buildername = getattr(self, "builder", "html")
srcdir = getattr(self, "srcdir", confdir)
outdir = self.path.find_or_declare(getattr(self, "outdir", buildername)).get_bld()
doctreedir = getattr(self, "doctreedir", os.path.join(outdir.abspath(), ".doctrees"))
buildername = getattr(self, 'builder', 'html')
srcdir = getattr(self, 'srcdir', confdir)
outdir = self.path.find_or_declare(getattr(self, 'outdir', buildername)).get_bld()
doctreedir = getattr(self, 'doctreedir', os.path.join(outdir.abspath(), '.doctrees'))
task.env['BUILDERNAME'] = buildername
task.env['SRCDIR'] = srcdir
task.env['DOCTREEDIR'] = doctreedir
task.env['OUTDIR'] = outdir.abspath()
task.env['VERSION'] = "version=%s" % self.VERSION
task.env['RELEASE'] = "release=%s" % self.VERSION
task.env['VERSION'] = 'version=%s' % self.version
task.env['RELEASE'] = 'release=%s' % getattr(self, 'release', self.version)
import imp
confData = imp.load_source('sphinx_conf', conf.abspath())
if buildername == "man":
if buildername == 'man':
for i in confData.man_pages:
target = outdir.find_or_declare('%s.%d' % (i[1], i[4]))
task.outputs.append(target)
if self.install_path:
self.bld.install_files("%s/man%d/" % (self.install_path, i[4]), target)
self.bld.install_files('%s/man%d/' % (self.install_path, i[4]), target)
else:
task.outputs.append(outdir)
+5 -6
View File
@@ -1,16 +1,15 @@
#! /usr/bin/env python
# encoding: utf-8
from waflib import Options, Logs
from waflib.Configure import conf
def options(opt):
opt.add_option('--with-sqlite3', type='string', default=None,
dest='with_sqlite3', help='''Path to SQLite3, e.g., /usr/local''')
opt.add_option('--with-sqlite3', type='string', default=None, dest='sqlite3_dir',
help='directory where SQLite3 is installed, e.g., /usr/local')
@conf
def check_sqlite3(self, *k, **kw):
root = k and k[0] or kw.get('path', None) or Options.options.with_sqlite3
root = k and k[0] or kw.get('path', self.options.sqlite3_dir)
mandatory = kw.get('mandatory', True)
var = kw.get('uselib_store', 'SQLITE3')
@@ -20,8 +19,8 @@ def check_sqlite3(self, *k, **kw):
define_name='HAVE_%s' % var,
uselib_store=var,
mandatory=mandatory,
includes="%s/include" % root,
libpath="%s/lib" % root)
includes='%s/include' % root,
libpath='%s/lib' % root)
else:
try:
self.check_cfg(package='sqlite3',
-15
View File
@@ -1,15 +0,0 @@
# -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
def checkForTypeProperty(conf, prop, tparams):
if conf.check_cxx(msg=('Checking for std::%s' % prop),
fragment=('#include <type_traits>\nstatic_assert(std::%s<%s>::value, "");' %
(prop, tparams)),
features='cxx', mandatory=False):
define = 'HAVE_' + prop.upper()
conf.define(define, 1)
conf.env[define] = True
def configure(conf):
checkForTypeProperty(conf, 'is_default_constructible', 'int')
checkForTypeProperty(conf, 'is_nothrow_move_constructible', 'int')
checkForTypeProperty(conf, 'is_nothrow_move_assignable', 'int')
+57 -38
View File
@@ -1,42 +1,61 @@
ndn-cxx authors
===============
# ndn-cxx Authors
## The primary authors are (and/or have been):
The following lists maintainers, primary developers, and all much-appreciated contributors to ndn-cxx in alphabetic order.
The specific contributions of individual authors can be obtained from the git history of the [official ndn-cxx repository](https://github.com/named-data/ndn-cxx).
If you would like to become a contributor to the official repository, please follow the recommendations in https://github.com/named-data/.github/blob/master/CONTRIBUTING.md.
* Alexander Afanasyev <http://lasr.cs.ucla.edu/afanasyev/index.html>
* Yingdi Yu <http://irl.cs.ucla.edu/~yingdi/>
* Junxiao Shi <http://www.cs.arizona.edu/people/shijunxiao/>
* Jeff Thompson <jefft0@remap.ucla.edu>
* Zhenkai Zhu <http://irl.cs.ucla.edu/~zhenkai/>
* Sepehr Abdous <https://sepehrabdous.github.io>
* ***(Maintainer)*** Alexander Afanasyev <https://users.cs.fiu.edu/~afanasyev>
* Syed Obaid Amin <http://obaidamin.weebly.com>
* Hila Ben Abraham <https://sites.wustl.edu/hbabraham>
* Shuo Chen <https://github.com/chenatu>
* Muktadir R. Chowdhury <https://github.com/alvyC>
* Jeremy Clark <https://github.com/jrandallclark>
* Damian Coomes <https://github.com/dmcoomes>
* Stephanie DiBenedetto
* Qiuhan Ding <https://irl.cs.ucla.edu/~qiuhanding>
* Chengyu Fan <https://github.com/chengyu>
* Laqin Fan <https://github.com/laqinfan>
* Ashlesh Gawande <https://www.linkedin.com/in/agawande>
* Chavoosh Ghasemi <https://chavoosh.github.io>
* Mathias Gibbens <https://calenhad.com>
* Nick Gordon <https://github.com/gorgonical>
* Xiaoke Jiang <http://netarchlab.tsinghua.edu.cn/~shock>
* Marcin Juszkiewicz <https://marcin.juszkiewicz.com.pl>
* Luca Keidel <https://lucakeidel.de>
* Spencer Lee <https://wwsw.linkedin.com/in/spenlee>
* Vince Lehman <http://vslehman.com>
* Yanbiao Li <https://www.linkedin.com/pub/yanbiao-li/24/7a1/4ba>
* Teng Liang <https://cs.arizona.edu/~philoliang>
* Weiwei Liu <https://www.linkedin.com/in/weiweiliu10>
* Tianxing Ma <https://github.com/matianxing1992>
* Xingyu Ma <https://www.linkedin.com/pub/xingyu-ma/1a/384/5a8>
* Spyridon Mastorakis <https://sites.google.com/site/spyridonmastorakis>
* Ernest McCracken <https://github.com/emccrckn>
* Stephen McQuistin <https://smcquistin.uk>
* Ilya Moiseenko <https://www.linkedin.com/in/ilya-moiseenko-52884317>
* Alex Nano <http://alexnano.net>
* Eric Newberry <https://ericnewberry.com>
* Arthi Padmanabhan <https://github.com/arthipadmanabhan>
* Ju Pan <https://cs-jupan.com>
* João Pereira <http://website.jpereira.co.uk>
* Davide Pesavento <https://github.com/Pesa>
* José Quevedo <http://atnog.av.it.pt/members/jquevedo>
* Md Ashiqur Rahman <https://ashiqrahman.com>
* Niv Sardi <http://core.evilgiggle.com>
* Wentao Shang <https://irl.cs.ucla.edu/~wentao>
* Susmit Shannigrahi <https://susm.it>
* Junxiao Shi <https://cs.arizona.edu/~shijunxiao>
* Michael Sweatt <https://www.linkedin.com/in/michaelsweatt>
* Jiewen Tan <https://github.com/alanwaketan>
* ***(Former Maintainer)*** Jeff Thompson <https://remap.ucla.edu/jeff-thompson>
* Yukai Tu <https://irl.cs.ucla.edu/~yukai>
* Yingdi Yu <https://irl.cs.ucla.edu/~yingdi>
* Zhiyi Zhang <https://zhiyi-zhang.com>
* Zhenkai Zhu <https://irl.cs.ucla.edu/~zhenkai>
## All project authors and contributors
## Technical Advisors
The following is an inevitably incomplete list of MUCH-APPRECIATED CONTRIBUTORS,
people who have reported bugs, submitted patches, and implemented new features
in the library:
* Wentao Shang <http://irl.cs.ucla.edu/~wentao/>
* Steve DiBenedetto <http://www.cs.colostate.edu/~dibenede/>
* Davide Pesavento <https://www.linkedin.com/in/davidepesavento>
* Syed Obaid Amin <http://obaidamin.weebly.com/>
* Shuo Chen <chenatu2006@gmail.com>
* Hila Ben Abraham <http://research.engineering.wustl.edu/~abrahamh/>
* Xingyu Ma <http://www.linkedin.com/pub/xingyu-ma/1a/384/5a8>
* Michael Sweatt <https://www.linkedin.com/in/michaelsweatt>
* Lixia Zhang <http://www.cs.ucla.edu/~lixia/home.html>
* Jeff Burke <http://remap.ucla.edu/jburke/>
* Xiaoke Jiang <http://netarchlab.tsinghua.edu.cn/~shock/>
* Jiewen Tan <alanwake@ucla.edu>
* Vince Lehman <http://vslehman.com>
* Mathias Gibbens <gibmat@cs.arizona.edu>
* Chengyu Fan <chengyu@cs.colostate.edu>
* Qiuhan Ding <http://irl.cs.ucla.edu/~qiuhanding/>
* Spyridon Mastorakis <http://cs.ucla.edu/~mastorakis/>
* Eric Newberry <http://cs.arizona.edu/~enewberry/>
* João Pereira <http://website.jpereira.co.uk>
* Mickey Sweatt <https://www.linkedin.com/in/michaelsweatt>
* Yanbiao Li <https://www.linkedin.com/pub/yanbiao-li/24/7a1/4ba>
* Marcin Juszkiewicz <http://marcin.juszkiewicz.com.pl/>
* Susmit Shannigrahi <https://www.linkedin.com/in/susmit-shannigrahi-90433b8>
* José Quevedo <http://atnog.av.it.pt/members/jquevedo>
* Zhiyi Zhang <http://irl.cs.ucla.edu/~zhiyi/>
* Jeff Burke <https://jeff-burke.com>
* Beichuan Zhang <https://cs.arizona.edu/~bzhang>
* Lixia Zhang <https://cs.ucla.edu/~lixia>
+474 -472
View File
File diff suppressed because it is too large. Load diff
+19 -18
View File
@@ -1,22 +1,24 @@
Notes for ndn-cxx developers
============================
If you are new to the NDN community of software generally, read the
[Contributor's Guide](https://github.com/named-data/.github/blob/master/CONTRIBUTING.md).
Code style
----------
ndn-cxx code is subject to [ndn-cxx code style](http://named-data.net/doc/ndn-cxx/current/code-style.html).
ndn-cxx code is subject to [ndn-cxx code style](https://named-data.net/doc/ndn-cxx/current/code-style.html).
Licensing
---------
Contributions to the library must be licensed under LGPL 3.0 or compatible license. If
you are choosing LGPL 3.0, please use the following license boilerplate in all `.hpp` and
Contributions to the library must be licensed under the LGPL v3 or compatible license. If
you are choosing LGPL v3, please use the following license boilerplate in all `.hpp` and
`.cpp` files:
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/*
* Copyright (c) [Year(s)] [Copyright Holder].
* Copyright (c) [Year(s)] [Copyright Holder(s)].
*
* This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
*
@@ -43,29 +45,29 @@ you are choosing LGPL 3.0, please use the following license boilerplate in all `
If you are affiliated to an NSF-supported NDN project institution, please use the [NDN Team License
Boilerplate](https://redmine.named-data.net/projects/ndn-cxx/wiki/NDN_Team_License_Boilerplate_(ndn-cxx)).
Running unit-tests
Running unit tests
------------------
To run unit tests, ndn-cxx needs to be configured, build with unit test support, and installed
To run the unit tests, ndn-cxx needs to be built with unit test support and installed
into the configured location. For example:
./waf configure --with-tests
./waf configure --with-tests # --debug is also strongly recommended while developing
./waf
sudo ./waf install
**Note**: On Linux platform you also need to run `sudo ldconfig` to reconfigure dynamic loader
run-time bindings. On FreeBSD, use `sudo ldconfig -a` instead.
**Note**: On Linux you also need to run `sudo ldconfig` to reconfigure dynamic loader
run-time bindings.
The simplest way to run tests, is just to run the compiled binary without any parameters:
The simplest way to run the tests is to launch the compiled binary without any parameters:
./build/unit-tests
[Boost.Test framework](http://www.boost.org/doc/libs/1_54_0/libs/test/doc/html/index.html)
The [Boost.Test framework](https://www.boost.org/doc/libs/1_65_1/libs/test/doc/html/index.html)
is very flexible and allows a number of run-time customization of what tests should be run.
For example, it is possible to choose to run only a specific test suite, only a specific
test case within a suite, or specific test cases within specific test suites:
# Run only Face test suite tests (tests/unit-tests/face.t.cpp)
# Run only Face test suite tests (tests/unit/face.t.cpp)
./build/unit-tests -t TestFace
# Run only test case ExpressInterestData from the same test suite
@@ -76,8 +78,8 @@ test case within a suite, or specific test cases within specific test suites:
By default, Boost.Test framework will produce verbose output only when a test case fails.
If it is desired to see verbose output (result of each test assertion), add `-l all`
option to `./build/unit-tests` command. To see test progress, you can use `-l test_suite`
or `-p` to show progress bar:
option to `./build/unit-tests` command. To see test progress, you can use `-l test_suite`,
or `-p` to show a progress bar:
# Show report all log messages including the passed test notification
./build/unit-tests -l all
@@ -92,9 +94,8 @@ or `-p` to show progress bar:
./build/unit-tests -p
There are many more command line options available, information about which can be obtained
either from the command line using `--help` switch, or online on
[Boost.Test library](http://www.boost.org/doc/libs/1_54_0/libs/test/doc/html/index.html)
website.
either from the command line using the `--help` switch, or online on the
[Boost.Test website](https://www.boost.org/doc/libs/1_65_1/libs/test/doc/html/index.html).
**Warning:** If you have customized parameters for NDN platform using `client.conf` in
`/etc/ndn` or `/usr/local/etc/ndn` (or other `@SYSCONFDIR@/etc` if it was configured to custom
+29 -19
View File
@@ -1,32 +1,42 @@
ndn-cxx: NDN C++ library with eXperimental eXtensions
=====================================================
# ndn-cxx: NDN C++ library with eXperimental eXtensions
![Language](https://img.shields.io/badge/C%2B%2B-14-blue.svg)
[![Build Status](https://travis-ci.org/named-data/ndn-cxx.svg?branch=master)](https://travis-ci.org/named-data/ndn-cxx)
![Latest Version](https://img.shields.io/github/tag/named-data/ndn-cxx.svg?color=darkkhaki&label=latest%20version)
ndn-cxx is a C++ library, implementing Named Data Networking (NDN) primitives that can be
used to implement various NDN applications. The library is currently being used as part of
the following projects:
**ndn-cxx** is a C++14 library implementing Named Data Networking (NDN) primitives
that can be used to write various NDN applications. The library is currently being
used by the following projects:
* [NFD - NDN Forwarding Daemon](https://github.com/named-data/NFD)
* [NLSR - Named-data Link-State Routing protocol](https://github.com/named-data/NLSR)
* [repo-ng - Next generation of NDN repository](https://github.com/named-data/repo-ng)
* [ChronoChat - Multi-user NDN chat application](https://github.com/named-data/ChronoChat)
* [ChronoSync - Sync library for multiuser realtime applications for NDN](https://github.com/named-data/ChronoSync)
* [ndn-tools - NDN Essential Tools](https://github.com/named-data/ndn-tools)
* [ndn-traffic-generator - Traffic Generator For NDN](https://github.com/named-data/ndn-traffic-generator)
* [ndn-tools - Essential NDN command-line tools](https://github.com/named-data/ndn-tools)
* [repo-ng - Next generation NDN repository](https://github.com/named-data/repo-ng)
* [ChronoSync - Sync library for multi-user real-time applications](https://github.com/named-data/ChronoSync)
* [PSync - Partial and full synchronization library](https://github.com/named-data/PSync)
* [ndn-traffic-generator - Traffic generator for NDN](https://github.com/named-data/ndn-traffic-generator)
* [NAC - Name-based Access Control](https://github.com/named-data/name-based-access-control)
* [NDNS - Domain Name Service for NDN](https://github.com/named-data/ndns)
See the file [`docs/INSTALL.rst`](https://github.com/named-data/ndn-cxx/blob/master/docs/INSTALL.rst)
for build and install instructions.
## Documentation
Please submit any bugs or issues to the ndn-cxx issue tracker:
https://redmine.named-data.net/projects/ndn-cxx/issues
See [`docs/INSTALL.rst`](docs/INSTALL.rst) for compilation and installation instructions.
## More documentation
Extensive documentation is available on the library's [homepage](https://named-data.net/doc/ndn-cxx/).
Extensive documentation of the library is available on the library's homepage:
http://www.named-data.net/doc/ndn-cxx/
## Reporting bugs
Please submit any bugs or feature requests to the
[ndn-cxx issue tracker](https://redmine.named-data.net/projects/ndn-cxx/issues).
## Contributing
We greatly appreciate contributions to the ndn-cxx code base.
If you are new to the NDN software community, please read the
[Contributor's Guide](https://github.com/named-data/.github/blob/master/CONTRIBUTING.md)
to get started.
## License
ndn-cxx is an open source project licensed under LGPL 3.0 license. For more information about
the license, refer to [`COPYING.md`](https://github.com/named-data/ndn-cxx/blob/master/COPYING.md).
ndn-cxx is an open source project licensed under the LGPL version 3.
See [`COPYING.md`](COPYING.md) for more information.
+14 -12
View File
@@ -1,25 +1,27 @@
; "transport" specifies Face's default transport connection.
; The value is a unix or tcp4 scheme Face URI.
; The value can be a "unix:" or "tcp4:" Face URI.
;
; For example:
;
; unix:///var/run/nfd.sock
; tcp://192.0.2.1
; tcp4://example.com:6363
transport=unix:///var/run/nfd.sock
;
; The default value of this field is platform-dependent, being unix:///run/nfd.sock on Linux and
; unix:///var/run/nfd.sock on other platforms.
;
;transport=unix:///var/run/nfd.sock
; "pib" determines which Public Info Base (PIB) should used by default in applications.
; If "pib" is not specified, the default PIB will be used.
; Note that default PIB could be different on different system.
; If "pib" is not specified, a platform-dependent default will be used.
; If "pib" is specified, it may have a value of:
; pib-sqlite3
; pib=pib-sqlite3
;
;pib=pib-sqlite3
; "tpm" determines which Trusted Platform Module (TPM) should used by default in applications.
; If "tpm" is not specified, the default TPM will be used.
; Note that default TPM could be different on different system.
; If "tpm" is not specified, a platform-dependent default will be used.
; If "tpm" is specified, it may have a value of:
; tpm-osxkeychain (default in OS X)
; tpm-file (default in operating systems other than OS X)
; tpm=tpm-file
; tpm-osxkeychain (default on macOS)
; tpm-file (default in operating systems other than macOS)
;
;tpm=tpm-file
+178 -200
View File
@@ -1,219 +1,215 @@
.. _Getting Started with ndn-cxx:
Getting started with ndn-cxx
============================
Supported platforms
-------------------
ndn-cxx uses continuous integration and has been tested on the following
platforms:
ndn-cxx is built against a continuous integration system and has been tested on the
following platforms:
- Ubuntu 14.04 (64-bit and 32-bit)
- Ubuntu 16.04 (64-bit and 32-bit)
- Ubuntu 17.04 (64-bit and 32-bit)
- OS X 10.10
- OS X 10.11
- macOS 10.12
- Ubuntu 18.04 (amd64, armhf, i386)
- Ubuntu 20.04 (amd64)
- macOS 10.13
- macOS 10.14
- macOS 10.15
- CentOS 8
ndn-cxx is known to work on the following platforms, although they are not officially
supported:
- Fedora >= 20
- CentOS >= 6.2
- Debian 10 (Buster)
- Fedora >= 29
- Gentoo Linux
- FreeBSD >= 10.0
- Raspbian >= 3.12
- Raspbian >= 2019-06-20 (Buster)
- FreeBSD >= 11.3
Prerequisites
-------------
Required:
~~~~~~~~~
Required
~~~~~~~~
- ``python`` >= 2.6
- ``libsqlite3``
- OpenSSL >= 1.0.1
- ``pkg-config``
- Boost libraries >= 1.54
- OSX Security framework (on OSX/macOS platform only)
- GCC >= 7.4 or clang >= 4.0 (on Linux and FreeBSD)
- Xcode >= 9.0 (on macOS)
- Python >= 3.6
- pkg-config
- Boost >= 1.65.1
- OpenSSL >= 1.0.2
- SQLite 3.x
Following are the detailed steps for each platform to install the compiler, all necessary
development tools and libraries, and ndn-cxx prerequisites.
To build ndn-cxx from source, one must first install a C++ compiler and all necessary
development tools and libraries:
- OS X / macOS
Install Xcode from AppStore or at least Command Line Tools (``xcode-select --install``)
* When using MacPorts
In a terminal, enter::
sudo port install pkgconfig boost sqlite3 openssl
* When using Homebrew
In a terminal, enter::
brew install boost openssl pkg-config
.. note::
If a major OS upgrade is performed after installing dependencies with
MacPorts or Homebrew, remember to reinstall all packages.
- Ubuntu
- On **Ubuntu**
In a terminal, enter::
sudo apt-get install build-essential libsqlite3-dev libboost-all-dev libssl-dev
sudo apt install g++ pkg-config python3-minimal libboost-all-dev libssl-dev libsqlite3-dev
- Fedora
- On **CentOS** and **Fedora**
In a terminal, enter::
sudo yum install gcc-g++ git
sudo yum install sqlite-devel boost-devel openssl-devel
sudo dnf install gcc-c++ pkgconf-pkg-config python3 boost-devel openssl-devel sqlite-devel
Optional:
~~~~~~~~~
- On **macOS**
To build tutorials, manpages, and API documentation the following
dependencies need to be installed:
* Install either Xcode (from the App Store) or the Command Line Tools
(with ``xcode-select --install``)
- ``doxygen``
- ``graphviz``
- ``python-sphinx`` and sphinx extensions ``sphinxcontrib-doxylink``,
``sphinxcontrib-googleanalytics``
* If using Homebrew (recommended), enter the following in a terminal::
The following lists steps for common platforms to install these prerequisites:
brew install boost openssl pkg-config
- On OS X / macOS with MacPorts::
.. warning::
sudo port install doxygen graphviz py27-sphinx sphinx_select
sudo port select sphinx py27-sphinx
If a major OS upgrade is performed after installing the dependencies
with Homebrew, remember to reinstall all packages.
# Install sphinx extensions
sudo port install py27-pip
sudo port select pip pip27
sudo pip install sphinxcontrib-doxylink sphinxcontrib-googleanalytics
- On **FreeBSD**
- On Ubuntu::
In a terminal, enter::
sudo apt-get install doxygen graphviz python-sphinx python-pip
sudo pip install sphinxcontrib-doxylink sphinxcontrib-googleanalytics
sudo pkg install pkgconf python3 boost-libs openssl sqlite3
- On Fedora::
Optional
~~~~~~~~
sudo yum install doxygen graphviz python-sphinx
sudo pip install sphinxcontrib-doxylink sphinxcontrib-googleanalytics
To build tutorials, manpages, and API documentation the following additional dependencies
need to be installed:
.. _build:
- doxygen
- graphviz
- sphinx >= 1.3
- sphinxcontrib-doxylink
The following lists the steps to install these prerequisites on various common platforms.
- On **Ubuntu**:
.. code-block:: sh
sudo apt install doxygen graphviz python3-pip
sudo pip3 install sphinx sphinxcontrib-doxylink
- On **CentOS** and **Fedora**:
.. code-block:: sh
sudo dnf config-manager --enable PowerTools # on CentOS only
sudo dnf install doxygen graphviz python3-pip
pip3 install --user sphinx sphinxcontrib-doxylink
- On **macOS**:
.. code-block:: sh
brew install doxygen graphviz
sudo pip install sphinx sphinxcontrib-doxylink
- On **FreeBSD**:
.. code-block:: sh
sudo pkg install doxygen graphviz py37-sphinx
Build
-----
(These are instructions to build ndn-cxx. To do development of ndn-cxx
code and update the build system, see Development.)
.. note::
These are instructions for regular builds of ndn-cxx (release mode). If you are
planning to develop the ndn-cxx code itself, you should do a :ref:`Development build`.
To build in a terminal, change directory to the ndn-cxx root. Enter:
To build in a terminal, change directory to the ndn-cxx root, then enter:
::
.. code-block:: sh
./waf configure
./waf configure # on CentOS, add --without-pch
./waf
sudo ./waf install
By default, only the shared version of ndn-cxx library is built. To build the static library,
use ``--enable-static`` option for ``./waf configure`` command. For example::
By default, only the shared variant of the ndn-cxx library will be built. To build the
static library, pass ``--enable-static`` to the ``./waf configure`` command:
.. code-block:: sh
./waf configure --enable-static
To disable build of the shared library and build only the static library, use additional
``--disable-shared`` option. Note that at least one version of the library needs to be
enabled.
To disable the build of the shared library and build only the static library, use the
additional ``--disable-shared`` option. Note that at least one variant of the library
needs to be enabled.
::
.. code-block:: sh
./waf configure --enable-static --disable-shared
On Linux, it is necessary to run the following command after the shared library has
been installed:
After the shared library is built and installed, some systems require additional actions.
.. code-block:: sh
- on Linux::
sudo ldconfig
sudo ldconfig
.. note::
When the library is installed in a non-standard path (in general: not in ``/usr/lib``
or ``/usr/local/lib``; on some Linux distros including Fedora: not in ``/usr/lib``),
additional actions may be necessary.
- on FreeBSD::
The installation path should be added to ``/etc/ld.so.conf`` (or in
``/etc/ld.so.conf.d``) **before** running ``sudo ldconfig``. For example:
sudo ldconfig -m
.. code-block:: sh
.. note::
When library is installed in a non-standard path (in general: not in ``/usr/lib`` or
``/usr/local/lib``; on some Linux distros including Fedora: not in ``/usr/lib``),
additional actions may be necessary.
echo /usr/local/lib | sudo tee /etc/ld.so.conf.d/ndn-cxx.conf
The installation path should be added to ``/etc/ld.so.conf`` (or in
``/etc/ld.so.conf.d``) **before** running ``sudo ldconfig``. For example::
Alternatively, the ``LD_LIBRARY_PATH`` environment variable can be set to point to
the installation directory of the shared library:
echo /usr/local/lib | sudo tee /etc/ld.so.conf.d/ndn-cxx.conf
.. code-block:: sh
Alternatively, ``LD_LIBRARY_PATH`` environment variable should be set to the location of
the library::
export LD_LIBRARY_PATH=/usr/local/lib
export LD_LIBRARY_PATH=/usr/local/lib
The ``./waf install`` command installs the following files:
This builds and installs the following items:
- ``<LIBPATH>/libndn-cxx.a``: static NDN C++ library (if enabled)
- ``<LIBPATH>/libndn-cxx.a``: static NDN C++ library (if enabled).
- ``<LIBPATH>/libndn-cxx.so``, ``<LIBPATH>/libndn-cxx.so.<VERSION>`` (on Linux),
``<LIBPATH>/libndn-cxx.dylib``, ``<LIBPATH>/libndn-cxx.<VERSION>.dylib`` (on OS X):
shared NDN C++ library (if enabled)
- ``<LIBPATH>/pkgconfig/libndn-cxx.pc``: pkgconfig file storing all
neccessary flags to build against the library. For example, if
pkgconfig or pkgconf package is installed and ``PKG_CONFIG_PATH`` is
configured properly (or ``<LIBPATH>/pkgconfig`` is a default path),
``pkgconfig --libs --clflags libndn-cxx`` will return all necessary
compile and link flags for the library.
- ``<BINPATH>/ndnsec``: tool to manage NDN keys and certificates
- ``<BINPATH>/ndnsec-*``: convenience scripts for ``ndnsec`` tools
``<LIBPATH>/libndn-cxx.dylib``, ``<LIBPATH>/libndn-cxx.<VERSION>.dylib`` (on macOS):
shared NDN C++ library (if enabled).
- ``<LIBPATH>/pkgconfig/libndn-cxx.pc``: pkgconfig file storing all necessary flags to
build against the library. For example, if the ``pkg-config`` or ``pkgconf-pkg-config``
package is installed and ``PKG_CONFIG_PATH`` is configured properly (or if
``<LIBPATH>/pkgconfig`` is a default search path), the command ``pkg-config --cflags
--libs libndn-cxx`` will return all necessary compile and link flags for the library.
- ``<BINPATH>/ndnsec``: tool to manage NDN keys and certificates.
- ``<BINPATH>/ndnsec-*``: convenience aliases for ``ndnsec`` tools.
If configured with tests: ``./waf configure --with-tests``), the above
commands will also produce:
If configured with tests (``./waf configure --with-tests``), the above commands
will also produce:
- ``build/unit-tests``: A unit test binary for the library
- ``build/unit-tests``: a unit test binary for the library.
1.5GB available memory per CPU core is necessary for efficient compilation.
On a multi-core machine with less than 1.5GB available memory per CPU core,
limit the objects being compiled in parallel with ``./waf -jN`` where N is the amount
of available memory divided by 1.5GB (eg. ``./waf -j1`` for 1.5GB memory),
which could usually avoid memory thrashing and result in faster compilation.
1.5 GB available memory per CPU core is necessary for efficient compilation. On a
multi-core machine with less than 1.5 GB available memory per CPU core, limit the
objects being compiled in parallel with ``./waf -jN``, where N is the amount of
available memory divided by 1.5 GB (e.g., ``./waf -j2`` for 3 GB of memory). This
should avoid memory thrashing and result in faster compilation.
Build with examples
-------------------
By default, examples in ``examples/`` are not build. To enable them, use
``--with-examples`` configure option:
By default, the examples in the ``examples/`` directory will not be built. To enable
them, pass ``--with-examples`` during the configuration step:
::
.. code-block:: sh
./waf configure --with-examples
./waf configure --with-examples # on CentOS, add --without-pch
./waf
sudo ./waf install
sudo ldconfig # on Linux only
:ref:`Additional step <build>`:
To run the examples:
- on Linux::
sudo ldconfig
- on FreeBSD::
sudo ldconfig -m
To run examples:
::
.. code-block:: sh
# trivial producer app
./build/examples/producer
@@ -224,107 +220,89 @@ To run examples:
# trivial consumer app with timers
./build/examples/consumer-with-timer
If you want to test out a sample application, just create a ``.cpp`` file in ``examples/``
folder and it will be compiled on the next run on ``./waf``. For example:
If you want to make a new sample application, just create a ``.cpp`` file inside the
``examples/`` directory and it will be compiled during the next run of ``./waf``:
::
.. code-block:: sh
cp examples/consumer.cpp examples/my-new-consumer-app.cpp
cp examples/consumer.cpp examples/my-new-app.cpp
... # edit examples/my-new-app.cpp with your preferred editor
./waf
sudo ./waf install
./build/examples/my-new-consumer-app
sudo ldconfig # on Linux only
./build/examples/my-new-app
Debug symbols
~~~~~~~~~~~~~
-------------
The default compiler flags enable debug symbols to be included in binaries (i.e., ``-g``
flag for ``./waf configure`` and ``-g3`` for ``./waf configure --debug``). This
potentially allows more meaningful debugging information if your application crashes.
The default compiler flags include debug symbols in binaries. This should provide
more meaningful debugging information if ndn-cxx or your application crashes.
If it is undesirable, default flags can be easily overridden:
If this is not desired, the default flags can be overridden to disable debug symbols.
The following example shows how to completely disable debug symbols and configure
ndn-cxx to be installed into ``/usr`` with configuration in the ``/etc`` directory.
::
.. code-block:: sh
CXXFLAGS="-O2" ./waf configure --prefix=/usr --sysconfdir=/etc
./waf
sudo ./waf install
:ref:`Additional step <build>`:
Customizing the compiler
------------------------
- on Linux::
To build ndn-cxx with a different compiler (rather than the platform default), set the
``CXX`` environment variable to point to the compiler binary. For example, to build
with clang on Linux, use the following:
sudo ldconfig
.. code-block:: sh
- on FreeBSD::
CXX=clang++ ./waf configure
sudo ldconfig -m
Building the documentation
--------------------------
Documentation
-------------
Tutorials and API documentation can be built using the following commands:
ndn-cxx tutorials and API documentation can be built using the following
commands:
::
.. code-block:: sh
# Full set of documentation (tutorials + API) in build/docs
./waf docs
# Only tutorials in `build/docs`
# Only tutorials in build/docs
./waf sphinx
# Only API docs in `build/docs/doxygen`
./waf doxgyen
# Only API docs in build/docs/doxygen
./waf doxygen
Manpages are automatically created and installed during the normal build
process (e.g., during ``./waf`` and ``./waf install``), if
``python-sphinx`` module is detected during ``./waf configure`` stage.
By default, manpages are installed into ``${PREFIX}/share/man`` (where
default value for ``PREFIX`` is ``/usr/local``). This location can be
changed during ``./waf configure`` stage using ``--prefix``,
``--datarootdir``, or ``--mandir`` options.
If ``sphinx-build`` is detected during ``./waf configure``, manpages will automatically
be built and installed during the normal build process (i.e., during ``./waf`` and
``./waf install``). By default, manpages will be installed into ``${PREFIX}/share/man``
(the default value for ``PREFIX`` is ``/usr/local``). This location can be changed
during the ``./waf configure`` stage using the ``--prefix``, ``--datarootdir``, or
``--mandir`` options.
For more details, refer to ``./waf --help``.
For further details, please refer to ``./waf --help``.
Development Build
.. _Development build:
Development build
-----------------
The following is the suggested configure commands for development build.
The following is the suggested build procedure for development builds:
::
.. code-block:: sh
./waf configure --debug --with-tests
./waf configure --debug --with-tests # on CentOS, add --without-pch
./waf
sudo ./waf install
sudo ldconfig # on Linux only
:ref:`Additional step <build>`:
In a development build, most compiler optimizations will be disabled and all warnings
will be treated as errors. This default behavior can be overridden by setting the
``CXXFLAGS`` environment variable before running ``./waf configure``, for example:
- on Linux::
sudo ldconfig
- on FreeBSD::
sudo ldconfig -m
In the development build all compiler optimizations are disabled by
default and all warnings are treated as error. The default behavior can
be overridden by setting ``CXXFLAGS`` environment variable before
running ``./waf configure``:
::
.. code-block:: sh
CXXFLAGS="-O1 -g3" ./waf configure --debug --with-tests
...
Customize Compiler
------------------
To choose a custom C++ compiler for building ndn-cxx, set ``CXX`` environment
variable to point to the compiler binary. For example, to build with clang on
Linux, use the following:
::
CXX=clang++ ./waf configure
-22
View File
@@ -1,22 +0,0 @@
ndn-cxx overview
================
ndn-cxx is a C++ library, implementing Named Data Networking (NDN) primitives that can be
used to implement various NDN applications. The library is currently being used as part of
the following projects:
- `NFD - NDN Forwarding Daemon <http://named-data.net/doc/NFD>`__
- `NLSR - Named-data Link-State Routing
protocol <https://github.com/named-data/NLSR>`__
- `repo-ng - Next generation of NDN
repository <https://github.com/named-data/repo-ng>`__
- `ChronoChat - Multi-user NDN chat
application <https://github.com/named-data/ChronoChat>`__
- `ChronoSync - Sync library for multiuser realtime applications for
NDN <https://github.com/named-data/ChronoSync>`__
- `ndn-tools - NDN Essential Tools <https://github.com/named-data/ndn-tools>`__
- `ndn-traffic-generator - Traffic Generator For
NDN <https://github.com/named-data/ndn-traffic-generator>`__
Please submit any bugs or issues to the `ndn-cxx issue tracker
<https://redmine.named-data.net/projects/ndn-cxx/issues>`__.
+78 -126
View File
@@ -7,7 +7,7 @@ Based on
The original document is available at `<http://geosoft.no/development/cppstyle.html>`_
* NDN Platform "C++, C, C#, Java and JavaScript Code Guidelines".
The original document available at `<http://named-data.net/codebase/platform/documentation/ndn-platform-development-guidelines/cpp-code-guidelines/>`_
The original document available at `<https://named-data.net/codebase/platform/documentation/ndn-platform-development-guidelines/cpp-code-guidelines/>`_
1. Code layout
--------------
@@ -52,7 +52,7 @@ extended it to C++.
} // namespace example
Note that code inside namespace is **not** indented. Avoid following:
Note that code inside namespace is **not** indented. Avoid the following:
.. code-block:: c++
@@ -65,7 +65,7 @@ extended it to C++.
//
// } // namespace example
1.4. The class declarations should have the following form:
1.4. Class declarations should have the following form:
.. code-block:: c++
@@ -73,21 +73,25 @@ extended it to C++.
{
public:
... <public methods> ...
protected:
... <protected methods> ...
private:
... <private methods> ...
public:
... <public data> ...
protected:
... <protected data> ...
private:
... <private data> ...
};
``public``, ``protected``, ``private`` may be repeated several times without
interleaving (e.g., public, public, public, private, private) if this allows better
interleaving (e.g., public, public, public, private, private) if this improves
readability of the code.
Nested classes can be defined in appropriate visibility section, either in methods
@@ -135,23 +139,6 @@ extended it to C++.
statements;
}
or (less preferred):
.. code-block:: c++
if (condition)
{
statements;
}
else if (condition)
{
statements;
}
else
{
statements;
}
1.7. A ``for`` statement should have the following form:
.. code-block:: c++
@@ -160,23 +147,14 @@ extended it to C++.
statements;
}
or (less preferred):
.. code-block:: c++
for (initialization; condition; update)
{
statements;
}
An empty for statement should have the following form:
An empty ``for`` statement should have the following form:
.. code-block:: c++
for (initialization; condition; update)
;
This emphasizes the fact that the for statement is empty and it makes it obvious for
This emphasizes the fact that the ``for`` statement is empty and makes it obvious for
the reader that this is intentional. Empty loops should be avoided however.
1.8. A ``while`` statement should have the following form:
@@ -187,15 +165,6 @@ extended it to C++.
statements;
}
or (less preferred):
.. code-block:: c++
while (condition)
{
statements;
}
1.9. A ``do-while`` statement should have the following form:
.. code-block:: c++
@@ -291,19 +260,6 @@ extended it to C++.
statements;
}
or (less preferred):
.. code-block:: c++
try
{
statements;
}
catch (const Exception& exception)
{
statements;
}
1.12. The incompleteness of split lines must be made obvious.
.. code-block:: c++
@@ -317,9 +273,9 @@ extended it to C++.
...
}
Split lines occurs when a statement exceed the 80 column limit given above. It is
Split lines occur when a statement exceeds the column limit given in rule 1.1. It is
difficult to give rigid rules for how lines should be split, but the examples above should
give a general hint.In general:
give a general hint. In general:
* Break after a comma.
* Break after an operator.
@@ -327,7 +283,7 @@ extended it to C++.
Exceptions:
* The following is the standard practice with operator<<:
* The following is standard practice with ``operator<<``:
.. code-block:: c++
@@ -373,7 +329,7 @@ should take the following form:
statements;
}
If the function has no parameters, ``()`` should be omitted.
If the lambda has no parameters, ``()`` should be omitted.
.. code-block:: c++
@@ -381,8 +337,8 @@ should take the following form:
statements;
}
Capture-all (``[&]`` and ``[=]``) is permitted, but its usage should be minimized.
Only use capture-all when it significantly simplifies code and improves readability.
Either capture-default (``[&]`` or ``[=]``) is permitted, but its usage should be minimized.
Only use a capture-default when it significantly simplifies code and improves readability.
.. code-block:: c++
@@ -394,9 +350,9 @@ should take the following form:
statements;
}
Trailing return type should be omitted. Write them only when compiler cannot deduce
return type automatically, or when it improves readability.
``()`` is required by C++ standard when trailing return type is written.
Trailing return type should be omitted whenever possible. Add it only when the compiler
cannot deduce the return type automatically, or when it improves readability.
``()`` is required by the C++ standard when ``mutable`` or a trailing return type is used.
.. code-block:: c++
@@ -476,7 +432,6 @@ extension ``.cpp``
my-class.hpp, my-class.cpp
2.2. Names representing types must be written in English in mixed case starting with upper case.
.. code-block:: c++
@@ -504,11 +459,11 @@ to separate words.
static const double PI = 3.14;
In some cases, it is a better (or is the only way for complex constants in header-only
classes) to implement the value as a method:
classes) to implement the value as a method.
.. code-block:: c++
int
static int // declare constexpr if possible
getMaxIterations()
{
return 25;
@@ -543,19 +498,19 @@ written in mixed case starting with lower case.
} // namespace analyzer
} // namespace model
2.7. Names representing generic template types should be a single uppercase letter
2.7. Names representing generic template types should be a single uppercase letter.
.. code-block:: c++
template<class T> ...
template<class C, class D> ...
However, when template parameter represents a certain concept and expected to have a
certain interface, the name should be explicitly spelled out:
However, when a template parameter represents a certain concept and is expected
to have a certain interface, the name should be explicitly spelled out.
.. code-block:: c++
template<class FaceBase> ...
template<class InputIterator> ...
template<class Packet> ...
2.8. Abbreviations and acronyms must not be uppercase when used as name.
@@ -588,7 +543,6 @@ written in mixed case starting with lower case.
static std::string s_name;
};
2.11. Variables with a large scope should have long (explicit) names, variables with a small
scope can have short names.
@@ -656,16 +610,11 @@ scope can have short names.
The notation is taken from mathematics where it is an established convention for
indicating a number of objects.
2.18. The suffix ``No`` should be used for variables representing an entity number.
2.18. The suffix ``Num`` or ``No`` should be used for variables representing an entity number.
.. code-block:: c++
tableNo, employeeNo
The notation is taken from mathematics where it is an established convention for
indicating an entity number. An elegant alternative is to prefix such variables with
an ``i``: ``iTable``, ``iEmployee``. This effectively makes them named iterators.
tableNum, tableNo, employeeNum, employeeNo
2.19. The prefix ``is``, ``has``, ``need``, or similar should be used for boolean variables and
methods.
@@ -720,9 +669,9 @@ notation).
2.24. Exceptions can be suffixed with either ``Exception`` (e.g., ``SecurityException``) or
``Error`` (e.g., ``SecurityError``).
The recommended method is to declare exception class ``Exception`` or ``Error`` as an
inner class, from which the exception is thrown. For example, when declaring class
``Foo`` that can throw errors, one can write the following:
The recommended method is to declare an exception class ``Exception`` or ``Error`` as
a nested type inside the class from which the exception is thrown. For example, when
defining a class ``Foo`` that can throw errors, one can write the following:
.. code-block:: c++
@@ -730,12 +679,16 @@ notation).
class Foo
{
public:
class Error : public std::runtime_error
{
public:
explicit
Error(const std::string& what)
: std::runtime_error(what)
// You can inherit constructors from std::runtime_error like this:
using std::runtime_error::runtime_error;
// Additional constructors, if desired, can be declared as usual:
Error(const std::string& what, const std::exception& inner)
: std::runtime_error(what + ": " + inner.what())
{
}
};
@@ -745,7 +698,6 @@ notation).
hierarchy, then child classes should should define their own ``Error`` or
``Exception`` classes that are inherited from the parent's Error class.
2.25. Functions (methods returning something) should be named after what they return and
procedures (void methods) after what they do.
@@ -761,8 +713,8 @@ not in the primary processing path.
3.2. Header files must contain an include guard.
For example, header file located in ``module/class-name.hpp`` or in
``src/module/class-name.hpp`` should have header guard in the following form:
For example, a header file named ``module/class-name.hpp`` or
``src/module/class-name.hpp`` should have a header guard in the following form:
.. code-block:: c++
@@ -771,39 +723,43 @@ not in the primary processing path.
...
#endif // APP_MODULE_CLASS_NAME_HPP
The name should follow the location of the file inside the source tree and prevents
naming conflicts. Header guard should be prefixed with the application/library name
to avoid conflicts with other packaged and libraries.
The macro name should reflect the path of the header file relative to the root of the
source tree, in order to prevent naming conflicts. The header guard should be prefixed
with the application/library name to avoid conflicts with other packages and libraries.
3.3. Header files which are in the same source distribution should be included in
``"quotes"``, if possible with a path relative to the source file. Header files for
system and other external libraries should be included in ``<angle brackets>``.
3.3. Include directives for system headers and other external libraries should use
``<angle brackets>``. Header files in the same source code repository should be included
using ``"quotes"``.
.. code-block:: c++
#include "ndn-cxx/util/random.hpp"
#include <string>
#include <boost/lexical_cast.hpp>
#include "util/random.hpp"
All of a project's header files should be included with their path relative to
the project's source directory. The use of UNIX directory shortcuts ``.``
(the current directory) and ``..`` (the parent directory) is discouraged.
3.4. Include statements should be grouped. Same-project headers should be included first.
Leave an empty line between groups of include statements. Sorted alphabetically within a group.
Leave an empty line between groups of include statements. Sort alphabetically within a group.
For example, the include section of ``ndn-cxx/foo/bar.cpp`` may look like this:
.. code-block:: c++
#include "detail/pending-interest.hpp"
#include "util/random.hpp"
#include "ndn-cxx/impl/pending-interest.hpp"
#include "ndn-cxx/util/random.hpp"
#include <cstdlib>
#include <fstream>
#include <iomanip>
#include <boost/lexical_cast.hpp>
#include <boost/regex.hpp>
3.5. Types that are local to one file only can be declared inside that file.
3.6. Implicit conversion is generally allowed.
Implicit conversion between integer and floating point numbers can cause problems and
@@ -817,11 +773,10 @@ Leave an empty line between groups of include statements. Sorted alphabetically
``const_cast`` instead where appropriate. Use ``static_pointer_cast``,
``dynamic_pointer_cast``, ``const_pointer_cast`` when dealing with ``shared_ptr``.
3.7. Variables should be initialized where they are declared.
This ensures that variables are valid at any time. Sometimes it is impossible to
initialize a variable to a valid value where it is declared:
initialize a variable to a valid value where it is declared.
.. code-block:: c++
@@ -831,21 +786,20 @@ Leave an empty line between groups of include statements. Sorted alphabetically
In these cases it should be left uninitialized rather than initialized to some phony
value.
3.8. In most cases, class instance variables should not be declared public.
3.8. In most cases, class data members should not be declared ``public``.
The concepts of information hiding and encapsulation are violated by public variables. Use
private variables and access methods instead.
Public data members violate the concepts of information hiding and encapsulation.
Use private variables and public accessor methods instead.
Exceptions to this rule:
* when the class is essentially a dumb data structure with no or minimal behavior
(equivalent to a C struct, also known as PODS). In this case it is appropriate to make
the instance variables public by using struct.
* When the class is essentially a dumb data structure with no or minimal behavior
(equivalent to a C struct, also known as POD type). In this case it is appropriate
to make the instance variables public by using ``struct``.
* when the class is used only inside the compilation unit, e.g., when implementing pImpl
* When the class is used only inside the compilation unit, e.g., when implementing pImpl
idiom (aka Bridge pattern) or similar cases.
3.9. C++ pointers and references should have their reference symbol next to the type rather
than to the name.
@@ -867,13 +821,13 @@ than to the name.
.. code-block:: c++
isDone = false; // NOT: bool isDone = false;
bool isDone = false; // NOT: bool isDone = false;
while (!isDone) { // // other stuff
: // while (!isDone) {
} // :
... // while (!isDone) {
} // ...
// }
3.13. The form while (true) should be used for infinite loops.
3.13. The form ``while (true)`` should be used for infinite loops.
.. code-block:: c++
@@ -906,7 +860,7 @@ instead.
// }
By assigning boolean variables to expressions, the program gets automatic
documentation. The construction will be easier to read, debug and maintain.
documentation. The construction will be easier to read, debug, and maintain.
3.15. The conditional should be put on a separate line.
@@ -936,11 +890,11 @@ instead.
should be considered declared as named constants instead.
If the number does not have an obvious meaning by itself, the readability is enhanced
by introducing a named constant instead. A different approach is to introduce a method
by introducing a named constant instead. A different approach is to introduce a method
from which the constant can be accessed.
3.18. Floating point constants should always be written with decimal point, at least one
decimal, and without omitting 0 before decimal point.
3.18. Floating point literals should always be written with a decimal point, at least one
decimal, and without omitting 0 before the decimal point.
.. code-block:: c++
@@ -953,9 +907,9 @@ should be considered declared as named constants instead.
3.19. ``goto`` should not be used.
Goto statements violate the idea of structured code. Only in some very few cases (for
instance breaking out of deeply nested structures) should goto be considered, and only if
the alternative structured counterpart is proven to be less readable.
``goto`` statements violate the idea of structured code. Only in very few cases (for
instance, breaking out of deeply nested structures) should ``goto`` be considered,
and only if the alternative structured counterpart is proven to be less readable.
3.20. ``nullptr`` should be used to represent a null pointer, instead of "0" or "NULL".
@@ -1005,7 +959,7 @@ the alternative structured counterpart is proven to be less readable.
3.24. All comments should be written in English.
In an international environment English is the preferred language.
In an international environment, English is the preferred language.
3.25. Use ``//`` for all comments, including multi-line comments.
@@ -1090,7 +1044,6 @@ the alternative structured counterpart is proven to be less readable.
.. code-block:: c++
std::list<std::string> strings;
for (const auto& str : strings) {
statements; // cannot modify `str`
}
@@ -1131,7 +1084,6 @@ member function or a virtual destructor.
};
3.31. The recommended way to throw an exception derived from ``std::exception`` is to use
the ``BOOST_THROW_EXCEPTION``
`macro <http://www.boost.org/doc/libs/1_54_0/libs/exception/doc/BOOST_THROW_EXCEPTION.html>`__.
Exceptions thrown using this macro will be augmented with additional diagnostic information,
including file name, line number, and function name from where the exception was thrown.
``NDN_THROW`` or one of the other ``NDN_THROW_*`` macros.
Exceptions thrown using these macros will be augmented with additional diagnostic information,
including the file name, line number, and function name from which the exception was thrown.
+82 -201
View File
@@ -1,37 +1,51 @@
# -*- coding: utf-8 -*-
# Configuration file for the Sphinx documentation builder.
#
# NFD - Named Data Networking Forwarding Daemon documentation build configuration file, created by
# sphinx-quickstart on Sun Apr 6 19:58:22 2014.
#
# This file is execfile()d with the current directory set to its
# containing dir.
#
# Note that not all possible configuration values are present in this
# autogenerated file.
#
# All configuration values have a default; values that are commented out
# serve to show the default.
# This file only contains a selection of the most common options. For a full
# list see the documentation:
# https://www.sphinx-doc.org/en/master/usage/configuration.html
import sys
import os
import re
# -- Path setup --------------------------------------------------------------
# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here.
sys.path.insert(0, os.path.abspath('.'))
#
# import os
import sys
# sys.path.insert(0, os.path.abspath('.'))
# -- General configuration ------------------------------------------------
# -- Project information -----------------------------------------------------
project = u'ndn-cxx: NDN C++ library with eXperimental eXtensions'
copyright = u'Copyright © 2013-2020 Regents of the University of California.'
author = u'Named Data Networking Project'
# The short X.Y version.
#version = ''
# The full version, including alpha/beta/rc tags.
#release = ''
# There are two options for replacing |today|: either, you set today to some
# non-false value, then it is used:
#today = ''
# Else, today_fmt is used as the format for a strftime call.
today_fmt = '%Y-%m-%d'
# -- General configuration ---------------------------------------------------
# If your documentation needs a minimal Sphinx version, state it here.
#needs_sphinx = '1.0'
#
needs_sphinx = '1.3'
# Add any Sphinx extension module names here, as strings. They can be
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
# ones.
extensions = [
'sphinx.ext.extlinks',
'sphinx.ext.todo',
'redmine_issue',
]
def addExtensionIfExists(extension):
@@ -39,239 +53,106 @@ def addExtensionIfExists(extension):
__import__(extension)
extensions.append(extension)
except ImportError:
sys.stderr.write("Extension '%s' in not available. "
sys.stderr.write("Extension '%s' not found. "
"Some documentation may not build correctly.\n" % extension)
sys.stderr.write("To install, use \n"
" sudo pip install %s\n" % extension.replace('.', '-'))
addExtensionIfExists('sphinxcontrib.doxylink')
if os.getenv('GOOGLE_ANALYTICS', None):
addExtensionIfExists('sphinxcontrib.googleanalytics')
# Add any paths that contain templates here, relative to this directory.
templates_path = ['_templates']
# The suffix of source filenames.
source_suffix = '.rst'
# The encoding of source files.
#source_encoding = 'utf-8-sig'
# The master toctree document.
master_doc = 'index'
# General information about the project.
project = u'ndn-cxx: NDN C++ library with eXperimental eXtensions'
copyright = u'Copyright (c) 2013-2015 Regents of the University of California.'
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
#language = None
# There are two options for replacing |today|: either, you set today to some
# non-false value, then it is used:
#today = ''
# Else, today_fmt is used as the format for a strftime call.
#today_fmt = '%B %d, %Y'
# Add any paths that contain templates here, relative to this directory.
templates_path = ['_templates']
# List of patterns, relative to source directory, that match files and
# directories to ignore when looking for source files.
# This pattern also affects html_static_path and html_extra_path.
exclude_patterns = []
# The reST default role (used for this markup: `text`) to use for all
# documents.
#default_role = None
# If true, '()' will be appended to :func: etc. cross-reference text.
#add_function_parentheses = True
# If true, the current module name will be prepended to all description
# unit titles (such as .. function::).
#add_module_names = True
# If true, sectionauthor and moduleauthor directives will be shown in the
# output. They are ignored by default.
#show_authors = False
# The name of the Pygments (syntax highlighting) style to use.
pygments_style = 'sphinx'
# A list of ignored prefixes for module index sorting.
#modindex_common_prefix = []
# If true, keep warnings as "system message" paragraphs in the built documents.
#keep_warnings = False
# -- Options for HTML output ----------------------------------------------
# -- Options for HTML output -------------------------------------------------
# The theme to use for HTML and HTML Help pages. See the documentation for
# a list of builtin themes.
# html_theme = 'default'
#
html_theme = 'named_data_theme'
# Theme options are theme-specific and customize the look and feel of a theme
# further. For a list of options available for each theme, see the
# documentation.
#html_theme_options = {}
# Add any paths that contain custom themes here, relative to this directory.
html_theme_path = ['./']
# The name for this set of Sphinx documents. If None, it defaults to
# "<project> v<release> documentation".
#html_title = None
# A shorter title for the navigation bar. Default is the same as html_title.
#html_short_title = None
# The name of an image file (relative to this directory) to place at the top
# of the sidebar.
#html_logo = None
# The name of an image file (within the static path) to use as favicon of the
# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
# pixels large.
#html_favicon = None
html_theme_path = ['.']
# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
# so a file named "default.css" will overwrite the builtin "default.css".
html_static_path = ['_static']
# Add any extra paths that contain custom files (such as robots.txt or
# .htaccess) here, relative to this directory. These files are copied
# directly to the root of the documentation.
#html_extra_path = []
html_copy_source = False
html_show_sourcelink = False
# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
# using the given strftime format.
#html_last_updated_fmt = '%b %d, %Y'
# If true, SmartyPants will be used to convert quotes and dashes to
# typographically correct entities.
#html_use_smartypants = True
# Custom sidebar templates, maps document names to template names.
#html_sidebars = {}
# Additional templates that should be rendered to pages, maps page names to
# template names.
#html_additional_pages = {}
# If false, no module index is generated.
#html_domain_indices = True
# If false, no index is generated.
#html_use_index = True
# If true, the index is split into individual pages for each letter.
#html_split_index = False
# If true, links to the reST sources are added to the pages.
#html_show_sourcelink = True
# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
#html_show_sphinx = True
# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
#html_show_copyright = True
# If true, an OpenSearch description file will be output, and all pages will
# contain a <link> tag referring to it. The value of this option must be the
# base URL from which the finished HTML is served.
#html_use_opensearch = ''
# This is the file name suffix for HTML files (e.g. ".xhtml").
html_file_suffix = ".html"
# Output file base name for HTML help builder.
htmlhelp_basename = 'ndn-cxx-docs'
# Disable syntax highlighting of code blocks by default.
highlight_language = 'none'
# -- Options for LaTeX output ---------------------------------------------
# -- Options for LaTeX output ------------------------------------------------
latex_elements = {
# The paper size ('letterpaper' or 'a4paper').
#'papersize': 'letterpaper',
# The paper size ('letterpaper' or 'a4paper').
#
# 'papersize': 'letterpaper',
# The font size ('10pt', '11pt' or '12pt').
#'pointsize': '10pt',
# The font size ('10pt', '11pt' or '12pt').
#
# 'pointsize': '10pt',
# Additional stuff for the LaTeX preamble.
#'preamble': '',
# Additional stuff for the LaTeX preamble.
#
# 'preamble': '',
# Latex figure (float) alignment
#
# 'figure_align': 'htbp',
}
# Grouping the document tree into LaTeX files. List of tuples
# (source start file, target name, title,
# author, documentclass [howto, manual, or own class]).
latex_documents = [
('index', 'ndn-cxx-docs.tex', u'NDN C++ library with eXperimental eXtensions',
u'Named Data Networking Project', 'manual'),
('index', 'ndn-cxx-docs.tex', u'NDN C++ library with eXperimental eXtensions',
author, 'manual'),
]
# The name of an image file (relative to this directory) to place at the top of
# the title page.
#latex_logo = None
# For "manual" documents, if this is true, then toplevel headings are parts,
# not chapters.
#latex_use_parts = False
# If true, show page references after internal links.
#latex_show_pagerefs = False
# If true, show URL addresses after external links.
#latex_show_urls = False
# Documents to append as an appendix to all manuals.
#latex_appendices = []
# If false, no module index is generated.
#latex_domain_indices = True
# -- Options for manual page output ---------------------------------------
# -- Options for manual page output ------------------------------------------
# One entry per manual page. List of tuples
# (source start file, name, description, authors, manual section).
man_pages = [
('manpages/ndnsec', 'ndnsec', u'NDN security tools', None, 1),
('manpages/ndnsec-cert-dump', 'ndnsec-cert-dump', 'part of NDN security tools', None, 1),
('manpages/ndnsec-cert-gen', 'ndnsec-cert-gen', 'part of NDN security tools', None, 1),
('manpages/ndnsec-cert-install', 'ndnsec-cert-instal', 'part of NDN security tools', None, 1),
('manpages/ndnsec-delete', 'ndnsec-delete', 'part of NDN security tools', None, 1),
('manpages/ndnsec-export', 'ndnsec-export',
'export a certificate and its private key to a file', None, 1),
('manpages/ndnsec-get-default', 'ndnsec-get-default', 'part of NDN security tools', None, 1),
('manpages/ndnsec-import', 'ndnsec-import',
'import a certificate and its private key from a file', None, 1),
('manpages/ndnsec-key-gen', 'ndnsec-key-gen', 'part of NDN security tools', None, 1),
('manpages/ndnsec-list', 'ndnsec-list', 'part of NDN security tools', None, 1),
('manpages/ndnsec-set-default', 'ndnsec-set-default', 'part of NDN security tools', None, 1),
('manpages/ndnsec-sign-req', 'ndnsec-sign-req', 'part of NDN security tools', None, 1),
('manpages/ndnsec-unlock-tpm', 'ndnsec-unlock-tpm', 'part of NDN security tools', None, 1),
('tutorials/security-validator-config', 'ndnsec-validator.conf',
'NDN trust validator configuration file', None, 5),
('manpages/ndn-client.conf', 'ndn-client.conf', 'Configuration file for NDN platform', None, 5),
('manpages/ndnsec', 'ndnsec', 'NDN security toolkit', None, 1),
('manpages/ndnsec-cert-dump', 'ndnsec-cert-dump', 'export an NDN certificate', None, 1),
('manpages/ndnsec-cert-gen', 'ndnsec-cert-gen', 'create an NDN certificate for an identity', None, 1),
('manpages/ndnsec-cert-install', 'ndnsec-cert-install', 'import an NDN certificate from a file', None, 1),
('manpages/ndnsec-delete', 'ndnsec-delete', 'delete an NDN identity, key, or certificate', None, 1),
('manpages/ndnsec-export', 'ndnsec-export', 'export an NDN certificate and its private key to a file', None, 1),
('manpages/ndnsec-get-default', 'ndnsec-get-default', 'show the default NDN identity, key, and certificate for the current user', None, 1),
('manpages/ndnsec-import', 'ndnsec-import', 'import an NDN certificate and its private key from a file', None, 1),
('manpages/ndnsec-key-gen', 'ndnsec-key-gen', 'generate an NDN key for an identity', None, 1),
('manpages/ndnsec-list', 'ndnsec-list', 'list all known NDN identities, keys, and certificates', None, 1),
('manpages/ndnsec-set-default', 'ndnsec-set-default', 'change the default NDN identity, key, or certificate for the current user', None, 1),
('manpages/ndnsec-sign-req', 'ndnsec-sign-req', 'generate an NDN certificate signing request', None, 1),
('manpages/ndnsec-unlock-tpm', 'ndnsec-unlock-tpm', 'unlock the TPM', None, 1),
('manpages/ndn-client.conf', 'ndn-client.conf', 'configuration file for NDN applications', None, 5),
('manpages/ndn-log', 'ndn-log', 'ndn-cxx logging', None, 7),
]
# If true, show URL addresses after external links.
man_show_urls = True
#man_show_urls = True
# ---- Custom options --------
# -- Custom options ----------------------------------------------------------
doxylink = {
'ndn-cxx' : ('ndn-cxx.tag', 'doxygen/'),
'ndn-cxx': ('ndn-cxx.tag', 'doxygen/'),
}
if os.getenv('GOOGLE_ANALYTICS', None):
googleanalytics_id = os.environ['GOOGLE_ANALYTICS']
googleanalytics_enabled = True
# exclude_patterns = ['RELEASE_NOTES.rst']
redmine_project_url = "https://redmine.named-data.net/"
extlinks = {
'issue': ('https://redmine.named-data.net/issues/%s', 'issue #'),
}
+15 -24
View File
@@ -140,7 +140,7 @@ INLINE_INHERITED_MEMB = YES
# shortest path that makes the file name unique will be used
# The default value is: YES.
FULL_PATH_NAMES = NO
FULL_PATH_NAMES = YES
# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.
# Stripping is only done if one of the specified strings matches the left-hand
@@ -161,7 +161,7 @@ STRIP_FROM_PATH =
# specify the list of include paths that are normally passed to the compiler
# using the -I flag.
STRIP_FROM_INC_PATH =
STRIP_FROM_INC_PATH = ..
# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but
# less readable) file names. This can be useful is your file systems doesn't
@@ -780,7 +780,7 @@ WARN_LOGFILE =
# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING
# Note: If this tag is empty the current directory is searched.
INPUT = src
INPUT = ndn-cxx
# This tag can be used to specify the character encoding of the source files
# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
@@ -836,7 +836,7 @@ EXCLUDE_SYMLINKS = NO
# Note that the wildcards are matched against the file with absolute path, so to
# exclude all test directories for example use the pattern */test/*
EXCLUDE_PATTERNS = */src/detail/* */src/*/detail/*
EXCLUDE_PATTERNS = */ndn-cxx/impl/* */ndn-cxx/*/impl/* */ndn-cxx/util/nonstd/*
# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
# (namespaces, classes, functions, etc.) that should be excluded from the
@@ -2031,7 +2031,7 @@ SEARCH_INCLUDES = YES
# preprocessor.
# This tag requires that the tag SEARCH_INCLUDES is set to YES.
INCLUDE_PATH =
INCLUDE_PATH = ..
# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
# patterns (like *.h and *.hpp) to filter out the header-files in the
@@ -2050,12 +2050,18 @@ INCLUDE_FILE_PATTERNS =
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
PREDEFINED = DOXYGEN \
BOOST_CONCEPT_ASSERT(x)= \
BOOST_CONCEPT_REQUIRES(x)= \
NDN_CXX_DECLARE_WIRE_ENCODE_INSTANTIATIONS(x)= \
NDN_LOG_INIT(x)= \
PUBLIC_WITH_TESTS_ELSE_PROTECTED=protected \
PUBLIC_WITH_TESTS_ELSE_PRIVATE=private \
PROTECTED_WITH_TESTS_ELSE_PRIVATE=private \
VIRTUAL_WITH_TESTS=
NDN_LOG_MEMBER_DECL()= \
NDN_LOG_MEMBER_DECL_SPECIALIZED(x)= \
NDN_LOG_MEMBER_INIT(x,y)= \
NDN_LOG_MEMBER_INIT_SPECIALIZED(x,y)= \
NDN_CXX_PUBLIC_WITH_TESTS_ELSE_PROTECTED=protected \
NDN_CXX_PUBLIC_WITH_TESTS_ELSE_PRIVATE=private \
NDN_CXX_PROTECTED_WITH_TESTS_ELSE_PRIVATE=private \
NDN_CXX_VIRTUAL_WITH_TESTS=
# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
# tag can be used to specify a list of macro names that should be expanded. The
@@ -2122,12 +2128,6 @@ EXTERNAL_GROUPS = YES
EXTERNAL_PAGES = YES
# The PERL_PATH should be the absolute path and name of the perl script
# interpreter (i.e. the result of 'which perl').
# The default file (with absolute path) is: /usr/bin/perl.
PERL_PATH = /usr/bin/perl
#---------------------------------------------------------------------------
# Configuration options related to the dot tool
#---------------------------------------------------------------------------
@@ -2141,15 +2141,6 @@ PERL_PATH = /usr/bin/perl
CLASS_DIAGRAMS = YES
# You can define message sequence charts within doxygen comments using the \msc
# command. Doxygen will then run the mscgen tool (see:
# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the
# documentation. The MSCGEN_PATH tag allows you to specify the directory where
# the mscgen tool resides. If left empty the tool is assumed to be found in the
# default search path.
MSCGEN_PATH =
# You can include diagrams made with dia in doxygen documentation. Doxygen will
# then run dia to produce the diagram and insert it in the documentation. The
# DIA_PATH tag allows you to specify the directory where the dia binary resides.
+9 -12
View File
@@ -5,7 +5,7 @@ Trivial applications
To successfully run the following examples, please make sure that NFD is properly
configured and running. For more information about NFD, refer to `NFD's official
homepage <http://named-data.net/doc/NFD/>`_.
homepage <https://named-data.net/doc/NFD/>`_.
Trivial consumer
----------------
@@ -18,8 +18,7 @@ callbacks to be called when Data/Nack is retrieved or Interest times out.
.. literalinclude:: ../examples/consumer.cpp
:language: c++
:linenos:
:emphasize-lines: 24-27,39,43-47,51,58,75
:emphasize-lines: 39-45,48,59,65,71
Trivial producer
----------------
@@ -42,8 +41,7 @@ using :ndn-cxx:`Face::put` method.
.. literalinclude:: ../examples/producer.cpp
:language: c++
:linenos:
:emphasize-lines: 42,55-58,61,64,67,70,76
:emphasize-lines: 41,50,57-59,62,70,74
Consumer that uses Scheduler
----------------------------
@@ -52,19 +50,18 @@ The following example demonstrates how to use :ndn-cxx:`Scheduler` to schedule a
events for execution at specific points of time.
The library internally uses `boost::asio::io_service
<http://www.boost.org/doc/libs/1_54_0/doc/html/boost_asio/reference/io_service.html>`_ to
<https://www.boost.org/doc/libs/1_65_1/doc/html/boost_asio/reference/io_service.html>`_ to
implement fully asynchronous NDN operations (i.e., sending and receiving Interests and
Data). In addition to network-related operations, ``boost::asio::io_service`` can be used
to execute any arbitrary callback within the processing thread (run either explicitly via
``io.run`` or implicitly via :ndn-cxx:`Face::processEvents` as in previous examples).
:ndn-cxx:`Scheduler` is just a wrapper on top of ``boost::asio::io_service``,
allowing simple interface to schedule tasks at specific times.
``io_service::run()`` or implicitly via :ndn-cxx:`Face::processEvents` as in previous
examples). :ndn-cxx:`Scheduler` is just a wrapper on top of ``io_service``, providing a
simple interface to schedule tasks at specific times.
The highlighted lines in the example demonstrate all that is needed to express a second
Interest approximately 2 seconds after the first one.
Interest approximately 3 seconds after the first one.
.. literalinclude:: ../examples/consumer-with-timer.cpp
:language: c++
:linenos:
:emphasize-lines: 39-40,51-55,59-60,62-63,108-109
:emphasize-lines: 39-40,56,62,93,106,114-116
+19 -14
View File
@@ -1,11 +1,22 @@
ndn-cxx: NDN C++ library with eXperimental eXtensions
=====================================================
ndn-cxx is a C++ library, implementing Named Data Networking (NDN) primitives that can be
used to implement various NDN applications.
**ndn-cxx** is a C++14 library implementing Named Data Networking (NDN) primitives
that can be used to write various NDN applications. The library is currently being
used by the following projects:
Please submit any bugs or issues to the `ndn-cxx issue tracker
<https://redmine.named-data.net/projects/ndn-cxx/issues>`__.
* `NFD - NDN Forwarding Daemon <https://github.com/named-data/NFD>`_
* `NLSR - Named-data Link-State Routing protocol <https://github.com/named-data/NLSR>`_
* `ndn-tools - Essential NDN command-line tools <https://github.com/named-data/ndn-tools>`_
* `repo-ng - Next generation of NDN repository <https://github.com/named-data/repo-ng>`_
* `ChronoSync - Sync library for multiuser realtime applications <https://github.com/named-data/ChronoSync>`_
* `PSync - Partial and full synchronization library <https://github.com/named-data/PSync>`_
* `ndn-traffic-generator - Traffic generator for NDN <https://github.com/named-data/ndn-traffic-generator>`_
* `NAC - Name-based Access Control <https://github.com/named-data/name-based-access-control>`_
* `NDNS - Domain Name Service for NDN <https://github.com/named-data/ndns>`_
Please submit any bugs or feature requests to the `ndn-cxx issue tracker
<https://redmine.named-data.net/projects/ndn-cxx/issues>`_.
ndn-cxx Documentation
---------------------
@@ -14,7 +25,6 @@ ndn-cxx Documentation
:hidden:
:maxdepth: 3
README
INSTALL
examples
tutorials
@@ -29,14 +39,11 @@ ndn-cxx Documentation
RELEASE_NOTES
releases
- :doc:`README`
- :doc:`INSTALL`
- :doc:`examples`
- :doc:`tutorials`
+ `NDN Software Contributor's Guide <https://github.com/named-data/.github/blob/master/CONTRIBUTING.md>`_ (guide for newcomers to the NDN community of software generally)
+ :doc:`tutorials/utils-ndn-regex`
+ :doc:`tutorials/security-validator-config`
@@ -49,18 +56,16 @@ ndn-cxx Documentation
- :doc:`manpages`
**Additional documentation**
Additional Documentation
^^^^^^^^^^^^^^^^^^^^^^^^
- `API documentation (doxygen) <doxygen/annotated.html>`_
- :doc:`code-style`
- :doc:`RELEASE_NOTES`
- :doc:`releases`
License
-------
ndn-cxx is an open source project licensed under LGPL 3.0 license. For more information about
ndn-cxx is an open source project licensed under the LGPL version 3. For more information about
the license, refer to `COPYING.md <https://github.com/named-data/ndn-cxx/blob/master/COPYING.md>`_.
+1
View File
@@ -3,6 +3,7 @@ Manpages
.. toctree::
ndn-client.conf <manpages/ndn-client.conf>
ndn-cxx logging <manpages/ndn-log>
manpages/ndnsec
ndnsec-list <manpages/ndnsec-list>
ndnsec-get-default <manpages/ndnsec-get-default>
+21 -18
View File
@@ -5,28 +5,31 @@ System configuration of NDN platform is specified in ``client.conf``.
The configuration file ``client.conf`` is looked up in several directories in the following order:
- ``$HOME/.ndn/``: user-specific settings
- ``@SYSCONFDIR@/ndn/`` (``/usr/local/etc/ndn``, ``/opt/local/etc/ndn``, or other, depending how the
library is configured): system-wide settings
- ``$HOME/.ndn``: user-specific settings
- ``SYSCONFDIR/ndn``: system-wide settings (where ``SYSCONFDIR`` can be ``/usr/local/etc``,
``/opt/local/etc``, or other, depending on how the library is configured)
- ``/etc/ndn``: default system-wide settings
Here is an example of ``client.conf`` for current ndn-cxx package:
Here is an example of ``client.conf`` for the current ndn-cxx package:
.. literalinclude:: ../../client.conf.sample
:language: ini
NFD
---
transport
FaceUri for default connection toward local NDN forwarder. Only ``unix`` and ``tcp4`` FaceUris
can be specified here.
FaceUri for default connection toward local NDN forwarder. Only ``unix``, ``tcp``, ``tcp4``, and
``tcp6`` FaceUris can be specified here.
By default, ``unix:///var/run/nfd.sock`` is used.
By default, ``unix:///run/nfd.sock`` is used on Linux and ``unix:///var/run/nfd.sock`` is used on
other platforms.
..note::
.. note::
This value can be overridden using the ``NDN_CLIENT_TRANSPORT`` environment variable.
Key Management
--------------
@@ -55,10 +58,10 @@ pib
rm -rf ~/.ndn/ndnsec-*
It's not recommended to share the same directory between machines, e.g. via NFS.
It is not recommended to share the same directory between machines, e.g. via NFS.
Simultaneous access from multiple machines may cause errors.
..note::
.. note::
This value can be overridden using the ``NDN_CLIENT_PIB`` environment variable.
tpm
@@ -69,15 +72,15 @@ tpm
Possible values for ``[scheme]``:
* ``tpm-osx-keychain`` (default on OS X platform): secure storage of private keys in OS X
* ``tpm-osx-keychain`` (default on macOS): secure storage of private keys in the macOS
Keychain with OS-provided access restrictions.
``[location]`` parameter is ignored.
May not work for daemon applications, as user interaction may be required to access OS X
Keychain.
May not work for daemon applications, as user interaction may be required to access the
macOS Keychain.
* ``tpm-file`` (default on all other platforms): file-based storage of private keys
* ``tpm-file`` (default on all other platforms): file-based storage of private keys.
Possible values for ``[location]``:
@@ -90,11 +93,11 @@ tpm
tpm=tpm-file
**Change of ``tpm`` setting is only possible together with ``pib`` setting. Otherwise, an
error will be generated during PIB/TPM access**
**Changing the ``tpm`` setting is only possible together with ``pib`` setting. Otherwise,
an error will be generated during PIB/TPM access.**
It's not recommended to share the same directory between machines, e.g. via NFS.
It is not recommended to share the same directory between machines, e.g. via NFS.
Simultaneous access from multiple machines may cause errors.
..note::
.. note::
This value can be overridden using the ``NDN_CLIENT_TPM`` environment variable.
+100
View File
@@ -0,0 +1,100 @@
ndn-log
=======
The ndn-cxx logging facility exposes the internal state of NDN libraries and
applications so the user can investigate internal interactions, such as interest
dispatch inside ndn::Face, Data and Interest validation in the security framework,
sync and recovery Interest processing inside ChronoSync, etc. During runtime, the
user is able to specify the types of messages he or she would like to receive from
a set of logging modules pre-configured by library and application developers.
Environment Variable
--------------------
One way to control ndn-cxx logging facility is through the environment variable
``NDN_LOG``. Using this variable, one can set the log levels for the available logging
modules. Logging modules within different libraries and applications usually have
distinguishing prefixes (``ndn.``, ``sync.``, etc.), which can be specified when
setting the environment variable. Wildcards can be used to enable logging for all
modules (just ``*``) or all modules under a selected prefix (e.g., ``ndn.*``).
If an additional environment variable ``NDN_LOG_NOFLUSH`` is set, the automatic flushing
after each log record will be disabled. This can improve logging performance but may
cause the log records to appear delayed or, in case of application crash, the last
few log records may be lost.
ndn-cxx logging facility provides a mechanism to manage the type of log messages
that are written by classifying log messages by severity levels. Listed below
are the available log levels.
**Log Levels:**
::
TRACE
DEBUG
INFO
WARN
ERROR
FATAL
A message's severity level will determine whether the log is written. For instance,
if an application sets its log severity level to DEBUG, all messages marked with
DEBUG, or any of those below that level, are written. FATAL level logs are always
written.
Setting NDN_LOG requires the following syntax with as many prefixes and
corresponding loglevels as the user desires:
.. code-block:: sh
export NDN_LOG="<prefix1>=<loglevel1>:<prefix2>=<loglevel2>"
*Example:*
.. code-block:: sh
export NDN_LOG="ndn.*=DEBUG"
export NDN_LOG="ndn.UnixTransport=INFO"
export NDN_LOG="sync.Logic=ERROR"
export NDN_LOG="*=DEBUG:ndn.UnixTransport=INFO:sync.Logic=ERROR"
**Note:**
The loglevel assignments in ``NDN_LOG`` are processed left-to-right. Thus, shorter
(more general) prefixes should be listed before longer (more specific) prefixes.
Otherwise, the loglevel setting of a more specific prefix may be overwritten by a
more general assignment appearing later in the string. For example:
.. code-block:: sh
export NDN_LOG="ndn.UnixTransport=TRACE:ndn.*=ERROR:*=INFO"
will set all modules to INFO. To obtain the desired effect, it should instead be
written as:
.. code-block:: sh
export NDN_LOG="*=INFO:ndn.*=ERROR:ndn.UnixTransport=TRACE"
**Note:**
Setting the environment variable with sudo requires the application to be run
in the same command.
.. code-block:: sh
# Correct
sudo env NDN_LOG=logLevel ./ndn-application
# Also correct
sudo -s
export NDN_LOG=logLevel
./ndn-application
# Incorrect
sudo export NDN_LOG=logLevel
sudo ./ndn-application
# Incorrect
NDN_LOG=logLevel sudo ./ndn-application
+26 -28
View File
@@ -1,52 +1,50 @@
ndnsec-cert-dump
================
``ndnsec-cert-dump`` is a tool to dump a certificate from **Public Info Base** or file and output
it to standard output.
Synopsis
--------
Usage
-----
::
$ ndnsec-cert-dump [-h] [-p] [-ikf] name
**ndnsec-cert-dump** [**-h**] [**-p**] [**-r** [**-H** *host*] [**-P** *port*]]
[**-i**\|\ **-k**\|\ **-f**] *name*
Description
-----------
``ndnsec-cert-dump`` can read a certificate from **Public Info Base (PIB)** or a file and output
the certificate to standard output.
:program:`ndnsec-cert-dump` reads a certificate from the **Public Info Base (PIB)**
or from a file, and prints it on the standard output.
By default, ``name`` is interpreted as a certificate name.
By default, *name* is interpreted as a certificate name.
Options
-------
``-i``
Interpret ``name`` as an identity name. If specified, the certificate to dump is the default
certificate of the identity.
.. option:: -i, --identity
``-k``
Interpret ``name`` as a key name. If specified, the certificate to dump is the default certificate
of the key.
Interpret *name* as an identity name. If specified, the certificate to dump
is the default certificate of the identity.
``-f``
Interpret ``name`` as a path to a file containing the certificate. If ``name`` is ``-``,
certificate will be read from standard input.
.. option:: -k, --key
``-p``
Print out the certificate to a human-readable format.
Interpret *name* as a key name. If specified, the certificate to dump is the
default certificate of the key.
Examples
--------
.. option:: -f, --file
Dump a certificate from PIB to standard output:
::
Interpret *name* as a path to a file containing the certificate. If *name*
is "-", the certificate will be read from the standard input.
.. option:: -p, --pretty
Print the certificate in a human-readable format.
Example
-------
Dump a certificate from PIB to standard output::
$ ndnsec-cert-dump /ndn/test/david/KEY/ksk-1396913058196/ID-CERT/%00%00%01E%3E%9D%A0%DE
Dump a certificate to a human-readable format:
::
Dump a certificate in human-readable format::
$ ndnsec-cert-dump -p /ndn/test/david/KEY/ksk-1396913058196/ID-CERT/%00%00%01E%3E%9D%A0%DE
Certificate name:
+66 -48
View File
@@ -1,73 +1,91 @@
ndnsec-cert-gen
===============
``ndnsec-cert-gen`` is a tool to issue an identity certificate.
Synopsis
--------
Usage
-----
::
$ ndnsec-cert-gen [-h] [-S timestamp] [-E timestamp] [-I info] [-s sign-id] [-i issuer-id] request
**ndnsec-cert-gen** [**-h**] [**-S** *timestamp*] [**-E** *timestamp*]
[**-I** *info*]... [**-s** *signer*] [**-i** *issuer*] *file*
Description
-----------
``ndnsec-cert-gen`` takes signing request as input and issues an identity certificate for the key in
the signing request. The signing request can be created during ``ndnsec-keygen`` and can be
re-generated with ``ndnsec-sign-req``.
:program:`ndnsec-cert-gen` takes a signing request as input and issues an
identity certificate for the key in the signing request. The signing request
can be created with :program:`ndnsec-key-gen` and can be re-generated with
:program:`ndnsec-sign-req`.
By default, the default key/certificate will be used to sign the issued certificate.
By default, the default key is used to sign the issued certificate.
``request`` could be a path to a file that contains the signing request. If ``request`` is ``-``,
then signing request will be read from standard input.
*file* is the name of a file that contains the signing request. If *file* is
"-", the signing request is read from the standard input.
The generated certificate will be written to standard output in base64 encoding.
The generated certificate is written to the standard output in base64 encoding.
Options
-------
``-S timestamp``
Timestamp when the certificate becomes valid. The default value is now.
.. option:: -S <timestamp>, --not-before <timestamp>
``-E timestamp``
Timestamp when the certificate expires. The default value is one year from now.
Date and time when the certificate becomes valid, in "YYYYMMDDhhmmss" format.
The default value is now.
``-I info``
Other information to be included in the issued certificate. For example,
.. option:: -E <timestamp>, --not-after <timestamp>
::
Date and time when the certificate expires, in "YYYYMMDDhhmmss" format.
The default value is 365 days after the **--not-before** timestamp.
-I "affiliation Some Organization" -I "homepage http://home.page/"
.. option:: -I <info>, --info <info>
``-s sign-id``
Signing identity. The default key/certificate of ``sign-id`` will be used to sign the requested
certificate. If this option is not specified, the system default identity will be used.
Other information to be included in the issued certificate. Must be in the
form of key and value pairs, where the key is an arbitrary string without
spaces, followed by one or more spaces, followed by an arbitrary string
representing the value. This option may be repeated multiple times.
``-s issuer-id``
Issuer's ID to be included as part of the issued certificate name. If not specified, "NA"
value will be used
For example::
Examples
--------
-I "affiliation Some Organization" -I "homepage https://home.page/"
.. option:: -s <signer>, --sign-id <signer>
Signing identity. The default key/certificate of *signer* will be used to
sign the requested certificate. If this option is not specified, the system
default identity will be used.
.. option:: -i <issuer>, --issuer-id <issuer>
Issuer's ID to be included in the issued certificate name. The default
value is "NA".
Example
-------
::
$ ndnsec-cert-gen -S 20140401000000 -E 20150331235959 -N "David"
-I "2.5.4.10 'Some Organization'" -s /ndn/test sign_request.cert
Bv0C9wc9CANuZG4IBHRlc3QIA0tFWQgFZGF2aWQIEWtzay0xMzk2OTEzMDU4MTk2
CAdJRC1DRVJUCAgAAAFFPp2g3hQDGAECFf0BdjCCAXIwIhgPMjAxNDA0MDEwMDAw
MDBaGA8yMDE1MDMzMTIzNTk1OVowKDAMBgNVBCkTBURhdmlkMBgGA1UEChMRU29t
ZSBPcmdhbml6YXRpb24wggEgMA0GCSqGSIb3DQEBAQUAA4IBDQAwggEIAoIBAQC0
urnS2nKcnXnMTESH2XqO+H8c6bCE6mmv+FMQ9hSfZVOHbX4kkiDmkcAAf8NCvwGr
kEat0NQIhKHFLFtofC5rXLheAo/UxgFA/9bNwiEjMH/c8EN2YTSMzdCDrK6TwE7B
623cLTsa3Bb11+BpzC1oLb3Egedgp+vIf+AFIgNQhvfwzsgsgOBB4iJBwcYegU7w
JsO0pjY69WQU2DGjABFef6C2Qh8x0TvtnynRLbWlh928+4ilVUvLuWcV3AbPIKLe
eZu13+v01JN6kFzNZDPMFtOFPvJ943IdYu7Q9k93PzhSk0+wFp3cHH21PfWeghWe
3zLIER8RTWPIQhWSbxRVAgERFjMbAQEcLgcsCANuZG4IA0tFWQgEdGVzdAgRa3Nr
LTEzOTQxMjk2OTQ3ODgIB0lELUNFUlQX/QEABUGcl7U+F8cwMHKckerv+1H2Nvsd
OfeqX0+4RzWU+wRx2emMGMZZdHSx8M/i45hb0P5hbNEF99L35/SrSTSzhTZdOriD
t/LQOcKBoNXY+iw3EUFM0gvRGU0kaEVBKAHtbYhtoHc48QLEyrsVaMqmrjCmpeF/
JOcClhzJfFW3cZ/SlhcTEayF0ntogYLR2cMzIwQhhSj5L/Kl7I7uxNxZhK1DS98n
q8oGAxHufEAluPrRpDQfI+jeQ4h/YYKcXPW3Vn7VQAGOqIi6gTlUxrmEbyCDF70E
xj5t3wfSUmDa1N+hLRMdEAI+IjRRHDSx2Lhj/QcoPIZPWwKjBz9CBL92og==
$ ndnsec-cert-gen -S 20200501000000 -E 20210101000000 -I "affiliation Some Organization" -I "foobar Foo Bar" -i "Universe" -s /ndn/test request.cert > signed.cert
$ cat signed.cert
Bv0BcgctCAdleGFtcGxlCANLRVkICOQUmX8oloLrCAhVbml2ZXJzZQgJ/QAAAXHR
Ak6CFAkYAQIZBAA27oAVWzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABDpJsCkv
E5RMjxRVdyK6W6z+FoCq+qREEn/sxf+n2gnsl25qm1NarCfSGf96zIJy9BRA9btu
MMeuWlAN/ymvMFwWkBsBAxwcBxoIA25kbggEdGVzdAgDS0VZCAhJP1OaKLualf0A
/Sb9AP4PMjAyMDA1MDFUMDAwMDAw/QD/DzIwMjEwMTAxVDAwMDAwMP0BAkH9AgAk
/QIBC2FmZmlsaWF0aW9u/QICEVNvbWUgT3JnYW5pemF0aW9u/QIAFf0CAQZmb29i
YXL9AgIHRm9vIEJhchdHMEUCIQDPT9Hq1kvkE0r9W1aYSBVTnHlTEzgtz+v1DwkC
ug/vLAIgY3xJITCwf55sqey33q5GIQSk1TRCkNNl58ojvPs5sNU=
$ ndnsec-dump-certificate -p -f signed.cert
Certificate name:
/example/KEY/%E4%14%99%7F%28%96%82%EB/Universe/%FD%00%00%01q%D1%02N%82
Validity:
NotBefore: 20200501T000000
NotAfter: 20210101T000000
Additional Description:
affiliation: Some Organization
foobar: Foo Bar
Public key bits:
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEOkmwKS8TlEyPFFV3IrpbrP4WgKr6
pEQSf+zF/6faCeyXbmqbU1qsJ9IZ/3rMgnL0FED1u24wx65aUA3/Ka8wXA==
Signature Information:
Signature Type: SignatureSha256WithEcdsa
Key Locator: Name=/ndn/test/KEY/I%3FS%9A%28%BB%9A%95
+24 -30
View File
@@ -1,56 +1,50 @@
ndnsec-cert-install
===================
``ndnsec-cert-install`` is a tool to install a certificate into **Public Information Base (PIB)**.
Synopsis
--------
Usage
-----
::
$ ndnsec-cert-install [-h] [-IKN] cert-source
**ndnsec-cert-install** [**-h**] [**-I**\|\ **-K**\|\ **-N**] *file*
Description
-----------
``ndnsec-cert-install`` can insert a certificate into PIB. By default, the installed certificate
will be set as the default certificate of its corresponding identity and the identity is set as
the system default identity.
:program:`ndnsec-cert-install` allows importing a certificate into the
**Public Information Base (PIB)**. By default, the installed certificate
will be set as the default certificate for the corresponding identity and
the identity will be set as the user's default identity.
``cert-source`` could be a filesystem path or an HTTP URL of a file containing to certificate to
install or . If ``cert-file`` is ``-``, the certificate will be read from standard input.
*file* can be a filesystem path or an HTTP URL of a file containing the certificate
to install. If *file* is "-", the certificate will be read from the standard input.
Options
-------
``-I``
Set the certificate as the default certificate of its corresponding identity, but do not change
the system default identity.
.. option:: -I, --identity-default
``-K``
Set the certificate as the default certificate of its corresponding key, but do not change the
corresponding identity's default key and the system default identity.
Set the certificate as the default certificate for the corresponding identity,
but do not change the user's default identity.
``-N``
Install the certificate but do not change any default settings.
.. option:: -K, --key-default
Examples
--------
Set the certificate as the default certificate for the corresponding key, but
do not change the identity's default key or the user's default identity.
Install a certificate and set it as the system default certificate:
.. option:: -N, --no-default
::
Install the certificate but do not change any default settings.
Example
-------
Install a certificate and set it as the default certificate::
$ ndnsec-cert-install cert_file.cert
Install a certificate with HTTP URL and set it as the system default certificate:
::
Install a certificate via HTTP and set it as the default certificate::
$ ndnsec-install-cert "http://ndncert.domain.com/cert/get/my-certificate.ndncert"
Install a certificate but do not change any default settings:
::
Install a certificate but do not change any default settings::
$ ndnsec-cert-install -N cert_file.cert
+18 -20
View File
@@ -1,32 +1,32 @@
ndnsec-delete
=============
``ndnsec-delete`` is a tool to delete security data from both **Public Info Base** and
**Trusted Platform Module**.
Synopsis
--------
Usage
-----
::
ndnsec-delete [-h] [-kc] name
**ndnsec-delete** [**-h**] [**-k**\|\ **-c**] *name*
Description
-----------
By default, ``ndnsec-delete`` interpret ``name`` as an identity name. If an identity is deleted,
all the keys and certificates belonging to the identity will be deleted as well. If a key is
deleted, all the certificate belonging to the key will be deleted as well.
:program:`ndnsec-delete` allows to delete security data from both the
**Public Info Base (PIB)** and the **Trusted Platform Module (TPM)**.
By default, :program:`ndnsec-delete` will interpret *name* as an identity name.
If an identity is deleted, all keys and certificates belonging to that identity
will be deleted as well. If a key is deleted, all certificates associated with
that key will be deleted as well.
Options
-------
``-k``
Interpret ``name`` as a key name and delete the key and its related data.
.. option:: -k, --delete-key
``-c``
Interpret ``name`` as a certificate name and delete the certificate.
Interpret *name* as a key name and delete the key and its associated data.
.. option:: -c, --delete-cert
Interpret *name* as a certificate name and delete the certificate.
Exit Status
-----------
@@ -35,11 +35,9 @@ Normally, the exit status is 0 if the requested entity is deleted successfully.
If the entity to be deleted does not exist, the exit status is 1.
For other errors, the exit status is 2.
Examples
--------
Example
-------
Delete all data related to an identity:
::
Delete all data related to an identity::
$ ndnsec-delete /ndn/test/david
+32 -22
View File
@@ -1,43 +1,53 @@
ndnsec-export
=============
Usage
-----
Synopsis
--------
::
$ ndnsec-export [-h] [-o output] identity
**ndnsec-export** [**-h**] [**-o** *file*] [**-P** *passphrase*]
[**-i**\|\ **-k**\|\ **-c**] *name*
Description
-----------
``ndnsec-export`` exports the default certificate of an identity and its private key as a file. It
will ask for a passphrase to encrypt the private key. The output file can be imported again with
``ndnsec-import`` command.
:program:`ndnsec-export` exports a certificate from the **Public Info Base (PIB)** and
its private key to a file. It will ask for a passphrase to encrypt the private key.
The resulting file can be imported again using :program:`ndnsec-import`.
Options
-------
``-h``
Print a help message.
.. option:: -i, --identity
``-o output``
Write to an output file instead of the standard output.
Interpret *name* as an identity name. The default certificate of the identity will be exported.
This is the default unless **-k** or **-c** is specified.
``identity``
The identity name.
.. option:: -k, --key
Examples
--------
Interpret *name* as a key name. The default certificate of the key will be exported.
Export an identity's default certificate and private key into a file:
.. option:: -c, --cert
::
Interpret *name* as a certificate name.
.. option:: -o <file>, --output <file>
Write to the specified output file instead of the standard output.
.. option:: -P <passphrase>, --password <passphrase>
Passphrase to use for the export. If empty or not specified, the user is
interactively asked to type the passphrase on the terminal. Note that
specifying the passphrase via this option is insecure, as it can potentially
end up in the shell's history, be visible in :command:`ps` output, and so on.
Example
-------
Export an identity's default certificate and private key into a file::
$ ndnsec-export -o alice.ndnkey /ndn/test/alice
Export an identity's default certificate and private key to the standard output:
Export a specific certificate and its private key to the standard output::
::
$ ndnsec-export /ndn/test/alice
$ ndnsec-export -c /ndn/edu/ucla/alice/KEY/1%5D%A7g%90%B2%CF%AA/self/%FD%00%00%01r-%D3%DC%2A
+26 -31
View File
@@ -1,61 +1,56 @@
ndnsec-get-default
==================
``ndnsec-get-default`` is a tool to display the default setting of a particular entity.
Synopsis
--------
Usage
-----
::
$ ndnsec-get-default [-h] [-kc] [-i identity|-K key] [-q]
**ndnsec-get-default** [**-h**] [**-k**\|\ **-c**] [**-i** *identity*\|\ **-K** *key*] [**-q**]
Description
-----------
Given a particular entity, ``ndnsec-get-default`` can display its default setting as specified in
options. If ``identity`` is specified, the given entity becomes the identity. If ``key`` is
specified, the given identity becomes the key. If no entity is specified, the command will take the
system default identity as the given entity.
Given a particular entity, :program:`ndnsec-get-default` shows its default settings
according to the command-line options. By default, if neither **-i** nor **-K** is
given, the command displays the default identity or the default key/certificate of
the default identity.
Options
-------
``-k``
Display the given entity's default key name.
.. option:: -k, --default-key
``-c``
Display the given entity's default certificate name.
Display the chosen entity's default key name.
``-i identity``
Display default setting of the ``identity``
.. option:: -c, --default-cert
``-K key``
Display default setting of the ``key``.
Display the chosen entity's default certificate name.
``-q``
Disable trailling new line character.
.. option:: -i <identity>, --identity <identity>
Examples
--------
Display default settings of *identity*.
Display an identity's default key name.
.. option:: -K <key>, --key <key>
::
Display default settings of *key*.
.. option:: -q, --quiet
Disable printing the trailing newline character.
Example
-------
Display an identity's default key name::
$ ndnsec-get-default -k -i /ndn/test/alice
/ndn/test/alice/ksk-1394129695025
Display an identity's default certificate name.
::
Display an identity's default certificate name::
$ ndnsec-get-default -c -i /ndn/test/alice
/ndn/test/KEY/alice/ksk-1394129695025/ID-CERT/%FD%01D%98%9A%F2%3F
Display a key's default certificate name.
::
Display a key's default certificate name::
$ ndnsec-get-default -c -K /ndn/test/alice/ksk-1394129695025
/ndn/test/KEY/alice/ksk-1394129695025/ID-CERT/%FD%01D%98%9A%F2%3F
+16 -16
View File
@@ -1,33 +1,33 @@
ndnsec-import
=============
Usage
-----
Synopsis
--------
::
$ ndnsec-import [-h] input
**ndnsec-import** [**-h**] [**-P** *passphrase*] *file*
Description
-----------
``ndnsec-import`` imports a certificate and private key from a file created by ``ndnsec-export``. It
will ask for the passphrase used to encrypt the private key.
:program:`ndnsec-import` imports a certificate and its private key from a file
created by :program:`ndnsec-export`. It will ask for the passphrase used to
encrypt the private key.
If *file* is "-", read from the standard input.
Options
-------
``-h``
Print a help message.
.. option:: -P <passphrase>, --password <passphrase>
``input``
Read from an input file. Specify ``-`` to read from the standard input.
Passphrase to use for the export. If empty or not specified, the user is
interactively asked to type the passphrase on the terminal. Note that
specifying the passphrase via this option is insecure, as it can potentially
end up in the shell's history, be visible in :command:`ps` output, and so on.
Examples
--------
Example
-------
Import a certificate and private key from a file:
::
Import a certificate and private key from a file::
$ ndnsec-import alice.ndnkey
+28 -19
View File
@@ -1,38 +1,47 @@
ndnsec-key-gen
==============
``ndnsec-key-gen`` is tool to generate a pair of key.
Synopsis
--------
Usage
-----
::
$ ndnsec-key-gen [-h] [-n] [-d] [-t keyType] identity
**ndnsec-key-gen** [**-h**] [**-n**] [**-t** *type*]
[**-k** *keyidtype*\|\ **--keyid** *keyid*] *identity*
Description
-----------
``ndnsec-key-gen`` creates a key pair for the specified ``identity`` and sets the key as the
identity's default key. ``ndnsec-key-gen`` will also create a signing request for the generated key.
The signing request will be written to standard output in base64 encoding.
:program:`ndnsec-key-gen` generates a key pair for the specified *identity* and
sets the generated public key as the identity's default key.
:program:`ndnsec-key-gen` will also create a signing request for the generated key.
The signing request will be written to the standard output in base64 encoding.
By default, it will also set the identity as the system default identity.
By default, it will also set the identity as the user's default identity.
Options
-------
``-n``
Do not set the identity as the system default identity.
.. option:: -n, --not-default
Note that if it is the first identity/key/certificate, then it will be
set as default regardless of ``-n`` flag.
Do not set the identity as the user's default identity.
``-t keyType``
Specify the key type. ``r`` (default) for RSA key. ``e`` for ECDSA key.
Note that if no other identity/key/certificate exists, then the identity
will become the default regardless of this option.
Examples
--------
.. option:: -t <type>, --type <type>
Type of key to generate. "r" for RSA, "e" for ECDSA (the default).
.. option:: -k <keyidtype>, --keyid-type <keyidtype>
Type of KeyId for the generated key. "r" for a 64-bit random number (the default
unless **--keyid** is specified), "h" for the SHA-256 of the public key.
.. option:: --keyid <keyid>
User-specified KeyId. Must be a non-empty generic name component.
Example
-------
::
+19 -26
View File
@@ -1,24 +1,20 @@
ndnsec-list
===========
``ndnsec-list`` is a tool to display entities stored in **Public Information Base (PIB)**, such as
identities, keys, and certificates.
Synopsis
--------
Usage
-----
::
$ ndnsec-list [-h] [-KkCc]
**ndnsec-list** [**-h**] [**-k**\|\ **-c**]
Description
-----------
``ndnsec-list`` lists names of all the entities according to the granularity specified in options
(The default granularity is identity). The default entities will be marked with ``*`` in front of
their names. For example:
:program:`ndnsec-list` prints the names of all the entities stored in the
**Public Information Base (PIB)**, such as identities, keys, and certificates,
up to the given granularity level. By default, only the identity names are
shown. The default entities will be marked with a "*" in front of their names.
::
For example::
$ ndnsec list
* /ndn/edu/ucla/cs/yingdi
@@ -26,24 +22,23 @@ their names. For example:
/ndn/test/bob
/ndn/test/alice
Options
-------
``-K, -k``
Display key names for each identity. The key name with ``*`` in front is the default key name of
the corresponding identity.
.. option:: -k, --key
``-C, -c``
Display certificate names for each key. The certificate name with ``*`` in front is the default
certificate name of the corresponding key.
Display key names for each identity. The key name with a "*" in front is
the default key name of the corresponding identity.
Examples
--------
.. option:: -c, --cert
Display all the key names in PIB.
Display certificate names for each key. The certificate name with a "*"
in front is the default certificate name of the corresponding key.
::
Example
-------
Display all the key names in PIB::
$ ndnsec-list -k
* /ndn/edu/ucla/cs/yingdi
@@ -59,9 +54,7 @@ Display all the key names in PIB.
/ndn/test/alice
+->* /ndn/test/alice/ksk-1394129695025
Display all the certificate names in PIB.
::
Display all the certificate names in PIB::
$ ndnsec-list -c
* /ndn/edu/ucla/cs/yingdi
+19 -25
View File
@@ -1,49 +1,43 @@
ndnsec-set-default
==================
``ndnsec-set-default`` is a tool to change the default security settings.
Synopsis
--------
Usage
-----
::
$ ndnsec-set-default [-h] [-k|c] name
**ndnsec-set-default** [**-h**] [**-k**\|\ **-c**] *name*
Description
-----------
By default, ``ndnsec-set-default`` takes ``name`` as an identity name and sets the identity as the
system default identity.
:program:`ndnsec-set-default` allows changing the default security settings.
Without any options, *name*, which must be an identity name, is set as the
default identity for the current user.
Options
-------
``-k``
Set default key. ``name`` should be a key name, ``ndnsec-set-default`` can infer the corresponding
identity and set the key as the identity's default key.
.. option:: -k, --default-key
``-c``
Set default certificate. ``name`` should be a certificate name, ``ndnsec-set-default`` can
infer the corresponding key name and set the certificate as the key's default certificate.
Set *name*, which must be a key name, as the default key for the
corresponding identity.
Examples
--------
.. option:: -c, --default-cert
Set a key's default certificate:
Set *name*, which must be a certificate name, as the default certificate
for the corresponding key.
::
Example
-------
Set a key's default certificate::
$ ndnsec-set-default -c /ndn/test/KEY/alice/ksk-1394129695025/ID-CERT/%FD%01D%98%9A%F2%3F
Set an identity's default key:
::
Set an identity's default key::
$ ndnsec-set-default -k /ndn/test/alice/ksk-1394129695025
Set system default identity:
::
Set the user's default identity::
$ ndnsec-set-default /ndn/test/alice
+17 -22
View File
@@ -1,37 +1,35 @@
ndnsec-sign-req
===============
``ndnsec-sign-req`` is a tool to generate a signing request for a particular key.
Synopsis
--------
Usage
-----
::
$ ndnsec-sign-req [-h] [-k] name
**ndnsec-sign-req** [**-h**] [**-k**] *name*
Description
-----------
The signing request of a key is actually a self-signed certificate. Given key's information,
``ndnsec-sign-req`` looks up the key in PIB. If such a key exists, a self-signed certificate of the
key, or its signing request, will be outputed to **stdout** with base64 encoding.
:program:`ndnsec-sign-req` generates a signing request for a key.
By default, ``name`` is interpreted as an identity name. ``ndnsec-sign-req`` will generate a
signing request for the identity's default key.
The signing request of a key is actually a self-signed certificate. Given the
key's information, :program:`ndnsec-sign-req` looks up the key in the PIB.
If such a key exists, a self-signed certificate for the key, i.e. its signing
request, is written to the standard output in base64 encoding.
By default, *name* is interpreted as an identity name, and the signing request
will be generated for that identity's default key.
Options
-------
``-k``
Interpret ``name`` as a key name.
.. option:: -k, --key
Examples
--------
Interpret *name* as a key name, instead of an identity name.
Create a signing request for an identity's default key.
Example
-------
::
Create a signing request for an identity's default key::
$ ndnsec-sign-req /ndn/test/david
Bv0DAAc9CANuZG4IBHRlc3QIBWRhdmlkCANLRVkIEWtzay0xMzk2OTk4Mzg5MjU3
@@ -52,10 +50,7 @@ Create a signing request for an identity's default key.
0wHjvDS1cuIH2j6XveoUYapRjZXaEZqB/YoBwRqEYq2KVn/ol5knLM6FIISXXjxn
cIh62A==
Create a signing request for a particular key.
::
Create a signing request for a particular key::
$ ndnsec-sign-req -k /ndn/test/david/ksk-1396913058196
Bv0DAAc9CANuZG4IBHRlc3QIBWRhdmlkCANLRVkIEWtzay0xMzk2OTEzMDU4MTk2
+5 -9
View File
@@ -1,17 +1,13 @@
ndnsec-unlock-tpm
=================
``ndnsec-unlock-tpm`` is a tool to (temporarily) unlock the **Trusted Platform Module (TPM)** that
manages private keys.
Synopsis
--------
Usage
-----
::
$ ndnsec-unlock-tpm [-h]
ndnsec-unlock-tpm [**-h**]
Description
-----------
``ndnsec-unlock-tpm`` will ask for password to unlock the TPM.
:program:`ndnsec-unlock-tpm` can be used to (temporarily) unlock the
**Trusted Platform Module (TPM)** that manages private keys.
+46 -64
View File
@@ -1,89 +1,71 @@
ndnsec
======
``ndnsec`` is a command-line toolkit to perform various NDN security management
operation.
:program:`ndnsec` is a command-line toolkit to perform various NDN security
management operations.
Usage
-----
Synopsis
--------
::
**ndnsec** *command* [*argument*]...
$ ndnsec <command> [<args>]
or alternatively
::
$ ndnsec-command [<args>]
**ndnsec-**\ *command* [*argument*]...
Description
-----------
The NDN security data are stored and managed in two places: **Public Information Base** and
**Trusted Platform Module**. ``ndnsec`` toolkit provides a command-line interface of managing and
using the NDN security data.
The NDN security data are stored in two places: **Public Information Base**
(PIB) and **Trusted Platform Module** (TPM). The :program:`ndnsec` toolkit
provides a command-line interface for managing and using the NDN security data.
ndnsec commands
---------------
Commands
--------
ndnsec-list_
Display information in PublicInfo.
list_
List all known identities/keys/certificates.
ndnsec-get-default_
Get default setting info.
get-default_
Show the default identity/key/certificate.
ndnsec-set-default_
Configure default setting.
set-default_
Change the default identity/key/certificate.
ndnsec-key-gen_
Generate a Key-Signing-Key for an identity.
delete_
Delete an identity/key/certificate.
ndnsec-dsk-gen_
Generate a Data-Signing-Key (DSK) for an identity and sign the DSK using the corresponding KSK.
key-gen_
Generate a key for an identity.
ndnsec-sign-req_
sign-req_
Generate a certificate signing request.
ndnsec-cert-gen_
Generate an identity certificate.
cert-gen_
Create a certificate for an identity.
ndnsec-cert-dump_
Dump a certificate from PublicInfo.
cert-dump_
Export a certificate.
ndnsec-cert-install_
Install a certificate into PublicInfo.
cert-install_
Import a certificate from a file.
ndnsec-delete_
Delete identity/key/certificate.
export_
Export an identity as a SafeBag.
ndnsec-export_
Export an identity package.
import_
Import an identity from a SafeBag.
ndnsec-import_
Import an identity package.
unlock-tpm_
Unlock the TPM.
ndnsec-set-acl_
Configure ACL of a private key.
ndnsec-unlock-tpm_
Unlock Tpm.
ndnsec-op-tool_
Operator tool.
.. _ndnsec-list: ndnsec-list.html
.. _ndnsec-get-default: ndnsec-get-default.html
.. _ndnsec-set-default: ndnsec-set-default.html
.. _ndnsec-key-gen: ndnsec-key-gen.html
.. _ndnsec-dsk-gen: ndnsec-dsk-gen.html
.. _ndnsec-sign-req: ndnsec-sign-req.html
.. _ndnsec-cert-gen: ndnsec-cert-gen.html
.. _ndnsec-cert-dump: ndnsec-cert-dump.html
.. _ndnsec-cert-install: ndnsec-cert-install.html
.. _ndnsec-delete: ndnsec-delete.html
.. _ndnsec-export: ndnsec-export.html
.. _ndnsec-import: ndnsec-import.html
.. _ndnsec-set-acl: ndnsec-set-acl.html
.. _ndnsec-unlock-tpm: ndnsec-unlock-tpm.html
.. _ndnsec-op-tool: ndnsec-op-tool.html
.. _list: ndnsec-list.html
.. _get-default: ndnsec-get-default.html
.. _set-default: ndnsec-set-default.html
.. _delete: ndnsec-delete.html
.. _key-gen: ndnsec-key-gen.html
.. _sign-req: ndnsec-sign-req.html
.. _cert-gen: ndnsec-cert-gen.html
.. _cert-dump: ndnsec-cert-dump.html
.. _cert-install: ndnsec-cert-install.html
.. _export: ndnsec-export.html
.. _import: ndnsec-import.html
.. _unlock-tpm: ndnsec-unlock-tpm.html
+27 -68
View File
@@ -1,86 +1,45 @@
{#
named_data_theme/layout.html
~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#}
{% extends "basic/layout.html" %}
{%- extends "agogo/layout.html" %}
{% block header %}
<!--headercontainer-->
<div id="header_container">
<!--header-->
<div class="row">
<div class="three columns">
<div id="logo">
<a href="http://named-data.net" title="A Future Internet Architecture"><img src="http://named-data.net/wp-content/uploads/cropped-20130722_Logo2.png" alt="" /></a>
</div><!--logo end-->
</div>
<!--top menu-->
<div class="nine columns" id="menu_container" >
<h1><a href="{{ pathto(master_doc) }}">{{ shorttitle|e }}</a></h1>
</div>
<div class="row">
<div class="three columns">
<p class="logo"><a href="https://named-data.net" title="A Future Internet Architecture">
<img class="logo" src="{{ pathto('_static/ndn-logo.svg', 1)|e }}" alt="Logo" width="210"/>
</a></p>
</div>
</div><!--header container end-->
{% endblock %}
{% block content %}
<div class="content-wrapper">
<div class="content">
<div class="document">
{%- block document %}
{{ super() }}
{%- endblock %}
<div id="menu_container" class="nine columns">
<h1><a href="{{ pathto(master_doc)|e }}">{{ shorttitle|e }}</a></h1>
</div>
<div class="sidebar">
{%- block sidebartoc %}
<h3>{{ _('Table Of Contents') }}</h3>
{{ toctree(includehidden=True) }}
<h3>{{ _('Developer documentation') }}</h3>
<ul>
<li class="toctree-l1"><a class="reference internal" href="doxygen/annotated.html">API documentation (doxygen)</a></li>
<li class="toctree-l1"><a class="reference internal" href="code-style.html">ndn-cxx Code Style and Coding Guidelines</a></li>
</ul>
{%- endblock %}
{%- block sidebarsearch %}
<h3 style="margin-top: 1.5em;">{{ _('Search') }}</h3>
<form class="search" action="{{ pathto('search') }}" method="get">
<input type="text" name="q" />
<input type="submit" value="{{ _('Go') }}" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
{{ _('Enter search terms or a module, class or function name.') }}
</p>
{%- endblock %}
</div>
<div class="clearer"></div>
</div>
</div>
{% endblock %}
{%- block sidebartoc %}
<h3>{{ _('Table of Contents') }}</h3>
{{ toctree(includehidden=True) }}
<h3>{{ _('Developer Documentation') }}</h3>
<ul>
<li class="toctree-l1"><a class="reference internal" href="doxygen/annotated.html">API Documentation (doxygen)</a></li>
<li class="toctree-l1"><a class="reference internal" href="code-style.html">ndn-cxx Code Style and Coding Guidelines</a></li>
</ul>
{%- endblock %}
{% block footer %}
<div id="footer-container">
<!--footer container-->
<div class="row">
</div><!-- footer container-->
</div>
<div id="footer-info">
<!--footer container-->
<div class="row">
<div class="twelve columns">
<div id="copyright">This research is partially supported by NSF (Award <a href="http://www.nsf.gov/awardsearch/showAward?AWD_ID=1040868" target="_blank>">CNS-1040868</a>)<br/><br/><a rel="license" href="http://creativecommons.org/licenses/by/3.0/deed.en_US" target="_blank">Creative Commons Attribution 3.0 Unported License</a> except where noted.</div>
</div>
<div class="row">
<div class="twelve columns">
<div id="copyright">
This research is partially supported by NSF (Award <a href="http://www.nsf.gov/awardsearch/showAward?AWD_ID=1040868" target="_blank">CNS-1040868</a>).<br/><br/>
Licensed under a <a rel="license" href="http://creativecommons.org/licenses/by/3.0/" target="_blank">Creative Commons Attribution 3.0 Unported License</a> except where noted.
</div>
</div>
</div><!--footer info end-->
</div>
</div>
{% endblock %}
{% block relbar1 %}{% endblock %}
{% block relbar2 %}{% endblock %}
-459
View File
@@ -1,459 +0,0 @@
* {
margin: 0px;
padding: 0px;
}
html { font-size: 62.5%; }
body {
font-family: {{ theme_bodyfont }};
background-color: {{ theme_bgcolor }};
color: #777;
border-top: 4px solid #fd7800;
}
body { background: white; font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif; font-size: 14px; line-height: 1; color: #222222; position: relative; -webkit-font-smoothing: antialiased; }
/* Page layout */
div.header, div.content, div.footer {
width: 90%;
margin-left: auto;
margin-right: auto;
}
div.header-wrapper {
background: {{ theme_headerbg }};
border-bottom: 3px solid #2e3436;
}
/* Default body styles */
a {
color: {{ theme_linkcolor }};
}
div.bodywrapper a, div.footer a {
text-decoration: none;
}
.clearer {
clear: both;
}
.left {
float: left;
}
.right {
float: right;
}
.line-block {
display: block;
margin-top: 1em;
margin-bottom: 1em;
}
.line-block .line-block {
margin-top: 0;
margin-bottom: 0;
margin-left: 1.5em;
}
h1, h2, h3, h4 {
font-family: {{ theme_headerfont }};
font-weight: normal;
color: {{ theme_headercolor2 }};
margin-bottom: .8em;
}
h1 {
color: {{ theme_headercolor1 }};
}
h2 {
padding-bottom: .5em;
border-bottom: 1px solid {{ theme_headercolor2 }};
}
a.headerlink {
visibility: hidden;
color: #dddddd;
padding-left: .3em;
}
h1:hover > a.headerlink,
h2:hover > a.headerlink,
h3:hover > a.headerlink,
h4:hover > a.headerlink,
h5:hover > a.headerlink,
h6:hover > a.headerlink,
dt:hover > a.headerlink {
visibility: visible;
}
img {
border: 0;
}
div.admonition {
margin-top: 10px;
margin-bottom: 10px;
padding: 2px 7px 1px 7px;
border-left: 0.2em solid black;
}
p.admonition-title {
margin: 0px 10px 5px 0px;
font-weight: bold;
}
dt:target, .highlighted {
background-color: #fbe54e;
}
/* Header */
div.header {
padding-top: 10px;
padding-bottom: 10px;
}
div.header .headertitle {
font-family: {{ theme_headerfont }};
font-weight: normal;
font-size: 180%;
letter-spacing: .08em;
margin-bottom: .8em;
}
div.header .headertitle a {
color: white;
}
div.header div.rel {
margin-top: 1em;
}
div.header div.rel a {
color: {{ theme_headerlinkcolor }};
letter-spacing: .1em;
text-transform: uppercase;
}
p.logo {
float: right;
}
img.logo {
border: 0;
}
/* Content */
div.content-wrapper {
background-color: white;
padding-top: 20px;
padding-bottom: 20px;
}
div.document {
width: 70%;
float: left;
}
div.body {
padding-right: 2em;
text-align: left;
}
div.document h1 {
line-height: 120%;
}
div.document ul {
margin-left: 1.5em;
list-style-type: square;
}
div.document dd {
margin-left: 1.2em;
margin-top: .4em;
margin-bottom: 1em;
}
div.document .section {
margin-top: 1.7em;
}
div.document .section:first-child {
margin-top: 0px;
}
div.document div.highlight {
padding: 3px;
background-color: #eeeeec;
border-top: 2px solid #dddddd;
border-bottom: 2px solid #dddddd;
margin-bottom: .8em;
}
div.document h2 {
margin-top: .7em;
}
div.document p {
margin-bottom: .5em;
}
div.document li.toctree-l1 {
margin-bottom: 1em;
}
div.document .descname {
font-weight: bold;
}
div.document .docutils.literal {
background-color: #eeeeec;
padding: 1px;
}
div.document .docutils.xref.literal {
background-color: transparent;
padding: 0px;
}
div.document ol {
margin: 1.5em;
}
/* Sidebar */
div.sidebar {
width: 20%;
float: right;
font-size: .9em;
}
div.sidebar a, div.header a {
text-decoration: none;
}
div.sidebar a:hover, div.header a:hover {
text-decoration: none;
}
div.sidebar h3 {
color: #2e3436;
text-transform: uppercase;
font-size: 130%;
letter-spacing: .1em;
}
div.sidebar ul {
list-style-type: none;
}
div.sidebar li.toctree-l1 a {
display: block;
padding: 1px;
border: 1px solid #dddddd;
background-color: #eeeeec;
margin-bottom: .4em;
padding-left: 3px;
color: #2e3436;
}
div.sidebar li.toctree-l2 a {
background-color: transparent;
border: none;
margin-left: 1em;
border-bottom: 1px solid #dddddd;
}
div.sidebar li.toctree-l3 a {
background-color: transparent;
border: none;
margin-left: 2em;
border-bottom: 1px solid #dddddd;
}
div.sidebar li.toctree-l2:last-child a {
border-bottom: none;
}
div.sidebar li.toctree-l1.current a {
border-right: 5px solid {{ theme_headerlinkcolor }};
}
div.sidebar li.toctree-l1.current li.toctree-l2 a {
border-right: none;
}
div.sidebar input[type="text"] {
width: 170px;
}
div.sidebar input[type="submit"] {
width: 30px;
}
/* Footer */
div.footer-wrapper {
background: {{ theme_footerbg }};
border-top: 4px solid #babdb6;
padding-top: 10px;
padding-bottom: 10px;
min-height: 80px;
}
div.footer, div.footer a {
color: #888a85;
}
div.footer .right {
text-align: right;
}
div.footer .left {
text-transform: uppercase;
}
/* Styles copied from basic theme */
img.align-left, .figure.align-left, object.align-left {
clear: left;
float: left;
margin-right: 1em;
}
img.align-right, .figure.align-right, object.align-right {
clear: right;
float: right;
margin-left: 1em;
}
img.align-center, .figure.align-center, object.align-center {
display: block;
margin-left: auto;
margin-right: auto;
}
.align-left {
text-align: left;
}
.align-center {
text-align: center;
}
.align-right {
text-align: right;
}
/* -- search page ----------------------------------------------------------- */
ul.search {
margin: 10px 0 0 20px;
padding: 0;
}
ul.search li {
padding: 5px 0 5px 20px;
background-image: url(file.png);
background-repeat: no-repeat;
background-position: 0 7px;
}
ul.search li a {
font-weight: bold;
}
ul.search li div.context {
color: #888;
margin: 2px 0 0 30px;
text-align: left;
}
ul.keywordmatches li.goodmatch a {
font-weight: bold;
}
/* -- index page ------------------------------------------------------------ */
table.contentstable {
width: 90%;
}
table.contentstable p.biglink {
line-height: 150%;
}
a.biglink {
font-size: 1.3em;
}
span.linkdescr {
font-style: italic;
padding-top: 5px;
font-size: 90%;
}
/* -- general index --------------------------------------------------------- */
table.indextable td {
text-align: left;
vertical-align: top;
}
table.indextable dl, table.indextable dd {
margin-top: 0;
margin-bottom: 0;
}
table.indextable tr.pcap {
height: 10px;
}
table.indextable tr.cap {
margin-top: 10px;
background-color: #f2f2f2;
}
img.toggler {
margin-right: 3px;
margin-top: 3px;
cursor: pointer;
}
/* -- viewcode extension ---------------------------------------------------- */
.viewcode-link {
float: right;
}
.viewcode-back {
float: right;
font-family:: {{ theme_bodyfont }};
}
div.viewcode-block:target {
margin: -1px -3px;
padding: 0 3px;
background-color: #f4debf;
border-top: 1px solid #ac9;
border-bottom: 1px solid #ac9;
}
td.linenos pre {
padding: 5px 0px;
border: 0;
background-color: transparent;
color: #aaa;
margin-top: -10pt;
}
@@ -1,14 +0,0 @@
@import url("agogo.css");
pre {
padding: 10px;
background-color: #fafafa;
color: #222;
line-height: 1.2em;
border: 2px solid #C6C9CB;
font-size: 1.1em;
/* margin: 1.5em 0 1.5em 0; */
margin: 0;
border-right-style: none;
border-left-style: none;
}
+26 -3
View File
@@ -123,10 +123,10 @@ ul.large li { line-height: 21px; }
ol li ul, ol li ol { margin-left: 20px; margin-bottom: 0; }
/* Blockquotes ---------------------- */
blockquote, blockquote p { line-height: 1.5; }
blockquote, blockquote p { line-height: 1.5; color: #6f6f6f; }
blockquote { margin: 0 0 17px; padding: 9px 20px 0 19px; }
blockquote cite { display: block; font-size: 13pt; color: #555555; }
blockquote { margin: 0 0 17px; padding: 9px 20px 0 19px; border-left: 1px solid #ddd; }
blockquote cite { display: block; font-size: 13px; color: #555555; }
blockquote cite:before { content: "\2014 \0020"; }
blockquote cite a, blockquote cite a:visited { color: #555555; }
@@ -786,3 +786,26 @@ ul.link-list li a { display: block; }
.flex-video.widescreen { padding-bottom: 57.25%; }
.flex-video.vimeo { padding-top: 0; }
.flex-video iframe, .flex-video object, .flex-video embed, .flex-video video { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
@media only screen and (max-device-width: 800px), only screen and (device-width: 1024px) and (device-height: 600px), only screen and (width: 1280px) and (orientation: landscape), only screen and (device-width: 800px), only screen and (max-width: 767px) { .flex-video { padding-top: 0; } }
/* Microformats ---------------------- */
ul.vcard { display: inline-block; margin: 0 0 12px 0; border: 1px solid #ddd; padding: 10px; }
ul.vcard li { margin: 0; display: block; }
ul.vcard li.fn { font-weight: bold; font-size: 15px; font-size: 1.5rem; }
p.vevent span.summary { font-weight: bold; }
p.vevent abbr { cursor: default; text-decoration: none; font-weight: bold; border: none; padding: 0 1px; }
/* Progress Bar ---------------------- */
div.progress { padding: 2px; margin-bottom: 10px; border: 1px solid #cccccc; height: 25px; /* meter */ /* border radii */ }
div.progress .meter { background: #fd7800; height: 100%; display: block; width: 50%; }
div.progress.secondary .meter { background: #e9e9e9; }
div.progress.success .meter { background: #5da423; }
div.progress.alert .meter { background: #c60f13; }
div.progress.radius { -webkit-border-radius: 3px; -moz-border-radius: 3px; -ms-border-radius: 3px; -o-border-radius: 3px; border-radius: 3px; }
div.progress.radius .meter { -webkit-border-radius: 2px; -moz-border-radius: 2px; -ms-border-radius: 2px; -o-border-radius: 2px; border-radius: 2px; }
div.progress.round { -webkit-border-radius: 1000px; -moz-border-radius: 1000px; -ms-border-radius: 1000px; -o-border-radius: 1000px; border-radius: 1000px; }
div.progress.round .meter { -webkit-border-radius: 1000px; -moz-border-radius: 1000px; -ms-border-radius: 1000px; -o-border-radius: 1000px; border-radius: 1000px; }
ul li p { display: inline; }
@@ -0,0 +1,75 @@
@import "agogo.css";
@import "foundation.css";
@import "named_data_style.css";
body, h1, h2, h3, h4, p {
font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;
}
h1 { font-size: 26px; }
h2 { font-size: 20px; }
h3 { font-size: 17px; }
h4 { font-size: 15px; }
h1, h2, h3, h4 {
font-weight: bold;
}
h2, h3, h4 {
line-height: 1.2;
}
blockquote {
border-left: none;
font-style: normal;
}
blockquote p {
color: #222;
}
p.logo {
float: left;
margin: 1px 0 0 0;
padding: 0;
}
table {
border-collapse: collapse;
}
th, td {
border: 1px solid #666;
padding: 5px;
}
div.document p {
margin: 0.5em 0;
padding: 0;
}
div.document ol,
div.document ul {
margin: 0 0 0 2em;
}
div.document pre {
font-size: 13px;
line-height: 1.3;
margin: 0;
padding: 10px 20px;
}
div.document table p {
margin: 0;
}
div.document th p {
font-weight: bold;
}
div.bodywrapper a,
div.header a:hover,
div.sidebar a:hover {
text-decoration: none;
}
@@ -0,0 +1,713 @@
/* General */
/*////////////////////////////////////////////////////////////////////////////////////////////*/
body {
/* background: #ccc;
font: normal 12px Verdana, sans-serif;
color: #777;
line-height:18px; */
border-top: 4px solid #fd7800;
}
a {
/* color: #000;
outline: 0; */
}
a:link {
text-decoration: none;
}
a:visited {
text-decoration: none;
}
a:active,
a:hover {
/* color: #ccc; */
text-decoration: none;
}
h1,h2,h3,h4,h5,h6 {
color: #000;
margin-bottom: 18px;
}
h1 { font-weight: normal; font-size: 24px; line-height: 24px; }
h2 { font-weight: normal; font-size: 18px; line-height: 18px; }
h3 { font-weight: normal; font-size: 14px; line-height: 14px; }
h4 { font-weight: normal; font-size: 12px; line-height: 12px; }
hr {
background-color: #c6c6c6;
border:0;
height: 1px;
margin-bottom: 18px;
clear:both;
}
div.hr {
height: 1px;
background: #c6c6c6;
}
div.hr2 {
height: 1px;
background: #c6c6c6;
}
div.hr hr, div.hr2 hr {
display: none;
}
p {
padding: 0 0 0.5em;
line-height:1.6em;
}
ul {
list-style: square;
margin: 0 0 18px 0;
}
ol {
list-style: decimal;
margin: 0 0 18px 1.5em;
}
ol ol {
list-style:upper-alpha;
}
ol ol ol {
list-style:lower-roman;
}
ol ol ol ol {
list-style:lower-alpha;
}
ul ul,
ol ol,
ul ol,
ol ul {
margin-bottom:0;
}
dl {
margin:0 0 24px 0;
}
dt {
font-weight: bold;
}
dd {
margin-bottom: 18px;
}
strong {
font-weight: bold;
color: #000;
}
cite,
em,
i {
font-style: italic;
border: none;
}
big {
font-size: 131.25%;
}
ins {
background: #FFFFCC;
border: none;
color: #333;
}
del {
text-decoration: line-through;
color: #555;
}
blockquote {
font-style: italic;
padding: 0 3em;
}
blockquote cite,
blockquote em,
blockquote i {
font-style: normal;
}
pre {
background: #f7f7f7;
color: #222;
line-height: 18px;
margin-bottom: 18px;
padding: 1.5em;
}
abbr,
acronym {
border-bottom: 1px solid #666;
cursor: help;
}
ins {
text-decoration: none;
}
sup,
sub {
height: 0;
line-height: 1;
vertical-align: baseline;
position: relative;
font-size: 10px;
}
sup {
bottom: 1ex;
}
sub {
top: .5ex;
}
p,
ul,
ol,
dd,
pre,
hr {
margin-bottom:10px;
}
ul ul,
ol ol,
ul ol,
ol ul {
margin-bottom:0;
}
pre,
kbd,
tt,
var {
font-size: 15px;
line-height: 21px;
}
code {
font-size: 13px;
}
strong,
b,
dt,
th {
color: #000;
}
/* main_container */
/*////////////////////////////////////////////////////////////////////////////////////////////*/
#wrapper {
padding: 0px 0px;
margin-top: 20px;
}
/* header*/
/*////////////////////////////////////////////////////////////////////////////////////////////*/
#search-header{
margin-top:15px;
padding-bottom:13px;
}
#search-header #search{
background: #222;
}
#search-header #search #s{
background: #222;
font-size:12px;
color: #aaa;
}
#header_container{
padding-bottom: 25px;
padding-top: 0px;
background: #fff;
}
#header {
}
#header2 {
}
#content_container{
padding-top: 15px;
}
#left-col {
padding: 10px 20px;
padding-left: 0px;
background: #fff;
}
/*footer*/
/*////////////////////////////////////////////////////////////////////////////////////////////*/
#footer {
padding: 5px 20px;
background: #ddd;
}
#footer-container{
padding: 5px 20px;
background: #303030;
border-top: 8px solid #000;
font-size:11px;
}
#footer-info {
color:#ccc;
text-align:left;
background: #1b1b1b;
padding: 20px 0;
}
#footer-info a{
text-decoration:none;
color: #fff;
}
#footer-info a:hover{
color: #ebebeb;
}
#copyright{float: left;}
.scroll-top {
text-align:right;
}
#footer-bar1 {
padding-right: 40px;
}
#footer-bar2 {
padding-right: 40px;
}
#footer-bar3 {
}
#footer-bar4 {
}
span#follow-box{
position: absolute;
right: 100px;
}
span#follow-box img{
margin: 0 2px;
}
/*logo*/
/*////////////////////////////////////////////////////////////////////////////////////////////*/
#logo {
margin: 0px 0px 0px 0px;
}
#logo2 {
margin: 0px 0px 0px 0px;
}
#logo img{
border: none;
}
#logo2{
text-decoration: none;
font-size: 42px;
letter-spacing: -1pt;
font-weight: bold;
font-family:arial, "Times New Roman", Times, serif;
text-align: left;
line-height: 57px;
padding-left: 0px;
}
#logo2 a, #slogan{
color: #fd7800;
}
#slogan{
text-align: left;
padding-left: 0px;
}
/*search*/
/*////////////////////////////////////////////////////////////////////////////////////////////*/
#search {
width:180px;
height:28px;
border: 1px solid #ccc;
margin-left: 10px;
position: relative;
}
#sidebar #search {
margin-top: 20px;
}
#search #searchsubmit {
background:url(images/go-btn.png) no-repeat top right;
width:28px;
height:28px;
border:0px;
position:absolute;
right: -35px;
}
#search #s {
width:170px;
height:23px;
border:0px;
margin-left:7px;
margin-right:10px;
margin-top:3px;
color:#000;
display: inline;
float: left;
}
/*menu bar*/
/*////////////////////////////////////////////////////////////////////////////////////////////*/
#menu_container{
padding-top: 0px;
}
/*responsive menu*/
/*////////////////////////////////////////////////////////////////////////////////////////////*/
/* default style */
.selectnav { display: none; }
/* small screen */
@media screen and (max-width: 600px) {
.js #nav { display: none; }
.js #nav2 { display: none; }
.js .selectnav { display: block; }
}
/*homepage boxes*/
/*////////////////////////////////////////////////////////////////////////////////////////////*/
#box_container{
padding-top: 35px;
padding-bottom: 15px;
}
.box-head {
float: left;
padding-bottom: 20px;
}
.box-head img{
}
.title-head{
padding-top:2px;
}
.title-box{
color: #333;
line-height: 15px;
text-transform: uppercase;
}
.title-box h1 {
font-size: 18px;
margin-bottom: 3px;
}
.box-content {
float: left;
padding-top: 10px;
line-height: 20px;
}
/* POST */
/*////////////////////////////////////////////////////////////////////////////////////////////*/
.post {
overflow: hidden;
}
.post-shadow{
background: url("images/post_shadow.png") no-repeat bottom;
height: 9px;
margin-bottom: 25px;
}
.post ol{
margin-left: 20px;
}
.post ul {
margin-left: 15px;
}
.post-entry ul { margin: 0 0 10px 10px; }
.post-entry ul li {
display: block;
margin: 5px 0;
padding: 0 0 0 20px;
/*background: url(images/bullet.png) no-repeat 0 7px;*/
}
.post-entry ol {
list-style: decimal;
margin: 0 0 18px 1.6em;
}
.post-entry ol li {
list-style: decimal;
}
.post-entry {
padding-bottom: 10px;
padding-top: 10px;
overflow: hidden;
}
.post-head {
margin-bottom: 5px;
padding-top: 15px;
}
.post-head h1 a, .post-head h1 {
text-decoration:none;
color:#000;
margin: 0px;
font-size: 27px;
}
.post-head h1 a:hover {
color:#777;
}
.post-head-notfound h1, .post-head-404 h1, .post-head-archive h1, .post-head-search h1 {
margin-bottom: 10px;
font-weight:normal;
text-decoration:none;
color:#000;
font-size: 27px;
}
.post-thumb img {
border: 0px solid #ebebeb;
}
.post-entry img{
margin-bottom: 10px;
height:auto;
max-width:100% !important;
}
.meta-data{
line-height: 16px;
padding: 6px 3px;
margin-bottom: 3px;
font-size: 11px;
border-bottom: 1px solid #e9e9e9;
}
.meta-data a{
color: #fd7800;
}
.meta-data a:hover{
color: #777;
}
.read-more {
color: #000;
background: #fff;
padding: 4px 8px;
border-radius: 3px;
display: inline-block;
font-size: 11px;
font-weight: bold;
text-decoration: none;
text-transform: capitalize;
cursor: pointer;
margin-top: 20px;
}
.read-more:hover{
background: #fff;
color: #666;
}
.clear {
clear:both;
}
.sticky {
}
/* content */
/*////////////////////////////////////////////////////////////////////////////////////////////*/
#content_container table {
border: 1px solid #e7e7e7;
margin: 0 -1px 24px 0;
text-align: left;
width: 100%;
}
#content_container tr th,
#content_container thead th {
color: #888;
font-size: 12px;
font-weight: bold;
line-height: 18px;
padding: 9px 10px;
}
#content_container tr td {
padding: 6px 10px;
}
#content_container tr.odd td {
background: #f2f7fc;
}
/* sidebar*/
/*////////////////////////////////////////////////////////////////////////////////////////////*/
#sidebar {
padding:0px 20px 20px 0px;
}
#sidebar ul {
list-style: none;
}
#sidebar { word-wrap: break-word;}
/*--navigation--*/
/*////////////////////////////////////////////////////////////////////////////////////////////*/
.navigation {
float: left;
width: 100%;
margin: 20px 0;
}
.navigation .alignleft a {
float: left;
}
.navigation .alignright a {
float: right;
}
#nav-single {
overflow:hidden;
margin-top:20px;
margin-bottom:10px;
}
.nav-previous {
float: left;
width: 50%;
}
.nav-next {
float: right;
text-align: right;
width: 50%;
}
/*--slider--*/
/*////////////////////////////////////////////////////////////////////////////////////////////*/
#slider_container {
background: #fff;
}
.flex-caption{
background: #232323;
color: #fff;
padding: 7px;
}
.flexslider p{
margin: 0px;
}
/*--sub head and breadcrumbs--*/
/*////////////////////////////////////////////////////////////////////////////////////////////*/
#subhead_container{
padding: 7px 0px;
}
#subhead h1{
color: #000;
padding-top: 10px;
padding-left: 0px;
font-size: 30px;
}
#breadcrumbs {
padding-left: 25px;
margin-bottom: 15px;
color: #9e9e9e;
margin:0 auto;
width: 964px;
font-size: 10px;
}
#breadcrumbs a{
text-decoration: none;
color: #9e9e9e;
}
/*Alignments */
/*////////////////////////////////////////////////////////////////////////////////////////////*/
.alignleft,
img.alignleft {
display: inline;
float: left;
margin-right: 22px;
margin-top: 9px;
}
.alignright,
img.alignright {
display: inline;
float: right;
margin-left: 22px;
margin-top: 8px;
}
.aligncenter,
img.aligncenter {
clear: both;
display: block;
margin-left: auto;
margin-right: auto;
}
.alignleft,
.alignright,
.aligncenter,
img.alignleft,
img.alignright,
img.aligncenter
{
margin-bottom: 10px;
}
a img.aligncenter {
display:block;
margin-left:auto;
margin-right:auto;
}
@@ -1,813 +0,0 @@
@import url("base.css");
@import url("foundation.css");
table {
border: 0;
}
pre {
padding: 10px;
background-color: #fafafa;
color: #222;
/* line-height: 1.0em; */
border: 2px solid #C6C9CB;
font-size: 0.9em;
/* margin: 1.5em 0 1.5em 0; */
margin: 0;
border-right-style: none;
border-left-style: none;
}
/* General */
/*////////////////////////////////////////////////////////////////////////////////////////////*/
a:link {
text-decoration: none;
}
a:visited {
text-decoration: none;
}
a:active,
a:hover {
text-decoration: none;
}
h1,h2,h3,h4,h5,h6 {
color: #000;
margin-bottom: 18px;
}
h1 { font-weight: bold; font-size: 24px; }
h2 { font-weight: bold; font-size: 18px; }
h3 { font-weight: bold; font-size: 16px; }
h4 { font-weight: bold; font-size: 14px; }
hr {
background-color: #c6c6c6;
border:0;
height: 1px;
margin-bottom: 18px;
clear:both;
}
div.hr {
height: 1px;
background: #c6c6c6;
}
div.hr2 {
height: 1px;
background: #c6c6c6;
}
div.hr hr, div.hr2 hr {
display: none;
}
p {
padding: 0;
line-height:1.6em;
}
ul {
list-style: square;
margin: 0 0 18px 0;
}
ol {
list-style: decimal;
margin: 0 0 18px 1.5em;
}
ol ol {
list-style:upper-alpha;
}
ol ol ol {
list-style:lower-roman;
}
ol ol ol ol {
list-style:lower-alpha;
}
ul ul,
ol ol,
ul ol,
ol ul {
margin-bottom:0;
}
dl {
margin:0 0 24px 0;
}
dt {
font-weight: bold;
}
dd {
margin-bottom: 18px;
}
strong {
font-weight: bold;
color: #000;
}
cite,
em,
i {
font-style: italic;
border: none;
}
big {
font-size: 131.25%;
}
ins {
background: #FFFFCC;
border: none;
color: #333;
}
del {
text-decoration: line-through;
color: #555;
}
blockquote {
padding: 0 3em;
}
blockquote cite,
blockquote em,
blockquote i {
font-style: normal;
}
pre {
background: #f7f7f7;
color: #222;
padding: 1.5em;
}
abbr,
acronym {
border-bottom: 1px solid #666;
cursor: help;
}
ins {
text-decoration: none;
}
sup,
sub {
height: 0;
line-height: 1;
vertical-align: baseline;
position: relative;
font-size: 10px;
}
sup {
bottom: 1ex;
}
sub {
top: .5ex;
}
p,
ul,
ol,
dd,
hr {
margin-bottom:10px;
}
ul ul,
ol ol,
ul ol,
ol ul {
margin-bottom:0;
}
pre,
kbd,
tt,
var {
}
code {
font-size: 13px;
}
strong,
b,
dt,
th {
color: #000;
}
/* main_container */
/*////////////////////////////////////////////////////////////////////////////////////////////*/
#wrapper {
padding: 0px 0px;
margin-top: 20px;
}
/* header*/
/*////////////////////////////////////////////////////////////////////////////////////////////*/
#search-header{
margin-top:15px;
padding-bottom:13px;
}
#search-header #search{
background: #222;
}
#search-header #search #s{
background: #222;
font-size:12px;
color: #aaa;
}
#header_container{
padding-bottom: 25px;
padding-top: 0px;
background: #fff;
}
#header {
}
#header2 {
}
#content_container{
padding-top: 15px;
}
#left-col {
padding: 10px 20px;
padding-left: 0px;
background: #fff;
}
/*footer*/
/*////////////////////////////////////////////////////////////////////////////////////////////*/
#footer {
padding: 5px 20px;
background: #ddd;
}
#footer-container{
padding: 5px 20px;
background: #303030;
border-top: 8px solid #000;
font-size:11px;
}
#footer-info {
color:#ccc;
text-align:left;
background: #1b1b1b;
padding: 20px 0;
}
#footer-info a{
text-decoration:none;
color: #fff;
}
#footer-info a:hover{
color: #ebebeb;
}
#copyright{float: left;}
.scroll-top {
text-align:right;
}
#footer-widget{
padding: 8px 0px 8px 0px;
color:#6f6f6f;
}
#footer-widget #search {
width:120px;
height:28px;
background: #222;
margin-left: 0px;
position: relative;
border: 1px solid #666;
}
#footer-widget #search #s {
width:110px;
height:23px;
border:0px;
margin-left:7px;
margin-right:10px;
margin-top:3px;
color:#fff;
display: inline;
background: #222;
float: left;
}
#footer-widget #calendar_wrap {
padding: 8px 0px;
}
#footer-widget #wp-calendar td{
padding:2px;
}
#footer-widget .textwidget {
padding: 5px 0px;
line-height: 23px;
}
#footer-widget .widget_tag_cloud a{
text-decoration: none;
margin: 5px;
line-height: 24px;
margin-left: 0px;
color: #6f6f6f;
}
#footer-widget .widget_tag_cloud a:hover{
color: #fff;
}
#footer-widget .widget-container ul li a {
color:#fd7800;
}
#footer-widget .widget-container ul li a:hover {
color: #ccc;
}
#footer-widget .widget-container h3 {
color: #a5a5a5;
text-transform: uppercase;
margin-bottom: 0px;
padding-top: 10px;
padding-left: 0px;
font-size: 25px;
padding-bottom: 8px;
font-weight: bold;
}
#footer-widget .widget-container ul li {
padding: 5px 0px;
background: none;
}
#footer-widget ul {
margin-left: 0px;
}
#footer-bar1 {
padding-right: 40px;
}
#footer-bar2 {
padding-right: 40px;
}
#footer-bar3 {
}
#footer-bar4 {
}
span#follow-box{
position: absolute;
right: 100px;
}
span#follow-box img{
margin: 0 2px;
}
/*logo*/
/*////////////////////////////////////////////////////////////////////////////////////////////*/
#logo {
margin: 0px 0px 0px 0px;
}
#logo2 {
margin: 0px 0px 0px 0px;
}
#logo img{
border: none;
}
#logo2{
text-decoration: none;
font-size: 42px;
letter-spacing: -1pt;
font-weight: bold;
font-family:arial, "Times New Roman", Times, serif;
text-align: left;
line-height: 57px;
padding-left: 0px;
}
#logo2 a, #slogan{
color: #fd7800;
}
#slogan{
text-align: left;
padding-left: 0px;
}
/*search*/
/*////////////////////////////////////////////////////////////////////////////////////////////*/
#search {
width:180px;
height:28px;
border: 1px solid #ccc;
margin-left: 10px;
position: relative;
}
#sidebar #search {
margin-top: 20px;
}
#search #searchsubmit {
background:url(images/go-btn.png) no-repeat top right;
width:28px;
height:28px;
border:0px;
position:absolute;
right: -35px;
}
#search #s {
width:170px;
height:23px;
border:0px;
margin-left:7px;
margin-right:10px;
margin-top:3px;
color:#000;
display: inline;
float: left;
}
/*menu bar*/
/*////////////////////////////////////////////////////////////////////////////////////////////*/
#menu_container{
padding-top: 0px;
}
/*responsive menu*/
/*////////////////////////////////////////////////////////////////////////////////////////////*/
/* default style */
.selectnav { display: none; }
/* small screen */
@media screen and (max-width: 600px) {
.js #nav { display: none; }
.js #nav2 { display: none; }
.js .selectnav { display: block; }
}
/*welcome*/
/*////////////////////////////////////////////////////////////////////////////////////////////*/
#welcome_container h1{
margin-top: 0px;
}
/*homepage boxes*/
/*////////////////////////////////////////////////////////////////////////////////////////////*/
#box_container{
padding-top: 35px;
padding-bottom: 15px;
}
.box-head {
float: left;
padding-bottom: 20px;
}
.box-head img{
}
.title-head{
padding-top:2px;
}
.title-box{
color: #333;
line-height: 15px;
text-transform: uppercase;
}
.title-box h1 {
font-size: 18px;
margin-bottom: 3px;
}
.box-content {
float: left;
padding-top: 10px;
line-height: 20px;
}
/* POST */
/*////////////////////////////////////////////////////////////////////////////////////////////*/
.post {
overflow: hidden;
}
.post-shadow{
background: url("images/post_shadow.png") no-repeat bottom;
height: 9px;
margin-bottom: 25px;
}
.post ol{
margin-left: 20px;
}
.post ul {
margin-left: 15px;
}
.post-entry ul { margin: 0 0 10px 10px; }
.post-entry ul li {
display: block;
margin: 5px 0;
padding: 0 0 0 20px;
/*background: url(images/bullet.png) no-repeat 0 7px;*/
}
.post-entry ol {
list-style: decimal;
margin: 0 0 18px 1.6em;
}
.post-entry ol li {
list-style: decimal;
}
.post-entry {
padding-bottom: 10px;
padding-top: 10px;
overflow: hidden;
}
.post-head {
margin-bottom: 5px;
padding-top: 15px;
}
.post-head h1 a, .post-head h1 {
text-decoration:none;
color:#000;
margin: 0px;
font-size: 27px;
}
.post-head h1 a:hover {
color:#777;
}
.post-head-notfound h1, .post-head-404 h1, .post-head-archive h1, .post-head-search h1 {
margin-bottom: 10px;
font-weight:normal;
text-decoration:none;
color:#000;
font-size: 27px;
}
.post-thumb img {
border: 0px solid #ebebeb;
}
.post-entry img{
margin-bottom: 10px;
height:auto;
max-width:100% !important;
}
.meta-data{
line-height: 16px;
padding: 6px 3px;
margin-bottom: 3px;
font-size: 11px;
border-bottom: 1px solid #e9e9e9;
}
.meta-data a{
color: #fd7800;
}
.meta-data a:hover{
color: #777;
}
.read-more {
color: #000;
background: #fff;
padding: 4px 8px;
border-radius: 3px;
display: inline-block;
font-size: 11px;
font-weight: bold;
text-decoration: none;
text-transform: capitalize;
cursor: pointer;
margin-top: 20px;
}
.read-more:hover{
background: #fff;
color: #666;
}
.clear {
clear:both;
}
.sticky {
}
/* content */
/*////////////////////////////////////////////////////////////////////////////////////////////*/
#content_container table {
border: 1px solid #e7e7e7;
margin: 0 -1px 24px 0;
text-align: left;
width: 100%;
}
#content_container tr th,
#content_container thead th {
color: #888;
font-size: 12px;
font-weight: bold;
line-height: 18px;
padding: 9px 10px;
}
#content_container tr td {
padding: 6px 10px;
}
#content_container tr.odd td {
background: #f2f7fc;
}
/* sidebar*/
/*////////////////////////////////////////////////////////////////////////////////////////////*/
#sidebar {
padding:0px 20px 20px 0px;
}
#sidebar ul {
list-style: none;
}
#sidebar { word-wrap: break-word;}
/*--navigation--*/
/*////////////////////////////////////////////////////////////////////////////////////////////*/
.navigation {
float: left;
width: 100%;
margin: 20px 0;
}
.navigation .alignleft a {
float: left;
}
.navigation .alignright a {
float: right;
}
#nav-single {
overflow:hidden;
margin-top:20px;
margin-bottom:10px;
}
.nav-previous {
float: left;
width: 50%;
}
.nav-next {
float: right;
text-align: right;
width: 50%;
}
/*--slider--*/
/*////////////////////////////////////////////////////////////////////////////////////////////*/
#slider_container {
background: #fff;
}
.flex-caption{
background: #232323;
color: #fff;
padding: 7px;
}
.flexslider p{
margin: 0px;
}
/*--sub head and breadcrumbs--*/
/*////////////////////////////////////////////////////////////////////////////////////////////*/
#subhead_container{
padding: 7px 0px;
}
#subhead h1{
color: #000;
padding-top: 10px;
padding-left: 0px;
font-size: 30px;
}
#breadcrumbs {
padding-left: 25px;
margin-bottom: 15px;
color: #9e9e9e;
margin:0 auto;
width: 964px;
font-size: 10px;
}
#breadcrumbs a{
text-decoration: none;
color: #9e9e9e;
}
/*Alignments */
/*////////////////////////////////////////////////////////////////////////////////////////////*/
.alignleft,
img.alignleft {
display: inline;
float: left;
margin-right: 22px;
margin-top: 9px;
}
.alignright,
img.alignright {
display: inline;
float: right;
margin-left: 22px;
margin-top: 8px;
}
.aligncenter,
img.aligncenter {
clear: both;
display: block;
margin-left: auto;
margin-right: auto;
}
.alignleft,
.alignright,
.aligncenter,
img.alignleft,
img.alignright,
img.aligncenter
{
margin-bottom: 10px;
}
a img.aligncenter {
display:block;
margin-left:auto;
margin-right:auto;
}
table {
border-collapse:collapse;
}
table, th, td {
border: 1px solid black;
padding: 5px;
}
@@ -0,0 +1 @@
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 152.13 43.86"><defs><style>.cls-1{fill:#dc9610;}.cls-2{fill:#fff;}.cls-3{fill:#bf4818;}</style></defs><rect class="cls-1" width="87.68" height="22.95" rx="5"/><rect class="cls-1" x="89.93" width="62.2" height="22.95" rx="5"/><path class="cls-2" d="M94.88,4.14h5.28c3.16,0,4.82.55,6.22,2.11a8.1,8.1,0,0,1,1.92,5.47,8.41,8.41,0,0,1-2,5.71c-1.35,1.42-3.08,2-6,2h-5.4Zm5.87,12.37A3.29,3.29,0,0,0,104,15a6.14,6.14,0,0,0,.77-3.24A5.94,5.94,0,0,0,104,8.62a3.09,3.09,0,0,0-3-1.54H98.39v9.43Z" transform="translate(-0.18)"/><path class="cls-2" d="M113.7,16.37l-1,3.08h-3.81l5.45-15.31h4.37l5,15.31h-4l-.84-3.08Zm2.76-8.81-1.89,6h3.53Z" transform="translate(-0.18)"/><path class="cls-2" d="M131,19.45h-3.5V7.08h-4.73V4.14h13V7.08H131Z" transform="translate(-0.18)"/><path class="cls-2" d="M139.37,16.37l-1,3.08h-3.81L140,4.14h4.37l4.95,15.31h-4l-.84-3.08Zm2.76-8.81-1.89,6h3.53Z" transform="translate(-0.18)"/><path class="cls-3" d="M10.82,43.52,6.4,35.69l-1.61-3c0,.8,0,1.38,0,1.83,0,.83,0,1.72,0,2.69v6.29H1.66V28.21H5.3l4.3,7.62c.61,1.15,1,2,1.59,3.1,0-.62,0-1,0-1.49l0-1.15V28.21h3.2V43.52Z" transform="translate(-0.18)"/><path class="cls-3" d="M29.23,31.15H21.12v3H28.2v2.71H21.12v3.74h8.25v2.94H17.61V28.21H29.23Z" transform="translate(-0.18)"/><path class="cls-3" d="M39,43.52H35.53V31.15H30.81V28.21H43.75v2.94H39Z" transform="translate(-0.18)"/><path class="cls-3" d="M49,43.52l-4.2-15.31h3.48L50,35.07c.3,1.29.47,2,.86,3.81.26-1.74.42-2.66.66-3.81L53,28.21h3.36l1.45,7c.31,1.51.47,2.34.68,3.69.14-.66.4-1.9.79-3.69l1.73-7h3.48L60.11,43.52H56.84l-1.43-6.38c-.35-1.59-.67-3.24-.77-4-.3,1.65-.49,2.64-.79,4l-1.47,6.38Z" transform="translate(-0.18)"/><path class="cls-3" d="M80.76,36c0,4.66-3.15,7.87-7.71,7.87s-7.73-3.21-7.73-8a7.92,7.92,0,0,1,2.4-6A7.73,7.73,0,0,1,73,27.87C77.72,27.87,80.76,31.06,80.76,36ZM69,35.85C69,39,70.5,41,73.05,41s4-1.91,4-5S75.6,30.78,73,30.78,69,32.68,69,35.85Z" transform="translate(-0.18)"/><path class="cls-3" d="M86.88,43.52H83.45V28.21h6.79c2,0,3.13.25,4.07.92a3.81,3.81,0,0,1,1.49,3.21A3.59,3.59,0,0,1,93.21,36c1.54.48,2.08,1.28,2.2,3.3l.11,2.18a3.24,3.24,0,0,0,.63,2H92.72c-.42-.32-.54-.55-.58-1.33L92,40.1c-.14-1.88-1-2.71-2.78-2.71H86.88Zm3.43-8.84c1.29,0,2-.64,2-1.77s-.7-1.76-2-1.76H86.88v3.53Z" transform="translate(-0.18)"/><path class="cls-3" d="M112.65,43.52h-4.21l-4.72-6.93L102.27,38v5.49H98.84V28.21h3.43v5.65l5.26-5.65h4.6l-6.07,6Z" transform="translate(-0.18)"/><path class="cls-3" d="M117.83,43.52h-3.5V28.21h3.5Z" transform="translate(-0.18)"/><path class="cls-3" d="M130.28,43.52l-4.41-7.83-1.61-3c0,.8,0,1.38,0,1.83,0,.83,0,1.72,0,2.69v6.29h-3.2V28.21h3.64l4.3,7.62c.61,1.15,1,2,1.59,3.1,0-.62,0-1,0-1.49l0-1.15V28.21h3.2V43.52Z" transform="translate(-0.18)"/><path class="cls-3" d="M151,35.05v8.47h-2.1l-.49-2c-1.08,1.65-2.41,2.29-4.67,2.29-4.42,0-7.13-3-7.13-7.89s3-8.1,7.57-8.1a6.48,6.48,0,0,1,6.71,5l-3.39.2a3.13,3.13,0,0,0-3.3-2.27c-2.52,0-4.08,1.88-4.08,5,0,3.3,1.51,5.28,4.06,5.28A3.71,3.71,0,0,0,148,37.87h-3.81V35.05Z" transform="translate(-0.18)"/><path class="cls-2" d="M14.72,19.45,10.3,11.62l-1.61-3c.05.8.05,1.38.05,1.84,0,.82,0,1.72,0,2.68v6.29H5.56V4.14H9.2l4.3,7.62c.61,1.15,1,2,1.59,3.1,0-.62,0-1,0-1.49l0-1.15V4.14h3.21V19.45Z" transform="translate(-0.18)"/><path class="cls-2" d="M24.82,16.37l-1,3.08H20L25.47,4.14h4.38L34.8,19.45h-4L30,16.37Zm2.76-8.81-1.89,6h3.52Z" transform="translate(-0.18)"/><path class="cls-2" d="M42.43,19.45,40.27,11.3c-.16-.69-.3-1.17-.39-1.49-.12-.48-.14-.57-.28-1,0,.55,0,.94,0,1.19l0,1.47v8H36.46V4.14H41.4l2,8c.31,1.19.57,2.46.75,3.47a4.72,4.72,0,0,0,.1-.49l.25-1c.05-.28.14-.62.24-1s.23-1,.23-1l2-8h4.89V19.45h-3.2v-8l0-1.47a11.79,11.79,0,0,1,.05-1.19c-.26.92-.42,1.54-.49,1.74-.14.42-.21.72-.24.74l-2.13,8.17Z" transform="translate(-0.18)"/><path class="cls-2" d="M66.81,7.08H58.7v3h7.08v2.71H58.7v3.74H67v2.94H55.19V4.14H66.81Z" transform="translate(-0.18)"/><path class="cls-2" d="M69.53,4.14h5.28c3.15,0,4.81.55,6.22,2.11a8.09,8.09,0,0,1,1.91,5.47,8.41,8.41,0,0,1-2,5.71c-1.36,1.42-3.09,2-6,2H69.53Zm5.86,12.37A3.29,3.29,0,0,0,78.59,15a6,6,0,0,0,.78-3.24,6,6,0,0,0-.75-3.16,3.11,3.11,0,0,0-3-1.54H73v9.43Z" transform="translate(-0.18)"/></svg>

After

Width:  |  Height:  |  Size: 4.1 KiB

+8 -11
View File
@@ -1,15 +1,12 @@
[theme]
inherit = agogo
stylesheet = named_data_style.css
# pygments_style = sphinx
theme_bodyfont = "normal 12px Verdana, sans-serif"
theme_bgcolor = "#ccc"
theme_documentwidth = "100%"
theme_textalign = "left"
stylesheet = named_data.css
[options]
stickysidebar = true
collapsiblesidebar = true
pagewidth = 90%
documentwidth = 70%
sidebarwidth = 20%
bgcolor = white
headerbg = none
footerbg = none
textalign = left
-70
View File
@@ -1,70 +0,0 @@
# -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
# Based on http://doughellmann.com/2010/05/09/defining-custom-roles-in-sphinx.html
"""Integration of Sphinx with Redmine.
"""
from docutils import nodes, utils
from docutils.parsers.rst.roles import set_classes
def redmine_role(name, rawtext, text, lineno, inliner, options={}, content=[]):
"""Link to a Redmine issue.
Returns 2 part tuple containing list of nodes to insert into the
document and a list of system messages. Both are allowed to be
empty.
:param name: The role name used in the document.
:param rawtext: The entire markup snippet, with role.
:param text: The text marked with the role.
:param lineno: The line number where rawtext appears in the input.
:param inliner: The inliner instance that called us.
:param options: Directive options for customization.
:param content: The directive content for customization.
"""
try:
issue_num = int(text)
if issue_num <= 0:
raise ValueError
except ValueError:
msg = inliner.reporter.error(
'Redmine issue number must be a number greater than or equal to 1; '
'"%s" is invalid.' % text, line=lineno)
prb = inliner.problematic(rawtext, rawtext, msg)
return [prb], [msg]
app = inliner.document.settings.env.app
node = make_link_node(rawtext, app, 'issues', str(issue_num), options)
return [node], []
def make_link_node(rawtext, app, type, slug, options):
"""Create a link to a Redmine resource.
:param rawtext: Text being replaced with link node.
:param app: Sphinx application context
:param type: Link type (issue, changeset, etc.)
:param slug: ID of the thing to link to
:param options: Options dictionary passed to role func.
"""
#
try:
base = app.config.redmine_project_url
if not base:
raise AttributeError
except AttributeError:
raise ValueError('redmine_project_url configuration value is not set')
#
slash = '/' if base[-1] != '/' else ''
ref = base + slash + type + '/' + slug + '/'
set_classes(options)
node = nodes.reference(rawtext, 'Issue #' + utils.unescape(slug), refuri=ref,
**options)
return node
def setup(app):
"""Install the plugin.
:param app: Sphinx application context.
"""
app.add_role('issue', redmine_role)
app.add_config_value('redmine_project_url', None, 'env')
return
+1 -1
View File
@@ -1 +1 @@
release-notes/release-notes-0.6.0.rst
release-notes/release-notes-0.7.1.rst
+6 -6
View File
@@ -17,17 +17,17 @@ The current features include:
- **Base**
+ Fully asynchronous, event-driven communication model, which is implemented using `Boost.Asio
<http://www.boost.org/doc/libs/1_48_0/doc/html/boost_asio.html>`_
<https://www.boost.org/doc/libs/1_48_0/doc/html/boost_asio.html>`_
+ Single-threaded, but thread-safe Face operations
A single Face object can be safely used in multiple threads to express Interests and
publish Data packets
+ Explicit time management for NDN operations using `Boost.Chrono
<http://www.boost.org/doc/libs/1_48_0/doc/html/chrono.html>`_
<https://www.boost.org/doc/libs/1_48_0/doc/html/chrono.html>`_
+ Simplified and extended `NDN API <doxygen/annotated.html>`_
+ Extensive set of unit-tests based on `Boost.Test framework
<http://www.boost.org/doc/libs/1_48_0/libs/test/doc/html/index.html>`_
<https://www.boost.org/doc/libs/1_48_0/libs/test/doc/html/index.html>`_
- Continuous integration using an in-house installation of Jenkins build bots and the
hosted `Travis CI <https://travis-ci.org/named-data/ndn-cxx>`_ continuous
@@ -35,7 +35,7 @@ The current features include:
- **Wire format**
+ Full support of `NDN-TLV packet format v0.1 <http://named-data.net/doc/NDN-TLV/0.1/>`_
+ Full support of `NDN-TLV packet format v0.1 <https://named-data.net/doc/NDN-packet-spec/0.1/>`_
+ Pure C++ implementation of wire encoding/decoding with simple access to wire format
of all NDN packet abstractions via ``wireEncode`` and ``wireDecode`` methods
@@ -49,11 +49,11 @@ The current features include:
<https://github.com/named-data/NFD>`_
- Full support for `NFD management protocols
<http://redmine.named-data.net/projects/nfd/wiki/Management>`_ to NFD status
<https://redmine.named-data.net/projects/nfd/wiki/Management>`_ to NFD status
information, create and manage NFD Faces, receive NFD Face status change
notifications, update StrategyChoice for namespaces, and manage routes in RIB
- Support for `LocalControlHeader
<http://redmine.named-data.net/projects/nfd/wiki/LocalControlHeader>`_ to implement
<https://redmine.named-data.net/projects/nfd/wiki/LocalControlHeader>`_ to implement
special NDN applications that need low-level control of NDN packet forwarding
- **Security support**
+38 -40
View File
@@ -5,25 +5,26 @@ Release date: August 25, 2014
Changes since version 0.1.0:
New features:
^^^^^^^^^^^^^
New features
^^^^^^^^^^^^
- **Base**
+ The license under which the library is released is changed to **Lesser GNU Public
License version 3.0**.
+ The license under which the library is released is changed to the **GNU Lesser
General Public License version 3.0**
+ New ways to use incoming Interest dispatching:
* New :ndn-cxx:`InterestFilter` abstraction that supports filtering based on name
prefixes and regular expressions.
* Separated :ndn-cxx:`Face::registerPrefix()` and :ndn-cxx:`Face::setInterestFilter()`
methods allow distinct operations of registering with the local NDN forwarder and setting
* Separate ``Face::registerPrefix()`` and ``Face::setInterestFilter()`` methods
allow distinct operations of registering with the local NDN forwarder and setting
up application-specific ``OnInterest`` call dispatch using InterestFilters.
+ Add support for new `NDN naming conventions
<http://named-data.net/doc/tech-memos/naming-conventions.pdf>`_ (:issue:`1761`)
+ Add support for the `NDN naming conventions (revision 1)
<https://named-data.net/publications/techreports/ndn-tr-22-ndn-memo-naming-conventions/>`_
(:issue:`1761`)
- **Security**
@@ -32,39 +33,37 @@ New features:
The new option also allow periodic reloading trust anchors, allowing dynamic trust
models.
+ Added support for multiple signature types to :ndn-cxx:`PublicKey`,
:ndn-cxx:`SecPublicInfo` abstractions
+ Added support for multiple signature types to ``PublicKey``, ``SecPublicInfo`` abstractions
+ New :ndn-cxx:`SignatureSha256WithEcdsa` signature type
+ Updates in :ndn-cxx:`Signature` data structure to reflect changes in `NDN-TLV spec
0.1.1 <http://named-data.net/doc/NDN-TLV/0.1.1/>`_
0.1.1 <https://named-data.net/doc/NDN-packet-spec/0.1.1/>`_
- **Wire encoding**
+ :ndn-cxx:`Data::getFullName() <getFullName()>` method to get :ndn-cxx:`Data` packet
name with implicit digest
+ ``Data::getFullName()`` method to get the Data packet name including the implicit digest
+ New :ndn-cxx:`Name::getSuccessor()` method to get name successor (:issue:`1677`)
+ ``Name::getSuccessor()`` method to get name successor (:issue:`1677`)
+ New in-wire refreshing of Interest's nonce (:issue:`1758`)
- **Management**
+ Support for :ndn-cxx:`ChannelStatus`, :ndn-cxx:`StrategyChoice` datasets
+ Support for :ndn-cxx:`ChannelStatus` and :ndn-cxx:`StrategyChoice` datasets
+ Defining new common Route Origins for NFD RIB management protocol (:issue:`1719`)
+ New RibEntry and Route data structures for RIB management protocol (:issue:`1764`)
+ New ``RibEntry`` and ``Route`` data structures for RIB management protocol (:issue:`1764`)
+ Add support for RIB flags for setInterestFilter and registerPrefix (:issue:`1842`)
+ Add support for RIB flags in ``setInterestFilter()`` and ``registerPrefix()`` (:issue:`1842`)
- **Miscellaneous tools**
+ Introduce :ndn-cxx:`Scheduler::cancelAllEvents` to cancel all previously scheduled events
(:issue:`1757`)
+ Introduce :ndn-cxx:`util::EventEmitter`, :ndn-cxx:`util::NotificationSubscriber`,
+ Introduce ``util::EventEmitter``, :ndn-cxx:`util::NotificationSubscriber`,
:ndn-cxx:`util::NotificationStream`, and :ndn-cxx:`nfd::FaceMonitor` utility classes
+ Introduce :ndn-cxx:`util::SegmentFetcher` helper class to fetch multi-segmented data
@@ -72,10 +71,10 @@ New features:
- **Build**
+ enabled support of precompiled headers for clang and gcc compilers to speed up compilation
+ Enabled support of precompiled headers for clang and gcc compilers to speed up compilation
Updates and bug fixes:
^^^^^^^^^^^^^^^^^^^^^^
Updates and bug fixes
^^^^^^^^^^^^^^^^^^^^^
- **Base**
@@ -85,13 +84,13 @@ Updates and bug fixes:
:ndn-cxx:`Face::put` methods (:issue:`1774`)
+ Cleaning up transport state on communication failure, so Face can try to reconnect
in the future.
in the future
+ Fix bug with Face::removePendingInterest (:issue:`1917`)
+ Fix bug in ``Face::removePendingInterest`` (:issue:`1917`)
- **Wire encoding**
+ Nonce field is now encoded as 4-byte uint8_t value, as defined by NDN-TLV spec.
+ The Nonce field is now encoded as a 4-byte value, as defined by NDN-TLV spec
+ Optimized Data packet signing
@@ -105,30 +104,29 @@ Updates and bug fixes:
- **Management**
+ Add link-layer byte counts in FaceStatus data structure (:issue:`1765`)
+ Add link-layer byte counts in ``FaceStatus`` data structure (:issue:`1765`)
- **Security**
+ Allow user to explicitly specify the cert name prefix before 'KEY' component in
``ndnsec-certgen``
+ ``SignatureSha256`` has been renamed to :ndn-cxx:`DigestSha256` to conform with
`NDN-TLV specification <http://named-data.net/doc/ndn-tlv/>`_.
+ ``SignatureSha256`` has been renamed to :ndn-cxx:`DigestSha256` to conform to
`NDN-TLV specification <https://named-data.net/doc/NDN-packet-spec/0.1.1/>`_
+ Add checking of ``Timestamp`` and ``Nonce`` fields in signed Interest within
+ Add checking of Timestamp and Nonce fields in signed Interest within
:ndn-cxx:`ValidatorConfig`
+ Allow validator customization using hooks:
+ Allow validator customization using hooks.
Sub-classes of :ndn-cxx:`Validator` class can use the following hooks to fine-tune the
validation process:
* :ndn-cxx:`Validator::preCertificateValidation <preCertificateValidation>` to
process received certificate before validation.
* :ndn-cxx:`Validator::onTimeout <onTimeout>` to process interest timeout
* :ndn-cxx:`Validator::afterCheckPolicy <afterCheckPolicy>` to process validation requests.
* ``preCertificateValidation`` to process received certificate before validation
* ``onTimeout`` to process interest timeout
* ``afterCheckPolicy`` to process validation requests
+ Fix memory issues in :ndn-cxx:`SecPublicInfoSqlite3`
+ Fix memory issues in ``SecPublicInfoSqlite3``
- **Miscellaneous tools**
@@ -138,8 +136,8 @@ Updates and bug fixes:
- Other minor fixes and corrections
Deprecated:
^^^^^^^^^^^
Deprecated
^^^^^^^^^^
- ``SignatureSha256`` class, use :ndn-cxx:`DigestSha256` instead.
@@ -156,17 +154,17 @@ Deprecated:
- ``name::Component::toEscapedString`` method, use :ndn-cxx:`name::Component::toUri` instead.
- ``SecPublicInfo::addPublicKey`` method, use :ndn-cxx:`SecPublicInfo::addKey` instead.
- ``SecPublicInfo::addPublicKey`` method, use ``SecPublicInfo::addKey`` instead.
- ``Tlv::ConentType`` constant (typo), use ``Tlv::ContentType`` instead.
- ``CommandInterestGenerator`` and ``CommandInterestValidator`` utility classes.
:ndn-cxx:`ValidatorConfig` should be used instead.
Removed:
^^^^^^^^
Removed
^^^^^^^
- support of ndnd-tlv (only NFD management protocol is supported now)
- Support for ndnd-tlv (only NFD management protocol is supported now)
- ``SecPublicInfoMemory`` and ``SecTpmMemory`` classes that were no longer used
+8 -8
View File
@@ -5,8 +5,8 @@ Release date: February 2, 2015
Changes since version 0.2.0:
New features:
^^^^^^^^^^^^^
New features
^^^^^^^^^^^^
- **Build**
@@ -85,8 +85,8 @@ New features:
+ New NetworkMonitor helper to detect network state changes (:issue:`2443`)
Updates and bug fixes:
^^^^^^^^^^^^^^^^^^^^^^
Updates and bug fixes
^^^^^^^^^^^^^^^^^^^^^
- **Base**
@@ -198,8 +198,8 @@ Updates and bug fixes:
- Other minor fixes and corrections
Deprecated:
^^^^^^^^^^^
Deprecated
^^^^^^^^^^
- ``ndn::ptr_lib`` and ``ndn::func_lib`` namespace aliases
@@ -216,8 +216,8 @@ Deprecated:
- ``EventEmitter`` is deprecated in favor of ``Signal``
Removed:
^^^^^^^^
Removed
^^^^^^^
- FaceFlags APIs (:issue:`1992`)
+8 -8
View File
@@ -5,20 +5,20 @@ Release date: March 3, 2015
Changes since version 0.3.0:
New features:
^^^^^^^^^^^^^
New features
^^^^^^^^^^^^
- **Management**
- Add isConnected() in :ndn-cxx:`signal::Connection` and :ndn-cxx:`signal::ScopedConnection`
(:issue:`2308`)
- Extend :ndn-cxx:`DummyClientFace` to process :ndn-cxx:`LocalControlHeader` (:issue:`2510`)
- Extend :ndn-cxx:`DummyClientFace` to process ``LocalControlHeader`` (:issue:`2510`)
- Add CachingPolicy to :ndn-cxx:`LocalControlHeader` (:issue:`2183`)
- Add CachingPolicy to ``LocalControlHeader`` (:issue:`2183`)
Updates and bug fixes:
^^^^^^^^^^^^^^^^^^^^^^
Updates and bug fixes
^^^^^^^^^^^^^^^^^^^^^
- **Wire encoding**
@@ -51,8 +51,8 @@ Updates and bug fixes:
- Explicitly define ``_GLIBCXX_USE_NANOSLEEP``, necessary for gcc < 4.8 in some environments
(:issue:`2499`)
Removed:
^^^^^^^^
Removed
^^^^^^^
- Delete deprecated ``Block(std::istream&)`` constructor (:issue:`2241`)
+8 -8
View File
@@ -5,8 +5,8 @@ Release date: May 12, 2015
Changes since version 0.3.1:
New features:
^^^^^^^^^^^^^
New features
^^^^^^^^^^^^
- Add Link abstraction (:issue:`2587`)
@@ -18,8 +18,8 @@ New features:
* In-memory PIB implementation
* Define new abstraction for identity, key, and certificate
Updates and bug fixes:
^^^^^^^^^^^^^^^^^^^^^^
Updates and bug fixes
^^^^^^^^^^^^^^^^^^^^^
- Enable decoding Exclude containing ImplicitSha256DigestComponent (:issue:`2629`)
@@ -35,13 +35,13 @@ Updates and bug fixes:
- Disable precompiled headers on OS X with clang < 6.1.0 (:issue:`2804`)
Deprecated:
^^^^^^^^^^^
Deprecated
^^^^^^^^^^
- `Block::fromBuffer` overloads with output parameter (:issue:`2553`)
Removed:
^^^^^^^^
Removed
^^^^^^^
- Delete deprecated Controller functions:
+13 -13
View File
@@ -5,8 +5,8 @@ Release date: July 1, 2015
Changes since version 0.3.2:
New features:
^^^^^^^^^^^^^
New features
^^^^^^^^^^^^
- Allow compilation of ndn-cxx as a shared library (:issue:`2243`)
@@ -41,8 +41,8 @@ New features:
* ``makeStringBlock``
* ``readString``
Improvements and bug fixes:
^^^^^^^^^^^^^^^^^^^^^^^^^^^
Improvements and bug fixes
^^^^^^^^^^^^^^^^^^^^^^^^^^
- Use C++11 lambda expression and smart pointers in Face implementation (:issue:`2112`)
@@ -72,8 +72,8 @@ Improvements and bug fixes:
restrictive move operation (`move_if_noexcept`) is used (e.g., in STL library's containers)
(:issue:`2966`)
Deprecated:
^^^^^^^^^^^
Deprecated
^^^^^^^^^^
- The following ``KeyChain::sign*`` methods, in favor of generalized ``KeyChain::sign(..., SigningInfo)``
@@ -101,23 +101,23 @@ Deprecated:
* ``CommandOptions::setSigningIdentity``
* ``CommandOptions::setSigningCertificate``
Removed:
^^^^^^^^
Removed
^^^^^^^
- Remove SCOPE from Interests and all references to it in the related code (:issue:`2345`)
- Direct FIB management in Face class (:issue:`2533`)
- Direct FIB management in Face class (:issue:`2533`).
``Face::register`` and ``Face::setInterestFilter`` methods now only support NFD RIB management
protocol.
For special needs, FIB management can be implemented using ``nfd::Controller``
(``start<FibAddNextHopCommand>``, and ``start<FibRemoveNextHopCommand>``)
(``start<FibAddNextHopCommand>`` and ``start<FibRemoveNextHopCommand>``).
Upcoming features (partially finished in development branches):
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Upcoming features (partially finished in development branches)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- NDNLPv2 (http://redmine.named-data.net/projects/nfd/wiki/NDNLPv2, :issue:`2520`,
- NDNLPv2 (https://redmine.named-data.net/projects/nfd/wiki/NDNLPv2, :issue:`2520`,
:issue:`2879`, :issue:`2763`, :issue:`2883`, :issue:`2841`, :issue:`2866`)
- New NDN certificate format (:issue:`2861`, :issue:`2868`)
+8 -8
View File
@@ -5,8 +5,8 @@ Release date: August 31, 2015
Changes since version 0.3.3:
New features:
^^^^^^^^^^^^^
New features
^^^^^^^^^^^^
- By default, library is now compiled as a shared library (:issue:`2867`)
@@ -26,8 +26,8 @@ New features:
- New Dispatcher class to simplify server-side implementation of NFD management protocol
(:issue:`2107`)
Improvements and bug fixes:
^^^^^^^^^^^^^^^^^^^^^^^^^^^
Improvements and bug fixes
^^^^^^^^^^^^^^^^^^^^^^^^^^
- Fix compilation error with Boost 1.59 (:issue:`3128`)
@@ -44,8 +44,8 @@ Improvements and bug fixes:
- Add ability to create ``util::Digest`` object from ``std::istream&`` (:issue:`3022`)
Deprecated:
^^^^^^^^^^^
Deprecated
^^^^^^^^^^
- The following methods of ``CommandOptions`` class in favor of ``getSigningInfo`` and
``setSigningInfo`` methods (:issue:`2893`):
@@ -61,8 +61,8 @@ Deprecated:
- Overloads of ``Face::registerPrefix`` and ``Face::setInterestFilter`` that do not accept
SigningInfo parameter (:issue:`2932`)
Upcoming features (partially implemented in development branches):
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Upcoming features (partially implemented in development branches)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- Introduce new API to simplify security transformations (:issue:`3009`)
+10 -10
View File
@@ -8,8 +8,8 @@ Release date: December 31, 2015
Changes since version 0.3.4:
New features:
^^^^^^^^^^^^^
New features
^^^^^^^^^^^^
- **(breaking change)** LocalControlHeader for special signaling between application and NFD has
been replaced with NDNLPv2 signaling (:issue:`2879`, :issue:`2930`)
@@ -32,8 +32,8 @@ New features:
- Ability to create Face with custom IO service and default transport (:issue:`2500`)
Improvements and bug fixes:
^^^^^^^^^^^^^^^^^^^^^^^^^^^
Improvements and bug fixes
^^^^^^^^^^^^^^^^^^^^^^^^^^
- **(breaking change)** SegmentFetcher helper changed to use asynchronous data validation (:issue:`2734`)
@@ -46,8 +46,8 @@ Improvements and bug fixes:
- Minor documentation updates (:issue:`3207`, :issue:`3210`, :issue:`3221`)
Deprecated:
^^^^^^^^^^^
Deprecated
^^^^^^^^^^
- Overloads of ``Face::registerPrefix`` and ``Face::setInterestFilter`` that do not accept
SigningInfo parameter (:issue:`2932`)
@@ -61,13 +61,13 @@ Deprecated:
- ndn::util::DummyClientFace::sentDatas, use ndn::util::DummyClientFace.sentData instead
(:issue:`3146`)
Removed:
^^^^^^^^
Removed
^^^^^^^
- Deprecated EventEmitter class (:issue:`2351`)
Planned features for future releases:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Planned features for future releases
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- Introduce new API to simplify security transformations (:issue:`3009`)
+6 -6
View File
@@ -5,8 +5,8 @@ Release date: March 25, 2016
Changes since version 0.4.0:
Improvements and bug fixes:
^^^^^^^^^^^^^^^^^^^^^^^^^^^
Improvements and bug fixes
^^^^^^^^^^^^^^^^^^^^^^^^^^
- Improved support for ECDSA signatures (:issue:`3438`, :issue:`3439`)
@@ -15,14 +15,14 @@ Improvements and bug fixes:
- Use InMemoryStorage for StatusDataset and Notification produced by managers based on
Dispatcher class (:issue:`2182`)
Removed:
^^^^^^^^
Removed
^^^^^^^
- Deprecated ``tlvdump`` command-line tool (use ``ndn-dissect`` tool from `NDN Essential Tools
<https://github.com/named-data/ndn-tools>`__ instead
Planned features for future releases:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Planned features for future releases
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- Introduce new API to simplify security transformations (:issue:`3009`)
+3 -3
View File
@@ -15,8 +15,8 @@ Release date: October 4, 2016
Changes since version 0.4.1:
New features:
^^^^^^^^^^^^^
New features
^^^^^^^^^^^^
- New transformation API (:issue:`3009`)
@@ -104,7 +104,7 @@ Deprecated
- ``ndn::crypto::sha256`` in favor of ``ndn::crypto::computeSha256Digest``
- ``security/cryptopp.hpp`` header. Use ``security/v1/cryptopp.hpp`` when needed, avoid direct
include as CryptoPP dependency may be removed from future versions of the library.
include as CryptoPP dependency will be removed from future versions of the library.
- ``security/identity-certificate.hpp`` header. Use ``security/v1/identity-certificate.hpp`` instead.
+5 -5
View File
@@ -4,14 +4,14 @@ ndn-cxx version 0.5.1
Release date: January 25, 2017
.. note::
This is the last release of the library that supports :ref:`NDN Certificate format version 1
<Security Library Tutorial>` and the existing implementations of validators. The upcoming
0.6.0 release will include multiple breaking changes of the security framework.
This is the last release of the library that supports NDN Certificate format version 1 and
the existing implementations of validators. The upcoming 0.6.0 release will include
multiple breaking changes of the security framework.
Changes since version 0.5.0:
New features:
^^^^^^^^^^^^^
New features
^^^^^^^^^^^^
- Add version 2 of the security framework (introduced in ``security::v2`` namespace)
+11 -11
View File
@@ -1,22 +1,22 @@
ndn-cxx version 0.5.1
ndn-cxx version 0.6.0
---------------------
Release date: October 16, 2017
Changes since version 0.5.1:
New features:
^^^^^^^^^^^^^
New features
^^^^^^^^^^^^
- **breaking change** Security framework version 2 (:issue:`3098`, :issue:`3920`,
:issue:`3644`, :issue:`4085`, :issue:`4323`, :issue:`4339`)
- **(breaking change)** Security framework version 2 (:issue:`3098`, :issue:`3920`,
:issue:`3644`, :issue:`4085`, :issue:`4323`, :issue:`4339`).
The released version of the library only supports the new version of the security (v2
certificate format) and features a number of updates of KeyChain and Validator
interfaces. At the same time, management APIs for :ndn-cxx:`ValidatorConfig` remained
intact; transition to the new framework would require only adjusting
:ndn-cxx:`Validator::validate` calls and updating configuration files to follow the new
naming conventions of :ref:`NDN Certificate Format Version 2.0`.
The released version of the library only supports the new version of the security (v2
certificate format) and features a number of updates of KeyChain and Validator
interfaces. At the same time, management APIs for :ndn-cxx:`ValidatorConfig` remained
intact; transition to the new framework would require only adjusting
:ndn-cxx:`Validator::validate` calls and updating configuration files to follow the new
naming conventions of :ref:`NDN Certificate Format Version 2.0`.
- Integration of fetching certificates using Certificate Bundle as part of specialized
``CertificateFetcher`` (:issue:`3891`)
@@ -0,0 +1,57 @@
ndn-cxx version 0.6.1
---------------------
Release date: February 19, 2018
New features
^^^^^^^^^^^^
- (potentially breaking change) :ndn-cxx:`expressInterest` now by default loopbacks Interests to
producer callbacks on the same :ndn-cxx:`Face`. When undesired, use
``InterestFilter::allowLoopback(false)`` (:issue:`3979`)
- New signal in :ndn-cxx:`SegmentFetcher` to notify retrieval of Data segments
(:issue:`4438`)
- Initial support for the Content Store management protocol (:issue:`4050`)
- Literal operators for ``time::duration`` types, such as ``1_s``, ``42_ms``, ``30_days``
(:issue:`4468`)
- Support for BLAKE2 hash function (requires OpenSSL >= 1.1.0)
- An ``escape()`` helper function complementing the existing ``unescape()`` (:issue:`4484`)
Improvements and bug fixes
^^^^^^^^^^^^^^^^^^^^^^^^^^
- ``ndnsec key-gen`` command line now allows customization of key ID (:issue:`4294`)
- Fixed encoding of ``'~'`` and ``'+'`` in ``name::Component::toUri()`` (:issue:`4484`)
- Fixed handling of large dates when converting to/from string (:issue:`4478`, :issue:`3915`)
- Fixed error handling in ``KeyChain::importSafeBag()`` (:issue:`4359`)
- Fixed parsing of IPv6 addresses with scope-id (:issue:`4474`)
- ``io::load()`` now handles empty files properly (:issue:`4434`)
- Switched to using ``boost::asio::basic_waitable_timer`` (:issue:`4431`)
- Allow linking multiple :ndn-cxx:`DummyClientFace` instances together to emulate a broadcast
medium (:issue:`3913`)
- Fixed build when ``std::to_string`` is not available (:issue:`4393`)
- Avoid undefined behavior when casting to :ndn-cxx:`tlv::SignatureTypeValue` (:issue:`4370`)
- Fixed compilation with Boost 1.66.0 (:issue:`4422`)
- Various documentation updates
(:issue:`3918`, :issue: `4184`, :issue: `4275`)
Removed
^^^^^^^
- Removed obsolete TLV-TYPE constants (:issue:`4055`, :issue:`3098`, :issue: `3755`)
@@ -0,0 +1,53 @@
ndn-cxx version 0.6.2
---------------------
Release date: May 4, 2018
New features
^^^^^^^^^^^^
- Initial support for `NDN packet format version 0.3
<https://named-data.net/doc/NDN-packet-spec/0.3/>`__ (:issue:`4527`)
* Recognize typed name components, allow typed name component in ``FinalBlockId``
(:issue:`4526`)
* Recognize Interest in Packet Format v0.3 (:issue:`4527`)
In this release, ``Interest::wireDecode`` accepts both v0.2 and v0.3 formats, but
``Interest::wireEncode`` only encodes into v0.2 format. A future release of the
library will switch the encoding to v0.3 format.
* Recognize Data in Packet Format v0.3 (:issue:`4568`)
In this release, ``Data::wireDecode`` accepts both v0.2 and v0.3 formats, but
``Data::wireEncode`` only encodes into v0.2 format. A future release of the library
will switch the encoding to v0.3 format.
- Library support for cs/erase command of NFD Management (:issue:`4318`)
- A convenience function to print out ``Block`` structures (:issue:`2225`)
Improvements and bug fixes
^^^^^^^^^^^^^^^^^^^^^^^^^^
- Change encoding of NDNLPv2 sequence number from nonNegativeInteger to fixed-width
integer (8 bytes in network order) (:issue:`4403`)
- Fix compilation with Boost 1.67 (:issue:`4584`)
- Upgrade build environment to latest version of ``waf`` and other improvements
- Logging system improvements (:issue:`4552`)
Deprecated
^^^^^^^^^^
- Selectors (:issue:`4527`)
NDN Packet Format v0.3 replaces Selectors with ``CanBePrefix`` and ``MustBeFresh`` elements.
This commit deprecates getter/setter for Selectors in Interest class. Getter/setter for
CanBePrefix and MustBeFresh are mapped to the closest v0.2 semantics and encoded as
selectors.
- ``Data::get/setFinalBlockId()`` in favor of ``Data::get/setFinalBlock()``
@@ -0,0 +1,88 @@
ndn-cxx version 0.6.3
---------------------
Release date: September 18, 2018
The build requirements have been upgraded to gcc >= 5.3 or clang >= 3.6, boost >= 1.58,
openssl >= 1.0.2. This effectively drops support for all versions of Ubuntu older than 16.04
that use distribution-provided compilers and packages.
The compilation now uses the C++14 standard.
New features
^^^^^^^^^^^^
- More support for `NDN packet format version 0.3
<https://named-data.net/doc/NDN-packet-spec/0.3/>`__ (:issue:`4527`)
- Allow applications to declare a default ``CanBePrefix`` setting (:issue:`4581`)
- Accommodate typed name components in ``Name::getSuccessor`` (:issue:`4570`)
- Support Parameters element (:issue:`4658`)
- Recognize alternative type representations in URI syntax (:issue:`4690`)
- Introduce ``ParametersSha256DigestComponent`` (:issue:`4658`, :issue:`4570`)
- Prefix announcement object (:issue:`4650`)
- MTU element in ``ControlParameters`` and ``FaceStatus`` (:issue:`4005`)
- Enable congestion control features in ``SegmentFetcher`` (:issue:`4364`)
- ``_block`` literal operator (:issue:`4722`)
- Add official support for CentOS 7 (:issue:`4610`)
Improvements and bug fixes
^^^^^^^^^^^^^^^^^^^^^^^^^^
- Fix a segfault in ``Face::satisfyPendingInterests`` when ``Face::put`` is
called in DataCallback (:issue:`4596`)
- Allow specifying passphrase for ndnsec import/export on the command line (:issue:`4633`)
- Fix bug preventing customization of KeyChain's TPM on macOS (:issue:`4297`)
- Fix bug with handling Sha256-signed Command Interests (:issue:`4635`)
- Eliminate selector usage in ``SegmentFetcher`` (:issue:`4555`)
- Improvements in ``netlink`` message processing
- Gracefully handle ``NetworkMonitor`` backend initialization failure (:issue:`4668`)
- Add support 224-bit and 521-bit NIST elliptic curves, add support for SHA-3 (with
openssl >= 1.1.1-pre1), and forbid RSA keys shorter than 2048 bits in security helpers
- Improve and simplify code with modern C++ features
- Properly declare move constructors
- Improve error handling
- Improve test cases
- Correct and improve documentation
Deprecated
^^^^^^^^^^
- ``SegmentFetcher::fetch()`` static functions in favor of ``start()`` (:issue:`4464`)
- ``ndn::ip::address{,V6}FromString`` as Boost.Asio >= 1.58 has proper implementation of
``addressFromString``
- Selectors (:issue:`4527`)
NDN Packet Format v0.3 replaces Selectors with ``CanBePrefix`` and ``MustBeFresh`` elements.
``CanBePrefix`` and ``MustBeFresh`` are currently mapped to the closest v0.2 semantics and
encoded as selectors.
- ``Data::get/setFinalBlockId()`` in favor of ``Data::get/setFinalBlock()``
Removed
^^^^^^^
- Dependency on Boost.Regex in favor of ``std::regex``
@@ -0,0 +1,78 @@
ndn-cxx version 0.6.5
---------------------
Release date: February 4, 2019
New features
^^^^^^^^^^^^
- More support for `NDN packet format version
0.3 <https://named-data.net/doc/NDN-packet-spec/0.3/>`__ (:issue:`4527`)
* Stop using ``ChildSelector`` in ``NotificationSubscriber`` (:issue:`4664`)
* Stop using ``ChildSelector`` in ``CertificateBundleFetcher`` (:issue:`4665`)
- Support floating point numbers in TLV-VALUE (:issue:`4612`)
- Scoped prefix registration, scoped Interest filter, and scoped pending Interest
(:issue:`3919`, :issue:`4316`)
- Counters for satisfied and unsatisfied Interests in ``ForwarderStatus``
(:issue:`4720`)
- ``random::getRandomNumberEngine()`` in the public API
- ``MetadataObject`` class to encode/decode RDR-style metadata (:issue:`4707`)
- ``SegmentFetcher::stop()`` (:issue:`4692`)
Improvements and bug fixes
^^^^^^^^^^^^^^^^^^^^^^^^^^
- Use openssl-based routines for the PKCS#8 decoding/decryption when exporting key from macOS
Keychain (:issue:`4450`)
- Switch to AES-256 for private key encryption in PKCS #8 export
- Add exponential backoff in ``CertificateFetcherFromNetwork`` (:issue:`4718`, :issue:`4712`)
- Throw exception when loading an orphaned ``ValidationPolicyConfig`` (API violation)
(:issue:`4758`)
- Forbid unrecognized TLVs before ``Name`` (:issue:`4667`)
- Prevent memory pool size from becoming zero in ``InMemoryStorage`` (:issue:`4769`)
- Clean up fetchers when destructing ``nfd::Controller`` (:issue:`4775`)
- Fix ``SegmentFetcher`` undefined behavior caused by uncanceled pending interest
(:issue:`4770`)
- Seed the PRNG with more entropy (:issue:`4808`)
- Stop accepting NonNegativeInteger as sequence number in NDNLP (:issue:`4598`)
- Backport C++17 ``std::any`` and ``std::variant`` as ``ndn::any`` and ``ndn::variant``
- Reimplement ``scheduler::EventId`` with ``CancelHandle`` (:issue:`4698`)
Deprecated
^^^^^^^^^^
- ``ndn-cxx/util/scheduler-scoped-event-id.hpp`` header as it is now sufficient to use
``ndn-cxx/util/scheduler.hpp`` header (:issue:`4698`)
- Implicit conversion from nullptr to ``scheduler::EventId`` (:issue:`4698`)
Removed
^^^^^^^
- ``ndn::ip::address{,V6}FromString``
- ``SegmentFetcher::fetch`` (:issue:`4464`)
- ``{get,set}FinalBlockId()``
- Headers that were already considered internal implementation details have been explicitly
moved to a ``detail/`` subdir to more clearly separate private and public headers
@@ -0,0 +1,62 @@
ndn-cxx version 0.6.6
---------------------
Release date: April 27, 2019
.. note::
This is the last release to support the `NDN packet format version 0.2.1
<https://named-data.net/doc/NDN-packet-spec/0.2.1/>`__.
The next release will be able to encode and decode only the `v0.3 packet format
<https://named-data.net/doc/NDN-packet-spec/0.3/>`__.
New features
^^^^^^^^^^^^
- More support for `NDN packet format version 0.3
<https://named-data.net/doc/NDN-packet-spec/0.3/>`__ (:issue:`4527`)
* Support new naming conventions to encode/decode segment numbers, byte offsets, versions,
timestamps, and sequence numbers based on typed name components (:issue:`4777`)
* Stop using ``ChildSelector`` in ``CertificateBundleFetcher`` (:issue:`4665`)
- ``NDN_THROW`` macro to throw exceptions including file position and runtime context of the
throw statement (:issue:`4834`)
- Ensure that a ``Block`` with TLV-TYPE zero is treated as invalid (:issue:`4726`, :issue:`4895`)
Improvements and bug fixes
^^^^^^^^^^^^^^^^^^^^^^^^^^
- Avoid directly using memory address as ``PendingInterestId`` to prevent potential false
removal of an entry (:issue:`2865`)
- Follow up packet specification changes to rename the ``Parameters`` element to
``ApplicationParameters`` and to change its number to be a non-critical element type
(:issue:`4658`, :issue:`4780`)
- Add an option to disable the infrastructure Interest in ``CertificateFetcherDirectFetch``
(:issue:`4879`)
- Fix compilation against recent versions of Boost libraries and issues with Xcode 10.2 and
older versions of Boost libraries (:issue:`4890`, :issue:`4923`, :issue:`4860`)
- Improve the "CanBePrefix unset" warning (:issue:`4581`)
- Improve documentation
Deprecated
^^^^^^^^^^
- ``PendingInterestId``, ``RegisteredPrefixId``, and ``InterestFilterId`` types in favor of
``PendingInterestHandle``, ``RegisteredPrefixHandle``, and ``InterestFilterHandle``
(:issue:`4316`, :issue:`3919`)
- ``Block::empty`` in favor of ``Block::isValid`` (with inverted semantics)
- ``Scheduler::scheduleEvent`` and ``Scheduler::cancelEvent`` in favor of ``Scheduler::schedule``
and ``EventId::cancel`` (or use ``ScopedEventId`` to automatically cancel the event when
the object goes out of scope) (:issue:`4883`)
- ``ndn::util::Scheduler`` (use ``ndn::Scheduler`` or ``ndn::scheduler::Scheduler``) and
``ndn::EventId`` (use ``ndn::scheduler::EventId``) (:issue:`4883`)
@@ -0,0 +1,79 @@
ndn-cxx version 0.7.0
---------------------
Release date: January 13, 2020
**Breaking Change**
This release features support of only `NDN packet format version 0.3
<https://named-data.net/doc/NDN-packet-spec/0.3/>`__ (:issue:`4527`, :issue:`4567`,
:issue:`4709`, :issue:`4913`). The library encodes and interprets Interest and Data
packets only in 0.3 format; support for version 0.2 has been completely removed. In
addition, the URI representation of Interest packets has been updated to follow the
packet format changes.
New features
^^^^^^^^^^^^
- HMAC signing support (:issue:`3075`)
- Support for ``ParametersSha256DigestComponent`` in ``Name`` and ``Interest`` classes
(:issue:`4658`)
- Encoding/decoding of ``HopLimit`` field in Interest (:issue:`4806`)
- PIT token (:issue:`4532`).
PIT token is a hop-by-hop header field that identifies an Interest-Data exchange. The
downstream node can assign an opaque token to an outgoing Interest, and the upstream node
is expected to return the same token on the Data or Nack in reply to that Interest. This
would allow the downstream node to accelerate its processing, especially in PIT lookup.
- ``io::loadBuffer`` and ``io::saveBuffer`` helper functions
Improvements and bug fixes
^^^^^^^^^^^^^^^^^^^^^^^^^^
- Various improvements in the Linux implementation of ``NetworkMonitor`` class
- Rework of ``RttEstimator`` class:
* split into two classes: ``RttEstimator`` and ``RttEstimatorWithStats`` (:issue:`4887`)
* add a getter for the smoothed RTT value (:issue:`4892`)
* switch to use ``time::nanoseconds`` (:issue:`4887`)
- Make use of attributes in logging facilities and generalize logger backend support
(:issue:`4969`, :issue:`3782`)
- Silently accept an empty validation policy instead of throwing an exception (:issue:`5049`)
- Introduce alternative URI syntax for component types used in naming conventions, with
ability to choose between canonical and alternate format (:issue:`4777`)
- Don't force the generation of an Interest nonce during decoding (:issue:`4685`)
- Various documentation improvements
Removals
^^^^^^^^
- ``ndn::util::Scheduler`` (use ``ndn::Scheduler`` or ``ndn::scheduler::Scheduler``) and
``ndn::EventId`` (use ``ndn::scheduler::EventId``) (:issue:`4883`)
- Unused ``KeyClass`` and ``AclType`` enums
- Unused ``v2::PublicKey`` alias of ``transform::PublicKey``
- ``HmacFilter`` class, use SignerFilter and VerifierFilter instead
- Ill-defined equality operators for ``Interest``, ``MetaInfo``, ``Signature`` (:issue:`4569`)
- Implicit conversion from the ``xyzHandle`` types to ``const xyzId*`` (where ``xyz`` is
``PendingInterest``, ``RegisteredPrefixId``, and ``InterestFilterId``)
- Deprecated ``KeyLocator::Type`` enum
- Private header files of concrete PIB, TPM, and KeyHandle implementations are no longer
installed (:issue:`4782`)
- Renamed ``util/backports-ostream-joiner.hpp`` to ``util/ostream-joiner.hpp``
@@ -0,0 +1,77 @@
ndn-cxx version 0.7.1
---------------------
Release date: October 8, 2020
The build requirements have been increased to require Clang >= 4.0, Xcode >= 9.0, and Python >= 3.6.
Meanwhile, it is *recommended* to use GCC >= 7.4.0 and Boost >= 1.65.1.
This effectively drops official support for Ubuntu 16.04 when using distribution-provided Boost
packages -- ndn-cxx may still work on this platform, but we provide no official support for it.
Additionally, this release drops support for CentOS 7 and adds support for CentOS 8.
New features
^^^^^^^^^^^^
- Signed Interests according to Packet Specification v0.3 (:issue:`4804`)
- Add "in-order" mode to ``SegmentFetcher`` and a corresponding signal that is emitted after each
segment is received and validated in segment order. Segments that arrive out-of-order will be
buffered internally until all earlier segments have arrived and passed validation.
- Allow ``KeyLocator`` to either identify the full name of a certificate, an unversioned certificate
prefix, or the name of a public key (without issuer and version) (:issue:`5115`)
- Allow face MTU to be changed via management (:issue:`5056`)
Improvements and bug fixes
^^^^^^^^^^^^^^^^^^^^^^^^^^
- Change default key type generated by ndnsec to ECDSA
- Use named curve when encoding ECDSA public keys (:issue:`5037`)
- Allow non-default key to be exported for an identity via ``ndnsec-export`` (:issue:`5043`)
- Fix spurious error message from ``ndnsec-key-gen`` when ``key-id`` is specified (:issue:`5057`)
- Provide more fine-grained choices for ``name::UriFormat`` (:issue:`4777`)
- Allow automatic log flushing to be disabled (:issue:`3668`)
- Avoid unnecessarily invalidating cached wire encodings of Data packets
- Correct extraction of signed portion of Data packets to be compatible with Packet Specification
v0.3 (:issue:`4583`)
- Fix regression in ``CertificateBundleFetcher`` with ``FinalBlockId`` handling
- Improve error handling during TPM signing (:issue:`4585`, :issue:`5086`)
- Correctly handle non-existent identity in ``PibImpl::setDefaultIdentity``
- Fix incompatibility with ``time::toIsoString`` in Boost 1.73.0+
- Fix incompatibility with ``<version>`` header in C++20
- Various fixes for Android
- Various improvements to documentation, test suite structure, and authors list
Deprecations
^^^^^^^^^^^^
- Deprecate old Signed Interest and Command Interest formats (:issue:`4804`)
- Deprecate ``Signature`` in favor of ``SignatureInfo`` in Data packets and certificates (:issue:`4804`)
- ``SignatureInfo::unsetKeyLocator`` and ``SignatureInfo::unsetValidityPeriod`` have been deprecated
- Header files under ``ndn/security/v2`` have been moved into the main ``ndn/security`` directory
Removals
^^^^^^^^
- Remove deprecated ``PendingInterestId``, ``InterestFilterId``, and ``RegisteredPrefixId``
(:issue:`4885`)
- Remove a number of long-deprecated functions and enums
+76 -25
View File
@@ -1,10 +1,17 @@
ndn-cxx Versions
++++++++++++++++
All ndn-cxx Releases
++++++++++++++++++++
.. toctree::
:hidden:
:maxdepth: 1
release-notes/release-notes-0.7.1
release-notes/release-notes-0.7.0
release-notes/release-notes-0.6.6
release-notes/release-notes-0.6.5
release-notes/release-notes-0.6.3
release-notes/release-notes-0.6.2
release-notes/release-notes-0.6.1
release-notes/release-notes-0.6.0
release-notes/release-notes-0.5.1
release-notes/release-notes-0.5.0
@@ -18,71 +25,115 @@ ndn-cxx Versions
release-notes/release-notes-0.2.0
release-notes/release-notes-0.1.0
* **ndn-cxx version 0.7.1**
(:doc:`Release Notes <release-notes/release-notes-0.7.1>`, `Documentation <https://named-data.net/doc/ndn-cxx/0.7.1/>`__)
`src (git) <https://github.com/named-data/ndn-cxx/releases/tag/ndn-cxx-0.7.1>`__,
`src (tarball) <https://named-data.net/downloads/nfd-0.7.1.tar.bz2>`__ (`checksum <https://named-data.net/downloads/nfd-0.7.1.tar.bz2.sha256>`__)
* **ndn-cxx version 0.7.0**
(:doc:`Release Notes <release-notes/release-notes-0.7.0>`, `Documentation <https://named-data.net/doc/ndn-cxx/0.7.0/>`__)
`src (git) <https://github.com/named-data/ndn-cxx/releases/tag/ndn-cxx-0.7.0>`__,
`src (tarball) <https://named-data.net/downloads/nfd-0.7.0.tar.bz2>`__ (`checksum <https://named-data.net/downloads/nfd-0.7.0.tar.bz2.sha256>`__)
* **ndn-cxx version 0.6.6**
(:doc:`Release Notes <release-notes/release-notes-0.6.6>`, `Documentation <https://named-data.net/doc/ndn-cxx/0.6.6/>`__)
`src (git) <https://github.com/named-data/ndn-cxx/releases/tag/ndn-cxx-0.6.6>`__,
`src (tarball) <https://named-data.net/downloads/nfd-0.6.6.tar.bz2>`__ (`checksum <https://named-data.net/downloads/nfd-0.6.6.tar.bz2.sha256>`__)
* **ndn-cxx version 0.6.5**
(:doc:`Release Notes <release-notes/release-notes-0.6.5>`, `Documentation <https://named-data.net/doc/ndn-cxx/0.6.5/>`__)
`src (git) <https://github.com/named-data/ndn-cxx/releases/tag/ndn-cxx-0.6.5>`__,
`src (tarball) <https://named-data.net/downloads/nfd-0.6.5.tar.bz2>`__ (`checksum <https://named-data.net/downloads/nfd-0.6.5.tar.bz2.sha256>`__)
* **ndn-cxx version 0.6.4 was skipped**
* **ndn-cxx version 0.6.3**
(:doc:`Release Notes <release-notes/release-notes-0.6.3>`, `Documentation <https://named-data.net/doc/ndn-cxx/0.6.3/>`__)
`src (git) <https://github.com/named-data/ndn-cxx/releases/tag/ndn-cxx-0.6.3>`__,
`src (tarball) <https://named-data.net/downloads/nfd-0.6.3.tar.bz2>`__ (`checksum <https://named-data.net/downloads/nfd-0.6.3.tar.bz2.sha256>`__)
* **ndn-cxx version 0.6.2**
(:doc:`Release Notes <release-notes/release-notes-0.6.2>`, `Documentation <https://named-data.net/doc/ndn-cxx/0.6.2/>`__)
`src (git) <https://github.com/named-data/ndn-cxx/releases/tag/ndn-cxx-0.6.2>`__,
`src (tarball) <https://named-data.net/downloads/nfd-0.6.2.tar.bz2>`__ (`checksum <https://named-data.net/downloads/nfd-0.6.2.tar.bz2.sha256>`__)
* **ndn-cxx version 0.6.1**
(:doc:`Release Notes <release-notes/release-notes-0.6.1>`, `Documentation <https://named-data.net/doc/ndn-cxx/0.6.1/>`__)
`src (git) <https://github.com/named-data/ndn-cxx/releases/tag/ndn-cxx-0.6.1>`__,
`src (tarball) <https://named-data.net/downloads/nfd-0.6.1.tar.bz2>`__ (`checksum <https://named-data.net/downloads/nfd-0.6.1.tar.bz2.sha256>`__)
* **ndn-cxx version 0.6.0**
(:doc:`Release Notes <release-notes/release-notes-0.6.0>`, `Documentation <https://named-data.net/doc/ndn-cxx/0.6.0/>`__)
`src (git) <https://github.com/named-data/ndn-cxx/releases/tag/ndn-cxx-0.6.0>`__,
`src (tarball) <https://named-data.net/downloads/nfd-0.6.0.tar.bz2>`__ (`checksum <http://named-data.net/downloads/nfd-0.6.0.tar.bz2.sha256>`__)
`src (tarball) <https://named-data.net/downloads/nfd-0.6.0.tar.bz2>`__ (`checksum <https://named-data.net/downloads/nfd-0.6.0.tar.bz2.sha256>`__)
* **ndn-cxx version 0.5.1**
(:doc:`Release Notes <release-notes/release-notes-0.5.1>`, `Documentation <http://named-data.net/doc/ndn-cxx/0.5.1/>`__)
(:doc:`Release Notes <release-notes/release-notes-0.5.1>`, `Documentation <https://named-data.net/doc/ndn-cxx/0.5.1/>`__)
`src (git) <https://github.com/named-data/ndn-cxx/releases/tag/ndn-cxx-0.5.1>`__,
`src (tarball) <http://named-data.net/downloads/nfd-0.5.1.tar.bz2>`__ (`checksum <http://named-data.net/downloads/nfd-0.5.1.tar.bz2.sha256>`__)
`src (tarball) <https://named-data.net/downloads/nfd-0.5.1.tar.bz2>`__ (`checksum <https://named-data.net/downloads/nfd-0.5.1.tar.bz2.sha256>`__)
* **ndn-cxx version 0.5.0**
(:doc:`Release Notes <release-notes/release-notes-0.5.0>`, `Documentation <http://named-data.net/doc/ndn-cxx/0.5.0/>`__)
(:doc:`Release Notes <release-notes/release-notes-0.5.0>`, `Documentation <https://named-data.net/doc/ndn-cxx/0.5.0/>`__)
`src (git) <https://github.com/named-data/ndn-cxx/releases/tag/ndn-cxx-0.5.0>`__,
`src (tarball) <http://named-data.net/downloads/nfd-0.5.0.tar.bz2>`__ (`checksum <http://named-data.net/downloads/nfd-0.5.0.tar.bz2.sha256>`__)
`src (tarball) <https://named-data.net/downloads/nfd-0.5.0.tar.bz2>`__ (`checksum <https://named-data.net/downloads/nfd-0.5.0.tar.bz2.sha256>`__)
* **ndn-cxx version 0.4.1**
(:doc:`Release Notes <release-notes/release-notes-0.4.1>`, `Documentation <http://named-data.net/doc/ndn-cxx/0.4.1/>`__)
(:doc:`Release Notes <release-notes/release-notes-0.4.1>`, `Documentation <https://named-data.net/doc/ndn-cxx/0.4.1/>`__)
`src (git) <https://github.com/named-data/ndn-cxx/releases/tag/ndn-cxx-0.4.1>`__,
`src (tarball) <http://named-data.net/downloads/nfd-0.4.1.tar.bz2>`__ (`checksum <http://named-data.net/downloads/nfd-0.4.1.tar.bz2.sha256>`__)
`src (tarball) <https://named-data.net/downloads/nfd-0.4.1.tar.bz2>`__ (`checksum <https://named-data.net/downloads/nfd-0.4.1.tar.bz2.sha256>`__)
* **ndn-cxx version 0.4.0**
(:doc:`Release Notes <release-notes/release-notes-0.4.0>`, `Documentation <http://named-data.net/doc/ndn-cxx/0.4.0/>`__)
(:doc:`Release Notes <release-notes/release-notes-0.4.0>`, `Documentation <https://named-data.net/doc/ndn-cxx/0.4.0/>`__)
`src (git) <https://github.com/named-data/ndn-cxx/releases/tag/ndn-cxx-0.4.0>`__,
`src (tarball) <http://named-data.net/downloads/nfd-0.4.0.tar.bz2>`__ (`checksum <http://named-data.net/downloads/nfd-0.4.0.tar.bz2.sha256>`__)
`src (tarball) <https://named-data.net/downloads/nfd-0.4.0.tar.bz2>`__ (`checksum <https://named-data.net/downloads/nfd-0.4.0.tar.bz2.sha256>`__)
* **ndn-cxx version 0.3.4**
(:doc:`Release Notes <release-notes/release-notes-0.3.4>`, `Documentation <http://named-data.net/doc/ndn-cxx/0.3.4/>`__)
(:doc:`Release Notes <release-notes/release-notes-0.3.4>`, `Documentation <https://named-data.net/doc/ndn-cxx/0.3.4/>`__)
`src (git) <https://github.com/named-data/ndn-cxx/releases/tag/ndn-cxx-0.3.4>`__,
`src (tarball) <http://named-data.net/downloads/nfd-0.3.4.tar.bz2>`__ (`checksum <http://named-data.net/downloads/nfd-0.3.4.tar.bz2.sha256>`__)
`src (tarball) <https://named-data.net/downloads/nfd-0.3.4.tar.bz2>`__ (`checksum <https://named-data.net/downloads/nfd-0.3.4.tar.bz2.sha256>`__)
* **ndn-cxx version 0.3.3**
(:doc:`Release Notes <release-notes/release-notes-0.3.3>`, `Documentation <http://named-data.net/doc/ndn-cxx/0.3.3/>`__)
(:doc:`Release Notes <release-notes/release-notes-0.3.3>`, `Documentation <https://named-data.net/doc/ndn-cxx/0.3.3/>`__)
`src (git) <https://github.com/named-data/ndn-cxx/releases/tag/ndn-cxx-0.3.3>`__,
`src (tarball) <http://named-data.net/downloads/nfd-0.3.3.tar.bz2>`__ (`checksum <http://named-data.net/downloads/nfd-0.3.3.tar.bz2.sha256>`__)
`src (tarball) <https://named-data.net/downloads/nfd-0.3.3.tar.bz2>`__ (`checksum <https://named-data.net/downloads/nfd-0.3.3.tar.bz2.sha256>`__)
* **ndn-cxx version 0.3.2**
(:doc:`Release Notes <release-notes/release-notes-0.3.2>`, `Documentation <http://named-data.net/doc/ndn-cxx/0.3.2/>`__)
(:doc:`Release Notes <release-notes/release-notes-0.3.2>`, `Documentation <https://named-data.net/doc/ndn-cxx/0.3.2/>`__)
`src (git) <https://github.com/named-data/ndn-cxx/releases/tag/ndn-cxx-0.3.2>`__,
`src (tarball) <http://named-data.net/downloads/nfd-0.3.2.tar.bz2>`__ (`checksum <http://named-data.net/downloads/nfd-0.3.2.tar.bz2.sha256>`__)
`src (tarball) <https://named-data.net/downloads/nfd-0.3.2.tar.bz2>`__ (`checksum <https://named-data.net/downloads/nfd-0.3.2.tar.bz2.sha256>`__)
* **ndn-cxx version 0.3.1**
(:doc:`Release Notes <release-notes/release-notes-0.3.1>`, `Documentation <http://named-data.net/doc/ndn-cxx/0.3.1/>`__)
(:doc:`Release Notes <release-notes/release-notes-0.3.1>`, `Documentation <https://named-data.net/doc/ndn-cxx/0.3.1/>`__)
`src (git) <https://github.com/named-data/ndn-cxx/releases/tag/ndn-cxx-0.3.1>`__,
`src (tarball) <http://named-data.net/downloads/nfd-0.3.1.tar.bz2>`__ (`checksum <http://named-data.net/downloads/nfd-0.3.1.tar.bz2.sha256>`__)
`src (tarball) <https://named-data.net/downloads/nfd-0.3.1.tar.bz2>`__ (`checksum <https://named-data.net/downloads/nfd-0.3.1.tar.bz2.sha256>`__)
* **ndn-cxx version 0.3.0**
(:doc:`Release Notes <release-notes/release-notes-0.3.0>`, `Documentation <http://named-data.net/doc/ndn-cxx/0.3.0/>`__)
(:doc:`Release Notes <release-notes/release-notes-0.3.0>`, `Documentation <https://named-data.net/doc/ndn-cxx/0.3.0/>`__)
`src (git) <https://github.com/named-data/ndn-cxx/releases/tag/ndn-cxx-0.3.0>`__,
`src (tarball) <http://named-data.net/downloads/nfd-0.3.0.tar.bz2>`__ (`checksum <http://named-data.net/downloads/nfd-0.3.0.tar.bz2.sha256>`__)
`src (tarball) <https://named-data.net/downloads/nfd-0.3.0.tar.bz2>`__ (`checksum <https://named-data.net/downloads/nfd-0.3.0.tar.bz2.sha256>`__)
* **ndn-cxx version 0.2.0**
(:doc:`Release Notes <release-notes/release-notes-0.2.0>`, `Documentation <http://named-data.net/doc/ndn-cxx/0.2.0/>`__)
(:doc:`Release Notes <release-notes/release-notes-0.2.0>`, `Documentation <https://named-data.net/doc/ndn-cxx/0.2.0/>`__)
`src (git) <https://github.com/named-data/ndn-cxx/releases/tag/ndn-cxx-0.2.0>`__,
`src (tarball) <http://named-data.net/downloads/nfd-0.2.0.tar.bz2>`__ (`checksum <http://named-data.net/downloads/nfd-0.2.0.tar.bz2.sha256>`__)
`src (tarball) <https://named-data.net/downloads/nfd-0.2.0.tar.bz2>`__ (`checksum <https://named-data.net/downloads/nfd-0.2.0.tar.bz2.sha256>`__)
- ndn-cxx version 0.2.0-rc1
`src (git) <https://github.com/named-data/ndn-cxx/releases/tag/ndn-cxx-0.2.0-rc1>`__
@@ -91,10 +142,10 @@ ndn-cxx Versions
`src (git) <https://github.com/named-data/ndn-cxx/releases/tag/ndn-cxx-0.2.0-rc2>`__
* **ndn-cxx version 0.1.0**
(:doc:`Release Notes <release-notes/release-notes-0.1.0>`, `Documentation <http://named-data.net/doc/ndn-cxx/0.1.0/>`__)
(:doc:`Release Notes <release-notes/release-notes-0.1.0>`, `Documentation <https://named-data.net/doc/ndn-cxx/0.1.0/>`__)
`src (git) <https://github.com/named-data/ndn-cxx/releases/tag/ndn-cxx-0.1.0>`__,
`src (tarball) <http://named-data.net/downloads/nfd-0.1.0.tar.bz2>`__ (`checksum <http://named-data.net/downloads/nfd-0.1.0.tar.bz2.sha256>`__)
`src (tarball) <https://named-data.net/downloads/nfd-0.1.0.tar.bz2>`__ (`checksum <https://named-data.net/downloads/nfd-0.1.0.tar.bz2.sha256>`__)
- ndn-cxx version 0.1.0-rc1
`src (git) <https://github.com/named-data/ndn-cxx/releases/tag/ndn-cxx-0.1.0-rc1>`__
+32 -45
View File
@@ -3,8 +3,6 @@
NDN Certificate Format Version 2.0
==================================
.. contents::
Since signature verification is a common operation in NDN applications, it is
important to define a common certificate format to standardize the public key
authentication procedure. As every NDN data packet is signed, a data packet
@@ -46,31 +44,26 @@ specification.
| SignatureValue |
+--------------------------+
.. code-block:: abnf
CertificateV2 ::= DATA-TLV TLV-LENGTH
Name (= /<NameSpace>/KEY/[KeyId]/[IssuerId]/[Version])
MetaInfo (.ContentType = KEY,
.FreshnessPeriod >~ 1h))
Content (= X509PublicKeyContent)
SignatureInfo (= CertificateV2SignatureInfo)
SignatureValue
CertificateV2 = DATA-TYPE TLV-LENGTH
Name ; /<NameSpace>/KEY/[KeyId]/[IssuerId]/[Version]
MetaInfo ; ContentType == KEY, FreshnessPeriod required
Content ; X509PublicKey
CertificateV2SignatureInfo
SignatureValue
X509PublicKeyContent ::= CONTENT-TLV TLV-LENGTH
BYTE+ (= public key bits in PKCS#8 format)
CertificateV2SignatureInfo ::= SIGNATURE-INFO-TYPE TLV-LENGTH
SignatureType
KeyLocator
ValidityPeriod
... optional critical or non-critical extension blocks ...
CertificateV2SignatureInfo = SIGNATURE-INFO-TYPE TLV-LENGTH
SignatureType
KeyLocator
ValidityPeriod
*CertificateV2Extension
Name
----
The name of a certificate consists of five parts as shown below:
::
The name of a certificate consists of five parts as shown below::
/<SubjectName>/KEY/[KeyId]/[IssuerId]/[Version]
@@ -86,17 +79,13 @@ identifier.
controlled by the certificate issuer and, similar to KeyId, can be an 8-byte random number,
SHA-256 digest of the issuer's public key, or a simple numerical identifier.
For example,
::
For example::
/edu/ucla/cs/yingdi/KEY/%03%CD...%F1/%9F%D3...%B7/%FD%d2...%8E
\_________________/ \___________/ \___________/\___________/
Certificate Namespace Key Id Issuer Id Version
(Identity)
MetaInfo
--------
@@ -124,17 +113,15 @@ certificate expires.
Using ISO style string is the convention of specifying the validity period of certificate,
which has been adopted by many certificate systems, such as X.509, PGP, and DNSSEC.
::
.. code-block:: abnf
ValidityPeriod ::= VALIDITY-PERIOD-TYPE TLV-LENGTH
NotBefore
NotAfter
ValidityPeriod = VALIDITY-PERIOD-TYPE TLV-LENGTH
NotBefore
NotAfter
NotBefore ::= NOT-BEFORE-TYPE TLV-LENGTH
BYTE{15}
NotBefore = NOT-BEFORE-TYPE TLV-LENGTH 8DIGIT "T" 6DIGIT
NotAfter ::= NOT-AFTER-TYPE TLV-LENGTH
BYTE{15}
NotAfter = NOT-AFTER-TYPE TLV-LENGTH 8DIGIT "T" 6DIGIT
For each TLV, the TLV-TYPE codes are assigned as below:
@@ -171,7 +158,7 @@ Extensions
We list currently defined extensions:
+---------------------------------------------+-------------------+----------------+
| TLV-TYPE | Assigned code | Assigned code |
| TLV-TYPE | Assigned number | Assigned number|
| | (decimal) | (hexadecimal) |
+=============================================+===================+================+
| AdditionalDescription (non-critical) | 258 | 0x0102 |
@@ -186,23 +173,23 @@ key-value pairs. Both key and value are UTF-8 strings, e.g.,
``("Organization", "UCLA")``. The issuer of a certificate can specify arbitrary
key-value pair to provide additional description about the certificate.
::
.. code-block:: abnf
AdditionalDescription ::= ADDITIONAL-DESCRIPTION-TYPE TLV-LENGTH
DescriptionEntry+
CertificateV2Extension = AdditionalDescription
DescriptionEntry ::= DESCRIPTION-ENTRY-TYPE TLV-LENGTH
DescriptionKey
DescriptionValue
AdditionalDescription = ADDITIONAL-DESCRIPTION-TYPE TLV-LENGTH
1*DescriptionEntry
DescriptionKey ::= DESCRIPTION-KEY-TYPE TLV-LENGTH
BYTE+
DescriptionEntry = DESCRIPTION-ENTRY-TYPE TLV-LENGTH
DescriptionKey
DescriptionValue
DescriptionValue ::= DESCRIPTION-VALUE-TYPE TLV-LENGTH
BYTE+
DescriptionKey = DESCRIPTION-KEY-TYPE TLV-LENGTH 1*OCTET
DescriptionValue = DESCRIPTION-VALUE-TYPE TLV-LENGTH 1*OCTET
+---------------------------------------------+-------------------+----------------+
| TLV-TYPE | Assigned code | Assigned code |
| TLV-TYPE | Assigned number | Assigned number|
| | (decimal) | (hexadecimal) |
+=============================================+===================+================+
| DescriptionEntry | 512 | 0x0200 |
+12 -9
View File
@@ -1,24 +1,27 @@
Export/Import Credentials
=========================
SafeBag Format for Exported Credentials
=======================================
Sometimes, one may need to export credentials (e.g., certificate and private key) from
one machine, and import them into another machine. This requires a secured container for
sensitive information. We define **SafeBag**, which contains both an NDN certificate
(:doc:`version 2.0 <certificate-format>`) and the corresponding private
key which is encrypted in `PKCS#8 format <https://tools.ietf.org/html/rfc5208>`_.
key, which is encrypted in `PKCS #8 format <https://tools.ietf.org/html/rfc5208>`_.
The format of **SafeBag** is defined as:
::
.. code-block:: abnf
SafeBag ::= SAFE-BAG-TYPE TLV-LENGTH
Certificate ; a data packet following certificate format spec
EncryptedKeyBag ; private key encrypted in PKCS#8 format
SafeBag = SAFE-BAG-TYPE TLV-LENGTH
CertificateV2
EncryptedKeyBag
All TLV-TYPE codes are application specific:
EncryptedKeyBag = ENCRYPTED-KEY-BAG-TYPE TLV-LENGTH
*OCTET ; private key encrypted in PKCS #8 format
All TLV-TYPE numbers are application specific:
+---------------------------------------------+-------------------+----------------+
| TLV-TYPE | Assigned code | Assigned code |
| TLV-TYPE | Assigned number | Assigned number|
| | (decimal) | (hexadecimal) |
+=============================================+===================+================+
| SafeBag | 128 | 0x80 |
+18 -15
View File
@@ -1,7 +1,12 @@
.. _Signed Interest:
Signed Interest
===============
Signed Interest Version 0.2 (DEPRECATED)
========================================
.. warning::
This document describes a deprecated format for signed Interest packets. The current format can
be found in the
`NDN Packet Specification <https://named-data.net/doc/NDN-packet-spec/current/signed-interest.html>`__.
**Signed Interest** is a mechanism to issue an authenticated interest.
@@ -13,7 +18,7 @@ penultimate name component TLV:
+-------------+----------+-----------------------------------------------------------------------------------+
| Interest | Interest | +------+--------+--------------------------------------------------+ +----------+ |
| Type (0x01) | length | | Name | Name | +---------+-- --+---------+---------+---------+| | Other | |
| Type (0x05) | length | | Name | Name | +---------+-- --+---------+---------+---------+| | Other | |
| | | | Type | Length | |Component| ... |Component|Component|Component|| | TLVs ... | |
| | | | | | | TLV 1 | | TLV n-2 | TLV n-1 | TLV n || | in | |
| | | | | | +---------+-- --+---------+---------+---------+| | Interest | |
@@ -27,14 +32,12 @@ penultimate name component TLV:
More specifically, the SignedInterest is defined to have four additional components:
- ``<timestamp>``
- ``<nonce>``
- ``<SignatureInfo>``
- ``<SignatureValue>``
- ``timestamp``
- ``nonce``
- ``SignatureInfo``
- ``SignatureValue``
For example, for ``/signed/interest/name`` name, CommandInterest will be defined as:
::
For example, for ``/signed/interest/name`` name, CommandInterest will be defined as::
/signed/interest/name/<timestamp>/<random-value>/<SignatureInfo>/<SignatureValue>
@@ -51,21 +54,21 @@ Timestamp component (n-3 *th*)
The value of the n-3 *th* component is the interest's timestamp (in terms of millisecond offset
from UTC 1970-01-01 00:00:00) encoded as
`nonNegativeInteger <http://named-data.net/doc/ndn-tlv/tlv.html#non-negative-integer-encoding>`__.
`NonNegativeInteger <https://named-data.net/doc/NDN-packet-spec/0.2.1/tlv.html#non-negative-integer-encoding>`__.
The timestamp may be used to protect against replay attack.
Nonce component (n-2 *th*)
~~~~~~~~~~~~~~~~~~~~~~~~~~
The value of the n-2 *th* component is random value (encoded as
`nonNegativeInteger <http://named-data.net/doc/ndn-tlv/tlv.html#non-negative-integer-encoding>`__)
`NonNegativeInteger <https://named-data.net/doc/NDN-packet-spec/0.2.1/tlv.html#non-negative-integer-encoding>`__)
that adds additional assurances that the interest will be unique.
SignatureInfo component (n-1 *th*)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The value of the n-1 *th* component is actually a
`SignatureInfo <http://named-data.net/doc/ndn-tlv/signature.html>`__ TLV.
`SignatureInfo <https://named-data.net/doc/NDN-packet-spec/0.2.1/signature.html>`__ TLV.
::
@@ -83,7 +86,7 @@ SignatureValue component (n *th*)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The value of the n *th* component is actually a
`SignatureValue <http://named-data.net/doc/ndn-tlv/signature.html>`__ TLV.
`SignatureValue <https://named-data.net/doc/NDN-packet-spec/0.2.1/signature.html>`__ TLV.
::
@@ -108,7 +111,7 @@ be signed, it will be treated as invalid in the following three cases:
missing or cannot be parsed correctly;
- the key is not trusted for signing the Interest;
- the signature cannot be verified with the public key pointed by the
`KeyLocator <http://named-data.net/doc/ndn-tlv/signature.html#keylocator>`__ in
`KeyLocator <https://named-data.net/doc/NDN-packet-spec/0.2.1/signature.html#keylocator>`__ in
SignatureInfo.
Recipients of a signed interest may further check the timestamp and the uniqueness of the
+5 -7
View File
@@ -51,8 +51,7 @@ configuration file containing two rules and a trust anchor.
file-name "testbed-trust-anchor.cert"
}
.. note::
**ATTENTION: The order of rules MATTERS!**
.. attention:: **The order of rules MATTERS!**
A rule can be broken into two parts:
@@ -97,8 +96,7 @@ rule. The filter property is not required in a rule; if omitted, the rule will c
packets passed to it. A rule may contain multiple filters, in this case, a packet
is captured by the rule only if all filters are satisfied.
.. note::
**ATTENTION: A packet that satisfies all the filters may not be valid**.
.. attention:: **A packet that satisfies all the filters may not be valid.**
The **checker** property defines the conditions that a matched packet must fulfill to be
treated as a valid packet. A rule must have at least one **checker** property. A packet is
@@ -377,9 +375,9 @@ period, such as
There is also a special trust anchor **any**. As long as such a trust-anchor is defined
in config file, packet validation will be turned off.
.. note::
**ATTENTION: This type of trust anchor is dangerous. You should used it only when you
want to disable packet validation temporarily (e.g, debugging code, building a demo).**
.. danger::
This type of trust anchor is dangerous. You should used it only when you
want to disable packet validation temporarily (e.g., debugging code, building a demo).
::
+2 -2
View File
@@ -5,8 +5,8 @@ NDN regular expression is a kind of regular expression that can match NDN names.
performed at two levels: the name level and the name component level.
A name component matcher, enclosed in ``<`` and ``>``, specifies the pattern of a name component. The
component pattern is expressed with the `Perl Regular Expression Syntax
<http://www.boost.org/doc/libs/1_55_0/libs/regex/doc/html/boost_regex/syntax/perl_syntax.html>`__.
component pattern is expressed using the `Modified ECMAScript Regular Expression Syntax
<https://en.cppreference.com/w/cpp/regex/ecmascript>`_.
For example, ``<ab*c>`` matches the 1st, 3rd, and 4th components of ``/ac/dc/abc/abbc``, but does
not match the 2nd component. A special case is that ``<>`` denotes a wildcard matcher that can match
**ANY** name component.
+34 -30
View File
@@ -1,6 +1,6 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/*
* Copyright (c) 2013-2017 Regents of the University of California.
* Copyright (c) 2013-2019 Regents of the University of California.
*
* This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
*
@@ -21,20 +21,18 @@
* @author Alexander Afanasyev <http://lasr.cs.ucla.edu/afanasyev/index.html>
*/
// correct way to include ndn-cxx headers
// #include <ndn-cxx/face.hpp>
// #include <ndn-cxx/util/scheduler.hpp>
#include "face.hpp"
#include "util/scheduler.hpp"
#include <ndn-cxx/face.hpp>
#include <ndn-cxx/util/scheduler.hpp>
#include <boost/asio/io_service.hpp>
#include <iostream>
// Enclosing code in ndn simplifies coding (can also use `using namespace ndn`)
namespace ndn {
// Additional nested namespaces can be used to prevent/limit name conflicts
// Additional nested namespaces should be used to prevent/limit name conflicts
namespace examples {
class ConsumerWithTimer : noncopyable
class ConsumerWithTimer
{
public:
ConsumerWithTimer()
@@ -46,20 +44,22 @@ public:
void
run()
{
Interest interest(Name("/example/testApp/randomData"));
interest.setInterestLifetime(time::seconds(1));
interest.setMustBeFresh(true);
Name interestName("/example/testApp/randomData");
interestName.appendVersion();
Interest interest(interestName);
interest.setCanBePrefix(false);
interest.setMustBeFresh(true);
interest.setInterestLifetime(2_s);
std::cout << "Sending Interest " << interest << std::endl;
m_face.expressInterest(interest,
bind(&ConsumerWithTimer::onData, this, _1, _2),
bind(&ConsumerWithTimer::onNack, this, _1, _2),
bind(&ConsumerWithTimer::onTimeout, this, _1));
std::cout << "Sending " << interest << std::endl;
// Schedule a new event
m_scheduler.scheduleEvent(time::seconds(2),
bind(&ConsumerWithTimer::delayedInterest, this));
m_scheduler.schedule(3_s, [this] { delayedInterest(); });
// m_ioService.run() will block until all events finished or m_ioService.stop() is called
m_ioService.run();
@@ -71,22 +71,22 @@ public:
private:
void
onData(const Interest& interest, const Data& data)
onData(const Interest&, const Data& data) const
{
std::cout << data << std::endl;
std::cout << "Received Data " << data << std::endl;
}
void
onNack(const Interest& interest, const lp::Nack& nack)
onNack(const Interest& interest, const lp::Nack& nack) const
{
std::cout << "received Nack with reason " << nack.getReason()
<< " for interest " << interest << std::endl;
std::cout << "Received Nack with reason " << nack.getReason()
<< " for " << interest << std::endl;
}
void
onTimeout(const Interest& interest)
onTimeout(const Interest& interest) const
{
std::cout << "Timeout " << interest << std::endl;
std::cout << "Timeout for " << interest << std::endl;
}
void
@@ -94,20 +94,23 @@ private:
{
std::cout << "One more Interest, delayed by the scheduler" << std::endl;
Interest interest(Name("/example/testApp/randomData"));
interest.setInterestLifetime(time::milliseconds(1000));
interest.setMustBeFresh(true);
Name interestName("/example/testApp/randomData");
interestName.appendVersion();
Interest interest(interestName);
interest.setCanBePrefix(false);
interest.setMustBeFresh(true);
interest.setInterestLifetime(2_s);
std::cout << "Sending Interest " << interest << std::endl;
m_face.expressInterest(interest,
bind(&ConsumerWithTimer::onData, this, _1, _2),
bind(&ConsumerWithTimer::onNack, this, _1, _2),
bind(&ConsumerWithTimer::onTimeout, this, _1));
std::cout << "Sending " << interest << std::endl;
}
private:
// Explicitly create io_service object, which can be shared between Face and Scheduler
// Explicitly create io_service object, which will be shared between Face and Scheduler
boost::asio::io_service m_ioService;
Face m_face;
Scheduler m_scheduler;
@@ -119,12 +122,13 @@ private:
int
main(int argc, char** argv)
{
ndn::examples::ConsumerWithTimer consumer;
try {
ndn::examples::ConsumerWithTimer consumer;
consumer.run();
return 0;
}
catch (const std::exception& e) {
std::cerr << "ERROR: " << e.what() << std::endl;
return 1;
}
return 0;
}
+22 -21
View File
@@ -1,6 +1,6 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/*
* Copyright (c) 2013-2017 Regents of the University of California.
* Copyright (c) 2013-2019 Regents of the University of California.
*
* This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
*
@@ -21,56 +21,56 @@
* @author Alexander Afanasyev <http://lasr.cs.ucla.edu/afanasyev/index.html>
*/
// correct way to include ndn-cxx headers
// #include <ndn-cxx/face.hpp>
#include "face.hpp"
#include <ndn-cxx/face.hpp>
#include <iostream>
// Enclosing code in ndn simplifies coding (can also use `using namespace ndn`)
namespace ndn {
// Additional nested namespaces can be used to prevent/limit name conflicts
// Additional nested namespaces should be used to prevent/limit name conflicts
namespace examples {
class Consumer : noncopyable
class Consumer
{
public:
void
run()
{
Interest interest(Name("/example/testApp/randomData"));
interest.setInterestLifetime(time::milliseconds(1000));
interest.setMustBeFresh(true);
Name interestName("/example/testApp/randomData");
interestName.appendVersion();
Interest interest(interestName);
interest.setCanBePrefix(false);
interest.setMustBeFresh(true);
interest.setInterestLifetime(6_s); // The default is 4 seconds
std::cout << "Sending Interest " << interest << std::endl;
m_face.expressInterest(interest,
bind(&Consumer::onData, this, _1, _2),
bind(&Consumer::onNack, this, _1, _2),
bind(&Consumer::onTimeout, this, _1));
std::cout << "Sending " << interest << std::endl;
// processEvents will block until the requested data received or timeout occurs
// processEvents will block until the requested data is received or a timeout occurs
m_face.processEvents();
}
private:
void
onData(const Interest& interest, const Data& data)
onData(const Interest&, const Data& data) const
{
std::cout << data << std::endl;
std::cout << "Received Data " << data << std::endl;
}
void
onNack(const Interest& interest, const lp::Nack& nack)
onNack(const Interest&, const lp::Nack& nack) const
{
std::cout << "received Nack with reason " << nack.getReason()
<< " for interest " << interest << std::endl;
std::cout << "Received Nack with reason " << nack.getReason() << std::endl;
}
void
onTimeout(const Interest& interest)
onTimeout(const Interest& interest) const
{
std::cout << "Timeout " << interest << std::endl;
std::cout << "Timeout for " << interest << std::endl;
}
private:
@@ -83,12 +83,13 @@ private:
int
main(int argc, char** argv)
{
ndn::examples::Consumer consumer;
try {
ndn::examples::Consumer consumer;
consumer.run();
return 0;
}
catch (const std::exception& e) {
std::cerr << "ERROR: " << e.what() << std::endl;
return 1;
}
return 0;
}
+23 -31
View File
@@ -1,6 +1,6 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/*
* Copyright (c) 2013-2017 Regents of the University of California.
* Copyright (c) 2013-2019 Regents of the University of California.
*
* This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
*
@@ -21,20 +21,18 @@
* @author Alexander Afanasyev <http://lasr.cs.ucla.edu/afanasyev/index.html>
*/
// correct way to include ndn-cxx headers
// #include <ndn-cxx/face.hpp>
// #include <ndn-cxx/security/key-chain.hpp>
#include "face.hpp"
#include "security/key-chain.hpp"
#include <ndn-cxx/face.hpp>
#include <ndn-cxx/security/key-chain.hpp>
#include <ndn-cxx/security/signing-helpers.hpp>
#include <iostream>
// Enclosing code in ndn simplifies coding (can also use `using namespace ndn`)
namespace ndn {
// Additional nested namespaces can be used to prevent/limit name conflicts
// Additional nested namespaces should be used to prevent/limit name conflicts
namespace examples {
class Producer : noncopyable
class Producer
{
public:
void
@@ -42,48 +40,41 @@ public:
{
m_face.setInterestFilter("/example/testApp",
bind(&Producer::onInterest, this, _1, _2),
RegisterPrefixSuccessCallback(),
nullptr, // RegisterPrefixSuccessCallback is optional
bind(&Producer::onRegisterFailed, this, _1, _2));
m_face.processEvents();
}
private:
void
onInterest(const InterestFilter& filter, const Interest& interest)
onInterest(const InterestFilter&, const Interest& interest)
{
std::cout << "<< I: " << interest << std::endl;
std::cout << ">> I: " << interest << std::endl;
// Create new name, based on Interest's name
Name dataName(interest.getName());
dataName
.append("testApp") // add "testApp" component to Interest name
.appendVersion(); // add "version" component (current UNIX timestamp in milliseconds)
static const std::string content = "HELLO KITTY";
static const std::string content("Hello, world!");
// Create Data packet
shared_ptr<Data> data = make_shared<Data>();
data->setName(dataName);
data->setFreshnessPeriod(time::seconds(10));
data->setContent(reinterpret_cast<const uint8_t*>(content.c_str()), content.size());
auto data = make_shared<Data>(interest.getName());
data->setFreshnessPeriod(10_s);
data->setContent(reinterpret_cast<const uint8_t*>(content.data()), content.size());
// Sign Data packet with default identity
m_keyChain.sign(*data);
// m_keyChain.sign(data, <identityName>);
// m_keyChain.sign(data, <certificate>);
// m_keyChain.sign(*data, signingByIdentity(<identityName>));
// m_keyChain.sign(*data, signingByKey(<keyName>));
// m_keyChain.sign(*data, signingByCertificate(<certName>));
// m_keyChain.sign(*data, signingWithSha256());
// Return Data packet to the requester
std::cout << ">> D: " << *data << std::endl;
std::cout << "<< D: " << *data << std::endl;
m_face.put(*data);
}
void
onRegisterFailed(const Name& prefix, const std::string& reason)
{
std::cerr << "ERROR: Failed to register prefix \""
<< prefix << "\" in local hub's daemon (" << reason << ")"
<< std::endl;
std::cerr << "ERROR: Failed to register prefix '" << prefix
<< "' with the local forwarder (" << reason << ")" << std::endl;
m_face.shutdown();
}
@@ -98,12 +89,13 @@ private:
int
main(int argc, char** argv)
{
ndn::examples::Producer producer;
try {
ndn::examples::Producer producer;
producer.run();
return 0;
}
catch (const std::exception& e) {
std::cerr << "ERROR: " << e.what() << std::endl;
return 1;
}
return 0;
}
+17 -18
View File
@@ -3,22 +3,21 @@
top = '..'
def build(bld):
# List all .cpp files (whole example should be in one .cpp)
for i in bld.path.ant_glob(['*.cpp']):
name = str(i)[:-len(".cpp")]
bld(features=['cxx', 'cxxprogram'],
target=name,
source=[i] + bld.path.ant_glob(['%s/**/*.cpp' % name]),
use='ndn-cxx',
install_path=None
)
# List all .cpp files (whole example in one .cpp)
for ex in bld.path.ant_glob('*.cpp'):
name = ex.change_ext('').path_from(bld.path.get_bld())
bld.program(name='example-%s' % name,
target=name,
source=[ex],
use='ndn-cxx',
install_path=None)
# List all directories files (example can has multiple .cpp in the directory)
for name in bld.path.ant_glob(['*'], dir=True, src=False):
bld(features=['cxx', 'cxxprogram'],
target="%s/%s" % (name, name),
source=bld.path.ant_glob(['%s/**/*.cpp' % name]),
use='ndn-cxx',
install_path=None,
includes='%s' % name,
)
# List all directories (example can have multiple .cpp in the directory)
for subdir in bld.path.ant_glob('*', dir=True, src=False):
name = subdir.path_from(bld.path)
bld.program(name='example-%s' % name,
target=name,
source=subdir.ant_glob('**/*.cpp'),
use='ndn-cxx',
includes=name,
install_path=None)
+461
View File
@@ -0,0 +1,461 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/*
* Copyright (c) 2013-2020 Regents of the University of California.
*
* This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
*
* ndn-cxx library is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later version.
*
* ndn-cxx library 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 Lesser General Public License for more details.
*
* You should have received copies of the GNU General Public License and GNU Lesser
* General Public License along with ndn-cxx, e.g., in COPYING.md file. If not, see
* <http://www.gnu.org/licenses/>.
*
* See AUTHORS.md for complete list of ndn-cxx authors and contributors.
*/
#include "ndn-cxx/data.hpp"
#include "ndn-cxx/signature.hpp"
#include "ndn-cxx/util/sha256.hpp"
#include <iostream>
namespace ndn {
BOOST_CONCEPT_ASSERT((boost::EqualityComparable<Data>));
BOOST_CONCEPT_ASSERT((WireEncodable<Data>));
BOOST_CONCEPT_ASSERT((WireEncodableWithEncodingBuffer<Data>));
BOOST_CONCEPT_ASSERT((WireDecodable<Data>));
static_assert(std::is_base_of<tlv::Error, Data::Error>::value,
"Data::Error must inherit from tlv::Error");
Data::Data(const Name& name)
: m_name(name)
{
}
Data::Data(const Block& wire)
{
wireDecode(wire);
}
template<encoding::Tag TAG>
size_t
Data::wireEncode(EncodingImpl<TAG>& encoder, bool wantUnsignedPortionOnly) const
{
// Data = DATA-TYPE TLV-LENGTH
// Name
// [MetaInfo]
// [Content]
// [ServiceClass]
// [TargetRate]
// SignatureInfo
// SignatureValue
// (elements are encoded in reverse order)
size_t totalLength = 0;
// SignatureValue
if (!wantUnsignedPortionOnly) {
if (!m_signatureInfo) {
NDN_THROW(Error("Requested wire format, but Data has not been signed"));
}
totalLength += encoder.prependBlock(m_signatureValue);
}
// SignatureInfo
totalLength += m_signatureInfo.wireEncode(encoder, SignatureInfo::Type::Data);
// TargetRate
if (getTargetRate()) {
uint64_t targetRate = *getTargetRate();
totalLength += encoder.prependByteArrayBlock(tlv::TargetRate, reinterpret_cast<uint8_t*>(&targetRate), sizeof(targetRate));
}
// ServiceClass
if (getServiceClass()) {
uint8_t serviceClass = *getServiceClass();
totalLength += encoder.prependByteArrayBlock(tlv::ServiceClass, reinterpret_cast<uint8_t*>(&serviceClass), sizeof(serviceClass));
}
// Content
if (hasContent()) {
totalLength += encoder.prependBlock(m_content);
}
// MetaInfo
totalLength += m_metaInfo.wireEncode(encoder);
// Name
totalLength += m_name.wireEncode(encoder);
if (!wantUnsignedPortionOnly) {
totalLength += encoder.prependVarNumber(totalLength);
totalLength += encoder.prependVarNumber(tlv::Data);
}
return totalLength;
}
template size_t
Data::wireEncode<encoding::EncoderTag>(EncodingBuffer&, bool) const;
template size_t
Data::wireEncode<encoding::EstimatorTag>(EncodingEstimator&, bool) const;
const Block&
Data::wireEncode(EncodingBuffer& encoder, const Block& signatureValue) const
{
size_t totalLength = encoder.size();
totalLength += encoder.appendBlock(signatureValue);
encoder.prependVarNumber(totalLength);
encoder.prependVarNumber(tlv::Data);
const_cast<Data*>(this)->wireDecode(encoder.block());
return m_wire;
}
const Block&
Data::wireEncode() const
{
if (m_wire.hasWire())
return m_wire;
EncodingEstimator estimator;
size_t estimatedSize = wireEncode(estimator);
EncodingBuffer buffer(estimatedSize, 0);
wireEncode(buffer);
const_cast<Data*>(this)->wireDecode(buffer.block());
return m_wire;
}
void
Data::wireDecode(const Block& wire)
{
if (wire.type() != tlv::Data) {
NDN_THROW(Error("Data", wire.type()));
}
m_wire = wire;
m_wire.parse();
// Data = DATA-TYPE TLV-LENGTH
// Name
// [MetaInfo]
// [Content]
// [ServiceClass]
// [TargetRate]
// SignatureInfo
// SignatureValue
auto element = m_wire.elements_begin();
if (element == m_wire.elements_end() || element->type() != tlv::Name) {
NDN_THROW(Error("Name element is missing or out of order"));
}
m_name.wireDecode(*element);
m_metaInfo = {};
m_content = {};
m_signatureInfo = {};
m_signatureValue = {};
m_fullName.clear();
int lastElement = 1; // last recognized element index, in spec order
for (++element; element != m_wire.elements_end(); ++element) {
// std::cout << "element: " << element->type() << std::endl;
switch (element->type()) {
case tlv::MetaInfo: {
if (lastElement >= 2) {
NDN_THROW(Error("MetaInfo element is out of order"));
}
m_metaInfo.wireDecode(*element);
lastElement = 2;
break;
}
case tlv::Content: {
if (lastElement >= 3) {
NDN_THROW(Error("Content element is out of order"));
}
m_content = *element;
lastElement = 3;
break;
}
case tlv::ServiceClass: {
if (lastElement >= 4) {
break; // ServiceClass is non-critical, ignore out-of-order appearance
}
if (element->value_size() != 1) {
NDN_THROW(Error("ServiceClass element is malformed"));
}
m_serviceClass = *element->value();
lastElement = 4;
break;
}
case tlv::TargetRate: {
if (lastElement >= 5) {
break; // TargetRate is non-critical, ignore out-of-order appearance
}
uint64_t targetRate = 0;
if (element->value_size() != 8) {
NDN_THROW(Error("TargetRate element is malformed"));
}
std::memcpy(&targetRate, element->value(), sizeof(targetRate));
m_targetRate = targetRate;
lastElement = 5;
break;
}
case tlv::SignatureInfo: {
if (lastElement >= 6) {
NDN_THROW(Error("SignatureInfo element is out of order"));
}
m_signatureInfo.wireDecode(*element);
lastElement = 6;
break;
}
case tlv::SignatureValue: {
if (lastElement >= 7) {
NDN_THROW(Error("SignatureValue element is out of order"));
}
m_signatureValue = *element;
lastElement = 7;
break;
}
default: { // unrecognized element
// if the TLV-TYPE is critical, abort decoding
if (tlv::isCriticalType(element->type())) {
NDN_THROW(Error("Unrecognized element of critical type " + to_string(element->type())));
}
// otherwise, ignore it
break;
}
}
}
if (!m_signatureInfo) {
NDN_THROW(Error("SignatureInfo element is missing"));
}
if (!m_signatureValue.isValid()) {
NDN_THROW(Error("SignatureValue element is missing"));
}
}
const Name&
Data::getFullName() const
{
if (m_fullName.empty()) {
if (!m_wire.hasWire()) {
NDN_THROW(Error("Cannot compute full name because Data has no wire encoding (not signed)"));
}
m_fullName = m_name;
m_fullName.appendImplicitSha256Digest(util::Sha256::computeDigest(m_wire.wire(), m_wire.size()));
}
return m_fullName;
}
void
Data::resetWire()
{
m_wire.reset();
m_fullName.clear();
}
Data&
Data::setName(const Name& name)
{
if (name != m_name) {
m_name = name;
resetWire();
}
return *this;
}
Data&
Data::setMetaInfo(const MetaInfo& metaInfo)
{
m_metaInfo = metaInfo;
resetWire();
return *this;
}
Data&
Data::setContent(const Block& block)
{
if (!block.isValid()) {
NDN_THROW(std::invalid_argument("Content block must be valid"));
}
if (block.type() == tlv::Content) {
m_content = block;
}
else {
m_content = Block(tlv::Content, block);
}
m_content.encode();
resetWire();
return *this;
}
Data&
Data::setContent(const uint8_t* value, size_t length)
{
if (value == nullptr && length != 0) {
NDN_THROW(std::invalid_argument("Content buffer cannot be nullptr"));
}
m_content = makeBinaryBlock(tlv::Content, value, length);
resetWire();
return *this;
}
Data&
Data::setContent(ConstBufferPtr value)
{
if (value == nullptr) {
NDN_THROW(std::invalid_argument("Content buffer cannot be nullptr"));
}
m_content = Block(tlv::Content, std::move(value));
resetWire();
return *this;
}
Data&
Data::unsetContent()
{
m_content = {};
resetWire();
return *this;
}
Signature
Data::getSignature() const
{
return Signature(m_signatureInfo, m_signatureValue);
}
Data&
Data::setSignature(const Signature& signature)
{
m_signatureInfo = signature.getSignatureInfo();
m_signatureValue = signature.getValue();
resetWire();
return *this;
}
Data&
Data::setSignatureInfo(const SignatureInfo& info)
{
m_signatureInfo = info;
resetWire();
return *this;
}
Data&
Data::setSignatureValue(ConstBufferPtr value)
{
if (value == nullptr) {
NDN_THROW(std::invalid_argument("SignatureValue buffer cannot be nullptr"));
}
m_signatureValue = Block(tlv::SignatureValue, std::move(value));
resetWire();
return *this;
}
InputBuffers
Data::extractSignedRanges() const
{
InputBuffers bufs;
bufs.reserve(1); // One range containing data value up to, but not including, SignatureValue
wireEncode();
auto lastSignedIt = std::prev(m_wire.find(tlv::SignatureValue));
bufs.emplace_back(m_wire.value(),
std::distance(m_wire.value_begin(), lastSignedIt->end()));
return bufs;
}
const Data&
Data::setServiceClass(optional<uint8_t> serviceClass) const
{
if (m_serviceClass != serviceClass) {
m_serviceClass = serviceClass;
m_wire.reset();
}
return *this;
}
const Data&
Data::setTargetRate(optional<uint64_t> targetRate) const
{
if (m_targetRate != targetRate) {
m_targetRate = targetRate;
m_wire.reset();
}
return *this;
}
Data&
Data::setContentType(uint32_t type)
{
if (type != m_metaInfo.getType()) {
m_metaInfo.setType(type);
resetWire();
}
return *this;
}
Data&
Data::setFreshnessPeriod(time::milliseconds freshnessPeriod)
{
if (freshnessPeriod != m_metaInfo.getFreshnessPeriod()) {
m_metaInfo.setFreshnessPeriod(freshnessPeriod);
resetWire();
}
return *this;
}
Data&
Data::setFinalBlock(optional<name::Component> finalBlockId)
{
if (finalBlockId != m_metaInfo.getFinalBlock()) {
m_metaInfo.setFinalBlock(std::move(finalBlockId));
resetWire();
}
return *this;
}
bool
operator==(const Data& lhs, const Data& rhs)
{
return lhs.getName() == rhs.getName() &&
lhs.getMetaInfo().wireEncode() == rhs.getMetaInfo().wireEncode() &&
lhs.getContent() == rhs.getContent() &&
lhs.getSignatureInfo() == rhs.getSignatureInfo() &&
lhs.getSignatureValue() == rhs.getSignatureValue();
}
std::ostream&
operator<<(std::ostream& os, const Data& data)
{
os << "Name: " << data.getName() << "\n"
<< "MetaInfo: [" << data.getMetaInfo() << "]\n";
if (data.hasContent()) {
os << "Content: [" << data.getContent().value_size() << " bytes]\n";
}
os << "Signature: [type: " << static_cast<tlv::SignatureTypeValue>(data.getSignatureType())
<< ", length: "<< data.getSignatureValue().value_size() << "]\n";
return os;
}
} // namespace ndn
+380
View File
@@ -0,0 +1,380 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/*
* Copyright (c) 2013-2020 Regents of the University of California.
*
* This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
*
* ndn-cxx library is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later version.
*
* ndn-cxx library 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 Lesser General Public License for more details.
*
* You should have received copies of the GNU General Public License and GNU Lesser
* General Public License along with ndn-cxx, e.g., in COPYING.md file. If not, see
* <http://www.gnu.org/licenses/>.
*
* See AUTHORS.md for complete list of ndn-cxx authors and contributors.
*/
#ifndef NDN_CXX_DATA_HPP
#define NDN_CXX_DATA_HPP
#include "ndn-cxx/detail/packet-base.hpp"
#include "ndn-cxx/encoding/block.hpp"
#include "ndn-cxx/meta-info.hpp"
#include "ndn-cxx/name.hpp"
#include "ndn-cxx/security/security-common.hpp"
#include "ndn-cxx/signature-info.hpp"
namespace ndn {
class Signature;
/** @brief Represents a %Data packet.
* @sa https://named-data.net/doc/NDN-packet-spec/0.3/data.html
*/
class Data : public PacketBase, public std::enable_shared_from_this<Data>
{
public:
class Error : public tlv::Error
{
public:
using tlv::Error::Error;
};
/** @brief Construct an unsigned Data packet with given @p name and empty Content.
* @warning In certain contexts that use `Data::shared_from_this()`, Data must be created using
* `std::make_shared`. Otherwise, `shared_from_this()` may trigger undefined behavior.
* One example where this is necessary is storing Data into a subclass of InMemoryStorage.
*/
explicit
Data(const Name& name = Name());
/** @brief Construct a Data packet by decoding from @p wire.
* @param wire TLV block of type tlv::Data; may be signed or unsigned.
* @warning In certain contexts that use `Data::shared_from_this()`, Data must be created using
* `std::make_shared`. Otherwise, `shared_from_this()` may trigger undefined behavior.
* One example where this is necessary is storing Data into a subclass of InMemoryStorage.
*/
explicit
Data(const Block& wire);
/** @brief Prepend wire encoding to @p encoder
* @param encoder EncodingEstimator or EncodingBuffer instance.
* @param wantUnsignedPortionOnly If true, prepend only Name, MetaInfo, Content, and
* SignatureInfo to @p encoder, but omit SignatureValue and the outermost TLV
* Type and Length of the Data element. This is intended to be used with
* wireEncode(EncodingBuffer&, const Block&) const.
* @throw Error %Signature is not present and @p wantUnsignedPortionOnly is false.
*/
template<encoding::Tag TAG>
size_t
wireEncode(EncodingImpl<TAG>& encoder, bool wantUnsignedPortionOnly = false) const;
/** @brief Finalize Data packet encoding with the specified SignatureValue
* @param encoder EncodingBuffer containing Name, MetaInfo, Content, and SignatureInfo, but
* without SignatureValue and the outermost Type-Length of the Data element.
* @param signatureValue SignatureValue element.
*
* This method is intended to be used in concert with `wireEncode(encoder, true)`, e.g.:
* @code
* Data data;
* ...
* EncodingBuffer encoder;
* data.wireEncode(encoder, true);
* ...
* Block signatureValue = <sign_over_unsigned_portion>(encoder.buf(), encoder.size());
* data.wireEncode(encoder, signatureValue)
* @endcode
*/
const Block&
wireEncode(EncodingBuffer& encoder, const Block& signatureValue) const;
/** @brief Encode into a Block.
* @pre Data must be signed.
*/
const Block&
wireEncode() const;
/** @brief Decode from @p wire.
*/
void
wireDecode(const Block& wire);
/** @brief Check if this instance has cached wire encoding.
*/
bool
hasWire() const noexcept
{
return m_wire.hasWire();
}
/** @brief Get full name including implicit digest
* @pre hasWire() == true; i.e. wireEncode() must have been called
* @throw Error Data has no wire encoding
*/
const Name&
getFullName() const;
public: // Data fields
/** @brief Get name
*/
const Name&
getName() const noexcept
{
return m_name;
}
/** @brief Set name
* @return a reference to this Data, to allow chaining
*/
Data&
setName(const Name& name);
/** @brief Get MetaInfo
*/
const MetaInfo&
getMetaInfo() const noexcept
{
return m_metaInfo;
}
/** @brief Set MetaInfo
* @return a reference to this Data, to allow chaining
*/
Data&
setMetaInfo(const MetaInfo& metaInfo);
/**
* @brief Return whether this Data has a Content element
*/
bool
hasContent() const noexcept
{
return m_content.isValid();
}
/**
* @brief Get the Content element
*
* If the element is not present (hasContent() == false), an invalid Block will be returned.
*
* The value of the returned Content Block (if valid) can be accessed through
* Block::value() / Block::value_size() or Block::value_begin() / Block::value_end().
*
* @sa hasContent()
* @sa Block::blockFromValue(), Block::parse()
*/
const Block&
getContent() const noexcept
{
return m_content;
}
/**
* @brief Set Content from a Block
* @param block TLV block to be used as Content; must be valid
* @return a reference to this Data, to allow chaining
*
* If the block's TLV-TYPE is tlv::Content, it will be used directly as this Data's
* Content element. Otherwise, the block will be nested into a Content element.
*/
Data&
setContent(const Block& block);
/**
* @brief Set Content by copying from a raw buffer
* @param value buffer with the TLV-VALUE of the content; may be nullptr if @p length is zero
* @param length size of the buffer
* @return a reference to this Data, to allow chaining
*/
Data&
setContent(const uint8_t* value, size_t length);
/**
* @brief Set Content from a shared buffer
* @param value buffer with the TLV-VALUE of the content; must not be nullptr
* @return a reference to this Data, to allow chaining
*/
Data&
setContent(ConstBufferPtr value);
/**
* @brief Remove the Content element
* @return a reference to this Data, to allow chaining
* @post hasContent() == false
*/
Data&
unsetContent();
/** @brief Get Signature
* @deprecated Use getSignatureInfo and getSignatureValue
*/
[[deprecated("use getSignatureInfo and getSignatureValue")]]
Signature
getSignature() const;
/** @brief Set Signature
* @deprecated Use setSignatureInfo and setSignatureValue
* @return a reference to this Data, to allow chaining
*/
[[deprecated("use setSignatureInfo and setSignatureValue")]]
Data&
setSignature(const Signature& signature);
/** @brief Get SignatureInfo
*/
const SignatureInfo&
getSignatureInfo() const noexcept
{
return m_signatureInfo;
}
/** @brief Set SignatureInfo
*
* This is a low-level function that should not normally be called directly by applications.
* Instead, provide a SignatureInfo to the SigningInfo object passed to KeyChain::sign().
*
* @return a reference to this Data, to allow chaining
* @warning SignatureInfo is overwritten when the packet is signed via KeyChain::sign().
* @sa SigningInfo
*/
Data&
setSignatureInfo(const SignatureInfo& info);
/** @brief Get SignatureValue
*/
const Block&
getSignatureValue() const noexcept
{
return m_signatureValue;
}
/** @brief Set SignatureValue
* @param value buffer containing the TLV-VALUE of the SignatureValue; must not be nullptr
*
* This is a low-level function that should not normally be called directly by applications.
* Instead, use KeyChain::sign() to sign the packet.
*
* @return a reference to this Data, to allow chaining
* @warning SignatureValue is overwritten when the packet is signed via KeyChain::sign().
*/
Data&
setSignatureValue(ConstBufferPtr value);
/** @brief Extract ranges of Data covered by the signature
* @throw Error Data cannot be encoded or is missing ranges necessary for signing
* @warning The returned pointers will be invalidated if wireDecode() or wireEncode() are called.
*/
InputBuffers
extractSignedRanges() const;
optional<uint8_t>
getServiceClass() const noexcept
{
return m_serviceClass;
}
const Data&
setServiceClass(optional<uint8_t> serviceClass) const;
optional<uint64_t>
getTargetRate() const noexcept
{
return m_targetRate;
}
const Data&
setTargetRate(optional<uint64_t> targetRate) const;
public: // MetaInfo fields
uint32_t
getContentType() const
{
return m_metaInfo.getType();
}
Data&
setContentType(uint32_t type);
time::milliseconds
getFreshnessPeriod() const
{
return m_metaInfo.getFreshnessPeriod();
}
Data&
setFreshnessPeriod(time::milliseconds freshnessPeriod);
const optional<name::Component>&
getFinalBlock() const
{
return m_metaInfo.getFinalBlock();
}
Data&
setFinalBlock(optional<name::Component> finalBlockId);
public: // SignatureInfo fields
/** @brief Get SignatureType
* @return tlv::SignatureTypeValue, or -1 to indicate the signature is invalid
*/
int32_t
getSignatureType() const noexcept
{
return m_signatureInfo.getSignatureType();
}
/** @brief Get KeyLocator
*/
optional<KeyLocator>
getKeyLocator() const noexcept
{
return m_signatureInfo.hasKeyLocator() ? make_optional(m_signatureInfo.getKeyLocator()) : nullopt;
}
protected:
/** @brief Clear wire encoding and cached FullName
* @note This does not clear the SignatureValue.
*/
void
resetWire();
private:
Name m_name;
MetaInfo m_metaInfo;
Block m_content;
SignatureInfo m_signatureInfo;
Block m_signatureValue;
// Add for QSCCP
mutable optional<uint8_t> m_serviceClass;
mutable optional<uint64_t> m_targetRate;
mutable Block m_wire;
mutable Name m_fullName; ///< cached FullName computed from m_wire
};
#ifndef DOXYGEN
extern template size_t
Data::wireEncode<encoding::EncoderTag>(EncodingBuffer&, bool) const;
extern template size_t
Data::wireEncode<encoding::EstimatorTag>(EncodingEstimator&, bool) const;
#endif
std::ostream&
operator<<(std::ostream& os, const Data& data);
bool
operator==(const Data& lhs, const Data& rhs);
inline bool
operator!=(const Data& lhs, const Data& rhs)
{
return !(lhs == rhs);
}
} // namespace ndn
#endif // NDN_CXX_DATA_HPP
@@ -1,6 +1,6 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/*
* Copyright (c) 2013-2017 Regents of the University of California.
* Copyright (c) 2013-2019 Regents of the University of California.
*
* This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
*
@@ -19,7 +19,8 @@
* See AUTHORS.md for complete list of ndn-cxx authors and contributors.
*/
#include "delegation-list.hpp"
#include "ndn-cxx/delegation-list.hpp"
#include "ndn-cxx/util/ostream-joiner.hpp"
namespace ndn {
@@ -27,16 +28,6 @@ BOOST_CONCEPT_ASSERT((boost::EqualityComparable<DelegationList>));
BOOST_CONCEPT_ASSERT((WireEncodableWithEncodingBuffer<DelegationList>));
BOOST_CONCEPT_ASSERT((WireDecodable<DelegationList>));
DelegationList::Error::Error(const std::string& what)
: tlv::Error(what)
{
}
DelegationList::Error::Error(const std::string& what, const std::exception& innerException)
: Error(what + std::string(": ") + innerException.what())
{
}
DelegationList::DelegationList()
: m_isSorted(true)
{
@@ -72,12 +63,12 @@ size_t
DelegationList::wireEncode(EncodingImpl<TAG>& encoder, uint32_t type) const
{
if (!isValidTlvType(type)) {
BOOST_THROW_EXCEPTION(std::invalid_argument("Invalid TLV-TYPE " + to_string(type) +
" when encoding DelegationList"));
NDN_THROW(std::invalid_argument("Unexpected TLV-TYPE " + to_string(type) +
" while encoding DelegationList"));
}
if (this->size() == 0) {
BOOST_THROW_EXCEPTION(Error("Empty DelegationList"));
NDN_THROW(Error("Empty DelegationList"));
}
// LinkContent ::= (type) TLV-LENGTH
@@ -114,8 +105,7 @@ void
DelegationList::wireDecode(const Block& block, bool wantSort)
{
if (!isValidTlvType(block.type())) {
BOOST_THROW_EXCEPTION(Error("Unexpected TLV-TYPE " + to_string(block.type()) +
" when decoding DelegationList"));
NDN_THROW(Error("Unexpected TLV-TYPE " + to_string(block.type()) + " while decoding DelegationList"));
}
m_isSorted = wantSort;
@@ -124,40 +114,39 @@ DelegationList::wireDecode(const Block& block, bool wantSort)
block.parse();
for (const auto& del : block.elements()) {
if (del.type() != tlv::LinkDelegation) {
BOOST_THROW_EXCEPTION(Error("Unexpected TLV-TYPE " + to_string(del.type()) +
" when decoding Delegation"));
NDN_THROW(Error("Unexpected TLV-TYPE " + to_string(del.type()) + " while decoding Delegation"));
}
del.parse();
auto val = del.elements_begin();
if (val == del.elements_end() || val->type() != tlv::LinkPreference) {
BOOST_THROW_EXCEPTION(Error("Missing Preference field in Delegation"));
NDN_THROW(Error("Missing Preference field in Delegation"));
}
uint64_t preference = 0;
try {
preference = readNonNegativeInteger(*val);
}
catch (const tlv::Error& inner) {
BOOST_THROW_EXCEPTION(Error("Invalid Preference field in Delegation", inner));
catch (const tlv::Error&) {
NDN_THROW_NESTED(Error("Invalid Preference field in Delegation"));
}
++val;
if (val == del.elements_end() || val->type() != tlv::Name) {
BOOST_THROW_EXCEPTION(Error("Missing Name field in Delegation"));
NDN_THROW(Error("Missing Name field in Delegation"));
}
Name name;
try {
name.wireDecode(*val);
}
catch (const tlv::Error& inner) {
BOOST_THROW_EXCEPTION(Error("Invalid Name field in Delegation", inner));
catch (const tlv::Error&) {
NDN_THROW_NESTED(Error("Invalid Name field in Delegation"));
}
this->insertImpl(preference, name);
}
if (this->size() == 0) {
BOOST_THROW_EXCEPTION(Error("Empty DelegationList"));
NDN_THROW(Error("Empty DelegationList"));
}
}
@@ -197,8 +186,8 @@ DelegationList::insert(uint64_t preference, const Name& name,
}
return false;
}
BOOST_ASSERT_MSG(false, "Unknown onConflict");
return false;
NDN_THROW(std::invalid_argument("Unknown InsertConflictResolution"));
}
void
@@ -231,12 +220,6 @@ DelegationList::eraseImpl(optional<uint64_t> preference, const Name& name)
return nErased;
}
bool
operator==(const DelegationList& lhs, const DelegationList& rhs)
{
return lhs.m_dels == rhs.m_dels;
}
std::ostream&
operator<<(std::ostream& os, const DelegationList& dl)
{
@@ -1,6 +1,6 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/*
* Copyright (c) 2013-2017 Regents of the University of California.
* Copyright (c) 2013-2019 Regents of the University of California.
*
* This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
*
@@ -22,7 +22,8 @@
#ifndef NDN_DELEGATION_LIST_HPP
#define NDN_DELEGATION_LIST_HPP
#include "delegation.hpp"
#include "ndn-cxx/delegation.hpp"
#include <initializer_list>
namespace ndn {
@@ -39,10 +40,7 @@ public:
class Error : public tlv::Error
{
public:
explicit
Error(const std::string& what);
Error(const std::string& what, const std::exception& innerException);
using tlv::Error::Error;
};
/** \brief construct an empty DelegationList
@@ -100,7 +98,7 @@ public:
return m_dels.end();
}
bool
NDN_CXX_NODISCARD bool
empty() const noexcept
{
return m_dels.empty();
@@ -217,6 +215,26 @@ private:
size_t
eraseImpl(optional<uint64_t> preference, const Name& name);
private: // non-member operators
// NOTE: the following "hidden friend" operators are available via
// argument-dependent lookup only and must be defined inline.
/** \brief Compare whether two DelegationLists are equal.
* \note Order matters! If two DelegationLists contain the same Delegations but at least one is
* unsorted, they may compare unequal if the Delegations appear in different order.
*/
friend bool
operator==(const DelegationList& lhs, const DelegationList& rhs)
{
return lhs.m_dels == rhs.m_dels;
}
friend bool
operator!=(const DelegationList& lhs, const DelegationList& rhs)
{
return lhs.m_dels != rhs.m_dels;
}
private:
bool m_isSorted;
@@ -228,8 +246,6 @@ private:
* therefore the overhead of moving items during insertion and deletion is small.
*/
std::vector<Delegation> m_dels;
friend bool operator==(const DelegationList&, const DelegationList&);
};
#ifndef DOXYGEN
@@ -240,19 +256,6 @@ extern template size_t
DelegationList::wireEncode<encoding::EstimatorTag>(EncodingEstimator&, uint32_t) const;
#endif
/** \brief compare whether two DelegationLists are equal
* \note Order matters! If two DelegationLists contain the same Delegations but at least one is
* unsorted, they may compare unequal if the Delegations appear in different order.
*/
bool
operator==(const DelegationList& lhs, const DelegationList& rhs);
inline bool
operator!=(const DelegationList& lhs, const DelegationList& rhs)
{
return !(lhs == rhs);
}
std::ostream&
operator<<(std::ostream& os, const DelegationList& dl);
+89
View File
@@ -0,0 +1,89 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/*
* Copyright (c) 2013-2020 Regents of the University of California.
*
* This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
*
* ndn-cxx library is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later version.
*
* ndn-cxx library 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 Lesser General Public License for more details.
*
* You should have received copies of the GNU General Public License and GNU Lesser
* General Public License along with ndn-cxx, e.g., in COPYING.md file. If not, see
* <http://www.gnu.org/licenses/>.
*
* See AUTHORS.md for complete list of ndn-cxx authors and contributors.
*/
#ifndef NDN_DELEGATION_HPP
#define NDN_DELEGATION_HPP
#include "ndn-cxx/name.hpp"
namespace ndn {
/** \brief Represents a %Delegation.
* \sa https://named-data.net/doc/NDN-packet-spec/0.3/link.html
*/
class Delegation
{
private: // non-member operators
// NOTE: the following "hidden friend" operators are available via
// argument-dependent lookup only and must be defined inline.
friend bool
operator==(const Delegation& lhs, const Delegation& rhs)
{
return !(lhs != rhs);
}
friend bool
operator!=(const Delegation& lhs, const Delegation& rhs)
{
return lhs.preference != rhs.preference ||
lhs.name != rhs.name;
}
friend bool
operator<(const Delegation& lhs, const Delegation& rhs)
{
return std::tie(lhs.preference, lhs.name) <
std::tie(rhs.preference, rhs.name);
}
friend bool
operator<=(const Delegation& lhs, const Delegation& rhs)
{
return !(rhs < lhs);
}
friend bool
operator>(const Delegation& lhs, const Delegation& rhs)
{
return rhs < lhs;
}
friend bool
operator>=(const Delegation& lhs, const Delegation& rhs)
{
return !(lhs < rhs);
}
friend std::ostream&
operator<<(std::ostream& os, const Delegation& d)
{
return os << d.name << '(' << d.preference << ')';
}
public:
uint64_t preference;
Name name;
};
} // namespace ndn
#endif // NDN_DELEGATION_HPP
+6
View File
@@ -0,0 +1,6 @@
# Implementation Detail
This folder contains implementation detail of ndn-cxx library.
Declarations contained in these files are not considered public API and they can change without notice.
Headers in this folder are installed to the target system.
+40
View File
@@ -0,0 +1,40 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/*
* Copyright (c) 2013-2018 Regents of the University of California.
*
* This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
*
* ndn-cxx library is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later version.
*
* ndn-cxx library 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 Lesser General Public License for more details.
*
* You should have received copies of the GNU General Public License and GNU Lesser
* General Public License along with ndn-cxx, e.g., in COPYING.md file. If not, see
* <http://www.gnu.org/licenses/>.
*
* See AUTHORS.md for complete list of ndn-cxx authors and contributors.
*/
#ifndef NDN_DETAIL_ASIO_FWD_HPP
#define NDN_DETAIL_ASIO_FWD_HPP
#include <boost/version.hpp>
namespace boost {
namespace asio {
#if BOOST_VERSION >= 106600
class io_context;
using io_service = io_context;
#else
class io_service;
#endif // BOOST_VERSION >= 106600
} // namespace asio
} // namespace boost
#endif // NDN_DETAIL_ASIO_FWD_HPP
+37
View File
@@ -0,0 +1,37 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/*
* Copyright (c) 2013-2019 Regents of the University of California.
*
* This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
*
* ndn-cxx library is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later version.
*
* ndn-cxx library 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 Lesser General Public License for more details.
*
* You should have received copies of the GNU General Public License and GNU Lesser
* General Public License along with ndn-cxx, e.g., in COPYING.md file. If not, see
* <http://www.gnu.org/licenses/>.
*
* See AUTHORS.md for complete list of ndn-cxx authors and contributors.
*/
#include "ndn-cxx/detail/cancel-handle.hpp"
namespace ndn {
namespace detail {
void
CancelHandle::cancel() const
{
if (m_cancel != nullptr) {
m_cancel();
m_cancel = nullptr;
}
}
} // namespace detail
} // namespace ndn
+139
View File
@@ -0,0 +1,139 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/*
* Copyright (c) 2013-2019 Regents of the University of California.
*
* This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
*
* ndn-cxx library is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later version.
*
* ndn-cxx library 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 Lesser General Public License for more details.
*
* You should have received copies of the GNU General Public License and GNU Lesser
* General Public License along with ndn-cxx, e.g., in COPYING.md file. If not, see
* <http://www.gnu.org/licenses/>.
*
* See AUTHORS.md for complete list of ndn-cxx authors and contributors.
*/
#ifndef NDN_DETAIL_CANCEL_HANDLE_HPP
#define NDN_DETAIL_CANCEL_HANDLE_HPP
#include "ndn-cxx/detail/common.hpp"
namespace ndn {
namespace detail {
/** \brief Handle to cancel an operation.
*/
class CancelHandle
{
public:
CancelHandle() noexcept;
explicit
CancelHandle(std::function<void()> cancel) noexcept
: m_cancel(std::move(cancel))
{
}
/** \brief Cancel the operation.
*/
void
cancel() const;
private:
mutable std::function<void()> m_cancel;
};
inline
CancelHandle::CancelHandle() noexcept = default;
/** \brief Cancels an operation automatically upon destruction.
*/
template<typename HandleT>
class ScopedCancelHandle
{
static_assert(std::is_convertible<HandleT*, CancelHandle*>::value,
"HandleT must publicly derive from CancelHandle");
public:
ScopedCancelHandle() noexcept;
/** \brief Implicit constructor from HandleT.
*/
ScopedCancelHandle(HandleT hdl) noexcept
: m_hdl(std::move(hdl))
{
}
/** \brief Copy construction is disallowed.
*/
ScopedCancelHandle(const ScopedCancelHandle&) = delete;
/** \brief Move constructor.
*/
ScopedCancelHandle(ScopedCancelHandle&& other) noexcept
: m_hdl(other.release())
{
}
/** \brief Copy assignment is disallowed.
*/
ScopedCancelHandle&
operator=(const ScopedCancelHandle&) = delete;
/** \brief Move assignment operator.
*/
ScopedCancelHandle&
operator=(ScopedCancelHandle&& other)
{
m_hdl.cancel();
m_hdl = other.release();
return *this;
}
/** \brief Cancel the operation.
*/
~ScopedCancelHandle()
{
m_hdl.cancel();
}
/** \brief Cancel the operation.
*/
void
cancel()
{
release().cancel();
}
/** \brief Release the operation so that it won't be cancelled when this ScopedCancelHandle is
* destructed.
*/
HandleT
release() noexcept
{
return std::exchange(m_hdl, HandleT{});
}
explicit
operator bool() const noexcept
{
return !!m_hdl;
}
private:
HandleT m_hdl;
};
template<typename T>
ScopedCancelHandle<T>::ScopedCancelHandle() noexcept = default;
} // namespace detail
} // namespace ndn
#endif // NDN_DETAIL_CANCEL_HANDLE_HPP
@@ -1,6 +1,6 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/*
* Copyright (c) 2013-2017 Regents of the University of California.
* Copyright (c) 2013-2019 Regents of the University of California.
*
* This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
*
@@ -19,10 +19,10 @@
* See AUTHORS.md for complete list of ndn-cxx authors and contributors.
*/
#ifndef NDN_UTIL_CF_RELEASER_OSX_HPP
#define NDN_UTIL_CF_RELEASER_OSX_HPP
#ifndef NDN_DETAIL_CF_RELEASER_OSX_HPP
#define NDN_DETAIL_CF_RELEASER_OSX_HPP
#include "../common.hpp"
#include "ndn-cxx/detail/common.hpp"
#ifndef NDN_CXX_HAVE_OSX_FRAMEWORKS
#error "This file should not be included ..."
@@ -31,7 +31,7 @@
#include <CoreFoundation/CoreFoundation.h>
namespace ndn {
namespace util {
namespace detail {
/**
* @brief Helper class to wrap CoreFoundation object pointers
@@ -100,18 +100,6 @@ public: // Access
return m_typeRef;
}
bool
operator==(const std::nullptr_t&)
{
return m_typeRef == nullptr;
}
bool
operator!=(const std::nullptr_t&)
{
return m_typeRef != nullptr;
}
public: // Miscellaneous
void
retain(const T& typeRef)
@@ -140,11 +128,24 @@ public: // Miscellaneous
}
}
private: // Comparison with nullptr
friend bool
operator==(const CFReleaser& lhs, std::nullptr_t)
{
return lhs.m_typeRef == nullptr;
}
friend bool
operator!=(const CFReleaser& lhs, std::nullptr_t)
{
return lhs.m_typeRef != nullptr;
}
private:
T m_typeRef;
};
} // namespace util
} // namespace detail
} // namespace ndn
#endif // NDN_UTIL_CF_RELEASER_OSX_HPP
#endif // NDN_DETAIL_CF_RELEASER_OSX_HPP
Loaded 100 of 804 files, more files were not shown because too many files have changed in this diff. Show more