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