aboutsummaryrefslogtreecommitdiffstats
path: root/libccnx-transport-rta/ccnx/api/control/cpi_CancelFlow.c
diff options
context:
space:
mode:
authorMichele Papalini <micpapal+fdio@cisco.com>2017-02-24 08:00:13 +0000
committerGerrit Code Review <gerrit@fd.io>2017-02-24 08:00:13 +0000
commit6d4b6878ceff22f9ec8d8e9423214f9666007472 (patch)
treefa27e0c747676519cb87ff8448bfed62fce5009d /libccnx-transport-rta/ccnx/api/control/cpi_CancelFlow.c
parentf28308bd99381ef5f1e178e2e1f870f245e35873 (diff)
parentd18ae43123fcd7604d1c36a1ec8450dbe6071824 (diff)
Merge "Initial commit: ccnxlibs." into ccnxlibs/master
Diffstat (limited to 'libccnx-transport-rta/ccnx/api/control/cpi_CancelFlow.c')
-rw-r--r--libccnx-transport-rta/ccnx/api/control/cpi_CancelFlow.c100
1 files changed, 100 insertions, 0 deletions
diff --git a/libccnx-transport-rta/ccnx/api/control/cpi_CancelFlow.c b/libccnx-transport-rta/ccnx/api/control/cpi_CancelFlow.c
new file mode 100644
index 00000000..4898282b
--- /dev/null
+++ b/libccnx-transport-rta/ccnx/api/control/cpi_CancelFlow.c
@@ -0,0 +1,100 @@
+/*
+ * 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 <string.h>
+
+#include <LongBow/runtime.h>
+
+#include <ccnx/api/control/controlPlaneInterface.h>
+#include <ccnx/api/control/cpi_CancelFlow.h>
+#include <parc/algol/parc_Memory.h>
+
+static const char *cpiCancelFlow = "CPI_CANCEL_FLOW";
+static const char *cpiFlowName = "FLOW_NAME";
+
+PARCJSON *
+cpiCancelFlow_CreateRequest(const CCNxName *name)
+{
+ PARCJSON *operation = parcJSON_Create();
+
+ char *uri = ccnxName_ToString(name);
+ parcJSON_AddString(operation, cpiFlowName, uri);
+ parcMemory_Deallocate((void **) &uri);
+
+ PARCJSON *result = cpi_CreateRequest(cpiCancelFlow, operation);
+ parcJSON_Release(&operation);
+
+ return result;
+}
+
+PARCJSON *
+cpiCancelFlow_Create(const CCNxName *name)
+{
+ PARCJSON *operation = parcJSON_Create();
+
+ char *uri = ccnxName_ToString(name);
+ parcJSON_AddString(operation, cpiFlowName, uri);
+ parcMemory_Deallocate((void **) &uri);
+
+ PARCJSON *result = cpi_CreateRequest(cpiCancelFlow, operation);
+ parcJSON_Release(&operation);
+
+ return result;
+}
+
+CCNxName *
+cpiCancelFlow_GetFlowName(const PARCJSON *controlMessage)
+{
+ assertNotNull(controlMessage, "Parameter controlMessage must be non-null");
+
+ PARCJSONValue *value = parcJSON_GetValueByName(controlMessage, cpiRequest_GetJsonTag());
+ assertNotNull(value, "only support getting the name from a Request at the moment, not from an ack/nack.");
+ PARCJSON *inner_json = parcJSONValue_GetJSON(value);
+
+ value = parcJSON_GetValueByName(inner_json, cpiCancelFlow_CancelFlowJsonTag());
+ assertNotNull(value, "Missing JSON tag in control message: %s", cpiCancelFlow_CancelFlowJsonTag());
+ inner_json = parcJSONValue_GetJSON(value);
+
+ value = parcJSON_GetValueByName(inner_json, cpiFlowName);
+ assertNotNull(value, "Missing JSON tag in control message: %s", cpiFlowName);
+ PARCBuffer *sBuf = parcJSONValue_GetString(value);
+ const char *uri = parcBuffer_Overlay(sBuf, 0);
+
+ CCNxName *name = ccnxName_CreateFromCString(uri);
+
+ return name;
+}
+
+CCNxName *
+cpiCancelFlow_NameFromControlMessage(CCNxControl *control)
+{
+ assertNotNull(control, "Parameter control must be non-null");
+ return cpiCancelFlow_GetFlowName(ccnxControl_GetJson(control));
+}
+
+bool
+cpiCancelFlow_SuccessFromResponse(CCNxControl *control)
+{
+ trapNotImplemented("cpiCancelFlow_SuccessFromResponse");
+}
+
+const char *
+cpiCancelFlow_CancelFlowJsonTag(void)
+{
+ return cpiCancelFlow;
+}