/* * Copyright (c) 2011 Tobias Markmann * Licensed under the simplified BSD license. * See Documentation/Licenses/BSD-simplified.txt for more information. */ #include #include #include #include #include #include #include #include #include #include #include namespace Swift { JingleContentPayloadSerializer::JingleContentPayloadSerializer() { } std::string JingleContentPayloadSerializer::serializePayload(boost::shared_ptr payload) const { XMLElement payloadXML("content"); payloadXML.setAttribute("creator", creatorToString(payload->getCreator())); payloadXML.setAttribute("name", payload->getName()); if (!payload->getDescriptions().empty()) { // JingleFileTransferDescription JingleFileTransferDescriptionSerializer ftSerializer; JingleFileTransferDescription::ref filetransfer; foreach(JingleDescription::ref desc, payload->getDescriptions()) { if ((filetransfer = boost::dynamic_pointer_cast(desc))) { payloadXML.addNode(boost::make_shared(ftSerializer.serializePayload(filetransfer))); } } } if (!payload->getTransports().empty()) { // JingleIBBTransportPayload JingleIBBTransportPayloadSerializer ibbSerializer; JingleIBBTransportPayload::ref ibb; // JingleS5BTransportPayload JingleS5BTransportPayloadSerializer s5bSerializer; JingleS5BTransportPayload::ref s5b; foreach(JingleTransportPayload::ref transport, payload->getTransports()) { if ((ibb = boost::dynamic_pointer_cast(transport))) { payloadXML.addNode(boost::make_shared(ibbSerializer.serializePayload(ibb))); } else if ((s5b = boost::dynamic_pointer_cast(transport))) { payloadXML.addNode(boost::make_shared(s5bSerializer.serializePayload(s5b))); } } } return payloadXML.serialize(); } std::string JingleContentPayloadSerializer::creatorToString(JingleContentPayload::Creator creator) const { switch(creator) { case JingleContentPayload::InitiatorCreator: return "initiator"; case JingleContentPayload::ResponderCreator: return "responder"; case JingleContentPayload::UnknownCreator: std::cerr << "Serializing unknown creator value." << std::endl; return "ERROR ERROR ERROR"; } assert(false); return ""; } }