class Connection; class IceMessage; class StunMessage; class StunStats;
// Defines the interface for a port, which represents a local communication // mechanism that can be used to create connections to similar mechanisms of // the other client. Various types of ports will implement this interface. class PortInterface {
public:
virtual ~PortInterface();
// PrepareAddress will attempt to get an address for this port that other // clients can send to. It may take some time before the address is ready. // Once it is ready, we will send SignalAddressReady. If errors are // preventing the port from getting an address, it may send // SignalAddressError.
virtual void PrepareAddress() = 0;
// Returns the connection to the given address or NULL if none exists.
virtual Connection* GetConnection(const SocketAddress& remote_addr) = 0;
// Creates a new connection to the given address. enum CandidateOrigin { ORIGIN_THIS_PORT, ORIGIN_OTHER_PORT, ORIGIN_MESSAGE };
virtual Connection* CreateConnection(const Candidate& remote_candidate,
CandidateOrigin origin) = 0;
// Functions on the underlying socket(s).
virtual int SetOption(Socket::Option opt, int value) = 0;
virtual int GetOption(Socket::Option opt, int* value) = 0;
virtual int GetError() = 0;
// Sends the given packet to the given address, provided that the address is // that of a connection or an address that has sent to us already.
virtual int SendTo(std::span<const uint8_t> data, const SocketAddress& addr, const AsyncSocketPacketOptions& options, bool payload) { // This function has a default implementation in order to support // downstream code that has subclasses with the old SendTo method. // If a subclass implements neither, this will cause a recursion, // which should be easy to detect. // TODO: bugs.webrtc.org/42225170 - make pure virtual when the function // below has been removed. #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdeprecated-declarations" return SendTo(data.data(), data.size(), addr, options, payload); #pragma clang diagnostic pop
}
// This function is not marked ABSL_DEPRECATE_AND_INLINE() because // blindly inlining it will lead to unexpected behavior in subclasses.
[[deprecated("Use version with span")]] virtual int SendTo( constvoid* data,
size_t size, const SocketAddress& addr, const AsyncSocketPacketOptions& options, bool payload) { return SendTo(AsUint8Span(std::span(static_cast<constchar*>(data), size)),
addr, options, payload);
}
// Indicates that we received a successful STUN binding request from an // address that doesn't correspond to any current connection. To turn this // into a real connection, call CreateConnection.
[[deprecated("Use SubscribeUnknownAddress(const void* tag, ...)")]]
virtual void SubscribeUnknownAddress(
absl::AnyInvocable<void(PortInterface*, const SocketAddress&,
ProtocolType,
IceMessage*, const std::string&, bool)> callback) = 0;
virtual void SubscribeUnknownAddress( constvoid* tag,
absl::AnyInvocable<void(PortInterface*, const SocketAddress&,
ProtocolType,
IceMessage*, const std::string&, bool)> callback) = 0;
virtual void NotifyUnknownAddress(PortInterface* port, const SocketAddress& address,
ProtocolType proto,
IceMessage* msg, const std::string& rf, bool port_muxed) = 0; // Sends a response message (normal or error) to the given request. One of // these methods should be called as a response to SignalUnknownAddress.
virtual void SendBindingErrorResponse(StunMessage* message, const SocketAddress& addr, int error_code,
absl::string_view reason) = 0;
// Signaled when this port decides to delete itself because it no longer has // any usefulness.
[[deprecated("Use SubscribePortDestroyed(const void* tag, ...)")]]
virtual void SubscribePortDestroyed(
std::function<void(PortInterface*)> callback) = 0;
virtual void SubscribePortDestroyed( constvoid* tag,
std::function<void(PortInterface*)> callback) = 0;
// Signaled when Port discovers ice role conflict with the peer.
virtual void SubscribeRoleConflict(absl::AnyInvocable<void()> callback) = 0;
virtual void NotifyRoleConflict() = 0;
// Normally, packets arrive through a connection (or they result signaling of // unknown address). Calling this method turns off delivery of packets // through this port.
virtual void EnablePortPackets() = 0;
virtual void SubscribeReadPacket( constvoid* tag,
absl::AnyInvocable<void(PortInterface*,
std::span<const uint8_t>, const SocketAddress&)> callback) = 0;
// Removes and deletes a connection object. `DestroyConnection` will // delete the connection object directly whereas `DestroyConnectionAsync` // defers the `delete` operation to when the call stack has been unwound. // Async may be needed when deleting a connection object from within a // callback.
virtual void DestroyConnection(Connection* conn) = 0;
// The thread on which this port performs its I/O.
virtual TaskQueueBase* thread() = 0;
// The factory used to create the sockets of this port.
virtual PacketSocketFactory* socket_factory() const = 0;
// Identifies the generation that this port was created in.
virtual uint32_t generation() const = 0;
virtual void set_generation(uint32_t generation) = 0;
virtual bool send_retransmit_count_attribute() const = 0; // For debugging purposes.
virtual const std::string& content_name() const = 0;
// Called when the Connection discovers a local peer reflexive candidate.
virtual void AddPrflxCandidate(const Candidate& local) = 0;
// Returns DSCP value packets generated by the port itself should use.
virtual DiffServCodePoint StunDscpValue() const = 0;
// If the given data comprises a complete and correct STUN message then the // return value is true, otherwise false. If the message username corresponds // with this port's username fragment, msg will contain the parsed STUN // message. Otherwise, the function may send a STUN response internally. // remote_username contains the remote fragment of the STUN username.
virtual bool GetStunMessage(std::span<const uint8_t> data, const SocketAddress& addr,
std::unique_ptr<IceMessage>* out_msg,
std::string* out_username) = 0;
// This method will return local and remote username fragements from the // stun username attribute if present.
virtual bool ParseStunUsername(const StunMessage* stun_msg,
std::string* local_username,
std::string* remote_username) const = 0;
virtual std::string CreateStunUsername(
absl::string_view remote_username) const = 0;
virtual int16_t network_cost() const = 0; // Connection and Port are entangled; functions exposed to Port only // should not be public. friendclass Connection;
};
} // namespace webrtc
#endif// P2P_BASE_PORT_INTERFACE_H_
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.22 Sekunden
(vorverarbeitet am 2026-08-26)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.