Kannel: Open Source WAP and SMS gateway  svn-r5335
xml_shared.h File Reference
#include "gwlib/gwlib.h"

Go to the source code of this file.

Data Structures

struct  simple_binary_t
 

Macros

#define create_octstr_from_node(node)   (octstr_create(node->content))
 

Typedefs

typedef struct charset_t charset_t
 
typedef struct simple_binary_t simple_binary_t
 

Functions

void set_charset (Octstr *document, Octstr *charset)
 
Octstrfind_charset_encoding (Octstr *document)
 
unsigned char element_check_content (xmlNodePtr node)
 
int only_blanks (const char *text)
 
int parse_charset (Octstr *os)
 
Listwml_charsets (void)
 
simple_binary_tsimple_binary_create (void)
 
void simple_binary_destroy (simple_binary_t *bxml)
 
void simple_binary_output (Octstr *os, simple_binary_t *bxml)
 
void parse_end (simple_binary_t **bxml)
 
void output_char (int byte, simple_binary_t **bxml)
 
void parse_octet_string (Octstr *os, simple_binary_t **bxml)
 
void parse_inline_string (Octstr *temp, simple_binary_t **bxml)
 
void output_octet_string (Octstr *os, simple_binary_t **bxml)
 

Macro Definition Documentation

◆ create_octstr_from_node

#define create_octstr_from_node (   node)    (octstr_create(node->content))

Definition at line 141 of file xml_shared.h.

Typedef Documentation

◆ charset_t

typedef struct charset_t charset_t

Definition at line 71 of file xml_shared.h.

◆ simple_binary_t

Definition at line 77 of file xml_shared.h.

Function Documentation

◆ element_check_content()

unsigned char element_check_content ( xmlNodePtr  node)

Definition at line 242 of file xml_shared.c.

References only_blanks(), WBXML_ATTR_BIT, and WBXML_CONTENT_BIT.

Referenced by parse_element(), and parse_ota_syncsettings().

243 {
244  unsigned char status_bits = 0x00;
245 
246  if ((node->children != NULL) &&
247  !((node->children->next == NULL) &&
248  (node->children->type == XML_TEXT_NODE) &&
249  (only_blanks((char *)node->children->content))))
250  status_bits = WBXML_CONTENT_BIT;
251 
252  if (node->properties != NULL)
253  status_bits = status_bits | WBXML_ATTR_BIT;
254 
255  return status_bits;
256 }
int only_blanks(const char *text)
Definition: xml_shared.c:171
#define WBXML_CONTENT_BIT
#define WBXML_ATTR_BIT

◆ find_charset_encoding()

Octstr* find_charset_encoding ( Octstr document)

Definition at line 145 of file xml_shared.c.

References octstr_copy, octstr_destroy(), octstr_imm(), octstr_len(), octstr_search(), and octstr_strip_blanks().

Referenced by normalize_charset().

146 {
147  long gt = 0, enc = 0;
148  Octstr *encoding = NULL, *temp = NULL;
149 
150  enc = octstr_search(document, octstr_imm(" encoding="), 0);
151  gt = octstr_search(document, octstr_imm("?>"), 0);
152 
153  /* in case there is no encoding argument, assume always UTF-8 */
154  if (enc < 0 || enc + 10 > gt)
155  return NULL;
156 
157  temp = octstr_copy(document, enc + 10, gt - (enc + 10));
158  octstr_strip_blanks(temp);
159  encoding = octstr_copy(temp, 1, octstr_len(temp) - 2);
160  octstr_destroy(temp);
161 
162  return encoding;
163 }
long octstr_search(const Octstr *haystack, const Octstr *needle, long pos)
Definition: octstr.c:1070
void octstr_strip_blanks(Octstr *text)
Definition: octstr.c:1346
#define octstr_copy(ostr, from, len)
Definition: octstr.h:178
Octstr * octstr_imm(const char *cstr)
Definition: octstr.c:283
void octstr_destroy(Octstr *ostr)
Definition: octstr.c:324
long octstr_len(const Octstr *ostr)
Definition: octstr.c:342
Definition: octstr.c:118

