|  | /* | 
|  | *  Copyright (c) 2025 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 API_DATA_CHANNEL_EVENT_OBSERVER_INTERFACE_H_ | 
|  | #define API_DATA_CHANNEL_EVENT_OBSERVER_INTERFACE_H_ | 
|  |  | 
|  | #include <cstdint> | 
|  | #include <string> | 
|  | #include <vector> | 
|  |  | 
|  | #include "absl/strings/string_view.h" | 
|  | #include "api/array_view.h" | 
|  |  | 
|  | namespace webrtc { | 
|  |  | 
|  | // TODO: issues.chromium.org/407785197 - Maybe update the observer to also | 
|  | // notify on controll messages as well. | 
|  | // TODO: issues.chromium.org/407785197 - Remove comment below when DataChannel | 
|  | // logging has been launched. | 
|  | // NOTE: This class is still under development and may change without notice. | 
|  | class DataChannelEventObserverInterface { | 
|  | public: | 
|  | virtual ~DataChannelEventObserverInterface() = default; | 
|  |  | 
|  | class Message { | 
|  | public: | 
|  | enum class Direction { kSend, kReceive }; | 
|  | enum class DataType { kString, kBinary }; | 
|  |  | 
|  | // When `direction` is `kSend` the timestamp represent when the message was | 
|  | // handed over to the transport, if `direction` is `kReceive` then it | 
|  | // represent when the message was received from the transport. | 
|  | int64_t unix_timestamp_ms() const { return unix_timestamp_; } | 
|  | void set_unix_timestamp_ms(int64_t timestamp) { | 
|  | unix_timestamp_ = timestamp; | 
|  | } | 
|  |  | 
|  | int datachannel_id() const { return datachannel_id_; } | 
|  | void set_datachannel_id(int id) { datachannel_id_ = id; } | 
|  |  | 
|  | absl::string_view label() const { return label_; } | 
|  | void set_label(absl::string_view label) { label_ = std::string(label); } | 
|  |  | 
|  | Direction direction() const { return direction_; } | 
|  | void set_direction(Direction direction) { direction_ = direction; } | 
|  |  | 
|  | DataType data_type() const { return data_type_; } | 
|  | void set_data_type(DataType type) { data_type_ = type; } | 
|  |  | 
|  | const std::vector<uint8_t>& data() const { return data_; } | 
|  | void set_data(ArrayView<const uint8_t> d) { | 
|  | data_.assign(d.begin(), d.end()); | 
|  | } | 
|  |  | 
|  | private: | 
|  | int64_t unix_timestamp_; | 
|  | int datachannel_id_; | 
|  | std::string label_; | 
|  | Direction direction_; | 
|  | DataType data_type_; | 
|  | std::vector<uint8_t> data_; | 
|  | }; | 
|  |  | 
|  | virtual void OnMessage(const Message& message) = 0; | 
|  | }; | 
|  |  | 
|  | }  // namespace webrtc | 
|  |  | 
|  | #endif  // API_DATA_CHANNEL_EVENT_OBSERVER_INTERFACE_H_ |