1#ifndef _sw_salt_h 2#define _sw_salt_h 3 4/* 5 * Copyright 2003, 2004 Porchdog Software, Inc. All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without modification, 8 * are permitted provided that the following conditions are met: 9 * 10 * 1. Redistributions of source code must retain the above copyright notice, 11 * this list of conditions and the following disclaimer. 12 * 2. Redistributions in binary form must reproduce the above copyright notice, 13 * this list of conditions and the following disclaimer in the documentation 14 * and/or other materials provided with the distribution. 15 * 16 * THIS SOFTWARE IS PROVIDED BY PORCHDOG SOFTWARE ``AS IS'' AND ANY 17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 19 * IN NO EVENT SHALL THE HOWL PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 20 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 21 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 22 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 23 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 24 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 25 * OF THE POSSIBILITY OF SUCH DAMAGE. 26 * 27 * The views and conclusions contained in the software and documentation are those 28 * of the authors and should not be interpreted as representing official policies, 29 * either expressed or implied, of Porchdog Software, Inc. 30 */ 31 32#include <salt/platform.h> 33#include <salt/time.h> 34 35 36#ifdef __cplusplus 37extern "C" 38{ 39#endif 40 41 42typedef enum _sw_socket_event 43{ 44 SW_SOCKET_READ = (1 << 0), 45 SW_SOCKET_WRITE = (1 << 1), 46 SW_SOCKET_OOB = (1 << 2) 47} sw_socket_event; 48 49 50struct _sw_salt; 51typedef struct _sw_salt * sw_salt; 52struct _sw_socket; 53struct _sw_timer; 54struct _sw_network_interface; 55struct _sw_signal; 56 57typedef sw_opaque sw_socket_handler; 58typedef sw_result 59(HOWL_API *sw_socket_handler_func)( 60 sw_socket_handler handler, 61 sw_salt salt, 62 struct _sw_socket * socket, 63 sw_socket_event events, 64 sw_opaque extra); 65 66 67typedef sw_opaque sw_timer_handler; 68typedef sw_result 69(HOWL_API *sw_timer_handler_func)( 70 sw_timer_handler handler, 71 sw_salt salt, 72 struct _sw_timer * timer, 73 sw_time timeout, 74 sw_opaque extra); 75 76typedef sw_opaque sw_network_interface_handler; 77typedef sw_result 78(HOWL_API *sw_network_interface_handler_func)( 79 sw_network_interface_handler handler, 80 sw_salt salt, 81 struct _sw_network_interface * netif, 82 sw_opaque extra); 83 84typedef sw_opaque sw_signal_handler; 85typedef sw_result 86(HOWL_API *sw_signal_handler_func)( 87 sw_signal_handler handler, 88 sw_salt salt, 89 struct _sw_signal * signal, 90 sw_opaque extra); 91 92 93sw_result HOWL_API 94sw_salt_init( 95 sw_salt * self, 96 int argc, 97 char ** argv); 98 99 100sw_result HOWL_API 101sw_salt_fina( 102 sw_salt self); 103 104 105sw_result HOWL_API 106sw_salt_register_socket( 107 sw_salt self, 108 struct _sw_socket * socket, 109 sw_socket_event events, 110 sw_socket_handler handler, 111 sw_socket_handler_func func, 112 sw_opaque extra); 113 114 115sw_result HOWL_API 116sw_salt_unregister_socket( 117 sw_salt self, 118 struct _sw_socket * socket); 119 120 121sw_result HOWL_API 122sw_salt_register_timer( 123 sw_salt self, 124 struct _sw_timer * timer, 125 sw_time timeout, 126 sw_timer_handler handler, 127 sw_timer_handler_func func, 128 sw_opaque extra); 129 130 131sw_result HOWL_API 132sw_salt_unregister_timer( 133 sw_salt self, 134 struct _sw_timer * timer); 135 136 137sw_result HOWL_API 138sw_salt_register_network_interface( 139 sw_salt self, 140 struct _sw_network_interface * netif, 141 sw_network_interface_handler handler, 142 sw_network_interface_handler_func func, 143 sw_opaque extra); 144 145 146sw_result HOWL_API 147sw_salt_unregister_network_interface_handler( 148 sw_salt self); 149 150 151sw_result HOWL_API 152sw_salt_register_signal( 153 sw_salt self, 154 struct _sw_signal * signal, 155 sw_signal_handler handler, 156 sw_signal_handler_func func, 157 sw_opaque extra); 158 159 160sw_result HOWL_API 161sw_salt_unregister_signal( 162 sw_salt self, 163 struct _sw_signal * signal); 164 165 166sw_result HOWL_API 167sw_salt_lock( 168 sw_salt self); 169 170 171sw_result HOWL_API 172sw_salt_unlock( 173 sw_salt self); 174 175 176sw_result HOWL_API 177sw_salt_step( 178 sw_salt self, 179 sw_uint32 * msec); 180 181 182sw_result HOWL_API 183sw_salt_run( 184 sw_salt self); 185 186 187sw_result HOWL_API 188sw_salt_stop_run( 189 sw_salt self); 190 191 192#define SW_FALSE 0 193#define SW_TRUE 1 194#define SW_OKAY 0 195 196 197/* 198 * error codes 199 */ 200#define SW_E_CORE_BASE 0x80000000 201#define SW_E_UNKNOWN (SW_E_CORE_BASE) + 1 202#define SW_E_INIT (SW_E_CORE_BASE) + 2 203#define SW_E_MEM (SW_E_CORE_BASE) + 3 204#define SW_E_EOF (SW_E_CORE_BASE) + 4 205#define SW_E_NO_IMPL (SW_E_CORE_BASE) + 5 206#define SW_E_FILE_LOCKED (SW_E_CORE_BASE) + 6 207#define SW_E_PROTOCOL_NOT_FOUND (SW_E_CORE_BASE) + 7 208 209 210#ifdef __cplusplus 211} 212#endif 213 214 215#endif 216