1 /* ==================================================================== 2 * The Kannel Software License, Version 1.0 3 * 4 * Copyright (c) 2001-2014 Kannel Group 5 * Copyright (c) 1998-2001 WapIT Ltd. 6 * All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions 10 * are met: 11 * 12 * 1. Redistributions of source code must retain the above copyright 13 * notice, this list of conditions and the following disclaimer. 14 * 15 * 2. Redistributions in binary form must reproduce the above copyright 16 * notice, this list of conditions and the following disclaimer in 17 * the documentation and/or other materials provided with the 18 * distribution. 19 * 20 * 3. The end-user documentation included with the redistribution, 21 * if any, must include the following acknowledgment: 22 * "This product includes software developed by the 23 * Kannel Group (http://www.kannel.org/)." 24 * Alternately, this acknowledgment may appear in the software itself, 25 * if and wherever such third-party acknowledgments normally appear. 26 * 27 * 4. The names "Kannel" and "Kannel Group" must not be used to 28 * endorse or promote products derived from this software without 29 * prior written permission. For written permission, please 30 * contact org@kannel.org. 31 * 32 * 5. Products derived from this software may not be called "Kannel", 33 * nor may "Kannel" appear in their name, without prior written 34 * permission of the Kannel Group. 35 * 36 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED 37 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 38 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 39 * DISCLAIMED. IN NO EVENT SHALL THE KANNEL GROUP OR ITS CONTRIBUTORS 40 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, 41 * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT 42 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 43 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 44 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 45 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 46 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 47 * ==================================================================== 48 * 49 * This software consists of voluntary contributions made by many 50 * individuals on behalf of the Kannel Group. For more information on 51 * the Kannel Group, please see <http://www.kannel.org/>. 52 * 53 * Portions of this software are based upon software originally written at 54 * WapIT Ltd., Helsinki, Finland for the Kannel project. 55 */ 56 57 /* 58 * WTLS Server Header 59 * 60 * Nick Clarey <nclarey@3glab.com> 61 * Nikos Balkanas, InAccess Networks (2009) 62 */ 63 64 #ifndef WTLS_H 65 #define WTLS_H 66 67 typedef struct WTLSMachine WTLSMachine; 68 69 #include "gw/msg.h" 70 #include "wap/wap_events.h" 71 #include "wap/wtls_pdu.h" 72 73 typedef void wtls_dispatch_func_t(Msg *msg); 74 /* 75 * WTLS Server machine states and WTLS machine. 76 * See file wtls_state-decl.h for comments. Note that we must define macro 77 * ROW to produce an empty string. 78 */ 79 enum serv_states { 80 #define STATE_NAME(state) state, 81 #define ROW(state, event, condition, action, next_state) 82 #include "wtls_state-decl.h" 83 serv_states_count 84 }; 85 86 typedef enum serv_states serv_states; 87 88 /* 89 * See files wtls_machine-decl.h for comments. We define one macro for 90 * every separate type. 91 */ 92 struct WTLSMachine { 93 unsigned long mid; 94 #define ENUM(name) serv_states name; 95 #define ADDRTUPLE(name) WAPAddrTuple *name; 96 #define INTEGER(name) int name; 97 #define OCTSTR(name) Octstr *name; 98 #define MACHINE(field) field 99 #define PDULIST(name) List *name; 100 #include "wtls_machine-decl.h" 101 }; 102 103 /* 104 * Initialize the WTLS server. 105 */ 106 void wtls_init(wtls_dispatch_func_t *responder_dispatch); 107 108 /* 109 * Shut down the WTLS server machines. MUST be called after the subsystem isn't 110 * used anymore. 111 */ 112 void wtls_shutdown(void); 113 114 /* 115 * Transfers control of an event to the WTLS server machine subsystem. 116 */ 117 void wtls_dispatch_event(WAPEvent * event); 118 119 /* 120 * Return control to WTLS server machine subsystem 121 */ 122 void wtls_dispatch_resp(WAPEvent * event); 123 124 /* 125 * Handles possible concatenated messages. Returns a list of wap events. 126 * Real unpacking is done by an internal function. 127 */ 128 WAPEvent *wtls_unpack_wdp_datagram(Msg * msg); 129 130 int wtls_get_address_tuple(long mid, WAPAddrTuple ** tuple); 131 132 #endif 133