1 // Copyright 2019 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CAST_RECEIVER_PUBLIC_RECEIVER_SOCKET_FACTORY_H_ 6 #define CAST_RECEIVER_PUBLIC_RECEIVER_SOCKET_FACTORY_H_ 7 8 #include <memory> 9 #include <vector> 10 11 #include "cast/common/public/cast_socket.h" 12 #include "platform/api/tls_connection_factory.h" 13 #include "platform/base/ip_address.h" 14 15 namespace openscreen { 16 namespace cast { 17 18 class ReceiverSocketFactory final : public TlsConnectionFactory::Client { 19 public: 20 class Client { 21 public: 22 virtual void OnConnected(ReceiverSocketFactory* factory, 23 const IPEndpoint& endpoint, 24 std::unique_ptr<CastSocket> socket) = 0; 25 virtual void OnError(ReceiverSocketFactory* factory, Error error) = 0; 26 27 protected: 28 virtual ~Client(); 29 }; 30 31 // |client| and |socket_client| must outlive |this|. 32 // TODO(btolsch): Add TaskRunner argument just for sequence checking. 33 ReceiverSocketFactory(Client* client, CastSocket::Client* socket_client); 34 ~ReceiverSocketFactory(); 35 36 // TlsConnectionFactory::Client overrides. 37 void OnAccepted(TlsConnectionFactory* factory, 38 std::vector<uint8_t> der_x509_peer_cert, 39 std::unique_ptr<TlsConnection> connection) override; 40 void OnConnected(TlsConnectionFactory* factory, 41 std::vector<uint8_t> der_x509_peer_cert, 42 std::unique_ptr<TlsConnection> connection) override; 43 void OnConnectionFailed(TlsConnectionFactory* factory, 44 const IPEndpoint& remote_address) override; 45 void OnError(TlsConnectionFactory* factory, Error error) override; 46 47 private: 48 Client* const client_; 49 CastSocket::Client* const socket_client_; 50 }; 51 52 } // namespace cast 53 } // namespace openscreen 54 55 #endif // CAST_RECEIVER_PUBLIC_RECEIVER_SOCKET_FACTORY_H_ 56