aboutsummaryrefslogtreecommitdiffstats
path: root/metis/ccnx/forwarder/metis/tlv/metis_TlvOps.h
diff options
context:
space:
mode:
Diffstat (limited to 'metis/ccnx/forwarder/metis/tlv/metis_TlvOps.h')
-rw-r--r--metis/ccnx/forwarder/metis/tlv/metis_TlvOps.h216
1 files changed, 216 insertions, 0 deletions
diff --git a/metis/ccnx/forwarder/metis/tlv/metis_TlvOps.h b/metis/ccnx/forwarder/metis/tlv/metis_TlvOps.h
new file mode 100644
index 00000000..35dae490
--- /dev/null
+++ b/metis/ccnx/forwarder/metis/tlv/metis_TlvOps.h
@@ -0,0 +1,216 @@
+/*
+ * 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.
+ */
+
+/**
+ * @file metis_TlvOps.h
+ * @brief The API for TLV schemas
+ *
+ * Each TLV schema must implement this API
+ *
+ */
+
+#ifndef Metis_metis_TlvOps_h
+#define Metis_metis_TlvOps_h
+
+#include <stdbool.h>
+#include <parc/algol/parc_Buffer.h>
+#include <parc/security/parc_CryptoHash.h>
+#include <ccnx/forwarder/metis/tlv/metis_TlvSkeleton.h>
+#include <ccnx/api/control/cpi_ControlMessage.h>
+
+typedef struct metis_tlv_ops {
+ /**
+ * Fills in the packet TLV skeleton
+ *
+ * The skeleton must have been initialized with the correct parser and packet buffer.
+ *
+ * @param [in] skeleton An allocated MetisTlvSkeleton to fill in
+ *
+ * @retval true Good parse
+ * @retval false Error
+ *
+ * Example:
+ * @code
+ * <#example#>
+ * @endcode
+ */
+ bool (*parse)(MetisTlvSkeleton *skeleton);
+
+ /**
+ * Computes the ContentObjectHash over a packet
+ *
+ * <#Paragraphs Of Explanation#>
+ *
+ * @param [in] packet Packet memory, pointing to byte 0 of the fixed header
+ *
+ * @return non-null The sha256 hash
+ * @return null An error (or not a content object)
+ *
+ * Example:
+ * @code
+ * {
+ * <#example#>
+ * }
+ * @endcode
+ */
+ PARCCryptoHash * (*computeContentObjectHash)(const uint8_t *packet);
+
+ /**
+ * @function metisTlv_EncodeCPI
+ * @abstract Encodes a CPI control message in TLV format
+ * @discussion
+ * <#Discussion#>
+ *
+ * @param <#param1#>
+ * @return An allocated message, must call <code>metisMessage_Destroy()</code> on it.
+ */
+ PARCBuffer *(*encodeControlPlaneInformation)(const CCNxControl *cpiControlMessage);
+
+ /**
+ * Returns the total header length based on the Fixed Header
+ *
+ * The length may be 0 for an unsupported FixedHeader version or other error.
+ *
+ * @param [in] packet Packet memory pointing to byte 0 of the Fixed Header
+ *
+ * @retval number Total header length
+ *
+ * Example:
+ * @code
+ * <#example#>
+ * @endcode
+ */
+ size_t (*totalHeaderLength)(const uint8_t *packet);
+
+ /**
+ * Returns the total packet length based on the Fixed Header
+ *
+ * The length may be 0 for an unsupported FixedHeader version or other error.
+ *
+ * @param [in] packet Packet memory pointing to byte 0 of the Fixed Header
+ *
+ * @retval number Total packet length
+ *
+ * Example:
+ * @code
+ * <#example#>
+ * @endcode
+ */
+ size_t (*totalPacketLength)(const uint8_t *packet);
+
+ /**
+ * Returns the length of the fixed header
+ *
+ * The length may be 0 for an unsupported FixedHeader version or other error.
+ *
+ * @param [in] packet Packet memory pointing to byte 0 of the Fixed Header
+ *
+ * @retval number Total packet length
+ *
+ * Example:
+ * @code
+ * <#example#>
+ * @endcode
+ */
+ size_t (*fixedHeaderLength)(const uint8_t *packet);
+
+ /**
+ * Determines if the FixedHeader PacketType is Intereest
+ *
+ * <#Paragraphs Of Explanation#>
+ *
+ * @param [in] packet Packet memory, pointing to byte 0 of fixed header
+ *
+ * @retval true PacketType is Interest
+ * @retval false PacketType is not Interest
+ *
+ * Example:
+ * @code
+ * <#example#>
+ * @endcode
+ */
+ bool (*isPacketTypeInterest)(const uint8_t *packet);
+
+ /**
+ * Determines if the FixedHeader PacketType is ContentObject
+ *
+ * <#Paragraphs Of Explanation#>
+ *
+ * @param [in] packet Packet memory, pointing to byte 0 of fixed header
+ *
+ * @retval true PacketType is ContentObject
+ * @retval false PacketType is not ContentObject
+ *
+ * Example:
+ * @code
+ * <#example#>
+ * @endcode
+ */
+ bool (*isPacketTypeContentObject)(const uint8_t *packet);
+
+ /**
+ * Determines if the FixedHeader PacketType is InterestReturn
+ *
+ * <#Paragraphs Of Explanation#>
+ *
+ * @param [in] packet Packet memory, pointing to byte 0 of fixed header
+ *
+ * @retval true PacketType is InterestReturn
+ * @retval false PacketType is not InterestReturn
+ *
+ * Example:
+ * @code
+ * <#example#>
+ * @endcode
+ */
+ bool (*isPacketTypeInterestReturn)(const uint8_t *packet);
+
+ /**
+ * Determines if the FixedHeader PacketType is Control
+ *
+ * <#Paragraphs Of Explanation#>
+ *
+ * @param [in] packet Packet memory, pointing to byte 0 of fixed header
+ *
+ * @retval true PacketType is Control
+ * @retval false PacketType is not Control
+ *
+ * Example:
+ * @code
+ * <#example#>
+ * @endcode
+ */
+ bool (*isPacketTypeControl)(const uint8_t *packet);
+
+ /**
+ * Determines if the FixedHeader PacketType is Hop By Hop Fragment
+ *
+ * <#Paragraphs Of Explanation#>
+ *
+ * @param [in] packet Packet memory, pointing to byte 0 of fixed header
+ *
+ * @retval true PacketType is Hop By Hop Fragment
+ * @retval false PacketType is not Hop By Hop Fragment
+ *
+ * Example:
+ * @code
+ * <#example#>
+ * @endcode
+ */
+ bool (*isPacketTypeHopByHopFragment)(const uint8_t *packet);
+} MetisTlvOps;
+
+
+#endif // Metis_metis_TlvOps_h