/src/botan/build/include/botan/internal/socket.h
Line | Count | Source (jump to first uncovered line) |
1 | | /* |
2 | | * OS specific utility functions |
3 | | * (C) 2015,2016,2017 Jack Lloyd |
4 | | * |
5 | | * Botan is released under the Simplified BSD License (see license.txt) |
6 | | */ |
7 | | |
8 | | #ifndef BOTAN_SOCKET_H_ |
9 | | #define BOTAN_SOCKET_H_ |
10 | | |
11 | | #include <botan/types.h> |
12 | | #include <string> |
13 | | #include <chrono> |
14 | | |
15 | | namespace Botan { |
16 | | |
17 | | namespace OS { |
18 | | |
19 | | /* |
20 | | * This header is internal (not installed) and these functions are not |
21 | | * intended to be called by applications. However they are given public |
22 | | * visibility (using BOTAN_TEST_API macro) for the tests. This also probably |
23 | | * allows them to be overridden by the application on ELF systems, but |
24 | | * this hasn't been tested. |
25 | | */ |
26 | | |
27 | | |
28 | | /** |
29 | | * A wrapper around a simple blocking TCP socket |
30 | | */ |
31 | | class BOTAN_TEST_API Socket |
32 | | { |
33 | | public: |
34 | | /** |
35 | | * The socket will be closed upon destruction |
36 | | */ |
37 | 0 | virtual ~Socket() = default; |
38 | | |
39 | | /** |
40 | | * Write to the socket. Blocks until all bytes sent. |
41 | | * Throws on error. |
42 | | */ |
43 | | virtual void write(const uint8_t buf[], size_t len) = 0; |
44 | | |
45 | | /** |
46 | | * Reads up to len bytes, returns bytes written to buf. |
47 | | * Returns 0 on EOF. Throws on error. |
48 | | */ |
49 | | virtual size_t read(uint8_t buf[], size_t len) = 0; |
50 | | }; |
51 | | |
52 | | /** |
53 | | * Open up a socket. Will throw on error. Returns null if sockets are |
54 | | * not available on this platform. |
55 | | */ |
56 | | std::unique_ptr<Socket> |
57 | | BOTAN_TEST_API open_socket(const std::string& hostname, |
58 | | const std::string& service, |
59 | | std::chrono::milliseconds timeout); |
60 | | |
61 | | } // OS |
62 | | } // Botan |
63 | | |
64 | | #endif |