123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174 |
- #ifndef PC_SRTP_TRANSPORT_H_
- #define PC_SRTP_TRANSPORT_H_
- #include <stddef.h>
- #include <cstdint>
- #include <memory>
- #include <string>
- #include <vector>
- #include "absl/types/optional.h"
- #include "api/crypto_params.h"
- #include "api/rtc_error.h"
- #include "p2p/base/packet_transport_internal.h"
- #include "pc/rtp_transport.h"
- #include "pc/srtp_session.h"
- #include "rtc_base/async_packet_socket.h"
- #include "rtc_base/buffer.h"
- #include "rtc_base/copy_on_write_buffer.h"
- #include "rtc_base/network_route.h"
- namespace webrtc {
- class SrtpTransport : public RtpTransport {
- public:
- explicit SrtpTransport(bool rtcp_mux_enabled);
- virtual ~SrtpTransport() = default;
-
- virtual RTCError SetSrtpSendKey(const cricket::CryptoParams& params);
- virtual RTCError SetSrtpReceiveKey(const cricket::CryptoParams& params);
- bool SendRtpPacket(rtc::CopyOnWriteBuffer* packet,
- const rtc::PacketOptions& options,
- int flags) override;
- bool SendRtcpPacket(rtc::CopyOnWriteBuffer* packet,
- const rtc::PacketOptions& options,
- int flags) override;
-
-
- bool IsSrtpActive() const override;
- bool IsWritable(bool rtcp) const override;
-
-
-
- bool SetRtpParams(int send_cs,
- const uint8_t* send_key,
- int send_key_len,
- const std::vector<int>& send_extension_ids,
- int recv_cs,
- const uint8_t* recv_key,
- int recv_key_len,
- const std::vector<int>& recv_extension_ids);
-
-
-
- bool SetRtcpParams(int send_cs,
- const uint8_t* send_key,
- int send_key_len,
- const std::vector<int>& send_extension_ids,
- int recv_cs,
- const uint8_t* recv_key,
- int recv_key_len,
- const std::vector<int>& recv_extension_ids);
- void ResetParams();
-
-
-
-
-
- void EnableExternalAuth();
- bool IsExternalAuthEnabled() const;
-
-
-
- bool IsExternalAuthActive() const;
-
- bool GetSrtpOverhead(int* srtp_overhead) const;
-
- bool GetRtpAuthParams(uint8_t** key, int* key_len, int* tag_len);
-
-
- void CacheRtpAbsSendTimeHeaderExtension(int rtp_abs_sendtime_extn_id) {
- rtp_abs_sendtime_extn_id_ = rtp_abs_sendtime_extn_id;
- }
- protected:
-
- void MaybeUpdateWritableState();
- private:
- void ConnectToRtpTransport();
- void CreateSrtpSessions();
- void OnRtpPacketReceived(rtc::CopyOnWriteBuffer packet,
- int64_t packet_time_us) override;
- void OnRtcpPacketReceived(rtc::CopyOnWriteBuffer packet,
- int64_t packet_time_us) override;
- void OnNetworkRouteChanged(
- absl::optional<rtc::NetworkRoute> network_route) override;
-
- void OnWritableState(rtc::PacketTransportInternal* packet_transport) override;
- bool ProtectRtp(void* data, int in_len, int max_len, int* out_len);
-
- bool ProtectRtp(void* data,
- int in_len,
- int max_len,
- int* out_len,
- int64_t* index);
- bool ProtectRtcp(void* data, int in_len, int max_len, int* out_len);
-
-
- bool UnprotectRtp(void* data, int in_len, int* out_len);
- bool UnprotectRtcp(void* data, int in_len, int* out_len);
- bool MaybeSetKeyParams();
- bool ParseKeyParams(const std::string& key_params, uint8_t* key, size_t len);
- const std::string content_name_;
- std::unique_ptr<cricket::SrtpSession> send_session_;
- std::unique_ptr<cricket::SrtpSession> recv_session_;
- std::unique_ptr<cricket::SrtpSession> send_rtcp_session_;
- std::unique_ptr<cricket::SrtpSession> recv_rtcp_session_;
- absl::optional<cricket::CryptoParams> send_params_;
- absl::optional<cricket::CryptoParams> recv_params_;
- absl::optional<int> send_cipher_suite_;
- absl::optional<int> recv_cipher_suite_;
- rtc::ZeroOnFreeBuffer<uint8_t> send_key_;
- rtc::ZeroOnFreeBuffer<uint8_t> recv_key_;
- bool writable_ = false;
- bool external_auth_enabled_ = false;
- int rtp_abs_sendtime_extn_id_ = -1;
- int decryption_failure_count_ = 0;
- };
- }
- #endif
|