libevent

include/event2/rpc_struct.h

Go to the documentation of this file.
00001 /*
00002  * Copyright (c) 2006-2007 Niels Provos <provos@citi.umich.edu>
00003  * Copyright (c) 2007-2010 Niels Provos and Nick Mathewson
00004  *
00005  * Redistribution and use in source and binary forms, with or without
00006  * modification, are permitted provided that the following conditions
00007  * are met:
00008  * 1. Redistributions of source code must retain the above copyright
00009  *    notice, this list of conditions and the following disclaimer.
00010  * 2. Redistributions in binary form must reproduce the above copyright
00011  *    notice, this list of conditions and the following disclaimer in the
00012  *    documentation and/or other materials provided with the distribution.
00013  * 3. The name of the author may not be used to endorse or promote products
00014  *    derived from this software without specific prior written permission.
00015  *
00016  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
00017  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
00018  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
00019  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
00020  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
00021  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
00022  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
00023  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
00024  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
00025  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00026  */
00027 #ifndef _EVENT2_RPC_STRUCT_H_
00028 #define _EVENT2_RPC_STRUCT_H_
00029 
00030 #ifdef __cplusplus
00031 extern "C" {
00032 #endif
00033 
00044 struct evrpc_status {
00045 #define EVRPC_STATUS_ERR_NONE           0
00046 #define EVRPC_STATUS_ERR_TIMEOUT        1
00047 #define EVRPC_STATUS_ERR_BADPAYLOAD     2
00048 #define EVRPC_STATUS_ERR_UNSTARTED      3
00049 #define EVRPC_STATUS_ERR_HOOKABORTED    4
00050         int error;
00051 
00052         /* for looking at headers or other information */
00053         struct evhttp_request *http_req;
00054 };
00055 
00056 /* the structure below needs to be synchronized with evrpc_req_generic */
00057 
00058 /* Encapsulates a request */
00059 struct evrpc {
00060         TAILQ_ENTRY(evrpc) next;
00061 
00062         /* the URI at which the request handler lives */
00063         const char* uri;
00064 
00065         /* creates a new request structure */
00066         void *(*request_new)(void *);
00067         void *request_new_arg;
00068 
00069         /* frees the request structure */
00070         void (*request_free)(void *);
00071 
00072         /* unmarshals the buffer into the proper request structure */
00073         int (*request_unmarshal)(void *, struct evbuffer *);
00074 
00075         /* creates a new reply structure */
00076         void *(*reply_new)(void *);
00077         void *reply_new_arg;
00078 
00079         /* frees the reply structure */
00080         void (*reply_free)(void *);
00081 
00082         /* verifies that the reply is valid */
00083         int (*reply_complete)(void *);
00084 
00085         /* marshals the reply into a buffer */
00086         void (*reply_marshal)(struct evbuffer*, void *);
00087 
00088         /* the callback invoked for each received rpc */
00089         void (*cb)(struct evrpc_req_generic *, void *);
00090         void *cb_arg;
00091 
00092         /* reference for further configuration */
00093         struct evrpc_base *base;
00094 };
00095 
00096 #ifdef __cplusplus
00097 }
00098 #endif
00099 
00100 #endif /* _EVENT2_RPC_STRUCT_H_ */
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines