summaryrefslogtreecommitdiff
path: root/MirOTR/entities.cpp
diff options
context:
space:
mode:
authoradmin@progandy.co.cc <admin@progandy.co.cc@eced67a3-f377-a0ae-92ae-d6de1850b05a>2010-09-15 18:01:16 +0000
committeradmin@progandy.co.cc <admin@progandy.co.cc@eced67a3-f377-a0ae-92ae-d6de1850b05a>2010-09-15 18:01:16 +0000
commit9ff42f0ce72e234de4ab575cb48ca7fa4a9992c7 (patch)
tree5541aad1b1bb4eca381977f1096ac2706ca1a396 /MirOTR/entities.cpp
parentfa7c6913dd96ba0282af7b5be85213bb1ce32efa (diff)
- fixed crash in Jabber. maybe other protocls were affected, too.
- added basic html conversion for outgoing data - fixed html conversion for incoming data git-svn-id: http://mirotr.googlecode.com/svn/trunk@14 eced67a3-f377-a0ae-92ae-d6de1850b05a
Diffstat (limited to 'MirOTR/entities.cpp')
-rw-r--r--MirOTR/entities.cpp32
1 files changed, 32 insertions, 0 deletions
diff --git a/MirOTR/entities.cpp b/MirOTR/entities.cpp
index c757b70..892681b 100644
--- a/MirOTR/entities.cpp
+++ b/MirOTR/entities.cpp
@@ -393,3 +393,35 @@ size_t decode_html_entities_utf8(char *dest, const char *src, size_t len)
*to = 0;
return (size_t)(to - dest);
}
+
+char * encode_html_entities_utf8(const char *src) {
+ const char *pos, *start=src;
+ std::string buf;
+ if (! (pos = strpbrk(start, "&<>\"\r")) ) return NULL;
+ while (pos) {
+ buf.append(start, pos-start);
+ start = pos+1;
+ switch (*pos) {
+ case '"':
+ buf.append("&quot;");
+ break;
+ case '<':
+ buf.append("&lt;");
+ break;
+ case '>':
+ buf.append("&gt;");
+ break;
+ case '&':
+ buf.append("&amp;");
+ break;
+ case '\r':
+ buf.append("<br>\r");
+ break;
+ }
+ pos = strpbrk(start, "&<>\"\r");
+ }
+ if (strlen(start)) buf.append(start);
+ pos = mir_strdup(buf.c_str());
+ buf.clear();
+ return (char*)pos;
+} \ No newline at end of file