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

Fork of libMiMic by Ryo Iizuka

Revision:
109:18f12ac01097
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/netif/NyLPC_iTcpSocket.h	Wed Nov 19 14:45:17 2014 +0000
@@ -0,0 +1,155 @@
+/*********************************************************************************
+ * PROJECT: MiMic
+ * --------------------------------------------------------------------------------
+ *
+ * This file is part of MiMic
+ * Copyright (C)2011 Ryo Iizuka
+ *
+ * MiMic is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * For further information please contact.
+ *  http://nyatla.jp/
+ *  <airmail(at)ebony.plala.or.jp> or <nyatla(at)nyatla.jp>
+ *
+ *********************************************************************************/
+#ifndef NYLPC_ITCPSOCKET_H_
+#define NYLPC_ITCPSOCKET_H_
+
+
+#include "NyLPC_stdlib.h"
+#include "NyLPC_os.h"
+#include "NyLPC_NetIf_ip_types.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+typedef struct NyLPC_TiTcpSocket NyLPC_TiTcpSocket_t;
+
+/**********************************************************************
+ * Function
+ **********************************************************************/
+
+
+typedef const struct NyLPC_TIPv4Addr* (*NyLPC_TiTcpSocket_getPeerAddr)(const NyLPC_TiTcpSocket_t* i_inst);
+typedef NyLPC_TUInt16 (*NyLPC_TiTcpSocket_getPeerPort)(const NyLPC_TiTcpSocket_t* i_inst);
+
+
+typedef NyLPC_TBool (*NyLPC_TiTcpSocket_accept)(NyLPC_TiTcpSocket_t* i_inst,NyLPC_TUInt32 i_wait_in_msec);
+/**
+ * @return
+ *  1 - 以上:受信に成功した。
+ *  0 - タイムアウト
+ * -1 - ソケットがクローズしている
+ */
+typedef NyLPC_TInt32 (*NyLPC_TiTcpSocket_precv)(NyLPC_TiTcpSocket_t* i_inst,const void** o_buf_ptr,NyLPC_TUInt32 i_wait_msec);
+typedef void (*NyLPC_TiTcpSocket_pseek)(NyLPC_TiTcpSocket_t* i_inst,NyLPC_TUInt16 i_seek);
+/**
+ * 送信未達は保障されません。
+ * エラーを検出したら、基本的にはソケットをクローズしてください。
+ * @param i_wait_msec
+ * 送信失敗までの待ち時間を指定します。現在は、
+ * RTT推定ができないため、TCPの再送を考慮して、最低でも10秒(10000)程度を指定してください。
+ * @return
+ * 送信したバイト数を返します。エラーならば0未満の数を返します。
+ *
+ */
+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);
+typedef void(*NyLPC_TiTcpSocket_close)(NyLPC_TiTcpSocket_t* i_inst,NyLPC_TUInt32 i_wait_in_msec);
+
+
+/**
+ * NyLPC_iTcpSocket_psendで送信するための送信バッファ準備します。
+ * @param i_hint
+ * 送信を希望するデータサイズを指定します。
+ * アロケータは出来る限り希望に沿ってメモリを返します。
+ * @param o_buf_size
+ * 取得できたバッファサイズを返します。
+ * @return
+ * 成功した場合、送信バッファを返します。
+ * アプリケーションは、可能な限り速やかにデータを書き込んで、NyLPC_iTcpSocket_psendをコールしてください。
+ * @note
+ * Optionフィールドを持つパケットを送信する場合は、オプションデータサイズの合計をデータサイズに指定して、payloadwriterで調整すること。
+ */
+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);
+
+/**
+ * NyLPC_iTcpSocket_allocSendBufで確保したメモリを開放します。
+ */
+typedef void (*NyLPC_TiTcpSocket_releaseSendBuf)(NyLPC_TiTcpSocket_t* i_inst,void* i_buf_ptr);
+
+/**
+ * 事前にAllocしたTxパケットを送信します。
+ * このAPIはゼロコピー送信をサポートするためのものです。
+ * @param i_buf_ptr
+ * allocSendBufで取得したメモリを指定します。
+ * @return
+ * 失敗した場合、メモリは開放されません。
+ */
+typedef NyLPC_TBool (*NyLPC_TiTcpSocket_psend)(NyLPC_TiTcpSocket_t* i_inst,void* i_buf_ptr,int i_len,NyLPC_TUInt32 i_wait_in_msec);
+
+/**
+ * TCPソケットをクライアントとしてサーバへ接続します。
+ */
+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);
+
+typedef void (*NyLPC_TiTcpSocket_finalize)(NyLPC_TiTcpSocket_t* i_inst);
+
+/**********************************************************************
+ * Interface
+ **********************************************************************/
+
+/**
+ */
+struct NyLPC_TiTcpSocket_Interface
+{
+	NyLPC_TiTcpSocket_getPeerAddr getpeeraddr;
+	NyLPC_TiTcpSocket_getPeerPort getpeerport;
+	NyLPC_TiTcpSocket_accept accept;
+	NyLPC_TiTcpSocket_precv precv;
+	NyLPC_TiTcpSocket_pseek pseek;
+	NyLPC_TiTcpSocket_send send;
+	NyLPC_TiTcpSocket_close close;
+	NyLPC_TiTcpSocket_allocSendBuf allocSendBuf;
+	NyLPC_TiTcpSocket_releaseSendBuf releaseSendBuf;
+	NyLPC_TiTcpSocket_psend psend;
+	NyLPC_TiTcpSocket_connect connect;
+	NyLPC_TiTcpSocket_finalize finalize;
+};
+
+struct NyLPC_TiTcpSocket
+{
+	const struct NyLPC_TiTcpSocket_Interface* _interface;
+};
+
+
+#define NyLPC_iTcpSocket_getPeerAddr(i_inst)									((i_inst)->_interface->getpeeraddr((i_inst)))
+#define NyLPC_iTcpSocket_getPeerPort(i_inst)									((i_inst)->_interface->getpeerport((i_inst)))
+#define NyLPC_iTcpSocket_accept(i_inst,i_wait_in_msec)							((i_inst)->_interface->accept((i_inst),(i_wait_in_msec)))
+#define NyLPC_iTcpSocket_precv(i_inst,o_buf_ptr,i_wait_msec)					((i_inst)->_interface->precv((i_inst),(o_buf_ptr),(i_wait_msec)))
+#define NyLPC_iTcpSocket_pseek(i_inst,i_seek)									((i_inst)->_interface->pseek((i_inst),(i_seek)))
+#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)))
+#define NyLPC_iTcpSocket_close(i_inst,i_wait_in_msec)							((i_inst)->_interface->close((i_inst),(i_wait_in_msec)))
+#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)))
+#define NyLPC_iTcpSocket_releaseSendBuf(i_inst,i_buf_ptr)						((i_inst)->_interface->releaseSendBuf((i_inst),(i_buf_ptr)))
+#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)))
+#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)))
+#define NyLPC_iTcpSocket_finalize(i_inst)										((i_inst)->_interface->finalize((i_inst)))
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* NYLPC_ITCPSOCKET_H_ */
+