◆ only_blanks()

int only_blanks ( const char *  text)

Definition at line 171 of file xml_shared.c.

References text.

Referenced by element_check_content(), and parse_ota_syncsettings().

172 {
173  int blank = 1;
174  int j=0;
175  int len = strlen(text);
176 
177  while ((j<len) && blank) {
178  blank = blank && isspace((int)text[j]);
179  j++;
180  }
181 
182  return blank;
183 }
char * text
Definition: smsc_cimd2.c:921

◆ output_char()

void output_char ( int  byte,
simple_binary_t **  bxml 
)

Definition at line 326 of file xml_shared.c.

References octstr_append_char().

Referenced by parse_attribute(), parse_element(), parse_end(), parse_ota_syncsettings(), and parse_url_value().

327 {
328  octstr_append_char((**binary).binary, byte);
329 }
void octstr_append_char(Octstr *ostr, int ch)
Definition: octstr.c:1517

◆ output_octet_string()

void output_octet_string ( Octstr os,
simple_binary_t **  bxml 
)

Definition at line 349 of file xml_shared.c.

References octstr_insert(), and octstr_len().

Referenced by parse_attribute(), parse_element(), and parse_octet_string().

350 {
351  octstr_insert((*sibxml)->binary, os, octstr_len((*sibxml)->binary));
352 }
void octstr_insert(Octstr *ostr1, const Octstr *ostr2, long pos)
Definition: octstr.c:1303
long octstr_len(const Octstr *ostr)
Definition: octstr.c:342

◆ parse_charset()

int parse_charset ( Octstr os)

Definition at line 189 of file xml_shared.c.

References character_sets, charset, charset_t::charset, gw_assert(), charset_t::MIBenum, number, octstr_convert_range(), octstr_copy, octstr_destroy(), octstr_duplicate, octstr_len(), octstr_search_char(), octstr_str_compare(), and octstr_truncate().

Referenced by parse_document().

190 {
191  Octstr *charset = NULL;
192  Octstr *number = NULL;
193  int i, j, cut = 0, ret = 0;
194 
195  gw_assert(os != NULL);
197 
198  /* The charset might be in lower case, so... */
200 
201  /*
202  * The character set is handled in two parts to make things easier.
203  * The cutting.
204  */
205  if ((cut = octstr_search_char(charset, '_', 0)) > 0) {
206  number = octstr_copy(charset, cut + 1, (octstr_len(charset) - (cut + 1)));
207  octstr_truncate(charset, cut);
208  }
209  else if ((cut = octstr_search_char(charset, '-', 0)) > 0) {
210  number = octstr_copy(charset, cut + 1, (octstr_len(charset) - (cut + 1)));
211  octstr_truncate(charset, cut);
212  }
213 
214  /* And table search. */
215  for (i = 0; character_sets[i].charset != NULL; i++)
217  for (j = i; octstr_str_compare(charset,
218  character_sets[j].charset) == 0; j++)
219  if (octstr_str_compare(number, character_sets[j].nro) == 0) {
220  ret = character_sets[j].MIBenum;
221  break;
222  }
223  break;
224  }
225 
226  /* UTF-8 is the default value */
227  if (character_sets[i].charset == NULL)
228  ret = character_sets[i-1].MIBenum;
229 
232 
233  return ret;
234 }
int number
Definition: smsc_cimd2.c:213
void octstr_convert_range(Octstr *ostr, long pos, long len, octstr_func_t map)
Definition: octstr.c:836
gw_assert(wtls_machine->packet_to_send !=NULL)
#define octstr_copy(ostr, from, len)
Definition: octstr.h:178
long octstr_search_char(const Octstr *ostr, int ch, long pos)
Definition: octstr.c:1012
Octstr * charset
Definition: test_ota.c:68
#define octstr_duplicate(ostr)
Definition: octstr.h:187
void octstr_destroy(Octstr *ostr)
Definition: octstr.c:324
long octstr_len(const Octstr *ostr)
Definition: octstr.c:342
Definition: octstr.c:118
charset_t character_sets[]
Definition: xml_shared.c:77
char * charset
Definition: xml_shared.c:72
int octstr_str_compare(const Octstr *ostr, const char *str)
Definition: octstr.c:973
void octstr_truncate(Octstr *ostr, int new_len)
Definition: octstr.c:1327
unsigned int MIBenum
Definition: xml_shared.c:74

