~marcus-mc/+junk/ps3sdk

« back to all changes in this revision

Viewing changes to src/lwip/src/include/lwip/api.h

  • Committer: Marcus Comstedt
  • Date: 2009-08-02 16:05:58 UTC
  • Revision ID: marcus@mc.pp.se-20090802160558-zazx8adsuo9s4gqp
Imported LWIP stuff from emoon's sources.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Copyright (c) 2001-2004 Swedish Institute of Computer Science.
 
3
 * All rights reserved. 
 
4
 * 
 
5
 * Redistribution and use in source and binary forms, with or without modification, 
 
6
 * are permitted provided that the following conditions are met:
 
7
 *
 
8
 * 1. Redistributions of source code must retain the above copyright notice,
 
9
 *    this list of conditions and the following disclaimer.
 
10
 * 2. Redistributions in binary form must reproduce the above copyright notice,
 
11
 *    this list of conditions and the following disclaimer in the documentation
 
12
 *    and/or other materials provided with the distribution.
 
13
 * 3. The name of the author may not be used to endorse or promote products
 
14
 *    derived from this software without specific prior written permission. 
 
15
 *
 
16
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 
 
17
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
 
18
 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT 
 
19
 * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
 
20
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT 
 
21
 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
 
22
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
 
23
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 
 
24
 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY 
 
25
 * OF SUCH DAMAGE.
 
26
 *
 
27
 * This file is part of the lwIP TCP/IP stack.
 
28
 * 
 
29
 * Author: Adam Dunkels <adam@sics.se>
 
30
 *
 
31
 */
 
32
#ifndef __LWIP_API_H__
 
33
#define __LWIP_API_H__
 
34
 
 
35
#include "lwip/opt.h"
 
36
#include "lwip/pbuf.h"
 
37
#include "lwip/sys.h"
 
38
 
 
39
#include "lwip/ip.h"
 
40
 
 
41
#include "lwip/raw.h"
 
42
#include "lwip/udp.h"
 
43
#include "lwip/tcp.h"
 
44
 
 
45
#include "lwip/err.h"
 
46
 
 
47
#ifdef __cplusplus
 
