/*
 *  Copyright 2019 The WebRTC project authors. All Rights Reserved.
 *
 *  Use of this source code is governed by a BSD-style license
 *  that can be found in the LICENSE file in the root of the source
 *  tree. An additional intellectual property rights grant can be found
 *  in the file PATENTS.  All contributing project authors may
 *  be found in the AUTHORS file in the root of the source tree.
 */

#ifndef PC_MEDIA_PROTOCOL_NAMES_H_
#define PC_MEDIA_PROTOCOL_NAMES_H_

#include "absl/strings/string_view.h"

namespace webrtc {

// Names or name prefixes of protocols as defined by SDP specifications,
// and generated in SDP produced by WebRTC.
extern const char kMediaProtocolSctp[];
extern const char kMediaProtocolUdpDtlsSctp[];
extern const char kMediaProtocolDtlsSavpf[];
extern const char kMediaProtocolSavpf[];
extern const char kMediaProtocolAvpf[];

// Exported for testing only
extern const char kMediaProtocolTcpDtlsSctp[];
extern const char kMediaProtocolDtlsSctp[];

// Returns true if the given media section protocol indicates use of RTP.
bool IsRtpProtocol(absl::string_view protocol);
// Returns true if the given media section protocol indicates use of SCTP.
bool IsSctpProtocol(absl::string_view protocol);

// Returns true if the given media protocol is unencrypted SCTP
bool IsPlainSctp(absl::string_view protocol);
// Returns true if the given media protocol is encrypted SCTP
bool IsDtlsSctp(absl::string_view protocol);

// Returns true if the given media protocol is unencrypted RTP
bool IsPlainRtp(absl::string_view protocol);
// Returns true if the given media protocol is encrypted RTP
bool IsDtlsRtp(absl::string_view protocol);

}  //  namespace webrtc


#endif  // PC_MEDIA_PROTOCOL_NAMES_H_
