root/opal/mca/event/libevent2022/libevent/include/event2/tag.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /*
   2  * Copyright (c) 2000-2007 Niels Provos <provos@citi.umich.edu>
   3  * Copyright (c) 2007-2012 Niels Provos and Nick Mathewson
   4  *
   5  * Redistribution and use in source and binary forms, with or without
   6  * modification, are permitted provided that the following conditions
   7  * are met:
   8  * 1. Redistributions of source code must retain the above copyright
   9  *    notice, this list of conditions and the following disclaimer.
  10  * 2. Redistributions in binary form must reproduce the above copyright
  11  *    notice, this list of conditions and the following disclaimer in the
  12  *    documentation and/or other materials provided with the distribution.
  13  * 3. The name of the author may not be used to endorse or promote products
  14  *    derived from this software without specific prior written permission.
  15  *
  16  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
  17  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  18  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  19  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
  20  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  21  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  22  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  23  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  24  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  25  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  26  */
  27 #ifndef _EVENT2_TAG_H_
  28 #define _EVENT2_TAG_H_
  29 
  30 /** @file event2/tag.h
  31 
  32   Helper functions for reading and writing tagged data onto buffers.
  33 
  34  */
  35 
  36 #ifdef __cplusplus
  37 extern "C" {
  38 #endif
  39 
  40 #include <event2/event-config.h>
  41 #ifdef _EVENT_HAVE_SYS_TYPES_H
  42 #include <sys/types.h>
  43 #endif
  44 #ifdef _EVENT_HAVE_SYS_TIME_H
  45 #include <sys/time.h>
  46 #endif
  47 
  48 /* For int types. */
  49 #include <event2/util.h>
  50 
  51 struct evbuffer;
  52 
  53 /*
  54  * Marshaling tagged data - We assume that all tags are inserted in their
  55  * numeric order - so that unknown tags will always be higher than the
  56  * known ones - and we can just ignore the end of an event buffer.
  57  */
  58 
  59 void evtag_init(void);
  60 
  61 /**
  62    Unmarshals the header and returns the length of the payload
  63 
  64    @param evbuf the buffer from which to unmarshal data
  65    @param ptag a pointer in which the tag id is being stored
  66    @returns -1 on failure or the number of bytes in the remaining payload.
  67 */
  68 int evtag_unmarshal_header(struct evbuffer *evbuf, ev_uint32_t *ptag);
  69 
  70 void evtag_marshal(struct evbuffer *evbuf, ev_uint32_t tag, const void *data,
  71     ev_uint32_t len);
  72 void evtag_marshal_buffer(struct evbuffer *evbuf, ev_uint32_t tag,
  73     struct evbuffer *data);
  74 
  75 /**
  76   Encode an integer and store it in an evbuffer.
  77 
  78   We encode integers by nybbles; the first nibble contains the number
  79   of significant nibbles - 1;  this allows us to encode up to 64-bit
  80   integers.  This function is byte-order independent.
  81 
  82   @param evbuf evbuffer to store the encoded number
  83   @param number a 32-bit integer
  84  */
  85 void evtag_encode_int(struct evbuffer *evbuf, ev_uint32_t number);
  86 void evtag_encode_int64(struct evbuffer *evbuf, ev_uint64_t number);
  87 
  88 void evtag_marshal_int(struct evbuffer *evbuf, ev_uint32_t tag,
  89     ev_uint32_t integer);
  90 void evtag_marshal_int64(struct evbuffer *evbuf, ev_uint32_t tag,
  91     ev_uint64_t integer);
  92 
  93 void evtag_marshal_string(struct evbuffer *buf, ev_uint32_t tag,
  94     const char *string);
  95 
  96 void evtag_marshal_timeval(struct evbuffer *evbuf, ev_uint32_t tag,
  97     struct timeval *tv);
  98 
  99 int evtag_unmarshal(struct evbuffer *src, ev_uint32_t *ptag,
 100     struct evbuffer *dst);
 101 int evtag_peek(struct evbuffer *evbuf, ev_uint32_t *ptag);
 102 int evtag_peek_length(struct evbuffer *evbuf, ev_uint32_t *plength);
 103 int evtag_payload_length(struct evbuffer *evbuf, ev_uint32_t *plength);
 104 int evtag_consume(struct evbuffer *evbuf);
 105 
 106 int evtag_unmarshal_int(struct evbuffer *evbuf, ev_uint32_t need_tag,
 107     ev_uint32_t *pinteger);
 108 int evtag_unmarshal_int64(struct evbuffer *evbuf, ev_uint32_t need_tag,
 109     ev_uint64_t *pinteger);
 110 
 111 int evtag_unmarshal_fixed(struct evbuffer *src, ev_uint32_t need_tag,
 112     void *data, size_t len);
 113 
 114 int evtag_unmarshal_string(struct evbuffer *evbuf, ev_uint32_t need_tag,
 115     char **pstring);
 116 
 117 int evtag_unmarshal_timeval(struct evbuffer *evbuf, ev_uint32_t need_tag,
 118     struct timeval *ptv);
 119 
 120 #ifdef __cplusplus
 121 }
 122 #endif
 123 
 124 #endif /* _EVENT2_TAG_H_ */

/* [<][>][^][v][top][bottom][index][help] */