#include <string.h>
#include "smasi_pdu.h"
#include "smasi_pdu.def"
Go to the source code of this file.
|
#define | NONTERMINATED(name) p->name = NULL; |
|
#define | COMATERMINATED(name) p->name = NULL; |
|
#define | PDU(name, id, fields) |
|
#define | NONTERMINATED(name) octstr_destroy(p->name); |
|
#define | COMATERMINATED(name) octstr_destroy(p->name); |
|
#define | PDU(name, id, fields) case id: { struct name *p = &pdu->u.name; fields } break; |
|
#define | NONTERMINATED(name) p = *(&p); |
|
#define | COMATERMINATED(name) p = *(&p); |
|
#define | PDU(name, id, fields) case id: { struct name *p = &pdu->u.name; fields } break; |
|
#define | NONTERMINATED(name) p = *(&p); |
|
#define | COMATERMINATED(name) |
|
#define | PDU(name, id, fields) case id: { struct name *p = &pdu->u.name; fields } break; |
|
#define | NONTERMINATED(name) p = *(&p); |
|
#define | COMATERMINATED(name) p = *(&p); |
|
#define | PDU(name, id, fields) else if (strcmp(type_name, #name) == 0) type = id; |
|
#define | NONTERMINATED(name) p = *(&p); |
|
#define | COMATERMINATED(name) |
|
#define | PDU(name, id, fields) |
|
#define | NONTERMINATED(name) p = *(&p); |
|
#define | COMATERMINATED(name) octstr_dump_short(p->name, 2, #name); |
|
#define | PDU(name, id, fields) case id: { struct name *p = &pdu->u.name; fields } break; |
|
◆ COMATERMINATED [1/7]
#define COMATERMINATED |
( |
|
name | ) |
p->name = NULL; |
◆ COMATERMINATED [2/7]
◆ COMATERMINATED [3/7]
#define COMATERMINATED |
( |
|
name | ) |
p = *(&p); |
◆ COMATERMINATED [4/7]
#define COMATERMINATED |
( |
|
name | ) |
|
Value: octstr_append_char(os, '='); \
octstr_append(os, p->name); \
octstr_append_char(os, ','); }
void octstr_append_cstr(Octstr *ostr, const char *cstr)
◆ COMATERMINATED [5/7]
#define COMATERMINATED |
( |
|
name | ) |
p = *(&p); |
◆ COMATERMINATED [6/7]
#define COMATERMINATED |
( |
|
name | ) |
|
Value:#define octstr_duplicate(ostr)
int octstr_str_compare(const Octstr *ostr, const char *str)
◆ COMATERMINATED [7/7]
◆ NONTERMINATED [1/7]
#define NONTERMINATED |
( |
|
name | ) |
p->name = NULL; |
◆ NONTERMINATED [2/7]
◆ NONTERMINATED [3/7]
#define NONTERMINATED |
( |
|
name | ) |
p = *(&p); |
◆ NONTERMINATED [4/7]
#define NONTERMINATED |
( |
|
name | ) |
p = *(&p); |
◆ NONTERMINATED [5/7]
#define NONTERMINATED |
( |
|
name | ) |
p = *(&p); |
◆ NONTERMINATED [6/7]
#define NONTERMINATED |
( |
|
name | ) |
p = *(&p); |
◆ NONTERMINATED [7/7]
#define NONTERMINATED |
( |
|
name | ) |
p = *(&p); |
◆ PDU [1/7]
#define PDU |
( |
|
name, |
|
|
|
id, |
|
|
|
fields |
|
) |
| |
Value:case id: { \
struct
name *p = &pdu->u.name; \
pdu->type_name = #
name; \
fields \
} break;
◆ PDU [2/7]
#define PDU |
( |
|
name, |
|
|
|
id, |
|
|
|
fields |
|
) |
| case id: { struct name *p = &pdu->u.name; fields } break; |
◆ PDU [3/7]
#define PDU |
( |
|
name, |
|
|
|
id, |
|
|
|
fields |
|
) |
| case id: { struct name *p = &pdu->u.name; fields } break; |
◆ PDU [4/7]
#define PDU |
( |
|
name, |
|
|
|
id, |
|
|
|
fields |
|
) |
| case id: { struct name *p = &pdu->u.name; fields } break; |
◆ PDU [5/7]
#define PDU |
( |
|
name, |
|
|
|
id, |
|
|
|
fields |
|
) |
| else if (strcmp(type_name, #name) == 0) type = id; |
◆ PDU [6/7]
#define PDU |
( |
|
name, |
|
|
|
id, |
|
|
|
fields |
|
) |
| |
Value:case id: { \
Octstr * field_name = NULL; \
Octstr * field_value = NULL; \
struct
name *p = &pdu->u.name; \
if (field_name == NULL) break; \
if (field_value == NULL)
continue;
\ octstr_destroy(field_value); \
} \
} break;
static Octstr * copy_until_coma(Octstr *os, long *pos)
void octstr_destroy(Octstr *ostr)
static Octstr * copy_until_assign(Octstr *os, long *pos)
long octstr_len(const Octstr *ostr)
◆ PDU [7/7]
#define PDU |
( |
|
name, |
|
|
|
id, |
|
|
|
fields |
|
) |
| case id: { struct name *p = &pdu->u.name; fields } break; |
◆ copy_until_assign()
static Octstr* copy_until_assign |
( |
Octstr * |
os, |
|
|
long * |
pos |
|
) |
| |
|
static |
Definition at line 104 of file smasi_pdu.c.
References octstr_copy, octstr_get_cstr, octstr_len(), octstr_search_char(), and warning().
110 if (nul == -1 && (
octstr_len(os) - *pos) > 1) {
#define octstr_get_cstr(ostr)
#define octstr_copy(ostr, from, len)
long octstr_search_char(const Octstr *ostr, int ch, long pos)
void warning(int err, const char *fmt,...)
long octstr_len(const Octstr *ostr)
◆ copy_until_coma()
◆ decode_type()
◆ skip_until_after_colon()
static void skip_until_after_colon |
( |
Octstr * |
os, |
|
|
long * |
pos |
|
) |
| |
|
static |
◆ smasi_pdu_create()
SMASI_PDU* smasi_pdu_create |
( |
unsigned long |
type | ) |
|
Definition at line 132 of file smasi_pdu.c.
References SMASI_PDU::type, type, and warning().
Referenced by handle_pdu(), msg_to_pdu(), open_connection(), send_enquire_link(), send_logoff(), and smasi_pdu_unpack().
136 pdu = gw_malloc(
sizeof(*pdu));
140 #define NONTERMINATED(name) p->name = NULL; 141 #define COMATERMINATED(name) p->name = NULL; 142 #define PDU(name, id, fields) \ 144 struct name *p = &pdu->u.name; \ 145 pdu->type_name = #name; \ 146 pdu->needs_hyphen = (id < SMASI_HYPHEN_ID ? 1 : 0); \ 151 warning(0,
"Unknown SMASI_PDU type, internal error.");
void warning(int err, const char *fmt,...)
◆ smasi_pdu_destroy()
Definition at line 160 of file smasi_pdu.c.
References error(), and SMASI_PDU::type.
Referenced by handle_pdu(), open_connection(), send_enquire_link(), send_logoff(), send_messages(), and smasi_thread().
166 #define NONTERMINATED(name) octstr_destroy(p->name); 167 #define COMATERMINATED(name) octstr_destroy(p->name); 168 #define PDU(name, id, fields) \ 169 case id: { struct name *p = &pdu->u.name; fields } break; 172 error(0,
"Unknown SMASI_PDU type, internal error while destroying.");
void error(int err, const char *fmt,...)
◆ smasi_pdu_dump()
Definition at line 280 of file smasi_pdu.c.
References debug(), and warning().
Referenced by dump_pdu().
282 debug(
"sms.smasi", 0,
"SMASI PDU %p dump:", (
void *) pdu);
285 #define NONTERMINATED(name) p = *(&p); 286 #define COMATERMINATED(name) \ 287 octstr_dump_short(p->name, 2, #name); 288 #define PDU(name, id, fields) \ 289 case id: { struct name *p = &pdu->u.name; fields } break; 292 warning(0,
"Unknown SMASI_PDU type, internal error.");
295 debug(
"sms.smasi", 0,
"SMASI PDU dump ends.");
void warning(int err, const char *fmt,...)
void debug(const char *place, int err, const char *fmt,...)
◆ smasi_pdu_pack()
Definition at line 178 of file smasi_pdu.c.
References error(), SMASI_PDU::needs_hyphen, octstr_append_char(), octstr_append_cstr(), octstr_create, octstr_destroy(), octstr_insert(), SMASI_PDU::type, and SMASI_PDU::type_name.
Referenced by send_enquire_link(), send_logoff(), and send_pdu().
189 #define NONTERMINATED(name) p = *(&p); 190 #define COMATERMINATED(name) p = *(&p); 191 #define PDU(name, id, fields) \ 192 case id: { struct name *p = &pdu->u.name; fields } break; 195 error(0,
"Unknown SMASI_PDU type, internal error while packing.");
199 #define NONTERMINATED(name) p = *(&p); 200 #define COMATERMINATED(name) \ 201 if (p->name != NULL) { octstr_append_cstr(os, #name); \ 202 octstr_append_char(os, '='); \ 203 octstr_append(os, p->name); \ 204 octstr_append_char(os, ','); } 205 #define PDU(name, id, fields) \ 206 case id: { struct name *p = &pdu->u.name; fields } break; 209 error(0,
"Unknown SMASI_PDU type, internal error while packing.");
void error(int err, const char *fmt,...)
unsigned int needs_hyphen
void octstr_append_char(Octstr *ostr, int ch)
void octstr_append_cstr(Octstr *ostr, const char *cstr)
void octstr_insert(Octstr *ostr1, const Octstr *ostr2, long pos)
void octstr_destroy(Octstr *ostr)
#define octstr_create(cstr)
◆ smasi_pdu_read()
◆ smasi_pdu_unpack()
Definition at line 223 of file smasi_pdu.c.
References decode_type(), octstr_destroy(), octstr_get_cstr, skip_until_after_colon(), smasi_pdu_create(), type, and warning().
Referenced by read_pdu().
229 unsigned long type = 0;
235 if (strcmp(type_name,
"dummy") == 0)
type = 0;
236 #define NONTERMINATED(name) p = *(&p); 237 #define COMATERMINATED(name) p = *(&p); 238 #define PDU(name, id, fields) \ 239 else if (strcmp(type_name, #name) == 0) type = id; 241 else warning(0,
"unknown SMASI PDU type");
244 if (pdu == NULL)
return NULL;
250 #define NONTERMINATED(name) p = *(&p); 251 #define COMATERMINATED(name) \ 252 if (octstr_str_compare(field_name, #name) == 0 && field_value != NULL) \ 253 p->name = octstr_duplicate(field_value); 254 #define PDU(name, id, fields) \ 256 Octstr * field_name = NULL; \ 257 Octstr * field_value = NULL; \ 258 struct name *p = &pdu->u.name; \ 259 while (pos < octstr_len(data_without_len)) { \ 260 field_name = copy_until_assign(data_without_len, &pos); \ 261 if (field_name == NULL) break; \ 262 field_value = copy_until_coma(data_without_len, &pos); \ 263 if (field_value == NULL) continue; \ 265 octstr_destroy(field_name); \ 266 octstr_destroy(field_value); \ 271 warning(0,
"Unknown SMASI_PDU type, internal error while unpacking.");
static Octstr * decode_type(Octstr *os)
SMASI_PDU * smasi_pdu_create(unsigned long type)
#define octstr_get_cstr(ostr)
static void skip_until_after_colon(Octstr *os, long *pos)
void warning(int err, const char *fmt,...)
void octstr_destroy(Octstr *ostr)