10e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org/* 20e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * libjingle 30e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * Copyright 2012, Google Inc. 40e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * 50e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * Redistribution and use in source and binary forms, with or without 60e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * modification, are permitted provided that the following conditions are met: 70e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * 80e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * 1. Redistributions of source code must retain the above copyright notice, 90e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * this list of conditions and the following disclaimer. 100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * 2. Redistributions in binary form must reproduce the above copyright notice, 110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * this list of conditions and the following disclaimer in the documentation 120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * and/or other materials provided with the distribution. 130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * 3. The name of the author may not be used to endorse or promote products 140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * derived from this software without specific prior written permission. 150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * 160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org */ 270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "talk/app/webrtc/jsepicecandidate.h" 290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include <vector> 310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "talk/app/webrtc/webrtcsdp.h" 332a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org#include "webrtc/base/stringencode.h" 340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgnamespace webrtc { 360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgIceCandidateInterface* CreateIceCandidate(const std::string& sdp_mid, 380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int sdp_mline_index, 390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const std::string& sdp) { 400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return CreateIceCandidate(sdp_mid, sdp_mline_index, sdp, NULL); 410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgIceCandidateInterface* CreateIceCandidate(const std::string& sdp_mid, 440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int sdp_mline_index, 450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const std::string& sdp, 460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org SdpParseError* error) { 470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org JsepIceCandidate* jsep_ice = new JsepIceCandidate(sdp_mid, sdp_mline_index); 480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (!jsep_ice->Initialize(sdp, error)) { 490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org delete jsep_ice; 500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return NULL; 510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return jsep_ice; 530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgJsepIceCandidate::JsepIceCandidate(const std::string& sdp_mid, 560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int sdp_mline_index) 570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org : sdp_mid_(sdp_mid), 580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org sdp_mline_index_(sdp_mline_index) { 590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgJsepIceCandidate::JsepIceCandidate(const std::string& sdp_mid, 620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int sdp_mline_index, 630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const cricket::Candidate& candidate) 640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org : sdp_mid_(sdp_mid), 650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org sdp_mline_index_(sdp_mline_index), 660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org candidate_(candidate) { 670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgJsepIceCandidate::~JsepIceCandidate() { 700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgbool JsepIceCandidate::Initialize(const std::string& sdp, SdpParseError* err) { 730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return SdpDeserializeCandidate(sdp, this, err); 740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgbool JsepIceCandidate::ToString(std::string* out) const { 770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (!out) 780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return false; 790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org *out = SdpSerializeCandidate(*this); 800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return !out->empty(); 810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgJsepCandidateCollection::~JsepCandidateCollection() { 840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org for (std::vector<JsepIceCandidate*>::iterator it = candidates_.begin(); 850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org it != candidates_.end(); ++it) { 860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org delete *it; 870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgbool JsepCandidateCollection::HasCandidate( 910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const IceCandidateInterface* candidate) const { 920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool ret = false; 930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org for (std::vector<JsepIceCandidate*>::const_iterator it = candidates_.begin(); 940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org it != candidates_.end(); ++it) { 950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if ((*it)->sdp_mid() == candidate->sdp_mid() && 960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org (*it)->sdp_mline_index() == candidate->sdp_mline_index() && 970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org (*it)->candidate().IsEquivalent(candidate->candidate())) { 980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ret = true; 990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org break; 1000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 1010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 1020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return ret; 1030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 1040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} // namespace webrtc 106