Mistake on this page?
Report an issue in GitHub or email us
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 */
int poll(pollfh fhs[], unsigned nfhs, int timeout)
A mechanism to multiplex input/output over a set of file handles(file descriptors).
lwIP Options Configuration
Main packet buffer struct.
lwIP Error codes
s8_t err_t
Define LWIP_ERR_T in cc.h if you want to use a different type for your platform (must be signed)...
Definition: err.h:96
pbuf API
IP address structure for passing IP addresses by value.
Definition: nsapi_types.h:235
TCP API (to be used from TCPIP thread) See also tcp_raw.
IP address API (common IPv4 and IPv6)
Base TCP API definitions shared by TCP and ALTCP See also tcp_raw.
Important Information for this Arm website

This site uses cookies to store information on your computer. By continuing to use our site, you consent to our cookies. If you are not happy with the use of these cookies, please review our Cookie Policy to learn how they can be disabled. By disabling cookies, some features of the site will not work.