◆ parse_end()

void parse_end ( simple_binary_t **  bxml)

Definition at line 321 of file xml_shared.c.

References binary, output_char(), and WBXML_END.

Referenced by parse_element(), and parse_node().

322 {
324 }
#define WBXML_END
void output_char(int byte, simple_binary_t **binary)
Definition: xml_shared.c:326

◆ parse_inline_string()

void parse_inline_string ( Octstr temp,
simple_binary_t **  bxml 
)

Definition at line 339 of file xml_shared.c.

References binary, octstr_destroy(), octstr_format(), octstr_format_append(), octstr_insert(), parse_octet_string(), WBXML_STR_END, and WBXML_STR_I.

Referenced by parse_attribute(), parse_ota_syncsettings(), parse_text(), and parse_url_value().

340 {
341  Octstr *startos;
342 
343  octstr_insert(temp, startos = octstr_format("%c", WBXML_STR_I), 0);
344  octstr_destroy(startos);
345  octstr_format_append(temp, "%c", WBXML_STR_END);
346  parse_octet_string(temp, binary);
347 }
void parse_octet_string(Octstr *os, simple_binary_t **binary)
Definition: xml_shared.c:331
#define WBXML_STR_END
#define WBXML_STR_I
void octstr_insert(Octstr *ostr1, const Octstr *ostr2, long pos)
Definition: octstr.c:1303
Octstr * octstr_format(const char *fmt,...)
Definition: octstr.c:2464
void octstr_destroy(Octstr *ostr)
Definition: octstr.c:324
Definition: octstr.c:118
void octstr_format_append(Octstr *os, const char *fmt,...)
Definition: octstr.c:2507

◆ parse_octet_string()

void parse_octet_string ( Octstr os,
simple_binary_t **  bxml 
)

Definition at line 331 of file xml_shared.c.

References binary, and output_octet_string().

Referenced by parse_cdata(), and parse_inline_string().

332 {
334 }
void output_octet_string(Octstr *os, simple_binary_t **sibxml)
Definition: xml_shared.c:349

◆ set_charset()

void set_charset ( Octstr document,
Octstr charset 
)

Definition at line 111 of file xml_shared.c.

References charset, charset_to_utf8(), octstr_append_data(), octstr_copy, octstr_create, octstr_delete(), octstr_destroy(), octstr_get_cstr, octstr_len(), octstr_search(), octstr_search_char(), and text.

Referenced by ota_compile(), si_compile(), and sl_compile().

112 {
113  long gt = 0, enc = 0;
114  Octstr *encoding = NULL, *text = NULL, *temp = NULL;
115 
116  if (octstr_len(charset) == 0)
117  return;
118 
119  encoding = octstr_create(" encoding");
120  enc = octstr_search(document, encoding, 0);
121  gt = octstr_search_char(document, '>', 0);
122 
123  if (enc < 0 || enc > gt) {
124  gt++;
125  text = octstr_copy(document, gt, octstr_len(document) - gt);
126  if (charset_to_utf8(text, &temp, charset) >= 0) {
127  octstr_delete(document, gt, octstr_len(document) - gt);
128  octstr_append_data(document, octstr_get_cstr(temp),
129  octstr_len(temp));
130  }
131 
132  octstr_destroy(temp);
134  }
135 
136  octstr_destroy(encoding);
137 }
void octstr_append_data(Octstr *ostr, const char *data, long len)
Definition: octstr.c:1497
int charset_to_utf8(Octstr *from, Octstr **to, Octstr *charset_from)
Definition: charset.c:526
long octstr_search(const Octstr *haystack, const Octstr *needle, long pos)
Definition: octstr.c:1070
#define octstr_get_cstr(ostr)
Definition: octstr.h:233
#define octstr_copy(ostr, from, len)
Definition: octstr.h:178
long octstr_search_char(const Octstr *ostr, int ch, long pos)
Definition: octstr.c:1012
Octstr * charset
Definition: test_ota.c:68
void octstr_delete(Octstr *ostr1, long pos, long len)
Definition: octstr.c:1527
char * text
Definition: smsc_cimd2.c:921
void octstr_destroy(Octstr *ostr)
Definition: octstr.c:324
#define octstr_create(cstr)
Definition: octstr.h:125
long octstr_len(const Octstr *ostr)
Definition: octstr.c:342
Definition: octstr.c:118