48
extern "C" {
 
49
#endif
 
50
 
 
51
/* Throughout this file, IP addresses and port numbers are expected to be in
 
52
 * the same byte order as in the corresponding pcb.
 
53
 */
 
54
 
 
55
#define NETCONN_NOCOPY 0x00
 
56
#define NETCONN_COPY   0x01
 
57
 
 
58
/* Helpers to process several netconn_types by the same code */
 
59
#define NETCONNTYPE_GROUP(t)    (t&0xF0)
 
60
#define NETCONNTYPE_DATAGRAM(t) (t&0xE0)
 
61
 
 
62
enum netconn_type {
 
63
  NETCONN_INVALID    = 0,
 
64
  /* NETCONN_TCP Group */
 
65
  NETCONN_TCP        = 0x10,
 
66
  /* NETCONN_UDP Group */
 
67
  NETCONN_UDP        = 0x20,
 
68
  NETCONN_UDPLITE    = 0x21,
 
69
  NETCONN_UDPNOCHKSUM= 0x22,
 
70
  /* NETCONN_RAW Group */
 
71
  NETCONN_RAW        = 0x40
 
72
};
 
73
 
 
74
enum netconn_state {
 
75
  NETCONN_NONE,
 
76
  NETCONN_WRITE,
 
77
  NETCONN_ACCEPT,
 
78
  NETCONN_RECV,
 
79
  NETCONN_CONNECT,
 
80
  NETCONN_CLOSE
 
81
};
 
82
 
 
83
enum netconn_evt {
 
84
  NETCONN_EVT_RCVPLUS,
 
85
  NETCONN_EVT_RCVMINUS,
 
86
  NETCONN_EVT_SENDPLUS,
 
87
  NETCONN_EVT_SENDMINUS
 
88
};
 
89
 
 
90
#if LWIP_IGMP
 
91
enum netconn_igmp {
 
92
  NETCONN_JOIN,
 
93
  NETCONN_LEAVE
 
94
};
 
95
#endif /* LWIP_IGMP */
 
96
 
 
97
struct netbuf {
 
98
  struct pbuf *p, *ptr;
 
99
  struct ip_addr *addr;
 
100
  u16_t port;
 
101
};
 
102
 
 
103
struct netconn {
 
104
  enum netconn_type type;
 
105
  enum netconn_state state;
 
106
  union {
 
107
    struct tcp_pcb *tcp;
 
108
    struct udp_pcb *udp;
 
109
    struct raw_pcb *raw;
 
110
  } pcb;
 
111
  err_t err;
 
112
  sys_mbox_t mbox;
 
113
  sys_mbox_t recvmbox;
 
114
  sys_mbox_t acceptmbox;
 
115
  int socket;
 
116
#if LWIP_SO_RCVTIMEO
 
117
  int recv_timeout;
 
118
#endif /* LWIP_SO_RCVTIMEO */
 
119
  u16_t recv_avail;
 
120
  /** TCP: when data passed to netconn_write doesn't fit into the send buffer,
 
121
      this temporarily stores the message. */
 
122
  struct api_msg_msg *write_msg;
 
123
  /** TCP: when data passed to netconn_write doesn't fit into the send buffer,
 
124
      this temporarily stores how much is already sent. */
 
125
  int write_offset;
 
126
#if LWIP_TCPIP_CORE_LOCKING
 
127
  /** TCP: when data passed to netconn_write doesn't fit into the send buffer,
 
128
      this temporarily stores whether to wake up the original application task
 
129
      if data couldn't be sent in the first try. */
 
130
  u8_t write_delayed;
 
131
#endif
 
132
 
 
133
  void (* callback)(struct netconn *, enum netconn_evt, u16_t len);
 
134
};
 
135
 
 
136
/* Network buffer functions: */
 
137
struct netbuf *   netbuf_new      (void);
 
138
void              netbuf_delete   (struct netbuf *buf);
 
139
void *            netbuf_alloc    (struct netbuf *buf, u16_t size);
 
140
void              netbuf_free     (struct netbuf *buf);
 
141
err_t             netbuf_ref      (struct netbuf *buf,
 
142
           const void *dataptr, u16_t size);
 
143
void              netbuf_chain    (struct netbuf *head,
 
144
           struct netbuf *tail);
 
145
 
 
146
u16_t             netbuf_len      (struct netbuf *buf);
 
147
err_t             netbuf_data     (struct netbuf *buf,
 
148
           void **dataptr, u16_t *len);
 
149
s8_t              netbuf_next     (struct netbuf *buf);
 
150
void              netbuf_first    (struct netbuf *buf);
 
151
 
 
152
void              netbuf_copy_partial(struct netbuf *buf, void *dataptr, 
 
153
              u16_t len, u16_t offset);
 
154
 
 
155
#define netbuf_copy(buf,dataptr,len) netbuf_copy_partial(buf, dataptr, len, 0)
 
156
#define netbuf_len(buf)              ((buf)->p->tot_len)
 
157
#define netbuf_fromaddr(buf)         ((buf)->addr)
 
158
#define netbuf_fromport(buf)         ((buf)->port)
 
159
 
 
160
/* Network connection functions: */
 
161
#define netconn_new(t)                  netconn_new_with_proto_and_callback(t, 0, NULL)
 
162
#define netconn_new_with_callback(t, c) netconn_new_with_proto_and_callback(t, 0, c)
 
163
struct
 
164
netconn *netconn_new_with_proto_and_callback(enum netconn_type t, u8_t proto,
 
165
                                   void (*callback)(struct netconn *, enum netconn_evt, u16_t len));
 
166
err_t             netconn_delete  (struct netconn *conn);
 
167
enum netconn_type netconn_type    (struct netconn *conn);
 
168
err_t             netconn_peer    (struct netconn *conn,
 
169
           struct ip_addr *addr,
 
170
           u16_t *port);
 
171
err_t             netconn_addr    (struct netconn *conn,
 
172
           struct ip_addr **addr,
 
173
           u16_t *port);
 
174
err_t             netconn_bind    (struct netconn *conn,
 
175
           struct ip_addr *addr,
 
176
           u16_t port);
 
177
err_t             netconn_connect (struct netconn *conn,
 
178
           struct ip_addr *addr,
 
179
           u16_t port);
 
180
err_t             netconn_disconnect (struct netconn *conn);
 
181
err_t             netconn_listen  (struct netconn *conn);
 
182
struct netconn *  netconn_accept  (struct netconn *conn);
 
183
struct netbuf *   netconn_recv    (struct netconn *conn);
 
184
err_t             netconn_sendto  (struct netconn *conn,
 
185
           struct netbuf *buf, struct ip_addr *addr, u16_t port);
 
186
err_t             netconn_send    (struct netconn *conn,
 
187
           struct netbuf *buf);
 
188
err_t             netconn_write   (struct netconn *conn,
 
189
           const void *dataptr, int size,
 
190
           u8_t copy);
 
191
err_t             netconn_close   (struct netconn *conn);
 
192
 
 
193
#if LWIP_IGMP
 
194
err_t             netconn_join_leave_group (struct netconn *conn,
 
195
                                            struct ip_addr *multiaddr,
 
196
                                            struct ip_addr *interface,
 
197
                                            enum netconn_igmp join_or_leave);
 
198
#endif /* LWIP_IGMP */
 
199
 
 
200
#define netconn_err(conn)         ((conn)->err)
 
201
 
 
202
#ifdef __cplusplus
 
203
}
 
204
#endif
 
205
 
 
206
#endif /* __LWIP_API_H__ */