Monday, November 08, 2010 at 12:06 AM.
system.verbs.builtins.tcp.im.builtinDrivers.jabber.code.messages.message
on message ( dest, text = nil, htmlText = nil, subject = nil, type = "chat", thread = nil, connection = @system.temp.jabber.connection) { <<Changes <<10/25/02; 2:27:50 PM by JES <<Entity-encode the text here instead of through a call to xml.entityEncode, per recommendation from Andre Radke. <<Radio and Frontier's implementation of xml.entityEncode are slightly different, but changing Frontier's xml.entityEncode verb would introduce too much possibility for breakage for the problem to be addressed at that level. <<5/14/02; 1:51:34 PM by JB <<Changelog created. on addAtt ( XMLadr, name, value ) { if not defined ( XMLadr^.["/atts"] ) { new ( tableType, @XMLadr^.["/atts"] )}; XMLadr^.["/atts"].[name] = value}; if not defined ( connection^ ) { // should I lock a semaphore after this? scriptError ( "Can't send the message because there is no active Jabber connection." )}; local ( flHaveHtml = (htmlText != nil), result, mesTag, htmlTable); new ( tableType, @result ); text = string ( text ); htmlText = string ( htmlText ); bundle { // text = xml.entityEncode(text,true) text = xml.entityEncode (text, false); text = string.replaceall (text, "&", "&"); text = string.replaceall (text, "<", "<"); text = string.replaceall (text, ">", ">"); text = string.replaceall (text, "\"", """); text = string.replaceall (text, "'", "'")}; bundle { // handle the text/htmlText conditions as described in the docs if flHaveHtml and typeOf ( htmlText ) == stringType { // convert into an XML table new (tableType, @htmlTable); try { xml.compile ( htmlText, @htmlTable )} else { scriptError ( "Can't send message via Jabber because the given htmlText did not compile correctly. xml.compile said: " + tryError )}}; if text == nil and not flHaveHtml { // prepare empty message text = ""}; if text == nil and flHaveHtml { // convert HTML to Text with string.htmlToEmail text = string.htmlToEmail(htmlText)}; if flHaveHtml { // make sure the HTML starts with <html>, or kick it out. if xml.convertToDisplayName ( nameOf ( htmlTable[1] ) ) != "html" { scriptError ( "Can't send HTML message over Jabber because the given htmlText is not a valid HTML document." )}}}; bundle { // <message from="username@server/resource" to="dest" type="chat"> mesTag = xml.addTable ( @result, "message" ); addAtt ( mesTag, "from", connection^.username + "@" + connection^.host + "/" + connection^.resource ); addAtt ( mesTag, "to", dest ); addAtt ( mesTag, "type", type )}; if subject != nil and subject != "" { xml.addValue(mesTag, "subject", subject )}; xml.addValue(mesTag, "body", text ); if flHaveHtml { table.copy(@htmlTable[1], mesTag)}; if thread != nil and thread != "" { xml.addValue(mesTag, "thread", thread)}; tcp.im.builtinDrivers.jabber.code.writeXML ( @result, connection: connection )}; message("Jeremy@192.168.0.4/Human", "Hello!")
This listing is for code that runs in the OPML Editor environment. I created these listings because I wanted the search engines to index it, so that when I want to look up something in my codebase I don't have to use the much slower search functionality in my object database. Dave Winer.