aboutsummaryrefslogtreecommitdiffstats
path: root/icnet/ccnx/icnet_ccnx_content_object.cc
diff options
context:
space:
mode:
Diffstat (limited to 'icnet/ccnx/icnet_ccnx_content_object.cc')
-rw-r--r--icnet/ccnx/icnet_ccnx_content_object.cc202
1 files changed, 202 insertions, 0 deletions
diff --git a/icnet/ccnx/icnet_ccnx_content_object.cc b/icnet/ccnx/icnet_ccnx_content_object.cc
new file mode 100644
index 00000000..1a7fa3c6
--- /dev/null
+++ b/icnet/ccnx/icnet_ccnx_content_object.cc
@@ -0,0 +1,202 @@
+/*
+ * 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 "icnet_ccnx_content_object.h"
+
+extern "C" {
+#include <ccnx/common/ccnx_WireFormatMessage.h>
+};
+
+namespace icnet {
+
+namespace ccnx {
+
+ContentObject::ContentObject()
+ : name_(ccnxName_Create()),
+ ccnx_content_object_(ccnxContentObject_CreateWithNameAndPayload(name_.getWrappedStructure(), NULL)),
+ content_type_(PayloadType::DATA) {
+}
+
+ContentObject::ContentObject(const Name &name, uint8_t *payload, std::size_t size)
+ : name_(name), content_type_(PayloadType::DATA) {
+ PARCBuffer *buffer = parcBuffer_CreateFromArray(payload, size);
+ buffer = parcBuffer_Flip(buffer);
+ ccnx_content_object_ = ccnxContentObject_CreateWithNameAndPayload(name.getWrappedStructure(), buffer);
+ parcBuffer_Release(&buffer);
+}
+
+ContentObject::ContentObject(const CCNxContentObjectStructure *content_object) : name_(ccnxContentObject_GetName(
+ content_object)),
+ ccnx_content_object_(
+ ccnxContentObject_Acquire(
+ content_object)),
+ content_type_((PayloadType) ccnxContentObject_GetPayloadType(
+ content_object)) {
+}
+
+ContentObject::ContentObject(const Name &name)
+ : name_(name),
+ ccnx_content_object_(ccnxContentObject_CreateWithNameAndPayload(name.getWrappedStructure(), NULL)),
+ content_type_(PayloadType::DATA) {
+}
+
+ContentObject::ContentObject(Name &&name)
+ : name_(std::move(name)),
+ ccnx_content_object_(ccnxContentObject_CreateWithNameAndPayload(name.getWrappedStructure(), NULL)),
+ content_type_(PayloadType::DATA) {
+}
+
+ContentObject::~ContentObject() {
+ ccnxContentObject_Release(&ccnx_content_object_);
+}
+
+bool ContentObject::operator==(const ContentObject &content_object) {
+ return ccnxContentObject_Equals(ccnx_content_object_, content_object.ccnx_content_object_);
+}
+
+PayloadType ContentObject::getContentType() const {
+ return (PayloadType) ccnxContentObject_GetPayloadType(ccnx_content_object_);
+}
+
+void ContentObject::setContentType(PayloadType payload_type) {
+ content_type_ = payload_type;
+}
+
+bool ContentObject::setContent(PayloadType content_type, const uint8_t *buffer, size_t buffer_size) {
+ content_type_ = content_type;
+ return setContent(buffer, buffer_size);
+}
+
+bool ContentObject::setContent(const uint8_t *buffer, size_t buffer_size) {
+ bool ret;
+ PARCBuffer *parc_buffer = parcBuffer_CreateFromArray(buffer, buffer_size);
+ parc_buffer = parcBuffer_Flip(parc_buffer);
+
+ if (content_type_ != PayloadType::DATA) {
+ ret = ccnxContentObject_SetPayload(ccnx_content_object_, (CCNxPayloadType) content_type_, parc_buffer);
+ } else {
+ ret = ccnxContentObject_SetPayload(ccnx_content_object_, (CCNxPayloadType) PayloadType::DATA, parc_buffer);
+ }
+
+ parcBuffer_Release(&parc_buffer);
+
+ return ret;
+}
+
+Array ContentObject::getContent() const {
+ PARCBuffer *buffer = ccnxContentObject_GetPayload(ccnx_content_object_);
+ return Array(parcBuffer_Overlay(buffer, 0), parcBuffer_Remaining(buffer));
+}
+
+void ContentObject::setSignature() {
+
+}
+
+void ContentObject::signWithSha256(KeyLocator &key_locator) {
+ // ccnxValidationCRC32C_Set(ccnx_content_object_);
+}
+
+void ContentObject::setFinalChunkNumber(uint64_t final_chunk_number) {
+ ccnxContentObject_SetFinalChunkNumber(ccnx_content_object_, final_chunk_number);
+}
+
+bool ContentObject::hasFinalChunkNumber() {
+ return ccnxContentObject_HasFinalChunkNumber(ccnx_content_object_);
+}
+
+uint64_t ContentObject::getFinalChunkNumber() {
+ return ccnxContentObject_GetFinalChunkNumber(ccnx_content_object_);
+}
+
+void ContentObject::setExpiryTime(uint64_t expiry_time) {
+ std::chrono::milliseconds
+ ms = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch());
+ uint64_t expiration = ms.count() + expiry_time;
+ ccnxContentObject_SetExpiryTime(ccnx_content_object_, expiration);
+}
+
+uint64_t ContentObject::getExpiryTime() {
+ return ccnxContentObject_GetExpiryTime(ccnx_content_object_);
+}
+
+const Name &ContentObject::getName() const {
+ return name_;
+}
+
+std::size_t ContentObject::getPacketSize() const {
+ PARCBuffer *packet = ccnxWireFormatMessage_GetWireFormatBuffer(ccnx_content_object_);
+ std::size_t ret = parcBuffer_Remaining(packet);
+ return ret;
+}
+
+void ContentObject::setName(const Name &name) {
+ PARCBuffer *buffer = parcBuffer_Acquire(ccnxContentObject_GetPayload(ccnx_content_object_));
+ ccnxContentObject_Release(&ccnx_content_object_);
+ ccnx_content_object_ = ccnxContentObject_CreateWithNameAndPayload(name.getWrappedStructure(), buffer);
+ parcBuffer_Release(&buffer);
+ name_ = std::move(name);
+}
+
+void ContentObject::setName(Name &&name) {
+ PARCBuffer *buffer = parcBuffer_Acquire(ccnxContentObject_GetPayload(ccnx_content_object_));
+ ccnxContentObject_Release(&ccnx_content_object_);
+ ccnx_content_object_ = ccnxContentObject_CreateWithNameAndPayload(name.getWrappedStructure(), buffer);
+ parcBuffer_Release(&buffer);
+ name_ = std::move(name);
+}
+
+CCNxContentObjectStructure *ContentObject::getWrappedStructure() {
+ return ccnx_content_object_;
+}
+
+uint8_t ContentObject::getPathLabel() const {
+ if (ccnxContentObject_HasPathLabel(ccnx_content_object_)) {
+ return (uint8_t) ccnxContentObject_GetPathLabel(ccnx_content_object_);
+ }
+
+ return 0;
+}
+
+Array::Array(const void *array, size_t size) {
+ this->array_ = array;
+ this->size_ = size;
+}
+
+Array::Array() {
+ this->array_ = nullptr;
+ this->size_ = 0;
+}
+
+const void *Array::data() {
+ return array_;
+}
+
+std::size_t Array::size() {
+ return size_;
+}
+
+Array &Array::setData(const void *data) {
+ array_ = data;
+ return *this;
+}
+
+Array &Array::setSize(std::size_t size) {
+ size_ = size;
+ return *this;
+}
+
+} // end namespace ccnx
+
+} // end namespace icnet