xref: /aosp_15_r20/external/tpm2-tss/src/util/io.h (revision 758e9fba6fc9adbf15340f70c73baee7b168b1c9)
1*758e9fbaSOystein Eftevaag /* SPDX-License-Identifier: BSD-2-Clause */
2*758e9fbaSOystein Eftevaag /*
3*758e9fbaSOystein Eftevaag  * Copyright (c) 2015 - 2018 Intel Corporation
4*758e9fbaSOystein Eftevaag  * All rights reserved.
5*758e9fbaSOystein Eftevaag  */
6*758e9fbaSOystein Eftevaag #ifndef UTIL_IO_H
7*758e9fbaSOystein Eftevaag #define UTIL_IO_H
8*758e9fbaSOystein Eftevaag 
9*758e9fbaSOystein Eftevaag #ifdef _WIN32
10*758e9fbaSOystein Eftevaag #include <basetsd.h>
11*758e9fbaSOystein Eftevaag #include <winsock2.h>
12*758e9fbaSOystein Eftevaag #include <ws2tcpip.h>
13*758e9fbaSOystein Eftevaag #ifdef _MSC_VER
14*758e9fbaSOystein Eftevaag typedef SSIZE_T ssize_t;
15*758e9fbaSOystein Eftevaag #endif
16*758e9fbaSOystein Eftevaag #define _HOST_NAME_MAX MAX_COMPUTERNAME_LENGTH
17*758e9fbaSOystein Eftevaag 
18*758e9fbaSOystein Eftevaag #else
19*758e9fbaSOystein Eftevaag #include <arpa/inet.h>
20*758e9fbaSOystein Eftevaag #include <errno.h>
21*758e9fbaSOystein Eftevaag #include <sys/socket.h>
22*758e9fbaSOystein Eftevaag #include <sys/un.h>
23*758e9fbaSOystein Eftevaag #define _HOST_NAME_MAX _POSIX_HOST_NAME_MAX
24*758e9fbaSOystein Eftevaag #define SOCKET int
25*758e9fbaSOystein Eftevaag #define INVALID_SOCKET - 1
26*758e9fbaSOystein Eftevaag #define SOCKET_ERROR - 1
27*758e9fbaSOystein Eftevaag #endif
28*758e9fbaSOystein Eftevaag 
29*758e9fbaSOystein Eftevaag #include "tss2_tpm2_types.h"
30*758e9fbaSOystein Eftevaag 
31*758e9fbaSOystein Eftevaag #ifdef _WIN32
32*758e9fbaSOystein Eftevaag #define TEMP_RETRY(dest, exp) \
33*758e9fbaSOystein Eftevaag {   int __ret; \
34*758e9fbaSOystein Eftevaag     do { \
35*758e9fbaSOystein Eftevaag         __ret = exp; \
36*758e9fbaSOystein Eftevaag     } while (__ret == SOCKET_ERROR && WSAGetLastError() == WSAEINTR); \
37*758e9fbaSOystein Eftevaag     dest = __ret; }
38*758e9fbaSOystein Eftevaag #else
39*758e9fbaSOystein Eftevaag #define TEMP_RETRY(dest, exp) \
40*758e9fbaSOystein Eftevaag {   int __ret; \
41*758e9fbaSOystein Eftevaag     do { \
42*758e9fbaSOystein Eftevaag         __ret = exp; \
43*758e9fbaSOystein Eftevaag     } while (__ret == SOCKET_ERROR && errno == EINTR); \
44*758e9fbaSOystein Eftevaag     dest =__ret; }
45*758e9fbaSOystein Eftevaag #endif
46*758e9fbaSOystein Eftevaag 
47*758e9fbaSOystein Eftevaag #ifdef __cplusplus
48*758e9fbaSOystein Eftevaag extern "C" {
49*758e9fbaSOystein Eftevaag #endif
50*758e9fbaSOystein Eftevaag 
51*758e9fbaSOystein Eftevaag /*
52*758e9fbaSOystein Eftevaag  * Read 'size' bytes from file descriptor 'fd' into buffer 'buf'. Additionally
53*758e9fbaSOystein Eftevaag  * this function will retry calls to the 'read' function when temporary errors
54*758e9fbaSOystein Eftevaag  * are detected. This is currently limited to interrupted system calls and
55*758e9fbaSOystein Eftevaag  * short reads.
56*758e9fbaSOystein Eftevaag  */
57*758e9fbaSOystein Eftevaag ssize_t
58*758e9fbaSOystein Eftevaag read_all (
59*758e9fbaSOystein Eftevaag     SOCKET fd,
60*758e9fbaSOystein Eftevaag     uint8_t *data,
61*758e9fbaSOystein Eftevaag     size_t size);
62*758e9fbaSOystein Eftevaag /*
63*758e9fbaSOystein Eftevaag  * Write 'size' bytes from 'buf' to file descriptor 'fd'. Additionally this
64*758e9fbaSOystein Eftevaag  * function will retry calls to the 'write' function when recoverable errors
65*758e9fbaSOystein Eftevaag  * are detected. This is currently limited to interrupted system calls and
66*758e9fbaSOystein Eftevaag  * short writes.
67*758e9fbaSOystein Eftevaag  */
68*758e9fbaSOystein Eftevaag ssize_t
69*758e9fbaSOystein Eftevaag write_all (
70*758e9fbaSOystein Eftevaag     SOCKET fd,
71*758e9fbaSOystein Eftevaag     const uint8_t *buf,
72*758e9fbaSOystein Eftevaag     size_t size);
73*758e9fbaSOystein Eftevaag TSS2_RC
74*758e9fbaSOystein Eftevaag socket_connect (
75*758e9fbaSOystein Eftevaag     const char *hostname,
76*758e9fbaSOystein Eftevaag     uint16_t port,
77*758e9fbaSOystein Eftevaag     SOCKET *socket);
78*758e9fbaSOystein Eftevaag TSS2_RC
79*758e9fbaSOystein Eftevaag socket_close (
80*758e9fbaSOystein Eftevaag     SOCKET *socket);
81*758e9fbaSOystein Eftevaag ssize_t
82*758e9fbaSOystein Eftevaag socket_recv_buf (
83*758e9fbaSOystein Eftevaag     SOCKET sock,
84*758e9fbaSOystein Eftevaag     uint8_t *data,
85*758e9fbaSOystein Eftevaag     size_t size);
86*758e9fbaSOystein Eftevaag TSS2_RC
87*758e9fbaSOystein Eftevaag socket_xmit_buf (
88*758e9fbaSOystein Eftevaag     SOCKET sock,
89*758e9fbaSOystein Eftevaag     const void *buf,
90*758e9fbaSOystein Eftevaag     size_t size);
91*758e9fbaSOystein Eftevaag 
92*758e9fbaSOystein Eftevaag #ifdef __cplusplus
93*758e9fbaSOystein Eftevaag }
94*758e9fbaSOystein Eftevaag #endif
95*758e9fbaSOystein Eftevaag #endif /* UTIL_IO_H */
96