/* * Copyright (c) 2012 Yoann Blein * Licensed under the simplified BSD license. * See Documentation/Licenses/BSD-simplified.txt for more information. */ #include #include #include #include #include namespace Swift { JingleRawUDPTransportPayloadSerializer::JingleRawUDPTransportPayloadSerializer() { } std::string JingleRawUDPTransportPayloadSerializer::serializePayload(boost::shared_ptr payload) const { XMLElement payloadXML("transport", "urn:xmpp:jingle:transports:raw-udp:1"); foreach (JingleRawUDPTransportPayload::Candidate candidate, payload->getCandidates()) { boost::shared_ptr candidateXML = boost::make_shared("candidate"); candidateXML->setAttribute("component", boost::lexical_cast(static_cast(candidate.component))); candidateXML->setAttribute("generation", boost::lexical_cast(static_cast(candidate.generation))); candidateXML->setAttribute("id", candidate.cid); candidateXML->setAttribute("ip", candidate.hostAddressPort.getAddress().toString()); candidateXML->setAttribute("port", boost::lexical_cast(candidate.hostAddressPort.getPort())); if (candidate.type != JingleRawUDPTransportPayload::Candidate::Unknown) candidateXML->setAttribute("type", typeToString(candidate.type)); payloadXML.addNode(candidateXML); } return payloadXML.serialize(); } std::string JingleRawUDPTransportPayloadSerializer::typeToString(JingleRawUDPTransportPayload::Candidate::Type type) const { switch (type) { case JingleRawUDPTransportPayload::Candidate::Unknown: return ""; case JingleRawUDPTransportPayload::Candidate::Host: return "host"; case JingleRawUDPTransportPayload::Candidate::PeerReflected: return "prflx"; case JingleRawUDPTransportPayload::Candidate::Relayed: return "relay"; case JingleRawUDPTransportPayload::Candidate::ServerReflected: return "srflx"; } assert(false); return ""; } }