Annotation of embedaddon/strongswan/src/libcharon/plugins/vici/vici_dispatcher.h, revision 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>