ConOpSys V2970  P004.07
ANVILEX control operating system
altcp.h
Go to the documentation of this file.
1 /**
2  * @file
3  * Application layered TCP connection API (to be used from TCPIP thread)\n
4  *
5  * This file contains the generic API.
6  * For more details see @ref altcp_api.
7  */
8 
9 /*
10  * Copyright (c) 2017 Simon Goldschmidt
11  * All rights reserved.
12  *
13  * Redistribution and use in source and binary forms, with or without modification,
14  * are permitted provided that the following conditions are met:
15  *
16  * 1. Redistributions of source code must retain the above copyright notice,
17  * this list of conditions and the following disclaimer.
18  * 2. Redistributions in binary form must reproduce the above copyright notice,
19  * this list of conditions and the following disclaimer in the documentation
20  * and/or other materials provided with the distribution.
21  * 3. The name of the author may not be used to endorse or promote products
22  * derived from this software without specific prior written permission.
23  *
24  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
25  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
26  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
27  * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
28  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
29  * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
30  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
31  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
32  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
33  * OF SUCH DAMAGE.
34  *
35  * This file is part of the lwIP TCP/IP stack.
36  *
37  * Author: Simon Goldschmidt <goldsimon@gmx.de>
38  *
39  */
40 #ifndef LWIP_HDR_ALTCP_H
41 #define LWIP_HDR_ALTCP_H
42 
43 #include "lwip/opt.h"
44 
45 #if LWIP_ALTCP /* don't build if not configured for use in lwipopts.h */
46 
47 #include "lwip/tcpbase.h"
48 #include "lwip/err.h"
49 #include "lwip/pbuf.h"
50 #include "lwip/ip_addr.h"
51 
52 #ifdef __cplusplus
53 extern "C" {
54 #endif
55 
56 struct altcp_pcb;
57 struct altcp_functions;
58 
59 typedef err_t (*altcp_accept_fn)(void *arg, struct altcp_pcb *new_conn, err_t err);
60 typedef err_t (*altcp_connected_fn)(void *arg, struct altcp_pcb *conn, err_t err);
61 typedef err_t (*altcp_recv_fn)(void *arg, struct altcp_pcb *conn, struct pbuf *p, err_t err);
62 typedef err_t (*altcp_sent_fn)(void *arg, struct altcp_pcb *conn, u16_t len);
63 typedef err_t (*altcp_poll_fn)(void *arg, struct altcp_pcb *conn);
64 typedef void (*altcp_err_fn)(void *arg, err_t err);
65 
66 typedef struct altcp_pcb* (*altcp_new_fn)(void *arg, u8_t ip_type);
67 
68 struct altcp_pcb {
69  const struct altcp_functions *fns;
70  struct altcp_pcb *inner_conn;
71  void *arg;
72  void *state;
73  /* application callbacks */
74  altcp_accept_fn accept;
75  altcp_connected_fn connected;
76  altcp_recv_fn recv;
77  altcp_sent_fn sent;
78  altcp_poll_fn poll;
79  altcp_err_fn err;
80  u8_t pollinterval;
81 };
82 
83 /** @ingroup altcp */
84 typedef struct altcp_allocator_s {
85  /** Allocator function */
86  altcp_new_fn alloc;
87  /** Argument to allocator function */
88  void *arg;
89 } altcp_allocator_t;
90 
91 struct altcp_pcb *altcp_new(altcp_allocator_t *allocator);
92 struct altcp_pcb *altcp_new_ip6(altcp_allocator_t *allocator);
93 struct altcp_pcb *altcp_new_ip_type(altcp_allocator_t *allocator, u8_t ip_type);
94 
95 void altcp_arg(struct altcp_pcb *conn, void *arg);
96 void altcp_accept(struct altcp_pcb *conn, altcp_accept_fn accept);
97 void altcp_recv(struct altcp_pcb *conn, altcp_recv_fn recv);
98 void altcp_sent(struct altcp_pcb *conn, altcp_sent_fn sent);
99 void altcp_poll(struct altcp_pcb *conn, altcp_poll_fn poll, u8_t interval);
100 void altcp_err(struct altcp_pcb *conn, altcp_err_fn err);
101 
102 void altcp_recved(struct altcp_pcb *conn, u16_t len);
103 err_t altcp_bind(struct altcp_pcb *conn, const ip_addr_t *ipaddr, u16_t port);
104 err_t altcp_connect(struct altcp_pcb *conn, const ip_addr_t *ipaddr, u16_t port, altcp_connected_fn connected);
105 
106 /* return conn for source code compatibility to tcp callback API only */
107 struct altcp_pcb *altcp_listen_with_backlog_and_err(struct altcp_pcb *conn, u8_t backlog, err_t *err);
108 #define altcp_listen_with_backlog(conn, backlog) altcp_listen_with_backlog_and_err(conn, backlog, NULL)
109 /** @ingroup altcp */
110 #define altcp_listen(conn) altcp_listen_with_backlog_and_err(conn, TCP_DEFAULT_LISTEN_BACKLOG, NULL)
111 
112 void altcp_abort(struct altcp_pcb *conn);
113 err_t altcp_close(struct altcp_pcb *conn);
114 err_t altcp_shutdown(struct altcp_pcb *conn, int shut_rx, int shut_tx);
115 
116 err_t altcp_write(struct altcp_pcb *conn, const void *dataptr, u16_t len, u8_t apiflags);
117 err_t altcp_output(struct altcp_pcb *conn);
118 
119 u16_t altcp_mss(struct altcp_pcb *conn);
120 u16_t altcp_sndbuf(struct altcp_pcb *conn);
121 u16_t altcp_sndqueuelen(struct altcp_pcb *conn);
122 void altcp_nagle_disable(struct altcp_pcb *conn);
123 void altcp_nagle_enable(struct altcp_pcb *conn);
124 int altcp_nagle_disabled(struct altcp_pcb *conn);
125 
126 void altcp_setprio(struct altcp_pcb *conn, u8_t prio);
127 
128 err_t altcp_get_tcp_addrinfo(struct altcp_pcb *conn, int local, ip_addr_t *addr, u16_t *port);
129 ip_addr_t *altcp_get_ip(struct altcp_pcb *conn, int local);
130 u16_t altcp_get_port(struct altcp_pcb *conn, int local);
131 
132 #ifdef LWIP_DEBUG
133 enum tcp_state altcp_dbg_get_tcp_state(struct altcp_pcb *conn);
134 #endif
135 
136 #ifdef __cplusplus
137 }
138 #endif
139 
140 #else /* LWIP_ALTCP */
141 
142 /* ALTCP disabled, define everything to link against tcp callback API (e.g. to get a small non-ssl httpd) */
143 
144 #include "lwip/tcp.h"
145 
146 #define altcp_accept_fn tcp_accept_fn
147 #define altcp_connected_fn tcp_connected_fn
148 #define altcp_recv_fn tcp_recv_fn
149 #define altcp_sent_fn tcp_sent_fn
150 #define altcp_poll_fn tcp_poll_fn
151 #define altcp_err_fn tcp_err_fn
152 
153 #define altcp_pcb tcp_pcb
154 #define altcp_tcp_new_ip_type tcp_new_ip_type
155 #define altcp_tcp_new tcp_new
156 #define altcp_tcp_new_ip6 tcp_new_ip6
157 
158 #define altcp_new(allocator) tcp_new()
159 #define altcp_new_ip6(allocator) tcp_new_ip6()
160 #define altcp_new_ip_type(allocator, ip_type) tcp_new_ip_type(ip_type)
161 
162 #define altcp_arg tcp_arg
163 #define altcp_accept tcp_accept
164 #define altcp_recv tcp_recv
165 #define altcp_sent tcp_sent
166 #define altcp_poll tcp_poll
167 #define altcp_err tcp_err
168 
169 #define altcp_recved tcp_recved
170 #define altcp_bind tcp_bind
171 #define altcp_connect tcp_connect
172 
173 #define altcp_listen_with_backlog_and_err tcp_listen_with_backlog_and_err
174 #define altcp_listen_with_backlog tcp_listen_with_backlog
175 #define altcp_listen tcp_listen
176 
177 #define altcp_abort tcp_abort
178 #define altcp_close tcp_close
179 #define altcp_shutdown tcp_shutdown
180 
181 #define altcp_write tcp_write
182 #define altcp_output tcp_output
183 
184 #define altcp_mss tcp_mss
185 #define altcp_sndbuf tcp_sndbuf
186 #define altcp_sndqueuelen tcp_sndqueuelen
187 #define altcp_nagle_disable tcp_nagle_disable
188 #define altcp_nagle_enable tcp_nagle_enable
189 #define altcp_nagle_disabled tcp_nagle_disabled
190 #define altcp_setprio tcp_setprio
191 
192 #define altcp_get_tcp_addrinfo tcp_get_tcp_addrinfo
193 #define altcp_get_ip(pcb, local) ((local) ? (&(pcb)->local_ip) : (&(pcb)->remote_ip))
194 
195 #ifdef LWIP_DEBUG
196 #define altcp_dbg_get_tcp_state tcp_dbg_get_tcp_state
197 #endif
198 
199 #endif /* LWIP_ALTCP */
200 
201 #endif /* LWIP_HDR_ALTCP_H */
#define altcp_accept
Definition: altcp.h:163
#define altcp_new_ip_type(allocator, ip_type)
Definition: altcp.h:160
#define altcp_write
Definition: altcp.h:181
#define altcp_output
Definition: altcp.h:182
#define altcp_poll_fn
Definition: altcp.h:150
#define altcp_get_ip(pcb, local)
Definition: altcp.h:193
#define altcp_sndqueuelen
Definition: altcp.h:186
#define altcp_mss
Definition: altcp.h:184
#define altcp_recv_fn
Definition: altcp.h:148
#define altcp_arg
Definition: altcp.h:162
#define altcp_accept_fn
Definition: altcp.h:146
#define altcp_connect
Definition: altcp.h:171
#define altcp_sndbuf
Definition: altcp.h:185
#define altcp_shutdown
Definition: altcp.h:179
#define altcp_poll
Definition: altcp.h:166
#define altcp_err_fn
Definition: altcp.h:151
#define altcp_sent
Definition: altcp.h:165
#define altcp_nagle_enable
Definition: altcp.h:188
#define altcp_listen_with_backlog_and_err
Definition: altcp.h:173
#define altcp_nagle_disabled
Definition: altcp.h:189
#define altcp_setprio
Definition: altcp.h:190
#define altcp_nagle_disable
Definition: altcp.h:187
#define altcp_get_tcp_addrinfo
Definition: altcp.h:192
#define altcp_err
Definition: altcp.h:167
#define altcp_recv
Definition: altcp.h:164
#define altcp_pcb
Definition: altcp.h:153
#define altcp_sent_fn
Definition: altcp.h:149
#define altcp_close
Definition: altcp.h:178
#define altcp_abort
Definition: altcp.h:177
#define altcp_connected_fn
Definition: altcp.h:147
#define altcp_new(allocator)
Definition: altcp.h:158
#define altcp_recved
Definition: altcp.h:169
#define altcp_new_ip6(allocator)
Definition: altcp.h:159
#define altcp_bind
Definition: altcp.h:170
uint8_t u8_t
Definition: arch.h:125
uint16_t u16_t
Definition: arch.h:127
s8_t err_t
Definition: err.h:96
ip6_addr_t ip_addr_t
Definition: ip_addr.h:318
Definition: pbuf.h:186