• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *  Copyright 2011 The WebRTC project authors. All Rights Reserved.
3  *
4  *  Use of this source code is governed by a BSD-style license
5  *  that can be found in the LICENSE file in the root of the source
6  *  tree. An additional intellectual property rights grant can be found
7  *  in the file PATENTS.  All contributing project authors may
8  *  be found in the AUTHORS file in the root of the source tree.
9  */
10 
11 // This file contain functions for parsing and serializing SDP messages.
12 // Related RFC/draft including:
13 // * RFC 4566 - SDP
14 // * RFC 5245 - ICE
15 // * RFC 3388 - Grouping of Media Lines in SDP
16 // * RFC 4568 - SDP Security Descriptions for Media Streams
17 // * draft-lennox-mmusic-sdp-source-selection-02 -
18 //   Mechanisms for Media Source Selection in SDP
19 
20 #ifndef PC_WEBRTC_SDP_H_
21 #define PC_WEBRTC_SDP_H_
22 
23 #include <string>
24 
25 #include "media/base/codec.h"
26 #include "rtc_base/system/rtc_export.h"
27 
28 namespace cricket {
29 class Candidate;
30 }  // namespace cricket
31 
32 namespace rtc {
33 class StringBuilder;
34 }  // namespace rtc
35 
36 namespace webrtc {
37 class IceCandidateInterface;
38 class JsepIceCandidate;
39 class JsepSessionDescription;
40 struct SdpParseError;
41 
42 // Serializes the passed in JsepSessionDescription.
43 // Serialize SessionDescription including candidates if
44 // JsepSessionDescription has candidates.
45 // jdesc - The JsepSessionDescription object to be serialized.
46 // unified_plan_sdp - If set to true, include "a=msid" lines where appropriate.
47 // return - SDP string serialized from the arguments.
48 std::string SdpSerialize(const JsepSessionDescription& jdesc);
49 
50 // Serializes the passed in IceCandidateInterface to a SDP string.
51 // candidate - The candidate to be serialized.
52 std::string SdpSerializeCandidate(const IceCandidateInterface& candidate);
53 
54 // Serializes a cricket Candidate.
55 // candidate - The candidate to be serialized.
56 RTC_EXPORT std::string SdpSerializeCandidate(
57     const cricket::Candidate& candidate);
58 
59 // Deserializes the passed in SDP string to a JsepSessionDescription.
60 // message - SDP string to be Deserialized.
61 // jdesc - The JsepSessionDescription deserialized from the SDP string.
62 // error - The detail error information when parsing fails.
63 // return - true on success, false on failure.
64 bool SdpDeserialize(const std::string& message,
65                     JsepSessionDescription* jdesc,
66                     SdpParseError* error);
67 
68 // Deserializes the passed in SDP string to one JsepIceCandidate.
69 // The first line must be a=candidate line and only the first line will be
70 // parsed.
71 // message - The SDP string to be Deserialized.
72 // candidates - The JsepIceCandidate from the SDP string.
73 // error - The detail error information when parsing fails.
74 // return - true on success, false on failure.
75 RTC_EXPORT bool SdpDeserializeCandidate(const std::string& message,
76                                         JsepIceCandidate* candidate,
77                                         SdpParseError* error);
78 
79 // Deserializes the passed in SDP string to a cricket Candidate.
80 // The first line must be a=candidate line and only the first line will be
81 // parsed.
82 // transport_name - The transport name (MID) of the candidate.
83 // message - The SDP string to be deserialized.
84 // candidate - The cricket Candidate from the SDP string.
85 // error - The detail error information when parsing fails.
86 // return - true on success, false on failure.
87 RTC_EXPORT bool SdpDeserializeCandidate(const std::string& transport_name,
88                                         const std::string& message,
89                                         cricket::Candidate* candidate,
90                                         SdpParseError* error);
91 
92 // Parses |message| according to the grammar defined in RFC 5245, Section 15.1
93 // and, if successful, stores the result in |candidate| and returns true.
94 // If unsuccessful, returns false and stores error information in |error| if
95 // |error| is not null.
96 // If |is_raw| is false, |message| is expected to be prefixed with "a=".
97 // If |is_raw| is true, no prefix is expected in |messaage|.
98 RTC_EXPORT bool ParseCandidate(const std::string& message,
99                                cricket::Candidate* candidate,
100                                SdpParseError* error,
101                                bool is_raw);
102 
103 // Generates an FMTP line based on |parameters|. Please note that some
104 // parameters are not considered to be part of the FMTP line, see the function
105 // IsFmtpParam(). Returns true if the set of FMTP parameters is nonempty, false
106 // otherwise.
107 bool WriteFmtpParameters(const cricket::CodecParameterMap& parameters,
108                          rtc::StringBuilder* os);
109 
110 }  // namespace webrtc
111 
112 #endif  // PC_WEBRTC_SDP_H_
113