Commit 9ca8189d authored by Lev Walkin's avatar Lev Walkin

added XML characters escaping

parent 20d7d907
...@@ -621,12 +621,68 @@ cb_failed: ...@@ -621,12 +621,68 @@ cb_failed:
_ASN_ENCODE_FAILED; _ASN_ENCODE_FAILED;
} }
static struct OCTET_STRING__xer_escape_table_s {
char *string;
int size;
} OCTET_STRING__xer_escape_table[] = {
#define OSXET(s) { s, sizeof(s) - 1 }
OSXET("\074\156\165\154\057\076"), /* <nul/> */
OSXET("\074\163\157\150\057\076"), /* <soh/> */
OSXET("\074\163\164\170\057\076"), /* <stx/> */
OSXET("\074\145\164\170\057\076"), /* <etx/> */
OSXET("\074\145\157\164\057\076"), /* <eot/> */
OSXET("\074\145\156\161\057\076"), /* <enq/> */
OSXET("\074\141\143\153\057\076"), /* <ack/> */
OSXET("\074\142\145\154\057\076"), /* <bel/> */
OSXET("\074\142\163\057\076"), /* <bs/> */
OSXET("\011"), /* \t */
OSXET("\012"), /* \n */
OSXET("\074\166\164\057\076"), /* <vt/> */
OSXET("\074\146\146\057\076"), /* <ff/> */
OSXET("\015"), /* \r */
OSXET("\074\163\157\057\076"), /* <so/> */
OSXET("\074\163\151\057\076"), /* <si/> */
OSXET("\074\144\154\145\057\076"), /* <dle/> */
OSXET("\074\144\143\061\057\076"), /* <de1/> */
OSXET("\074\144\143\062\057\076"), /* <de2/> */
OSXET("\074\144\143\063\057\076"), /* <de3/> */
OSXET("\074\144\143\064\057\076"), /* <de4/> */
OSXET("\074\156\141\153\057\076"), /* <nak/> */
OSXET("\074\163\171\156\057\076"), /* <syn/> */
OSXET("\074\145\164\142\057\076"), /* <etb/> */
OSXET("\074\143\141\156\057\076"), /* <can/> */
OSXET("\074\145\155\057\076"), /* <em/> */
OSXET("\074\163\165\142\057\076"), /* <sub/> */
OSXET("\074\145\163\143\057\076"), /* <esc/> */
OSXET("\074\151\163\064\057\076"), /* <is4/> */
OSXET("\074\151\163\063\057\076"), /* <is3/> */
OSXET("\074\151\163\062\057\076"), /* <is2/> */
OSXET("\074\151\163\061\057\076"), /* <is1/> */
{ 0, 0 }, /* " " */
{ 0, 0 }, /* ! */
{ 0, 0 }, /* \" */
{ 0, 0 }, /* # */
{ 0, 0 }, /* $ */
{ 0, 0 }, /* % */
OSXET("\046\141\155\160\073"), /* &amp; */
{ 0, 0 }, /* ' */
{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* ()*+,-./ */
{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* 01234567 */
{0,0},{0,0},{0,0},{0,0}, /* 89:; */
OSXET("\046\154\164\073"), /* &lt; */
{ 0, 0 }, /* = */
OSXET("\046\147\164\073"), /* &gt; */
};
asn_enc_rval_t asn_enc_rval_t
OCTET_STRING_encode_xer_ascii(asn_TYPE_descriptor_t *td, void *sptr, OCTET_STRING_encode_xer_ascii(asn_TYPE_descriptor_t *td, void *sptr,
int ilevel, enum xer_encoder_flags_e flags, int ilevel, enum xer_encoder_flags_e flags,
asn_app_consume_bytes_f *cb, void *app_key) { asn_app_consume_bytes_f *cb, void *app_key) {
const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr;
asn_enc_rval_t er; asn_enc_rval_t er;
uint8_t *buf, *end;
uint8_t *ss; /* Sequence start */
ssize_t encoded_len = 0;
(void)ilevel; /* Unused argument */ (void)ilevel; /* Unused argument */
(void)flags; /* Unused argument */ (void)flags; /* Unused argument */
...@@ -634,10 +690,32 @@ OCTET_STRING_encode_xer_ascii(asn_TYPE_descriptor_t *td, void *sptr, ...@@ -634,10 +690,32 @@ OCTET_STRING_encode_xer_ascii(asn_TYPE_descriptor_t *td, void *sptr,
if(!st || !st->buf) if(!st || !st->buf)
_ASN_ENCODE_FAILED; _ASN_ENCODE_FAILED;
if(cb(st->buf, st->size, app_key) < 0) buf = st->buf;
end = buf + st->size;
for(ss = buf; buf < end; buf++) {
int ch = *buf;
int s_len; /* Special encoding sequence length */
/*
* Escape certain characters: X.680/11.15
*/
if(ch < sizeof(OCTET_STRING__xer_escape_table)
/sizeof(OCTET_STRING__xer_escape_table[0])
&& (s_len = OCTET_STRING__xer_escape_table[ch].size)) {
if(((buf - ss) && cb(ss, buf - ss, app_key) < 0)
|| cb(OCTET_STRING__xer_escape_table[ch].string, s_len,
app_key) < 0)
_ASN_ENCODE_FAILED;
encoded_len += (buf - ss) + s_len;
ss = buf + 1;
}
}
encoded_len += (buf - ss);
if((buf - ss) && cb(ss, buf - ss, app_key) < 0)
_ASN_ENCODE_FAILED; _ASN_ENCODE_FAILED;
er.encoded = st->size;
er.encoded = encoded_len;
return er; return er;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment