void BoshTransport::startNextRequest (const StringMap & additionalArgs, const ResultCallback & callback) { if (mState != Connected && mState != Closing){ Log (LogWarning) << LOGID << "Strange state" << std::endl; notifyAsync (callback, error::WrongState); return; } // Building Message mRid++; BoshNodeBuilder builder; builder.addAttribute("rid", toString(mRid)); builder.addAttribute("sid", mSid); builder.addAttribute("xmlns", "http://jabber.org/protocol/httpbind"); for (StringMap::const_iterator i = additionalArgs.begin(); i != additionalArgs.end(); i++) { builder.addAttribute(i->first.c_str(), i->second); } // Adding data.. for (std::deque<ByteArrayPtr>::const_iterator i = mOutputBuffer.begin(); i != mOutputBuffer.end(); i++) { builder.addContent(*i); } mOutputBuffer.clear(); // Sending sf::ByteArrayPtr data = sf::createByteArrayPtr (builder.toString()); mOpenRids[mRid] = data; mOpenRidCount++; executeRequest (data, mLongPollTimeoutMs, abind (dMemFun (this, &BoshTransport::onRequestReply), mRid, callback)); }
int testNodeBuildAndParse () { BoshNodeBuilder builder; builder.addAttribute("hello", "world"); builder.addAttribute("and", "anotherone"); builder.addContent (sf::createByteArrayPtr ("<bla>Hi dude</bla>")); builder.addContent (sf::createByteArrayPtr ("<bli></bli>")); String s = builder.toString(); printf ("Serialized code: %s\n", s.c_str()); BoshNodeParser parser; Error e = parser.parse(s); tcheck1(!e); tcheck1(parser.attribute("hello") == "world"); tcheck1(parser.attribute("and") == "anotherone"); String back = parser.content(); XMLChunk chunk = xml::parseDocument(back.c_str(), back.length()); tcheck1 (chunk.getChild("bla").text() == "Hi dude"); tcheck1 (chunk.getHasChild("bli")); return 0; }