/**
 * 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/c/common.h>
#include <ndn-cpp/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
