/**
 * Copyright (C) 2013 Regents of the University of California.
 * @author: Jeff Thompson <jefft0@remap.ucla.edu>
 * See COPYING for copyright and distribution information.
 */

#ifndef NDN_FORWARDING_ENTRY_H
#define NDN_FORWARDING_ENTRY_H

#include <ndn-cpp-dev/c/common.h>
#include <ndn-cpp-dev/c/forwarding-flags.h>
#include "name.h"
#include "publisher-public-key-digest.h"

#ifdef __cplusplus
extern "C" {
#endif

typedef enum {
  ndn_ForwardingEntryFlags_ACTIVE         = 1,
  ndn_ForwardingEntryFlags_CHILD_INHERIT  = 2,
  ndn_ForwardingEntryFlags_ADVERTISE      = 4,
  ndn_ForwardingEntryFlags_LAST           = 8,
  ndn_ForwardingEntryFlags_CAPTURE       = 16,
  ndn_ForwardingEntryFlags_LOCAL         = 32,
  ndn_ForwardingEntryFlags_TAP           = 64,
  ndn_ForwardingEntryFlags_CAPTURE_OK   = 128
} ndn_ForwardingEntryFlags;

/**
 * An ndn_ForwardingEntry holds fields for a ForwardingEntry which is used to register a prefix with a hub.
 */
struct ndn_ForwardingEntry {
  struct ndn_Blob action;   /**< A Blob whose value is a pointer to a pre-allocated buffer.  0 for none. */
  struct ndn_Name prefix;
  struct ndn_PublisherPublicKeyDigest publisherPublicKeyDigest;
  int faceId;               /**< -1 for none. */
  struct ndn_ForwardingFlags forwardingFlags;
  int freshnessSeconds;     /**< -1 for none. */
};

/**
 * Initialize an ndn_ForwardingEntry struct with the pre-allocated prefixNameComponents,
 * and defaults for all the values.
 * @param self pointer to the ndn_Interest struct
 * @param prefixNameComponents the pre-allocated array of ndn_NameComponent
 * @param maxPrefixNameComponents the number of elements in the allocated prefixNameComponents array
 */
static inline void ndn_ForwardingEntry_initialize
  (struct ndn_ForwardingEntry *self, struct ndn_NameComponent *prefixNameComponents, size_t maxPrefixNameComponents) 
{
  ndn_Blob_initialize(&self->action, 0, 0);
  ndn_Name_initialize(&self->prefix, prefixNameComponents, maxPrefixNameComponents);
  ndn_PublisherPublicKeyDigest_initialize(&self->publisherPublicKeyDigest);
  self->faceId = -1;
  ndn_ForwardingFlags_initialize(&self->forwardingFlags);
  self->freshnessSeconds = -1;
}

#ifdef __cplusplus
}
#endif

#endif
