libevent  2.2.1
Event notification library
tag.h
Go to the documentation of this file.
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_INCLUDED_
28 #define EVENT2_TAG_H_INCLUDED_
29 
36 #include <event2/visibility.h>
37 
38 #ifdef __cplusplus
39 extern "C" {
40 #endif
41 
42 #include <event2/event-config.h>
43 #ifdef EVENT__HAVE_SYS_TYPES_H
44 #include <sys/types.h>
45 #endif
46 #ifdef EVENT__HAVE_SYS_TIME_H
47 #include <sys/time.h>
48 #endif
49 
50 /* For int types. */
51 #include <event2/util.h>
52 
53 struct evbuffer;
54 
55 /*
56  * Marshaling tagged data - We assume that all tags are inserted in their
57  * numeric order - so that unknown tags will always be higher than the
58  * known ones - and we can just ignore the end of an event buffer.
59  */
60 
61 EVENT2_EXPORT_SYMBOL
62 void evtag_init(void);
63 
71 EVENT2_EXPORT_SYMBOL
72 int evtag_unmarshal_header(struct evbuffer *evbuf, ev_uint32_t *ptag);
73 
74 EVENT2_EXPORT_SYMBOL
75 void evtag_marshal(struct evbuffer *evbuf, ev_uint32_t tag, const void *data,
76  ev_uint32_t len);
77 EVENT2_EXPORT_SYMBOL
78 void evtag_marshal_buffer(struct evbuffer *evbuf, ev_uint32_t tag,
79  struct evbuffer *data);
80 
91 EVENT2_EXPORT_SYMBOL
92 void evtag_encode_int(struct evbuffer *evbuf, ev_uint32_t number);
93 EVENT2_EXPORT_SYMBOL
94 void evtag_encode_int64(struct evbuffer *evbuf, ev_uint64_t number);
95 
96 EVENT2_EXPORT_SYMBOL
97 void evtag_marshal_int(struct evbuffer *evbuf, ev_uint32_t tag,
98  ev_uint32_t integer);
99 EVENT2_EXPORT_SYMBOL
100 void evtag_marshal_int64(struct evbuffer *evbuf, ev_uint32_t tag,
101  ev_uint64_t integer);
102 
103 EVENT2_EXPORT_SYMBOL
104 void evtag_marshal_string(struct evbuffer *buf, ev_uint32_t tag,
105  const char *string);
106 
107 EVENT2_EXPORT_SYMBOL
108 void evtag_marshal_timeval(struct evbuffer *evbuf, ev_uint32_t tag,
109  struct timeval *tv);
110 
111 EVENT2_EXPORT_SYMBOL
112 int evtag_unmarshal(struct evbuffer *src, ev_uint32_t *ptag,
113  struct evbuffer *dst);
114 EVENT2_EXPORT_SYMBOL
115 int evtag_peek(struct evbuffer *evbuf, ev_uint32_t *ptag);
116 EVENT2_EXPORT_SYMBOL
117 int evtag_peek_length(struct evbuffer *evbuf, ev_uint32_t *plength);
118 EVENT2_EXPORT_SYMBOL
119 int evtag_payload_length(struct evbuffer *evbuf, ev_uint32_t *plength);
120 EVENT2_EXPORT_SYMBOL
121 int evtag_consume(struct evbuffer *evbuf);
122 
123 EVENT2_EXPORT_SYMBOL
124 int evtag_unmarshal_int(struct evbuffer *evbuf, ev_uint32_t need_tag,
125  ev_uint32_t *pinteger);
126 EVENT2_EXPORT_SYMBOL
127 int evtag_unmarshal_int64(struct evbuffer *evbuf, ev_uint32_t need_tag,
128  ev_uint64_t *pinteger);
129 
130 EVENT2_EXPORT_SYMBOL
131 int evtag_unmarshal_fixed(struct evbuffer *src, ev_uint32_t need_tag,
132  void *data, size_t len);
133 
134 EVENT2_EXPORT_SYMBOL
135 int evtag_unmarshal_string(struct evbuffer *evbuf, ev_uint32_t need_tag,
136  char **pstring);
137 
138 EVENT2_EXPORT_SYMBOL
139 int evtag_unmarshal_timeval(struct evbuffer *evbuf, ev_uint32_t need_tag,
140  struct timeval *ptv);
141 
142 #ifdef __cplusplus
143 }
144 #endif
145 
146 #endif /* EVENT2_TAG_H_INCLUDED_ */
evtag_unmarshal_header
EVENT2_EXPORT_SYMBOL int evtag_unmarshal_header(struct evbuffer *evbuf, ev_uint32_t *ptag)
Unmarshals the header and returns the length of the payload.
evbuffer
An evbuffer is an opaque data type for efficiently buffering data to be sent or received on the netwo...
Definition: buffer.h:97
evtag_encode_int
EVENT2_EXPORT_SYMBOL void evtag_encode_int(struct evbuffer *evbuf, ev_uint32_t number)
Encode an integer and store it in an evbuffer.
util.h
Common convenience functions for cross-platform portability and related socket manipulations.