Kannel: Open Source WAP and SMS gateway  svn-r5335
dlr_p.h
Go to the documentation of this file.
1 /* ====================================================================
2  * The Kannel Software License, Version 1.0
3  *
4  * Copyright (c) 2001-2018 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  * gw/dlr_p.h
59  *
60  * Implementation of handling delivery reports (DLRs)
61  * These are private header.
62  *
63  * Andreas Fink <andreas@fink.org>, 18.08.2001
64  * Stipe Tolj <stolj@wapme.de>, 22.03.2002
65  * Alexander Malysh <amalysh@centrium.de>
66 */
67 
68 #ifndef DLR_P_H
69 #define DLR_P_H 1
70 
71 #define DLR_TRACE 1
72 
73 /* Used in destination based queries for EMI/UUCP DLRs */
74 #define MIN_DST_LEN 7
75 /*
76  * The structure of a delivery report entry.
77  */
78 struct dlr_entry {
86  int mask;
87  int use_dst;
88 };
89 
90 /*
91  * Create struct dlr_entry and initialize it to zero
92  */
93 struct dlr_entry *dlr_entry_create(void);
94 
95 /*
96  * Destroy struct dlr_entry
97  */
98 void dlr_entry_destroy(struct dlr_entry *dlr);
99 
100 /*
101  * Duplicate dlr entry
102  */
103 struct dlr_entry *dlr_entry_duplicate(const struct dlr_entry *dlr);
104 
105 /*
106  * Callback functions to handle specific dlr storage type
107  */
108 struct dlr_storage {
109  /*
110  * Type of storage. Used for status reguest.
111  */
112  const char* type;
113  /*
114  * Add dlr entry into storage.
115  * NOTE: this function is responsible to destroy struct dlr_entry
116  */
117  void (*dlr_add) (struct dlr_entry *entry);
118  /*
119  * Find and return struct dlr_entry. If entry not found return NULL.
120  * NOTE: Caller will destroy struct dlr_entry
121  */
122  struct dlr_entry* (*dlr_get) (const Octstr *smsc, const Octstr *ts, const Octstr *dst);
123  /*
124  * Remove matching dlr entry from storage
125  */
126  void (*dlr_remove) (const Octstr *smsc, const Octstr *ts, const Octstr *dst);
127  /*
128  * Update dlr entry status field if any.
129  */
130  void (*dlr_update) (const Octstr *smsc, const Octstr *ts, const Octstr *dst, int status);
131  /*
132  * Return count dlr entries in storage.
133  */
134  long (*dlr_messages) (void);
135  /*
136  * Flush storage
137  */
138  void (*dlr_flush) (void);
139  /*
140  * Shutdown storage
141  */
142  void (*dlr_shutdown) (void);
143 };
144 
145 /*
146  * Will be used by DB based storage types.
147  * We have helper init function also.
148  */
151  long ttl;
161 };
162 
164 void dlr_db_fields_destroy(struct dlr_db_fields *fields);
165 
166 /*
167  * Storages we have already. This will gone in future
168  * if we have module API implemented.
169  */
170 struct dlr_storage *dlr_init_mem(Cfg *cfg);
173 struct dlr_storage *dlr_init_sdb(Cfg *cfg);
179 struct dlr_storage *dlr_init_cass(Cfg *cfg);
180 
181 
182 #endif /* DLR_P_H */
const char * type
Definition: dlr_p.h:112
struct dlr_storage * dlr_init_sdb(Cfg *cfg)
Definition: dlr_sdb.c:477
Octstr * url
Definition: dlr_p.h:84
void(* dlr_update)(const Octstr *smsc, const Octstr *ts, const Octstr *dst, int status)
Definition: dlr_p.h:130
Octstr * field_boxc
Definition: dlr_p.h:160
Octstr * service
Definition: dlr_p.h:83
struct dlr_storage * dlr_init_mysql(Cfg *cfg)
Definition: dlr_mysql.c:470
Octstr * boxc_id
Definition: dlr_p.h:85
struct dlr_storage * dlr_init_mem(Cfg *cfg)
Definition: dlr_mem.c:206
long(* dlr_messages)(void)
Definition: dlr_p.h:134
Octstr * field_src
Definition: dlr_p.h:154
Octstr * field_url
Definition: dlr_p.h:157
static Cfg * cfg
Definition: opensmppbox.c:95
void(* dlr_add)(struct dlr_entry *entry)
Definition: dlr_p.h:117
Octstr * field_status
Definition: dlr_p.h:159
struct dlr_storage * dlr_init_pgsql(Cfg *cfg)
Definition: dlr_pgsql.c:420
Octstr * table
Definition: dlr_p.h:150
Definition: cfg.c:164
struct dlr_storage * dlr_init_cass(Cfg *cfg)
Definition: dlr_cass.c:427
void(* dlr_flush)(void)
Definition: dlr_p.h:138
Octstr * source
Definition: dlr_p.h:81
struct dlr_storage * dlr_init_sqlite3(Cfg *cfg)
Definition: dlr_sqlite3.c:421
Octstr * timestamp
Definition: dlr_p.h:80
Octstr * field_serv
Definition: dlr_p.h:156
struct dlr_entry * dlr_entry_create(void)
Definition: dlr.c:103
struct dlr_storage * dlr_init_spool(Cfg *cfg)
Definition: dlr_spool.c:602
struct dlr_storage * dlr_init_redis(Cfg *cfg)
Definition: dlr_redis.c:576
void dlr_entry_destroy(struct dlr_entry *dlr)
Definition: dlr.c:142
Octstr * field_smsc
Definition: dlr_p.h:152
Octstr * destination
Definition: dlr_p.h:82
Definition: octstr.c:118
struct dlr_storage * dlr_init_oracle(Cfg *cfg)
Definition: dlr_oracle.c:428
Definition: cfg.c:73
void dlr_db_fields_destroy(struct dlr_db_fields *fields)
Definition: dlr.c:204
Definition: dlr_p.h:78
Octstr * smsc
Definition: dlr_p.h:79
struct dlr_storage * dlr_init_mssql(Cfg *cfg)
Definition: dlr_mssql.c:394
int mask
Definition: dlr_p.h:86
void(* dlr_remove)(const Octstr *smsc, const Octstr *ts, const Octstr *dst)
Definition: dlr_p.h:126
Octstr * field_ts
Definition: dlr_p.h:153
struct dlr_entry * dlr_entry_duplicate(const struct dlr_entry *dlr)
Definition: dlr.c:119
Octstr * field_dst
Definition: dlr_p.h:155
int use_dst
Definition: dlr_p.h:87
Octstr * field_mask
Definition: dlr_p.h:158
void(* dlr_shutdown)(void)
Definition: dlr_p.h:142
long ttl
Definition: dlr_p.h:151
struct dlr_db_fields * dlr_db_fields_create(CfgGroup *grp)
Definition: dlr.c:169
See file LICENSE for details about the license agreement for using, modifying, copying or deriving work from this software.