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

Fork of libMiMic by Ryo Iizuka

Committer:
nyatla
Date:
Wed Nov 19 14:45:17 2014 +0000
Revision:
109:18f12ac01097
new MiMicIP API;

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_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