Compare commits

...
320 Commits
Author SHA1 Message Date
SunnyQjm 6ad02f3428 feat: Add qsccp tags 2023-12-03 04:16:14 +00:00
Davide Pesavento 6d4a6536fd ci: add latest tag to docker image
Change-Id: I558a8990d67defa37dffe272305ebf5e62c30532
2023-11-18 17:05:33 -05:00
Varun Patil e58bab2e8a ci: add docker build GitHub Action
Change-Id: Ief65de7193f2aa27127bf8a49d0356f71482b12b
2023-11-18 13:09:13 -08:00
Junxiao Shi 995c411ae4 Add initial Dockerfile
Change-Id: I8d9c5a0169a9550686179a5a6c6bfb3a79f54e36
2023-11-18 16:02:05 -05:00
Davide Pesavento 49e1e87b24 Replace Boost.MPL with Mp11
Change-Id: I9e0f3cd0169a733f602ff5fc1457f63d6499387d
2023-11-11 00:45:23 -05:00
Davide Pesavento 2f46d6543e Avoid deprecated Boost.Asio interfaces
Change-Id: I00d285893ff61619f49dff8a8a55d0d0e2c309a7
2023-11-10 17:40:43 -05:00
Davide Pesavento 550d8c99ab build: require boost >= 1.71.0
Refs: #5276
Change-Id: I0f179707020fc6e0908af8aeb1d535ca3cd81410
2023-11-05 01:30:01 -04:00
Davide Pesavento e1005da0a2 docs: update list of supported platforms
Change-Id: Ic09db6ec9d84417ffc97f84a0e4bbf8dc6365955
2023-10-31 20:35:02 -04:00
Davide Pesavento 6028418380 net: NetworkMonitor: ignore AWDL interfaces on macOS
Refs: #5074
Change-Id: I5a97dfefda2a43c3dd4460e19725480bbf54835c
2023-10-26 23:01:03 -04:00
Davide Pesavento 5686c51b87 build: decouple handling of boost libs not needed by libndn-cxx
Refs: #5210
Change-Id: Ia8e3d80dd92b5e8a7bd7d79ea811332220a883ed
2023-09-07 22:08:46 -04:00
Davide Pesavento c996742bad build: use python f-strings
Change-Id: I17695613bb737ac4ba297468c5859ceb18bfdf96
2023-09-07 22:04:34 -04:00
Davide Pesavento 90d3a96dc2 encoding: simplify readVarNumber()
Change-Id: I53ee1ec43d701a95aa79d8ea9f71dd61dbe74615
2023-08-29 21:05:36 -04:00
Davide Pesavento fffdd62715 Use Boost.Operators in more places
Change-Id: I7024c3e7d4c30c99ec7a895d484f227cb60fb356
2023-08-28 22:50:43 -04:00
Junxiao Shi ce442c4c95 meta-info: prevent FreshnessPeriod overflow
refs #4997

Change-Id: I22ae27257fd79b539a8ac137f8b1871e1b988cf8
2023-08-19 23:56:54 +00:00
Davide Pesavento ee97139dcd build: update waf to version 2.0.26
Change-Id: Ica10b4eb8d8e0fd55739a5c4babc7e197aaac092
2023-08-19 01:52:06 -04:00
Davide Pesavento 03fdfb17a1 build: enable a few more compiler warnings
Refactor default-compiler-flags.py to reduce duplication

Change-Id: I059d4857ea6744ac791592c50d41a6ef8b8d60cc
2023-08-18 18:55:54 -04:00
Davide Pesavento 747cb45c16 util: add deprecated attribute to aliases documented as such
Change-Id: I334f0c3e072f773260d96f9cfe8f6029c256c41a
2023-08-16 14:44:46 -04:00
Davide Pesavento 9404892918 interest: improve code readability
And add more tests for decoding of malformed ForwardingHint

Change-Id: Ie7b043911769a0952300aa412fe7dbb893a464aa
2023-08-11 22:10:08 -04:00
Junxiao Shi 382de67df8 net: make FaceUri usable as container key
refs #4227

Change-Id: I4389fe6691ab2499c73e6ed83d4090b77fdbafca
2023-08-11 18:17:10 +00:00
Alexander Afanasyev 0af48fb516 interest: Match data to Interest regardless of FreshnessPeriod/MustBeFresh
When Data is received from the wire it should match Interest with
MustBeFresh even if the Data packet doesn't specify FreshnessPeriod.

Refs: #5270
Change-Id: I2ce4d23062f6346ebcd54e2e3e6e5de5a927e516
2023-08-09 12:26:59 -04:00
Davide Pesavento 12b8aaa9f2 build: decrease level of debug information produced by default
Refs: #5279
Change-Id: I5c96d3e58d507c5ab01e0ae79348be15e078ac9a
2023-08-06 19:18:51 -04:00
Junxiao Shi 502c4c3bd6 security: avoid ValidityPeriod under/overflow
refs #5176

Change-Id: I15f2225ea727b205798db29d14ef49a7565eb82e
2023-07-24 11:09:27 +00:00
Varun Patil f81de71486 security: make HMAC compatible with OpenSSL 3
This is a temporary workaround until the internals
can be restructured to use EVP_MAC

Refs: #5251
Change-Id: I28854177a066a753a5cbacad591ee55f5c137622
2023-07-23 14:25:03 -07:00
Davide Pesavento 67bc114aa8 util: generalize and simplify time::{to,from}UnixTimestamp()
Change-Id: I1dc94365944b8efc03f32919d32d5df0a652b672
2023-05-15 21:48:43 -04:00
Davide Pesavento 699cca4ba0 encoding: declare Block operators as hidden friends
Change-Id: Ib6a0792110cb1627e691c66bf83adf27df065c46
2023-05-12 19:50:23 -04:00
Davide Pesavento 296c3a185d interest+data: add string_view overloads for convenience
Also, explicitly declare the nullptr_t overloads as deleted, so that
users get a clear compilation error instead of a potentially confusing
"ambiguous overload" if they try to pass nullptr to these functions.

Change-Id: I399efcbd698a0d3f7e29219d21eb1a53a1d71070
2023-05-10 22:56:48 -04:00
Davide Pesavento 47ce2eed3a Refactor and modernize namespace declarations
* Completely remove inline namespace v2
 * Flatten some unnecessarily deep namespace nesting
 * Move DummyClientFace, Segmenter, SegmentFetcher to namespace ndn
 * Move all unit tests to namespace ndn::tests

Change-Id: I8bcfcf9fd669936a3277d2d5d505f765b4b05742
2023-05-10 02:37:06 -04:00
Davide Pesavento 21b7f1b379 encoding+lp+net: simplify with if constexpr
Change-Id: Ie2b45a502c59e5cb7181628e691f7aaaf7509d84
2023-04-28 23:21:02 -04:00
Davide Pesavento 581dd52b0d lp: consistently use uint32_t for TLV types
Change-Id: I880043b634476eaaafa35b49f6b3f93210ae5ecf
2023-04-24 02:10:52 -04:00
Davide Pesavento 152ef44da9 Move BOOST_CONCEPT_ASSERT to unit tests where possible
Change-Id: I0c6ae494eb7be4ab2ff422ba6d866ead9e75f4eb
2023-04-22 02:02:29 -04:00
Davide Pesavento 3fdb02f62e Use std::string_view in several APIs
Change-Id: I2c13b229162b247738cbf46d6bf71fc69d45816f
2023-04-14 04:05:08 -04:00
Davide Pesavento a3651646a9 ndnsec: stop installing deprecated command aliases
Refs: #5163
Change-Id: Ia9f705529061a2ca2cb8bcbd1a9ef1d7a5ffae31
2023-04-10 21:33:54 -04:00
Davide Pesavento 23483c76d5 name: remove deprecated functions
Change-Id: I776c34c5a81ade92354aa8d974f5f380ae2715c4
2023-04-04 14:25:36 -04:00
Davide Pesavento 0910343957 mgmt: simplify StatusDataset implementation
Change-Id: Icf21cfd8bc47333461dadd06c347b723e77f5784
2023-03-27 19:41:15 -04:00
Davide Pesavento 187e9f99b2 Adopt more C++17 features throughout the codebase
Change-Id: I31af421d8a977ba2aae23afcda289ff53230897f
2023-03-23 23:28:27 -04:00
Davide Pesavento eb87c28200 detail: stop importing std::function into ndn namespace
Change-Id: I536774e974627abbf4e8b868ebb948b90ea5d4a6
2023-03-15 21:07:02 -04:00
Davide Pesavento 869d1a3c36 util: remove obsolete backport of std::to_string
Change-Id: Ib2ba051b84032b227ce75f41e242af20b4a43c3c
2023-03-14 23:55:02 -04:00
Davide Pesavento 05ec0be21b Use inline on all namespace-scope constants defined in headers
Change-Id: Ia6e68d3fe572f6c15978c77a646ac599fa47e575
2023-03-14 21:36:01 -04:00
Davide Pesavento f6b458930f util: remove ndn::optional, use std::optional directly
Change-Id: I503e8f250e80e0ff7708070effc2e84e3b38b3b7
2023-03-13 15:12:06 -04:00
Davide Pesavento a2fbc35f12 util: remove ndn::variant, use std::variant directly
Change-Id: I374095f0f391454f3340bbf36785ccbebea2773a
2023-03-12 13:46:02 -04:00
Davide Pesavento fcd3e44028 build: switch to C++17
Change-Id: I92039300ce845de0312dceccb94c128229ed60c4
2023-03-10 18:44:11 -05:00
Davide Pesavento 762548b15e build: drop official support for Ubuntu 18.04 and macOS 10.15
Increase the minimum required version of clang on linux to 7.0 because
older versions fail to compile libstdc++'s implementation of std::variant

Change-Id: Id17d95c2869634622fc8775e085b74801a486e90
2023-03-07 14:40:22 -05:00
Davide Pesavento 02ed332ddd docs: update several URLs to point to docs.named-data.net
Change-Id: If000753573c6a50130dc3101a411b6d482ccf3ed
2023-02-23 19:40:22 -05:00
Davide Pesavento d09d52bdfa tests: fix dangling-reference warning with gcc 13
Change-Id: I73531e291d9b3146f3778c21a262d328d98eb26b
2023-02-15 14:15:06 -05:00
Davide Pesavento ae39daf4de build: switch source archive to xz compression
And a few minor README improvements

Change-Id: I667860f46b19d1ec885fd81910a116581007ac8f
2023-02-14 23:46:46 -05:00
Davide Pesavento a90b2cf762 ci: adopt reusable workflows from named-data/actions
Change-Id: Ib5b73ca2082cec8fc105a875f5c261a979db11c7
2023-02-07 17:56:06 -05:00
Davide Pesavento 535bd33223 util: add missing include for std::set
Change-Id: If18b2f6196e01949b380b41b42ae09e460310ba5
2023-01-10 02:30:12 -05:00
Davide Pesavento 81de5d98e9 Prepare release 0.8.1
Refs: #5250
Change-Id: I99931c1300cd752554aea764e9688d027b5de29e
2022-12-31 01:50:11 -05:00
Davide Pesavento 15fa994bf6 transport: replace a bunch of bools with a proper state machine
Change-Id: I42f74aebfd714cd8b3be7fcb3068228935482366
2022-12-15 04:00:22 -05:00
Davide Pesavento 67090837ab build: update waf to version 2.0.24
Change-Id: Ifaa5d378f09434e2e9ea44ce99e1948e2b9be9f4
2022-12-02 15:32:25 -05:00
Davide Pesavento 90795be569 encoding: remove obsolete TLV-TYPE definitions
Also, consolidate all types in a single enum

Change-Id: I55c9d10de21183e17590bd2f73b51ae8b7c84304
2022-11-30 16:26:52 -05:00
Davide Pesavento 576c21ba33 docs: delete certificate spec
Moved to the NDN-packet-spec repo
https://github.com/named-data/NDN-packet-spec/commit/3a74e134979606af9a2b90b12f141f8794ad96d7

Change-Id: I57aec08aeb553d5eb6c5a7c368ba03b904b1e4ed
2022-11-29 20:00:22 -05:00
Davide Pesavento ffddbbf745 encoding: recognize Ed25519 signature type
Refs: #5209
Change-Id: I96bcc7ac194ed6034a66580b0cdb7e95b3dd0c31
2022-11-21 16:33:47 -05:00
Davide Pesavento 09c064f1c5 Remove a few deprecated functions
Change-Id: I8f48aa0d084ffd1349750dfe04357ce900ab8dd6
2022-11-21 15:00:44 -05:00
Davide Pesavento b5e95f9106 ci: skip headers check in code-coverage jobs
Change-Id: I73f5cc04cc4b8bf69db66e690d9d4117239a0961
2022-11-20 20:16:06 -05:00
Davide Pesavento 83faec7308 ci: add Xcode 14.1
Change-Id: I5e809720778b9386f3bd37f74e3a270be340ea15
2022-11-14 19:44:41 -05:00
Davide Pesavento 017a9c066f util: add Segmenter utility class to segment an object
Refs: #5247
Change-Id: Ib0ebb0b24366b2d3c209e2ebe28ea2c62b42bff1
2022-11-05 00:22:25 -04:00
Davide Pesavento 5c4f376e05 Add more noexcept
Change-Id: Ifcb411b9c7cd562276df615db86c9dac3ede9afb
2022-10-31 14:25:25 -04:00
Davide Pesavento 8fbffe4577 mgmt: use new signed Interest format in nfd::Controller
Refs: #4804
Change-Id: I26640f0a0c5f2bceac431f9c7c3698f3d31d31e3
2022-10-13 18:44:08 -04:00
Davide Pesavento 637ea3b2a9 security: rename NO_SIGNATURE error code to MALFORMED_SIGNATURE
And move the documentation for all validation error codes to doxygen

Change-Id: Ibf4b507e3a544f2978192fbfad20cd7dc486818f
2022-10-05 23:33:35 -04:00
Davide Pesavento 2acce25696 security: various enhancements to Interest and Data validation
* Avoid decoding SignatureInfo multiple times while validating an Interest
 * Fix handling of signed Interests with malformed InterestSignatureInfo
 * Report a NO_SIGNATURE error when SignatureInfo is missing or malformed
 * Fail with POLICY_ERROR in ValidationPolicySimpleHierarchy when the
   signing identity violates the policy
 * Reduce code duplication
 * Expand unit test coverage

Change-Id: I1c9d532b2307d5df8f4bd75152af57a4e10835aa
2022-10-05 21:18:07 -04:00
Davide Pesavento ea5ce49651 build: link with lld if available
Change-Id: Iaf1e7110e629fa1fa16bbd8b8cc1418fafd2408b
2022-10-05 01:46:24 -04:00
Davide Pesavento e16ac8693f encoding: don't call flush() in OBufferStream if already closed
Refs: #5240
Change-Id: I48e2694657971960079c5b07b35102d32c316bc1
2022-10-05 01:44:11 -04:00
Davide Pesavento c860bd1ccb docs: fix capitalization in doxygen comments
Change-Id: Ie61b20a3dbfc847bc14523e507102fe6fe416908
2022-10-05 01:05:26 -04:00
Davide Pesavento 0f56226142 detail: update bundled copies of {optional,scope,span}-lite
optional-lite commit 5e4b7760aac85ea73a5b9b91c726fc36cbd4149b
scope-lite commit 8987f3f94121ce15e19a9b65e0078dc3cd6272d6
span-lite commit 0248244006ad3cf31b2430b6c93bd87277e46c03

Change-Id: Ib7b2570201d56847d92db178071431323bbac467
2022-10-02 16:07:46 -04:00
Davide Pesavento 05b56a8250 docs: restore exception handling in conf.py
Change-Id: Idee4dd5d60c07bdedb9aa262b58ec7424e5dbe60
2022-09-24 21:38:04 -04:00
Davide Pesavento 02bbfa7b0f docs: simplify conf.py and fix compatibility with upcoming Sphinx 6.0
Change-Id: I52415e37bcf237599aa5c4fa66605c34bc015626
2022-09-21 20:53:03 -04:00
Davide Pesavento 87208f964a security: cleanup validation error reporting
Change-Id: I313bedb336ecfb4180ba0f31ad77666544ba1c10
2022-08-31 16:05:03 -04:00
Davide Pesavento a821f59741 ci: refresh GitHub Actions matrix
* Add ubuntu-22.04, remove 18.04
 * Add macos-12, remove 10.15

Change-Id: Iffdf6b6ff25da8f62ca2bede821dcc9969475c7b
2022-08-11 00:21:43 -04:00
Davide Pesavento 73e946e2c8 ci: auto-detect the OS instead of relying on NODE_LABELS
And remove WAF_JOBS: waf already defaults to the number of available
CPUs, which is appropriate in most cases, and we can always use the
built-in JOBS variable to override it where necessary.

Change-Id: Ic5bfc2133b39407db3a075bb406eb288f01e0f2d
2022-08-10 22:45:04 -04:00
Davide Pesavento f662500858 build+ci: support macOS on arm64
Refs: #5135
Change-Id: Ifac57bf18dea805dc9eab06039806858bb3b6f20
2022-08-10 20:40:52 -04:00
Davide Pesavento dc3575fd92 Fix handling of --without-osx-keychain
Refs: #3338
Change-Id: Ib9f7ff94d7436d618c5e9055f59b71f1e41893d5
2022-07-30 21:10:34 -04:00
Davide Pesavento 134ed4832b util: remove unused ndn::any
Change-Id: I2fbd2f8c3f9277405d6cda170af2e739cfd10fa4
2022-07-21 23:16:23 -04:00
Davide Pesavento 2d7c585965 tests: run FaceUri canonization tests sequentially
Many of these tests issue DNS queries and it seems that Boost.Asio
performs only one resolution at a time (on a single io_service).
Therefore, parallelization is pointless and can in fact cause later
queries to spuriously timeout if those scheduled earlier take a long
time to finish.

Change-Id: I07e3dba5662626fd988ff0c7363f043319ee737d
2022-07-19 00:10:02 -04:00
Davide Pesavento fbca611095 ci+docs: support CentOS Stream 9, drop CentOS 8
Refs: #5181
Change-Id: I1d1a0ed02736ef5ec0c28d51f1c4f56f6e00d129
2022-07-04 15:47:32 -04:00
Davide Pesavento 80d671f996 security: dissolve private header security/impl/openssl.hpp
It no longer serves a purpose

Change-Id: Ic145460c139dbda969976644352fed3f44fd32ec
2022-06-13 21:47:23 -04:00
Davide Pesavento 58de07ae20 tools: relax restriction on KeyId component type in ndnsec key-gen
And add a similar check on the IssuerId in cert-gen

Change-Id: I6828287a8c2f97dacba3326f0579afc71d9c69a3
2022-06-13 21:35:22 -04:00
Davide Pesavento 9faf34bdf4 tools: use Unicode characters to draw the tree in ndnsec list
Change-Id: I8d7900f8b04e805504937362a6901234fbb068bd
2022-06-13 18:53:20 -04:00
Davide Pesavento bbe7942288 security: refuse to create RSA keys longer than 16384 bits
RSA keys of this size are too slow to be usable in practice,
and OpenSSL rejects them.

Change-Id: Ia121d7cd0b0cbf4185bd1a317d69644ea1baba69
2022-06-07 18:41:44 -04:00
Davide Pesavento e30389c32a security: various simplifications in KeyChain
* Remove/consolidate redundant sanity checks
 * Use verifySignature() in importSafeBag()
 * Declare a few functions static
 * Expand unit test coverage

Change-Id: Ia676653b660a6e4093b9a60b32d7b7d756c5dd2b
2022-06-07 18:18:05 -04:00
Davide Pesavento 0e768ef03a security: avoid parsing PIB and TPM locators multiple times
Change-Id: I2a8831e03d05b499f1f8939e03ea88cb82005743
2022-05-19 21:03:38 -04:00
Davide Pesavento 8e2a61d357 security: return a span from Certificate::getPublicKey()
Also, tighten the FreshnessPeriod check in the constructor
and expand test coverage of various functions

Change-Id: I70837e20bbea8f1174baf2b252f39894e5346c34
2022-05-19 20:56:07 -04:00
Davide Pesavento 07db0733d9 security: tolerate invalid or unsupported public keys in PIB
Change-Id: I3c1dd9d3fe81d0895e2d1706f0b29a8e61940beb
2022-05-09 19:25:22 -04:00
Davide Pesavento 8618c1e026 security: consolidate creation of identities/keys in the respective containers
Change-Id: I754e5711fd95b97834dd2e9c0ab1830eaff4be35
2022-05-05 20:20:24 -04:00
Davide Pesavento 487e3d3c63 interest+data: add setSignatureValue() overload that takes a span
Change-Id: Ic6a55bf91e0d62760fb75a643cd7dbc1e92c31f2
2022-05-05 19:46:04 -04:00
Davide Pesavento 78ca8aeca0 security: modernize Key and KeyContainer; add logging
Change-Id: Ibbe6a4ea54e2a1cc7ad7a7e00ea88a29ab1f6c3d
2022-05-05 14:55:43 -04:00
Davide Pesavento b99c711a9f security: modernize CertificateContainer; add logging
Change-Id: I127a7eefb794c83787748999f10ffaeb6614f8b7
2022-05-05 14:53:07 -04:00
Davide Pesavento 56cc0d7c06 security: modernize Identity and IdentityContainer; add logging
Change-Id: I1c8645082456de4cc8012ac97a1b95ab1ddbf835
2022-05-05 14:51:48 -04:00
Davide Pesavento 1c62884f6b security: modernize Pib class and PIB backends
Change-Id: I02361ac4f628e2ca8b6f83fd0dfad4cb460cf028
2022-05-05 14:50:02 -04:00
Davide Pesavento 4999b2eddd security: reimplement RSA and EC key generation for OpenSSL 3.0
Also suppress deprecation warnings related to the RAND_METHOD API.

Refs: #5154
Change-Id: I977b902465f4e4cae663c21fbeda5ab808a6e66c
2022-04-28 14:53:28 -04:00
Junxiao Shi 9ee770bdcd security: introduce KeyChain::makeCertificate
KeyChain::makeCertificate() captures a common routine of creating and
signing a certificate. Having it in the library allows deduplicating
similar code elsewhere.

Also add "find by certificate name" tests for CertificateCache and
TrustAnchorContainer.

refs #5112

Change-Id: I954587e1c03d6b372e3b4f04e702339d1ff1533e
2022-04-25 23:33:33 +00:00
Davide Pesavento dd0724bd70 security: improve pretty-printing of certificates
Change-Id: Ib81a39bab35f3537df086d47d185907daaa1f426
2022-04-19 16:43:06 -04:00
Davide Pesavento 5b4b27f3b7 ci: require gcovr 5.1 for code coverage reports
Stop passing `-j`, it wasn't very useful and it's broken in gcovr 5.1

Change-Id: Ia3fbdbc98e345ed2b1aadbb1c826e4633d6aea6a
2022-04-19 16:31:03 -04:00
Davide Pesavento 85bd6998be interest: fix initialization of m_interestLifetime
Reported-by: Tyler Liu <tylerliu@g.ucla.edu>
Change-Id: I4d09dc2e64ee7b4d7274069340d26c188a76d7e7
2022-04-16 18:07:22 -04:00
Junxiao Shi 7d72868a2e security: include certificate name in KeyLocator
refs #5112

Change-Id: I0066b30ea48d8a51c66630aa186a372280eecd7f
2022-04-16 13:44:06 -07:00
Davide Pesavento 2f92b6ea7c name: add append() overload that takes a span
Refs: #5186
Change-Id: I5fa8ac6c5da82424ac0566d0a21f72b75082af2f
2022-04-11 00:45:08 -04:00
Davide Pesavento e727229400 name: make Component(const Block&) constructor explicit
Refs: #5186
Change-Id: I181c6a94f56ccedf2fa74027d9715187642f1f71
2022-04-10 23:09:05 -04:00
Davide Pesavento d6bcdbf67e name: remove deprecated append() overload
Refs: #5186
Change-Id: Id22935ef5aa8e766f0eadf1736ca460fc753c12f
2022-04-09 18:22:04 -04:00
Davide Pesavento 85be940ae9 encoding+security: remove deprecated functions
Replaced by span-based equivalents

Change-Id: Ie723aa8a84b5cd3cd7c58693a684547779560066
2022-04-09 15:35:06 -04:00
Alexander Afanasyev 5b06597e84 example: Squish one deprecation warning
Change-Id: I7aa36ae7b344fb6865c4b111ae69eab4aac4e0ca
2022-03-25 10:12:57 -07:00
Davide Pesavento 21ee89904f name: add isKeyword and appendKeyword convenience methods
Also, deprecate Component::fromImplicitSha256Digest() and
Component::fromParametersSha256Digest() that do not provide
any advantages over the Component constructors.

Change-Id: I4890bb1ecab3dfcd96854f5f3aa4927a2328e5cf
2022-03-08 21:38:20 -05:00
Davide Pesavento 541a822ae6 build: raise minimum build requirements
* Make gcc 7.4 and boost 1.65.1 hard dependencies, both are
   available out-of-the-box on Ubuntu 18.04
 * Require Xcode 10 on macOS but recommend 11.3 or later
 * If using clang on non-Apple platforms, the minimum supported
   version is now 6.0

Change-Id: I79c84a266741c9a66655da4fd467fe0d8218e8f0
2022-03-08 21:09:01 -05:00
Davide Pesavento 258d51a6d8 encoding: make Block convertible to span
Change-Id: Idb501467d1c56b95e7fdb76acda63b919fe98f85
2022-03-08 18:52:34 -05:00
Junxiao Shi 0838f3dacc util: allow customizing FaceId in DummyClientFace
refs #5011

