servlib/security/BP_Tag.h
changeset 0 2b3e5ec03512
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/servlib/security/BP_Tag.h	Thu Apr 21 14:57:45 2011 +0100
@@ -0,0 +1,98 @@
+/*
+ * Copyright 2007 BBN Technologies Corporation
+ *
+ * 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.
+ */
+
+/*
+ * $Id$
+ */
+
+#ifndef _BP_TAG_H_
+#define _BP_TAG_H_
+
+#ifdef BSP_ENABLED
+
+#include <vector>
+#include <oasys/debug/DebugUtils.h>  // ASSERT()
+
+namespace dtn {
+
+/**
+ * Tag objects are used to hold auxiliary information pertaining to
+ * the completion of various operations, e.g., security processing.
+ */
+class BP_Tag {
+
+public:
+    BP_Tag();
+
+    BP_Tag(int type);
+
+    virtual ~BP_Tag();
+
+    int type() const {
+        ASSERT(type_ != BP_TAG_NONE);
+        return type_;
+    }
+
+    /**
+     * Tag values.  The high byte should be the block type to which
+     * the tag relates, or 0xff if it relates to none.
+     */
+    enum {
+        BP_TAG_NONE             = 0xffff,
+        BP_TAG_E2E_SEC_OUT_DONE = 0xff01,
+        BP_TAG_BAB_IN_DONE      = 0x0201,
+        BP_TAG_PIB_IN_DONE      = 0x0301,
+        BP_TAG_PCB_IN_DONE       = 0x0401,
+    };
+
+private:
+    int type_;
+};
+
+/**
+ * Vector of BP_Tag, except with the usual vector operations hidden;
+ * accessible only via find_tag() and append_tag().
+ */
+class BP_TagVec : public std::vector<BP_Tag> {
+
+public:
+    
+    /**
+     * Get an iterator pointing to the next tag of the given type, or
+     * end() if there is none, beginning at location represented by
+     * the provided iterator.
+     */
+    BP_TagVec::const_iterator find_tag(int type,
+                                       BP_TagVec::const_iterator iter) const;
+    
+    /**
+     * Get an iterator to the first tag of the given type, or end() if
+     * there is none.
+     */
+    BP_TagVec::const_iterator find_tag(int type) const;
+    
+    /**
+     * Determine whether at least one tag of the given type exists in
+     * this list.
+     */
+    bool has_tag(int type) const;
+    
+};
+
+} // namespace dtn
+
+#endif /* BSP_ENABLED */
+
+#endif /* _BP_TAG_H_ */