This is Webservice SDK for mbed. LPCXpresso1769/LPC1768/FRDM-K64F/LPC4088
Fork of libMiMic by
core/netif/NyLPC_iUdpSocket.h@115:fa79286d8ea4, 2017-02-24 (annotated)
- Committer:
- furutani
- Date:
- Fri Feb 24 04:43:41 2017 +0000
- Revision:
- 115:fa79286d8ea4
- Parent:
- 110:257739f9b31e
Delete missing include line.; Add parameter "timeout" to TCPSocket::connect(), precv().; Fix to send ARP request to default gateway when connecting to IP address of different segment.;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
nyatla | 109:18f12ac01097 | 1 | /********************************************************************************* |
nyatla | 109:18f12ac01097 | 2 | * PROJECT: MiMic |
nyatla | 109:18f12ac01097 | 3 | * -------------------------------------------------------------------------------- |
nyatla | 109:18f12ac01097 | 4 | * |
nyatla | 109:18f12ac01097 | 5 | * This file is part of MiMic |
nyatla | 109:18f12ac01097 | 6 | * Copyright (C)2011 Ryo Iizuka |
nyatla | 109:18f12ac01097 | 7 | * |
nyatla | 109:18f12ac01097 | 8 | * MiMic is free software: you can redistribute it and/or modify |
nyatla | 109:18f12ac01097 | 9 | * it under the terms of the GNU Lesser General Public License as published |
nyatla | 109:18f12ac01097 | 10 | * by the Free Software Foundation, either version 3 of the License, or |
nyatla | 109:18f12ac01097 | 11 | * (at your option) any later version. |
nyatla | 109:18f12ac01097 | 12 | * |
nyatla | 109:18f12ac01097 | 13 | * This program is distributed in the hope that it will be useful, |
nyatla | 109:18f12ac01097 | 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
nyatla | 109:18f12ac01097 | 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
nyatla | 109:18f12ac01097 | 16 | * GNU General Public License for more details. |
nyatla | 109:18f12ac01097 | 17 | * |
nyatla | 109:18f12ac01097 | 18 | * You should have received a copy of the GNU Lesser General Public License |
nyatla | 109:18f12ac01097 | 19 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
nyatla | 109:18f12ac01097 | 20 | * |
nyatla | 109:18f12ac01097 | 21 | * For further information please contact. |
nyatla | 109:18f12ac01097 | 22 | * http://nyatla.jp/ |
nyatla | 109:18f12ac01097 | 23 | * <airmail(at)ebony.plala.or.jp> or <nyatla(at)nyatla.jp> |
nyatla | 109:18f12ac01097 | 24 | * |
nyatla | 109:18f12ac01097 | 25 | *********************************************************************************/ |
nyatla | 109:18f12ac01097 | 26 | #ifndef NYLPC_IIUDPSOCKET_H_ |
nyatla | 109:18f12ac01097 | 27 | #define NYLPC_IIUDPSOCKET_H_ |
nyatla | 109:18f12ac01097 | 28 | |
nyatla | 109:18f12ac01097 | 29 | |
nyatla | 109:18f12ac01097 | 30 | #include "NyLPC_stdlib.h" |
nyatla | 109:18f12ac01097 | 31 | #include "NyLPC_os.h" |
nyatla | 109:18f12ac01097 | 32 | #include "NyLPC_NetIf_ip_types.h" |
nyatla | 109:18f12ac01097 | 33 | #include "NyLPC_iTcpSocket.h" |
nyatla | 109:18f12ac01097 | 34 | #ifdef __cplusplus |
nyatla | 109:18f12ac01097 | 35 | extern "C" { |
nyatla | 109:18f12ac01097 | 36 | #endif /* __cplusplus */ |
nyatla | 109:18f12ac01097 | 37 | |
nyatla | 109:18f12ac01097 | 38 | typedef struct NyLPC_TiUdpSocket NyLPC_TiUdpSocket_t; |
nyatla | 109:18f12ac01097 | 39 | /********************************************************************** |
nyatla | 109:18f12ac01097 | 40 | * Struct |
nyatla | 109:18f12ac01097 | 41 | **********************************************************************/ |
nyatla | 109:18f12ac01097 | 42 | |
nyatla | 109:18f12ac01097 | 43 | /** |
nyatla | 109:18f12ac01097 | 44 | * 受信情報を格納する構造体 |
nyatla | 109:18f12ac01097 | 45 | */ |
nyatla | 109:18f12ac01097 | 46 | struct NyLPC_TIPv4RxInfo |
nyatla | 109:18f12ac01097 | 47 | { |
nyatla | 109:18f12ac01097 | 48 | NyLPC_TUInt16 size;//パケットサイズ |
nyatla | 109:18f12ac01097 | 49 | NyLPC_TUInt16 port;//受信ポート |
nyatla | 109:18f12ac01097 | 50 | NyLPC_TUInt16 peer_port;//PEERポート |
nyatla | 109:18f12ac01097 | 51 | struct NyLPC_TIPv4Addr ip;//受信IP |
nyatla | 109:18f12ac01097 | 52 | struct NyLPC_TIPv4Addr peer_ip;//PEERIP |
nyatla | 109:18f12ac01097 | 53 | }; |
nyatla | 109:18f12ac01097 | 54 | |
nyatla | 109:18f12ac01097 | 55 | |
nyatla | 109:18f12ac01097 | 56 | /********************************************************************** |
nyatla | 109:18f12ac01097 | 57 | * Event |
nyatla | 109:18f12ac01097 | 58 | **********************************************************************/ |
nyatla | 109:18f12ac01097 | 59 | |
nyatla | 109:18f12ac01097 | 60 | /** |
nyatla | 109:18f12ac01097 | 61 | * 受信時に非同期にコールされるハンドラ |
nyatla | 109:18f12ac01097 | 62 | * UIPサービスタスクが実行する。 |
nyatla | 109:18f12ac01097 | 63 | * @return |
nyatla | 109:18f12ac01097 | 64 | * TRUEならパケットを受信キューへ追加する。FALSEならパケットを受信キューへ追加しない。 |
nyatla | 109:18f12ac01097 | 65 | */ |
nyatla | 109:18f12ac01097 | 66 | typedef NyLPC_TBool (*NyLPC_TiUdpSocket_onRxHandler)(NyLPC_TiUdpSocket_t* i_inst,const void* i_buf,const struct NyLPC_TIPv4RxInfo* i_info); |
nyatla | 109:18f12ac01097 | 67 | |
nyatla | 109:18f12ac01097 | 68 | /** |
nyatla | 109:18f12ac01097 | 69 | * 非同期にコールされるハンドラ。 |
nyatla | 109:18f12ac01097 | 70 | * UIPサービスタスクが実行する。 |
nyatla | 109:18f12ac01097 | 71 | */ |
nyatla | 109:18f12ac01097 | 72 | typedef void (*NyLPC_TiUdpSocket_onPeriodicHandler)(NyLPC_TiUdpSocket_t* i_inst); |
nyatla | 109:18f12ac01097 | 73 | |
nyatla | 109:18f12ac01097 | 74 | /********************************************************************** |
nyatla | 109:18f12ac01097 | 75 | * Function |
nyatla | 109:18f12ac01097 | 76 | **********************************************************************/ |
nyatla | 109:18f12ac01097 | 77 | |
nyatla | 109:18f12ac01097 | 78 | |
nyatla | 109:18f12ac01097 | 79 | |
nyatla | 109:18f12ac01097 | 80 | /** |
nyatla | 109:18f12ac01097 | 81 | * マルチキャストアドレスに参加する。 |
nyatla | 109:18f12ac01097 | 82 | * @param i_addr |
nyatla | 109:18f12ac01097 | 83 | * 参加するマルチキャストグループを指定する。 |
nyatla | 109:18f12ac01097 | 84 | * 同じマルチキャスとグループに参加できるのは、システムの中で1つに限られます。 |
nyatla | 109:18f12ac01097 | 85 | * 0を指定した場合、マルチキャスとグループから離脱します。 |
nyatla | 109:18f12ac01097 | 86 | */ |
nyatla | 109:18f12ac01097 | 87 | typedef void (*NyLPC_TiUdpSocket_joinMulticast)(NyLPC_TiUdpSocket_t* i_inst,const struct NyLPC_TIPv4Addr* i_addr); |
nyatla | 109:18f12ac01097 | 88 | |
nyatla | 109:18f12ac01097 | 89 | /** |
nyatla | 109:18f12ac01097 | 90 | * ブロードキャストに参加する。 |
nyatla | 109:18f12ac01097 | 91 | */ |
nyatla | 109:18f12ac01097 | 92 | typedef void (*NyLPC_TiUdpSocket_setBroadcast)(NyLPC_TiUdpSocket_t* i_inst); |
nyatla | 109:18f12ac01097 | 93 | |
nyatla | 109:18f12ac01097 | 94 | |
nyatla | 109:18f12ac01097 | 95 | /** |
nyatla | 109:18f12ac01097 | 96 | * この関数は、ソケットの受信バッファの読み取り位置と、読み出せるデータサイズを返却します。 |
nyatla | 109:18f12ac01097 | 97 | * 関数はポインターを返却するだけで、バッファの読み取り位置をシークしません。 |
nyatla | 109:18f12ac01097 | 98 | * シークするにはNyLPC_cTcpSocket_pseekを使います。 |
nyatla | 109:18f12ac01097 | 99 | */ |
nyatla | 109:18f12ac01097 | 100 | typedef NyLPC_TInt32 (*NyLPC_TiUdpSocket_precv)(NyLPC_TiUdpSocket_t* i_inst,const void** o_buf_ptr,const struct NyLPC_TIPv4RxInfo** o_info,NyLPC_TUInt32 i_wait_msec); |
nyatla | 109:18f12ac01097 | 101 | /** |
nyatla | 109:18f12ac01097 | 102 | * 受信バッファを次のバッファまでシークします。 |
nyatla | 109:18f12ac01097 | 103 | */ |
nyatla | 109:18f12ac01097 | 104 | typedef void (*NyLPC_TiUdpSocket_pseek)(NyLPC_TiUdpSocket_t* i_inst); |
nyatla | 109:18f12ac01097 | 105 | |
nyatla | 109:18f12ac01097 | 106 | /** |
nyatla | 109:18f12ac01097 | 107 | * 送信バッファを割り当てて返します。 |
nyatla | 109:18f12ac01097 | 108 | * 割り当てたメモリは、releaseSendBuf関数か、psend関数を成功させて開放する必要があります。 |
nyatla | 109:18f12ac01097 | 109 | * @param i_hint |
nyatla | 109:18f12ac01097 | 110 | * 取得したいメモリサイズをセットします。 |
nyatla | 109:18f12ac01097 | 111 | * 関数は要求サイズより小さいメモリを返すことがあります。 |
nyatla | 109:18f12ac01097 | 112 | */ |
nyatla | 109:18f12ac01097 | 113 | typedef void* (*NyLPC_TiUdpSocket_allocSendBuf)(NyLPC_TiUdpSocket_t* i_inst,NyLPC_TUInt16 i_hint,NyLPC_TUInt16* o_buf_size,NyLPC_TUInt32 i_wait_in_msec); |
nyatla | 109:18f12ac01097 | 114 | |
nyatla | 109:18f12ac01097 | 115 | typedef void (*NyLPC_TiUdpSocket_releaseSendBuf)(NyLPC_TiUdpSocket_t* i_inst,void* i_buf_ptr); |
nyatla | 109:18f12ac01097 | 116 | |
nyatla | 109:18f12ac01097 | 117 | /** |
nyatla | 109:18f12ac01097 | 118 | * 事前にAllocしたTxパケットを送信します。 |
nyatla | 109:18f12ac01097 | 119 | * このAPIはゼロコピー送信をサポートするためのものです。 |
nyatla | 109:18f12ac01097 | 120 | * @param i_buf_ptr |
nyatla | 109:18f12ac01097 | 121 | * allocSendBufで取得したメモリを指定します。 |
nyatla | 109:18f12ac01097 | 122 | * @return |
nyatla | 109:18f12ac01097 | 123 | * 関数が失敗した場合、i_buf_ptrは「開放されません。」 |
nyatla | 109:18f12ac01097 | 124 | */ |
nyatla | 109:18f12ac01097 | 125 | typedef NyLPC_TBool (*NyLPC_TiUdpSocket_psend)(NyLPC_TiUdpSocket_t* i_inst,const struct NyLPC_TIPv4Addr* i_addr,NyLPC_TUInt16 i_port,void* i_buf_ptr,int i_len); |
nyatla | 109:18f12ac01097 | 126 | |
nyatla | 109:18f12ac01097 | 127 | /** |
nyatla | 109:18f12ac01097 | 128 | * 最大送信サイズは1200バイトです。 |
nyatla | 109:18f12ac01097 | 129 | */ |
nyatla | 109:18f12ac01097 | 130 | typedef NyLPC_TInt32 (*NyLPC_TiUdpSocket_send)(NyLPC_TiUdpSocket_t* i_inst,const struct NyLPC_TIPv4Addr* i_addr,NyLPC_TUInt16 i_port,const void* i_buf_ptr,NyLPC_TInt32 i_len,NyLPC_TUInt32 i_wait_in_msec); |
nyatla | 109:18f12ac01097 | 131 | |
nyatla | 109:18f12ac01097 | 132 | /** |
nyatla | 109:18f12ac01097 | 133 | * 非同期パケットハンドラを設定する。 |
nyatla | 109:18f12ac01097 | 134 | */ |
nyatla | 109:18f12ac01097 | 135 | typedef void (*NyLPC_TiUdpSocket_setOnRxHandler)(NyLPC_TiUdpSocket_t* i_inst,NyLPC_TiUdpSocket_onRxHandler i_handler); |
nyatla | 109:18f12ac01097 | 136 | |
nyatla | 109:18f12ac01097 | 137 | /** |
nyatla | 109:18f12ac01097 | 138 | * 非同期タイマ呼び出しハンドラを設定する。 |
nyatla | 109:18f12ac01097 | 139 | */ |
nyatla | 109:18f12ac01097 | 140 | typedef void (*NyLPC_TiUdpSocket_setOnPeriodicHandler)(NyLPC_TiUdpSocket_t* i_inst,NyLPC_TiUdpSocket_onPeriodicHandler i_handler); |
nyatla | 109:18f12ac01097 | 141 | |
nyatla | 109:18f12ac01097 | 142 | |
nyatla | 109:18f12ac01097 | 143 | /** |
nyatla | 109:18f12ac01097 | 144 | * ソケットのローカルIPのアドレスを返す。 |
nyatla | 109:18f12ac01097 | 145 | * 値はuipが動作中のみ有効。 |
nyatla | 109:18f12ac01097 | 146 | */ |
nyatla | 110:257739f9b31e | 147 | typedef const struct NyLPC_TIPv4Addr* (*NyLPC_TiUdpSocket_getSockIP)(const NyLPC_TiUdpSocket_t* i_inst); |
nyatla | 109:18f12ac01097 | 148 | |
nyatla | 109:18f12ac01097 | 149 | typedef void (*NyLPC_TiUdpSocket_finalize)(NyLPC_TiUdpSocket_t* i_inst); |
nyatla | 109:18f12ac01097 | 150 | |
nyatla | 109:18f12ac01097 | 151 | |
nyatla | 109:18f12ac01097 | 152 | /********************************************************************** |
nyatla | 109:18f12ac01097 | 153 | * Interface |
nyatla | 109:18f12ac01097 | 154 | **********************************************************************/ |
nyatla | 109:18f12ac01097 | 155 | |
nyatla | 109:18f12ac01097 | 156 | /** |
nyatla | 109:18f12ac01097 | 157 | */ |
nyatla | 109:18f12ac01097 | 158 | struct NyLPC_TiUdpSocket_Interface |
nyatla | 109:18f12ac01097 | 159 | { |
nyatla | 109:18f12ac01097 | 160 | NyLPC_TiUdpSocket_joinMulticast joinMulticast; |
nyatla | 109:18f12ac01097 | 161 | NyLPC_TiUdpSocket_setBroadcast setBroadcast; |
nyatla | 109:18f12ac01097 | 162 | NyLPC_TiUdpSocket_precv precv; |
nyatla | 109:18f12ac01097 | 163 | NyLPC_TiUdpSocket_pseek pseek; |
nyatla | 109:18f12ac01097 | 164 | NyLPC_TiUdpSocket_allocSendBuf allocSendBuf; |
nyatla | 109:18f12ac01097 | 165 | NyLPC_TiUdpSocket_releaseSendBuf releaseSendBuf; |
nyatla | 109:18f12ac01097 | 166 | NyLPC_TiUdpSocket_psend psend; |
nyatla | 109:18f12ac01097 | 167 | NyLPC_TiUdpSocket_send send; |
nyatla | 109:18f12ac01097 | 168 | NyLPC_TiUdpSocket_setOnRxHandler setOnRxHandler; |
nyatla | 109:18f12ac01097 | 169 | NyLPC_TiUdpSocket_setOnPeriodicHandler setOnPeriodicHandler; |
nyatla | 109:18f12ac01097 | 170 | NyLPC_TiUdpSocket_getSockIP getSockIP; |
nyatla | 109:18f12ac01097 | 171 | NyLPC_TiUdpSocket_finalize finalize; |
nyatla | 109:18f12ac01097 | 172 | }; |
nyatla | 109:18f12ac01097 | 173 | |
nyatla | 109:18f12ac01097 | 174 | struct NyLPC_TiUdpSocket |
nyatla | 109:18f12ac01097 | 175 | { |
nyatla | 109:18f12ac01097 | 176 | const struct NyLPC_TiUdpSocket_Interface* _interface; |
nyatla | 109:18f12ac01097 | 177 | void* _tag; |
nyatla | 109:18f12ac01097 | 178 | }; |
nyatla | 109:18f12ac01097 | 179 | |
nyatla | 109:18f12ac01097 | 180 | |
nyatla | 109:18f12ac01097 | 181 | #define NyLPC_iUdpSocket_joinMulticast(i_inst,i_addr) ((i_inst)->_interface->joinMulticast((i_inst),(i_addr))) |
nyatla | 109:18f12ac01097 | 182 | #define NyLPC_iUdpSocket_setBroadcast(i_inst) ((i_inst)->_interface->setBroadcast((i_inst))) |
nyatla | 109:18f12ac01097 | 183 | #define NyLPC_iUdpSocket_precv(i_inst,o_buf_ptr,o_info,i_wait_msec) ((i_inst)->_interface->precv((i_inst),(o_buf_ptr),(o_info),(i_wait_msec))) |
nyatla | 109:18f12ac01097 | 184 | #define NyLPC_iUdpSocket_pseek(i_inst) ((i_inst)->_interface->pseek((i_inst))) |
nyatla | 109:18f12ac01097 | 185 | #define NyLPC_iUdpSocket_allocSendBuf(i_inst,i_hint,o_buf_size,i_wait_in_msec) ((i_inst)->_interface->allocSendBuf((i_inst),(i_hint),(o_buf_size),(i_wait_in_msec))) |
nyatla | 109:18f12ac01097 | 186 | #define NyLPC_iUdpSocket_releaseSendBuf(i_inst,i_buf_ptr) ((i_inst)->_interface->releaseSendBuf((i_inst),(i_buf_ptr))) |
nyatla | 109:18f12ac01097 | 187 | #define NyLPC_iUdpSocket_psend(i_inst,i_addr,i_port,i_buf_ptr,i_len) ((i_inst)->_interface->psend((i_inst),(i_addr),(i_port),(i_buf_ptr),(i_len))) |
nyatla | 109:18f12ac01097 | 188 | #define NyLPC_iUdpSocket_send(i_inst,i_addr,i_port,i_buf_ptr,i_len,i_wait_in_msec) ((i_inst)->_interface->send((i_inst),(i_addr),(i_port),(i_buf_ptr),(i_len),(i_wait_in_msec))) |
nyatla | 109:18f12ac01097 | 189 | #define NyLPC_iUdpSocket_setOnRxHandler(i_inst,i_handler) ((i_inst)->_interface->setOnRxHandler((i_inst),(i_handler))) |
nyatla | 109:18f12ac01097 | 190 | #define NyLPC_iUdpSocket_setOnPeriodicHandler(i_inst,i_handler) ((i_inst)->_interface->setOnPeriodicHandler((i_inst),(i_handler))) |
nyatla | 109:18f12ac01097 | 191 | #define NyLPC_iUdpSocket_getSockIP(i_inst) ((i_inst)->_interface->getSockIP((i_inst))) |
nyatla | 109:18f12ac01097 | 192 | #define NyLPC_iUdpSocket_finalize(i_inst) ((i_inst)->_interface->finalize((i_inst))) |
nyatla | 109:18f12ac01097 | 193 | |
nyatla | 109:18f12ac01097 | 194 | |
nyatla | 109:18f12ac01097 | 195 | #ifdef __cplusplus |
nyatla | 109:18f12ac01097 | 196 | } |
nyatla | 109:18f12ac01097 | 197 | #endif /* __cplusplus */ |
nyatla | 109:18f12ac01097 | 198 | |
nyatla | 109:18f12ac01097 | 199 | #endif /* NYLPC_IIUDPSOCKET_H_ */ |