This is Webservice SDK for mbed. LPCXpresso1769/LPC1768/FRDM-K64F/LPC4088

Fork of libMiMic by Ryo Iizuka

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?

UserRevisionLine numberNew 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_ */