Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: mbedEndpointNetwork mbedEndpointNetworkMJK
Fork of Nanostack_lib by
inc/socket/socket_api.h@11:1b7aaf37a131, 2014-06-25 (annotated)
- Committer:
- jusu_81
- Date:
- Wed Jun 25 21:05:58 2014 +0000
- Revision:
- 11:1b7aaf37a131
- Parent:
- 4:c449bead5cf3
- Child:
- 12:acef6f596835
Added C++ & C Extern C sectors to hedaer files.
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| Mika Karjalainen |
4:c449bead5cf3 | 1 | #ifndef _NS_SOCKET_API_H |
| Mika Karjalainen |
4:c449bead5cf3 | 2 | #define _NS_SOCKET_API_H |
| Mika Karjalainen |
4:c449bead5cf3 | 3 | |
| Mika Karjalainen |
4:c449bead5cf3 | 4 | /* |
| Mika Karjalainen |
4:c449bead5cf3 | 5 | * Copyright Sensinode Ltd 2011 |
| Mika Karjalainen |
4:c449bead5cf3 | 6 | * socket_api.h |
| Mika Karjalainen |
4:c449bead5cf3 | 7 | */ |
| Mika Karjalainen |
4:c449bead5cf3 | 8 | /** |
| Mika Karjalainen |
4:c449bead5cf3 | 9 | * \file socket_api.h |
| Mika Karjalainen |
4:c449bead5cf3 | 10 | * \brief NanosStack 2.0 Library Socket API |
| Mika Karjalainen |
4:c449bead5cf3 | 11 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 12 | * \section socket-com Common Socket API |
| Mika Karjalainen |
4:c449bead5cf3 | 13 | * - socket_open(), A function to open a socket |
| Mika Karjalainen |
4:c449bead5cf3 | 14 | * - socket_free(), A function to free a socket |
| Mika Karjalainen |
4:c449bead5cf3 | 15 | * - socket_raw_open(), A function to open a raw ICMP socket |
| Mika Karjalainen |
4:c449bead5cf3 | 16 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 17 | * \section socket-sec Set socket TLS chipher suite list (SOCKET_TCP_TLS socket Type) |
| Mika Karjalainen |
4:c449bead5cf3 | 18 | * - sec_socket_set_chipher_suite_list(), Used to set opened socket TLS chiphersuite support |
| Mika Karjalainen |
4:c449bead5cf3 | 19 | * * check socket_security.h more information |
| Mika Karjalainen |
4:c449bead5cf3 | 20 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 21 | * \section socket-read Socket Read API at Callback |
| Mika Karjalainen |
4:c449bead5cf3 | 22 | * - socket_read(), A function to read received data buffer from a socket |
| Mika Karjalainen |
4:c449bead5cf3 | 23 | * - socket_read_info(), A function to read signal information and length info from a socket |
| Mika Karjalainen |
4:c449bead5cf3 | 24 | * - socket_read_session_address(), A function to read a session info for TCP event |
| Mika Karjalainen |
4:c449bead5cf3 | 25 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 26 | * \section socket-tx Socket TX API |
| Mika Karjalainen |
4:c449bead5cf3 | 27 | * - socket_send(), A function to write data buffer to a socket (TCP Client Only) |
| Mika Karjalainen |
4:c449bead5cf3 | 28 | * - socket_sendto(), A function to write data to socket to specific destination |
| Mika Karjalainen |
4:c449bead5cf3 | 29 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 30 | * \section sock-connect TCP Socket Connection Handle |
| Mika Karjalainen |
4:c449bead5cf3 | 31 | * - socket_listen(), A function to set the socket to the listening mode |
| Mika Karjalainen |
4:c449bead5cf3 | 32 | * - socket_connect(), A function to connect to remote peer |
| Mika Karjalainen |
4:c449bead5cf3 | 33 | * - socket_close(), A function to close a connection |
| Mika Karjalainen |
4:c449bead5cf3 | 34 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 35 | * Sockets are common abstraction model for network communication and are used in most operating systems. |
| Mika Karjalainen |
4:c449bead5cf3 | 36 | * The NanoStack2.0 Library API follows BSD socket API conventions closely with some extensions necessitated by the event-based scheduling model. |
| Mika Karjalainen |
4:c449bead5cf3 | 37 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 38 | * Library supports following socket types: |
| Mika Karjalainen |
4:c449bead5cf3 | 39 | * | Socket name | Socket description | |
| Mika Karjalainen |
4:c449bead5cf3 | 40 | * | :------------: | :----------------------------: | |
| Mika Karjalainen |
4:c449bead5cf3 | 41 | * | SOCKET_UDP | UDP socket type | |
| Mika Karjalainen |
4:c449bead5cf3 | 42 | * | SOCKET_TCP | TCP socket type | |
| Mika Karjalainen |
4:c449bead5cf3 | 43 | * | SOCKET_TCP_TLS | TCP socket with TLS security | |
| Mika Karjalainen |
4:c449bead5cf3 | 44 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 45 | * \section socket-raw ICMP RAW Socket Instruction |
| Mika Karjalainen |
4:c449bead5cf3 | 46 | * ICMP RAW socket can be created by socket_raw_open(). When using ICMP sockets the minimum payload length is 8 bytes, where first 4 bytes form the ICMP header. |
| Mika Karjalainen |
4:c449bead5cf3 | 47 | * The first byte is for type, second for code and last two are for checksum which must always be set to zero. |
| Mika Karjalainen |
4:c449bead5cf3 | 48 | * Stack will calculate the checksum automatically before transmitting the packet. Header is followed by the payload. |
| Mika Karjalainen |
4:c449bead5cf3 | 49 | |
| Mika Karjalainen |
4:c449bead5cf3 | 50 | * | ICMP Type | ICMP Code | Checksum | Payload | Notes | |
| Mika Karjalainen |
4:c449bead5cf3 | 51 | * | :-------: | :----------: | :-------: | :--------: | :--------------:| |
| Mika Karjalainen |
4:c449bead5cf3 | 52 | * | 1 | 1 | 2 | n (min. 4) | Length in bytes | |
| Mika Karjalainen |
4:c449bead5cf3 | 53 | * | 0xXX | 0xXX | 0x00 0x00 | n bytes | Transmit | |
| Mika Karjalainen |
4:c449bead5cf3 | 54 | * | 0xXX | 0xXX | 0xXX 0xXX | n bytes | Receive | |
| Mika Karjalainen |
4:c449bead5cf3 | 55 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 56 | * ICMP echo request with 4 bytes of payload (ping6). |
| Mika Karjalainen |
4:c449bead5cf3 | 57 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 58 | * | ICMP Type | ICMP Code | Checksum | Payload | |
| Mika Karjalainen |
4:c449bead5cf3 | 59 | * | :-------: | :----------: | :-------: | :-----------------: | |
| Mika Karjalainen |
4:c449bead5cf3 | 60 | * | 0x80 | 0x00 | 0x00 0x00 | 0x00 0x01 0x02 0x03 | |
| Mika Karjalainen |
4:c449bead5cf3 | 61 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 62 | * ICMP echo response for the message above. |
| Mika Karjalainen |
4:c449bead5cf3 | 63 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 64 | * | ICMP Type | ICMP Code | Checksum | Payload | |
| Mika Karjalainen |
4:c449bead5cf3 | 65 | * | :-------: | :----------: | :-------: | :-----------------: | |
| Mika Karjalainen |
4:c449bead5cf3 | 66 | * | 0x81 | 0x00 | 0xXX 0xXX | 0x00 0x01 0x02 0x03 | |
| Mika Karjalainen |
4:c449bead5cf3 | 67 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 68 | * \section socket-receive Socket receiving |
| Mika Karjalainen |
4:c449bead5cf3 | 69 | * When there is data to read from the socket, a receive callback function is called with the socket event parameter from the library. |
| Mika Karjalainen |
4:c449bead5cf3 | 70 | * The state of the TCP socket then changes and the socket TX process is ready (SOCKET_TX_FAIL or SOCKET_TX_DONE). |
| Mika Karjalainen |
4:c449bead5cf3 | 71 | * Socket event has event_type and socket_id fields. The receive callback function must be defined when socket is opened using socket_open() API. |
| Mika Karjalainen |
4:c449bead5cf3 | 72 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 73 | * All supported socket event types are listed here: |
| Mika Karjalainen |
4:c449bead5cf3 | 74 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 75 | * | Event Type | Value | Description | |
| Mika Karjalainen |
4:c449bead5cf3 | 76 | * | :------------------------: | :---: | :-----------------------------------------------------------------: | |
| Mika Karjalainen |
4:c449bead5cf3 | 77 | * | SOCKET_EVENT_MASK | 0xF0 | NC Socket event mask | |
| Mika Karjalainen |
4:c449bead5cf3 | 78 | * | SOCKET_DATA | 0x00 | Data received, Read data length from d_len field | |
| Mika Karjalainen |
4:c449bead5cf3 | 79 | * | SOCKET_BIND_DONE | 0x10 | TCP connection ready | |
| Mika Karjalainen |
4:c449bead5cf3 | 80 | * | SOCKET_TX_FAIL | 0x50 | Socket data send failed | |
| Mika Karjalainen |
4:c449bead5cf3 | 81 | * | SOCKET_CONNECT_CLOSED | 0x60 | TCP connection closed | |
| jusu_81 | 11:1b7aaf37a131 | 82 | * | SOCKET_CONNECT_FAIL_CLOSED | 0x70 | TCP connection closed � no ACK received | |
| Mika Karjalainen |
4:c449bead5cf3 | 83 | * | SOCKET_NO_ROUTER | 0x80 | No route available to destination | |
| Mika Karjalainen |
4:c449bead5cf3 | 84 | * | SOCKET_TX_DONE | 0x90 | Last Socket TX process Done, at TCP case Whole TCP Process is ready | |
| Mika Karjalainen |
4:c449bead5cf3 | 85 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 86 | * When socket call back is called application need to handle event and read data from the socket socket_read(). |
| Mika Karjalainen |
4:c449bead5cf3 | 87 | * Read operation release memory from stack when read is called or after callback automatic. |
| Mika Karjalainen |
4:c449bead5cf3 | 88 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 89 | * Example for UDP Socket Callback handler: |
| Mika Karjalainen |
4:c449bead5cf3 | 90 | * @code |
| Mika Karjalainen |
4:c449bead5cf3 | 91 | void main_udp_receive(void * cb) |
| Mika Karjalainen |
4:c449bead5cf3 | 92 | { |
| Mika Karjalainen |
4:c449bead5cf3 | 93 | socket_callback_t * cb_res =0; |
| Mika Karjalainen |
4:c449bead5cf3 | 94 | int16_t length; |
| Mika Karjalainen |
4:c449bead5cf3 | 95 | cb_res = (socket_callback_t *) cb; |
| Mika Karjalainen |
4:c449bead5cf3 | 96 | |
| Mika Karjalainen |
4:c449bead5cf3 | 97 | if(cb_res->event_type == SOCKET_DATA) |
| Mika Karjalainen |
4:c449bead5cf3 | 98 | { |
| Mika Karjalainen |
4:c449bead5cf3 | 99 | uint8_t *payload = 0; |
| Mika Karjalainen |
4:c449bead5cf3 | 100 | //Read Data and Handle Dta |
| Mika Karjalainen |
4:c449bead5cf3 | 101 | //error = socket_read_info(ap_sock_id, &info); |
| Mika Karjalainen |
4:c449bead5cf3 | 102 | if ( cb_res->d_len > 0) |
| Mika Karjalainen |
4:c449bead5cf3 | 103 | { |
| Mika Karjalainen |
4:c449bead5cf3 | 104 | //Read data to the RX buffer |
| Mika Karjalainen |
4:c449bead5cf3 | 105 | payload = (uint8_t *) MEM_ALLOC(cb_res->d_len); |
| Mika Karjalainen |
4:c449bead5cf3 | 106 | if(payload) |
| Mika Karjalainen |
4:c449bead5cf3 | 107 | { |
| Mika Karjalainen |
4:c449bead5cf3 | 108 | //Read data to the RX buffer |
| Mika Karjalainen |
4:c449bead5cf3 | 109 | length = socket_read(cb_res->socket_id, &app_src, payload, cb_res->d_len); |
| Mika Karjalainen |
4:c449bead5cf3 | 110 | if(length) |
| Mika Karjalainen |
4:c449bead5cf3 | 111 | { |
| Mika Karjalainen |
4:c449bead5cf3 | 112 | |
| Mika Karjalainen |
4:c449bead5cf3 | 113 | uint8_t * ptr = payload ; |
| Mika Karjalainen |
4:c449bead5cf3 | 114 | //Handles data received in UDP |
| Mika Karjalainen |
4:c449bead5cf3 | 115 | debug("UDP Data From:"); |
| Mika Karjalainen |
4:c449bead5cf3 | 116 | printf_ipv6_address(&(app_src.address[0])); |
| Mika Karjalainen |
4:c449bead5cf3 | 117 | |
| Mika Karjalainen |
4:c449bead5cf3 | 118 | if(app_src.identifier == 7) |
| Mika Karjalainen |
4:c449bead5cf3 | 119 | { |
| Mika Karjalainen |
4:c449bead5cf3 | 120 | debug("Echo Response::"); |
| Mika Karjalainen |
4:c449bead5cf3 | 121 | printf_array(ptr , length); |
| Mika Karjalainen |
4:c449bead5cf3 | 122 | } |
| Mika Karjalainen |
4:c449bead5cf3 | 123 | else |
| Mika Karjalainen |
4:c449bead5cf3 | 124 | { |
| Mika Karjalainen |
4:c449bead5cf3 | 125 | debug("Data:"); |
| Mika Karjalainen |
4:c449bead5cf3 | 126 | printf_string(ptr , length); |
| Mika Karjalainen |
4:c449bead5cf3 | 127 | } |
| Mika Karjalainen |
4:c449bead5cf3 | 128 | |
| Mika Karjalainen |
4:c449bead5cf3 | 129 | } |
| Mika Karjalainen |
4:c449bead5cf3 | 130 | MEM_FREE(payload); |
| Mika Karjalainen |
4:c449bead5cf3 | 131 | } |
| Mika Karjalainen |
4:c449bead5cf3 | 132 | |
| Mika Karjalainen |
4:c449bead5cf3 | 133 | } |
| Mika Karjalainen |
4:c449bead5cf3 | 134 | else |
| Mika Karjalainen |
4:c449bead5cf3 | 135 | { |
| Mika Karjalainen |
4:c449bead5cf3 | 136 | debug("No Data\r\n"); |
| Mika Karjalainen |
4:c449bead5cf3 | 137 | socket_read(cb_res->socket_id, &app_src, NULL, 0); |
| Mika Karjalainen |
4:c449bead5cf3 | 138 | } |
| Mika Karjalainen |
4:c449bead5cf3 | 139 | } |
| Mika Karjalainen |
4:c449bead5cf3 | 140 | else |
| Mika Karjalainen |
4:c449bead5cf3 | 141 | { |
| Mika Karjalainen |
4:c449bead5cf3 | 142 | if(cb_res->event_type == SOCKET_TX_DONE) |
| Mika Karjalainen |
4:c449bead5cf3 | 143 | { |
| Mika Karjalainen |
4:c449bead5cf3 | 144 | debug("UDP TX Done\r\n"); |
| Mika Karjalainen |
4:c449bead5cf3 | 145 | } |
| Mika Karjalainen |
4:c449bead5cf3 | 146 | else |
| Mika Karjalainen |
4:c449bead5cf3 | 147 | { |
| Mika Karjalainen |
4:c449bead5cf3 | 148 | //No Route to Packet Destination Address |
| Mika Karjalainen |
4:c449bead5cf3 | 149 | if(cb_res->event_type == SOCKET_NO_ROUTE) |
| Mika Karjalainen |
4:c449bead5cf3 | 150 | { |
| Mika Karjalainen |
4:c449bead5cf3 | 151 | debug("ND/RPL not ready\r\n"); |
| Mika Karjalainen |
4:c449bead5cf3 | 152 | } |
| Mika Karjalainen |
4:c449bead5cf3 | 153 | //Link Layer TX Fail for socket packet |
| Mika Karjalainen |
4:c449bead5cf3 | 154 | else if(cb_res->event_type == SOCKET_TX_FAIL) |
| Mika Karjalainen |
4:c449bead5cf3 | 155 | { |
| Mika Karjalainen |
4:c449bead5cf3 | 156 | debug("Link Layer Tx fail\r\n"); |
| Mika Karjalainen |
4:c449bead5cf3 | 157 | } |
| Mika Karjalainen |
4:c449bead5cf3 | 158 | |
| Mika Karjalainen |
4:c449bead5cf3 | 159 | } |
| Mika Karjalainen |
4:c449bead5cf3 | 160 | } |
| Mika Karjalainen |
4:c449bead5cf3 | 161 | } |
| Mika Karjalainen |
4:c449bead5cf3 | 162 | * @endcode |
| Mika Karjalainen |
4:c449bead5cf3 | 163 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 164 | * Example for TCP Socket Callback handler: |
| Mika Karjalainen |
4:c449bead5cf3 | 165 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 166 | * @code |
| Mika Karjalainen |
4:c449bead5cf3 | 167 | void main_tcp_receive(void * cb) |
| Mika Karjalainen |
4:c449bead5cf3 | 168 | { |
| Mika Karjalainen |
4:c449bead5cf3 | 169 | socket_callback_t * cb_res =0; |
| Mika Karjalainen |
4:c449bead5cf3 | 170 | int16_t length; |
| Mika Karjalainen |
4:c449bead5cf3 | 171 | cb_res = (socket_callback_t *) cb; |
| Mika Karjalainen |
4:c449bead5cf3 | 172 | |
| Mika Karjalainen |
4:c449bead5cf3 | 173 | if(cb_res->event_type == SOCKET_DATA) |
| Mika Karjalainen |
4:c449bead5cf3 | 174 | { |
| Mika Karjalainen |
4:c449bead5cf3 | 175 | uint8_t *payload = 0; |
| Mika Karjalainen |
4:c449bead5cf3 | 176 | //Read Data |
| Mika Karjalainen |
4:c449bead5cf3 | 177 | if ( cb_res->d_len > 0) |
| Mika Karjalainen |
4:c449bead5cf3 | 178 | { |
| Mika Karjalainen |
4:c449bead5cf3 | 179 | //Read data to the RX buffer |
| Mika Karjalainen |
4:c449bead5cf3 | 180 | payload = (uint8_t *) MEM_ALLOC(cb_res->d_len); |
| Mika Karjalainen |
4:c449bead5cf3 | 181 | if(payload) |
| Mika Karjalainen |
4:c449bead5cf3 | 182 | { |
| Mika Karjalainen |
4:c449bead5cf3 | 183 | //Read data to the RX buffer |
| Mika Karjalainen |
4:c449bead5cf3 | 184 | length = socket_read(cb_res->socket_id, &app_src, payload, cb_res->d_len); |
| Mika Karjalainen |
4:c449bead5cf3 | 185 | if(length) |
| Mika Karjalainen |
4:c449bead5cf3 | 186 | { |
| Mika Karjalainen |
4:c449bead5cf3 | 187 | |
| Mika Karjalainen |
4:c449bead5cf3 | 188 | uint8_t * ptr = payload ; |
| Mika Karjalainen |
4:c449bead5cf3 | 189 | //Handles data received in TCP socket |
| Mika Karjalainen |
4:c449bead5cf3 | 190 | |
| Mika Karjalainen |
4:c449bead5cf3 | 191 | printf_ipv6_address(&(app_src.address[0])); |
| Mika Karjalainen |
4:c449bead5cf3 | 192 | //...App spesific |
| Mika Karjalainen |
4:c449bead5cf3 | 193 | |
| Mika Karjalainen |
4:c449bead5cf3 | 194 | } |
| Mika Karjalainen |
4:c449bead5cf3 | 195 | MEM_FREE(payload); |
| Mika Karjalainen |
4:c449bead5cf3 | 196 | } |
| Mika Karjalainen |
4:c449bead5cf3 | 197 | } |
| Mika Karjalainen |
4:c449bead5cf3 | 198 | else |
| Mika Karjalainen |
4:c449bead5cf3 | 199 | { |
| Mika Karjalainen |
4:c449bead5cf3 | 200 | debug("No Data\r\n"); |
| Mika Karjalainen |
4:c449bead5cf3 | 201 | socket_read(cb_res->socket_id, &app_src, NULL, 0); |
| Mika Karjalainen |
4:c449bead5cf3 | 202 | } |
| Mika Karjalainen |
4:c449bead5cf3 | 203 | } |
| Mika Karjalainen |
4:c449bead5cf3 | 204 | else |
| Mika Karjalainen |
4:c449bead5cf3 | 205 | { |
| Mika Karjalainen |
4:c449bead5cf3 | 206 | //TCP socket connection is ready |
| Mika Karjalainen |
4:c449bead5cf3 | 207 | if(cb_res->event_type == SOCKET_BIND_DONE) |
| Mika Karjalainen |
4:c449bead5cf3 | 208 | { |
| Mika Karjalainen |
4:c449bead5cf3 | 209 | debug("Connect Ready\r\n"); |
| Mika Karjalainen |
4:c449bead5cf3 | 210 | if(socket_read_session_address(cb_res->socket_id, &app_src) == 0) |
| Mika Karjalainen |
4:c449bead5cf3 | 211 | { |
| Mika Karjalainen |
4:c449bead5cf3 | 212 | print_opened_port(app_src.identifier); |
| Mika Karjalainen |
4:c449bead5cf3 | 213 | debug(", "); |
| Mika Karjalainen |
4:c449bead5cf3 | 214 | printf_ipv6_address(&(app_src.address[0])); |
| Mika Karjalainen |
4:c449bead5cf3 | 215 | } |
| Mika Karjalainen |
4:c449bead5cf3 | 216 | //...App spesific |
| Mika Karjalainen |
4:c449bead5cf3 | 217 | } |
| Mika Karjalainen |
4:c449bead5cf3 | 218 | //TCP socket connection is closed |
| Mika Karjalainen |
4:c449bead5cf3 | 219 | else if(cb_res->event_type == SOCKET_CONNECT_CLOSED) |
| Mika Karjalainen |
4:c449bead5cf3 | 220 | { |
| Mika Karjalainen |
4:c449bead5cf3 | 221 | debug("Connection Closed\r\n"); |
| Mika Karjalainen |
4:c449bead5cf3 | 222 | |
| Mika Karjalainen |
4:c449bead5cf3 | 223 | } |
| Mika Karjalainen |
4:c449bead5cf3 | 224 | else if(cb_res->event_type == SOCKET_CONNECT_FAIL_CLOSED) |
| Mika Karjalainen |
4:c449bead5cf3 | 225 | { |
| Mika Karjalainen |
4:c449bead5cf3 | 226 | //TCP socket connection lost |
| Mika Karjalainen |
4:c449bead5cf3 | 227 | debug("TCP Connect Fail:No ACK\r\n"); |
| Mika Karjalainen |
4:c449bead5cf3 | 228 | } |
| Mika Karjalainen |
4:c449bead5cf3 | 229 | else if(cb_res->event_type == SOCKET_TX_DONE) |
| Mika Karjalainen |
4:c449bead5cf3 | 230 | { |
| Mika Karjalainen |
4:c449bead5cf3 | 231 | if(socket_read_session_address(cb_res->socket_id, &app_src) == 0) |
| Mika Karjalainen |
4:c449bead5cf3 | 232 | { |
| Mika Karjalainen |
4:c449bead5cf3 | 233 | //Close Connection |
| Mika Karjalainen |
4:c449bead5cf3 | 234 | socket_close(cb_res->socket_id, &app_src,0); |
| Mika Karjalainen |
4:c449bead5cf3 | 235 | } |
| Mika Karjalainen |
4:c449bead5cf3 | 236 | } |
| Mika Karjalainen |
4:c449bead5cf3 | 237 | else |
| Mika Karjalainen |
4:c449bead5cf3 | 238 | { |
| Mika Karjalainen |
4:c449bead5cf3 | 239 | //No Route to Packet Destination Address |
| Mika Karjalainen |
4:c449bead5cf3 | 240 | if(cb_res->event_type == SOCKET_NO_ROUTE) |
| Mika Karjalainen |
4:c449bead5cf3 | 241 | { |
| Mika Karjalainen |
4:c449bead5cf3 | 242 | debug("ND/RPL not ready\r\n"); |
| Mika Karjalainen |
4:c449bead5cf3 | 243 | } |
| Mika Karjalainen |
4:c449bead5cf3 | 244 | //Link Layer TX Fail for socket packet |
| Mika Karjalainen |
4:c449bead5cf3 | 245 | else if(cb_res->event_type == SOCKET_TX_FAIL) |
| Mika Karjalainen |
4:c449bead5cf3 | 246 | { |
| Mika Karjalainen |
4:c449bead5cf3 | 247 | debug("Link Layer Tx fail\r\n"); |
| Mika Karjalainen |
4:c449bead5cf3 | 248 | } |
| Mika Karjalainen |
4:c449bead5cf3 | 249 | } |
| Mika Karjalainen |
4:c449bead5cf3 | 250 | } |
| Mika Karjalainen |
4:c449bead5cf3 | 251 | } |
| Mika Karjalainen |
4:c449bead5cf3 | 252 | * @endcode |
| Mika Karjalainen |
4:c449bead5cf3 | 253 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 254 | * \section socket-tcp How to Use TCP sockets |
| Mika Karjalainen |
4:c449bead5cf3 | 255 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 256 | * | API | Socket Type | Description | |
| Mika Karjalainen |
4:c449bead5cf3 | 257 | * | :---------------------------: | :-----------: | :------------------------------------------------------------: | |
| Mika Karjalainen |
4:c449bead5cf3 | 258 | * | socket_open() | Server/Client | Open socket to specific or dynamically port number. | |
| Mika Karjalainen |
4:c449bead5cf3 | 259 | * | socket_close() | Server/Client | Close opened TCP connection | |
| Mika Karjalainen |
4:c449bead5cf3 | 260 | * | socket_listen() | Server | Set server port to listen state | |
| Mika Karjalainen |
4:c449bead5cf3 | 261 | * | socket_connect() | Client | Connect client socket to specific destination | |
| Mika Karjalainen |
4:c449bead5cf3 | 262 | * | socket_send() | Client | Send data to session based destination | |
| Mika Karjalainen |
4:c449bead5cf3 | 263 | * | socket_sendto() | Server/Client | Send data to specific destination | |
| Mika Karjalainen |
4:c449bead5cf3 | 264 | * | socket_read_session_address() | Server/Client | Function read socket TCP session address and port information. | |
| Mika Karjalainen |
4:c449bead5cf3 | 265 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 266 | * When TCP socket is opened it is in closed state. It must be set either listen or to connect state before it can be used to receive or transmit data. |
| Mika Karjalainen |
4:c449bead5cf3 | 267 | * SOCKET_TCP_TLS socket type is for secured TCP communication. Socket default TLS cipher suite is PSK. Change supported cipher suites can be set by sec_socket_set_chipher_suite_list() function. |
| Mika Karjalainen |
4:c449bead5cf3 | 268 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 269 | * Socket can be set to listen mode by calling socket_listen() function. After the call the socket can accept an incoming connection from a remote host. |
| Mika Karjalainen |
4:c449bead5cf3 | 270 | * Listen mode closes the connection automatically after server timeout or when client or application closes the connection manually by socket_close() function. |
| Mika Karjalainen |
4:c449bead5cf3 | 271 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 272 | * TCP socket can be connected to a remote host by calling socket_connect() with correct arguments. After the function call (non-blocking) application must wait for the socket event to confirm the successful state change of the socket. |
| Mika Karjalainen |
4:c449bead5cf3 | 273 | * After the event of successful state change data can be sent using socket_send() by client and socket_send() by server call. |
| Mika Karjalainen |
4:c449bead5cf3 | 274 | * Connection can be closed by calling socket_close() function or by server timeout. |
| Mika Karjalainen |
4:c449bead5cf3 | 275 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 276 | * \section socket-udpicmp How to Use UDP and RAW Socket |
| Mika Karjalainen |
4:c449bead5cf3 | 277 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 278 | * UDP socket is ready to receive and send data immediately after successful call of socket_open() and NET_READY event is received. |
| Mika Karjalainen |
4:c449bead5cf3 | 279 | * Data can be transmitted by using socket_sendto() function. ICMP socket works with same function call. |
| Mika Karjalainen |
4:c449bead5cf3 | 280 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 281 | */ |
| jusu_81 | 11:1b7aaf37a131 | 282 | #ifdef __cplusplus |
| jusu_81 | 11:1b7aaf37a131 | 283 | extern "C" { |
| jusu_81 | 11:1b7aaf37a131 | 284 | #endif |
| Mika Karjalainen |
4:c449bead5cf3 | 285 | //#include "ns_platform.h" |
| Mika Karjalainen |
4:c449bead5cf3 | 286 | #include "ns_address.h" |
| Mika Karjalainen |
4:c449bead5cf3 | 287 | |
| Mika Karjalainen |
4:c449bead5cf3 | 288 | /** Protocol IDs used when opened sockets*/ |
| Mika Karjalainen |
4:c449bead5cf3 | 289 | /** Doesn't reserve anything. Socket in free. */ |
| Mika Karjalainen |
4:c449bead5cf3 | 290 | #define SOCKET_NONE 0 |
| Mika Karjalainen |
4:c449bead5cf3 | 291 | /** UDP socket type */ |
| Mika Karjalainen |
4:c449bead5cf3 | 292 | #define SOCKET_UDP 17 |
| Mika Karjalainen |
4:c449bead5cf3 | 293 | /** Normal TCP socket type */ |
| Mika Karjalainen |
4:c449bead5cf3 | 294 | #define SOCKET_TCP 6 |
| Mika Karjalainen |
4:c449bead5cf3 | 295 | /** TCP socket with TLS authentication */ |
| Mika Karjalainen |
4:c449bead5cf3 | 296 | #define SOCKET_TCP_TLS 7 |
| Mika Karjalainen |
4:c449bead5cf3 | 297 | |
| Mika Karjalainen |
4:c449bead5cf3 | 298 | /** |
| Mika Karjalainen |
4:c449bead5cf3 | 299 | * \brief A function to open a raw ICMP socket. |
| Mika Karjalainen |
4:c449bead5cf3 | 300 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 301 | * \param passed_fptr pointer to socket callback function |
| Mika Karjalainen |
4:c449bead5cf3 | 302 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 303 | * \return positive socket opened |
| Mika Karjalainen |
4:c449bead5cf3 | 304 | * \return eFALSE no free sockets |
| Mika Karjalainen |
4:c449bead5cf3 | 305 | * \return eBUSY port reserved |
| Mika Karjalainen |
4:c449bead5cf3 | 306 | */ |
| Mika Karjalainen |
4:c449bead5cf3 | 307 | extern int8_t socket_raw_open(void (*passed_fptr)(void *)); |
| Mika Karjalainen |
4:c449bead5cf3 | 308 | |
| Mika Karjalainen |
4:c449bead5cf3 | 309 | #define SOCKET_ICMP 32 |
| Mika Karjalainen |
4:c449bead5cf3 | 310 | /** ICMP Socket instruction |
| Mika Karjalainen |
4:c449bead5cf3 | 311 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 312 | * If used ICMP socket, minimum payload length is 8-bytes, where first 4-bytes form ICMP header. |
| Mika Karjalainen |
4:c449bead5cf3 | 313 | * First byte is for type, second for code and last two are for checksum witch must always be zero. |
| Mika Karjalainen |
4:c449bead5cf3 | 314 | * Stack will calculate the checksum automatically when send. Payload comes after the header. |
| Mika Karjalainen |
4:c449bead5cf3 | 315 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 316 | * This applies for reading and sending. |
| Mika Karjalainen |
4:c449bead5cf3 | 317 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 318 | * ICMP TYPE ICMP Code ICMP Checksum (2-bytes) Payload n-bytes (min. 4 bytes) |
| Mika Karjalainen |
4:c449bead5cf3 | 319 | * -------- -------- -------- -------- -------- -------- ....... ------- |
| Mika Karjalainen |
4:c449bead5cf3 | 320 | * 0xXX 0xXX 0x00 0x00 0xXX 0xXX ...... 0xXX |
| Mika Karjalainen |
4:c449bead5cf3 | 321 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 322 | * Example data flow for ping: |
| Mika Karjalainen |
4:c449bead5cf3 | 323 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 324 | * ICMP echo request with 4-bytes payload (Ping6). |
| Mika Karjalainen |
4:c449bead5cf3 | 325 | * 0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03 |
| Mika Karjalainen |
4:c449bead5cf3 | 326 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 327 | * ICMP echo response for the message above. |
| Mika Karjalainen |
4:c449bead5cf3 | 328 | * 0x81, 0x00, 0xXX, 0xXX, 0x00, 0x01, 0x02, 0x03 |
| Mika Karjalainen |
4:c449bead5cf3 | 329 | */ |
| Mika Karjalainen |
4:c449bead5cf3 | 330 | |
| Mika Karjalainen |
4:c449bead5cf3 | 331 | #ifndef SOCKET_CALLBACK_T |
| Mika Karjalainen |
4:c449bead5cf3 | 332 | #define SOCKET_CALLBACK_T |
| Mika Karjalainen |
4:c449bead5cf3 | 333 | /*! |
| Mika Karjalainen |
4:c449bead5cf3 | 334 | * \struct socket_callback_t |
| Mika Karjalainen |
4:c449bead5cf3 | 335 | * \brief Socket Callback function structure type. |
| Mika Karjalainen |
4:c449bead5cf3 | 336 | */ |
| Mika Karjalainen |
4:c449bead5cf3 | 337 | typedef struct socket_callback_t |
| Mika Karjalainen |
4:c449bead5cf3 | 338 | { |
| Mika Karjalainen |
4:c449bead5cf3 | 339 | uint8_t event_type; /**< Socket Callback Event check list below*/ |
| Mika Karjalainen |
4:c449bead5cf3 | 340 | uint8_t socket_id; /** Socket id queue which socket cause call back */ |
| Mika Karjalainen |
4:c449bead5cf3 | 341 | uint16_t d_len; /** Data length if event type is SOCKET_DATA */ |
| Mika Karjalainen |
4:c449bead5cf3 | 342 | uint8_t LINK_LQI; /** LINK LQI info if interface cuold give */ |
| Mika Karjalainen |
4:c449bead5cf3 | 343 | } socket_callback_t; |
| Mika Karjalainen |
4:c449bead5cf3 | 344 | #endif |
| Mika Karjalainen |
4:c449bead5cf3 | 345 | |
| Mika Karjalainen |
4:c449bead5cf3 | 346 | /** |
| Mika Karjalainen |
4:c449bead5cf3 | 347 | * \brief Used to initialize a socket for communication. |
| Mika Karjalainen |
4:c449bead5cf3 | 348 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 349 | * Note: Maximum of seven sockets at the same time is supported. |
| Mika Karjalainen |
4:c449bead5cf3 | 350 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 351 | * \param protocol defines the protocol to use. |
| Mika Karjalainen |
4:c449bead5cf3 | 352 | * \param identifier is e.g. in case of UDP, the UDP port. |
| Mika Karjalainen |
4:c449bead5cf3 | 353 | * \param passed_fptr is a function pointer to a function that is called whenever a data frame is received to this socket. |
| Mika Karjalainen |
4:c449bead5cf3 | 354 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 355 | * \return 0 or greater on success; return value is the socket ID. |
| Mika Karjalainen |
4:c449bead5cf3 | 356 | * \return -1 on failure. |
| Mika Karjalainen |
4:c449bead5cf3 | 357 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 358 | * Note: PROTOCOL_TCP_TLS socket default TLS chiphersuite is PSK. |
| Mika Karjalainen |
4:c449bead5cf3 | 359 | */ |
| Mika Karjalainen |
4:c449bead5cf3 | 360 | extern int8_t socket_open(uint8_t protocol, uint16_t identifier, void (*passed_fptr)(void *)); |
| Mika Karjalainen |
4:c449bead5cf3 | 361 | |
| Mika Karjalainen |
4:c449bead5cf3 | 362 | /** |
| Mika Karjalainen |
4:c449bead5cf3 | 363 | * \brief A function to free a socket. |
| Mika Karjalainen |
4:c449bead5cf3 | 364 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 365 | * \param socket ID of the socket to be released. |
| Mika Karjalainen |
4:c449bead5cf3 | 366 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 367 | * \return 0 socket released. |
| Mika Karjalainen |
4:c449bead5cf3 | 368 | * \return -1 socket not released. |
| Mika Karjalainen |
4:c449bead5cf3 | 369 | */ |
| Mika Karjalainen |
4:c449bead5cf3 | 370 | extern int8_t socket_free(int8_t socket); |
| Mika Karjalainen |
4:c449bead5cf3 | 371 | |
| Mika Karjalainen |
4:c449bead5cf3 | 372 | /** |
| Mika Karjalainen |
4:c449bead5cf3 | 373 | * \brief A function to set the socket to the listening mode. |
| Mika Karjalainen |
4:c449bead5cf3 | 374 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 375 | * \param socket socket ID to bind |
| Mika Karjalainen |
4:c449bead5cf3 | 376 | * \return 0 on success. |
| Mika Karjalainen |
4:c449bead5cf3 | 377 | * \return -1 on failure. |
| Mika Karjalainen |
4:c449bead5cf3 | 378 | */ |
| Mika Karjalainen |
4:c449bead5cf3 | 379 | extern int8_t socket_listen(int8_t socket); |
| Mika Karjalainen |
4:c449bead5cf3 | 380 | |
| Mika Karjalainen |
4:c449bead5cf3 | 381 | /** |
| Mika Karjalainen |
4:c449bead5cf3 | 382 | * \brief A function to connect to remote peer (TCP). |
| Mika Karjalainen |
4:c449bead5cf3 | 383 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 384 | * Used by the application to send data. |
| Mika Karjalainen |
4:c449bead5cf3 | 385 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 386 | * \param socket socket id |
| Mika Karjalainen |
4:c449bead5cf3 | 387 | * \param address address of remote peer |
| Mika Karjalainen |
4:c449bead5cf3 | 388 | * \param randomly_take_src_number 1=enable find next free random port number for current one |
| Mika Karjalainen |
4:c449bead5cf3 | 389 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 390 | * \return eOK done |
| Mika Karjalainen |
4:c449bead5cf3 | 391 | * \return eFALSE invalid socket id |
| Mika Karjalainen |
4:c449bead5cf3 | 392 | */ |
| Mika Karjalainen |
4:c449bead5cf3 | 393 | extern int8_t socket_connect(int8_t socket, ns_address_t *address, uint8_t randomly_take_src_number); |
| Mika Karjalainen |
4:c449bead5cf3 | 394 | |
| Mika Karjalainen |
4:c449bead5cf3 | 395 | /** |
| Mika Karjalainen |
4:c449bead5cf3 | 396 | * \brief A function to close a connection. |
| Mika Karjalainen |
4:c449bead5cf3 | 397 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 398 | * \param socket refers to the socket ID to close. |
| Mika Karjalainen |
4:c449bead5cf3 | 399 | * \param address refers to the destination client address. When using as a client, a null pointer shall be passed. |
| Mika Karjalainen |
4:c449bead5cf3 | 400 | * \param release_security_session refers to the security session id. |
| Mika Karjalainen |
4:c449bead5cf3 | 401 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 402 | * \return 0 on success. |
| Mika Karjalainen |
4:c449bead5cf3 | 403 | * \return -1 if a given socket ID is not found, if a socket type is wrong or tcp_close() returns a failure. |
| Mika Karjalainen |
4:c449bead5cf3 | 404 | * \return -2 if no active tcp session was found. |
| Mika Karjalainen |
4:c449bead5cf3 | 405 | * \return -3 if referred socket ID port is declared as a zero. |
| Mika Karjalainen |
4:c449bead5cf3 | 406 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 407 | * Note: randomly_take_src_number is highly recommend to use always. Stack will generate new source port between 49152-65534. |
| Mika Karjalainen |
4:c449bead5cf3 | 408 | */ |
| Mika Karjalainen |
4:c449bead5cf3 | 409 | extern int8_t socket_close(int8_t socket,ns_address_t *address, uint8_t release_security_session); |
| Mika Karjalainen |
4:c449bead5cf3 | 410 | |
| Mika Karjalainen |
4:c449bead5cf3 | 411 | /** |
| Mika Karjalainen |
4:c449bead5cf3 | 412 | * \brief Used to send data via a connected TCP socket by client. |
| Mika Karjalainen |
4:c449bead5cf3 | 413 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 414 | * Note: Socket connection must be ready before using this function. |
| Mika Karjalainen |
4:c449bead5cf3 | 415 | * Stack will automatically use the address of the remote connected host as the destination address for the packet. |
| Mika Karjalainen |
4:c449bead5cf3 | 416 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 417 | * \param socket socket id |
| Mika Karjalainen |
4:c449bead5cf3 | 418 | * \param buffer pointer to data |
| Mika Karjalainen |
4:c449bead5cf3 | 419 | * \param length data length |
| Mika Karjalainen |
4:c449bead5cf3 | 420 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 421 | * \return 0 done |
| Mika Karjalainen |
4:c449bead5cf3 | 422 | * \return -1 invalid socket id |
| Mika Karjalainen |
4:c449bead5cf3 | 423 | * \return -2 Socket memory allocation fail |
| Mika Karjalainen |
4:c449bead5cf3 | 424 | * \return -3 TCP state not established |
| Mika Karjalainen |
4:c449bead5cf3 | 425 | * \return -4 Socket tx process busy |
| Mika Karjalainen |
4:c449bead5cf3 | 426 | * \return -5 TLS authentication not ready |
| Mika Karjalainen |
4:c449bead5cf3 | 427 | * \return -6 Packet too short |
| Mika Karjalainen |
4:c449bead5cf3 | 428 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 429 | * Server need to use always specific address information when it close socket. |
| Mika Karjalainen |
4:c449bead5cf3 | 430 | * Client may set address pointer to NULL. |
| Mika Karjalainen |
4:c449bead5cf3 | 431 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 432 | */ |
| Mika Karjalainen |
4:c449bead5cf3 | 433 | extern int8_t socket_send(int8_t socket, uint8_t *buffer, uint16_t length); |
| Mika Karjalainen |
4:c449bead5cf3 | 434 | |
| Mika Karjalainen |
4:c449bead5cf3 | 435 | /** |
| Mika Karjalainen |
4:c449bead5cf3 | 436 | * \brief A function to read received data buffer from a socket. |
| Mika Karjalainen |
4:c449bead5cf3 | 437 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 438 | * Used by the application to get data from a socket. |
| Mika Karjalainen |
4:c449bead5cf3 | 439 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 440 | * \param socket refers to socket ID to be read from. |
| Mika Karjalainen |
4:c449bead5cf3 | 441 | * \param address is a pointer to the address structure, allocated by an application; source address is copied into this structure. |
| Mika Karjalainen |
4:c449bead5cf3 | 442 | * \param buffer is a pointer to an array to where the read data is written to. |
| Mika Karjalainen |
4:c449bead5cf3 | 443 | * \param length is the maximum length of the allocated buffer. |
| Mika Karjalainen |
4:c449bead5cf3 | 444 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 445 | * \return 0 if no data is read. |
| Mika Karjalainen |
4:c449bead5cf3 | 446 | * \return greater than 0, indicating the length of the data copied to buffer. |
| Mika Karjalainen |
4:c449bead5cf3 | 447 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 448 | */ |
| Mika Karjalainen |
4:c449bead5cf3 | 449 | extern int16_t socket_read(int8_t socket, ns_address_t *address, uint8_t *buffer, uint16_t length); |
| Mika Karjalainen |
4:c449bead5cf3 | 450 | |
| Mika Karjalainen |
4:c449bead5cf3 | 451 | /** |
| Mika Karjalainen |
4:c449bead5cf3 | 452 | * \brief Used to send UDP, TCP or raw ICMP data via the socket. |
| Mika Karjalainen |
4:c449bead5cf3 | 453 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 454 | * Used by the application to send data. |
| Mika Karjalainen |
4:c449bead5cf3 | 455 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 456 | * \param socket refers to socket ID. |
| Mika Karjalainen |
4:c449bead5cf3 | 457 | * \param address is a pointer to the destination address information. |
| Mika Karjalainen |
4:c449bead5cf3 | 458 | * \param buffer is a pointer to a data to be sent. |
| Mika Karjalainen |
4:c449bead5cf3 | 459 | * \param length is a length of the data to be sent. |
| Mika Karjalainen |
4:c449bead5cf3 | 460 | * \return 0 on success. |
| Mika Karjalainen |
4:c449bead5cf3 | 461 | * \return -1 invalid socket id. |
| Mika Karjalainen |
4:c449bead5cf3 | 462 | * \return -2 Socket memory allocation fail. |
| Mika Karjalainen |
4:c449bead5cf3 | 463 | * \return -3 TCP state not established. |
| Mika Karjalainen |
4:c449bead5cf3 | 464 | * \return -4 Socket tx process busy. |
| Mika Karjalainen |
4:c449bead5cf3 | 465 | * \return -5 TLS authentication not ready. |
| Mika Karjalainen |
4:c449bead5cf3 | 466 | * \return -6 Packet too short. |
| Mika Karjalainen |
4:c449bead5cf3 | 467 | */ |
| Mika Karjalainen |
4:c449bead5cf3 | 468 | extern int8_t socket_sendto(int8_t socket, ns_address_t *address, uint8_t *buffer, uint16_t length); |
| Mika Karjalainen |
4:c449bead5cf3 | 469 | |
| Mika Karjalainen |
4:c449bead5cf3 | 470 | /** |
| Mika Karjalainen |
4:c449bead5cf3 | 471 | * \brief A function to read signal information and length info from a socket. |
| Mika Karjalainen |
4:c449bead5cf3 | 472 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 473 | * Used by the application to read signal info. |
| Mika Karjalainen |
4:c449bead5cf3 | 474 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 475 | * \param socket socket id |
| Mika Karjalainen |
4:c449bead5cf3 | 476 | * \param info pointer to response data |
| Mika Karjalainen |
4:c449bead5cf3 | 477 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 478 | * \return eOK done |
| Mika Karjalainen |
4:c449bead5cf3 | 479 | * \return eFALSE invalid socket id |
| Mika Karjalainen |
4:c449bead5cf3 | 480 | */ |
| Mika Karjalainen |
4:c449bead5cf3 | 481 | //extern int8_t socket_read_info(int8_t socket, rf_info_t *info); |
| Mika Karjalainen |
4:c449bead5cf3 | 482 | /** |
| Mika Karjalainen |
4:c449bead5cf3 | 483 | * \brief A function to read a session info for TCP event. |
| Mika Karjalainen |
4:c449bead5cf3 | 484 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 485 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 486 | * \param socket refers to the ID to be read from. |
| Mika Karjalainen |
4:c449bead5cf3 | 487 | * \param address is a pointer to the address structure to where the session address information is read to. |
| Mika Karjalainen |
4:c449bead5cf3 | 488 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 489 | * \return 0 on success. |
| Mika Karjalainen |
4:c449bead5cf3 | 490 | * \return -1 if no socket is found or TCP is not compiled into this project. |
| Mika Karjalainen |
4:c449bead5cf3 | 491 | * \return -2 if no session information is found. |
| Mika Karjalainen |
4:c449bead5cf3 | 492 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 493 | * Note: Function should be called only at Socket call back call when socket event is SOCKET_BIND_DONE or SOCKET_TX_DONE. |
| Mika Karjalainen |
4:c449bead5cf3 | 494 | * The following sections introduce those functions. |
| Mika Karjalainen |
4:c449bead5cf3 | 495 | */ |
| Mika Karjalainen |
4:c449bead5cf3 | 496 | extern int8_t socket_read_session_address(int8_t socket, ns_address_t *address); |
| Mika Karjalainen |
4:c449bead5cf3 | 497 | |
| Mika Karjalainen |
4:c449bead5cf3 | 498 | /** Protocol levels used for socket_setsockopt */ |
| Mika Karjalainen |
4:c449bead5cf3 | 499 | #define SOCKET_IPPROTO_IPV6 41 |
| Mika Karjalainen |
4:c449bead5cf3 | 500 | |
| Mika Karjalainen |
4:c449bead5cf3 | 501 | /** Option names for protocol level SOCKET_IPPROTO_IPV6 */ |
| Mika Karjalainen |
4:c449bead5cf3 | 502 | /** Specify traffic class for outgoing packets, as int16_t (RFC 3542 S6.5 says int); valid values 0-255, or -1 for system default */ |
| Mika Karjalainen |
4:c449bead5cf3 | 503 | #define SOCKET_IPV6_TCLASS 1 |
| Mika Karjalainen |
4:c449bead5cf3 | 504 | |
| Mika Karjalainen |
4:c449bead5cf3 | 505 | /** |
| Mika Karjalainen |
4:c449bead5cf3 | 506 | * \brief Set an option for a socket |
| Mika Karjalainen |
4:c449bead5cf3 | 507 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 508 | * Used to specify miscellaneous options for a socket. Supported levels and |
| Mika Karjalainen |
4:c449bead5cf3 | 509 | * names defined above. |
| Mika Karjalainen |
4:c449bead5cf3 | 510 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 511 | * \param socket socket id |
| Mika Karjalainen |
4:c449bead5cf3 | 512 | * \param level protocol level |
| Mika Karjalainen |
4:c449bead5cf3 | 513 | * \param opt_name option name (interpretation depends on level) |
| Mika Karjalainen |
4:c449bead5cf3 | 514 | * \param opt_value pointer to value for the specified option |
| Mika Karjalainen |
4:c449bead5cf3 | 515 | * \param opt_len size of the data pointed to by value |
| Mika Karjalainen |
4:c449bead5cf3 | 516 | * |
| Mika Karjalainen |
4:c449bead5cf3 | 517 | * \return 0 on success |
| Mika Karjalainen |
4:c449bead5cf3 | 518 | * \return -1 invalid socket id |
| Mika Karjalainen |
4:c449bead5cf3 | 519 | * \return -2 invalid/unsupported option |
| Mika Karjalainen |
4:c449bead5cf3 | 520 | * \return -3 invalid option value |
| Mika Karjalainen |
4:c449bead5cf3 | 521 | */ |
| Mika Karjalainen |
4:c449bead5cf3 | 522 | extern int8_t socket_setsockopt(int8_t socket, uint8_t level, uint8_t opt_name, const void *opt_value, uint16_t opt_len); |
| jusu_81 | 11:1b7aaf37a131 | 523 | #ifdef __cplusplus |
| jusu_81 | 11:1b7aaf37a131 | 524 | } |
| jusu_81 | 11:1b7aaf37a131 | 525 | #endif |
| Mika Karjalainen |
4:c449bead5cf3 | 526 | #endif /*_NS_SOCKET_H*/ |
