/* * property list header file. * * G. Robert Malan (rmalan@eecs.umich.edu) * 2/20/97 * * $Id: propertyList.h,v 1.23 1997/08/27 18:57:37 rmalan Exp $ */ #ifndef _PROPERTY_H_ #define _PROPERTY_H_ 1 /*********************************************************************** * Some Well-Known Properties: ***********************************************************************/ #define NAME_PROPERTY "NAME" #define TIMESTAMP_PROPERTY "TIMESTAMP" #define TIMESTAMP_PROPERTY2 "TIME" #define COOKIE_PROPERTY "COOKIE" #define UID_PROPERTY "UID" /* a unique integer for each piece of data */ #define BEGIN_TIME_PROPERTY "BEGIN_TIME" #define END_TIME_PROPERTY "END_TIME" /*********************************************************************** * System properties: ***********************************************************************/ #define OBJ_SIZE_PROPERTY "OBJ_SIZE" #define COMMAND_PROPERTY "COMMAND" #define SUBCOMMAND "SUBCOMMAND" /*********************************************************************** * Supplier and Client commands (COMMAND_PROPERTY value's): ***********************************************************************/ /* * Client to server messages: */ # define PUBLISH_COMMAND "PUBLISH" # define QUERY_COMMAND "QUERY" # define REMOVE_QUERY "REMOVE QUERY" # define SUPPLY_COMMAND "SUPPLY" # define REMOVE_SUPPLY "REMOVE SUPPLY" # define MATCH_SUPPLIES "MATCH SUPPLIES" # define SETUP_CONDOLENCE "SETUP CONDOLENCE" # define UNICAST_MESSAGE "UNICAST MESSAGE" # define SOURCE "SOURCE" # define DESTINATION "DESTINATION" /* * Server to client messages: */ # define QUERY_RESPONSE "QUERY RESPONSE" # define SUPPLY_RESPONSE "SUPPLY RESPONSE" # define QUERY_EXPIRED "QUERY EXPIRED" # define SUPPLIERS "SUPPLIERS" # define NOTIFICATION "NOTIFICATION" /*********************************************************************** * Query/Supply Properties and values: ***********************************************************************/ #define QUERY_ID "QUERY ID" # define QUERY_FAILED "QUERY FAILED" #define SUPPLY_ID "SUPPLY ID" # define SUPPLY_FAILED "SUPPLY FAILED" /** * Query endpoint-of-interval properties: */ #define BEGIN_TIME_TYPE_PROPERTY "BEGIN_TIME_TYPE" #define END_TIME_TYPE_PROPERTY "END_TIME_TYPE" /*********************************************************************** * Archival/Database Properties and values: ***********************************************************************/ /* * Query endpoint time types: */ #define EDGE_TYPE "EDGE" #define INSIDE_TYPE "INSIDE" #define INSIDE_OR_EDGE_TYPE "INSIDE OR EDGE" #define OUTSIDE_TYPE "OUTSIDE" #define OUTSIDE_OR_EDGE_TYPE "OUTSIDE OR EDGE" #define ANY_TYPE "ANY" /* * Handshaking properties. */ #define GECKO_ANNOUNCE "GECKO ANNOUNCE" #define GECKO_KEY "GECKO KEY" /* * Gecko query commands. */ #define GECKO_QUERY "GECKO QUERY" # define GET_LAST_N "GET LAST N" # define GET_RANGE "GET RANGE" # define GET_NEXT_AFTER_TIME "GET NEXT AFTER TIME" # define GET_AVAIL_RANGE "GET AVAIL RANGE" #define GECKO_REPLY "GECKO REPLY" #define GECKO_INVALID_REPLY "GECKO INVALID REPLY" # define GECKO_REASON "GECKO REASON" # define GECKO_N_PROPERTY "GECKO N" /* XXX Do we need this one anymore? */ # define GET_LAST_UID "GG LAST UID" /*********************************************************************** * Administrative commands (COMMAND_PROPERTY values's): ***********************************************************************/ # define ENUM_CONNECTIONS "ENUMERATE CONNECTIONS" # define ENUM_CONNECTIONS_RESPONSE "ENUMERATE CONNECTIONS RESPONSE" # define ENUM_QUEUES "ENUMERATE QUEUES" # define ENUM_QUEUES_RESPONSE "ENUMERATE QUEUES RESPONSE" # define DUMP_QUEUE "DUMP QUEUE" # define DUMP_QUEUE_RESPONSE "DUMP QUEUE RESPONSE" # define REMOTE_CONNECT "REMOTE CONNECT" # define REMOTE_CONNECT_RESPONSE "REMOTE CONNECT RESPONSE" # define HOSTNAME_PROPERTY "HOSTNAME" # define LOSE_TAIL "LOSE TAIL" # define SET_MAX_QUEUE_SIZE "SET MAX QUEUE SIZE" # define SET_MAX_QUEUE_SIZE_RESPONSE "SET MAX QUEUE SIZE RESPONSE" # define SET_CUR_QUEUE_SIZE "SET CUR QUEUE SIZE" # define SET_CUR_QUEUE_SIZE_RESPONSE "SET CUR QUEUE SIZE RESPONSE" # define QUEUE_PROPERTY "QUEUE" # define REMOVE_CONNECTION "REMOVE CONNECTION" /*********************************************************************** * Data struct for current implementation. ***********************************************************************/ typedef struct plist_entry { char * key; char * value; struct plist_entry * previous; struct plist_entry * next; } * plist_entry_t; typedef struct plist { plist_entry_t head; } * plist_t; /*********************************************************************** * Prototypes: ***********************************************************************/ /**************** Interface 1.0+ routines: ****************/ /* * createPropertyList: * * IN: nothing. * * OUT: plist_t. This must be destroyed when finished with destroyPropertyList */ plist_t createPropertyList(void); /* * destroyPropertyList: * * IN: plist_t. Frees memory stored in and of the plist_t. * * OUT: nothing. */ void destroyPropertyList(plist_t plist); /* * updateProperty: * * IN: plist_t (property list pointer) * key and value strings (makes copy of these two args). * * OUT: integer detailing success of operation. only fails if malloc does. * */ int updateProperty(plist_t plist, char * key, char * value); /* * copyPropertyList: * * IN: plist_t * * OUT: plist_t */ plist_t copyPropertyList(plist_t from); /* * deleteProperty: * * Removes key's entry and frees associated memory. * * IN: plist_t and a key string. * * OUT: nothing. * */ void deleteProperty(plist_t list, char * key); /* * getProperty: * * Given a property list and a key, return a copy of the value string. * * IN: plist_t, key string. * * OUT: copy of value string. This must be freed by the caller. */ char * getProperty(plist_t plist, char * key); /* * iteratePropertyList: * * PC way to iterate an *opaque* data type. * * IN: plist, cookie (intially zero), 2 ptrs to string ptr. * * OUT: A cookie to pass back for the next iteration, * and a copy of the next key, value pair. The returned * key and value must be freed by the caller. */ int iteratePropertyList(plist_t plist, plist_entry_t * cookie, char ** key, char ** value); /* * plistEqual: * * Given two plists, are they lexicographically identical? * * IN: two plists. * * OUT: 1 if equal, 0 if not. */ int plistEqual(plist_t one, plist_t two); /* * dumpPropertyList: * * IN: plist * * OUT: prints out the plist to stdout. */ void dumpPropertyList(plist_t plist); /**************** Interface 2.0 routines: ****************/ /* * marshalling code: Internal use only. */ char * marshallPlist(plist_t plist, unsigned long * length); plist_t unmarshallPlist(char * mashalledPlist, unsigned long plist_length); #endif /* _PROPERTY_H_ */