diff options
Diffstat (limited to 'xmpp-vala/src/core')
-rw-r--r-- | xmpp-vala/src/core/stanza_node.vala | 3 | ||||
-rw-r--r-- | xmpp-vala/src/core/stanza_reader.vala | 56 |
2 files changed, 40 insertions, 19 deletions
diff --git a/xmpp-vala/src/core/stanza_node.vala b/xmpp-vala/src/core/stanza_node.vala index 0544cc1f..6ef3f0aa 100644 --- a/xmpp-vala/src/core/stanza_node.vala +++ b/xmpp-vala/src/core/stanza_node.vala @@ -333,6 +333,9 @@ public class StanzaNode : StanzaEntry { internal string printf(int i, string fmt_start_begin, string start_empty_end, string start_content_end, string fmt_end, string fmt_attr, bool no_ns = false) { string indent = string.nfill (i * 2, ' '); if (name == "#text") { + if (((!)val).length > 1000) { + return indent + "[... retracted for brevity ...]\n"; + } return indent + ((!)val).replace("\n", indent + "\n") + "\n"; } var sb = new StringBuilder(); diff --git a/xmpp-vala/src/core/stanza_reader.vala b/xmpp-vala/src/core/stanza_reader.vala index 72aa0b5f..c90390b5 100644 --- a/xmpp-vala/src/core/stanza_reader.vala +++ b/xmpp-vala/src/core/stanza_reader.vala @@ -63,14 +63,14 @@ public class StanzaReader { if (buffer_pos >= buffer_fill) { yield update_buffer(); } - char c = (char) buffer[buffer_pos++]; - return c; + return (char) buffer[buffer_pos++]; } private async char peek_single() throws XmlError { - var res = yield read_single(); - buffer_pos--; - return res; + if (buffer_pos >= buffer_fill) { + yield update_buffer(); + } + return (char) buffer[buffer_pos]; } private bool is_ws(uint8 what) { @@ -82,37 +82,55 @@ public class StanzaReader { } private async void skip_until_non_ws() throws XmlError { - while (is_ws(yield peek_single())) { - skip_single(); + if (buffer_pos >= buffer_fill) { + yield update_buffer(); + } + while (is_ws(buffer[buffer_pos])) { + buffer_pos++; + if (buffer_pos >= buffer_fill) { + yield update_buffer(); + } } } private async string read_until_ws() throws XmlError { var res = new StringBuilder(); - var what = yield peek_single(); - while (!is_ws(what)) { - res.append_c(yield read_single()); - what = yield peek_single(); + if (buffer_pos >= buffer_fill) { + yield update_buffer(); + } + while (!is_ws(buffer[buffer_pos])) { + res.append_c((char) buffer[buffer_pos++]); + if (buffer_pos >= buffer_fill) { + yield update_buffer(); + } } return res.str; } private async string read_until_char_or_ws(char x, char y = 0) throws XmlError { var res = new StringBuilder(); - var what = yield peek_single(); - while (what != x && what != y && !is_ws(what)) { - res.append_c(yield read_single()); - what = yield peek_single(); + if (buffer_pos >= buffer_fill) { + yield update_buffer(); + } + while (buffer[buffer_pos] != x && buffer[buffer_pos] != y && !is_ws(buffer[buffer_pos])) { + res.append_c((char) buffer[buffer_pos++]); + if (buffer_pos >= buffer_fill) { + yield update_buffer(); + } } return res.str; } private async string read_until_char(char x) throws XmlError { var res = new StringBuilder(); - var what = yield peek_single(); - while (what != x) { - res.append_c(yield read_single()); - what = yield peek_single(); + if (buffer_pos >= buffer_fill) { + yield update_buffer(); + } + while (buffer[buffer_pos] != x) { + res.append_c((char) buffer[buffer_pos++]); + if (buffer_pos >= buffer_fill) { + yield update_buffer(); + } } return res.str; } |