1 /* 2 * Copyright (c) 2002-2018 Balabit 3 * Copyright (c) 2018 Laszlo Budai <laszlo.budai@balabit.com> 4 * 5 * This library is free software; you can redistribute it and/or 6 * modify it under the terms of the GNU Lesser General Public 7 * License as published by the Free Software Foundation; either 8 * version 2.1 of the License, or (at your option) any later version. 9 * 10 * This library is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 * Lesser General Public License for more details. 14 * 15 * You should have received a copy of the GNU Lesser General Public 16 * License along with this library; if not, write to the Free Software 17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 18 * 19 * As an additional exemption you are allowed to compile & link against the 20 * OpenSSL libraries as published by the OpenSSL project. See the file 21 * COPYING for details. 22 * 23 */ 24 25 #ifndef TRANSPORT_FACTORY_ID_INCLUDED 26 #define TRANSPORT_FACTORY_ID_INCLUDED 27 28 #include "syslog-ng.h" 29 30 typedef struct _TransportFactoryId TransportFactoryId; 31 32 /* 33 * public API 34 * */ 35 void transport_factory_id_global_init(void); 36 void transport_factory_id_global_deinit(void); 37 const gchar *transport_factory_id_get_transport_name(const TransportFactoryId *); 38 void transport_factory_id_free(TransportFactoryId *); 39 guint transport_factory_id_hash(gconstpointer); 40 gboolean transport_factory_id_equal(const TransportFactoryId *, const TransportFactoryId *); 41 42 /** 43 * private API (for internal usage and test) 44 */ 45 TransportFactoryId *_transport_factory_id_new(const gchar *transport_name); 46 void _transport_factory_id_register(TransportFactoryId *); 47 GList *_transport_factory_id_clone_registered_ids(void); 48 TransportFactoryId *_transport_factory_id_clone(const TransportFactoryId *); 49 50 void _transport_factory_id_lock(void); 51 void _transport_factory_id_unlock(void); 52 53 #define DEFINE_TRANSPORT_FACTORY_ID_FUN(transport_name, func_name) \ 54 const TransportFactoryId* func_name(void) \ 55 {\ 56 static TransportFactoryId *id;\ 57 _transport_factory_id_lock(); \ 58 if (!id)\ 59 {\ 60 id = _transport_factory_id_new(transport_name);\ 61 _transport_factory_id_register(id);\ 62 }\ 63 _transport_factory_id_unlock(); \ 64 return id;\ 65 } 66 67 #endif 68