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

dlr_p.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  * gw/dlr_p.h
00059  *
00060  * Implementation of handling delivery reports (DLRs)
00061  * These are private header.
00062  *
00063  * Andreas Fink <andreas@fink.org>, 18.08.2001
00064  * Stipe Tolj <stolj@wapme.de>, 22.03.2002
00065  * Alexander Malysh <amalysh@centrium.de>
00066 */
00067 
00068 #ifndef DLR_P_H
00069 #define DLR_P_H 1
00070 
00071 #define DLR_TRACE 1
00072 
00073 /*
00074  * The structure of a delivery report  entry.
00075  */
00076 struct dlr_entry {
00077    Octstr *smsc;
00078    Octstr *timestamp;
00079    Octstr *source;
00080    Octstr *destination;
00081    Octstr *service;
00082    Octstr *url;
00083    Octstr *boxc_id;
00084    int mask;
00085 };
00086 
00087 /*
00088  * Create struct dlr_entry and initialize it to zero
00089  */
00090 struct dlr_entry *dlr_entry_create(void);
00091 
00092 /*
00093  * Destroy struct dlr_entry
00094  */
00095 void dlr_entry_destroy(struct dlr_entry *dlr);
00096 
00097 /*
00098  * Duplicate dlr entry
00099  */
00100 struct dlr_entry *dlr_entry_duplicate(const struct dlr_entry *dlr);
00101 
00102 /* 
00103  * Callback functions to hanlde specifical dlr storage type 
00104  */
00105 struct dlr_storage {
00106     /*
00107      * Type of storage. Used for status reguest.
00108      */
00109     const char* type;
00110     /*
00111      * Add dlr entry into storage.
00112      * NOTE: this function is responsible to destroy struct dlr_entry
00113      */
00114     void (*dlr_add) (struct dlr_entry *entry);
00115     /*
00116      * Find and return struct dlr_entry. If entry not found return NULL.
00117      * NOTE: Caller will detroy struct dlr_entry
00118      */
00119     struct dlr_entry* (*dlr_get) (const Octstr *smsc, const Octstr *ts, const Octstr *dst);
00120     /*
00121      * Remove matching dlr entry from storage
00122      */
00123     void (*dlr_remove) (const Octstr *smsc, const Octstr *ts, const Octstr *dst);
00124     /*
00125      * Update dlr entry status field if any.
00126      */
00127     void (*dlr_update) (const Octstr *smsc, const Octstr *ts, const Octstr *dst, int status);
00128     /*
00129      * Return count dlr entries in storage.
00130      */
00131     long (*dlr_messages) (void);
00132     /*
00133      * Flush storage
00134      */
00135     void (*dlr_flush) (void);
00136     /*
00137      * Shutdown storage
00138      */
00139     void (*dlr_shutdown) (void);
00140 };
00141 
00142 /*
00143  * Will be used by DB based storage types.
00144  * We have helper init function also.
00145  */
00146 struct dlr_db_fields {
00147     Octstr *table;
00148     Octstr *field_smsc;
00149     Octstr *field_ts;
00150     Octstr *field_src;
00151     Octstr *field_dst;
00152     Octstr *field_serv;
00153     Octstr *field_url;
00154     Octstr *field_mask;
00155     Octstr *field_status;
00156     Octstr *field_boxc;
00157 };
00158 
00159 struct dlr_db_fields *dlr_db_fields_create(CfgGroup *grp);
00160 void dlr_db_fields_destroy(struct dlr_db_fields *fields);
00161 
00162 /*
00163  * Storages we have already. This will gone in future
00164  * if we have module API implemented.
00165  */
00166 struct dlr_storage *dlr_init_mem(Cfg *cfg);
00167 struct dlr_storage *dlr_init_mysql(Cfg *cfg);
00168 struct dlr_storage *dlr_init_sdb(Cfg *cfg);
00169 struct dlr_storage *dlr_init_oracle(Cfg *cfg);
00170 struct dlr_storage *dlr_init_pgsql(Cfg *cfg);
00171 
00172 
00173 #endif /* DLR_P_H */
See file LICENSE for details about the license agreement for using, modifying, copying or deriving work from this software.