◆ simple_binary_create()

simple_binary_t* simple_binary_create ( void  )

Definition at line 284 of file xml_shared.c.

References binary, and octstr_create.

Referenced by ota_compile(), si_compile(), and sl_compile().

285 {
287 
288  binary = gw_malloc(sizeof(simple_binary_t));
289 
290  binary->wbxml_version = 0x00;
291  binary->public_id = 0x00;
292  binary->charset = 0x00;
293  binary->binary = octstr_create("");
294 
295  return binary;
296 }
#define octstr_create(cstr)
Definition: octstr.h:125

◆ simple_binary_destroy()

void simple_binary_destroy ( simple_binary_t bxml)

Definition at line 298 of file xml_shared.c.

References binary, and octstr_destroy().

Referenced by ota_compile(), si_compile(), and sl_compile().

299 {
300  if (binary == NULL)
301  return;
302 
303  octstr_destroy(binary->binary);
304  gw_free(binary);
305 }
void octstr_destroy(Octstr *ostr)
Definition: octstr.c:324

◆ simple_binary_output()

void simple_binary_output ( Octstr os,
simple_binary_t bxml 
)

Definition at line 311 of file xml_shared.c.

References binary, gw_assert(), octstr_append_uintvar(), octstr_format_append(), and octstr_len().

Referenced by ota_compile(), si_compile(), and sl_compile().

312 {
313  gw_assert(octstr_len(os) == 0);
314  octstr_format_append(os, "%c", binary->wbxml_version);
315  octstr_format_append(os, "%c", binary->public_id);
316  octstr_append_uintvar(os, binary->charset);
317  octstr_format_append(os, "%c", 0x00);
318  octstr_format_append(os, "%S", binary->binary);
319 }
gw_assert(wtls_machine->packet_to_send !=NULL)
long octstr_len(const Octstr *ostr)
Definition: octstr.c:342
void octstr_append_uintvar(Octstr *ostr, unsigned long value)
Definition: octstr.c:1931
void octstr_format_append(Octstr *os, const char *fmt,...)
Definition: octstr.c:2507

◆ wml_charsets()

List* wml_charsets ( void  )

Definition at line 262 of file xml_shared.c.

References character_sets, charset, charset_t::charset, gwlist_append(), gwlist_create, octstr_append(), octstr_append_char(), octstr_create, and octstr_imm().

Referenced by wap_appl_init().

263 {
264  int i;
265  List *result;
266  Octstr *charset;
267 
268  result = gwlist_create();
269  for (i = 0; character_sets[i].charset != NULL; i++) {
273  gwlist_append(result, charset);
274  }
275 
276  return result;
277 }
void gwlist_append(List *list, void *item)
Definition: list.c:179
void octstr_append(Octstr *ostr1, const Octstr *ostr2)
Definition: octstr.c:1504
void octstr_append_char(Octstr *ostr, int ch)
Definition: octstr.c:1517
Octstr * charset
Definition: test_ota.c:68
Octstr * octstr_imm(const char *cstr)
Definition: octstr.c:283
#define octstr_create(cstr)
Definition: octstr.h:125
Definition: octstr.c:118
charset_t character_sets[]
Definition: xml_shared.c:77
char * charset
Definition: xml_shared.c:72
#define gwlist_create()
Definition: list.h:136
Definition: list.c:102
See file LICENSE for details about the license agreement for using, modifying, copying or deriving work from this software.