This is Webservice SDK for mbed. LPCXpresso1769/LPC1768/FRDM-K64F/LPC4088
Fork of libMiMic by
core/netif/NyLPC_iTcpSocket.h@109:18f12ac01097, 2014-11-19 (annotated)
- Committer:
- nyatla
- Date:
- Wed Nov 19 14:45:17 2014 +0000
- Revision:
- 109:18f12ac01097
new MiMicIP API;
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_ITCPSOCKET_H_ |
nyatla | 109:18f12ac01097 | 27 | #define NYLPC_ITCPSOCKET_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 | |
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_TiTcpSocket NyLPC_TiTcpSocket_t; |
nyatla | 109:18f12ac01097 | 39 | |
nyatla | 109:18f12ac01097 | 40 | /********************************************************************** |
nyatla | 109:18f12ac01097 | 41 | * Function |
nyatla | 109:18f12ac01097 | 42 | **********************************************************************/ |
nyatla | 109:18f12ac01097 | 43 | |
nyatla | 109:18f12ac01097 | 44 | |
nyatla | 109:18f12ac01097 | 45 | typedef const struct NyLPC_TIPv4Addr* (*NyLPC_TiTcpSocket_getPeerAddr)(const NyLPC_TiTcpSocket_t* i_inst); |
nyatla | 109:18f12ac01097 | 46 | typedef NyLPC_TUInt16 (*NyLPC_TiTcpSocket_getPeerPort)(const NyLPC_TiTcpSocket_t* i_inst); |
nyatla | 109:18f12ac01097 | 47 | |
nyatla | 109:18f12ac01097 | 48 | |
nyatla | 109:18f12ac01097 | 49 | typedef NyLPC_TBool (*NyLPC_TiTcpSocket_accept)(NyLPC_TiTcpSocket_t* i_inst,NyLPC_TUInt32 i_wait_in_msec); |
nyatla | 109:18f12ac01097 | 50 | /** |
nyatla | 109:18f12ac01097 | 51 | * @return |
nyatla | 109:18f12ac01097 | 52 | * 1 - 以上:受信に成功した。 |
nyatla | 109:18f12ac01097 | 53 | * 0 - タイムアウト |
nyatla | 109:18f12ac01097 | 54 | * -1 - ソケットがクローズしている |
nyatla | 109:18f12ac01097 | 55 | */ |
nyatla | 109:18f12ac01097 | 56 | typedef NyLPC_TInt32 (*NyLPC_TiTcpSocket_precv)(NyLPC_TiTcpSocket_t* i_inst,const void** o_buf_ptr,NyLPC_TUInt32 i_wait_msec); |
nyatla | 109:18f12ac01097 | 57 | typedef void (*NyLPC_TiTcpSocket_pseek)(NyLPC_TiTcpSocket_t* i_inst,NyLPC_TUInt16 i_seek); |
nyatla | 109:18f12ac01097 | 58 | /** |
nyatla | 109:18f12ac01097 | 59 | * 送信未達は保障されません。 |
nyatla | 109:18f12ac01097 | 60 | * エラーを検出したら、基本的にはソケットをクローズしてください。 |
nyatla | 109:18f12ac01097 | 61 | * @param i_wait_msec |
nyatla | 109:18f12ac01097 | 62 | * 送信失敗までの待ち時間を指定します。現在は、 |
nyatla | 109:18f12ac01097 | 63 | * RTT推定ができないため、TCPの再送を考慮して、最低でも10秒(10000)程度を指定してください。 |
nyatla | 109:18f12ac01097 | 64 | * @return |
nyatla | 109:18f12ac01097 | 65 | * 送信したバイト数を返します。エラーならば0未満の数を返します。 |
nyatla | 109:18f12ac01097 | 66 | * |
nyatla | 109:18f12ac01097 | 67 | */ |
nyatla | 109:18f12ac01097 | 68 | typedef NyLPC_TInt32(*NyLPC_TiTcpSocket_send)(NyLPC_TiTcpSocket_t* i_inst,const void* i_buf_ptr,NyLPC_TInt32 i_len,NyLPC_TUInt32 i_wait_in_msec); |
nyatla | 109:18f12ac01097 | 69 | typedef void(*NyLPC_TiTcpSocket_close)(NyLPC_TiTcpSocket_t* i_inst,NyLPC_TUInt32 i_wait_in_msec); |
nyatla | 109:18f12ac01097 | 70 | |
nyatla | 109:18f12ac01097 | 71 | |
nyatla | 109:18f12ac01097 | 72 | /** |
nyatla | 109:18f12ac01097 | 73 | * NyLPC_iTcpSocket_psendで送信するための送信バッファ準備します。 |
nyatla | 109:18f12ac01097 | 74 | * @param i_hint |
nyatla | 109:18f12ac01097 | 75 | * 送信を希望するデータサイズを指定します。 |
nyatla | 109:18f12ac01097 | 76 | * アロケータは出来る限り希望に沿ってメモリを返します。 |
nyatla | 109:18f12ac01097 | 77 | * @param o_buf_size |
nyatla | 109:18f12ac01097 | 78 | * 取得できたバッファサイズを返します。 |
nyatla | 109:18f12ac01097 | 79 | * @return |
nyatla | 109:18f12ac01097 | 80 | * 成功した場合、送信バッファを返します。 |
nyatla | 109:18f12ac01097 | 81 | * アプリケーションは、可能な限り速やかにデータを書き込んで、NyLPC_iTcpSocket_psendをコールしてください。 |
nyatla | 109:18f12ac01097 | 82 | * @note |
nyatla | 109:18f12ac01097 | 83 | * Optionフィールドを持つパケットを送信する場合は、オプションデータサイズの合計をデータサイズに指定して、payloadwriterで調整すること。 |
nyatla | 109:18f12ac01097 | 84 | */ |
nyatla | 109:18f12ac01097 | 85 | typedef void* (*NyLPC_TiTcpSocket_allocSendBuf)(NyLPC_TiTcpSocket_t* i_inst,NyLPC_TUInt16 i_hint,NyLPC_TUInt16* o_buf_size,NyLPC_TUInt32 i_wait_in_msec); |
nyatla | 109:18f12ac01097 | 86 | |
nyatla | 109:18f12ac01097 | 87 | /** |
nyatla | 109:18f12ac01097 | 88 | * NyLPC_iTcpSocket_allocSendBufで確保したメモリを開放します。 |
nyatla | 109:18f12ac01097 | 89 | */ |
nyatla | 109:18f12ac01097 | 90 | typedef void (*NyLPC_TiTcpSocket_releaseSendBuf)(NyLPC_TiTcpSocket_t* i_inst,void* i_buf_ptr); |
nyatla | 109:18f12ac01097 | 91 | |
nyatla | 109:18f12ac01097 | 92 | /** |
nyatla | 109:18f12ac01097 | 93 | * 事前にAllocしたTxパケットを送信します。 |
nyatla | 109:18f12ac01097 | 94 | * このAPIはゼロコピー送信をサポートするためのものです。 |
nyatla | 109:18f12ac01097 | 95 | * @param i_buf_ptr |
nyatla | 109:18f12ac01097 | 96 | * allocSendBufで取得したメモリを指定します。 |
nyatla | 109:18f12ac01097 | 97 | * @return |
nyatla | 109:18f12ac01097 | 98 | * 失敗した場合、メモリは開放されません。 |
nyatla | 109:18f12ac01097 | 99 | */ |
nyatla | 109:18f12ac01097 | 100 | typedef NyLPC_TBool (*NyLPC_TiTcpSocket_psend)(NyLPC_TiTcpSocket_t* i_inst,void* i_buf_ptr,int i_len,NyLPC_TUInt32 i_wait_in_msec); |
nyatla | 109:18f12ac01097 | 101 | |
nyatla | 109:18f12ac01097 | 102 | /** |
nyatla | 109:18f12ac01097 | 103 | * TCPソケットをクライアントとしてサーバへ接続します。 |
nyatla | 109:18f12ac01097 | 104 | */ |
nyatla | 109:18f12ac01097 | 105 | typedef NyLPC_TBool (*NyLPC_TiTcpSocket_connect)(NyLPC_TiTcpSocket_t* i_inst,const struct NyLPC_TIPv4Addr* i_addr,NyLPC_TUInt16 i_peer_port,NyLPC_TUInt32 i_wait_in_msec); |
nyatla | 109:18f12ac01097 | 106 | |
nyatla | 109:18f12ac01097 | 107 | typedef void (*NyLPC_TiTcpSocket_finalize)(NyLPC_TiTcpSocket_t* i_inst); |
nyatla | 109:18f12ac01097 | 108 | |
nyatla | 109:18f12ac01097 | 109 | /********************************************************************** |
nyatla | 109:18f12ac01097 | 110 | * Interface |
nyatla | 109:18f12ac01097 | 111 | **********************************************************************/ |
nyatla | 109:18f12ac01097 | 112 | |
nyatla | 109:18f12ac01097 | 113 | /** |
nyatla | 109:18f12ac01097 | 114 | */ |
nyatla | 109:18f12ac01097 | 115 | struct NyLPC_TiTcpSocket_Interface |
nyatla | 109:18f12ac01097 | 116 | { |
nyatla | 109:18f12ac01097 | 117 | NyLPC_TiTcpSocket_getPeerAddr getpeeraddr; |
nyatla | 109:18f12ac01097 | 118 | NyLPC_TiTcpSocket_getPeerPort getpeerport; |
nyatla | 109:18f12ac01097 | 119 | NyLPC_TiTcpSocket_accept accept; |
nyatla | 109:18f12ac01097 | 120 | NyLPC_TiTcpSocket_precv precv; |
nyatla | 109:18f12ac01097 | 121 | NyLPC_TiTcpSocket_pseek pseek; |
nyatla | 109:18f12ac01097 | 122 | NyLPC_TiTcpSocket_send send; |
nyatla | 109:18f12ac01097 | 123 | NyLPC_TiTcpSocket_close close; |
nyatla | 109:18f12ac01097 | 124 | NyLPC_TiTcpSocket_allocSendBuf allocSendBuf; |
nyatla | 109:18f12ac01097 | 125 | NyLPC_TiTcpSocket_releaseSendBuf releaseSendBuf; |
nyatla | 109:18f12ac01097 | 126 | NyLPC_TiTcpSocket_psend psend; |
nyatla | 109:18f12ac01097 | 127 | NyLPC_TiTcpSocket_connect connect; |
nyatla | 109:18f12ac01097 | 128 | NyLPC_TiTcpSocket_finalize finalize; |
nyatla | 109:18f12ac01097 | 129 | }; |
nyatla | 109:18f12ac01097 | 130 | |
nyatla | 109:18f12ac01097 | 131 | struct NyLPC_TiTcpSocket |
nyatla | 109:18f12ac01097 | 132 | { |
nyatla | 109:18f12ac01097 | 133 | const struct NyLPC_TiTcpSocket_Interface* _interface; |
nyatla | 109:18f12ac01097 | 134 | }; |
nyatla | 109:18f12ac01097 | 135 | |
nyatla | 109:18f12ac01097 | 136 | |
nyatla | 109:18f12ac01097 | 137 | #define NyLPC_iTcpSocket_getPeerAddr(i_inst) ((i_inst)->_interface->getpeeraddr((i_inst))) |
nyatla | 109:18f12ac01097 | 138 | #define NyLPC_iTcpSocket_getPeerPort(i_inst) ((i_inst)->_interface->getpeerport((i_inst))) |
nyatla | 109:18f12ac01097 | 139 | #define NyLPC_iTcpSocket_accept(i_inst,i_wait_in_msec) ((i_inst)->_interface->accept((i_inst),(i_wait_in_msec))) |
nyatla | 109:18f12ac01097 | 140 | #define NyLPC_iTcpSocket_precv(i_inst,o_buf_ptr,i_wait_msec) ((i_inst)->_interface->precv((i_inst),(o_buf_ptr),(i_wait_msec))) |
nyatla | 109:18f12ac01097 | 141 | #define NyLPC_iTcpSocket_pseek(i_inst,i_seek) ((i_inst)->_interface->pseek((i_inst),(i_seek))) |
nyatla | 109:18f12ac01097 | 142 | #define NyLPC_iTcpSocket_send(i_inst,i_buf_ptr,i_len,i_wait_in_msec) ((i_inst)->_interface->send((i_inst),(i_buf_ptr),(i_len),(i_wait_in_msec))) |
nyatla | 109:18f12ac01097 | 143 | #define NyLPC_iTcpSocket_close(i_inst,i_wait_in_msec) ((i_inst)->_interface->close((i_inst),(i_wait_in_msec))) |
nyatla | 109:18f12ac01097 | 144 | #define NyLPC_iTcpSocket_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 | 145 | #define NyLPC_iTcpSocket_releaseSendBuf(i_inst,i_buf_ptr) ((i_inst)->_interface->releaseSendBuf((i_inst),(i_buf_ptr))) |
nyatla | 109:18f12ac01097 | 146 | #define NyLPC_iTcpSocket_psend(i_inst,i_buf_ptr,i_len,i_wait_in_msec) ((i_inst)->_interface->psend((i_inst),(i_buf_ptr),(i_len),(i_wait_in_msec))) |
nyatla | 109:18f12ac01097 | 147 | #define NyLPC_iTcpSocket_connect(i_inst,i_addr,i_peer_port,i_wait_in_msec) ((i_inst)->_interface->connect((i_inst),(i_addr),(i_peer_port),(i_wait_in_msec))) |
nyatla | 109:18f12ac01097 | 148 | #define NyLPC_iTcpSocket_finalize(i_inst) ((i_inst)->_interface->finalize((i_inst))) |
nyatla | 109:18f12ac01097 | 149 | |
nyatla | 109:18f12ac01097 | 150 | #ifdef __cplusplus |
nyatla | 109:18f12ac01097 | 151 | } |
nyatla | 109:18f12ac01097 | 152 | #endif /* __cplusplus */ |
nyatla | 109:18f12ac01097 | 153 | |
nyatla | 109:18f12ac01097 | 154 | #endif /* NYLPC_ITCPSOCKET_H_ */ |
nyatla | 109:18f12ac01097 | 155 |