-
Notifications
You must be signed in to change notification settings - Fork 13
/
Copy pathtcp.h
91 lines (63 loc) · 2.98 KB
/
tcp.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
/******************************************************************************
* Copyright (C) 2008 - 2014 Andreas Öman
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
******************************************************************************/
#pragma once
#include <netinet/in.h>
#include <poll.h>
#include "htsbuf.h"
#include "mbuf.h"
typedef struct tcp_stream tcp_stream_t;
void tcp_init(const char *extra_ca);
void tcp_server_init(void);
typedef void (tcp_server_callback_t)(tcp_stream_t *ts, void *opaque,
struct sockaddr_in *peer,
struct sockaddr_in *self);
void *tcp_server_create(int port, const char *bindaddr,
tcp_server_callback_t *start, void *opaque);
tcp_stream_t *tcp_stream_create_from_fd(int fd);
typedef struct tcp_ssl_info {
const char *key;
const char *cert;
int no_verify;
int debug;
} tcp_ssl_info_t;
tcp_stream_t *tcp_stream_create_ssl_from_fd(int fd, const char *hostname,
const tcp_ssl_info_t *tsi,
char *errbuf, size_t errlen);
void tcp_close(tcp_stream_t *ts);
int tcp_read(tcp_stream_t *ts, void *buf, size_t len);
int tcp_read_line(tcp_stream_t *ts, char *buf, const size_t bufsize);
int tcp_read_data(tcp_stream_t *ts, char *buf, const size_t bufsize);
htsbuf_queue_t *tcp_read_buffered(tcp_stream_t *ts);
int tcp_write_queue(tcp_stream_t *ts, mbuf_t *q);
int tcp_write(tcp_stream_t *ts, const void *buf, const size_t bufsize);
void tcp_nonblock(tcp_stream_t *ts, int on);
int tcp_sendfile(tcp_stream_t *ts, int fd, int64_t bytes);
void tcp_prepare_poll(tcp_stream_t *ts, struct pollfd *pfd);
int tcp_can_read(tcp_stream_t *ts, struct pollfd *pfd);
int tcp_get_errno(tcp_stream_t *ts);
int tcp_steal_fd(tcp_stream_t *ts);
void tcp_shutdown(tcp_stream_t *ts);
void tcp_server_stop(void);
int tcp_starttls(tcp_stream_t *ts, const char *hostname,
const tcp_ssl_info_t *tsi,
char *errbuf, size_t errlen);