/* * Copyright (c) 2012 Yoann Blein * Licensed under the simplified BSD license. * See Documentation/Licenses/BSD-simplified.txt for more information. */ #include #include #include namespace Swift { JingleRawUDPTransportPayloadParser::JingleRawUDPTransportPayloadParser() : level(0) { } void JingleRawUDPTransportPayloadParser::handleStartElement(const std::string& element, const std::string&, const AttributeMap& attributes) { if (level == 1 && element == "candidate") { JingleRawUDPTransportPayload::Candidate candidate; // component try { candidate.component = boost::numeric_cast(boost::lexical_cast(attributes.getAttributeValue("component").get_value_or("0"))); } catch(boost::bad_lexical_cast &) { } // generation try { candidate.generation = boost::numeric_cast(boost::lexical_cast(attributes.getAttributeValue("generation").get_value_or("0"))); } catch(boost::bad_lexical_cast &) { } // id candidate.cid = attributes.getAttributeValue("id").get_value_or(""); // ip/port int port = -1; try { port = boost::lexical_cast(attributes.getAttributeValue("port").get_value_or("0")); } catch(boost::bad_lexical_cast &) { } candidate.hostAddressPort = HostAddressPort(HostAddress(attributes.getAttributeValue("ip").get_value_or("")), port); // type candidate.type = stringToType(attributes.getAttributeValue("type").get_value_or("")); getPayloadInternal()->addCandidate(candidate); } ++level; } void JingleRawUDPTransportPayloadParser::handleEndElement(const std::string&, const std::string&) { --level; } void JingleRawUDPTransportPayloadParser::handleCharacterData(const std::string&) { } JingleRawUDPTransportPayload::Candidate::Type JingleRawUDPTransportPayloadParser::stringToType(const std::string &str) const { if (str == "host") { return JingleRawUDPTransportPayload::Candidate::Host; } else if (str == "prflx") { return JingleRawUDPTransportPayload::Candidate::PeerReflected; } else if (str == "relay") { return JingleRawUDPTransportPayload::Candidate::Relayed; } else if (str == "srflx") { return JingleRawUDPTransportPayload::Candidate::ServerReflected; } else { return JingleRawUDPTransportPayload::Candidate::Unknown; } } }