Change-Id: I0551ec55816f11bf3c05972c9a8bd6a3c4133310
2022-03-01 01:55:05 +00:00
Davide Pesavento df8fd8a158 name: convert to span
Change-Id: I805936731948732114762d0d022d1b447622788d
2022-02-23 11:33:32 -05:00
Davide Pesavento 273ea019b6 build: require OpenSSL >= 1.1.1
Change-Id: I17a09ac60b867617af7a49fe19ab6e906dc14f61
2022-02-20 17:50:02 -05:00
Davide Pesavento aee2ada5f0 interest: remove deprecated setDefaultCanBePrefix()
Change-Id: Ifaffb7cc7772a31c3b396c60b816e783d70b7041
2022-02-18 14:43:02 -05:00
Alexander Afanasyev 778ad714f0 Prepare release 0.8.0
Change-Id: I4fd006cc7f8f1a672b6cf0ddd422a4653da6d87f
Refs: #5172
2022-02-15 11:24:18 -05:00
Davide Pesavento fbea4fc83d encoding: convert to span
Change-Id: I8bd73284fbd5acc0ff8ad2626af9b4324e9df7a1
2022-02-10 11:27:03 -05:00
Davide Pesavento a3d809ea54 interest+data: convert to span
Update span-lite to commit 8f7935ff4e502ee023990d356d6578b8293eda74

Change-Id: I511bc3541e8ba683661bc69656e83088dd06e97a
2022-02-08 19:45:36 -05:00
Davide Pesavento 35c6379830 security: convert more functions to span
Update span-lite to commit 2962cb925c2323b936e4d5f366d2cddfb1b8dc68
and enable the initializer_list constructor.

Change-Id: Ie679315fe2dd69a8b9760c3b7dd47e97fcdc04c2
2022-01-24 16:41:48 -05:00
Junxiao Shi 5bd6c643ee tools: remove HTTP download feature in ndnsec cert-install
refs #4506

Change-Id: Ia25547ac056cdcca1f2ca664bdef25a2381d96cd
2022-01-11 10:12:23 -08:00
Junxiao Shi e4603e1028 interest: update ForwardingHint format
Recognize and encode ForwardingHint as a sequence of Names.
The previous format with Delegations is still accepted for decoding, but
Preference field is ignored and no sorting is performed.

Delegation and DelegationList classes have been deleted.

refs #5187

Change-Id: I6f6f94020657b65c3fccb501694416dda24b894b
2022-01-10 18:35:31 -08:00
Davide Pesavento f135f1581b transport: remove unused send() overload
Change-Id: I100c1128c9fde203dd6ce1fa9d28188704bc202f
2022-01-06 20:43:06 -05:00
Davide Pesavento 3826406a1d build: update waf to version 2.0.23
Change-Id: I32c9a20903a148e647006a8d76884dc26a636d0f
2021-12-31 15:23:52 -05:00
Davide Pesavento 221a72dd70 name: deprecate append() overload with confusing semantics
Refs: #5186
Change-Id: Ib334076ef89dc389b56953302a94104f79b717a7
2021-12-31 14:45:54 -05:00
Davide Pesavento 765abc9087 util: backport C++20 std::span and use it in various APIs
Implementation taken from span-lite by Martin Moene,
commit 337af6e23f6d3264136c16565546244da23159ba

Change-Id: Icfd0ba6841cbf6ef7870c31c881df940da9faf7e
2021-12-31 14:45:03 -05:00
Alexander Afanasyev d1b6f95864 examples: Extend example with basic trust schema (validator-config)
Change-Id: Iaf9f4abd57563e52cb167b55ba3b27d8ecc1ecd7
2021-12-24 16:44:03 -05:00
Davide Pesavento 21ce3ad9c2 Add API to get the keyword name component for metadata and prefix announcements
Change-Id: I612afef79814cad8ada502aa820c4b8f2732daea
2021-12-20 19:17:07 -05:00
Davide Pesavento 6700044973 Assorted API documentation improvements
Change-Id: Iee905b6d9b590d66129b8c7272138c9c39cca21f
2021-12-20 19:16:25 -05:00
Davide Pesavento 1bf15aef02 lp: change TLV type of IncomingFaceId field
Refs: #5185
Change-Id: Ie462478f31b215256e98c0b785521ec071db76c7
2021-12-04 22:39:27 -05:00
Davide Pesavento 47a94d10dc encoding: update to revision 3 of the naming conventions
Change-Id: I2e5c84762c148c4cea17db13b8ff92dd65299fce
2021-10-31 16:41:05 -04:00
Davide Pesavento 8c1c5b1849 detail: update bundled copies of {optional,scope}-lite
optional-lite commit 36c5b877b2efa7201c49aef4d6eff5e6d7a59ec0
scope-lite commit 9794ec00059403aef6b5cd7eed008e98ae47a845

Change-Id: Ib1915df07eab35c01433889054650b128ec74c4d
2021-10-22 23:40:24 -04:00
Davide Pesavento 949075ab7b ndnsec: improve error reporting when loading a Certificate or SafeBag fails
Refs: #5164
Change-Id: I6f594a921bb063ad808f311d8ff978bf0f7d528d
2021-10-22 16:23:50 -04:00
Davide Pesavento 682e6b4c02 Fix compilation on Android
Change-Id: I5e3cb8fb49a773425355400db72b4bb76654b5a5
2021-10-22 16:22:27 -04:00
Davide Pesavento 83f8d167ca ci: add macOS 11 Big Sur
Remove all traces of Travis CI

Change-Id: I1839ae96e41678f722cba052a56ae7c54255defd
2021-09-27 02:48:04 -04:00
Davide Pesavento 94dfcf11db tests: disable most HMAC tests with OpenSSL 3.0 until we adapt our code
Refs: #5154
Change-Id: If8ca0f3eed2aa53fb2352ffd8ffa390537a81f1f
2021-09-26 14:18:45 -04:00
Davide Pesavento ea9e43ec19 tests: add testing of PKCS #8 private keys encrypted with AES and 3DES
Disable testing of the existing (DES-encrypted) private keys when building
against OpenSSL 3.0 or later, because those versions dropped support for
the DES algorithm from the default crypto provider.

Refs: #5154
Change-Id: Iee0f09f8591a6f906cea0ac289c9f3b1dec04385
2021-09-20 00:45:03 -04:00
Davide Pesavento 2b47ac0a6f build: fix detection of openssl 3.0
Refs: #5154
Change-Id: I93ccd3d3ac0f9b8940cda76e7a6df02a65999c90
2021-09-08 22:38:08 -04:00
Davide Pesavento 3ffae2600e docs: fix links to source tarballs
Change-Id: Id04ca492c2c91f3c27f5de28c616171f8b0585aa
2021-08-28 19:55:23 -04:00
Davide Pesavento 09d5662f2a ci: use gcovr 5.0 to generate code coverage reports
Add badges to README.md

Change-Id: I7c5b2c6fc39654e4552c3ccfc11f2a2c0cdc4d34
2021-08-26 01:01:34 -04:00
Davide Pesavento 01cea502ca docs: fix linking to ndnsec-* man pages
And various other minor improvements

Change-Id: Idac7629ce2728ddb641bacfc020314ae3d7f00b9
2021-07-31 19:31:28 -04:00
Davide Pesavento b3b9562135 detail: update bundled copies of {any,optional,scope,variant}-lite
any-lite commit 9bf947336e8b7c25d897e6d4b9dd5b4a68767240
optional-lite commit 0854335c64461d07d00f85b068075ed8871859ec
scope-lite commit 9281968974c68ae1e07f3cac4837393449e42177
variant-lite commit 9499655b9c263eaef735efeeb53892c770d447e1

Change-Id: I7c72dac65a0850b9b7f4e6e89150dffb54a3c797
2021-07-31 19:30:06 -04:00
Davide Pesavento 2e481fc28d common: stop importing std::{bind,ref,cref} into namespace ndn
And reduce the usage of std::bind() throughout the codebase.
C++14 lambdas are easier to understand for humans and more
likely to be optimized by the compiler.

Change-Id: Ia59fad34539710f8801c52914896ce426fb7e538
2021-07-31 19:29:06 -04:00
Davide Pesavento 30ed628efa ci: add GitHub Actions
Change-Id: I586ea4dd76e5f4b3a9effc65402b6b4285a30faf
2021-07-30 19:36:53 -04:00
Davide Pesavento 74cb28f6aa util: stop including any/optional/variant from backports.hpp
Give each utility its own public header util/{any,optional,variant}.hpp

Change-Id: I4850e7bbff3ce1aa4fe7bbb64e7262c39af387aa
2021-06-28 19:57:22 -04:00
Davide Pesavento 93101df38f docs+security: clarify the SafeBag format specification
Rename CertificateV2 => Certificate and EncryptedKeyBag => EncryptedKey

Change-Id: I47dca47ddd4542b5548061373e469bb386fa20bf
2021-06-17 20:06:04 -04:00
Davide Pesavento 045664345c util: add time::{to,from}IsoExtendedString()
Also, backport weeks/months/years duration types from C++20

Change-Id: I6d5c831b7aa2ffa3a894a8adaba0e3879d84ef61
2021-06-07 23:37:05 -04:00
Davide Pesavento d8e0cad339 build: build with BOOST_FILESYSTEM_NO_DEPRECATED
Change-Id: I8d49dc03bd052c04c00b71f7ccf02cab79e64b7c
2021-05-27 21:07:50 -04:00
Davide Pesavento 97157b4936 tools: deprecate old ndnsec command aliases
These are: ndnsec-certgen, ndnsec-dump-certificate,
ndnsec-install-cert, ndnsec-keygen, ndnsec-ls-identity

Change-Id: I0fbc65d2a08f8e7812fd7e62cf6618ffe62671de
2021-05-27 21:00:43 -04:00
Davide Pesavento f3089c3522 tools: replace most ndnsec shell wrappers with symlinks
Change-Id: I40488dddaaee13ee4391e906646b9f651b26c2de
2021-05-25 21:28:21 -04:00
Davide Pesavento 3f13f35987 net: add NetworkAddress::isDeprecated() helper function
Change-Id: I869bfc9272744211fff00729c6783874f518a4b5
2021-05-21 20:53:35 -04:00
Davide Pesavento 8eecc7f1ab net: NetworkMonitor: ignore tentative IPv6 addresses
Refs: #5155
Change-Id: I29aeaa13d2aa8bbc0a687dfe3bf07772496dd472
2021-05-18 18:35:24 -04:00
Davide Pesavento 77c5ce85aa security: remove deprecated CommandInterestSigner
Change-Id: I3b59362a4486f49559f834381a2ba63108e4dee3
2021-05-15 15:47:28 -04:00
Davide Pesavento 99431c13b5 common: fix build with Boost 1.76.0
Change-Id: Ie0e6472147242400645c84b125d2ab262f097734
2021-05-09 00:18:33 -04:00
Davide Pesavento e02d2f9f6e encoding: move most of Estimator methods inline and make constexpr
Change-Id: I5b7e1299a52217c824c54dc2eda6ddf3d70367ae
2021-04-30 15:51:35 -04:00
Davide Pesavento 90b6a1b0b5 encoding: simplify Estimator
Change-Id: I29b2b4dd0f6c1dce35c6355905f0dc0bae3790c6
2021-04-30 15:44:25 -04:00
Davide Pesavento a76ea9ac7d encoding: in Block::blockFromValue(), fail early if TLV length is zero
Also add a test for the boost::asio::const_buffer conversion operator

Change-Id: I312e8cba21ee1e6c29f3fb90485fa2932a2e5fb2
2021-04-24 00:10:35 -04:00
Davide Pesavento 5f6865cc73 encoding: prevent dereferencing of past-the-end iterator in Block::value()
If m_buffer is valid but empty, m_valueBegin is equal to m_valueEnd and
thus cannot be dereferenced. This could happen with zero-length TLVs,
e.g., if a Block is constructed with an empty buffer as TLV value.

Change-Id: I254f2d96ba250c38fd832d59e4cd5611beeda6b1
2021-04-23 23:48:56 -04:00
Davide Pesavento dbe645f879 build: make graphviz optional for building documentation
Change-Id: Icff993cccc675c95cd6f671cd217c74d7768fac9
2021-04-16 00:42:52 -04:00
Davide Pesavento cad94b0255 docs: clarify and cleanup the certificate format spec
Also, cleanup references to the legacy signed interest spec

Change-Id: Ib761399b6e44cefea6331e4e128bb2976c2fc11d
2021-04-15 23:25:11 -04:00
Alexander Afanasyev 39535f4493 util: Out-of-the-box support for Android logging
Refs: #4970
Change-Id: I01cbb59faf505046c792393eb2e8df347212abcb
2021-04-07 11:10:23 -04:00
Eric Newberry c25e463e91 name: change default name component encoding convention to typed
refs #5044

Change-Id: I0062b31d25e4362d20e6b0f1fc9167306f346cac
2021-04-04 00:42:19 -07:00
Davide Pesavento 3c34ec1c4c mgmt: refactoring and cleanup in StatusDatasetContext
* remove {get,set}Expiry(): it's not the responsibility
   of StatusDatasetContext to deal with in-memory storage
 * increase the max payload size of each segment to 8k bytes
 * minimize the number of memory allocations
 * really check that the prefix does not end with a segment
   component, as stated in the docs
 * throw std::logic_error instead of std::domain_error
 * improve exception messages
 * cleanup doxygen

Change-Id: Id6990f3dd064cc90a45eab4ec1c52141f5212be5
2021-04-02 21:14:28 -04:00
Davide Pesavento fcf4d5186c security: delete deprecated security/v2 headers
Change-Id: Id56622e3278ed8df58a88f909f3493c01a9b63e9
2021-03-26 15:40:02 -04:00
Davide Pesavento 809f754bf6 security: remove redundant overloads of verifySignature() and verifyDigest()
Change-Id: I5fe14876acea04fe979ffe0872855f1b5bbede24
2021-03-26 04:27:27 -04:00
Davide Pesavento f2cae616fa Drop unnecessary v2 namespace qualifications
Change-Id: I6358bac6860ca8f2e9cdbd00bb2a929e3af5b2da
2021-03-25 02:43:06 -04:00
Davide Pesavento 09904410ca Ensure all include guards start with "NDN_CXX_"
Change-Id: I530e862ef391db8a2f2d3aa6df0fd0e2f64ae5b6
2021-03-24 16:40:53 -04:00
Davide Pesavento fbc2f5273e interest: deprecate setDefaultCanBePrefix()
Change-Id: I26b9101cb7fd28af613e4ab66871f3c6be0412e5
2021-03-22 15:00:25 -04:00
Davide Pesavento 478d338253 interest: flip default value of CanBePrefix to false
Refs: #4582
Change-Id: Ifc703e3c50d91954cd82ade8664e8fe9ec3a8154
2021-03-19 20:57:03 -04:00
Alexander Afanasyev 17d4b93f04 security: Enforce sig-type check in ValidatorConfig
Change-Id: Ia58e19bbe7453095cb83b3b05dee29ae58d64522
Refs: #4524
2021-03-18 19:31:23 -04:00
Justin Labry aef53b6c26 security: Generalize signature verification to allow digest-sha256
This patch effectively enables use of DigestSha256 signatures in
ValidatorConfig.

Change-Id: I233c069935b617efb8a52cc45996f00307c86a2e
2021-03-18 19:29:44 -04:00
Junxiao Shi 58b9e0fdc9 security: ValidatorConfig rule should pass with at least one checker
refs #5145

Change-Id: Id4c70806f2da24453bb7ec50e88475bd742541d6
2021-03-18 15:54:07 -06:00
Junxiao Shi 5dc7560d5d security: accommodate certificate name in ValidatorConfig
refs #5142

Change-Id: Id282b05da8fdbf57c216f6282a5d6ecd24d867fe
2021-02-19 11:33:00 -07:00
Davide Pesavento 861e0944f7 regex: improve error handling in RegexRepeatMatcher
Also expand unit test coverage and clean up the documentation

Change-Id: Ib679f869de352ef36b7ffa7a2db8381eb503e962
2021-02-07 14:54:33 -05:00
Davide Pesavento b08edd8d3e regex: remove unnecessary virtual function
Refs: #5144
Change-Id: Ib587b14acf763ae366e4b8c18938d2c23a196eaf
2021-02-07 02:41:06 -05:00
Davide Pesavento fe24bf8412 net: silence bogus stringop-truncation warning in strncpy
Change-Id: Id7467c201ee0499c4c19087c61511cdde1bc44aa
2020-12-15 20:24:37 -05:00
Davide Pesavento a86300a867 Remove deprecated Signature class and its subclasses
Also remove deprecated methods from Data, KeyChain,
SignatureInfo, and SigningInfo.

Change-Id: Id61c83ee0ac866469c3375191af3c38763392e67
2020-12-15 20:22:34 -05:00
Davide Pesavento 1a4a7bf2a9 tests: use BOOST_TEST_CONTEXT and BOOST_DATA_TEST_CASE where possible
Fix the last two "CanBePrefix unset" warnings in unit tests

Change-Id: Ifd2420ae98e7c4741a1c20e7fa0d52f74d7178c8
2020-12-15 20:08:29 -05:00
Davide Pesavento 0b2aa13fbf docs: clarify/revise a few code style rules
Change-Id: I4aaaa314f310e4d3a345690fc527805e2d9c1416
2020-12-13 20:27:34 -05:00
Davide Pesavento 737103670a tests: rewrite and improve KeyChain signing test case
Added testing of:
 * non-default identity
 * non-default key
 * different types of asymmetric keys
 * SigningInfo(const std::string&) overload

Change-Id: Id16c77250cc25203f4fa49ecdbb9ee7ded218052
2020-12-04 16:10:03 -05:00
Varun Patil 574c3f96f8 validator-config: use cert file name for groupId
refs #5136

Change-Id: I0a737593e11eddcd372c3c6d3cb742dd2a0a9cab
2020-11-27 08:29:34 +05:30
Davide Pesavento 20d264e148 build: upgrade waf to version 2.0.21
Change-Id: I4eadf41fd90368612f520d37db45bdbf005e2a18
2020-11-24 15:14:14 -05:00
Davide Pesavento 4c1ad4ca65 tests: refactor common test infrastructure and fixtures
Change-Id: I597c11130eefa2cc2846ee6655c85dc04f2f22ef
2020-11-24 15:13:13 -05: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
769 changed files with 38786 additions and 39766 deletions

No files matched your search

+17
View File
@@ -0,0 +1,17 @@
name: CI
on:
push:
paths-ignore:
- 'docs/**'
- '*.conf.sample*'
- '*.md'
- '.mailmap'
workflow_dispatch:
permissions: {}
jobs:
Ubuntu:
uses: named-data/actions/.github/workflows/jenkins-script-ubuntu.yml@v1
macOS:
uses: named-data/actions/.github/workflows/jenkins-script-macos.yml@v1
+48
View File
@@ -0,0 +1,48 @@
name: Publish Docker image
on:
push:
branches:
- master
paths-ignore:
- '*.md'
- '.mailmap'
workflow_dispatch:
permissions:
contents: read
packages: write
env:
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}
jobs:
publish:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Login to ${{ env.REGISTRY }}
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Extract metadata
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
flavor: latest=true
- name: Build and push Docker image
uses: docker/build-push-action@v5
with:
context: .
pull: true
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
+21
View File
@@ -0,0 +1,21 @@
name: Docs
on:
push:
workflow_dispatch:
inputs:
skip-deploy:
description: 'Skip deployment?'
required: true
type: boolean
permissions: {}
jobs:
html:
uses: named-data/actions/.github/workflows/docs-html.yml@v1
with:
# Deploy only the master branch and release tags
deploy: ${{ !inputs.skip-deploy && (github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags/ndn-cxx-')) }}
secrets: inherit
man:
uses: named-data/actions/.github/workflows/docs-man.yml@v1
+2 -1
View File
@@ -26,4 +26,5 @@ __pycache__/
*.py[cod]
# Other
/VERSION
/VERSION.info
/examples/example-trust-anchor.cert
+46 -4
View File
@@ -1,10 +1,52 @@
#!/usr/bin/env bash
set -e
set -eo pipefail
DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
case $(uname) in
Linux)
if [[ -e /etc/os-release ]]; then
source /etc/os-release
else
source /usr/lib/os-release
fi
export ID VERSION_ID
export ID_LIKE="${ID} ${ID_LIKE} linux"
export PATH="${HOME}/.local/bin${PATH:+:}${PATH}"
;;
Darwin)
# Emulate a subset of os-release(5)
export ID=macos
export VERSION_ID=$(sw_vers -productVersion)
export PATH="/usr/local/bin${PATH:+:}${PATH}"
if [[ -x /opt/homebrew/bin/brew ]]; then
eval "$(/opt/homebrew/bin/brew shellenv)"
elif [[ -x /usr/local/bin/brew ]]; then
eval "$(/usr/local/bin/brew shellenv)"
fi
;;
esac
for file in "$DIR"/.jenkins.d/*; do
export CACHE_DIR=${CACHE_DIR:-/tmp}
if [[ $JOB_NAME == *"code-coverage" ]]; then
export DISABLE_ASAN=yes
export DISABLE_HEADERS_CHECK=yes
fi
# https://reproducible-builds.org/docs/source-date-epoch/
export SOURCE_DATE_EPOCH=$(git log -1 --format=%ct)
for file in .jenkins.d/*; do
[[ -f $file && -x $file ]] || continue
echo "Run: $file"
if [[ -n $GITHUB_ACTIONS ]]; then
label=$(basename "$file" | sed -E 's/[[:digit:]]+-(.*)\..*/\1/')
echo "::group::${label}"
fi
echo "\$ $file"
"$file"
if [[ -n $GITHUB_ACTIONS ]]; then
echo "::endgroup::"
fi
done
+27 -43
View File
@@ -1,54 +1,38 @@
#!/usr/bin/env bash
set -e
set -eo pipefail
JDIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
source "$JDIR"/util.sh
APT_PKGS=(build-essential pkg-config python3-minimal
libboost-all-dev libssl-dev libsqlite3-dev)
FORMULAE=(boost openssl pkg-config)
PIP_PKGS=()
case $JOB_NAME in
*code-coverage)
APT_PKGS+=(lcov python3-pip)
PIP_PKGS+=('gcovr~=5.2')
;;
*Docs)
APT_PKGS+=(doxygen graphviz python3-pip)
FORMULAE+=(doxygen graphviz)
PIP_PKGS+=(sphinx sphinxcontrib-doxylink)
;;
esac
set -x
if has OSX $NODE_LABELS; then
FORMULAE=(boost pkg-config)
if [[ -n $USE_OPENSSL_1_1 ]]; then
FORMULAE+=(openssl@1.1)
else
FORMULAE+=(openssl)
if [[ $ID == macos ]]; then
if [[ -n $GITHUB_ACTIONS ]]; then
export HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1
fi
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
fi
brew install "${FORMULAE[@]}"
brew cleanup
fi
if has Ubuntu $NODE_LABELS; then
brew install --formula "${FORMULAE[@]}"
elif [[ $ID_LIKE == *debian* ]]; then
sudo apt-get -qq update
sudo apt-get -qy install build-essential pkg-config libboost-all-dev \
libsqlite3-dev libssl-dev
if [[ $JOB_NAME == *"code-coverage" ]]; then
sudo apt-get -qy install gcovr lcov libgd-perl
fi
sudo apt-get -qy install "${APT_PKGS[@]}"
elif [[ $ID_LIKE == *fedora* ]]; then
sudo dnf -y install gcc-c++ libasan lld pkgconf-pkg-config python3 \
boost-devel openssl-devel sqlite-devel
fi
if has CentOS $NODE_LABELS; then
sudo yum -y install yum-utils pkgconfig \
openssl-devel libtranslit-icu \
python-devel sqlite-devel \
devtoolset-7-libasan-devel \
devtoolset-7-liblsan-devel
sudo yum -y groupinstall 'Development Tools'
svn checkout https://github.com/cmscaltech/sandie-ndn/trunk/packaging/RPMS/x86_64
sudo rpm -U --force x86_64/boost-license*
sudo rpm -U --force x86_64/boost-doc-html*
sudo rpm -U --force x86_64/libboost*
sudo rpm -U --force x86_64/boost-devel*
if (( ${#PIP_PKGS[@]} )); then
pip3 install --user --upgrade --upgrade-strategy=eager "${PIP_PKGS[@]}"
fi
+9
View File
@@ -0,0 +1,9 @@
#!/usr/bin/env bash
set -exo pipefail
PROJ=ndn-cxx
sudo rm -f /usr/local/bin/ndnsec*
sudo rm -fr /usr/local/include/"$PROJ"
sudo rm -f /usr/local/lib{,64}/lib"$PROJ"*
sudo rm -f /usr/local/lib{,64}/pkgconfig/{,lib}"$PROJ".pc
+32 -37
View File
@@ -1,54 +1,49 @@
#!/usr/bin/env bash
set -e
set -eo pipefail
JDIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
source "$JDIR"/util.sh
if [[ -z $DISABLE_ASAN ]]; then
ASAN="--with-sanitizer=address"
fi
if [[ $JOB_NAME == *"code-coverage" ]]; then
COVERAGE="--with-coverage"
fi
if [[ $ID == macos && ${VERSION_ID%%.*} -ge 12 ]]; then
KEYCHAIN="--without-osx-keychain"
fi
if [[ -n $DISABLE_PCH ]]; then
PCH="--without-pch"
fi
set -x
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
if [[ $JOB_NAME == *"code-coverage" ]]; then
COVERAGE="--with-coverage"
elif [[ -z $DISABLE_ASAN ]]; then
ASAN="--with-sanitizer=address"
fi
if [[ -n $USE_OPENSSL_1_1 ]] && has OSX $NODE_LABELS; then
OPENSSL="--with-openssl=/usr/local/opt/openssl@1.1"
fi
# Cleanup
sudo_preserve_env 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 $OPENSSL
./waf --color=yes build -j${WAF_JOBS:-1}
# 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
# Cleanup
sudo_preserve_env PATH -- ./waf --color=yes distclean
# Cleanup
./waf --color=yes distclean
# Configure/build static and shared library in optimized mode without tests
./waf --color=yes configure --enable-static --enable-shared $OPENSSL
./waf --color=yes build -j${WAF_JOBS:-1}
# Build static and shared library in release mode without tests
./waf --color=yes configure --enable-static --enable-shared $PCH
./waf --color=yes build
# Cleanup
sudo_preserve_env PATH -- ./waf --color=yes distclean
# Cleanup
./waf --color=yes distclean
fi
# Configure/build shared library in debug mode with tests/examples and without precompiled headers
./waf --color=yes configure --disable-static --enable-shared --debug --with-tests \
--with-examples --without-pch $ASAN $COVERAGE $OPENSSL
./waf --color=yes build -j${WAF_JOBS:-1}
# 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 $KEYCHAIN $PCH
./waf --color=yes build
# (tests will be run against debug version)
# (tests will be run against the debug version)
# Install
sudo_preserve_env PATH -- ./waf --color=yes install
sudo ./waf --color=yes install
if has Linux $NODE_LABELS; then
if [[ $ID_LIKE == *fedora* ]]; then
sudo tee /etc/ld.so.conf.d/ndn.conf >/dev/null <<< /usr/local/lib64
fi
if [[ $ID_LIKE == *linux* ]]; then
sudo ldconfig
fi
+18 -39
View File
@@ -1,47 +1,26 @@
#!/usr/bin/env bash
set -e
set -eo pipefail
JDIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
source "$JDIR"/util.sh
# https://github.com/google/sanitizers/wiki/AddressSanitizerFlags
ASAN_OPTIONS="color=always"
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
# https://www.boost.org/doc/libs/release/libs/test/doc/html/boost_test/runtime_config/summary.html
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
set -x
# Prepare environment
rm -Rf ~/.ndn
if has OSX $NODE_LABELS; then
security unlock-keychain -p named-data
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
}
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+=":strip_path_prefix=${PWD}/"
export ASAN_OPTIONS
export BOOST_TEST_BUILD_INFO=1
export BOOST_TEST_COLOR_OUTPUT=1
rm -rf ~/.ndn
# Run unit tests
./build/unit-tests $(ut_log_args)
./build/unit-tests
+15 -19
View File
@@ -1,36 +1,32 @@
#!/usr/bin/env bash
set -e
JDIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
source "$JDIR"/util.sh
set -x
set -exo pipefail
if [[ $JOB_NAME == *"code-coverage" ]]; then
gcovr --object-directory=build \
--output=build/coverage.xml \
--exclude="$PWD/(examples|tests)" \
--root=. \
--xml
# Generate an XML report (Cobertura format) and a detailed HTML report using gcovr
# Note: trailing slashes are important in the paths below. Do not remove them!
gcovr --object-directory build \
--filter ndn-cxx/ \
--exclude ndn-cxx/detail/nonstd/ \
--exclude-throw-branches \
--exclude-unreachable-branches \
--cobertura build/coverage.xml \
--html-details build/gcovr/ \
--print-summary
# Generate also a detailed HTML output, but using lcov (better results)
# Generate a detailed HTML report using lcov
lcov --quiet \
--capture \
--directory . \
--exclude "$PWD/ndn-cxx/detail/nonstd/*" \
--exclude "$PWD/tests/*" \
--no-external \
--rc lcov_branch_coverage=1 \
--output-file build/coverage-with-tests.info
lcov --quiet \
--remove build/coverage-with-tests.info "$PWD/tests/*" \
--rc lcov_branch_coverage=1 \
--output-file build/coverage.info
genhtml --branch-coverage \
--demangle-cpp \
--frames \
--legend \
--output-directory build/coverage \
--output-directory build/lcov \
--title "ndn-cxx unit tests" \
build/coverage.info
fi
+43
View File
@@ -0,0 +1,43 @@
#!/usr/bin/env bash
set -eo pipefail
# It's intentional not to use `set -x`, because this script explicitly prints useful information
# and should not run in trace mode.
PROJ=ndn-cxx
PCFILE=libndn-cxx
if [[ -n $DISABLE_HEADERS_CHECK ]]; then
echo 'Skipping headers check.'
exit 0
fi
if [[ $ID_LIKE == *fedora* ]]; then
export PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig
fi
CXX=${CXX:-g++}
STD=-std=c++17
CXXFLAGS="-O2 -Wall -Wno-unneeded-internal-declaration -Wno-unused-const-variable $(pkg-config --cflags libndn-cxx $PCFILE)"
INCLUDEDIR="$(pkg-config --variable=includedir $PCFILE)"/$PROJ
echo "Using: $CXX $STD $CXXFLAGS"
NCHECKED=0
NERRORS=0
while IFS= read -r -d '' H; do
echo "Checking header ${H#${INCLUDEDIR}/}"
"$CXX" -xc++ $STD $CXXFLAGS -c -o /dev/null "$H" || : $((NERRORS++))
: $((NCHECKED++))
done < <(find "$INCLUDEDIR" -name '*.hpp' -type f -print0 2>/dev/null)
if [[ $NCHECKED -eq 0 ]]; then
echo "No headers found. Is $PROJ installed?"
exit 1
else
echo "$NCHECKED headers checked."
fi
if [[ $NERRORS -gt 0 ]]; then
echo "$NERRORS headers could not be compiled."
exit 1
fi
@@ -1,34 +0,0 @@
#!/usr/bin/env bash
# It's intentional not to use `set -x`, because this script explicitly prints useful information
# and should not run in trace mode.
# 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.
CXX=${CXX:-g++}
STD=-std=c++14
CXXFLAGS="-O2 -Wall -Wno-unused-const-variable -Wno-unused-local-typedef $(pkg-config --cflags libndn-cxx)"
INCLUDEDIR="$(pkg-config --variable=includedir libndn-cxx)"/ndn-cxx
echo "Using: $CXX $STD $CXXFLAGS"
NCHECKED=0
NERRORS=0
while IFS= read -r -d '' H; do
echo "Verifying standalone header compilation for ${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?'
exit 1
else
echo "$NCHECKED headers checked."
fi
if [[ $NERRORS -gt 0 ]]; then
echo "$NERRORS headers could not be compiled."
exit 1
fi
+25 -22
View File
@@ -1,33 +1,36 @@
CONTINUOUS INTEGRATION SCRIPTS
==============================
# Continuous Integration Scripts
Environment Variables Used in Build Scripts
-------------------------------------------
## Environment Variables
- `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.
- `ID`: lower-case string that identifies the operating system, for example: `ID=ubuntu`,
`ID=centos`. See [os-release(5)] for more information. On macOS, where `os-release` is
not available, we emulate it by setting `ID=macos`.
The list should include at least `[OS_TYPE]`, `[DISTRO_TYPE]`, and `[DISTRO_VERSION]`.
- `ID_LIKE`: space-separated list of operating system identifiers that are closely related
to the running OS. See [os-release(5)] for more information. The listed values are used
by the CI scripts to select the proper behavior for different platforms and OS flavors.
Possible values for Linux:
Examples:
* `[OS_TYPE]`: `Linux`
* `[DISTRO_TYPE]`: `Ubuntu`
* `[DISTRO_VERSION]`: `Ubuntu-16.04`, `Ubuntu-18.04`
- On CentOS, `ID_LIKE="centos rhel fedora linux"`
- On Ubuntu, `ID_LIKE="ubuntu debian linux"`
Possible values for macOS:
- `VERSION_ID`: identifies the operating system version, excluding any release code names.
See [os-release(5)] for more information. Examples: `VERSION_ID=42`, `VERSION_ID=22.04`.
* `[OS_TYPE]`: `OSX`
* `[DISTRO_TYPE]`: `OSX` (can be absent)
* `[DISTRO_VERSION]`: `OSX-10.12`, `OSX-10.13`, `OSX-10.14`
- `JOB_NAME`: defines the type of the current CI job. Depending on the job type, the CI
scripts can perform different tasks.
- `JOB_NAME`: optional variable to define type of the job. Depending on the defined job type,
the build scripts can perform different tasks.
Supported values:
Possible values:
- empty: default build task
- `code-coverage`: debug build with tests and code coverage analysis
- `limited-build`: only a single debug build with tests
* empty: default build process
* `code-coverage` (Ubuntu Linux is assumed): debug build with tests and code coverage analysis
* `limited-build`: only a single debug build with tests
- `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 jobs used by waf, defaults to 1.
- `DISABLE_ASAN`: disable building with AddressSanitizer. This is automatically set for
the `code-coverage` job type.
[os-release(5)]: https://www.freedesktop.org/software/systemd/man/os-release.html
-37
View File
@@ -1,37 +0,0 @@
has() {
local saved_xtrace
[[ $- == *x* ]] && saved_xtrace=-x || saved_xtrace=+x
set +x
local p=$1
shift
local i ret=1
for i in "$@"; do
if [[ "${i}" == "${p}" ]]; then
ret=0
break
fi
done
set ${saved_xtrace}
return ${ret}
}
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[@]}" "$@"
}
+2
View File
@@ -5,3 +5,5 @@
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>
-107
View File
@@ -1,107 +0,0 @@
language: cpp
dist: xenial
sudo: required
env:
global:
- JOB_NAME=limited-build
- WAF_JOBS=2
matrix:
include:
# Linux/gcc
# https://launchpad.net/~ubuntu-toolchain-r/+archive/ubuntu/test/+packages
- os: linux
env: COMPILER=g++-5
- os: linux
env: COMPILER=g++-6
- os: linux
env: COMPILER=g++-7
- os: linux
env: COMPILER=g++-8
# Linux/clang
# https://apt.llvm.org/
- os: linux
env: COMPILER=clang++-3.6
- os: linux
env: COMPILER=clang++-3.7 DISABLE_ASAN=yes
- os: linux
env: COMPILER=clang++-3.8
- os: linux
env: COMPILER=clang++-3.9
- os: linux
env: COMPILER=clang++-4.0
- os: linux
env: COMPILER=clang++-5.0
- os: linux
env: COMPILER=clang++-6.0
- os: linux
env: COMPILER=clang++-7
- os: linux
env: COMPILER=clang++-8
# macOS/clang
# https://docs.travis-ci.com/user/reference/osx/#OS-X-Version
- os: osx
osx_image: xcode7.3
env: OSX_VERSION=10.11
- os: osx
osx_image: xcode8
env: OSX_VERSION=10.11
- os: osx
osx_image: xcode8.3
env: OSX_VERSION=10.12
- os: osx
osx_image: xcode9.2
env: OSX_VERSION=10.12
- os: osx
osx_image: xcode9.4
env: OSX_VERSION=10.13
- os: osx
osx_image: xcode10.1
env: OSX_VERSION=10.13
- os: osx
osx_image: xcode10.1
env: OSX_VERSION=10.13 USE_OPENSSL_1_1=yes
allow_failures:
- env: COMPILER=clang++-3.6
- env: COMPILER=clang++-3.7 DISABLE_ASAN=yes
- env: COMPILER=clang++-8
fast_finish: true
install: |
case ${COMPILER} in
g++-[6789])
travis_retry sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test
travis_retry sudo apt-get -qq update
travis_retry sudo apt-get -qy install "${COMPILER}"
;;
clang++-*)
CLANG_VERSION=${COMPILER/clang++}
if [[ ${CLANG_VERSION} != "-3."* ]]; then
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/xenial/ llvm-toolchain-xenial${CLANG_VERSION/-8} main"
fi
travis_retry sudo apt-get -qq update
travis_retry sudo apt-get -qy install "clang${CLANG_VERSION}"
;;
esac
before_script:
- if [[ ${TRAVIS_OS_NAME} == linux ]]; then export NODE_LABELS="Linux Ubuntu Ubuntu-16.04"; fi
- if [[ ${TRAVIS_OS_NAME} == osx ]]; then export NODE_LABELS="OSX OSX-${OSX_VERSION}"; fi
- if [[ ${TRAVIS_OS_NAME} == osx ]]; then brew update; fi
# workaround for https://github.com/Homebrew/homebrew-core/issues/26358
- if [[ ${OSX_VERSION} == 10.12 ]]; then brew outdated python || brew upgrade python; fi
# workaround for https://github.com/travis-ci/travis-ci/issues/6688
- if [[ ${OSX_VERSION} == 10.12 ]]; then /usr/bin/yes | pip2 uninstall numpy || true; fi
# workaround for https://github.com/travis-ci/travis-ci/issues/8826
- if [[ ${TRAVIS_OS_NAME} == osx ]]; then brew cask uninstall --force oclint || true; fi
- if [[ -n ${COMPILER} ]]; then export CXX=${COMPILER}; fi
- ${CXX:-c++} --version
- python --version
script:
- ./.jenkins
+53 -42
View File
@@ -54,8 +54,9 @@ from waflib import Utils, Logs, Errors
from waflib.Configure import conf
from waflib.TaskGen import feature, after_method
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_LIBS = ['/usr/lib', '/usr/local/lib', '/opt/homebrew/lib', '/opt/local/lib', '/sw/lib', '/lib']
BOOST_INCLUDES = ['/usr/include', '/usr/local/include', '/opt/homebrew/include', '/opt/local/include', '/sw/include']
BOOST_VERSION_FILE = 'boost/version.hpp'
BOOST_VERSION_CODE = '''
#include <iostream>
@@ -90,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";
}
'''
@@ -145,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',
@@ -175,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)
@@ -183,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):
@@ -194,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')
@@ -240,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)
@@ -313,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
@@ -354,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/
@@ -362,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):
@@ -403,21 +408,24 @@ def check_boost(self, *k, **kw):
var = kw.get('uselib_store', 'BOOST')
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())
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.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
@@ -429,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)
@@ -450,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
@@ -480,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:
@@ -491,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')
-30
View File
@@ -1,30 +0,0 @@
# -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
from waflib.Configure import conf
STD_TO_STRING = '''
#include <string>
int
main()
{
std::string s = std::to_string(0);
s = std::to_string(0l);
s = std::to_string(0ll);
s = std::to_string(0u);
s = std::to_string(0ul);
s = std::to_string(0ull);
s = std::to_string(0.0f);
s = std::to_string(0.0);
s = std::to_string(0.0l);
s.clear();
}
'''
@conf
def check_std_to_string(self):
if self.check_cxx(msg='Checking for std::to_string',
fragment=STD_TO_STRING, mandatory=False):
self.define('HAVE_STD_TO_STRING', 1)
def configure(conf):
conf.check_std_to_string()
+25
View File
@@ -0,0 +1,25 @@
# -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
from waflib import Utils
def options(opt):
opt.add_option('--build', default=Utils.unversioned_sys_platform(),
help='Build platform that is doing the actual compilation (e.g., darwin)')
opt.add_option('--host', default=Utils.unversioned_sys_platform(),
help='Host platform on which the compiled binary will run (e.g., android)')
# opt.add_option('--target', default=Utils.unversioned_sys_platform(),
# help='Target platform on which the compiled binary's output will run')
def configure(conf):
conf.env.BUILD = conf.options.build
conf.env.HOST = conf.options.host
# conf.env.TARGET = conf.options.target
conf.start_msg('Build platform')
conf.end_msg(conf.env.BUILD)
conf.start_msg('Host platform')
conf.end_msg(conf.env.HOST)
# conf.start_msg('Target platform')
# conf.end_msg(conf.env.TARGET)
+102 -77
View File
@@ -1,10 +1,13 @@
# -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
import platform
from waflib import Configure, Logs, Utils
def options(opt):
opt.add_option('--debug', '--with-debug', action='store_true', default=False,
help='Compile in debugging mode with minimal optimizations (-O0 or -Og)')
help='Compile in debugging mode with minimal optimizations (-Og)')
def configure(conf):
conf.start_msg('Checking C++ compiler version')
@@ -15,17 +18,27 @@ def configure(conf):
errmsg = ''
warnmsg = ''
if cxx == 'gcc':
if ccver < (5, 3, 0):
if ccver < (7, 4, 0):
errmsg = ('The version of gcc you are using is too old.\n'
'The minimum supported gcc version is 5.3.0.')
'The minimum supported gcc version is 9.3.')
elif ccver < (9, 3, 0):
warnmsg = ('Using a version of gcc older than 9.3 is not '
'officially supported and may result in build failures.')
conf.flags = GccFlags()
elif cxx == 'clang':
if ccver < (3, 6, 0):
if Utils.unversioned_sys_platform() == 'darwin':
if ccver < (10, 0, 0):
errmsg = ('The version of Xcode you are using is too old.\n'
'The minimum supported Xcode version is 12.4.')
elif ccver < (12, 0, 0):
warnmsg = ('Using a version of Xcode older than 12.4 is not '
'officially supported and may result in build failures.')
elif ccver < (7, 0, 0):
errmsg = ('The version of clang you are using is too old.\n'
'The minimum supported clang version is 3.6.0.')
'The minimum supported clang version is 7.0.')
conf.flags = ClangFlags()
else:
warnmsg = 'Note: %s compiler is unsupported' % cxx
warnmsg = f'{cxx} compiler is unsupported'
conf.flags = CompilerFlags()
if errmsg:
@@ -33,11 +46,11 @@ def configure(conf):
conf.fatal(errmsg)
elif warnmsg:
conf.end_msg(ccverstr, color='YELLOW')
Logs.warn(warnmsg)
Logs.warn('WARNING: ' + warnmsg)
else:
conf.end_msg(ccverstr)
conf.areCustomCxxflagsPresent = (len(conf.env.CXXFLAGS) > 0)
conf.areCustomCxxflagsPresent = len(conf.env.CXXFLAGS) > 0
# General flags are always applied (e.g., selecting C++ language standard)
generalFlags = conf.flags.getGeneralFlags(conf)
@@ -45,6 +58,7 @@ def configure(conf):
conf.add_supported_linkflags(generalFlags['LINKFLAGS'])
conf.env.DEFINES += generalFlags['DEFINES']
@Configure.conf
def check_compiler_flags(conf):
# Debug or optimized CXXFLAGS and LINKFLAGS are applied only if the
@@ -67,10 +81,11 @@ def check_compiler_flags(conf):
conf.env.DEFINES += extraFlags['DEFINES']
@Configure.conf
def add_supported_cxxflags(self, cxxflags):
"""
Check which cxxflags are supported by compiler and add them to env.CXXFLAGS variable
Check which cxxflags are supported by the active compiler and add them to env.CXXFLAGS variable.
"""
if len(cxxflags) == 0:
return
@@ -86,10 +101,11 @@ def add_supported_cxxflags(self, cxxflags):
self.end_msg(' '.join(supportedFlags))
self.env.prepend_value('CXXFLAGS', supportedFlags)
@Configure.conf
def add_supported_linkflags(self, linkflags):
"""
Check which linkflags are supported by compiler and add them to env.LINKFLAGS variable
Check which linkflags are supported by the active compiler and add them to env.LINKFLAGS variable.
"""
if len(linkflags) == 0:
return
@@ -106,13 +122,17 @@ def add_supported_linkflags(self, linkflags):
self.env.prepend_value('LINKFLAGS', supportedFlags)
class CompilerFlags(object):
class CompilerFlags:
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': []}
return {
'CXXFLAGS': [],
'LINKFLAGS': [],
'DEFINES': ['BOOST_ASIO_NO_DEPRECATED', 'BOOST_FILESYSTEM_NO_DEPRECATED'],
}
def getDebugFlags(self, conf):
"""Get dict of CXXFLAGS, LINKFLAGS, and DEFINES that are needed only in debug mode"""
@@ -122,95 +142,100 @@ class CompilerFlags(object):
"""Get dict of CXXFLAGS, LINKFLAGS, and DEFINES that are needed only in optimized mode"""
return {'CXXFLAGS': [], 'LINKFLAGS': [], 'DEFINES': ['NDEBUG']}
class GccBasicFlags(CompilerFlags):
class GccClangCommonFlags(CompilerFlags):
"""
This class defines basic flags that work for both gcc and clang compilers
This class defines common flags that work for both gcc and clang compilers.
"""
def getGeneralFlags(self, conf):
flags = super(GccBasicFlags, self).getGeneralFlags(conf)
flags['CXXFLAGS'] += ['-std=c++14']
if Utils.unversioned_sys_platform() == 'linux':
flags['LINKFLAGS'] += ['-fuse-ld=gold']
elif Utils.unversioned_sys_platform() == 'freebsd':
flags = super().getGeneralFlags(conf)
flags['CXXFLAGS'] += ['-std=c++17']
if Utils.unversioned_sys_platform() != 'darwin':
flags['LINKFLAGS'] += ['-fuse-ld=lld']
return flags
__cxxFlags = [
'-fdiagnostics-color',
'-Wall',
'-Wextra',
'-Wpedantic',
'-Wenum-conversion',
'-Wextra-semi',
'-Wnon-virtual-dtor',
'-Wno-unused-parameter',
]
__linkFlags = ['-Wl,-O1']
def getDebugFlags(self, conf):
flags = super(GccBasicFlags, self).getDebugFlags(conf)
flags['CXXFLAGS'] += ['-O0',
'-Og', # gcc >= 4.8, clang >= 4.0
'-g3',
'-pedantic',
'-Wall',
'-Wextra',
'-Werror',
'-Wnon-virtual-dtor',
'-Wno-error=deprecated-declarations', # Bug #3795
'-Wno-error=maybe-uninitialized', # Bug #1615
'-Wno-unused-parameter',
]
flags['LINKFLAGS'] += ['-Wl,-O1']
flags = super().getDebugFlags(conf)
flags['CXXFLAGS'] += ['-Og', '-g'] + self.__cxxFlags + [
'-Werror',
'-Wno-error=deprecated-declarations', # Bug #3795
'-Wno-error=maybe-uninitialized', # Bug #1615
]
flags['LINKFLAGS'] += self.__linkFlags
return flags
def getOptimizedFlags(self, conf):
flags = super(GccBasicFlags, self).getOptimizedFlags(conf)
flags['CXXFLAGS'] += ['-O2',
'-g',
'-pedantic',
'-Wall',
'-Wextra',
'-Wnon-virtual-dtor',
'-Wno-unused-parameter',
]
flags['LINKFLAGS'] += ['-Wl,-O1']
flags = super().getOptimizedFlags(conf)
flags['CXXFLAGS'] += ['-O2', '-g1'] + self.__cxxFlags
flags['LINKFLAGS'] += self.__linkFlags
return flags
class GccFlags(GccBasicFlags):
class GccFlags(GccClangCommonFlags):
__cxxFlags = [
'-Wcatch-value=2',
'-Wcomma-subscript', # enabled by default in C++20
'-Wduplicated-branches',
'-Wduplicated-cond',
'-Wlogical-op',
'-Wredundant-tags',
'-Wvolatile', # enabled by default in C++20
]
def getDebugFlags(self, conf):
flags = super(GccFlags, self).getDebugFlags(conf)
flags['CXXFLAGS'] += ['-fdiagnostics-color']
flags = super().getDebugFlags(conf)
flags['CXXFLAGS'] += self.__cxxFlags
if platform.machine() == 'armv7l':
flags['CXXFLAGS'] += ['-Wno-psabi'] # Bug #5106
return flags
def getOptimizedFlags(self, conf):
flags = super(GccFlags, self).getOptimizedFlags(conf)
flags['CXXFLAGS'] += ['-fdiagnostics-color']
flags = super().getOptimizedFlags(conf)
flags['CXXFLAGS'] += self.__cxxFlags
if platform.machine() == 'armv7l':
flags['CXXFLAGS'] += ['-Wno-psabi'] # Bug #5106
return flags
class ClangFlags(GccBasicFlags):
class ClangFlags(GccClangCommonFlags):
def getGeneralFlags(self, conf):
flags = super(ClangFlags, self).getGeneralFlags(conf)
if Utils.unversioned_sys_platform() == 'darwin' and self.getCompilerVersion(conf) >= (9, 0, 0):
flags = super().getGeneralFlags(conf)
if Utils.unversioned_sys_platform() == 'darwin':
# Bug #4296
flags['CXXFLAGS'] += [['-isystem', '/usr/local/include'], # for Homebrew
['-isystem', '/opt/local/include']] # for MacPorts
if Utils.unversioned_sys_platform() == 'freebsd':
flags['CXXFLAGS'] += [['-isystem', '/usr/local/include']] # Bug #4790
brewdir = '/opt/homebrew' if platform.machine() == 'arm64' else '/usr/local'
flags['CXXFLAGS'] += [
['-isystem', f'{brewdir}/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
__cxxFlags = [
'-Wundefined-func-template',
'-Wno-unused-local-typedef', # Bugs #2657 and #3209
]
def getDebugFlags(self, conf):
flags = super(ClangFlags, self).getDebugFlags(conf)
flags['CXXFLAGS'] += ['-fcolor-diagnostics',
'-Wextra-semi',
'-Wundefined-func-template',
'-Wno-unused-local-typedef', # Bugs #2657 and #3209
]
version = self.getCompilerVersion(conf)
if version < (3, 9, 0) or (Utils.unversioned_sys_platform() == 'darwin' and version < (8, 1, 0)):
flags['CXXFLAGS'] += ['-Wno-unknown-pragmas']
if version < (6, 0, 0):
flags['CXXFLAGS'] += ['-Wno-missing-braces'] # Bug #4721
flags = super().getDebugFlags(conf)
flags['CXXFLAGS'] += self.__cxxFlags
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 = self.getCompilerVersion(conf)
if version < (3, 9, 0) or (Utils.unversioned_sys_platform() == 'darwin' and version < (8, 1, 0)):
flags['CXXFLAGS'] += ['-Wno-unknown-pragmas']
if version < (6, 0, 0):
flags['CXXFLAGS'] += ['-Wno-missing-braces'] # Bug #4721
flags = super().getOptimizedFlags(conf)
flags['CXXFLAGS'] += self.__cxxFlags
return flags
+68 -65
View File
@@ -1,10 +1,8 @@
#! /usr/bin/env python
# encoding: utf-8
# Yingdi Yu (UCLA) 2016
'''
When using this tool, the wscript will look like:
"""
When using this tool, the wscript should look like:
def options(opt):
opt.load('openssl')
@@ -15,91 +13,96 @@ When using this tool, the wscript will look like:
def build(bld):
bld(source='main.cpp', target='app', use='OPENSSL')
'''
"""
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']
OPENSSL_DIR_MACOS = ['/usr/local',
'/opt/homebrew/opt/openssl', # Homebrew on arm64
'/usr/local/opt/openssl', # Homebrew on x86_64
'/opt/local'] # MacPorts
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
@conf
def __openssl_find_root_and_version_file(self, *k, **kw):
root = k and k[0] or kw.get('path', self.options.openssl_dir)
file = self.__openssl_get_version_file(root)
if root and file:
def __openssl_find_root_and_version_file(self, root):
if root:
file = self.__openssl_get_version_file(root)
if not file:
self.fatal(f'OpenSSL not found in {root}')
return (root, file)
openssl_dir = [];
if Utils.unversioned_sys_platform() == "darwin":
openssl_dir = OPENSSL_DIR_OSX
else:
openssl_dir = OPENSSL_DIR
openssl_dirs = OPENSSL_DIR
if Utils.unversioned_sys_platform() == 'darwin':
openssl_dirs = OPENSSL_DIR_MACOS
if not root:
for dir in openssl_dir:
file = self.__openssl_get_version_file(dir)
if file:
return (dir, file)
for dir in openssl_dirs:
file = self.__openssl_get_version_file(dir)
if file:
return (dir, file)
if root:
self.fatal('OpenSSL not found in %s' % root)
else:
self.fatal('OpenSSL not found, please provide a --with-openssl=PATH argument (see help)')
self.fatal('OpenSSL not found, please provide a --with-openssl=PATH argument (see --help)')
@conf
def __openssl_check_version(self, version_file, atleast_version):
min_version = tuple(int(i) for i in atleast_version.split('.'))
txt = version_file.read()
# OpenSSL 3.0.0 and later
ver_tuple = (re.search(r'^#\s*define\s+OPENSSL_VERSION_MAJOR\s+(\d+)', txt, re.MULTILINE),
re.search(r'^#\s*define\s+OPENSSL_VERSION_MINOR\s+(\d+)', txt, re.MULTILINE),
re.search(r'^#\s*define\s+OPENSSL_VERSION_PATCH\s+(\d+)', txt, re.MULTILINE))
ver_string = re.search(r'^#\s*define\s+OPENSSL_FULL_VERSION_STR\s+"(.+)"', txt, re.MULTILINE)
if all(ver_tuple):
version = tuple(int(i[1]) for i in ver_tuple)
ver_string = ver_string[1] if ver_string else '.'.join(version)
return (version >= min_version, ver_string)
# OpenSSL 1.1.1 and earlier
ver_number = re.search(r'^#\s*define\s+OPENSSL_VERSION_NUMBER\s+(.+)L', txt, re.MULTILINE)
ver_string = re.search(r'^#\s*define\s+OPENSSL_VERSION_TEXT\s+"(.+)"', txt, re.MULTILINE)
if ver_number and ver_string:
version = int(ver_number[1], 16)
min_version = (min_version[0] << 28) | (min_version[1] << 20) | (min_version[2] << 12) | 0xf
return (version >= min_version, ver_string[1])
self.fatal(f'Cannot extract version information from {version_file}')
@conf
def check_openssl(self, *k, **kw):
self.start_msg('Checking for OpenSSL version')
path = k and k[0] or kw.get('path', self.options.openssl_dir)
root, version_file = self.__openssl_find_root_and_version_file(path)
atleast_version = kw.get('atleast_version', 0)
var = kw.get('uselib_store', 'OPENSSL')
ok, version_str = self.__openssl_check_version(version_file, atleast_version)
self.start_msg('Checking for OpenSSL lib')
(root, file) = self.__openssl_find_root_and_version_file(*k, **kw)
self.end_msg(version_str)
if not ok:
self.fatal(f'The version of OpenSSL is too old; {atleast_version} or later is required.\n'
'Please upgrade your distribution or manually install a newer version of OpenSSL.')
try:
txt = file.read()
re_version = re.compile('^#\\s*define\\s+OPENSSL_VERSION_NUMBER\\s+(.*)L', re.M)
version_number = re_version.search(txt)
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'] = f"HAVE_{kw['uselib_store']}"
kw['includes'] = f'{root}/include'
kw['libpath'] = f'{root}/lib'
re_version_text = re.compile('^#\\s*define\\s+OPENSSL_VERSION_TEXT\\s+(.*)', re.M)
version_text = re_version_text.search(txt)
if version_number and version_text:
version = version_number.group(1)
self.end_msg(version_text.group(1))
else:
self.fatal('OpenSSL version file is present, but is not recognizable')
except:
self.fatal('OpenSSL version file is not found or is not usable')
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")
kwargs = {}
if root:
kwargs['includes'] = "%s/include" % root
kwargs['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)
+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',
+57 -39
View File
@@ -1,43 +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 alphabetical 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/main/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://www.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>
* ***(Maintainer)*** 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/>
* Chavoosh Ghasemi <https://www.linkedin.com/in/chavoosh-ghasemi-421327117/>
* Jeff Burke <https://jeff-burke.com>
* Beichuan Zhang <https://cs.arizona.edu/~bzhang>
* Lixia Zhang <https://cs.ucla.edu/~lixia>
+13 -18
View File
@@ -6,35 +6,30 @@ ndn-cxx relies on third-party software, licensed under the following licenses:
- The Boost libraries are licensed under the
[Boost Software License 1.0](https://www.boost.org/users/license.html)
- any-lite by Martin Moene is licensed under the
[Boost Software License 1.0](https://github.com/martinmoene/any-lite/blob/master/LICENSE.txt)
- OpenSSL is licensed under the
[Apache License 2.0](https://www.openssl.org/source/license.html)
- optional-lite by Martin Moene is licensed under the
[Boost Software License 1.0](https://github.com/martinmoene/optional-lite/blob/master/LICENSE.txt)
- scope-lite by Martin Moene is licensed under the
[Boost Software License 1.0](https://github.com/martinmoene/scope-lite/blob/master/LICENSE.txt)
- variant-lite by Martin Moene is licensed under the
[Boost Software License 1.0](https://github.com/martinmoene/variant-lite/blob/master/LICENSE.txt)
- span-lite by Martin Moene is licensed under the
[Boost Software License 1.0](https://github.com/martinmoene/span-lite/blob/master/LICENSE.txt)
- SQLite is in the [public domain](https://www.sqlite.org/copyright.html)
- The waf build system is licensed under the terms of the
[BSD license](https://github.com/named-data/ndn-cxx/blob/master/waf)
The ndn-cxx library also relies on other third-party software with a GPL-incompatible
free software license. The following libraries fall into the category of "System
Libraries" under the GPL license definitions and are used in accordance with the GPL
license exception for "System Libraries":
The ndn-cxx library also relies on several other third-party libraries with non-GPL
compatible license. These library fall into category of "System Libraries" under GPL
license definitions and are used in accordance with GPL license exception for "System
Libraries":
- OpenSSL is licensed under an
[Apache-style license](https://www.openssl.org/source/license.html)
- (macOS platform only) The macOS Security Framework is licensed under the
[Apple Public Source License](https://opensource.apple.com/apsl)
- *(macOS platform only)* The macOS Security Framework is licensed under the
[Apple Public Source License 2.0](https://opensource.apple.com/apsl)
The LGPL and GPL licenses are provided below in this file. For more information
about these licenses, see https://www.gnu.org/licenses/
about these licenses, see <https://www.gnu.org/licenses/>
--------------------------------------------------------------------------------
+26
View File
@@ -0,0 +1,26 @@
FROM gcc:12-bookworm
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
dpkg-dev \
libboost-atomic-dev \
libboost-chrono-dev \
libboost-date-time-dev \
libboost-filesystem-dev \
libboost-iostreams-dev \
libboost-log-dev \
libboost-program-options-dev \
libboost-regex-dev \
libboost-stacktrace-dev \
libboost-system-dev \
pkg-config \
&& rm -rf /var/lib/apt/lists/*
COPY . /ndn-cxx
RUN cd /ndn-cxx \
&& ./waf configure --without-pch --prefix=/usr --sysconfdir=/etc --localstatedir=/var --disable-static --enable-shared \
&& ./waf \
&& ./waf install \
&& cd \
&& rm -rf /ndn-cxx
+11 -18
View File
@@ -1,25 +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/NFD/blob/master/CONTRIBUTING.md).
If you are new to the NDN software community, please read our
[Contributor's Guide](https://github.com/named-data/.github/blob/main/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://docs.named-data.net/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
`.cpp` files:
Contributions to ndn-cxx must be licensed under the LGPL v3 or a compatible license.
If you choose the 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).
*
@@ -36,11 +35,6 @@ you are choosing LGPL 3.0, please use the following license boilerplate in all `
* <http://www.gnu.org/licenses/>.
*
* See AUTHORS.md for complete list of ndn-cxx authors and contributors.
////// [optional part] //////
*
* @author Author's Name <email@domain-or-homepage://url>
* @author Other Author's Name <another.email@domain-or-homepage://url>
////// [end of optional part] //////
*/
If you are affiliated to an NSF-supported NDN project institution, please use the [NDN Team License
@@ -52,7 +46,7 @@ Running unit tests
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 # --debug is also recommended while developing
./waf configure --with-tests # --debug is also strongly recommended while developing
./waf
sudo ./waf install
@@ -63,7 +57,7 @@ The simplest way to run the tests is to launch the compiled binary without any p
./build/unit-tests
[Boost.Test framework](https://www.boost.org/doc/libs/1_58_0/libs/test/doc/html/index.html)
The [Boost.Test framework](https://www.boost.org/doc/libs/1_71_0/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:
@@ -95,9 +89,8 @@ or `-p` to show a 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](https://www.boost.org/doc/libs/1_58_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_71_0/libs/test/doc/html/boost_test/runtime_config.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
+40 -24
View File
@@ -1,35 +1,51 @@
ndn-cxx: NDN C++ library with eXperimental eXtensions
=====================================================
<div align="center">
[![Build Status](https://travis-ci.org/named-data/ndn-cxx.svg?branch=master)](https://travis-ci.org/named-data/ndn-cxx)
[<img alt height="65" src="docs/named_data_theme/static/ndn-logo.svg"/>](https://named-data.net/)
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: NDN C++ library with eXperimental eXtensions
* [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)
</div>
See the file [`docs/INSTALL.rst`](https://github.com/named-data/ndn-cxx/blob/master/docs/INSTALL.rst)
for build and install instructions.
[![CI](https://github.com/named-data/ndn-cxx/actions/workflows/ci.yml/badge.svg)](https://github.com/named-data/ndn-cxx/actions/workflows/ci.yml)
[![Docs](https://github.com/named-data/ndn-cxx/actions/workflows/docs.yml/badge.svg)](https://github.com/named-data/ndn-cxx/actions/workflows/docs.yml)
![Language](https://img.shields.io/badge/C%2B%2B-17-blue)
![Latest version](https://img.shields.io/github/v/tag/named-data/ndn-cxx?label=Latest%20version)
Please submit any bugs or issues to the ndn-cxx issue tracker:
https://redmine.named-data.net/projects/ndn-cxx/issues
**ndn-cxx** is a C++17 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:
## More documentation
* [**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)
* [**ndn-svs** - State Vector Sync library](https://github.com/named-data/ndn-svs)
* [**PSync** - Partial and full Sync library](https://github.com/named-data/PSync)
* [**ChronoSync** - Sync library for distributed real-time applications *(deprecated)*](https://github.com/named-data/ChronoSync)
* [**NAC** - Name-based Access Control library](https://github.com/named-data/name-based-access-control)
* [**NDNCERT** - NDN certificate management protocol](https://github.com/named-data/ndncert)
* [**repo-ng** - NDN repository implementation in C++ *(deprecated)*](https://github.com/named-data/repo-ng)
* [**ndn-traffic-generator** - Simple NDN traffic generator](https://github.com/named-data/ndn-traffic-generator)
Extensive documentation of the library is available on the library's homepage:
http://www.named-data.net/doc/ndn-cxx/
## Documentation
If you are new to the NDN community of software generally, read the
[Contributor's Guide](https://github.com/named-data/NFD/blob/master/CONTRIBUTING.md).
See [`docs/INSTALL.rst`](docs/INSTALL.rst) for compilation and installation instructions.
Extensive documentation is available on the library's [homepage](https://docs.named-data.net/ndn-cxx/).
## Reporting bugs
Please submit any bug reports or feature requests to the
[ndn-cxx issue tracker](https://redmine.named-data.net/projects/ndn-cxx/issues).
## Contributing
Contributions to ndn-cxx are greatly appreciated and can be made through our
[Gerrit code review site](https://gerrit.named-data.net/).
If you are new to the NDN software community, please read our
[Contributor's Guide](https://github.com/named-data/.github/blob/main/CONTRIBUTING.md)
and [`README-dev.md`](README-dev.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 free software distributed under the GNU Lesser General Public License version 3.
See [`COPYING.md`](COPYING.md) for details.
-1
View File
@@ -1 +0,0 @@
docs/release-notes-latest.rst
+4 -1
View File
@@ -6,7 +6,10 @@
; 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, a platform-dependent default will be used.
+179 -142
View File
@@ -1,157 +1,181 @@
.. _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 16.04 (amd64, armhf, i386)
- Ubuntu 18.04 (amd64)
- macOS 10.12
- macOS 10.13
- macOS 10.14
- Ubuntu 20.04 (focal)
- Ubuntu 22.04 (jammy)
- Debian 11 (bullseye)
- Debian 12 (bookworm)
- CentOS Stream 9
- macOS 11 / 12 / 13 / 14
ndn-cxx is known to work on the following platforms, although they are not officially
ndn-cxx should also work on the following platforms, although they are not officially
supported:
- Debian >= 9
- Fedora >= 24
- Gentoo Linux
- Raspbian >= 2017-08-16
- OS X 10.11
- FreeBSD 11.2
- Any other recent version of Ubuntu not listed above
- Fedora >= 33
- Alpine >= 3.12
- Any version of Raspberry Pi OS based on Debian 11 (bullseye) or later
- macOS 10.15
- FreeBSD >= 12.2
Prerequisites
-------------
Required:
~~~~~~~~~
Required
~~~~~~~~
- GCC >= 5.3, or clang >= 3.6
- ``python2`` >= 2.7, or ``python3`` >= 3.4
- Boost libraries >= 1.58
- ``pkg-config``
- SQLite 3.x
- OpenSSL >= 1.0.2
- Apple Security framework (on macOS only)
- GCC >= 9.3 or clang >= 7.0 (if you are on Linux or FreeBSD)
- Xcode >= 12.4 or corresponding version of Command Line Tools (if you are on macOS)
- Python >= 3.8
- pkg-config
- Boost >= 1.71.0
- OpenSSL >= 1.1.1
- 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:
- macOS
- On **Debian** and **Ubuntu**
* Install Xcode from the App Store, or at least the Command Line Tools
(``xcode-select --install``)
In a terminal, enter::
* If using Homebrew (recommended), enter the following in a terminal::
sudo apt install build-essential pkg-config python3-minimal libboost-all-dev libssl-dev libsqlite3-dev
- On **CentOS** and **Fedora**
In a terminal, enter::
sudo dnf install gcc-c++ pkgconf-pkg-config python3 boost-devel openssl-devel sqlite-devel
- On **macOS**
* Install either Xcode (from the App Store) or the Command Line Tools
(with ``xcode-select --install``)
* If using Homebrew (recommended), enter the following in a terminal:
.. code-block:: sh
brew install boost openssl pkg-config
.. note::
.. warning::
If a major OS upgrade is performed after installing the dependencies
with Homebrew, remember to reinstall all packages.
- Ubuntu
- On **FreeBSD**
In a terminal, enter::
sudo apt install build-essential libsqlite3-dev libboost-all-dev libssl-dev
sudo pkg install pkgconf python3 boost-libs openssl sqlite3
- Fedora
Optional
~~~~~~~~
In a terminal, enter::
To build tutorials, man pages, and API documentation the following additional dependencies
need to be installed:
sudo yum install gcc-g++ sqlite-devel boost-devel openssl-devel
- doxygen
- graphviz
- sphinx >= 4.0
- sphinxcontrib-doxylink
- FreeBSD
The following lists the steps to install these prerequisites on various common platforms.
In a terminal, enter::
.. note::
On Linux, you may need to add ``$HOME/.local/bin`` to the ``PATH`` environment variable
for your user, for example:
sudo pkg install python pkgconf sqlite3 boost-libs
.. code-block:: sh
Optional:
~~~~~~~~~
export PATH="${HOME}/.local/bin${PATH:+:}${PATH}"
To build tutorials, manpages, and API documentation the following
dependencies need to be installed:
- On **Debian** and **Ubuntu**:
- ``doxygen``
- ``graphviz``
- ``python-sphinx``
- ``sphinxcontrib-doxylink``
The following lists steps for common platforms to install these prerequisites:
- On macOS with Homebrew and pip::
brew install doxygen graphviz
sudo pip install sphinx sphinxcontrib-doxylink
- On Ubuntu::
.. code-block:: sh
sudo apt install doxygen graphviz python3-pip
pip3 install --user sphinx sphinxcontrib-doxylink
- On **CentOS** and **Fedora**:
.. code-block:: sh
sudo dnf install doxygen graphviz python3-pip
pip3 install --user sphinx sphinxcontrib-doxylink
- On **macOS**:
.. code-block:: sh
brew install doxygen graphviz
sudo pip3 install sphinx sphinxcontrib-doxylink
- On Fedora::
- On **FreeBSD**:
sudo yum install doxygen graphviz python-sphinx
sudo pip install sphinxcontrib-doxylink
.. code-block:: sh
- On FreeBSD::
sudo pkg install doxygen graphviz py27-sphinx
.. _build:
sudo pkg install doxygen graphviz py39-sphinx
Build
-----
.. note::
These are instructions for regular builds of ndn-cxx (release mode).
To do development of ndn-cxx code itself, see "Development build" below.
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, then enter::
To build in a terminal, change directory to the ndn-cxx root, then enter:
.. code-block:: sh
./waf configure
./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::
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
After the shared library is installed, on Linux it is also necessary to run::
On Linux, it is necessary to run the following command after the shared library has
been installed:
.. code-block:: sh
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.
When the library is installed in a non-default location (in general: not in ``/usr/lib``
or ``/usr/local/lib``; on some Linux distros like Fedora and its derivatives, including
CentOS: not in ``/usr/lib``), the following additional actions may be necessary.
The installation path should be added to ``/etc/ld.so.conf`` (or in
``/etc/ld.so.conf.d``) **before** running ``sudo ldconfig``. For example::
The library installation path should be added to ``/etc/ld.so.conf`` or in
``/etc/ld.so.conf.d/*.conf`` **before** running ``ldconfig``. For example:
.. code-block:: sh
echo /usr/local/lib | sudo tee /etc/ld.so.conf.d/ndn-cxx.conf
Alternatively, the ``LD_LIBRARY_PATH`` environment variable can be set to point to
the installation directory of the shared library::
the installation directory of the shared library:
.. code-block:: sh
export LD_LIBRARY_PATH=/usr/local/lib
@@ -161,38 +185,41 @@ The ``./waf install`` command installs the following files:
- ``<LIBPATH>/libndn-cxx.so``, ``<LIBPATH>/libndn-cxx.so.<VERSION>`` (on Linux),
``<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
neccessary flags to build against the library. For example, if
pkg-config 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.
- ``<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``: command-line 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.
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 should 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 built. To enable them, use the
``--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
sudo ./waf install
sudo ldconfig # (on Linux only)
sudo ldconfig # on Linux only
To run examples::
To run the examples:
.. code-block:: sh
# trivial producer app
./build/examples/producer
@@ -203,79 +230,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``:
cp examples/consumer.cpp examples/my-new-consumer-app.cpp
.. code-block:: sh
cp examples/consumer.cpp examples/my-new-app.cpp
... # edit examples/my-new-app.cpp with your preferred editor
./waf
sudo ./waf install
sudo ldconfig # (on Linux only)
./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.
The default build flags can easily be 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
Customizing the compiler
------------------------
Documentation
-------------
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:
ndn-cxx tutorials and API documentation can be built using the following
commands::
.. code-block:: sh
CXX=clang++ ./waf configure
Building the documentation
--------------------------
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`
# 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``, man pages will automatically
be built and installed during the normal build process (i.e., during ``./waf`` and
``./waf install``). By default, man pages 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
-----------------
The following is the suggested configure command for development builds::
The following is the suggested build procedure for development builds:
.. code-block:: sh
./waf configure --debug --with-tests
./waf
sudo ./waf install
sudo ldconfig # (on Linux only)
sudo ldconfig # on Linux only
In the development build most compiler optimizations are disabled by
default and all warnings are treated as errors. The default behavior can
be overridden by setting ``CXXFLAGS`` environment variable before
running ``./waf configure``::
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:
CXXFLAGS="-O1 -g3" ./waf configure --debug --with-tests
...
.. code-block:: sh
Customizing the compiler
------------------------
To choose a custom C++ compiler for building ndn-cxx, set the ``CXX`` environment
variable to point to the compiler binary. For example, to build with clang on
Linux, use the following::
CXX=clang++ ./waf configure
CXXFLAGS="-O1 -g3 -Wall" ./waf configure --debug --with-tests
./waf
-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>`__.
-4
View File
@@ -1,4 +0,0 @@
Release Notes
+++++++++++++
.. include:: release-notes-latest.rst
+105 -101
View File
@@ -3,11 +3,11 @@ ndn-cxx Code Style and Coding Guidelines
Based on
* "C++ Programming Style Guidelines" by Geotechnical Software Services, Copyright © 1996 – 2011.
The original document is available at `<http://geosoft.no/development/cppstyle.html>`_
* "C++ Programming Style Guidelines" by Geotechnical Software Services, Copyright © 1996-2011.
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/>`_
* NDN Platform "C++, C, C#, Java and JavaScript Code Guidelines".
The original document is available at `<https://named-data.net/codebase/platform/documentation/ndn-platform-development-guidelines/cpp-code-guidelines/>`__
1. Code layout
--------------
@@ -31,14 +31,14 @@ extended it to C++.
.. code-block:: c++
a = (b + c) * d; // NOT: a=(b+c)*d
a = (b + c) * d; // NOT: a=(b+c)*d
while (true) { // NOT: while(true)
while (true) { // NOT: while(true)
...
doSomething(a, b, c, d); // NOT: doSomething(a,b,c,d);
doSomething(a, b, c, d); // NOT: doSomething(a,b,c,d);
for (i = 0; i < 10; i++) { // NOT: for(i=0;i<10;i++){
for (i = 0; i < 10; i++) { // NOT: for(i=0;i<10;i++){
...
1.3. Namespaces should have the following form:
@@ -52,11 +52,11 @@ extended it to C++.
} // namespace example
Note that code inside namespace is **not** indented. Avoid the following:
Note that code inside the namespace is **not** indented. Avoid the following:
.. code-block:: c++
// NOT
// WRONG
//
// namespace example {
//
@@ -180,7 +180,7 @@ extended it to C++.
switch (condition) {
case ABC: // 2 space indent
statements; // 4 space indent
NDN_CXX_FALLTHROUGH;
[[fallthrough]];
case DEF:
statements;
@@ -211,7 +211,7 @@ extended it to C++.
// Correct style
case A1: {
statements;
NDN_CXX_FALLTHROUGH;
[[fallthrough]];
}
// Incorrect style: braces should cover the entire case block
@@ -232,7 +232,7 @@ extended it to C++.
switch (condition) {
case ABC: // no indent
statements; // 2 space indent
NDN_CXX_FALLTHROUGH;
[[fallthrough]];
case DEF:
statements;
@@ -243,11 +243,11 @@ extended it to C++.
break;
}
The ``NDN_CXX_FALLTHROUGH;`` annotation must be included whenever there is
a case without a break statement. Leaving the break out is a common error,
The ``[[fallthrough]]`` annotation must be included whenever there is a
case without a break statement. Leaving the break out is a common error,
and it must be made clear that it is intentional when it is not there.
Moreover, modern compilers will warn when a case that falls through is not
explicitly annotated.
Moreover, modern compilers will warn when a case that falls through is
not explicitly annotated.
1.11. A ``try-catch`` statement should have the following form:
@@ -329,19 +329,6 @@ should take the following form:
statements;
}
If the lambda has no parameters, ``()`` should be omitted.
.. code-block:: c++
[&capture1, capture2] {
statements;
}
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++
[&] (T arg) {
statements;
}
@@ -350,8 +337,16 @@ should take the following form:
statements;
}
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.
If the lambda has no parameters, ``()`` should be omitted.
.. code-block:: c++
[&capture1, capture2] {
statements;
}
Trailing return types should be omitted whenever possible. Add it only when the compiler
cannot deduce the return type automatically, or when it improves readability. Note that
``()`` is required by the C++ standard when ``mutable`` or a trailing return type is used.
.. code-block:: c++
@@ -371,7 +366,7 @@ should take the following form:
[&capture1, capture2] (T1 arg1, T2 arg2) { statement; }
No-op can be written in a more compact form:
A no-op lambda can be written in a more compact form:
.. code-block:: c++
@@ -395,26 +390,20 @@ should take the following form:
T({arg1, arg2})
T object = {arg1, arg2};
class Class
{
private:
T m_member = {arg1, arg2};
T m_member{arg1, arg2};
static T s_member = {arg1, arg2};
};
Class::Class()
: m_member{arg1, arg2}
{
}
T object = {arg1, arg2};
An empty braced-init-list is written as ``{}``. For example:
.. code-block:: c++
T object{};
T object = {};
2. Naming Conventions
@@ -490,13 +479,11 @@ written in mixed case starting with lower case.
.. code-block:: c++
namespace model {
namespace analyzer {
namespace model::analyzer {
...
} // namespace analyzer
} // namespace model
} // namespace model::analyzer
2.7. Names representing generic template types should be a single uppercase letter.
@@ -530,8 +517,8 @@ written in mixed case starting with lower case.
In general, the use of global variables should be avoided. Consider using singleton
objects instead.
2.10. Private class variables should have ``m_`` prefix. Static class variables should have
``s_`` prefix.
2.10. All non-static data members of a class should be prefixed with ``m_`` unless they
are public. Similarly, non-public static data members should be prefixed with ``s_``.
.. code-block:: c++
@@ -629,13 +616,13 @@ symmetry.
::
get/set, add/remove, create/destroy, start/stop, insert/delete,
get/set, add/remove, create/destroy, start/stop, insert/erase,
increment/decrement, old/new, begin/end, first/last, up/down, min/max,
next/previous (and commonly used next/prev), open/close, show/hide,
suspend/resume, etc.
Pair ``insert/erase`` should be preferred. ``insert/delete`` can also be used if it
does not conflict with C++ delete keyword.
The pair ``insert/erase`` is preferred. ``insert/delete`` can also be used if it
does not conflict with the ``delete`` keyword of C++.
2.21. Variable names should not include reference to variable type (do not use Hungarian
notation).
@@ -669,9 +656,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++
@@ -686,7 +673,7 @@ notation).
// You can inherit constructors from std::runtime_error like this:
using std::runtime_error::runtime_error;
// Additional constructors, if desired, can be declared like this:
// Additional constructors, if desired, can be declared as usual:
Error(const std::string& what, const std::exception& inner)
: std::runtime_error(what + ": " + inner.what())
{
@@ -758,20 +745,29 @@ For example, the include section of ``ndn-cxx/foo/bar.cpp`` may look like this:
#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.5. Definitions that are local to only one ``.cpp`` file should be declared inside that
file and be placed in an unnamed namespace or declared ``static``.
3.6. Implicit conversion is generally allowed.
Implicit conversion between integer and floating point numbers can cause problems and
should be avoided.
Implicit conversion in single-argument constructor is usually undesirable. Therefore, all
single-argument constructors should be marked 'explicit', unless implicit conversion is
desirable. In that case, a comment should document the reason.
Implicit conversion in constructors that can be called with a single argument is usually
undesirable. Therefore, all single-argument constructors should be marked ``explicit``,
unless implicit conversion is desirable. In that case, a comment should document the
reason for this.
As an exception, copy and move constructors should not be explicit, since they do not
perform type conversion.
Constructors that cannot be called with a single argument may omit ``explicit``.
Constructors that take a single ``std::initializer_list`` parameter should also omit
``explicit``, in order to support copy-initialization.
Avoid C-style casts. Use ``static_cast``, ``dynamic_cast``, ``reinterpret_cast``,
``const_cast`` instead where appropriate. Use ``static_pointer_cast``,
``dynamic_pointer_cast``, ``const_pointer_cast`` when dealing with ``shared_ptr``.
Avoid C-style casts.
Use ``static_cast``, ``dynamic_cast``, ``const_cast``, ``reinterpret_cast``, or
``bit_cast`` instead where appropriate.
Use ``static_pointer_cast``, ``dynamic_pointer_cast``, or ``const_pointer_cast``
when dealing with ``shared_ptr``.
3.7. Variables should be initialized where they are declared.
@@ -793,9 +789,9 @@ For example, the include section of ``ndn-cxx/foo/bar.cpp`` may look like this:
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 POD type). In this case it is appropriate
to make the instance variables public by using ``struct``.
* When the class is essentially a passive data structure with no or minimal behavior
(equivalent to a C struct, also known as POD type). In this case, all fields should
be public and the keyword ``struct`` should be used instead of ``class``.
* When the class is used only inside the compilation unit, e.g., when implementing pImpl
idiom (aka Bridge pattern) or similar cases.
@@ -812,8 +808,11 @@ than to the name.
.. code-block:: c++
if (nLines != 0) // NOT: if (nLines)
if (value != 0.0) // NOT: if (value)
if (nLines != 0) // NOT: if (nLines)
int* ptr = ...
if (ptr) // OK
if (ptr != nullptr) // also OK
3.11. *(removed)*
@@ -837,10 +836,10 @@ than to the name.
// NOT:
for (;;) { // NO!
:
...
}
while (1) { // NO!
:
...
}
3.14. Complex conditional expressions must be avoided. Introduce temporary boolean variables
@@ -1004,10 +1003,10 @@ decimal, and without omitting 0 before the decimal point.
int z = x + y;
BOOST_ASSERT(z - y == x);
The expression passed to ``BOOST_ASSERT`` MUST NOT have side effects,
because it MAY NOT be evaluated in release builds.
The expression passed to ``BOOST_ASSERT`` must not have side effects,
because it may not be evaluated in release builds.
3.28. Use ``static_assert`` for static assertions.
3.28. Use ``static_assert`` for compile-time assertions.
.. code-block:: c++
@@ -1022,43 +1021,32 @@ decimal, and without omitting 0 before the decimal point.
static_assert(std::is_base_of<BaseClass, DerivedClass>::value,
"DerivedClass must inherit from BaseClass");
3.29. ``auto`` type specifier MAY be used for local variables, if a human reader
can easily deduce the actual type.
3.29. The ``auto`` type specifier may be used for local variables if a human reader can
easily deduce the actual type, or if it makes the code safer.
.. code-block:: c++
std::vector<int> intVector;
auto i = intVector.find(4);
auto i = intVector.find(4); // OK
auto stringSet = std::make_shared<std::set<std::string>>();
auto stringSet = std::make_shared<std::set<std::string>>(); // OK
``auto`` SHOULD NOT be used if a human reader cannot easily deduce the actual type.
.. code-block:: c++
auto x = foo(); // BAD if the declaration of foo() isn't nearby
``const auto&`` SHOULD be used to represent constant reference types.
``auto&&`` SHOULD be used to represent mutable reference types.
.. code-block:: c++
std::list<std::string> strings;
for (const auto& str : strings) {
statements; // cannot modify `str`
}
for (auto&& str : strings) {
statements; // can modify `str`
std::vector<std::string> strings;
for (const auto& str : strings) { // OK, iterating over the elements of a container
std::cout << str;
}
obj.onEvent([] (auto&&...) { std::cout << "hi!"; }); // OK, unused lambda parameters
auto x = foo(); // BAD unless foo() is declared nearby or has a well-known prototype
3.30. Use the ``override`` or ``final`` specifier when overriding a virtual
member function or a virtual destructor.
``virtual`` MUST NOT be used along with ``final``, so that the compiler
can generate an error when a final function does not override.
``virtual`` must not be used along with ``final`` so that the compiler can generate
an error when a final function does not override.
``virtual`` SHOULD NOT be used along with ``override``, for consistency
with ``final``.
``virtual`` should not be used along with ``override`` for consistency with ``final``.
.. code-block:: c++
@@ -1084,7 +1072,23 @@ 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 <https://www.boost.org/doc/libs/1_58_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.
The extended diagnostic information contained in the exception can be printed with
``boost::diagnostic_information()``.
.. code-block:: c++
#include <boost/exception/diagnostic_information.hpp>
#include <iostream>
try {
operationThatMayThrow();
}
catch (const std::exception& e) {
std::cerr << boost::diagnostic_information(e);
}
+68 -242
View File
@@ -1,278 +1,104 @@
# -*- 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.
# For the full list of built-in configuration values, see the documentation:
# https://www.sphinx-doc.org/en/master/usage/configuration.html
import importlib.util
import sys
import os
import re
# 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('.'))
# -- Project information -----------------------------------------------------
# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information
# -- General configuration ------------------------------------------------
project = 'ndn-cxx: NDN C++ library with eXperimental eXtensions'
copyright = 'Copyright © 2013-2023 Regents of the University of California.'
author = 'Named Data Networking Project'
# If your documentation needs a minimal Sphinx version, state it here.
#needs_sphinx = '1.0'
# The short X.Y version.
#version = ''
# 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.todo',
'redmine_issue',
]
def addExtensionIfExists(extension):
try:
__import__(extension)
extensions.append(extension)
except ImportError:
sys.stderr.write("Extension '%s' in not available. "
"Some documentation may not build correctly.\n" % extension)
sys.stderr.write("To install, use \n"
" sudo pip install %s\n" % extension.replace('.', '-'))
if sys.version_info[0] >= 3:
addExtensionIfExists('sphinxcontrib.doxylink')
# sphinxcontrib.googleanalytics is currently not working with the latest version of Sphinx
# 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-2018 Regents of the University of California.'
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
#language = None
# 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 = '%B %d, %Y'
# List of patterns, relative to source directory, that match files and
# directories to ignore when looking for source files.
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
today_fmt = '%Y-%m-%d'
# -- Options for HTML output ----------------------------------------------
# -- General configuration ---------------------------------------------------
# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration
needs_sphinx = '4.0'
extensions = [
'sphinx.ext.extlinks',
'sphinx.ext.todo',
]
def addExtensionIfExists(extension: str):
try:
if importlib.util.find_spec(extension) is None:
raise ModuleNotFoundError(extension)
except (ImportError, ValueError):
sys.stderr.write(f'WARNING: Extension {extension!r} not found. '
'Some documentation may not build correctly.\n')
else:
extensions.append(extension)
addExtensionIfExists('sphinxcontrib.doxylink')
templates_path = ['_templates']
exclude_patterns = ['Thumbs.db', '.DS_Store']
# -- Options for HTML output -------------------------------------------------
# https://www.sphinx-doc.org/en/master/usage/configuration.html#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 ---------------------------------------------
latex_elements = {
# The paper size ('letterpaper' or 'a4paper').
#'papersize': 'letterpaper',
# The font size ('10pt', '11pt' or '12pt').
#'pointsize': '10pt',
# Additional stuff for the LaTeX preamble.
#'preamble': '',
}
# 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'),
]
# 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 ------------------------------------------
# https://www.sphinx-doc.org/en/master/usage/configuration.html#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),
('manpages/ndn-client.conf', 'ndn-client.conf', 'Configuration file for NDN platform', None, 5),
('manpages/ndn-log', 'ndn-log', 'ndn-cxx logging', None, 7),
('manpages/ndnsec', 'ndnsec', 'NDN security toolkit', [], 1),
('manpages/ndnsec-cert-dump', 'ndnsec-cert-dump', 'export an NDN certificate', [], 1),
('manpages/ndnsec-cert-gen', 'ndnsec-cert-gen', 'create an NDN certificate for an identity', [], 1),
('manpages/ndnsec-cert-install', 'ndnsec-cert-install', 'import an NDN certificate from a file', [], 1),
('manpages/ndnsec-delete', 'ndnsec-delete', 'delete an NDN identity, key, or certificate', [], 1),
('manpages/ndnsec-export', 'ndnsec-export', 'export an NDN certificate and its private key to a file', [], 1),
('manpages/ndnsec-get-default', 'ndnsec-get-default', 'show the default NDN identity, key, and certificate for the current user', [], 1),
('manpages/ndnsec-import', 'ndnsec-import', 'import an NDN certificate and its private key from a file', [], 1),
('manpages/ndnsec-key-gen', 'ndnsec-key-gen', 'generate an NDN key for an identity', [], 1),
('manpages/ndnsec-list', 'ndnsec-list', 'list all known NDN identities, keys, and certificates', [], 1),
('manpages/ndnsec-set-default', 'ndnsec-set-default', 'change the default NDN identity, key, or certificate for the current user', [], 1),
('manpages/ndnsec-sign-req', 'ndnsec-sign-req', 'generate an NDN certificate signing request', [], 1),
('manpages/ndnsec-unlock-tpm', 'ndnsec-unlock-tpm', 'unlock the TPM', [], 1),
('manpages/ndn-client.conf', 'ndn-client.conf', 'configuration file for NDN applications', [], 5),
('manpages/ndn-log', 'ndn-log', 'ndn-cxx logging', [], 7),
]
# If true, show URL addresses after external links.
man_show_urls = True
# ---- Custom options --------
# -- Misc 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 #%s'),
}
+10 -76
View File
@@ -68,7 +68,7 @@ OUTPUT_DIRECTORY = docs/doxygen
# performance problems for the file system.
# The default value is: NO.
CREATE_SUBDIRS = YES
CREATE_SUBDIRS = NO
# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII
# characters to appear in the names of generated files. If set to NO, non-ASCII
@@ -230,12 +230,6 @@ TAB_SIZE = 4
ALIASES =
# This tag can be used to specify a number of word-keyword mappings (TCL only).
# A mapping has the form "name=value". For example adding "class=itcl::class"
# will allow you to use the command class in the itcl::class meaning.
TCL_SUBST =
# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
# only. Doxygen will then generate output that is more tailored for C. For
# instance, some of the names that are used will be different. The list of all
@@ -443,7 +437,7 @@ EXTRACT_PACKAGE = NO
# included in the documentation.
# The default value is: NO.
EXTRACT_STATIC = YES
EXTRACT_STATIC = NO
# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined
# locally in source files will be included in the documentation. If set to NO,
@@ -780,7 +774,7 @@ WARN_LOGFILE =
# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING
# Note: If this tag is empty the current directory is searched.
INPUT = ndn-cxx
INPUT = ndn-cxx build/ndn-cxx/version.hpp
# 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 +830,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 = */ndn-cxx/impl/* */ndn-cxx/*/impl/*
EXCLUDE_PATTERNS = */ndn-cxx/impl/* */ndn-cxx/*/impl/* */ndn-cxx/detail/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
@@ -1047,13 +1041,6 @@ VERBATIM_HEADERS = YES
ALPHABETICAL_INDEX = YES
# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in
# which the alphabetical index list will be split.
# Minimum value: 1, maximum value: 20, default value: 5.
# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
COLS_IN_ALPHA_INDEX = 5
# In case all classes in a project start with a common prefix, all classes will
# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag
# can be used to specify a prefix (or a list of prefixes) that should be ignored
@@ -1191,7 +1178,7 @@ HTML_COLORSTYLE_GAMMA = 91
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_TIMESTAMP = YES
HTML_TIMESTAMP = NO
# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
# documentation will contain sections that can be hidden and shown after the
@@ -1752,16 +1739,6 @@ LATEX_BATCHMODE = NO
LATEX_HIDE_INDICES = NO
# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source
# code with syntax highlighting in the LaTeX output.
#
# Note that which sources are shown also depends on other settings such as
# SOURCE_BROWSER.
# The default value is: NO.
# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_SOURCE_CODE = NO
# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
# bibliography, e.g. plainnat, or ieeetr. See
# http://en.wikipedia.org/wiki/BibTeX and \cite for more info.
@@ -1834,16 +1811,6 @@ RTF_STYLESHEET_FILE =
RTF_EXTENSIONS_FILE =
# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code
# with syntax highlighting in the RTF output.
#
# Note that which sources are shown also depends on other settings such as
# SOURCE_BROWSER.
# The default value is: NO.
# This tag requires that the tag GENERATE_RTF is set to YES.
RTF_SOURCE_CODE = NO
#---------------------------------------------------------------------------
# Configuration options related to the man page output
#---------------------------------------------------------------------------
@@ -1933,15 +1900,6 @@ GENERATE_DOCBOOK = NO
DOCBOOK_OUTPUT = docbook
# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the
# program listings (including syntax highlighting and cross-referencing
# information) to the DOCBOOK output. Note that enabling this will significantly
# increase the size of the DOCBOOK output.
# The default value is: NO.
# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
DOCBOOK_PROGRAMLISTING = NO
#---------------------------------------------------------------------------
# Configuration options for the AutoGen Definitions output
#---------------------------------------------------------------------------
@@ -2058,10 +2016,10 @@ PREDEFINED = DOXYGEN \
NDN_LOG_MEMBER_DECL_SPECIALIZED(x)= \
NDN_LOG_MEMBER_INIT(x,y)= \
NDN_LOG_MEMBER_INIT_SPECIALIZED(x,y)= \
PUBLIC_WITH_TESTS_ELSE_PROTECTED=protected \
PUBLIC_WITH_TESTS_ELSE_PRIVATE=private \
PROTECTED_WITH_TESTS_ELSE_PRIVATE=private \
VIRTUAL_WITH_TESTS=
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
@@ -2128,34 +2086,10 @@ 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
#---------------------------------------------------------------------------
# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram
# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to
# NO turns the diagrams off. Note that this option also works with HAVE_DOT
# disabled, but it is recommended to install and use dot, since it yields more
# powerful graphs.
# The default value is: YES.
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.
@@ -2176,7 +2110,7 @@ HIDE_UNDOC_RELATIONS = YES
# set to NO
# The default value is: YES.
HAVE_DOT = YES
HAVE_DOT = @HAVE_DOT@
# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed
# to run in parallel. When set to 0 doxygen will base this on the number of
+12 -15
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://docs.named-data.net/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: 43-48,51-54,62,76,82
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: 39-42,55,60-63,78,86,90
Consumer that uses Scheduler
----------------------------
@@ -51,20 +49,19 @@ Consumer that uses Scheduler
The following example demonstrates how to use :ndn-cxx:`Scheduler` to schedule arbitrary
events for execution at specific points of time.
The library internally uses `boost::asio::io_service
<https://www.boost.org/doc/libs/1_58_0/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
The library internally uses `boost::asio::io_context
<https://www.boost.org/doc/libs/1_71_0/doc/html/boost_asio/reference/io_context.html>`__
to implement fully asynchronous NDN operations (i.e., sending and receiving Interests and
Data). In addition to network-related operations, ``boost::asio::io_context`` 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_context::run()`` or implicitly via :ndn-cxx:`Face::processEvents` as in previous
examples). :ndn-cxx:`Scheduler` is just a wrapper on top of ``io_context``, 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: 47-50,53,84,96-99,104-106
+36 -29
View File
@@ -1,20 +1,10 @@
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.
Please submit any bugs or issues to the `ndn-cxx issue tracker
<https://redmine.named-data.net/projects/ndn-cxx/issues>`__.
ndn-cxx Documentation
---------------------
.. toctree::
:hidden:
:maxdepth: 3
README
INSTALL
examples
tutorials
@@ -26,43 +16,60 @@ ndn-cxx Documentation
:maxdepth: 1
code-style
RELEASE_NOTES
release-notes
releases
- :doc:`README`
**ndn-cxx** is a C++17 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>`_
* `ndn-tools - Essential NDN command-line tools <https://github.com/named-data/ndn-tools>`_
* `ndn-svs - State Vector Sync library <https://github.com/named-data/ndn-svs>`_
* `PSync - Partial and full Sync library <https://github.com/named-data/PSync>`_
* `ChronoSync - Sync library for distributed real-time applications (deprecated) <https://github.com/named-data/ChronoSync>`_
* `NAC - Name-based Access Control library <https://github.com/named-data/name-based-access-control>`_
* `NDNCERT - NDN certificate management protocol <https://github.com/named-data/ndncert>`_
* `repo-ng - NDN repository implementation in C++ (deprecated) <https://github.com/named-data/repo-ng>`_
* `ndn-traffic-generator - Simple NDN traffic generator <https://github.com/named-data/ndn-traffic-generator>`_
Documentation
-------------
- :doc:`INSTALL`
- :doc:`examples`
- :doc:`tutorials`
+ `NDN Software Contributor's Guide <https://github.com/named-data/NFD/blob/master/CONTRIBUTING.md>`__ (guide for newcomers to the NDN community of software generally)
+ :doc:`tutorials/utils-ndn-regex`
+ :doc:`tutorials/security-validator-config`
- :doc:`manpages`
- :doc:`release-notes`
- :doc:`releases`
For developers
^^^^^^^^^^^^^^
- `NDN Software Contributor's Guide <https://github.com/named-data/.github/blob/main/CONTRIBUTING.md>`__
(guide for newcomers to the NDN community of software)
- :doc:`specs`
+ :doc:`specs/signed-interest`
+ :doc:`specs/certificate-format`
+ :doc:`specs/safe-bag`
+ :doc:`specs/validation-error-code`
- :doc:`manpages`
**Additional documentation**
- `API documentation (doxygen) <doxygen/annotated.html>`_
+ :doc:`specs/signed-interest`
- `API documentation (doxygen) <doxygen/annotated.html>`__
- :doc:`code-style`
- :doc:`RELEASE_NOTES`
Issues
------
- :doc:`releases`
Please submit any bug reports or feature requests to the
`ndn-cxx issue tracker <https://redmine.named-data.net/projects/ndn-cxx/issues>`__.
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. For more information about
the license, refer to `COPYING.md <https://github.com/named-data/ndn-cxx/blob/master/COPYING.md>`__.
+8 -18
View File
@@ -1,20 +1,10 @@
Manpages
========
Man pages
=========
.. 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>
ndnsec-set-default <manpages/ndnsec-set-default>
ndnsec-key-gen <manpages/ndnsec-key-gen>
ndnsec-sign-req <manpages/ndnsec-sign-req>
ndnsec-cert-gen <manpages/ndnsec-cert-gen>
ndnsec-cert-install <manpages/ndnsec-cert-install>
ndnsec-cert-dump <manpages/ndnsec-cert-dump>
ndnsec-delete <manpages/ndnsec-delete>
ndnsec-export <manpages/ndnsec-export>
ndnsec-import <manpages/ndnsec-import>
ndnsec-unlock-tpm <manpages/ndnsec-unlock-tpm>
:maxdepth: 1
:glob:
:maxdepth: 1
ndn-client.conf <manpages/ndn-client.conf>
ndn-log: ndn-cxx logging <manpages/ndn-log>
manpages/ndnsec*
+25 -20
View File
@@ -1,28 +1,33 @@
client.conf
===========
Description
-----------
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
- ``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
---
Forwarder
---------
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::
This value can be overridden using the ``NDN_CLIENT_TRANSPORT`` environment variable.
@@ -36,17 +41,17 @@ pib
pib=[scheme]:[location]
Possible values for ``[scheme]``:
Possible values for ``[scheme]`` are:
* ``pib-sqlite3``: local PIB implementation with SQLite3 storage engine
* ``pib-sqlite3``: local PIB implementation using the SQLite3 storage engine.
Possible values for ``[location]``:
* absolute path where SQLite3 database will be stored
* relative path (relative to ``config.conf``)
* empty: default path ``$HOME/.ndn`` will be used
* absolute path where the SQLite3 database will be stored
* relative path (relative to ``client.conf``)
* empty: the default path ``$HOME/.ndn`` will be used
When ``[location]`` is empty, trailing ``:`` can be omitted. For example::
When ``[location]`` is empty, the trailing ``:`` can be omitted. For example::
pib=pib-sqlite3
@@ -68,12 +73,12 @@ tpm
tpm=[scheme]:[location]
Possible values for ``[scheme]``:
Possible values for ``[scheme]`` are:
* ``tpm-osx-keychain`` (default on macOS): secure storage of private keys in the macOS
* ``tpm-osxkeychain`` (default on macOS): secure storage of private keys in the macOS
Keychain with OS-provided access restrictions.
``[location]`` parameter is ignored.
The ``[location]`` parameter is ignored.
May not work for daemon applications, as user interaction may be required to access the
macOS Keychain.
@@ -84,10 +89,10 @@ tpm
* absolute path to directory that will store private/public key files (unencrypted with
``0700`` permission)
* relative path (relative to ``config.conf``)
* empty: default path ``$HOME/.ndn/ndnsec-tpm-file`` will be used
* relative path (relative to ``client.conf``)
* empty: the default path ``$HOME/.ndn/ndnsec-tpm-file`` will be used
When ``[location]`` is empty, trailing ``:`` can be omitted. For example::
When ``[location]`` is empty, the trailing ``:`` can be omitted. For example::
tpm=tpm-file
+43 -23
View File
@@ -1,5 +1,8 @@
ndn-log
=======
ndn-cxx logging
===============
Description
-----------
The ndn-cxx logging facility exposes the internal state of NDN libraries and
applications so the user can investigate internal interactions, such as interest
@@ -8,8 +11,8 @@ sync and recovery Interest processing inside ChronoSync, etc. During runtime, th
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
--------------------
Environment
-----------
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
@@ -18,6 +21,11 @@ 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.
@@ -41,11 +49,13 @@ 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>"
**Examples:**
*Example:*
::
.. code-block:: sh
export NDN_LOG="ndn.*=DEBUG"
export NDN_LOG="ndn.UnixTransport=INFO"
@@ -54,30 +64,40 @@ corresponding loglevels as the user desires:
**Note:**
Shorter (general) prefixes should be placed before longer (specific) prefixes.
Otherwise, the specific prefix's loglevel will be overwritten. For example,
`export NDN_LOG="ndn.UnixTransport=TRACE:ndn.*=ERROR:*=INFO"` sets all modules
to INFO; it should be written as
`export NDN_LOG="*=INFO:ndn.*=ERROR:ndn.UnixTransport=TRACE"` for the desired effect.
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:
# Correct
sudo env NDN_LOG=logLevel ./ndn-application
sudo env NDN_LOG=logLevel ./ndn-application
# Also correct
sudo -s
export NDN_LOG=logLevel
./ndn-application
sudo -s
export NDN_LOG=logLevel
./ndn-application
# Incorrect
sudo export NDN_LOG=logLevel
sudo ./ndn-application
Incorrect:
sudo export NDN_LOG=logLevel
sudo ./ndn-application
NDN_LOG=logLevel sudo ./ndn-application
# Incorrect
NDN_LOG=logLevel sudo ./ndn-application
+41 -44
View File
@@ -1,67 +1,64 @@
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 in Base64 encoding.
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:
::
Print the NDN testbed root 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:
/ndn/test/david/KEY/ksk-1396913058196/ID-CERT/%00%00%01E%3E%9D%A0%DE
$ curl -A ndnsec -fsLS https://named-data.net/ndnsec/ndn-testbed-root.ndncert.x3.base64 | ndnsec-cert-dump -fp -
Certificate Name:
/ndn/KEY/%EC%F1L%8EQ%23%15%E0/ndn/%FD%00%00%01u%E6%7F2%10
Additional Description:
fullname: NDN Testbed Root X3
Public Key:
Key Type: 256-bit EC
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEGx+3Y4FvYo1eScIvgD74lQhQdzN4
zq021dop8t7kGfEpfGdKf2HGpnn4/qoF9iJ1yUZE/7Na8zzO4xT6RpIM0Q==
Validity:
NotBefore: 20140401T000000
NotAfter: 20150331T235959
Subject Description:
2.5.4.41: David
2.5.4.10: Some Organization
Public key bits:
MIIBIDANBgkqhkiG9w0BAQEFAAOCAQ0AMIIBCAKCAQEAtLq50tpynJ15zExEh9l6
jvh/HOmwhOppr/hTEPYUn2VTh21+JJIg5pHAAH/DQr8Bq5BGrdDUCIShxSxbaHwu
a1y4XgKP1MYBQP/WzcIhIzB/3PBDdmE0jM3Qg6yuk8BOwett3C07GtwW9dfgacwt
aC29xIHnYKfryH/gBSIDUIb38M7ILIDgQeIiQcHGHoFO8CbDtKY2OvVkFNgxowAR
Xn+gtkIfMdE77Z8p0S21pYfdvPuIpVVLy7lnFdwGzyCi3nmbtd/r9NSTepBczWQz
zBbThT7yfeNyHWLu0PZPdz84UpNPsBad3Bx9tT31noIVnt8yyBEfEU1jyEIVkm8U
VQIB
Not Before: 2020-11-20T16:31:37
Not After: 2024-12-31T23:59:59
Signature Information:
Signature Type: SignatureSha256WithEcdsa
Key Locator: Name=/ndn/KEY/%EC%F1L%8EQ%23%15%E0
Self-Signed: yes
+67 -48
View File
@@ -1,73 +1,92 @@
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-cert-dump -p -f signed.cert
Certificate Name:
/example/KEY/%E4%14%99%7F%28%96%82%EB/Universe/%FD%00%00%01q%D1%02N%82
Additional Description:
affiliation: Some Organization
foobar: Foo Bar
Public Key:
Key Type: 256-bit EC
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEOkmwKS8TlEyPFFV3IrpbrP4WgKr6
pEQSf+zF/6faCeyXbmqbU1qsJ9IZ/3rMgnL0FED1u24wx65aUA3/Ka8wXA==
Validity:
Not Before: 2020-05-01T00:00:00
Not After: 2021-01-01T00:00:00
Signature Information:
Signature Type: SignatureSha256WithEcdsa
Key Locator: Name=/ndn/test/KEY/I%3FS%9A%28%BB%9A%95
+24 -33
View File
@@ -1,56 +1,47 @@
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* is a path to a file that contains the certificate to install.
If *file* is "-", the certificate will be read from the standard input.
The certificate should be in Base64 encoding.
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:
::
$ 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
+31 -27
View File
@@ -1,49 +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.
``-P passphrase``
Passphrase to use for the export. If not specified (or specified an empty passphrase), the
user is interactively asked to input the passphrase on the terminal. Note that specifying
passphrase via -P is insecure, as it can potentially end up in shell history, be visible in
ps output, etc.
.. option:: -k, --key
``identity``
The identity name.
Interpret *name* as a key name. The default certificate of the key will be exported.
Examples
--------
.. option:: -c, --cert
Export an identity's default certificate and private key into a file:
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 -22
View File
@@ -1,39 +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>
``-P passphrase``
Passphrase to use for the export. If not specified (or specified an empty passphrase), the
user is interactively asked to input the passphrase on the terminal. Note that specifying
passphrase via -P is insecure, as it can potentially end up in shell history, be visible in
ps output, etc.
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.
``input``
Read from an input file. Specify ``-`` to read from the standard input.
Example
-------
Examples
--------
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.
+36 -65
View File
@@ -1,89 +1,60 @@
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.
The following commands are understood:
ndnsec-get-default_
Get default setting info.
:doc:`list <ndnsec-list>`
List all known identities/keys/certificates.
ndnsec-set-default_
Configure default setting.
:doc:`get-default <ndnsec-get-default>`
Show the default identity/key/certificate.
ndnsec-key-gen_
Generate a Key-Signing-Key for an identity.
:doc:`set-default <ndnsec-set-default>`
Change the default identity/key/certificate.
ndnsec-dsk-gen_
Generate a Data-Signing-Key (DSK) for an identity and sign the DSK using the corresponding KSK.
:doc:`delete <ndnsec-delete>`
Delete an identity/key/certificate.
ndnsec-sign-req_
:doc:`key-gen <ndnsec-key-gen>`
Generate a key for an identity.
:doc:`sign-req <ndnsec-sign-req>`
Generate a certificate signing request.
ndnsec-cert-gen_
Generate an identity certificate.
:doc:`cert-gen <ndnsec-cert-gen>`
Create a certificate for an identity.
ndnsec-cert-dump_
Dump a certificate from PublicInfo.
:doc:`cert-dump <ndnsec-cert-dump>`
Export a certificate.
ndnsec-cert-install_
Install a certificate into PublicInfo.
:doc:`cert-install <ndnsec-cert-install>`
Import a certificate from a file.
ndnsec-delete_
Delete identity/key/certificate.
:doc:`export <ndnsec-export>`
Export an identity as a SafeBag.
ndnsec-export_
Export an identity package.
:doc:`import <ndnsec-import>`
Import an identity from a SafeBag.
ndnsec-import_
Import an identity package.
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
:doc:`unlock-tpm <ndnsec-unlock-tpm>`
Unlock the TPM.
+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 %}
+2 -2
View File
@@ -26,13 +26,13 @@ $mathjax
<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>
<a href="https://named-data.net" title="A Future Internet Architecture"><img src="https://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="http://named-data.net/doc/ndn-cxx/$projectnumber/">$projectname $projectnumber documentation</a></h1>
<h1><a href="https://docs.named-data.net/ndn-cxx/$projectnumber/">$projectname $projectnumber documentation</a></h1>
</div>
</div>
</div><!--header container end-->
-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
View File
@@ -1 +0,0 @@
release-notes/release-notes-0.6.5.rst
+4
View File
@@ -0,0 +1,4 @@
Release Notes
=============
.. include:: release-notes/release-notes-0.8.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://docs.named-data.net/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**
+37 -37
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**
@@ -36,27 +37,26 @@ New features:
+ 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/>`_
+ Updates in ``Signature`` data structure to reflect changes in the `NDN-TLV spec v0.1.1
<https://docs.named-data.net/NDN-packet-spec/0.1.1/>`__
- **Wire encoding**
+ :ndn-cxx:`Data::getFullName() <getFullName()>` method to get :ndn-cxx:`Data` packet
name with implicit digest
+ :ndn-cxx:`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`)
+ :ndn-cxx:`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**
@@ -66,31 +66,31 @@ New features:
+ 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
+ Introduce :ndn-cxx:`SegmentFetcher` helper class to fetch multi-segmented data
(:issue:`1879`)
- **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**
+ Serialization of socket write operations (:issue:`1707`)
+ Serialization of socket write operations (:issue:`1769`)
+ Enforcing limit on Interest and Data packet size in :ndn-cxx:`Face::expressInterest` and
: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
@@ -104,27 +104,27 @@ 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 the
`NDN-TLV specification <https://docs.named-data.net/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:
* ``preCertificateValidation`` to process received certificate before validation.
* ``preCertificateValidation`` to process received certificate before validation
* ``onTimeout`` to process interest timeout
* ``afterCheckPolicy`` to process validation requests.
* ``afterCheckPolicy`` to process validation requests
+ Fix memory issues in ``SecPublicInfoSqlite3``
@@ -136,8 +136,8 @@ Updates and bug fixes:
- Other minor fixes and corrections
Deprecated:
^^^^^^^^^^^
Deprecated
^^^^^^^^^^
- ``SignatureSha256`` class, use :ndn-cxx:`DigestSha256` instead.
@@ -145,7 +145,7 @@ Deprecated:
Use versions that accept reference to ``io_service`` object.
- ``Face::ioService`` method, use :ndn-cxx:`Face::getIoService` instead.
- ``Face::ioService`` method, use ``Face::getIoService`` instead.
- :ndn-cxx:`Interest` constructor that accepts name, individual selectors, and individual
guiders as constructor parameters.
@@ -161,10 +161,10 @@ Deprecated:
- ``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`)
+6 -6
View File
@@ -5,8 +5,8 @@ Release date: March 3, 2015
Changes since version 0.3.0:
New features:
^^^^^^^^^^^^^
New features
^^^^^^^^^^^^
- **Management**
@@ -17,8 +17,8 @@ New features:
- 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`)
+5 -5
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.
@@ -112,8 +112,8 @@ Deprecated
``ndn::CertificateExtension``, ``ndn::CertificateSubjectDescription``. When necessary, use
``security::v1::PublicKey``, ``security::v1::Certificate``, ``security::v1::IdentityCertificate``,
``security::v1::CertificateExtension``, ``security::v1::CertificateSubjectDescription`` instead.
The next release will feature :doc:`a new version of NDN Certificate format
<../specs/certificate-format>`.
The next release will feature `a new version of the NDN Certificate format
<https://docs.named-data.net/NDN-packet-spec/0.3/certificate.html>`__.
Removed
^^^^^^^
+19 -21
View File
@@ -10,22 +10,22 @@ Release date: January 25, 2017
Changes since version 0.5.0:
New features:
^^^^^^^^^^^^^
New features
^^^^^^^^^^^^
- Add version 2 of the security framework (introduced in ``security::v2`` namespace)
- Add version 2 of the security framework in ``security::v2`` namespace
* :ref:`NDN Certificate Format Version 2.0 <NDN Certificate Format Version 2.0>`
(:issue:`3103`)
* New Public Information Base (PIB) and Trusted Program Module (TPM) framework to manage
* `NDN Certificate Format version 2.0
<https://docs.named-data.net/NDN-packet-spec/0.3/certificate.html>`__ (:issue:`3103`)
* New Public Information Base (PIB) and Trusted Platform Module (TPM) framework to manage
public/private keys and NDN Certificate version 2.0 (:issue:`2948`, :issue:`3202`)
* New KeyChain implementation (:issue:`2926`)
* New Validator implementation (:issue:`3289`, :issue:`1872`)
* New security-supporting utilities: trust anchor container and certificate cache
* Creation of `Command Interests
<https://redmine.named-data.net/projects/ndn-cxx/wiki/CommandInterest>`__ delegated to
:ndn-cxx:`CommandInterestSigner` class, while the new KeyChain only :ref:`signs Interests
<Signed Interest>` (:issue:`3912`)
``CommandInterestSigner`` class, while the new KeyChain only :doc:`signs Interests
</specs/signed-interest>` (:issue:`3912`)
- Enable validator to fetch certificates directly from the signed/command interest sender
(:issue:`3921`)
@@ -63,27 +63,27 @@ Improvements and bug fixes
Deprecated
^^^^^^^^^^
- Old security framework. All old security framework classes are moved to
- Old security framework. All old security framework classes are moved to the
``ndn::security::v1`` namespace in this release and will be removed in the next release.
* ``v1::KeyChain``, use :ndn-cxx:`v2::KeyChain` instead
* ``v1::KeyChain``; use ``v2::KeyChain`` instead.
* ``v1::Validator`` interface and all implementations of this interface (``ValidatorRegex``,
``ValidatorConfig``, ``ValidatorNull``). Use :ndn-cxx:`v2::Validator` and the
corresponding implementations of :ndn-cxx:`ValidationPolicy` interfaces (will be introduced
before 0.6.0 release).
``ValidatorConfig``, ``ValidatorNull``). Use ``v2::Validator`` and the corresponding
implementations of :ndn-cxx:`ValidationPolicy` interfaces (will be introduced before
the 0.6.0 release).
* ``v1::SecPublicInfo`` and its implementation (``SecPublicInfoSqlite``), ``SecTpm`` and its
implementations (``SecTpmFile``, ``SecTpmOsx``). These classes are internal implementation
and not intended to be used without ``v1::KeyChain``. :ndn-cxx:`v2::KeyChain` internally
uses the newly introduced :ndn-cxx:`Pib` and :ndn-cxx:`Tpm` interfaces with their
corresponding implementations.
and not intended to be used without ``v1::KeyChain``. ``v2::KeyChain`` internally uses
the newly introduced :ndn-cxx:`Pib` and :ndn-cxx:`Tpm` interfaces with their corresponding
implementations.
* ``v1::Certificate``, ``v1::IdentityCertificate``, ``v1::CertificateExtension``,
``v1::CertificateSubjectDescription``, use :ndn-cxx:`v2::Certificate` and
:ndn-cxx:`AdditionalDescription`
``v1::CertificateSubjectDescription``; use ``v2::Certificate`` and ``AdditionalDescription``
instead.
* ``v1::SecuredBag``, use ``v2::SafeBag`` instead
* ``v1::SecuredBag``; use :ndn-cxx:`SafeBag` instead.
- Constant ``io::BASE_64``, use ``io::BASE64`` instead (:issue:`3741`)
@@ -100,5 +100,3 @@ Deprecated
``ndn::CertificateExtension``, ``ndn::CertificateSubjectDescription``. When necessary, use
``security::v1::PublicKey``, ``security::v1::Certificate``, ``security::v1::IdentityCertificate``,
``security::v1::CertificateExtension``, ``security::v1::CertificateSubjectDescription`` instead.
The next release will feature :ref:`a new version of NDN Certificate format
<NDN Certificate Format Version 2.0>`.
+33 -38
View File
@@ -5,18 +5,18 @@ 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`.
This release of the library supports only the new version of the security framework
and features a number of updates to the KeyChain and Validator interfaces.
At the same time, management APIs for :ndn-cxx:`ValidatorConfig` remained intact;
transition to the new framework only requires adjusting :ndn-cxx:`Validator::validate`
calls and updating configuration files to follow the naming conventions of the new
`Certificate format <https://docs.named-data.net/NDN-packet-spec/0.3/certificate.html>`__.
- Integration of fetching certificates using Certificate Bundle as part of specialized
``CertificateFetcher`` (:issue:`3891`)
@@ -25,7 +25,7 @@ New features:
to include ``ForwardingHint`` instead of ``LinkObject``, following the latest NDN
specification updates (:issue:`4054`, :issue:`4055`)
- Fine-grained signals on interface/address changes in NetworkMonitor
- Fine-grained signals on interface/address changes in :ndn-cxx:`NetworkMonitor`
for all supported platforms (:issue:`3353`, :issue:`4025`, :issue:`3817`, :issue:`4024`)
- Addition of ``TxSequence`` field and ``Ack``, the first repeatable field in
@@ -51,7 +51,7 @@ Improvements and bug fixes
- FaceUri now accepts link-local IPv6 addresses (:issue:`1428`)
- Rename variables in ``FaceStatus`` and ``ForwarderStatus`` ('datas' => 'data')
- Rename fields in :ndn-cxx:`FaceStatus` and :ndn-cxx:`ForwarderStatus` ('datas' => 'data')
(:issue:`3955`)
- Improve logging framework and its uses
@@ -63,19 +63,19 @@ Improvements and bug fixes
* Add logging capabilities to ``Face``, ``UnixTransport``, ``TcpTransport``, and the new
security framework (:issue:`3563`)
To enable logging, set environment variable ``NDN_LOG`` to enable specific, subset, or all
logging module at appropriate levels. Examples:
To configure logging, set the environment variable :doc:`NDN_LOG </manpages/ndn-log>`.
Examples:
::
.. code-block:: sh
export NDN_LOG=*=ALL
export NDN_LOG=ndn.*=ALL
export NDN_LOG=ndn.security=DEBUG:ndn.TcpTransport=ALL
export NDN_LOG="*=ALL"
export NDN_LOG="ndn.*=ALL"
export NDN_LOG="ndn.security=DEBUG:ndn.TcpTransport=ALL"
- Ensure that ``Face`` sends ``Nack`` only after every ``InterestCallback`` has responded
(:issue:`4228`)
- Ensure that :ndn-cxx:`Face` sends a ``Nack`` only after every ``InterestCallback`` has
responded (:issue:`4228`)
- Fix potential overflow in ``time::toIsoString`` (:issue:`3915`)
- Fix potential overflow in :ndn-cxx:`time::toIsoString` (:issue:`3915`)
- Fix potentially misaligned memory accesses (:issue:`4172`, :issue:`4097`, :issue:`4175`,
:issue:`4190`, :issue:`4191`)
@@ -86,20 +86,15 @@ Improvements and bug fixes
- Source/header reorganization (:issue:`3940`)
* Move network-related files to ``src/net``
* Move network-related files to ``src/net``. Note the following namespace changes:
.. note::
Namespace changes
+ ``ndn::util::FaceUri`` is now ``ndn::FaceUri``
+ ``ndn::util::ethernet`` is now ``ndn::ethernet``
+ ``ndn::util::NetworkMonitor`` and related classes are now in ``ndn::net``
* ndn::util::FaceUri is now ndn::FaceUri
* ndn::util::ethernet is now ndn::ethernet
* ndn::util::NetworkMonitor and related classes are now in ndn::net
* Move signal-related files into ``src/util/signal/`` directory, except for
* Move signal-related files into ``src/util/signal`` directory, except for
the main include ``signal.hpp``
* Move InMemoryStorage to ``src/ims``
* Move :ndn-cxx:`InMemoryStorage` and related classes to ``src/ims``
* Rename ``digest.hpp`` to ``sha256.hpp`` to match the ``Sha256`` class declared within
Removed
@@ -107,23 +102,23 @@ Removed
- Old security framework.
* ``v1::KeyChain``, use :ndn-cxx:`v2::KeyChain` instead
* ``v1::KeyChain``; use :ndn-cxx:`KeyChain` instead.
* ``v1::Validator`` interface and ``ValidatorRegex`` implementation of this
interface. ``ValidatorConfig``, ``ValidatorNull`` implementation refactored to be based on
the new validation framework.
* ``v1::SecPublicInfo`` and its implementation (``SecPublicInfoSqlite``), ``SecTpm`` and its
implementations (``SecTpmFile``, ``SecTpmOsx``). These classes are internal implementation
and not intended to be used without ``v1::KeyChain``. :ndn-cxx:`v2::KeyChain` internally
implementations (``SecTpmFile``, ``SecTpmOsx``). These classes are internal implementation
and not intended to be used without ``v1::KeyChain``. The new :ndn-cxx:`KeyChain` internally
uses the newly introduced :ndn-cxx:`Pib` and :ndn-cxx:`Tpm` interfaces with their
corresponding implementations.
* ``v1::Certificate``, ``v1::IdentityCertificate``, ``v1::CertificateExtension``,
``v1::CertificateSubjectDescription``, use :ndn-cxx:`v2::Certificate` and
:ndn-cxx:`AdditionalDescription`
``v1::CertificateSubjectDescription``; use the new :ndn-cxx:`Certificate` and
:ndn-cxx:`AdditionalDescription` instead.
* ``v1::SecuredBag``, use ``v2::SafeBag`` instead
* ``v1::SecuredBag``; use :ndn-cxx:`SafeBag` instead.
- Constant ``io::BASE_64``, use ``io::BASE64`` instead (:issue:`3741`)
+16 -28
View File
@@ -3,8 +3,8 @@ ndn-cxx version 0.6.1
Release date: February 19, 2018
New features:
^^^^^^^^^^^^^
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
@@ -13,50 +13,40 @@ New features:
- New signal in :ndn-cxx:`SegmentFetcher` to notify retrieval of Data segments
(:issue:`4438`)
- Initial support for the Content Store management protocol
(:issue:`4050`)
- 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)
- A ``escape()`` helper function complementing the existing ``unescape()`` (:issue:`4484`)
- 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 :ndn-cxx:`Component::toUri()`
(:issue:`4484`)
- 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 handling of large dates when converting to/from string (:issue:`4478`, :issue:`3915`)
- Fixed error handling in :ndn-cxx:`KeyChain::importSafeBag()`
(:issue:`4359`)
- Fixed error handling in ``KeyChain::importSafeBag()`` (:issue:`4359`)
- Fixed parsing of IPv6 addresses with scope-id
(:issue:`4474`)
- Fixed parsing of IPv6 addresses with scope-id (:issue:`4474`)
- :ndn-cxx:`io::load()` now handles empty files properly
(:issue:`4434`)
- ``io::load()`` now handles empty files properly (:issue:`4434`)
- Switched to using `boost::asio::basic_waitable_timer`
(:issue:`4431`)
- 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`)
- 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`)
- Fixed build when ``std::to_string`` is not available (:issue:`4393`)
- Avoid undefined behavior when casting to :ndn-cxx:`tlv::SignatureTypeValue`
(:issue:`4370`)
- Avoid undefined behavior when casting to :ndn-cxx:`tlv::SignatureTypeValue` (:issue:`4370`)
- Fixed compilation with Boost 1.66.0
(:issue:`4422`)
- Fixed compilation with Boost 1.66.0 (:issue:`4422`)
- Various documentation updates
(:issue:`3918`, :issue: `4184`, :issue: `4275`)
@@ -64,6 +54,4 @@ Improvements and bug fixes
Removed
^^^^^^^
- Removed obsolete TLV-TYPE constants
(:issue:`4055`, :issue:`3098`, :issue: `3755`)
- Removed obsolete TLV-TYPE constants (:issue:`4055`, :issue:`3098`, :issue: `3755`)
+5 -5
View File
@@ -3,11 +3,11 @@ ndn-cxx version 0.6.2
Release date: May 4, 2018
New features:
^^^^^^^^^^^^^
New features
^^^^^^^^^^^^
- Initial support for [NDN packet format version
0.3](https://named-data.net/doc/NDN-packet-spec/0.3/) (:issue:`4527`)
- Initial support for `NDN packet format version 0.3
<https://docs.named-data.net/NDN-packet-spec/0.3/>`__ (:issue:`4527`)
* Recognize typed name components, allow typed name component in ``FinalBlockId``
(:issue:`4526`)
@@ -41,7 +41,7 @@ Improvements and bug fixes
- Logging system improvements (:issue:`4552`)
Deprecated
~~~~~~~~~~
^^^^^^^^^^
- Selectors (:issue:`4527`)
+6 -6
View File
@@ -9,11 +9,11 @@ that use distribution-provided compilers and packages.
The compilation now uses the C++14 standard.
New features:
^^^^^^^^^^^^^
New features
^^^^^^^^^^^^
- More support for `NDN packet format version
0.3 <https://named-data.net/doc/NDN-packet-spec/0.3/>`__ (:issue:`4527`)
- More support for `NDN packet format version 0.3
<https://docs.named-data.net/NDN-packet-spec/0.3/>`__ (:issue:`4527`)
- Allow applications to declare a default ``CanBePrefix`` setting (:issue:`4581`)
@@ -67,7 +67,7 @@ Improvements and bug fixes
- Correct and improve documentation
Deprecated
~~~~~~~~~~
^^^^^^^^^^
- ``SegmentFetcher::fetch()`` static functions in favor of ``start()`` (:issue:`4464`)
@@ -83,6 +83,6 @@ Deprecated
- ``Data::get/setFinalBlockId()`` in favor of ``Data::get/setFinalBlock()``
Removed
~~~~~~~
^^^^^^^
- Dependency on Boost.Regex in favor of ``std::regex``
+22 -26
View File
@@ -3,16 +3,11 @@ ndn-cxx version 0.6.5
Release date: February 4, 2019
Note that this is the last release that encodes to `NDN packet format version 0.2.1
<https://named-data.net/doc/NDN-packet-spec/0.2.1/>`__. A future release will continue to
decode v0.2.1 format, but will encode to `v0.3 format
<https://named-data.net/doc/NDN-packet-spec/0.3/>`__.
New features
^^^^^^^^^^^^
New features:
^^^^^^^^^^^^^
- More support for `NDN packet format version
0.3 <https://named-data.net/doc/NDN-packet-spec/0.3/>`__ (:issue:`4527`)
- More support for `NDN packet format version 0.3
<https://docs.named-data.net/NDN-packet-spec/0.3/>`__ (:issue:`4527`)
* Stop using ``ChildSelector`` in ``NotificationSubscriber`` (:issue:`4664`)
@@ -23,55 +18,56 @@ New features:
- Scoped prefix registration, scoped Interest filter, and scoped pending Interest
(:issue:`3919`, :issue:`4316`)
- Counters for satisfied and unsatisfied Interests in ``ForwarderStatus``
- Counters for satisfied and unsatisfied Interests in :ndn-cxx:`ForwarderStatus`
(:issue:`4720`)
- ``random::getRandomNumberEngine()`` in the public API
- :ndn-cxx:`random::getRandomNumberEngine` in the public API
- ``MetadataObject`` class to encode/decode RDR-style metadata (:issue:`4707`)
- :ndn-cxx:`MetadataObject` class to encode/decode RDR-style metadata (:issue:`4707`)
- ``SegmentFetcher::stop()`` (:issue:`4692`)
- :ndn-cxx:`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`)
- Use OpenSSL-based routines for PKCS #8 decoding/decryption when exporting keys from the
macOS Keychain (:issue:`4450`)
- Forbid unrecognized TLVs before ``Name`` (:issue:`4667`)
- Stop accepting NonNegativeInteger as sequence number in NDNLP (:issue:`4598`)
- Add exponential backoff in :ndn-cxx:`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 :ndn-cxx:`InMemoryStorage` (:issue:`4769`)
- Prevent memory pool size from becoming zero in ``InMemoryStorage`` (:issue:`4769`)
- Clean up fetchers when destructing ``nfd::Controller`` (:issue:`4775`)
- Clean up fetchers when destructing :ndn-cxx:`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-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``
@@ -0,0 +1,63 @@
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://docs.named-data.net/NDN-packet-spec/0.2.1/>`__.
The next release will be able to encode and decode only the `v0.3 packet format
<https://docs.named-data.net/NDN-packet-spec/0.3/>`__.
New features
^^^^^^^^^^^^
- More support for `NDN packet format version 0.3
<https://docs.named-data.net/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 :ndn-cxx:`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,80 @@
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://docs.named-data.net/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 :ndn-cxx:`Name` and :ndn-cxx:`Interest`
(:issue:`4658`)
- Encoding and decoding of ``HopLimit`` field in Interest (:issue:`4806`)
- Support for encoding and decoding PIT token as NDNLPv2 field (: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.
- :ndn-cxx:`io::loadBuffer` and :ndn-cxx:`io::saveBuffer` helper functions
Improvements and bug fixes
^^^^^^^^^^^^^^^^^^^^^^^^^^
- Various improvements in the Linux implementation of :ndn-cxx:`NetworkMonitor`
- Rework of ``RttEstimator`` class:
* split into two classes: :ndn-cxx:`RttEstimator` and :ndn-cxx:`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 :ndn-cxx:`SignerFilter` and :ndn-cxx:`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,78 @@
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 <https://docs.named-data.net/NDN-packet-spec/0.3/signed-interest.html>`__
according to Packet Specification v0.3 (:issue:`4804`)
- Add "in-order" mode to :ndn-cxx:`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 :ndn-cxx:`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 Boost 1.73.0+ in :ndn-cxx:`time::toIsoString`
- 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
@@ -0,0 +1,84 @@
ndn-cxx version 0.8.0
---------------------
Release date: February 15, 2022
Important changes
^^^^^^^^^^^^^^^^^
- Flip default value of ``CanBePrefix`` to **false** (:issue:`4582`). This means that
Interests created without explicitly specifying ``CanBePrefix`` option will be treated
as Interests for exact Data name.
- Change default name component encoding convention to ``TYPED`` (:issue:`5044`)
- Update TLV-TYPE numbers to revision 3 of the `naming conventions`_
.. _naming conventions:
https://named-data.net/publications/techreports/ndn-tr-22-3-ndn-memo-naming-conventions/
- Change TLV-TYPE number of ``IncomingFaceId`` field in NDNLP (:issue:`5185`)
- Update Interest ``ForwardingHint`` format (:issue:`5187`)
Improvements and bug fixes
^^^^^^^^^^^^^^^^^^^^^^^^^^
- Support certificate name, versionless certificate name, and key name options for
KeyLocator name in ``ValidatorConfig`` (:issue:`5142`)
- Generalize signature verification to allow ``digest-sha256``, effectively adding
support of digest integrity verification in ``ValidatorConfig``
- Enforce ``sig-type`` check in ``ValidatorConfig`` (:issue:`4524`)
- Fix ``ValidatorConfig`` rule processing bug (:issue:`5145`)
- Prevent potential dereferencing of past-the-end iterator in ``Block::value()``
- Fail early in :ndn-cxx:`Block::blockFromValue` if TLV length is zero
- Refactor and cleanup of :ndn-cxx:`StatusDatasetContext`, including increase of maximum
payload size of each produced segment to 8000 bytes
- Improve error reporting when loading a ``Certificate`` or ``SafeBag`` fails
- Add API to get the keyword name component for Metadata and Prefix Announcements
- Backport C++20 ``std::span`` and convert most APIs to use it
- Introduce ``time::{to,from}IsoExtendedString()`` utility functions
- Add support for OpenSSL 3.0. Note that because of the API changes, HMAC implementation
does not currently work when compiled with OpenSSL 3.0+, use older version of OpenSSL
when needed.
- Various build system and documentation extension and fixes
Deprecations
^^^^^^^^^^^^
- ``Interest::setDefaultCanBePrefix()``
- ``Name::append(Block)`` overload, as it has confusing semantics (:issue:`5186`)
- ``ndnsec`` tool aliases: ``ndnsec-certgen``, ``ndnsec-dump-certificate``,
``ndnsec-install-cert``, ``ndnsec-keygen``, ``ndnsec-ls-identity``
Removals
^^^^^^^^
- Previously deprecated ``Signature`` class, its subclasses, and deprecated methods from
``Data``, ``KeyChain``, ``SignatureInfo``, and ``SigningInfo``
- Redundant overloads of ``verifySignature()`` and ``verifyDigest()``
- Previously deprecated ``security/v2`` headers
- Previously deprecated ``CommandInterestSigner``
- Unused ``Transport::send()`` overload
- Remove HTTP download feature in ``ndnsec cert-install``, as it does not support HTTPS
retrieval. The recommended way of installing certificates published over HTTP/HTTPS has
been changed to use ``curl`` or ``wget`` (:issue:`4506`)
+102
View File
@@ -0,0 +1,102 @@
ndn-cxx version 0.8.1
---------------------
Release date: December 31, 2022
.. note::
This is the last release of ndn-cxx to support the C++14 standard.
Future versions will require C++17 to build.
Important changes and new features
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- The minimum build requirements have been increased as follows:
- Either GCC >= 7.4.0 or Clang >= 6.0 is required on Linux
- On macOS, Xcode 11.3 or later is recommended; older versions may still work but are not
officially supported
- Boost >= 1.65.1 and OpenSSL >= 1.1.1 are required on all platforms
- Sphinx 4.0 or later is required to build the documentation
- CentOS Stream 9 is now officially supported; CentOS 8 has been dropped (:issue:`5181`)
- macOS 12 (Monterey) and 13 (Ventura) running on arm64 are now officially supported
(:issue:`5135`)
- Add the initial version of a :ndn-cxx:`Segmenter` API that applications can use to simplify
the process of chunking a large object into multiple signed Data packets (:issue:`5247`)
- Add ``KeyChain::makeCertificate()`` to simplify the creation of certificates
- Put the full certificate name in the ``KeyLocator`` field, instead of just the key name
(:issue:`5112`)
- NFD management commands sent by :ndn-cxx:`nfd::Controller` now use the `new signed Interest
format <https://docs.named-data.net/NDN-packet-spec/0.3/signed-interest.html>`__ (:issue:`4804`)
Improvements and bug fixes
^^^^^^^^^^^^^^^^^^^^^^^^^^
- Several enhancements and cleanups in :ndn-cxx:`Name` and :ndn-cxx:`Component` to make
the API more consistent and simpler to use (:issue:`5186`)
- Various improvements in the validation framework and policies
- Avoid redundant TLV decoding during Interest validation
- Fix validation of signed Interests with malformed ``InterestSignatureInfo``
- More accurate validation error codes are returned in several cases
- Rename ``ValidationError::NO_SIGNATURE`` to ``MALFORMED_SIGNATURE``
- Optimize parsing of PIB and TPM locators in :ndn-cxx:`KeyChain`
- Major cleanup and modernization of PIB implementation
- Gracefully handle invalid or unsupported public keys stored in the PIB
- Fix OpenSSL 3.0 deprecation warnings in private key generation routines (:issue:`5154`)
- Change ``Certificate::getPublicKey()`` to return a ``span``
- Make :ndn-cxx:`Block` convertible to ``span<const uint8_t>``
- Avoid assertion failure in :ndn-cxx:`OBufferStream` under certain conditions (:issue:`5240`)
- Allow customizing the FaceId in :ndn-cxx:`DummyClientFace` (:issue:`5011`)
- Improve pretty-printing of certificates, e.g., in ``ndnsec list`` and ``ndnsec cert-dump``
- Relax restrictions on KeyId component type in ``ndnsec key-gen``
- Fix handling of ``--without-osx-keychain`` configure option (:issue:`3338`)
- Stop using the ``gold`` linker on Linux; prefer instead linking with ``lld`` if installed
- Update waf build system to version 2.0.24
- Various documentation improvements
Deprecations
^^^^^^^^^^^^
- ``Name::append()`` overloads and :ndn-cxx:`Component` constructors that take a
``const uint8_t*``. Use the ``span``-based overloads instead.
- ``Component::fromImplicitSha256Digest()`` and ``Component::fromParametersSha256Digest()``.
Use one of the constructors directly instead.
Removals
^^^^^^^^
- Obsolete TLV-TYPE definitions
- Many previously deprecated functions that take raw byte buffers as ``uint8_t*`` + ``size_t``,
replaced by equivalent functions that take a ``span``. These include ``Data::setContent()``,
``Interest::setApplicationParameters()``, ``Block::fromBuffer()``, ``verifySignature()``,
``PublicKey::loadPkcs8()``, ``transform::bufferSource()``, ``random::generateSecureBytes()``,
``printHex()``, ``toHex()``, and so on.
- Previously deprecated ``Name::append(Block)`` overload
- Previously deprecated ``Interest::setDefaultCanBePrefix()``
- ``ndn::any`` and related functionality
+69 -50
View File
@@ -1,116 +1,135 @@
ndn-cxx Versions
++++++++++++++++
All ndn-cxx Releases
====================
.. toctree::
:glob:
:hidden:
:maxdepth: 1
:reversed:
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
release-notes/release-notes-0.4.1
release-notes/release-notes-0.4.0
release-notes/release-notes-0.3.4
release-notes/release-notes-0.3.3
release-notes/release-notes-0.3.2
release-notes/release-notes-0.3.1
release-notes/release-notes-0.3.0
release-notes/release-notes-0.2.0
release-notes/release-notes-0.1.0
release-notes/*
* **ndn-cxx version 0.8.1**
(:doc:`Release Notes <release-notes/release-notes-0.8.1>`, `Documentation <https://docs.named-data.net/ndn-cxx/0.8.1/>`__)
`src (git) <https://github.com/named-data/ndn-cxx/releases/tag/ndn-cxx-0.8.1>`__,
`src (tarball) <https://named-data.net/downloads/ndn-cxx-0.8.1.tar.bz2>`__ (`checksum <https://named-data.net/downloads/ndn-cxx-0.8.1.tar.bz2.sha256>`__)
* **ndn-cxx version 0.8.0**
(:doc:`Release Notes <release-notes/release-notes-0.8.0>`, `Documentation <https://docs.named-data.net/ndn-cxx/0.8.0/>`__)
`src (git) <https://github.com/named-data/ndn-cxx/releases/tag/ndn-cxx-0.8.0>`__,
`src (tarball) <https://named-data.net/downloads/ndn-cxx-0.8.0.tar.bz2>`__ (`checksum <https://named-data.net/downloads/ndn-cxx-0.8.0.tar.bz2.sha256>`__)
* **ndn-cxx version 0.7.1**
(:doc:`Release Notes <release-notes/release-notes-0.7.1>`, `Documentation <https://docs.named-data.net/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/ndn-cxx-0.7.1.tar.bz2>`__ (`checksum <https://named-data.net/downloads/ndn-cxx-0.7.1.tar.bz2.sha256>`__)
* **ndn-cxx version 0.7.0**
(:doc:`Release Notes <release-notes/release-notes-0.7.0>`, `Documentation <https://docs.named-data.net/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/ndn-cxx-0.7.0.tar.bz2>`__ (`checksum <https://named-data.net/downloads/ndn-cxx-0.7.0.tar.bz2.sha256>`__)
* **ndn-cxx version 0.6.6**
(:doc:`Release Notes <release-notes/release-notes-0.6.6>`, `Documentation <https://docs.named-data.net/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/ndn-cxx-0.6.6.tar.bz2>`__ (`checksum <https://named-data.net/downloads/ndn-cxx-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/>`__)
(:doc:`Release Notes <release-notes/release-notes-0.6.5>`, `Documentation <https://docs.named-data.net/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>`__)
`src (tarball) <https://named-data.net/downloads/ndn-cxx-0.6.5.tar.bz2>`__ (`checksum <https://named-data.net/downloads/ndn-cxx-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/>`__)
(:doc:`Release Notes <release-notes/release-notes-0.6.3>`, `Documentation <https://docs.named-data.net/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>`__)
`src (tarball) <https://named-data.net/downloads/ndn-cxx-0.6.3.tar.bz2>`__ (`checksum <https://named-data.net/downloads/ndn-cxx-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/>`__)
(:doc:`Release Notes <release-notes/release-notes-0.6.2>`, `Documentation <https://docs.named-data.net/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>`__)
`src (tarball) <https://named-data.net/downloads/ndn-cxx-0.6.2.tar.bz2>`__ (`checksum <https://named-data.net/downloads/ndn-cxx-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/>`__)
(:doc:`Release Notes <release-notes/release-notes-0.6.1>`, `Documentation <https://docs.named-data.net/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>`__)
`src (tarball) <https://named-data.net/downloads/ndn-cxx-0.6.1.tar.bz2>`__ (`checksum <https://named-data.net/downloads/ndn-cxx-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/>`__)
(:doc:`Release Notes <release-notes/release-notes-0.6.0>`, `Documentation <https://docs.named-data.net/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 <https://named-data.net/downloads/nfd-0.6.0.tar.bz2.sha256>`__)
`src (tarball) <https://named-data.net/downloads/ndn-cxx-0.6.0.tar.bz2>`__ (`checksum <https://named-data.net/downloads/ndn-cxx-0.6.0.tar.bz2.sha256>`__)
* **ndn-cxx version 0.5.1**
(:doc:`Release Notes <release-notes/release-notes-0.5.1>`, `Documentation <https://named-data.net/doc/ndn-cxx/0.5.1/>`__)
(:doc:`Release Notes <release-notes/release-notes-0.5.1>`, `Documentation <https://docs.named-data.net/ndn-cxx/0.5.1/>`__)
`src (git) <https://github.com/named-data/ndn-cxx/releases/tag/ndn-cxx-0.5.1>`__,
`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>`__)
`src (tarball) <https://named-data.net/downloads/ndn-cxx-0.5.1.tar.bz2>`__ (`checksum <https://named-data.net/downloads/ndn-cxx-0.5.1.tar.bz2.sha256>`__)
* **ndn-cxx version 0.5.0**
(:doc:`Release Notes <release-notes/release-notes-0.5.0>`, `Documentation <https://named-data.net/doc/ndn-cxx/0.5.0/>`__)
(:doc:`Release Notes <release-notes/release-notes-0.5.0>`, `Documentation <https://docs.named-data.net/ndn-cxx/0.5.0/>`__)
`src (git) <https://github.com/named-data/ndn-cxx/releases/tag/ndn-cxx-0.5.0>`__,
`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>`__)
`src (tarball) <https://named-data.net/downloads/ndn-cxx-0.5.0.tar.bz2>`__ (`checksum <https://named-data.net/downloads/ndn-cxx-0.5.0.tar.bz2.sha256>`__)
* **ndn-cxx version 0.4.1**
(:doc:`Release Notes <release-notes/release-notes-0.4.1>`, `Documentation <https://named-data.net/doc/ndn-cxx/0.4.1/>`__)
(:doc:`Release Notes <release-notes/release-notes-0.4.1>`)
`src (git) <https://github.com/named-data/ndn-cxx/releases/tag/ndn-cxx-0.4.1>`__,
`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>`__)
`src (tarball) <https://named-data.net/downloads/ndn-cxx-0.4.1.tar.bz2>`__ (`checksum <https://named-data.net/downloads/ndn-cxx-0.4.1.tar.bz2.sha256>`__)
* **ndn-cxx version 0.4.0**
(:doc:`Release Notes <release-notes/release-notes-0.4.0>`, `Documentation <https://named-data.net/doc/ndn-cxx/0.4.0/>`__)
(:doc:`Release Notes <release-notes/release-notes-0.4.0>`)
`src (git) <https://github.com/named-data/ndn-cxx/releases/tag/ndn-cxx-0.4.0>`__,
`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>`__)
`src (tarball) <https://named-data.net/downloads/ndn-cxx-0.4.0.tar.bz2>`__ (`checksum <https://named-data.net/downloads/ndn-cxx-0.4.0.tar.bz2.sha256>`__)
* **ndn-cxx version 0.3.4**
(:doc:`Release Notes <release-notes/release-notes-0.3.4>`, `Documentation <https://named-data.net/doc/ndn-cxx/0.3.4/>`__)
(:doc:`Release Notes <release-notes/release-notes-0.3.4>`)
`src (git) <https://github.com/named-data/ndn-cxx/releases/tag/ndn-cxx-0.3.4>`__,
`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>`__)
`src (tarball) <https://named-data.net/downloads/ndn-cxx-0.3.4.tar.bz2>`__ (`checksum <https://named-data.net/downloads/ndn-cxx-0.3.4.tar.bz2.sha256>`__)
* **ndn-cxx version 0.3.3**
(:doc:`Release Notes <release-notes/release-notes-0.3.3>`, `Documentation <https://named-data.net/doc/ndn-cxx/0.3.3/>`__)
(:doc:`Release Notes <release-notes/release-notes-0.3.3>`)
`src (git) <https://github.com/named-data/ndn-cxx/releases/tag/ndn-cxx-0.3.3>`__,
`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>`__)
`src (tarball) <https://named-data.net/downloads/ndn-cxx-0.3.3.tar.bz2>`__ (`checksum <https://named-data.net/downloads/ndn-cxx-0.3.3.tar.bz2.sha256>`__)
* **ndn-cxx version 0.3.2**
(:doc:`Release Notes <release-notes/release-notes-0.3.2>`, `Documentation <https://named-data.net/doc/ndn-cxx/0.3.2/>`__)
(:doc:`Release Notes <release-notes/release-notes-0.3.2>`)
`src (git) <https://github.com/named-data/ndn-cxx/releases/tag/ndn-cxx-0.3.2>`__,
`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>`__)
`src (tarball) <https://named-data.net/downloads/ndn-cxx-0.3.2.tar.bz2>`__ (`checksum <https://named-data.net/downloads/ndn-cxx-0.3.2.tar.bz2.sha256>`__)
* **ndn-cxx version 0.3.1**
(:doc:`Release Notes <release-notes/release-notes-0.3.1>`, `Documentation <https://named-data.net/doc/ndn-cxx/0.3.1/>`__)
(:doc:`Release Notes <release-notes/release-notes-0.3.1>`)
`src (git) <https://github.com/named-data/ndn-cxx/releases/tag/ndn-cxx-0.3.1>`__,
`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>`__)
`src (tarball) <https://named-data.net/downloads/ndn-cxx-0.3.1.tar.bz2>`__ (`checksum <https://named-data.net/downloads/ndn-cxx-0.3.1.tar.bz2.sha256>`__)
* **ndn-cxx version 0.3.0**
(:doc:`Release Notes <release-notes/release-notes-0.3.0>`, `Documentation <https://named-data.net/doc/ndn-cxx/0.3.0/>`__)
(:doc:`Release Notes <release-notes/release-notes-0.3.0>`)
`src (git) <https://github.com/named-data/ndn-cxx/releases/tag/ndn-cxx-0.3.0>`__,
`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>`__)
`src (tarball) <https://named-data.net/downloads/ndn-cxx-0.3.0.tar.bz2>`__ (`checksum <https://named-data.net/downloads/ndn-cxx-0.3.0.tar.bz2.sha256>`__)
* **ndn-cxx version 0.2.0**
(:doc:`Release Notes <release-notes/release-notes-0.2.0>`, `Documentation <https://named-data.net/doc/ndn-cxx/0.2.0/>`__)
(:doc:`Release Notes <release-notes/release-notes-0.2.0>`)
`src (git) <https://github.com/named-data/ndn-cxx/releases/tag/ndn-cxx-0.2.0>`__,
`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>`__)
`src (tarball) <https://named-data.net/downloads/ndn-cxx-0.2.0.tar.bz2>`__ (`checksum <https://named-data.net/downloads/ndn-cxx-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>`__
@@ -119,10 +138,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 <https://named-data.net/doc/ndn-cxx/0.1.0/>`__)
(:doc:`Release Notes <release-notes/release-notes-0.1.0>`)
`src (git) <https://github.com/named-data/ndn-cxx/releases/tag/ndn-cxx-0.1.0>`__,
`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>`__)
`src (tarball) <https://named-data.net/downloads/ndn-cxx-0.1.0.tar.bz2>`__ (`checksum <https://named-data.net/downloads/ndn-cxx-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>`__
+1 -3
View File
@@ -4,7 +4,5 @@ Specifications
.. toctree::
:maxdepth: 2
specs/signed-interest
specs/certificate-format
specs/safe-bag
specs/validation-error-code
specs/signed-interest
-213
View File
@@ -1,213 +0,0 @@
.. _NDN Certificate Format Version 2.0:
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
that carries a public key as content is conceptually a certificate. However,
the specification of a data packet is not sufficient to be the specification of
a common certificate format, as it requires additional components. For example,
a certificate may follow a specific naming convention and may need to include
validity period, revocation information, etc. This specification defines
naming and structure of the NDN certificates and is complementary to NDN packet
specification.
::
Overview of NDN certificate format
+--------------------------+
| Name |
+--------------------------+
| MetaInfo |
|+------------------------+|
|| ContentType: KEY(2) ||
|+------------------------+|
|+------------------------+|
|| FreshnessPeriod: >~ 1h ||
|+------------------------+|
+--------------------------+
| Content |
|+------------------------+|
|| Public Key ||
|+------------------------+|
+--------------------------+
| SignatureInfo |
|+------------------------+|
|| SignatureType: ... ||
|| KeyLocator: ... ||
|| ValidityPeriod: ... ||
|| ... ||
|+------------------------+|
+--------------------------+
| SignatureValue |
+--------------------------+
CertificateV2 ::= DATA-TLV TLV-LENGTH
Name (= /<NameSpace>/KEY/[KeyId]/[IssuerId]/[Version])
MetaInfo (.ContentType = KEY,
.FreshnessPeriod >~ 1h))
Content (= X509PublicKeyContent)
SignatureInfo (= 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 ...
Name
----
The name of a certificate consists of five parts as shown below:
::
/<SubjectName>/KEY/[KeyId]/[IssuerId]/[Version]
A certificate name starts with the subject to which a public key is bound. The following parts
include the keyword ``KEY`` component, KeyId, IssuerId, and version components.
``KeyId`` is an opaque name component to identify an instance of the public key for the
certificate namespace. The value of `Key ID` is controlled by the namespace owner and can be
an 8-byte random number, SHA-256 digest of the public key, timestamp, or a simple numerical
identifier.
``Issuer Id`` is an opaque name component to identify issuer of the certificate. The value is
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,
::
/edu/ucla/cs/yingdi/KEY/%03%CD...%F1/%9F%D3...%B7/%FD%d2...%8E
\_________________/ \___________/ \___________/\___________/
Certificate Namespace Key Id Issuer Id Version
(Identity)
MetaInfo
--------
The ``ContentType`` of certificate is set to ``KEY`` (2).
The ``FreshnessPeriod`` of certificate must be explicitly specified. The
recommended value is 1 hour (3,600,000 milliseconds).
Content
-------
By default, the content of a certificate is the public key encoded in
`X509PublicKey <https://tools.ietf.org/html/rfc5280#section-4.1.2.7>`__ format.
SignatureInfo
-------------
The SignatureInfo block of a certificate is required to include the ``ValidityPeriod`` field.
``ValidityPeriod`` includes two sub TLV fields: ``NotBefore`` and ``NotAfter``, which carry two
UTC timestamps in ISO 8601 compact format (``yyyymmddTHHMMSS``, e.g., "20020131T235959").
``NotBefore`` indicates when the certificate takes effect while ``NotAfter`` indicates when the
certificate expires.
.. note::
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.
::
ValidityPeriod ::= VALIDITY-PERIOD-TYPE TLV-LENGTH
NotBefore
NotAfter
NotBefore ::= NOT-BEFORE-TYPE TLV-LENGTH
BYTE{15}
NotAfter ::= NOT-AFTER-TYPE TLV-LENGTH
BYTE{15}
For each TLV, the TLV-TYPE codes are assigned as below:
+---------------------------------------------+-------------------+----------------+
| TLV-TYPE | Assigned code | Assigned code |
| | (decimal) | (hexadecimal) |
+=============================================+===================+================+
| ValidityPeriod | 253 | 0xFD |
+---------------------------------------------+-------------------+----------------+
| NotBefore | 254 | 0xFE |
+---------------------------------------------+-------------------+----------------+
| NotAfter | 255 | 0xFF |
+---------------------------------------------+-------------------+----------------+
Extensions
~~~~~~~~~~
A certificate may optionally carry some extensions in SignatureInfo. An extension
could be either critical or non-critical depends on the TLV-TYPE code convention. A
critical extension implies that if a validator cannot recognize or parse the
extension, the validator must reject the certificate. A non-critical extension
implies that if a validator cannot recognize or cannot parse the extension, the
validator may ignore the extension.
The TLV-TYPE code range [256, 512) is reserved for extensions. The last bit of a
TLV-TYPE code indicates whether the extension is critical or not: ``1`` for critical
while ``0`` for non-critical. If an extension could be either critical or
non-critical, the extension should be allocated with two TLV-TYPE codes which only
differ at the last bit.
Extensions
----------
We list currently defined extensions:
+---------------------------------------------+-------------------+----------------+
| TLV-TYPE | Assigned code | Assigned code |
| | (decimal) | (hexadecimal) |
+=============================================+===================+================+
| AdditionalDescription (non-critical) | 258 | 0x0102 |
+---------------------------------------------+-------------------+----------------+
AdditionalDescription
~~~~~~~~~~~~~~~~~~~~~
``AdditionalDescription`` is a non-critical extension that provides additional
information about the certificate. The information is expressed as a set of
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.
::
AdditionalDescription ::= ADDITIONAL-DESCRIPTION-TYPE TLV-LENGTH
DescriptionEntry+
DescriptionEntry ::= DESCRIPTION-ENTRY-TYPE TLV-LENGTH
DescriptionKey
DescriptionValue
DescriptionKey ::= DESCRIPTION-KEY-TYPE TLV-LENGTH
BYTE+
DescriptionValue ::= DESCRIPTION-VALUE-TYPE TLV-LENGTH
BYTE+
+---------------------------------------------+-------------------+----------------+
| TLV-TYPE | Assigned code | Assigned code |
| | (decimal) | (hexadecimal) |
+=============================================+===================+================+
| DescriptionEntry | 512 | 0x0200 |
+---------------------------------------------+-------------------+----------------+
| DescriptionKey | 513 | 0x0201 |
+---------------------------------------------+-------------------+----------------+
| DescriptionValue | 514 | 0x0202 |
+---------------------------------------------+-------------------+----------------+
+23 -21
View File
@@ -1,27 +1,29 @@
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>`_.
Sometimes it may be necessary to export an identity's credentials (i.e., private key and associated
certificate) from one machine and import them into another. This requires a secure container to
carry the sensitive information. For this purpose, we define the **SafeBag** format, which contains
an `NDN certificate <https://docs.named-data.net/NDN-packet-spec/0.3/certificate.html>`__ and the
corresponding private key in encrypted form. The private key is formatted as a DER-encoded
:rfc:`EncryptedPrivateKeyInfo <5208#section-6>` structure as described in PKCS #8.
The format of **SafeBag** is defined as:
The TLV encoding of ``SafeBag`` is defined as follows:
::
.. 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
Certificate
EncryptedKey
All TLV-TYPE codes are application specific:
EncryptedKey = ENCRYPTED-KEY-TYPE TLV-LENGTH
*OCTET ; PKCS #8 EncryptedPrivateKeyInfo
+---------------------------------------------+-------------------+----------------+
| TLV-TYPE | Assigned code | Assigned code |
| | (decimal) | (hexadecimal) |
+=============================================+===================+================+
| SafeBag | 128 | 0x80 |
+---------------------------------------------+-------------------+----------------+
| EncryptedKeyBag | 129 | 0x81 |
+---------------------------------------------+-------------------+----------------+
+---------------------------------------------+------------------+-----------------+
| Type | Assigned number | Assigned number |
| | (decimal) | (hexadecimal) |
+=============================================+==================+=================+
| SafeBag | 128 | 0x80 |
+---------------------------------------------+------------------+-----------------+
| EncryptedKey | 129 | 0x81 |
+---------------------------------------------+------------------+-----------------+
+17 -16
View File
@@ -1,7 +1,10 @@
.. _Signed Interest:
Signed Interest Version 0.2 (DEPRECATED)
========================================
Signed Interest
===============
.. warning::
This document describes a deprecated format for signed Interest packets. The current format can
be found in the
`NDN Packet Specification <https://docs.named-data.net/NDN-packet-spec/current/signed-interest.html>`__.
**Signed Interest** is a mechanism to issue an authenticated interest.
@@ -13,7 +16,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 +30,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 +52,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://docs.named-data.net/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://docs.named-data.net/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://docs.named-data.net/NDN-packet-spec/0.2.1/signature.html>`__ TLV.
::
@@ -83,7 +84,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://docs.named-data.net/NDN-packet-spec/0.2.1/signature.html>`__ TLV.
::
@@ -108,7 +109,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://docs.named-data.net/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
-33
View File
@@ -1,33 +0,0 @@
Validation Error Code
=====================
The following table defines a list of known codes and their description, which can be returned from the :ndn-cxx:`v2::Validator` interface.
Other error codes can be returned by validator implementations outside ndn-cxx codebase.
+------------+--------------------------+-----------------------------------------------------+
| Error code | Short ID | Description |
+============+==========================+=====================================================+
| 0 | NO_ERROR | No error |
+------------+--------------------------+-----------------------------------------------------+
| 1 | INVALID_SIGNATURE | Invalid signature |
+------------+--------------------------+-----------------------------------------------------+
| 2 | NO_SIGNATURE | Missing signature |
+------------+--------------------------+-----------------------------------------------------+
| 3 | CANNOT_RETRIEVE_CERT | Cannot retrieve certificate |
+------------+--------------------------+-----------------------------------------------------+
| 4 | EXPIRED_CERT | Certificate expired |
+------------+--------------------------+-----------------------------------------------------+
| 5 | LOOP_DETECTED | Loop detected in certification chain |
+------------+--------------------------+-----------------------------------------------------+
| 6 | MALFORMED_CERT | Malformed certificate |
+------------+--------------------------+-----------------------------------------------------+
| 7 | EXCEEDED_DEPTH_LIMIT | Exceeded validation depth limit |
+------------+--------------------------+-----------------------------------------------------+
| 8 | INVALID_KEY_LOCATOR | Key locator violates validation policy |
+------------+--------------------------+-----------------------------------------------------+
| .. | ... | ... |
+------------+--------------------------+-----------------------------------------------------+
| 255 | IMPLEMENTATION_ERROR | Internal implementation error |
+------------+--------------------------+-----------------------------------------------------+
Specialized validator implementations can use error codes >= 256 to indicate a specialized error.
+49 -30
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
@@ -201,31 +199,38 @@ checkers:
Customized Checker
~~~~~~~~~~~~~~~~~~
The customized checker requires two properties: **sig-type**, **key-locator**. Both must
appear exactly once and are related to the ``SignatureInfo`` of a packet.
The customized checker can include optional **sig-type** property, which specifies the acceptable signature
type. If not specified, the checker will only accept ECDSA signature. Possible values for **sig-type** are:
- **ecdsa-sha256**: ECDSA signature required (default if **sig-type** not specified)
- **rsa-sha256**: RSA signature required
- **sha256** (not recommended, as it is not a real signature): SHA256 digest is required
If sig-type is **rsa-sha256** or **ecdsa-sha256**, the customized checker requires
**key-locator** property. If sig-type is **sha256**, **key-locator** property can be
specified, but is optional.
::
checker
{
type customized
sig-type ...
sig-type rsa-sha256
key-locator
{
...
}
}
The property **sig-type** specifies the acceptable signature type and can be
**rsa-sha256**, **ecdsa-sha256** (strong signature types), or **sha256** (weak signature
type). If sig-type is sha256, **key-locator** is ignored, and the validator will simply
calculate the digest of a packet and compare it with the one in ``SignatureValue``. If
sig-type is rsa-sha256 or ecdsa-sha256, you have to further customize the checker with
**key-locator**.
checker
{
type customized
sig-type sha256
}
The property **key-locator** specifies the conditions on ``KeyLocator``. If the
**key-locator** property is specified, it requires the existence of the ``KeyLocator``
field in ``SignatureInfo``. **key-locator** property only supports one type: **name**:
The **key-locator** property is a nested configuration property that can appear exactly once
and specifies conditions on ``KeyLocator``. It requires **type** property that currently
supports only one value: **name**.
::
@@ -235,9 +240,9 @@ field in ``SignatureInfo``. **key-locator** property only supports one type: **
...
}
This key-locator property specifies the conditions on the certificate name of the signing
key. Since the conditions are about name, they can be specified in the same way as the
name filter. For example, a checker can be:
``KeyLocator`` conditions can be specified in the same way as the name filter. For example, a
checker that requires ``SignatureSha256WithRsa`` signature type with ``KeyLocator`` to be exactly
``/ndn/edu/ucla/yingdi/KEY/1234`` can be written as follows:
::
@@ -253,13 +258,27 @@ name filter. For example, a checker can be:
}
}
This checker property requires that the packet must have a ``rsa-sha256`` signature that
can be verified with ``/ndn/edu/ucla/yingdi/KEY/1234`` key.
Similarly, a checker that requires ``SignatureSha256WithEcdsa`` signature with ``KeyLocator``
that follows a regular expression pattern ``<ndn><>*<KEY><>{1,3}`` can be written as follows:
Besides the two ways to express conditions on the ``KeyLocator`` name (name and regex),
you can further constrain the ``KeyLocator`` name using the information extracted from the
packet name. This third type of condition is expressed via a property
**hyper-relation**. The **hyper-relation** property consists of three parts:
::
checker
{
type customized
sig-type ecdsa-sha256
key-locator
{
type name
regex <ndn><>*<KEY><>{1,3}
relation equal
}
}
In addition, ``KeyLocator`` can be further constrained using information extracted from the
packet name using the **hyper-relation** property.
The **hyper-relation** property consists of three parts:
- an NDN regular expression that extracts information from the packet name
- an NDN regular expression that extracts information from the ``KeyLocator`` name
@@ -279,7 +298,7 @@ For example, a checker:
type name
hyper-relation
{
k-regex ^(<>*)<KEY><>$
k-regex ^(<>*)<KEY><>{1,3}$
k-expand \\1
h-relation is-prefix-of
p-regex ^(<>*)$
@@ -319,7 +338,7 @@ is equivalent to a customized checker:
type name
hyper-relation
{
k-regex ^(<>*)<KEY><>$
k-regex ^(<>*)<KEY><>{1,3}$
k-expand \\1
h-relation is-prefix-of
p-regex ^(<>*)$
@@ -377,9 +396,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).
::
+25 -25
View File
@@ -4,12 +4,12 @@ NDN Regular Expression
NDN regular expression is a kind of regular expression that can match NDN names. Matching is
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
<https://www.boost.org/doc/libs/1_58_0/libs/regex/doc/html/boost_regex/syntax/perl_syntax.html>`__.
A name component matcher, enclosed in ``<`` and ``>``, specifies the pattern of a name component.
The 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.
not match the 2nd component. A special case is that ``<>`` denotes a wildcard matcher that can
match **ANY** name component.
A component matcher can match only one name component. To match a name, you need to compose an NDN
regular expression with zero or more name component matchers. For example, ``<ndn><edu><ucla>``
@@ -31,8 +31,8 @@ name: ``/ndn/edu``.
Repetition
~~~~~~~~~~
A component matcher can be followed by a repeat quantifier to indicate how many times the preceding
component may appear.
A component matcher can be followed by a **repeat quantifier** to indicate how many times the
preceding component may appear.
The ``*`` quantifier denotes "zero or more times". For example, ``^<A><B>*<C>$`` matches ``/A/C``,
``/A/B/C``, ``/A/B/B/C``, and so on.
@@ -43,44 +43,44 @@ The ``+`` quantifier denotes "one or more times". For example, ``^<A><B>+<C>$``
The ``?`` quantifier denotes "zero or one time". For example, ``^<A><B>?<C>`` matches ``/A/C`` and
``/A/B/C``, but does not match ``/A/B/B/C``.
A bounded quantifier specifies a minimum and maximum number of permitted matches: ``{n}`` denotes
"exactly ``n`` times"; ``{n,}`` denotes "at least ``n`` times"; ``{,n}`` denotes "at most ``n``
times"; ``{n, m}`` denotes "between ``n`` and ``m`` times (inclusive)". For example,
``^<A><B>{2, 4}<C>$`` matches ``/A/B/B/C`` and ``/A/B/B/B/B/C``.
A **bounded quantifier** specifies either a minimum or a maximum number of permitted matches, or
both. ``{n}`` means "exactly ``n`` times"; ``{n,}`` means "at least ``n`` times"; ``{,n}`` means
"at most ``n`` times"; ``{m,n}`` (with ``m ≤ n``) means "between ``m`` and ``n`` times (inclusive)".
For example, ``^<A><B>{2,4}<C>$`` matches ``/A/B/B/C`` and ``/A/B/B/B/B/C``.
Note that the quantifiers are **greedy**, which means it will consume as many matched components as
possible. NDN regular expressions currently do not support non-greedy repeat matching and possessive
repeat matching. For example, for the name ``/A/B/C/C/C``, ``^<A><B><C>+$`` will match the entire
name instead of only ``/A/B/C``.
Note that the quantifiers are *greedy*, meaning that they will consume as many matching components
as possible. For example, for the name ``/A/B/C/C/C``, ``^<A><B><C>+`` will match the entire name
instead of only ``/A/B/C``. NDN regular expressions do not currently support non-greedy quantifiers
and possessive quantifiers.
Sets
~~~~
A name component set, denoted by a bracket expression starting with ``[`` and ending with ``]``,
A **name component set**, denoted by a bracket expression starting with ``[`` and ending with ``]``,
defines a set of name components. It matches any single name component that is a member of that set.
Unlike standard regular expressions, NDN regular expression only supports **Single Components Set**,
Unlike standard regular expressions, NDN regular expressions support only single components sets,
that is, you have to list all the set members one by one between the brackets. For example,
``^[<ndn><localhost>]`` matches any names starting with either ``ndn"`` or ``localhost`` component.
``^[<ndn><localhost>]`` matches any names starting with either ``ndn`` or ``localhost`` component.
When a name component set starts with a ``'^'``, the set becomes a **Negation Set**. It matches the
When a name component set starts with a ``'^'``, the set becomes a **negation set**. It matches the
complement of the contained name components. For example, ``^[^<ndn>]`` matches any non-empty name
that does not start with ``ndn`` component.
that does *not* start with ``/ndn``.
Some other types of sets, such as Range Set, will be supported later.
Some other types of sets, such as range sets, will be supported later.
Note that component sets may be repeated in the same way as component matchers.
Sub-pattern and Back Reference
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
A section beginning ``(`` and ending ``)`` acts as a marked sub-pattern. Whatever matched the
A section beginning ``(`` and ending ``)`` acts as a **marked sub-pattern**. Whatever matched the
sub-pattern is split out in a separate field by the matching algorithm. For example
``^<A>(<>{2})<B>(<>)`` matches the name ``/A/C/D/B/E``, and the first sub-pattern captures ``C/D``.
Marked sub-patterns can be referred to by a back-reference ``\N``, which references one or more
capturing groups. In the example above, a back reference ``\1\2`` extracts ``/C/D/E`` out of the
name.
Marked sub-patterns can be referred to by a **back-reference** of the form ``\N``, which references
one or more capturing groups. In the example above, a back reference ``\1\2`` extracts ``/C/D/E``
out of the name.
Marked sub-patterns can also be repeated. The regex engine does not permanently substitute
back-references in a regular expression, but will use the last match saved into the back-reference.
+37 -24
View File
@@ -1,22 +1,22 @@
ndn-cxx examples
================
# ndn-cxx examples
By default, examples in `examples/` folder are not built. To enable them, use
By default, the examples in `examples/` folder are not built. To enable them, use
`--with-examples` configure option. For example:
./waf configure --with-examples
./waf
There are two ways to add new examples, depending on their complexity:
There are two ways to add new examples, depending on their complexity.
1. Examples with a single translation unit
1. **Examples with a single translation unit**
For simple examples that have a single translation unit, the `.cpp` file can be directly put
in `examples/` folder and it will be automatically compiled on the next run of `./waf`. Name
of the compiled binary will be determined by the base name of the `.cpp` file. For example,
`examples/foo.cpp` will be compiled into binary `foo` in `<build>/examples` folder:
For simple examples that have a single translation unit, the `.cpp` file can be directly put
in the `examples/` folder and it will be automatically compiled on the next run of `./waf`.
The name of the compiled executable will be determined by the base name of the `.cpp` file.
For instance, `examples/foo.cpp` will be compiled into an executable named `foo` inside the
`build/examples` folder:
echo "int main() { return 0; }" > examples/foo.cpp
echo 'int main() { return 0; }' > examples/foo.cpp
./waf
# ... Compiling examples/foo.cpp
# ... Linking build/examples/foo
@@ -24,25 +24,23 @@ There are two ways to add new examples, depending on their complexity:
# To run the example
./build/examples/foo
2. Examples with multiple translation units
2. **Examples with multiple translation units**
For more complex examples that contain multiple translation units, one can use
the following directory structure:
For more complex examples that contain multiple translation units, one can use
the following directory structure:
- Create a directory under `examples/` folder (e.g., `examples/bar`).
The name of this directory will determine the name of the compiled binary
(`<build>/examples/bar/bar`)
- Create a directory under the `examples/` folder (e.g., `examples/bar`). The name of this
directory will determine the name of the compiled executable (`build/examples/bar/bar`).
- Place any number of translation units (e.g., `examples/bar/a.cpp`, `examples/bar/b.cpp`,
...) in this directory. All `.cpp` files in this directory will be compiled and linked
together to produce the binary executable of the example. One of the .cpp files must
contain the `main()` function.
- Place any number of translation units (e.g., `examples/bar/a.cpp`, `examples/bar/b.cpp`,
...) in this directory. All `.cpp` files in this directory will be compiled and linked
together to produce the binary of the example. One of the .cpp files should contain
the `main()` function.
For example:
For example:
mkdir examples/bar
echo "int bar(); int main() { return bar(); }" > examples/bar/a.cpp
echo "int bar() { return 10; } " > examples/bar/b.cpp
echo 'int bar(); int main() { return bar(); }' > examples/bar/a.cpp
echo 'int bar() { return 10; }' > examples/bar/b.cpp
./waf
# ... Compiling examples/bar/a.cpp
# ... Compiling examples/bar/b.cpp
@@ -50,3 +48,18 @@ There are two ways to add new examples, depending on their complexity:
# To run the example
./build/examples/bar/bar
## Security configuration for example apps
In order for the ``consumer`` example app to be able to properly authenticate data packets
created by the ``producer`` app, you must configure the following parameters.
1. Generate example trust anchor:
ndnsec key-gen /example
ndnsec cert-dump -i /example > example-trust-anchor.cert
2. Create a key for the producer and sign it with the example trust anchor:
ndnsec key-gen /example/testApp
ndnsec sign-req /example/testApp | ndnsec cert-gen -s /example -i example | ndnsec cert-install -
+38 -41
View File
@@ -1,6 +1,6 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/*
* Copyright (c) 2013-2018 Regents of the University of California.
* Copyright (c) 2013-2023 Regents of the University of California.
*
* This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
*
@@ -17,49 +17,43 @@
* <http://www.gnu.org/licenses/>.
*
* See AUTHORS.md for complete list of ndn-cxx authors and contributors.
*
* @author Alexander Afanasyev <http://lasr.cs.ucla.edu/afanasyev/index.html>
*/
#include <ndn-cxx/face.hpp>
#include <ndn-cxx/util/scheduler.hpp>
#include <boost/asio/io_service.hpp>
#include <boost/asio/io_context.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
{
public:
ConsumerWithTimer()
: m_face(m_ioService) // Create face with io_service object
, m_scheduler(m_ioService)
{
}
void
run()
{
Interest interest(Name("/example/testApp/randomData"));
interest.setInterestLifetime(2_s); // 2 seconds
Name interestName("/example/testApp/randomData");
interestName.appendVersion();
Interest interest(interestName);
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;
std::bind(&ConsumerWithTimer::onData, this, _1, _2),
std::bind(&ConsumerWithTimer::onNack, this, _1, _2),
std::bind(&ConsumerWithTimer::onTimeout, this, _1));
// Schedule a new event
m_scheduler.scheduleEvent(3_s, [this] { delayedInterest(); });
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();
// m_ioCtx.run() will block until all events finished or m_ioCtx.stop() is called
m_ioCtx.run();
// Alternatively, m_face.processEvents() can also be called.
// processEvents will block until the requested data received or timeout occurs.
@@ -68,22 +62,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
@@ -91,23 +85,25 @@ private:
{
std::cout << "One more Interest, delayed by the scheduler" << std::endl;
Interest interest(Name("/example/testApp/randomData"));
interest.setInterestLifetime(2_s); // 2 seconds
Name interestName("/example/testApp/randomData");
interestName.appendVersion();
Interest interest(interestName);
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;
std::bind(&ConsumerWithTimer::onData, this, _1, _2),
std::bind(&ConsumerWithTimer::onNack, this, _1, _2),
std::bind(&ConsumerWithTimer::onTimeout, this, _1));
}
private:
// Explicitly create io_service object, which can be shared between Face and Scheduler
boost::asio::io_service m_ioService;
Face m_face;
Scheduler m_scheduler;
// Explicitly create io_context object, which will be shared between Face and Scheduler
boost::asio::io_context m_ioCtx;
Face m_face{m_ioCtx};
Scheduler m_scheduler{m_ioCtx};
};
} // namespace examples
@@ -116,12 +112,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;
}
+37 -22
View File
@@ -1,6 +1,6 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/*
* Copyright (c) 2013-2018 Regents of the University of California.
* Copyright (c) 2013-2022 Regents of the University of California.
*
* This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
*
@@ -17,62 +17,76 @@
* <http://www.gnu.org/licenses/>.
*
* See AUTHORS.md for complete list of ndn-cxx authors and contributors.
*
* @author Alexander Afanasyev <http://lasr.cs.ucla.edu/afanasyev/index.html>
*/
#include <ndn-cxx/face.hpp>
#include <ndn-cxx/security/validator-config.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:
Consumer()
{
m_validator.load("trust-schema.conf");
}
void
run()
{
Interest interest(Name("/example/testApp/randomData"));
interest.setInterestLifetime(2_s); // 2 seconds
Name interestName("/example/testApp/randomData");
interestName.appendVersion();
Interest interest(interestName);
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::bind(&Consumer::onData, this, _1, _2),
std::bind(&Consumer::onNack, this, _1, _2),
std::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)
{
std::cout << data << std::endl;
std::cout << "Received Data " << data << std::endl;
m_validator.validate(data,
[] (const Data&) {
std::cout << "Data conforms to trust schema" << std::endl;
},
[] (const Data&, const security::ValidationError& error) {
std::cout << "Error authenticating data: " << error << 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:
Face m_face;
ValidatorConfig m_validator{m_face};
};
} // namespace examples
@@ -81,12 +95,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;
}
+44 -32
View File
@@ -1,6 +1,6 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/*
* Copyright (c) 2013-2018 Regents of the University of California.
* Copyright (c) 2013-2023 Regents of the University of California.
*
* This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
*
@@ -17,76 +17,87 @@
* <http://www.gnu.org/licenses/>.
*
* See AUTHORS.md for complete list of ndn-cxx authors and contributors.
*
* @author Alexander Afanasyev <http://lasr.cs.ucla.edu/afanasyev/index.html>
*/
#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
run()
{
m_face.setInterestFilter("/example/testApp",
bind(&Producer::onInterest, this, _1, _2),
RegisterPrefixSuccessCallback(),
bind(&Producer::onRegisterFailed, this, _1, _2));
m_face.setInterestFilter("/example/testApp/randomData",
std::bind(&Producer::onInterest, this, _2),
nullptr, // RegisterPrefixSuccessCallback is optional
std::bind(&Producer::onRegisterFailed, this, _1, _2));
auto cert = m_keyChain.getPib().getDefaultIdentity().getDefaultKey().getDefaultCertificate();
m_certServeHandle = m_face.setInterestFilter(security::extractIdentityFromCertName(cert.getName()),
[this, cert] (auto&&...) {
m_face.put(cert);
},
std::bind(&Producer::onRegisterFailed, this, _1, _2));
m_face.processEvents();
}
private:
void
onInterest(const InterestFilter& filter, const Interest& interest)
onInterest(const Interest& interest)
{
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";
std::cout << ">> I: " << interest << std::endl;
// Create Data packet
shared_ptr<Data> data = make_shared<Data>();
data->setName(dataName);
data->setFreshnessPeriod(10_s); // 10 seconds
data->setContent(reinterpret_cast<const uint8_t*>(content.data()), content.size());
auto data = std::make_shared<Data>();
data->setName(interest.getName());
data->setFreshnessPeriod(10_s);
data->setContent("Hello, world!");
// In order for the consumer application to be able to validate the packet, you need to setup
// the following keys:
// 1. Generate example trust anchor
//
// ndnsec key-gen /example
// ndnsec cert-dump -i /example > example-trust-anchor.cert
//
// 2. Create a key for the producer and sign it with the example trust anchor
//
// ndnsec key-gen /example/testApp
// ndnsec sign-req /example/testApp | ndnsec cert-gen -s /example -i example | ndnsec cert-install -
// 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 << ")\n";
m_face.shutdown();
}
private:
Face m_face;
KeyChain m_keyChain;
ScopedRegisteredPrefixHandle m_certServeHandle;
};
} // namespace examples
@@ -95,12 +106,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;
}
Loaded 100 of 769 files, more files were not shown because too many files have changed in this diff. Show more