Monday, November 08, 2010 at 12:06 AM.
system.verbs.builtins.tcp.im.builtinDrivers.jabber.code.handlers.iqVersion
on iqVersion ( connection, mesAdr, iq, query ) { <<Changes <<5/14/02; 1:51:34 PM by JB <<Changelog created. <<iqVersion will respond to a version information request from anybody, or handle on addAtt ( XMLadr, name, value ) { if not defined ( XMLadr^.["/atts"] ) { new ( tableType, @XMLadr^.["/atts"] )}; XMLadr^.["/atts"].[name] = value}; local ( type = xml.getAttributeValue ( iq, "type" ), reply ); if type == "error" { // don't know how this could fail, but do nothing return}; if type == "get" { // somebody is asking for our version info new ( tableType, @reply ); local ( id = "", from = xml.getAttributeValue(iq, "from") ); try { id = xml.getAttributeValue(iq, "id") }; // this should be sent, but we'll still return something if not bundle { // <iq id="id" type="result" to="from"> iq = xml.addTable ( @reply, "iq" ); if id != "" { addAtt(iq, "id", id) }; addAtt(iq, "type", "result"); addAtt(iq, "to", from )}; bundle { // query tag q = xml.addTable ( iq, "query"); addAtt ( q, "xmlns", "jabber:iq:version" )}; bundle { // send the version information xml.addValue(q, "name", "Frontier/Radio Userland"); xml.addValue(q, "os", environment.osFlavor ); xml.addValue(q, "version", "1.0")}; tcp.im.builtinDrivers.jabber.code.writeXML (iq, connection: connection ); return}; if type == "result" { // we are getting somebody's data back local ( id = xml.getAttributeValue ( iq, "id" ), from = xml.getAttributeValue ( iq, "from" ), idTbl ); idTbl = tcp.im.builtinDrivers.jabber.code.idTables.getAdr(id); if not defined(idTbl^) { return}; new ( tableType, @idTbl^.versionResults ); for item in query { if typeOf(item^) == stringType { local ( name = xml.convertToDisplayName( nameOf( item^ ) ), value = item^ ); idTbl^.versionResults[name] = value}}; // special case handling for the server; record server version info in the connection table if string.lower(from) == string.lower(connection^.host) { table.assign(@connection^.serverVersion, idTbl^.versionResults)}; return}}; iqRegister(@system.temp.jabber.references[1], nil, nil, nil, "temp" )
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.