aboutsummaryrefslogtreecommitdiffstats
path: root/metis/ccnx/forwarder/metis/processor/metis_Tap.h
diff options
context:
space:
mode:
Diffstat (limited to 'metis/ccnx/forwarder/metis/processor/metis_Tap.h')
-rw-r--r--metis/ccnx/forwarder/metis/processor/metis_Tap.h140
1 files changed, 140 insertions, 0 deletions
diff --git a/metis/ccnx/forwarder/metis/processor/metis_Tap.h b/metis/ccnx/forwarder/metis/processor/metis_Tap.h
new file mode 100644
index 00000000..052f9556
--- /dev/null
+++ b/metis/ccnx/forwarder/metis/processor/metis_Tap.h
@@ -0,0 +1,140 @@
+/*
+ * 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.
+ */
+
+/**
+ * The MetisForwarder supports a Tap that will inspect all messages passing through the
+ * forwarder. See metisForwarder_AddTap() and metisForwarder_RemoveTap().
+ *
+ *
+ * Example:
+ * @code
+ * {
+ * struct testTap_s {
+ * bool callOnReceive;
+ * unsigned onReceiveCount;
+ * } testTap;
+ *
+ * static bool
+ * testTap_IsTapOnReceive(const MetisTap *tap)
+ * {
+ * struct testTap_s *mytap = (struct testTap_s *) tap->context;
+ * return mytap->callOnReceive;
+ * }
+ *
+ * static void
+ * testTap_TapOnReceive(MetisTap *tap, const MetisMessage *message)
+ * {
+ * struct testTap_s *mytap = (struct testTap_s *) tap->context;
+ * mytap->onReceiveCount++;
+ * mytap->lastMessage = message;
+ * }
+ *
+ * MetisTap testTapTemplate = {
+ * .context = &testTap,
+ * .isTapOnReceive = &testTap_IsTapOnReceive,
+ * .isTapOnSend = NULL,
+ * .isTapOnDrop = NULL,
+ * .tapOnReceive = &testTap_TapOnReceive,
+ * .tapOnSend = NULL,
+ * .tapOnDrop = NULL
+ * };
+ *
+ * }
+ * @endcode
+ *
+ */
+
+#ifndef Metis_metis_Tap_h
+#define Metis_metis_Tap_h
+
+struct metis_tap;
+
+
+typedef struct metis_tap MetisTap;
+
+/**
+ * Defines callbacks for message taps
+ *
+ * Each of the taps (tapOnReceive, tapOnSend, tapOnDrop) may be NULL.
+ * if a tap is not null, then the correspnoding isX function must be non-null. The isX functions
+ * allow turning on/off particular calls depending on user preference.
+ */
+struct metis_tap {
+
+ /**
+ * A user-defined parameter
+ */
+ void *context;
+
+ /**
+ * Determines if the tapOnReceive() function should be called
+ *
+ * If *tapOnReceive is non-null, this function must be defined too.
+ *
+ * @param [in] MetisTap The tap structure
+ *
+ * @return true call the tap function
+ * @return false Do not call the tap function.
+ */
+ bool (*isTapOnReceive)(const MetisTap *tap);
+
+ /**
+ * Determines if the tapOnSend() function should be called
+ *
+ * If *tapOnSend is non-null, this function must be defined too.
+ *
+ * @param [in] MetisTap The tap structure
+ *
+ * @return true call the tap function
+ * @return false Do not call the tap function.
+ */
+ bool (*isTapOnSend)(const MetisTap *tap);
+
+ /**
+ * Determines if the tapOnDrop() function should be called
+ *
+ * If *tapOnDrop is non-null, this function must be defined too.
+ *
+ * @param [in] MetisTap The tap structure
+ *
+ * @return true call the tap function
+ * @return false Do not call the tap function.
+ */
+ bool (*isTapOnDrop)(const MetisTap *tap);
+
+ /**
+ * Called for each message entering the message processor. May be NULL.
+ *
+ * @param [in] MetisTap The tap structure
+ */
+ void (*tapOnReceive)(MetisTap *tap, const MetisMessage *message);
+
+ /**
+ * Called for each message forwarded by the message processor. May be NULL.
+ *
+ * @param [in] MetisTap The tap structure
+ */
+ void (*tapOnSend)(MetisTap *tap, const MetisMessage *message);
+
+ /**
+ * Called for each message dropped by the message processor. May be NULL.
+ *
+ * @param [in] MetisTap The tap structure
+ */
+ void (*tapOnDrop)(MetisTap *tap, const MetisMessage *message);
+};
+
+
+#endif // Metis_metis_Tap_h