⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wsbc.h

📁 The Kannel Open Source WAP and SMS gateway works as both an SMS gateway, for implementing keyword b
💻 H
字号:
/* ====================================================================  * The Kannel Software License, Version 1.0  *  * Copyright (c) 2001-2004 Kannel Group   * Copyright (c) 1998-2001 WapIT Ltd.    * All rights reserved.  *  * Redistribution and use in source and binary forms, with or without  * modification, are permitted provided that the following conditions  * are met:  *  * 1. Redistributions of source code must retain the above copyright  *    notice, this list of conditions and the following disclaimer.  *  * 2. Redistributions in binary form must reproduce the above copyright  *    notice, this list of conditions and the following disclaimer in  *    the documentation and/or other materials provided with the  *    distribution.  *  * 3. The end-user documentation included with the redistribution,  *    if any, must include the following acknowledgment:  *       "This product includes software developed by the  *        Kannel Group (http://www.kannel.org/)."  *    Alternately, this acknowledgment may appear in the software itself,  *    if and wherever such third-party acknowledgments normally appear.  *  * 4. The names "Kannel" and "Kannel Group" must not be used to  *    endorse or promote products derived from this software without  *    prior written permission. For written permission, please   *    contact org@kannel.org.  *  * 5. Products derived from this software may not be called "Kannel",  *    nor may "Kannel" appear in their name, without prior written  *    permission of the Kannel Group.  *  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE  * DISCLAIMED.  IN NO EVENT SHALL THE KANNEL GROUP OR ITS CONTRIBUTORS  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,   * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT   * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR   * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,   * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE   * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,   * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  * ====================================================================  *  * This software consists of voluntary contributions made by many  * individuals on behalf of the Kannel Group.  For more information on   * the Kannel Group, please see <http://www.kannel.org/>.  *  * Portions of this software are based upon software originally written at   * WapIT Ltd., Helsinki, Finland for the Kannel project.   */ /* * * wsbc.h * * Author: Markku Rossi <mtr@iki.fi> * * Copyright (c) 1999-2000 WAPIT OY LTD. *		 All rights reserved. * * Byte-code handling. * */#ifndef WSBC_H#define WSBC_H#include "wsint.h"/********************* Types and defintions *****************************//* The byte-code version numbers. */#define WS_BC_VERSION_MAJOR	1#define WS_BC_VERSION_MINOR	1#define WS_BC_VERSION (((WS_BC_VERSION_MAJOR - 1) << 4) | WS_BC_VERSION_MINOR)/* The maximum length of the byte-code header: the multi-byte encoded   length + one byte for the version information. */#define WS_BC_MAX_HEADER_LEN	(WS_MB_UINT32_MAX_ENCODED_LEN + 1)/* The string encoding, used in the byte-code data.  These are the   MIBEnum values, assigned by IANA.  For a complete description of   the character sets and values, please see the document   `rfc/iana/assignments/character-sets'. */typedef enum{    WS_BC_STRING_ENC_ISO_8859_1	= 4,    WS_BC_STRING_ENC_UTF8	= 106} WsBcStringEncoding;/* Constant types in the BC constants pool. */#define WS_BC_CONST_INT8		0#define WS_BC_CONST_INT16		1#define WS_BC_CONST_INT32		2#define WS_BC_CONST_FLOAT32		3#define WS_BC_CONST_UTF8_STRING		4#define WS_BC_CONST_EMPTY_STRING	5#define WS_BC_CONST_EXT_ENC_STRING	6#define WS_BC_CONST_FIRST_RESERVED	7/* An in-memory byte-code constant. */typedef enum{    WS_BC_CONST_TYPE_INT,    WS_BC_CONST_TYPE_FLOAT32,    WS_BC_CONST_TYPE_FLOAT32_NAN,    WS_BC_CONST_TYPE_FLOAT32_POSITIVE_INF,    WS_BC_CONST_TYPE_FLOAT32_NEGATIVE_INF,    WS_BC_CONST_TYPE_UTF8_STRING,    WS_BC_CONST_TYPE_EMPTY_STRING} WsBcConstantType;struct WsBcConstantRec{    WsBcConstantType type;    union    {        WsInt32 v_int;        WsFloat v_float;        WsUtf8String v_string;    } u;};typedef struct WsBcConstantRec WsBcConstant;/* Pragma types in the BC pragma pool. */#define WS_BC_PRAGMA_ACCESS_DOMAIN			0#define WS_BC_PRAGMA_ACCESS_PATH			1#define WS_BC_PRAGMA_USER_AGENT_PROPERTY		2#define WS_BC_PRAGMA_USER_AGENT_PROPERTY_AND_SCHEME	3#define WS_BC_PRAGMA_FIRST_RESERVED			4/* An in-memory byte-code pragma. */typedef enum{    WS_BC_PRAGMA_TYPE_ACCESS_DOMAIN,    WS_BC_PRAGMA_TYPE_ACCESS_PATH,    WS_BC_PRAGMA_TYPE_USER_AGENT_PROPERTY,    WS_BC_PRAGMA_TYPE_USER_AGENT_PROPERTY_AND_SCHEME} WsBcPragmaType;struct WsBcPragmaRec{    WsBcPragmaType type;    WsUInt16 index_1;    WsUInt16 index_2;    WsUInt16 index_3;};typedef struct WsBcPragmaRec WsBcPragma;/* An in-memory byte-code function name. */struct WsBcFunctionNameRec{    /* Index to the function pool. */    WsUInt8 index;    /* The name of the function as a 7 bit ASCII.  This is as-is in the       UTF-8 format. */    char *name;};typedef struct WsBcFunctionNameRec WsBcFunctionName;/* An in-memory byte-code function. */struct WsBcFunctionRec{    WsUInt8 num_arguments;    WsUInt8 num_locals;    WsUInt32 code_size;    unsigned char *code;};typedef struct WsBcFunctionRec WsBcFunction;/* An in-memory byte-code file. */struct WsBcRec{    /* How the strings are encoded in linearization. */    WsBcStringEncoding string_encoding;    /* Constant pool.  In this structure, all strings are in UTF-8       format.  However, they can be converted to different formats - if       requested - when linearizing the byte-code. */    WsUInt16 num_constants;    WsBcConstant *constants;    /* Pragma pool. */    WsUInt16 num_pragmas;    WsBcPragma *pragmas;    /* Function pool. */    WsUInt8 num_function_names;    WsBcFunctionName *function_names;    WsUInt8 num_functions;    WsBcFunction *functions;};typedef struct WsBcRec WsBc;/********************* Manipulating byte-code structure *****************//* Allocate a new byte-code structure.  The argument `string_encoding'   specifies the encoding that is used for strings.  The function   returns NULL if the allocation failed. */WsBc *ws_bc_alloc(WsBcStringEncoding string_encoding);/* Free the byte-code structure `bc' and all its internally allocated   data structures.  The byte-code handle `bc' should not be used   after this function. */void ws_bc_free(WsBc *bc);/* Encode the byte-code structure `bc' into a linearized binary   byte-code blob.  The function returns WS_TRUE if the encoding was   successful of WS_FALSE otherwise.  The result blob is returned in   `data_return' and its length is returned in `data_len_return'.  The   returned byte-code block must be freed with the ws_bc_data_free()   function.  You *must* not free it with ws_free() since it will   corrupt the heap. */WsBool ws_bc_encode(WsBc *bc, unsigned char **data_return,                    size_t *data_len_return);/* Free a byte-code data `data', returned by the ws_bc_encode()   function. */void ws_bc_data_free(unsigned char *data);/* Decode the byte-code data `data' into an in-memory byte-code   structure.  The function returns the byte-code structure or NULL if   the decoding fails.  The argument `data_len' specfies the length of   the byte-code data `data'.  The returned byte-code structure must   be freed with the ws_bc_free() function when it is not needed   anymore. */WsBc *ws_bc_decode(const unsigned char *data, size_t data_len);/********************* Adding constant elements *************************//* Add an integer constant `value' to the constant pool of the   byte-code structure `bc'.  The index of the constant is returned in   `index_return'.  The function returns WS_TRUE if the operation was   successful or WS_FALSE otherwise (out of memory).  */WsBool ws_bc_add_const_int(WsBc *bc, WsUInt16 *index_return,                           WsInt32 value);/* Add a floating point constant `value' to the constant pool of the   byte-code structure `bc'. */WsBool ws_bc_add_const_float(WsBc *bc, WsUInt16 *index_return, WsFloat value);/* Add an UTF-8 encoded string to the constant pool of the byte-code   structure `bc'. */WsBool ws_bc_add_const_utf8_string(WsBc *bc, WsUInt16 *index_return,                                   const unsigned char *data, size_t len);/* Add an empty string to the constant pool of the byte-code structure   `bc'. */WsBool ws_bc_add_const_empty_string(WsBc *bc, WsUInt16 *index_return);/********************* Adding pragmas ***********************************//* Add an access control specifier pragma to the constant and pragma   pools of the byte-code structure `bc'.  The argument `domain' has   `domain_len' bytes of UTF-8 data specifying the access domain. */WsBool ws_bc_add_pragma_access_domain(WsBc *bc,                                      const unsigned char *domain,                                      size_t domain_len);/* Add an access control specifier pragma to the constant and pragma   pools of the byte-code structure `bc'.  The argument `path' has   `path_len' bytes of UTF-8 data specifying the access path. */WsBool ws_bc_add_pragma_access_path(WsBc *bc,                                    const unsigned char *path,                                    size_t path_len);/* Add a use agent property pragma to the constant and pragma pools of   the byte-code structure `bc'.  The arguments `name' and `property'   are UTF-8 encoded use agent property. */WsBool ws_bc_add_pragma_user_agent_property(WsBc *bc,        const unsigned char *name,        size_t name_len,        const unsigned char *property,        size_t property_len);/* Add a use agent property pragma to the constant and pragma pools of   the byte-code structure `bc'.  The arguments `name', `property',   and `scheme' are UTF-8 encoded use agent property and scheme. */WsBool ws_bc_add_pragma_user_agent_property_and_scheme(    WsBc *bc,    const unsigned char *name,    size_t name_len,    const unsigned char *property,    size_t property_len,    const unsigned char *scheme,    size_t scheme_len);/********************* Adding functions *********************************//* Add a new function to the function pool of the byte-code structure   `bc'.  The argument `name' specifies the name of the function for   external functions.  For internal functions, the `name' argument   must be NULL.  The argument `num_arguments' specifies the number of   arguments the function takes.  The argument `num_locals' specifies   how many local variables the function needs.  The byte-code of the   function is in `code' and it is `code_size' bytes long.  The   function takes a copy of the byte-code array `code'.  The caller   can free / modify the original array, pointed by the argument   `code', after the function returns.  The function returns WS_TRUE   if the adding was successful or WS_FALSE otherwise (out of   memory). */WsBool ws_bc_add_function(WsBc *bc, WsUInt8 *index_return,                          char *name, WsUInt8 num_arguments,                          WsUInt8 num_locals, WsUInt32 code_size,                          unsigned char *code);#endif /* not WSBC_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -