12ec418a4c98f6e8f95395456e1ad4c2956cac007David Pursell/* 22ec418a4c98f6e8f95395456e1ad4c2956cac007David Pursell * Copyright (C) 2016 The Android Open Source Project 32ec418a4c98f6e8f95395456e1ad4c2956cac007David Pursell * All rights reserved. 42ec418a4c98f6e8f95395456e1ad4c2956cac007David Pursell * 52ec418a4c98f6e8f95395456e1ad4c2956cac007David Pursell * Redistribution and use in source and binary forms, with or without 62ec418a4c98f6e8f95395456e1ad4c2956cac007David Pursell * modification, are permitted provided that the following conditions 72ec418a4c98f6e8f95395456e1ad4c2956cac007David Pursell * are met: 82ec418a4c98f6e8f95395456e1ad4c2956cac007David Pursell * * Redistributions of source code must retain the above copyright 92ec418a4c98f6e8f95395456e1ad4c2956cac007David Pursell * notice, this list of conditions and the following disclaimer. 102ec418a4c98f6e8f95395456e1ad4c2956cac007David Pursell * * Redistributions in binary form must reproduce the above copyright 112ec418a4c98f6e8f95395456e1ad4c2956cac007David Pursell * notice, this list of conditions and the following disclaimer in 122ec418a4c98f6e8f95395456e1ad4c2956cac007David Pursell * the documentation and/or other materials provided with the 132ec418a4c98f6e8f95395456e1ad4c2956cac007David Pursell * distribution. 142ec418a4c98f6e8f95395456e1ad4c2956cac007David Pursell * 152ec418a4c98f6e8f95395456e1ad4c2956cac007David Pursell * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 162ec418a4c98f6e8f95395456e1ad4c2956cac007David Pursell * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 172ec418a4c98f6e8f95395456e1ad4c2956cac007David Pursell * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 182ec418a4c98f6e8f95395456e1ad4c2956cac007David Pursell * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 192ec418a4c98f6e8f95395456e1ad4c2956cac007David Pursell * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 202ec418a4c98f6e8f95395456e1ad4c2956cac007David Pursell * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 212ec418a4c98f6e8f95395456e1ad4c2956cac007David Pursell * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 222ec418a4c98f6e8f95395456e1ad4c2956cac007David Pursell * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 232ec418a4c98f6e8f95395456e1ad4c2956cac007David Pursell * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 242ec418a4c98f6e8f95395456e1ad4c2956cac007David Pursell * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 252ec418a4c98f6e8f95395456e1ad4c2956cac007David Pursell * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 262ec418a4c98f6e8f95395456e1ad4c2956cac007David Pursell * SUCH DAMAGE. 272ec418a4c98f6e8f95395456e1ad4c2956cac007David Pursell */ 282ec418a4c98f6e8f95395456e1ad4c2956cac007David Pursell 292ec418a4c98f6e8f95395456e1ad4c2956cac007David Pursell#ifndef TCP_H_ 302ec418a4c98f6e8f95395456e1ad4c2956cac007David Pursell#define TCP_H_ 312ec418a4c98f6e8f95395456e1ad4c2956cac007David Pursell 322ec418a4c98f6e8f95395456e1ad4c2956cac007David Pursell#include <memory> 332ec418a4c98f6e8f95395456e1ad4c2956cac007David Pursell#include <string> 342ec418a4c98f6e8f95395456e1ad4c2956cac007David Pursell 352ec418a4c98f6e8f95395456e1ad4c2956cac007David Pursell#include <android-base/macros.h> 362ec418a4c98f6e8f95395456e1ad4c2956cac007David Pursell 372ec418a4c98f6e8f95395456e1ad4c2956cac007David Pursell#include "socket.h" 382ec418a4c98f6e8f95395456e1ad4c2956cac007David Pursell#include "transport.h" 392ec418a4c98f6e8f95395456e1ad4c2956cac007David Pursell 402ec418a4c98f6e8f95395456e1ad4c2956cac007David Pursellnamespace tcp { 412ec418a4c98f6e8f95395456e1ad4c2956cac007David Pursell 422ec418a4c98f6e8f95395456e1ad4c2956cac007David Pursellconstexpr int kDefaultPort = 5554; 432ec418a4c98f6e8f95395456e1ad4c2956cac007David Pursell 442ec418a4c98f6e8f95395456e1ad4c2956cac007David Pursell// Returns a newly allocated Transport object connected to |hostname|:|port|. On failure, |error| is 452ec418a4c98f6e8f95395456e1ad4c2956cac007David Pursell// filled and nullptr is returned. 462ec418a4c98f6e8f95395456e1ad4c2956cac007David Pursellstd::unique_ptr<Transport> Connect(const std::string& hostname, int port, std::string* error); 472ec418a4c98f6e8f95395456e1ad4c2956cac007David Pursell 482ec418a4c98f6e8f95395456e1ad4c2956cac007David Pursell// Internal namespace for test use only. 492ec418a4c98f6e8f95395456e1ad4c2956cac007David Pursellnamespace internal { 502ec418a4c98f6e8f95395456e1ad4c2956cac007David Pursell 512ec418a4c98f6e8f95395456e1ad4c2956cac007David Pursell// Creates a TCP Transport object but using a given Socket instead of connecting to a hostname. 522ec418a4c98f6e8f95395456e1ad4c2956cac007David Pursell// Used for unit tests to create a Transport object that uses a SocketMock. 532ec418a4c98f6e8f95395456e1ad4c2956cac007David Pursellstd::unique_ptr<Transport> Connect(std::unique_ptr<Socket> sock, std::string* error); 542ec418a4c98f6e8f95395456e1ad4c2956cac007David Pursell 552ec418a4c98f6e8f95395456e1ad4c2956cac007David Pursell} // namespace internal 562ec418a4c98f6e8f95395456e1ad4c2956cac007David Pursell 572ec418a4c98f6e8f95395456e1ad4c2956cac007David Pursell} // namespace tcp 582ec418a4c98f6e8f95395456e1ad4c2956cac007David Pursell 592ec418a4c98f6e8f95395456e1ad4c2956cac007David Pursell#endif // TCP_H_ 60