Annotation of embedaddon/strongswan/src/libcharon/plugins/vici/vici_dispatcher.h, revision 1.1.1.1
1.1 misho 1: /*
2: * Copyright (C) 2013 Martin Willi
3: * Copyright (C) 2013 revosec AG
4: *
5: * This program is free software; you can redistribute it and/or modify it
6: * under the terms of the GNU General Public License as published by the
7: * Free Software Foundation; either version 2 of the License, or (at your
8: * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
9: *
10: * This program is distributed in the hope that it will be useful, but
11: * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
12: * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
13: * for more details.
14: */
15:
16: /*
17: * Copyright (C) 2014 Timo Teräs <timo.teras@iki.fi>
18: *
19: * Permission is hereby granted, free of charge, to any person obtaining a copy
20: * of this software and associated documentation files (the "Software"), to deal
21: * in the Software without restriction, including without limitation the rights
22: * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
23: * copies of the Software, and to permit persons to whom the Software is
24: * furnished to do so, subject to the following conditions:
25: *
26: * The above copyright notice and this permission notice shall be included in
27: * all copies or substantial portions of the Software.
28: *
29: * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
30: * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
31: * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
32: * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
33: * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
34: * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
35: * THE SOFTWARE.
36: */
37:
38: /**
39: * @defgroup vici_dispatcher vici_dispatcher
40: * @{ @ingroup vici
41: */
42:
43: #ifndef VICI_DISPATCHER_H_
44: #define VICI_DISPATCHER_H_
45:
46: #include "vici_message.h"
47:
48: typedef struct vici_dispatcher_t vici_dispatcher_t;
49: typedef enum vici_operation_t vici_operation_t;
50:
51: /**
52: * Default socket URI of vici service
53: */
54: #ifdef WIN32
55: # define VICI_DEFAULT_URI "tcp://127.0.0.1:4502"
56: #else
57: # define VICI_DEFAULT_URI "unix://" IPSEC_PIDDIR "/charon.vici"
58: #endif
59:
60: /**
61: * Kind of vici operation
62: */
63: enum vici_operation_t {
64: /** a named request message */
65: VICI_CMD_REQUEST,
66: /** an unnamed response message to a request */
67: VICI_CMD_RESPONSE,
68: /** unnamed response if requested command is unknown */
69: VICI_CMD_UNKNOWN,
70: /** a named event registration request */
71: VICI_EVENT_REGISTER,
72: /** a named event unregistration request */
73: VICI_EVENT_UNREGISTER,
74: /** unnamed response for successful event (un-)registration */
75: VICI_EVENT_CONFIRM,
76: /** unnamed response if event (un-)registration failed */
77: VICI_EVENT_UNKNOWN,
78: /** a named event message */
79: VICI_EVENT,
80: };
81:
82: /**
83: * Vici command callback function
84: *
85: * @param user user data, as supplied during registration
86: * @param name name of the command it has been registered under
87: * @param id client connection identifier
88: * @param request request message data
89: * @return response message
90: */
91: typedef vici_message_t* (*vici_command_cb_t)(void *user, char *name, u_int id,
92: vici_message_t *request);
93:
94: /**
95: * Vici command dispatcher.
96: */
97: struct vici_dispatcher_t {
98:
99: /**
100: * Register/Unregister a callback invoked for a specific command request.
101: *
102: * @param name name of the command
103: * @param cb callback function to register, NULL to unregister
104: * @param user user data to pass to callback
105: */
106: void (*manage_command)(vici_dispatcher_t *this, char *name,
107: vici_command_cb_t cb, void *user);
108:
109: /**
110: * Register/Unregister an event type to send.
111: *
112: * The dispatcher internally manages event subscriptions. Clients registered
113: * for an event will receive such messages when the event is raised.
114: *
115: * @param name event name to manager
116: * @param reg TRUE to register, FALSE to unregister
117: */
118: void (*manage_event)(vici_dispatcher_t *this, char *name, bool reg);
119:
120: /**
121: * Check if an event has listeners.
122: *
123: * This can be used to check if a vici message needs to be generated or not,
124: * as in some cases the generation can be a heavy operation.
125: *
126: * @param name event name to check
127: * @return TRUE if event has listeners
128: */
129: bool (*has_event_listeners)(vici_dispatcher_t *this, char *name);
130:
131: /**
132: * Raise an event to a specific or all clients registered to that event.
133: *
134: * @param name event name to raise
135: * @param id client connection ID, 0 for all
136: * @param message event message to send, gets destroyed
137: */
138: void (*raise_event)(vici_dispatcher_t *this, char *name, u_int id,
139: vici_message_t *message);
140:
141: /**
142: * Destroy a vici_dispatcher_t.
143: */
144: void (*destroy)(vici_dispatcher_t *this);
145: };
146:
147: /**
148: * Create a vici_dispatcher instance.
149: *
150: * @param uri uri for listening stream service
151: * @return dispatcher instance
152: */
153: vici_dispatcher_t *vici_dispatcher_create(char *uri);
154:
155: #endif /** VICI_DISPATCHER_H_ @}*/
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>