OLD | NEW |
1 /* | 1 /* |
2 * libjingle | 2 * libjingle |
3 * Copyright 2004 Google Inc. | 3 * Copyright 2004 Google Inc. |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions are met: | 6 * modification, are permitted provided that the following conditions are met: |
7 * | 7 * |
8 * 1. Redistributions of source code must retain the above copyright notice, | 8 * 1. Redistributions of source code must retain the above copyright notice, |
9 * this list of conditions and the following disclaimer. | 9 * this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright notice, | 10 * 2. Redistributions in binary form must reproduce the above copyright notice, |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
56 | 56 |
57 using rtc::scoped_ptr; | 57 using rtc::scoped_ptr; |
58 | 58 |
59 // RTP Profile names | 59 // RTP Profile names |
60 // http://www.iana.org/assignments/rtp-parameters/rtp-parameters.xml | 60 // http://www.iana.org/assignments/rtp-parameters/rtp-parameters.xml |
61 // RFC4585 | 61 // RFC4585 |
62 const char kMediaProtocolAvpf[] = "RTP/AVPF"; | 62 const char kMediaProtocolAvpf[] = "RTP/AVPF"; |
63 // RFC5124 | 63 // RFC5124 |
64 const char kMediaProtocolDtlsSavpf[] = "UDP/TLS/RTP/SAVPF"; | 64 const char kMediaProtocolDtlsSavpf[] = "UDP/TLS/RTP/SAVPF"; |
65 | 65 |
66 // This should be replaced by "UDP/TLS/RTP/SAVPF", but we need to support it for | 66 // We always generate offers with "UDP/TLS/RTP/SAVPF" when using DTLS-SRTP, |
67 // now to be compatible with previous Chrome versions. | 67 // but we tolerate "RTP/SAVPF" in offers we receive, for compatibility. |
68 const char kMediaProtocolSavpf[] = "RTP/SAVPF"; | 68 const char kMediaProtocolSavpf[] = "RTP/SAVPF"; |
69 | 69 |
70 const char kMediaProtocolRtpPrefix[] = "RTP/"; | 70 const char kMediaProtocolRtpPrefix[] = "RTP/"; |
71 | 71 |
72 const char kMediaProtocolSctp[] = "SCTP"; | 72 const char kMediaProtocolSctp[] = "SCTP"; |
73 const char kMediaProtocolDtlsSctp[] = "DTLS/SCTP"; | 73 const char kMediaProtocolDtlsSctp[] = "DTLS/SCTP"; |
74 const char kMediaProtocolUdpDtlsSctp[] = "UDP/DTLS/SCTP"; | 74 const char kMediaProtocolUdpDtlsSctp[] = "UDP/DTLS/SCTP"; |
75 const char kMediaProtocolTcpDtlsSctp[] = "TCP/DTLS/SCTP"; | 75 const char kMediaProtocolTcpDtlsSctp[] = "TCP/DTLS/SCTP"; |
76 | 76 |
77 static bool IsMediaContentOfType(const ContentInfo* content, | 77 static bool IsMediaContentOfType(const ContentInfo* content, |
(...skipping 529 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
607 const std::string& content_name) { | 607 const std::string& content_name) { |
608 bool is_rtp = false; | 608 bool is_rtp = false; |
609 ContentInfo* content = sdesc->GetContentByName(content_name); | 609 ContentInfo* content = sdesc->GetContentByName(content_name); |
610 if (IsMediaContent(content)) { | 610 if (IsMediaContent(content)) { |
611 MediaContentDescription* media_desc = | 611 MediaContentDescription* media_desc = |
612 static_cast<MediaContentDescription*>(content->description); | 612 static_cast<MediaContentDescription*>(content->description); |
613 if (!media_desc) { | 613 if (!media_desc) { |
614 return false; | 614 return false; |
615 } | 615 } |
616 is_rtp = media_desc->protocol().empty() || | 616 is_rtp = media_desc->protocol().empty() || |
617 rtc::starts_with(media_desc->protocol().data(), | 617 (media_desc->protocol().find(cricket::kMediaProtocolRtpPrefix) != |
618 kMediaProtocolRtpPrefix); | 618 std::string::npos); |
619 } | 619 } |
620 return is_rtp; | 620 return is_rtp; |
621 } | 621 } |
622 | 622 |
623 // Updates the crypto parameters of the |sdesc| according to the given | 623 // Updates the crypto parameters of the |sdesc| according to the given |
624 // |bundle_group|. The crypto parameters of all the contents within the | 624 // |bundle_group|. The crypto parameters of all the contents within the |
625 // |bundle_group| should be updated to use the common subset of the | 625 // |bundle_group| should be updated to use the common subset of the |
626 // available cryptos. | 626 // available cryptos. |
627 static bool UpdateCryptoParamsForBundle(const ContentGroup& bundle_group, | 627 static bool UpdateCryptoParamsForBundle(const ContentGroup& bundle_group, |
628 SessionDescription* sdesc) { | 628 SessionDescription* sdesc) { |
(...skipping 411 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1040 | 1040 |
1041 // Since not all applications serialize and deserialize the media protocol, | 1041 // Since not all applications serialize and deserialize the media protocol, |
1042 // we will have to accept |protocol| to be empty. | 1042 // we will have to accept |protocol| to be empty. |
1043 return protocol == kMediaProtocolAvpf || protocol.empty() || | 1043 return protocol == kMediaProtocolAvpf || protocol.empty() || |
1044 protocol == kMediaProtocolSavpf || | 1044 protocol == kMediaProtocolSavpf || |
1045 (protocol == kMediaProtocolDtlsSavpf && secure_transport); | 1045 (protocol == kMediaProtocolDtlsSavpf && secure_transport); |
1046 } | 1046 } |
1047 | 1047 |
1048 static void SetMediaProtocol(bool secure_transport, | 1048 static void SetMediaProtocol(bool secure_transport, |
1049 MediaContentDescription* desc) { | 1049 MediaContentDescription* desc) { |
1050 if (!desc->cryptos().empty() || secure_transport) | 1050 if (!desc->cryptos().empty()) |
1051 desc->set_protocol(kMediaProtocolSavpf); | 1051 desc->set_protocol(kMediaProtocolSavpf); |
| 1052 else if (secure_transport) |
| 1053 desc->set_protocol(kMediaProtocolDtlsSavpf); |
1052 else | 1054 else |
1053 desc->set_protocol(kMediaProtocolAvpf); | 1055 desc->set_protocol(kMediaProtocolAvpf); |
1054 } | 1056 } |
1055 | 1057 |
1056 // Gets the TransportInfo of the given |content_name| from the | 1058 // Gets the TransportInfo of the given |content_name| from the |
1057 // |current_description|. If doesn't exist, returns a new one. | 1059 // |current_description|. If doesn't exist, returns a new one. |
1058 static const TransportDescription* GetTransportDescription( | 1060 static const TransportDescription* GetTransportDescription( |
1059 const std::string& content_name, | 1061 const std::string& content_name, |
1060 const SessionDescription* current_description) { | 1062 const SessionDescription* current_description) { |
1061 const TransportDescription* desc = NULL; | 1063 const TransportDescription* desc = NULL; |
(...skipping 883 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1945 } else if (channel_name == GICE_CHANNEL_NAME_DATA_RTP || | 1947 } else if (channel_name == GICE_CHANNEL_NAME_DATA_RTP || |
1946 channel_name == GICE_CHANNEL_NAME_DATA_RTCP) { | 1948 channel_name == GICE_CHANNEL_NAME_DATA_RTCP) { |
1947 *media_type = MEDIA_TYPE_DATA; | 1949 *media_type = MEDIA_TYPE_DATA; |
1948 return true; | 1950 return true; |
1949 } | 1951 } |
1950 | 1952 |
1951 return false; | 1953 return false; |
1952 } | 1954 } |
1953 | 1955 |
1954 } // namespace cricket | 1956 } // namespace cricket |
OLD | NEW |