Main Page | Alphabetical List | Data Structures | Directories | File List | Data Fields | Globals

msg.h

Go to the documentation of this file.
00001 /* ==================================================================== 
00002  * The Kannel Software License, Version 1.0 
00003  * 
00004  * Copyright (c) 2001-2008 Kannel Group  
00005  * Copyright (c) 1998-2001 WapIT Ltd.   
00006  * All rights reserved. 
00007  * 
00008  * Redistribution and use in source and binary forms, with or without 
00009  * modification, are permitted provided that the following conditions 
00010  * are met: 
00011  * 
00012  * 1. Redistributions of source code must retain the above copyright 
00013  *    notice, this list of conditions and the following disclaimer. 
00014  * 
00015  * 2. Redistributions in binary form must reproduce the above copyright 
00016  *    notice, this list of conditions and the following disclaimer in 
00017  *    the documentation and/or other materials provided with the 
00018  *    distribution. 
00019  * 
00020  * 3. The end-user documentation included with the redistribution, 
00021  *    if any, must include the following acknowledgment: 
00022  *       "This product includes software developed by the 
00023  *        Kannel Group (http://www.kannel.org/)." 
00024  *    Alternately, this acknowledgment may appear in the software itself, 
00025  *    if and wherever such third-party acknowledgments normally appear. 
00026  * 
00027  * 4. The names "Kannel" and "Kannel Group" must not be used to 
00028  *    endorse or promote products derived from this software without 
00029  *    prior written permission. For written permission, please  
00030  *    contact org@kannel.org. 
00031  * 
00032  * 5. Products derived from this software may not be called "Kannel", 
00033  *    nor may "Kannel" appear in their name, without prior written 
00034  *    permission of the Kannel Group. 
00035  * 
00036  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED 
00037  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 
00038  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
00039  * DISCLAIMED.  IN NO EVENT SHALL THE KANNEL GROUP OR ITS CONTRIBUTORS 
00040  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,  
00041  * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT  
00042  * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR  
00043  * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,  
00044  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE  
00045  * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,  
00046  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
00047  * ==================================================================== 
00048  * 
00049  * This software consists of voluntary contributions made by many 
00050  * individuals on behalf of the Kannel Group.  For more information on  
00051  * the Kannel Group, please see <http://www.kannel.org/>. 
00052  * 
00053  * Portions of this software are based upon software originally written at  
00054  * WapIT Ltd., Helsinki, Finland for the Kannel project.  
00055  */ 
00056 
00057 /*
00058  * msg.h - declarations for message manipulation
00059  * 
00060  * This file declares the Msg data type and the functions to manipulate it.
00061  * 
00062  * Lars Wirzenius
00063  */
00064 
00065 
00066 #ifndef MSG_H
00067 #define MSG_H
00068 
00069 #include "gwlib/gwlib.h"
00070 
00071 #define MSG_PARAM_UNDEFINED -1
00072 
00073 enum msg_type {
00074     #define MSG(type, stmt) type,
00075     #include "msg-decl.h"
00076     msg_type_count
00077 };
00078 
00079 typedef struct {
00080     enum msg_type type;
00081 
00082     #define INTEGER(name) long name
00083     #define OCTSTR(name) Octstr *name
00084     #define UUID(name) uuid_t name
00085     #define VOID(name) void *name
00086     #define MSG(type, stmt) struct type stmt type;
00087     #include "msg-decl.h"
00088 } Msg;
00089 
00090 struct split_parts {
00091     Msg *orig;
00092     Counter *parts_left;
00093     long status;
00094 };
00095 
00096 /* enums for Msg fields */
00097 
00098 /* sms message type */
00099 
00100 enum {
00101     mo = 0,
00102     mt_reply = 1,
00103     mt_push = 2,
00104     report_mo = 3,
00105     report_mt = 4
00106 };
00107 
00108 /* admin commands */
00109 enum {
00110     cmd_shutdown = 0,
00111     cmd_suspend = 1,
00112     cmd_resume = 2,
00113     cmd_identify = 3,
00114     cmd_restart = 4
00115 };
00116 
00117 /* ack message status */
00118 typedef enum {
00119     ack_success = 0,
00120     ack_failed = 1,     /* do not try again (e.g. no route) */
00121     ack_failed_tmp = 2, /* temporary failed, try again (e.g. queue full) */
00122     ack_buffered = 3
00123 } ack_status_t;
00124 
00125 /*
00126  * Create a new, empty Msg object. Panics if fails.
00127  */
00128 Msg *msg_create_real(enum msg_type type, const char *file, long line,
00129                      const char *func);
00130 #define msg_create(type) \
00131     gw_claim_area(msg_create_real((type), __FILE__, __LINE__, __func__))
00132 
00133 /*
00134  * Create a new Msg object that is a copy of an existing one.
00135  * Panics if fails.
00136  */
00137 Msg *msg_duplicate(Msg *msg);
00138 
00139 
00140 /*
00141  * Return type of the message
00142  */
00143 enum msg_type msg_type(Msg *msg);
00144 
00145 
00146 /*
00147  * Destroy an Msg object. All fields are also destroyed.
00148  */
00149 void msg_destroy(Msg *msg);
00150 
00151 
00152 /*
00153  * Destroy an Msg object. Wrapper around msg_destroy to make it suitable for
00154  * gwlist_destroy.
00155  */
00156 void msg_destroy_item(void *msg);
00157 
00158 
00159 /*
00160  * For debugging: Output with `debug' (in gwlib/log.h) the contents of
00161  * an Msg object.
00162  */
00163 void msg_dump(Msg *msg, int level);
00164 
00165 
00166 /*
00167  * Pack an Msg into an Octstr. Panics if fails.
00168   */
00169 Octstr *msg_pack(Msg *msg);
00170 
00171 
00172 /*
00173  * Unpack an Msg from an Octstr. Return NULL for failure, otherwise a pointer
00174  * to the Msg.
00175  */
00176 Msg *msg_unpack_real(Octstr *os, const char *file, long line, const char *func);
00177 #define msg_unpack(os) \
00178     gw_claim_area(msg_unpack_real((os), __FILE__, __LINE__, __func__))
00179 Msg *msg_unpack_wrapper(Octstr *os);
00180 
00181 #endif
See file LICENSE for details about the license agreement for using, modifying, copying or deriving work from this software.