diff options
author | Luca Muscariello <lumuscar+fdio@cisco.com> | 2017-02-23 20:44:26 +0100 |
---|---|---|
committer | Luca Muscariello <lumuscar+fdio@cisco.com> | 2017-02-23 19:51:14 +0000 |
commit | d18ae43123fcd7604d1c36a1ec8450dbe6071824 (patch) | |
tree | 2d49fc3aabd0f2607251c854565648d47b56b2e9 /libccnx-portal/ccnx/api/ccnx_Portal/command-line/ccnx-portal-read.c | |
parent | 9b30fc10fb1cbebe651e5a107e8ca5b24de54675 (diff) |
Initial commit: ccnxlibs.
Change-Id: I1b376527a7dd01a6b9e083a6cb646955902f45c0
Signed-off-by: Luca Muscariello <lumuscar+fdio@cisco.com>
Diffstat (limited to 'libccnx-portal/ccnx/api/ccnx_Portal/command-line/ccnx-portal-read.c')
-rw-r--r-- | libccnx-portal/ccnx/api/ccnx_Portal/command-line/ccnx-portal-read.c | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/libccnx-portal/ccnx/api/ccnx_Portal/command-line/ccnx-portal-read.c b/libccnx-portal/ccnx/api/ccnx_Portal/command-line/ccnx-portal-read.c new file mode 100644 index 00000000..215d9019 --- /dev/null +++ b/libccnx-portal/ccnx/api/ccnx_Portal/command-line/ccnx-portal-read.c @@ -0,0 +1,136 @@ +/* + * Copyright (c) 2017 Cisco and/or its affiliates. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include <stdio.h> + +#include <LongBow/runtime.h> + +#include <ccnx/api/ccnx_Portal/ccnx_Portal.h> + +#include <parc/security/parc_Security.h> +#include <parc/security/parc_PublicKeySignerPkcs12Store.h> +#include <parc/security/parc_IdentityFile.h> + +#include <ccnx/common/ccnx_Name.h> +#include <ccnx/common/ccnx_SignedInfo.h> +#include <ccnx/common/ccnx_ContentObject.h> +#include <ccnx/common/ccnx_TimeStamp.h> + +PARCIdentity * +getIdentity_FromFile(const char *keystoreFileName, const char *password) +{ + PARCIdentity *result = NULL; + + PARCIdentityFile *identityFile = parcIdentityFile_Create(keystoreFileName, password); + if (identityFile != NULL) { + result = parcIdentity_Create(identityFile, PARCIdentityFileAsPARCIdentity); + parcIdentityFile_Release(&identityFile); + } + + return result; +} + +int +reader_writer(CCNxPortalFactory *factory, const char *uri) +{ + CCNxPortal *portal = ccnxPortalFactory_GetInstance(factory, ccnxPortalTypeDatagram, ccnxPortalProtocol_TLV, &ccnxPortalAttributes_Blocking); + + CCNxName *prefix = ccnxName_CreateFromURI(uri); + CCNxName *bye = ccnxName_CreateFromURI("lci:/Hello/Goodbye%21"); + CCNxName *contentname = ccnxName_CreateFromURI("lci:/Hello/World"); + + if (ccnxPortal_Listen(portal, prefix, 365 * 86400, CCNxStackTimeout_Never)) { + CCNxMetaMessage *msg; + + while ((msg = ccnxPortal_Receive(portal, CCNxStackTimeout_Never)) != NULL) { + if (ccnxMetaMessage_IsInterest(msg)) { + CCNxInterest *interest = ccnxMetaMessage_GetInterest(msg); + + CCNxName *interestName = ccnxInterest_GetName(interest); + + if (ccnxName_Equals(interestName, contentname)) { + const PARCKeyId *publisherKeyId = ccnxPortal_GetKeyId(portal); + + char buffer[128]; + time_t theTime = time(0); + sprintf(buffer, "Hello World. The time is %s", ctime(&theTime)); + + PARCBuffer *payload = parcBuffer_CreateFromArray(buffer, 128); + parcBuffer_Flip(payload); + + PARCBuffer *b = parcBuffer_Acquire(payload); + CCNxContentObject *uob = ccnxContentObject_CreateWithNameAndPayload(contentname, b); + + // missing NULL check, case 1024 + + CCNxMetaMessage *message = ccnxMetaMessage_CreateFromContentObject(uob); + if (ccnxPortal_Send(portal, message, CCNxTransportStackTimeCCNxStackTimeout_Neverout_Never) == false) { + fprintf(stderr, "ccnx_write failed\n"); + } + // ccnxMessage_Release(message); + } else if (ccnxName_Equals(interestName, bye)) { + break; + } + } else { + ccnxMetaMessage_Display(msg, 0); + } + ccnxMetaMessage_Release(&msg); + } + } + + ccnxName_Release(&prefix); + ccnxName_Release(&bye); + ccnxName_Release(&contentname); + + ccnxPortal_Release(&portal); + + return 0; +} + +int +ccnx_Portal_Reader(char *keystoreFileName, const char *password, const char *uri) +{ + parcSecurity_Init(); + + PARCIdentity *identity = getIdentity_FromFile(keystoreFileName, password); + + if (identity != NULL) { + CCNxPortalFactory *factory = ccnxPortalFactory_Create(identity); + + reader_writer(factory, uri); + + ccnxPortalFactory_Release(&factory); + parcIdentity_Release(&identity); + } + + parcSecurity_Fini(); + + return 0; +} + +int +main(int argc, char *argv[argc]) +{ + char *keystoreFileName = argv[1]; + char *password = argv[2]; + char *uri = argv[3]; + + keystoreFileName = "/tmp/keystore"; + password = "password"; + uri = "lci:/Hello"; + + // read fileName password lci://my/name lci + return ccnx_Portal_Reader(keystoreFileName, password, uri); +} |