1 /*
2  * Copyright (C) 2006 Raul Tremsal
3  * File  : smpp34_structs.h
4  * Author: Raul Tremsal <ultraismo@yahoo.com>
5  *
6  * This file is part of libsmpp34 (c-open-smpp3.4 library).
7  *
8  * The libsmpp34 library is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public License as
10  * published by the Free Software Foundation; either version 2.1 of the
11  * License, or (at your option) any later version.
12  *
13  * This library is distributed in the hope that it will be useful, but
14  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15  * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
16  * License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public License
19  * along with this library; if not, write to the Free Software Foundation,
20  * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21  *
22  */
23 #ifndef _STB_H_
24 #define _STB_H_
25 
26 #include <sys/types.h>
27 
28 #define SMALL_BUFF      30
29 /* Identify PDUs ident ********************************************************/
30 #define MAX_TLV_SIZE         1024
31 #define MAX_DAD_SIZE         21
32 #define SERVICE_TYPE_LENGTH  6
33 #define ADDRESS_LENGTH       21
34 #define TIME_LENGTH          17
35 #define SHORT_MESSAGE_LENGTH 255
36 
37 /* Globals for definitions ****************************************************/
38 extern int  smpp34_errno;
39 extern char smpp34_strerror[2048];
40 
41 /* Define structures **********************************************************/
42 typedef struct tlv_t tlv_t;
43 typedef struct dad_t dad_t;
44 typedef struct udad_t udad_t;
45 typedef struct bind_transmitter_t bind_transmitter_t;
46 typedef struct bind_transmitter_resp_t bind_transmitter_resp_t;
47 typedef struct bind_receiver_t bind_receiver_t;
48 typedef struct bind_receiver_resp_t bind_receiver_resp_t;
49 typedef struct bind_transceiver_t bind_transceiver_t;
50 typedef struct bind_transceiver_resp_t bind_transceiver_resp_t;
51 typedef struct outbind_t outbind_t;
52 typedef struct unbind_t unbind_t;
53 typedef struct unbind_resp_t unbind_resp_t;
54 typedef struct generic_nack_t generic_nack_t;
55 typedef struct submit_sm_t submit_sm_t;
56 typedef struct submit_sm_resp_t submit_sm_resp_t;
57 typedef struct submit_multi_t submit_multi_t;
58 typedef struct submit_multi_resp_t submit_multi_resp_t;
59 typedef struct deliver_sm_t deliver_sm_t;
60 typedef struct deliver_sm_resp_t deliver_sm_resp_t;
61 typedef struct data_sm_t data_sm_t;
62 typedef struct data_sm_resp_t data_sm_resp_t;
63 typedef struct query_sm_t query_sm_t;
64 typedef struct query_sm_resp_t query_sm_resp_t;
65 typedef struct cancel_sm_t cancel_sm_t;
66 typedef struct cancel_sm_resp_t cancel_sm_resp_t;
67 typedef struct replace_sm_t replace_sm_t;
68 typedef struct replace_sm_resp_t replace_sm_resp_t;
69 typedef struct enquire_link_t enquire_link_t;
70 typedef struct alert_notification_t alert_notification_t;
71 
72 /* TYPEDEFs structs ***********************************************************/
73 #define instancia 0
74 #define U32( inst, par, _str ) uint32_t par;
75 #define U16( inst, par, _str ) uint16_t par;
76 #define U08( inst, par, _str ) uint8_t par;
77 
78 #define O_C_OCTET( inst, par, size ) uint8_t par[ size ];
79 #define C_OCTET( inst, par, size ) uint8_t par[ size ];
80 #define OCTET8( inst, par, size ) uint8_t par[ size ];
81 #define OCTET16( inst, par, size ) uint8_t par[ size ];
82 
83 #define TLV( inst, par, do_tlv ) tlv_t *par;
84 #define UUU( inst, par, size ) union { \
85         U08( inst, val08, valueDec_08 ); \
86         U16( inst, val16, valueDec_16 ); \
87         U32( inst, val32, valueDec_32 ); \
88     OCTET16( inst, octet, size        ); \
89 } par;
90 
91 #define DAD( inst, par, do_dest_address ) dad_t *par;
92 #define UU2( inst, par, size ) union { \
93     struct { \
94         U08( instancia, dest_addr_ton, str_addr_ton ); \
95         U08( instancia, dest_addr_npi, str_addr_npi ); \
96         C_OCTET( instancia, destination_addr, size  ); \
97     } sme; \
98     C_OCTET( instancia, dl_name, size ); \
99 } par;
100 
101 #define UDAD( inst, par, do_dest_address ) udad_t *par;
102 
103 struct dad_t {
104     #include "def_frame/dad.frame"
105 };
106 
107 struct udad_t {
108     #include "def_frame/udad.frame"
109 };
110 
111 struct tlv_t {
112     #include "def_frame/tlv.frame"
113 };
114 
115 struct bind_transmitter_t {
116     #include "def_frame/header.frame"
117     #include "def_frame/bind_transmitter.frame"
118 };
119 
120 struct bind_transmitter_resp_t {
121     #include "def_frame/header.frame"
122     #include "def_frame/bind_transmitter_resp.frame"
123 };
124 
125 struct bind_receiver_t {
126     #include "def_frame/header.frame"
127     #include "def_frame/bind_receiver.frame"
128 };
129 
130 struct bind_receiver_resp_t {
131     #include "def_frame/header.frame"
132     #include "def_frame/bind_receiver_resp.frame"
133 };
134 
135 struct bind_transceiver_t {
136     #include "def_frame/header.frame"
137     #include "def_frame/bind_transceiver.frame"
138 };
139 
140 struct bind_transceiver_resp_t {
141     #include "def_frame/header.frame"
142     #include "def_frame/bind_transceiver_resp.frame"
143 };
144 
145 struct outbind_t {
146     #include "def_frame/header.frame"
147     #include "def_frame/outbind.frame"
148 };
149 
150 struct unbind_t {
151     #include "def_frame/header.frame"
152 };
153 
154 struct unbind_resp_t {
155     #include "def_frame/header.frame"
156 };
157 
158 struct generic_nack_t {
159     #include "def_frame/header.frame"
160 };
161 
162 struct submit_sm_t {
163     #include "def_frame/header.frame"
164     #include "def_frame/submit_sm.frame"
165 };
166 
167 struct submit_sm_resp_t {
168     #include "def_frame/header.frame"
169     #include "def_frame/submit_sm_resp.frame"
170 };
171 
172 struct submit_multi_t {
173     #include "def_frame/header.frame"
174     #include "def_frame/submit_multi.frame"
175 };
176 
177 struct submit_multi_resp_t {
178     #include "def_frame/header.frame"
179     #include "def_frame/submit_multi_resp.frame"
180 };
181 
182 struct deliver_sm_t {
183     #include "def_frame/header.frame"
184     #include "def_frame/deliver_sm.frame"
185 };
186 
187 struct deliver_sm_resp_t {
188     #include "def_frame/header.frame"
189     #include "def_frame/deliver_sm_resp.frame"
190 };
191 
192 struct data_sm_t {
193     #include "def_frame/header.frame"
194     #include "def_frame/data_sm.frame"
195 };
196 
197 struct data_sm_resp_t {
198     #include "def_frame/header.frame"
199     #include "def_frame/data_sm_resp.frame"
200 };
201 
202 struct query_sm_t {
203     #include "def_frame/header.frame"
204     #include "def_frame/query_sm.frame"
205 };
206 
207 struct query_sm_resp_t {
208     #include "def_frame/header.frame"
209     #include "def_frame/query_sm_resp.frame"
210 };
211 
212 struct cancel_sm_t {
213     #include "def_frame/header.frame"
214     #include "def_frame/cancel_sm.frame"
215 };
216 
217 struct cancel_sm_resp_t {
218     #include "def_frame/header.frame"
219 };
220 
221 struct replace_sm_t {
222     #include "def_frame/header.frame"
223     #include "def_frame/replace_sm.frame"
224 };
225 
226 struct replace_sm_resp_t {
227     #include "def_frame/header.frame"
228 };
229 
230 struct enquire_link_t {
231     #include "def_frame/header.frame"
232 };
233 
234 typedef struct enquire_link_resp_t enquire_link_resp_t;
235 struct enquire_link_resp_t {
236     #include "def_frame/header.frame"
237 };
238 
239 struct alert_notification_t {
240     #include "def_frame/header.frame"
241     #include "def_frame/alert_notification.frame"
242 };
243 
244 #include "def_frame/clean.frame"
245 
246 #define PUTLOG( format, param, value, parse ){\
247     int lenerror = 0;\
248     lenerror = snprintf((char*)ptrerror,lefterror,format,#param,value,parse);\
249     ptrerror += lenerror; lefterror -= lenerror;\
250 }
251 
252 /* Prototypes *****************************************************************/
253 int smpp34_dumpBuf(uint8_t *dest, int destL, uint8_t *src, int srcL);
254 
255 int smpp34_dumpPdu(uint32_t type, uint8_t *dest, int size_dest, void* tt);
256 int smpp34_dumpPdu2(uint8_t *dest, int size_dest, void* tt);
257 
258 int smpp34_pack(uint32_t type,uint8_t *ptrBuf,int ptrSize,int *ptrLen,void* tt);
259 int smpp34_pack2(uint8_t *ptrBuf,int ptrSize,int *ptrLen,void* tt);
260 
261 int smpp34_unpack(uint32_t type, void* tt, uint8_t *ptrBuf, int ptrLen);
262 int smpp34_unpack2(void* tt, uint8_t *ptrBuf, int ptrLen);
263 #endif /* _STB_H_ */
264