aboutsummaryrefslogtreecommitdiffstats
path: root/libccnx-portal/ccnx/api/ccnx_Portal/ccnx_PortalAnchor.c
diff options
context:
space:
mode:
authorLuca Muscariello <lumuscar+fdio@cisco.com>2017-02-23 20:44:26 +0100
committerLuca Muscariello <lumuscar+fdio@cisco.com>2017-02-23 19:51:14 +0000
commitd18ae43123fcd7604d1c36a1ec8450dbe6071824 (patch)
tree2d49fc3aabd0f2607251c854565648d47b56b2e9 /libccnx-portal/ccnx/api/ccnx_Portal/ccnx_PortalAnchor.c
parent9b30fc10fb1cbebe651e5a107e8ca5b24de54675 (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/ccnx_PortalAnchor.c')
-rw-r--r--libccnx-portal/ccnx/api/ccnx_Portal/ccnx_PortalAnchor.c258
1 files changed, 258 insertions, 0 deletions
diff --git a/libccnx-portal/ccnx/api/ccnx_Portal/ccnx_PortalAnchor.c b/libccnx-portal/ccnx/api/ccnx_Portal/ccnx_PortalAnchor.c
new file mode 100644
index 00000000..3155823a
--- /dev/null
+++ b/libccnx-portal/ccnx/api/ccnx_Portal/ccnx_PortalAnchor.c
@@ -0,0 +1,258 @@
+/*
+ * 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 <config.h>
+#include <stdio.h>
+
+#include <parc/algol/parc_Object.h>
+#include <parc/algol/parc_DisplayIndented.h>
+#include <parc/algol/parc_Memory.h>
+#include <parc/algol/parc_Time.h>
+
+#include <ccnx/api/ccnx_Portal/ccnx_PortalAnchor.h>
+
+struct CCNxPortalAnchor {
+ CCNxName *prefix;
+ time_t expireTime;
+};
+
+static bool
+_ccnxPortalAnchor_Destructor(CCNxPortalAnchor **instancePtr)
+{
+ assertNotNull(instancePtr, "Parameter must be a non-null pointer to a CCNxPortalAnchor pointer.");
+ CCNxPortalAnchor *instance = *instancePtr;
+
+ ccnxName_Release(&instance->prefix);
+
+ /* cleanup the instance fields here */
+ return true;
+}
+
+parcObject_ImplementAcquire(ccnxPortalAnchor, CCNxPortalAnchor);
+
+parcObject_ImplementRelease(ccnxPortalAnchor, CCNxPortalAnchor);
+
+#define parcObject_OverrideCopy(_name_) .copy = (PARCObjectCopy *) _name_
+parcObject_Override(CCNxPortalAnchor, PARCObject,
+ parcObject_OverrideCopy(ccnxPortalAnchor_Copy),
+ .toString = (PARCObjectToString *) ccnxPortalAnchor_ToString,
+ .equals = (PARCObjectEquals *) ccnxPortalAnchor_Equals,
+ .compare = (PARCObjectCompare *) ccnxPortalAnchor_Compare,
+ .hashCode = (PARCObjectHashCode *) ccnxPortalAnchor_HashCode,
+ .toJSON = (PARCObjectToJSON *) ccnxPortalAnchor_ToJSON,
+ .display = (PARCObjectDisplay *) ccnxPortalAnchor_Display,
+ .destructor = (PARCObjectDestructor *) _ccnxPortalAnchor_Destructor
+ );
+
+void
+ccnxPortalAnchor_AssertValid(const CCNxPortalAnchor *instance)
+{
+ assertTrue(ccnxPortalAnchor_IsValid(instance),
+ "CCNxPortalAnchor is not valid.");
+}
+
+
+CCNxPortalAnchor *
+ccnxPortalAnchor_Create(const CCNxName *name, time_t expireTime)
+{
+ CCNxPortalAnchor *result = parcObject_CreateInstance(CCNxPortalAnchor);
+
+ if (result != NULL) {
+ result->prefix = ccnxName_Acquire(name);
+ result->expireTime = expireTime;
+ }
+
+ return result;
+}
+
+CCNxPortalAnchor *
+ccnxPortalAnchor_CreateFromJSON(const PARCJSON *json)
+{
+ CCNxPortalAnchor *result = parcObject_CreateInstance(CCNxPortalAnchor);
+
+ if (result != NULL) {
+ result->prefix = ccnxName_CreateFromCString(parcBuffer_Overlay(parcJSONValue_GetString(parcJSON_GetByPath(json, "/namePrefix")), 0));
+ result->expireTime = parcJSONValue_GetInteger(parcJSON_GetByPath(json, "/expireTime"));
+
+ ccnxPortalAnchor_OptionalAssertValid(result);
+ }
+
+ return result;
+}
+
+int
+ccnxPortalAnchor_Compare(const CCNxPortalAnchor *instance, const CCNxPortalAnchor *other)
+{
+ int result = 0;
+
+ return result;
+}
+
+CCNxPortalAnchor *
+ccnxPortalAnchor_Copy(const CCNxPortalAnchor *original)
+{
+ CCNxName *prefixCopy = ccnxName_Copy(original->prefix);
+ CCNxPortalAnchor *result = ccnxPortalAnchor_Create(prefixCopy, original->expireTime);
+ ccnxName_Release(&prefixCopy);
+
+ return result;
+}
+
+void
+ccnxPortalAnchor_Display(const CCNxPortalAnchor *anchor, int indentation)
+{
+ char *prefix = ccnxName_ToString(anchor->prefix);
+
+ parcDisplayIndented_PrintLine(indentation, "CCNxPortalAnchor@%p {", anchor);
+ parcDisplayIndented_PrintLine(indentation + 1, ".prefix=%s}", prefix);
+ parcDisplayIndented_PrintLine(indentation + 1, ".expireTime=%ld", anchor->expireTime);
+
+ /* Call Display() functions for the fields here. */
+ parcDisplayIndented_PrintLine(indentation, "}");
+ parcMemory_Deallocate(&prefix);
+}
+
+bool
+ccnxPortalAnchor_Equals(const CCNxPortalAnchor *x, const CCNxPortalAnchor *y)
+{
+ bool result = false;
+
+ if (x == y) {
+ result = true;
+ } else if (x == NULL || y == NULL) {
+ result = false;
+ } else {
+ if (ccnxName_Equals(x->prefix, y->prefix)) {
+ if (x->expireTime == y->expireTime) {
+ result = true;
+ }
+ }
+ }
+
+ return result;
+}
+
+PARCHashCode
+ccnxPortalAnchor_HashCode(const CCNxPortalAnchor *instance)
+{
+ PARCHashCode result = 0;
+
+ return result;
+}
+
+bool
+ccnxPortalAnchor_IsValid(const CCNxPortalAnchor *instance)
+{
+ bool result = false;
+
+ if (instance != NULL) {
+ result = true;
+ }
+
+ return result;
+}
+
+PARCJSON *
+ccnxPortalAnchor_ToJSON(const CCNxPortalAnchor *anchor)
+{
+ ccnxPortalAnchor_OptionalAssertValid(anchor);
+
+ PARCJSON *result = parcJSON_Create();
+ if (result != NULL) {
+ char *prefix = ccnxName_ToString(anchor->prefix);
+
+ parcJSON_AddString(result, "namePrefix", prefix);
+ parcJSON_AddInteger(result, "expireTime", (int64_t) anchor->expireTime);
+
+ parcMemory_Deallocate(&prefix);
+ }
+
+ return result;
+}
+
+PARCBufferComposer *
+ccnxPortalAnchor_BuildString(const CCNxPortalAnchor *anchor, PARCBufferComposer *composer)
+{
+ char *name = ccnxName_ToString(anchor->prefix);
+
+ char expireTime[64];
+ if (anchor->expireTime == -1) {
+ strcpy(expireTime, " never");
+ } else {
+ parcTime_TimeAsRFC3339(anchor->expireTime, expireTime);
+ }
+ parcBufferComposer_Format(composer, "{ %s %s }", name, expireTime);
+
+ parcMemory_Deallocate(&name);
+
+ return composer;
+}
+
+char *
+ccnxPortalAnchor_ToString(const CCNxPortalAnchor *anchor)
+{
+ ccnxPortalAnchor_OptionalAssertValid(anchor);
+
+ PARCBufferComposer *composer = parcBufferComposer_Create();
+ ccnxPortalAnchor_BuildString(anchor, composer);
+ char *result = parcBufferComposer_ToString(composer);
+ parcBufferComposer_Release(&composer);
+
+ return result;
+}
+
+CCNxPortalAnchor *
+ccnxPortalAnchor_Deserialize(PARCBuffer *buffer)
+{
+ PARCJSON *json = parcJSON_ParseBuffer(buffer);
+
+ CCNxPortalAnchor *result = ccnxPortalAnchor_CreateFromJSON(json);
+ parcJSON_Release(&json);
+ return result;
+}
+
+PARCBufferComposer *
+ccnxPortalAnchor_Serialize(const CCNxPortalAnchor *namePrefix, PARCBufferComposer *composer)
+{
+ PARCJSON *json = ccnxPortalAnchor_ToJSON(namePrefix);
+
+ char *string = parcJSON_ToString(json);
+ parcBufferComposer_PutString(composer, string);
+ parcMemory_Deallocate(&string);
+ parcJSON_Release(&json);
+ return composer;
+}
+
+CCNxName *
+ccnxPortalAnchor_GetNamePrefix(const CCNxPortalAnchor *anchor)
+{
+ return anchor->prefix;
+}
+
+time_t
+ccnxPortalAnchor_GetExpireTime(const CCNxPortalAnchor *anchor)
+{
+ return anchor->expireTime;
+}
+
+time_t
+ccnxPortalAnchor_SetExpireTime(CCNxPortalAnchor *anchor, const time_t expireTime)
+{
+ time_t previousExpireTime = anchor->expireTime;
+ anchor->expireTime = expireTime;
+ return previousExpireTime;
+}