Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: MbedFileServer_1768MiniDK2 RedWireBridge IssueDebug_gcc MiMicRemoteMCU-for-Mbed ... more
Revision 110:257739f9b31e, committed 2015-03-15
- Comitter:
- nyatla
- Date:
- Sun Mar 15 09:33:38 2015 +0000
- Parent:
- 109:18f12ac01097
- Child:
- 111:f525c6e5e27b
- Commit message:
- 51d1c88c8a56d6295311cfd20aa197a9cd650b2d; ????; NetworkInterface???????
Changed in this revision
--- a/core/NyLPC_cFifoBuffer.c Wed Nov 19 14:45:17 2014 +0000
+++ b/core/NyLPC_cFifoBuffer.c Sun Mar 15 09:33:38 2015 +0000
@@ -49,6 +49,14 @@
memcpy(wp,i_data,i_data_len);
i_inst->len+=i_data_len;
}
+void* NyLPC_cFifoBuffer_prePush(NyLPC_TcFifoBuffer_t* i_inst,NyLPC_TUInt16 i_data_len)
+{
+ NyLPC_TUInt8* wp;
+ NyLPC_ArgAssert(NyLPC_cFifoBuffer_getSpace(i_inst)>=i_data_len);
+ wp=((NyLPC_TUInt8*)(i_inst->buf))+i_inst->len;
+ i_inst->len+=i_data_len;
+ return wp;
+}
/**
* See Header file.
--- a/core/NyLPC_cFifoBuffer.h Wed Nov 19 14:45:17 2014 +0000 +++ b/core/NyLPC_cFifoBuffer.h Sun Mar 15 09:33:38 2015 +0000 @@ -97,6 +97,11 @@ * */ void NyLPC_cFifoBuffer_push(NyLPC_TcFifoBuffer_t* i_inst,const void* i_data,NyLPC_TUInt16 i_data_len); +/** + * 先にメモリ領域を確保して、そのアドレスを返します。 + */ +void* NyLPC_cFifoBuffer_prePush(NyLPC_TcFifoBuffer_t* i_inst,NyLPC_TUInt16 i_data_len); + /** * この関数は、バッファの先頭からデータを削除します。
--- a/core/NyLPC_cMiMicEnv.c Wed Nov 19 14:45:17 2014 +0000
+++ b/core/NyLPC_cMiMicEnv.c Sun Mar 15 09:33:38 2015 +0000
@@ -1,7 +1,7 @@
#include "NyLPC_cMiMicEnv.h"
#include "NyLPC_netif.h"
-const static char* VERSION="MiMic/1.7.0";
+const static char* VERSION="MiMic/1.7.1";
#if NyLPC_MCU==NyLPC_MCU_LPC4088
const static char* MCU="LPC4088";
@@ -31,7 +31,7 @@
#if NyLPC_MCU==NyLPC_MCU_K64F
return PNAME_FRDM;
#else
- switch(*(NyLPC_cNetIf_getInterfaceInfo()->device_name)){
+ switch(*(NyLPC_cNet_getInterfaceInfo()->device_name)){
case 'L':
return PNAME_LPCXPRESSO;
case 'D':
@@ -41,7 +41,7 @@
}
#endif
case NyLPC_cMiMicEnv_ETHERNET_PHY:
- return NyLPC_cNetIf_getInterfaceInfo()->device_name;
+ return NyLPC_cNet_getInterfaceInfo()->device_name;
case NyLPC_cMiMicEnv_MCU_NAME:
return MCU;
default:
--- a/core/http/NyLPC_cHttpBasicBodyParser.c Wed Nov 19 14:45:17 2014 +0000
+++ b/core/http/NyLPC_cHttpBasicBodyParser.c Sun Mar 15 09:33:38 2015 +0000
@@ -155,7 +155,6 @@
}
}
return i_size;
- break;
case NyLPC_THttpMessgeHeader_TransferEncoding_NONE:
if(i_inst->_status!=NyLPC_TcHttpBasicBodyParser_ST_BODY){
NyLPC_OnErrorGoto(ERROR);
--- a/core/include/NyLPC_netif.h Wed Nov 19 14:45:17 2014 +0000
+++ b/core/include/NyLPC_netif.h Sun Mar 15 09:33:38 2015 +0000
@@ -36,7 +36,9 @@
#include "../netif/NyLPC_iTcpSocket.h"
#include "../netif/NyLPC_iUdpSocket.h"
#include "../netif/NyLPC_NetIf_ip_types.h"
-#include "../netif/NyLPC_cNetIf.h"
+#include "../netif/NyLPC_cNet.h"
+#include "../netif/NyLPC_iNetInterface.h"
+
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
@@ -48,4 +50,3 @@
#endif
-
--- a/core/net/httpcl/NyLPC_cHttpClient.c Wed Nov 19 14:45:17 2014 +0000
+++ b/core/net/httpcl/NyLPC_cHttpClient.c Sun Mar 15 09:33:38 2015 +0000
@@ -17,7 +17,7 @@
NyLPC_TBool NyLPC_cHttpClient_initialize(NyLPC_TcHttpClient_t* i_inst,void* i_rx_buf,NyLPC_TUInt16 i_rx_size)
{
- i_inst->_sock=NyLPC_cNetIf_createTcpSocketEx(NyLPC_TSocketType_TCP_NORMAL);
+ i_inst->_sock=NyLPC_cNet_createTcpSocketEx(NyLPC_TSocketType_TCP_NORMAL);
if(i_inst->_sock==NULL){
return NyLPC_TBool_FALSE;
}
--- a/core/net/httpd/NyLPC_cHttpd.c Wed Nov 19 14:45:17 2014 +0000
+++ b/core/net/httpd/NyLPC_cHttpd.c Sun Mar 15 09:33:38 2015 +0000
@@ -6,7 +6,7 @@
int i;
i_inst->_num_of_active_connection=0;
NyLPC_cMutex_initialize(&i_inst->_mutex);
- i_inst->_listener=NyLPC_cNetIf_createTcpListenerEx(i_port_number);
+ i_inst->_listener=NyLPC_cNet_createTcpListenerEx(i_port_number);
if(i_inst->_listener==NULL){
return NyLPC_TBool_FALSE;
}
--- a/core/net/httpd/NyLPC_cHttpdConnection.c Wed Nov 19 14:45:17 2014 +0000
+++ b/core/net/httpd/NyLPC_cHttpdConnection.c Sun Mar 15 09:33:38 2015 +0000
@@ -8,7 +8,7 @@
NyLPC_TBool NyLPC_cHttpdConnection_initialize(NyLPC_TcHttpdConnection_t* i_inst,NyLPC_TcHttpd_t* i_parent_httpd)
{
- i_inst->_socket=NyLPC_cNetIf_createTcpSocketEx(NyLPC_TSocketType_TCP_HTTP);
+ i_inst->_socket=NyLPC_cNet_createTcpSocketEx(NyLPC_TSocketType_TCP_HTTP);
if(i_inst->_socket==NULL){
return NyLPC_TBool_FALSE;
}
--- a/core/net/httpd/mod/NyLPC_cMocMiMicSetting.c Wed Nov 19 14:45:17 2014 +0000
+++ b/core/net/httpd/mod/NyLPC_cMocMiMicSetting.c Sun Mar 15 09:33:38 2015 +0000
@@ -7,7 +7,7 @@
*
* 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
+ * 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,
@@ -428,7 +428,7 @@
NyLPC_OnErrorGoto(Error);
}
//write current status
- netif_info=NyLPC_cNetIf_getInterfaceInfo();
+ netif_info=NyLPC_cNet_getInterfaceInfo();
currebt_cfg=(const NyLPC_TcNetConfig_t*)(netif_info->current_config);
if(!NyLPC_cHttpdConnection_sendResponseBodyF(i_connection,
"\"cur\":{"
--- a/core/net/mdns/NyLPC_cMDnsServer.c Wed Nov 19 14:45:17 2014 +0000
+++ b/core/net/mdns/NyLPC_cMDnsServer.c Sun Mar 15 09:33:38 2015 +0000
@@ -1098,7 +1098,7 @@
{
NyLPC_cStopwatch_initialize(&(i_inst->_periodic_sw));
NyLPC_cStopwatch_startExpire(&(i_inst->_periodic_sw),1000);
- i_inst->_socket=NyLPC_cNetIf_createUdpSocketEx(MDNS_MCAST_PORT,NyLPC_TSocketType_UDP_NOBUF);
+ i_inst->_socket=NyLPC_cNet_createUdpSocketEx(MDNS_MCAST_PORT,NyLPC_TSocketType_UDP_NOBUF);
i_inst->_socket->_tag=i_inst;
NyLPC_iUdpSocket_setOnRxHandler(i_inst->_socket,onPacket);
NyLPC_iUdpSocket_setOnPeriodicHandler(i_inst->_socket,onPeriodic);
--- a/core/net/upnp/NyLPC_cSsdpSocket.c Wed Nov 19 14:45:17 2014 +0000
+++ b/core/net/upnp/NyLPC_cSsdpSocket.c Sun Mar 15 09:33:38 2015 +0000
@@ -540,7 +540,7 @@
const struct NyLPC_TUPnPDevDescDevice* i_ref_dev_record,
NyLPC_TUInt16 i_server_port,const NyLPC_TChar* i_ref_location_path)
{
- i_inst->_socket=NyLPC_cNetIf_createUdpSocketEx(1900,NyLPC_TSocketType_UDP_NOBUF);
+ i_inst->_socket=NyLPC_cNet_createUdpSocketEx(1900,NyLPC_TSocketType_UDP_NOBUF);
i_inst->_socket->_tag=i_inst;
NyLPC_iUdpSocket_setOnRxHandler(i_inst->_socket,onPacket);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/core/netif/NyLPC_cNet.c Sun Mar 15 09:33:38 2015 +0000
@@ -0,0 +1,101 @@
+
+#include "NyLPC_cNet.h"
+#include "./mimicip/NyLPC_cMiMicIpNetIf_protected.h"
+#include "dhcp/NyLPC_cDhcpClient.h"
+#include "apipa/NyLPC_cApipa.h"
+
+
+/**
+ * 唯一のネットワークインタフェイス
+ */
+const static struct NyLPC_TiNetInterface_Interface* netif;
+
+
+
+
+
+void NyLPC_cNet_initialize(const struct NyLPC_TiNetInterface_Interface* i_netif)
+{
+ NyLPC_Assert(netif==NULL);
+ netif=i_netif;
+}
+
+void NyLPC_cNet_start(const NyLPC_TcIPv4Config_t* i_ref_config)
+{
+ netif->start(i_ref_config);
+ return;
+}
+
+void NyLPC_cNet_stop(void)
+{
+ netif->stop();
+ return;
+}
+
+
+
+/**
+ * 指定したIPアドレスを要求するARPリクエストを発行します。
+ */
+void NyLPC_cNet_sendArpRequest(const struct NyLPC_TIPv4Addr* i_addr)
+{
+ netif->sendarprequest(i_addr);
+}
+/**
+ * ARPテーブルに指定したIPがあるかを返します。
+ */
+NyLPC_TBool NyLPC_cNet_hasArpInfo(const struct NyLPC_TIPv4Addr* i_addr)
+{
+ return netif->hasarpinfo(i_addr);
+}
+
+NyLPC_TBool NyLPC_cNet_isInitService(void)
+{
+ return netif->isinitservice();
+}
+
+NyLPC_TiTcpSocket_t* NyLPC_cNet_createTcpSocketEx(NyLPC_TSocketType i_socktype)
+{
+ return netif->createTcpSocketEx(i_socktype);
+}
+NyLPC_TiUdpSocket_t* NyLPC_cNet_createUdpSocketEx(NyLPC_TUInt16 i_port,NyLPC_TSocketType i_socktype)
+{
+ return netif->createUdpSocetEx(i_port,i_socktype);
+}
+NyLPC_TiTcpListener_t* NyLPC_cNet_createTcpListenerEx(NyLPC_TUInt16 i_port)
+{
+ return netif->createTcpListener(i_port);
+}
+
+const struct NyLPC_TNetInterfaceInfo* NyLPC_cNet_getInterfaceInfo(void)
+{
+ return netif->getinterfaceinfo();
+}
+
+
+
+NyLPC_TBool NyLPC_cNet_requestAddrDhcp(NyLPC_TcIPv4Config_t* i_cfg,NyLPC_TInt16 i_repeat)
+{
+ NyLPC_TBool ret;
+ NyLPC_TcDhcpClient_t sock;
+ //netを開始
+ NyLPC_cDhcpClient_initialize(&sock);
+ ret=NyLPC_cDhcpClient_requestAddr(&sock,i_cfg,i_repeat);
+ NyLPC_cDhcpClient_finalize(&sock);
+ return ret;
+}
+
+NyLPC_TBool NyLPC_cNet_requestAddrApipa(NyLPC_TcIPv4Config_t* i_cfg,NyLPC_TInt16 i_repeat)
+{
+ NyLPC_TBool ret;
+ NyLPC_TcApipa_t sock;
+ //netを開始
+ NyLPC_cApipa_initialize(&sock);
+ ret=NyLPC_cApipa_requestAddr(&sock,i_cfg,i_repeat);
+ NyLPC_cApipa_finalize(&sock);
+ return ret;
+}
+
+
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/core/netif/NyLPC_cNet.h Sun Mar 15 09:33:38 2015 +0000
@@ -0,0 +1,69 @@
+#ifndef NYLPC_CNET_H_
+#define NYLPC_CNET_H_
+#include "NyLPC_stdlib.h"
+#include "NyLPC_cIPv4Config.h"
+#include "NyLPC_iTcpListener.h"
+#include "NyLPC_iTcpSocket.h"
+#include "NyLPC_iUdpSocket.h"
+#include "NyLPC_iNetInterface.h"
+#include "NyLPC_NetIf_ip_types.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+typedef struct NyLPC_TcNet NyLPC_TcNet_t;
+
+void NyLPC_cNet_initialize(const struct NyLPC_TiNetInterface_Interface* i_netif);
+#define NyLPC_cNet_finalize()
+
+NyLPC_TiTcpSocket_t* NyLPC_cNet_createTcpSocketEx(NyLPC_TSocketType i_socktype);
+NyLPC_TiUdpSocket_t* NyLPC_cNet_createUdpSocketEx(NyLPC_TUInt16 i_port,NyLPC_TSocketType i_socktype);
+NyLPC_TiTcpListener_t* NyLPC_cNet_createTcpListenerEx(NyLPC_TUInt16 i_port);
+
+/**
+ * 指定したIPアドレスを要求するARPリクエストを発行します。
+ */
+void NyLPC_cNet_sendArpRequest(const struct NyLPC_TIPv4Addr* i_addr);
+
+/**
+ * ARPテーブルに指定したIPがあるかを返します。
+ */
+NyLPC_TBool NyLPC_cNet_hasArpInfo(const struct NyLPC_TIPv4Addr* i_addr);
+
+void NyLPC_cNet_start(const NyLPC_TcIPv4Config_t* i_ref_config);
+void NyLPC_cNet_stop(void);
+NyLPC_TBool NyLPC_cNet_isInitService(void);
+
+/**
+ * NyLPC_TcIPv4Config_tをDHCPで更新します。
+ * この関数をコールする時は、サービスは停止中でなければなりません。
+ * @param i_cfg
+ * 更新するi_cfg構造体。
+ * emac,default_mssは設定済である必要があります。他のフィールド値は不定で構いません。
+ * 更新されるフィールドは、ip,netmast,default_rootの3つです。
+ * @return
+ * 更新に成功した場合TRUE
+ */
+NyLPC_TBool NyLPC_cNet_requestAddrDhcp(NyLPC_TcIPv4Config_t* i_cfg,NyLPC_TInt16 i_repeat);
+/**
+ * NyLPC_TcIPv4Config_tをAPIPAで更新します。
+ * この関数をコールする時は、サービスは停止中でなければなりません。
+ * @param i_cfg
+ * 更新するi_cfg構造体。
+ * emac,default_mssは設定済である必要があります。他のフィールド値は不定で構いません。
+ * 更新されるフィールドは、ip,netmast,default_rootの3つです。
+ * @return
+ * 更新に成功した場合TRUE
+ */
+NyLPC_TBool NyLPC_cNet_requestAddrApipa(NyLPC_TcIPv4Config_t* i_cfg,NyLPC_TInt16 i_repeat);
+
+const struct NyLPC_TNetInterfaceInfo* NyLPC_cNet_getInterfaceInfo(void);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif
+
+
--- a/core/netif/NyLPC_cNetIf.c Wed Nov 19 14:45:17 2014 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,102 +0,0 @@
-
-#include "NyLPC_cNetIf.h"
-#include "./mimicip/NyLPC_cMiMicIpNetIf_protected.h"
-#include "dhcp/NyLPC_cDhcpClient.h"
-#include "apipa/NyLPC_cApipa.h"
-
-
-/**
- * 唯一のネットワークインタフェイス
- */
-const static struct NyLPC_TiNetInterface_Interface* netif;
-
-
-
-
-
-void NyLPC_cNetIf_initialize(void)
-{
- if(netif==NULL){
- //ここでネットワークインタフェイスを切り替えてくれ。
- netif=NyLPC_cMiMicIpNetIf_getNetInterface();
- }
-}
-
-void NyLPC_cNetIf_start(const NyLPC_TcIPv4Config_t* i_ref_config)
-{
- netif->start(i_ref_config);
- return;
-}
-
-void NyLPC_cNetIf_stop(void)
-{
- netif->stop();
- return;
-}
-
-
-
-/**
- * 指定したIPアドレスを要求するARPリクエストを発行します。
- */
-void NyLPC_cNetIf_sendArpRequest(const struct NyLPC_TIPv4Addr* i_addr)
-{
- netif->sendarprequest(i_addr);
-}
-/**
- * ARPテーブルに指定したIPがあるかを返します。
- */
-NyLPC_TBool NyLPC_cNetIf_hasArpInfo(const struct NyLPC_TIPv4Addr* i_addr)
-{
- return netif->hasarpinfo(i_addr);
-}
-
-NyLPC_TBool NyLPC_cNetIf_isInitService(void)
-{
- return netif->isinitservice();
-}
-
-NyLPC_TiTcpSocket_t* NyLPC_cNetIf_createTcpSocketEx(NyLPC_TSocketType i_socktype)
-{
- return netif->createTcpSocketEx(i_socktype);
-}
-NyLPC_TiUdpSocket_t* NyLPC_cNetIf_createUdpSocketEx(NyLPC_TUInt16 i_port,NyLPC_TSocketType i_socktype)
-{
- return netif->createUdpSocetEx(i_port,i_socktype);
-}
-NyLPC_TiTcpListener_t* NyLPC_cNetIf_createTcpListenerEx(NyLPC_TUInt16 i_port)
-{
- return netif->createTcpListener(i_port);
-}
-
-const struct NyLPC_TNetInterfaceInfo* NyLPC_cNetIf_getInterfaceInfo(void)
-{
- return netif->getinterfaceinfo();
-}
-
-
-
-NyLPC_TBool NyLPC_cNetIf_requestAddrDhcp(NyLPC_TcIPv4Config_t* i_cfg,NyLPC_TInt16 i_repeat)
-{
- NyLPC_TBool ret;
- NyLPC_TcDhcpClient_t sock;
- //netを開始
- NyLPC_cDhcpClient_initialize(&sock);
- ret=NyLPC_cDhcpClient_requestAddr(&sock,i_cfg,i_repeat);
- NyLPC_cDhcpClient_finalize(&sock);
- return ret;
-}
-
-NyLPC_TBool NyLPC_cNetIf_requestAddrApipa(NyLPC_TcIPv4Config_t* i_cfg,NyLPC_TInt16 i_repeat)
-{
- NyLPC_TBool ret;
- NyLPC_TcApipa_t sock;
- //netを開始
- NyLPC_cApipa_initialize(&sock);
- ret=NyLPC_cApipa_requestAddr(&sock,i_cfg,i_repeat);
- NyLPC_cApipa_finalize(&sock);
- return ret;
-}
-
-
-
--- a/core/netif/NyLPC_cNetIf.h Wed Nov 19 14:45:17 2014 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,68 +0,0 @@
-#ifndef NYLPC_CNETIF_H_
-#define NYLPC_CNETIF_H_
-#include "NyLPC_stdlib.h"
-#include "NyLPC_cIPv4Config.h"
-#include "NyLPC_iTcpListener.h"
-#include "NyLPC_iTcpSocket.h"
-#include "NyLPC_iUdpSocket.h"
-#include "NyLPC_iNetInterface.h"
-#include "NyLPC_NetIf_ip_types.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-typedef struct NyLPC_TcNetIf NyLPC_TcNetIf_t;
-
-void NyLPC_cNetIf_initialize(void);
-#define NyLPC_cNetIf_finalize()
-
-NyLPC_TiTcpSocket_t* NyLPC_cNetIf_createTcpSocketEx(NyLPC_TSocketType i_socktype);
-NyLPC_TiUdpSocket_t* NyLPC_cNetIf_createUdpSocketEx(NyLPC_TUInt16 i_port,NyLPC_TSocketType i_socktype);
-NyLPC_TiTcpListener_t* NyLPC_cNetIf_createTcpListenerEx(NyLPC_TUInt16 i_port);
-
-/**
- * 指定したIPアドレスを要求するARPリクエストを発行します。
- */
-void NyLPC_cNetIf_sendArpRequest(const struct NyLPC_TIPv4Addr* i_addr);
-
-/**
- * ARPテーブルに指定したIPがあるかを返します。
- */
-NyLPC_TBool NyLPC_cNetIf_hasArpInfo(const struct NyLPC_TIPv4Addr* i_addr);
-
-void NyLPC_cNetIf_start(const NyLPC_TcIPv4Config_t* i_ref_config);
-void NyLPC_cNetIf_stop(void);
-NyLPC_TBool NyLPC_cNetIf_isInitService(void);
-
-/**
- * NyLPC_TcIPv4Config_tをDHCPで更新します。
- * この関数をコールする時は、サービスは停止中でなければなりません。
- * @param i_cfg
- * 更新するi_cfg構造体。
- * emac,default_mssは設定済である必要があります。他のフィールド値は不定で構いません。
- * 更新されるフィールドは、ip,netmast,default_rootの3つです。
- * @return
- * 更新に成功した場合TRUE
- */
-NyLPC_TBool NyLPC_cNetIf_requestAddrDhcp(NyLPC_TcIPv4Config_t* i_cfg,NyLPC_TInt16 i_repeat);
-/**
- * NyLPC_TcIPv4Config_tをAPIPAで更新します。
- * この関数をコールする時は、サービスは停止中でなければなりません。
- * @param i_cfg
- * 更新するi_cfg構造体。
- * emac,default_mssは設定済である必要があります。他のフィールド値は不定で構いません。
- * 更新されるフィールドは、ip,netmast,default_rootの3つです。
- * @return
- * 更新に成功した場合TRUE
- */
-NyLPC_TBool NyLPC_cNetIf_requestAddrApipa(NyLPC_TcIPv4Config_t* i_cfg,NyLPC_TInt16 i_repeat);
-
-const struct NyLPC_TNetInterfaceInfo* NyLPC_cNetIf_getInterfaceInfo(void);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif
-
--- a/core/netif/NyLPC_iUdpSocket.h Wed Nov 19 14:45:17 2014 +0000 +++ b/core/netif/NyLPC_iUdpSocket.h Sun Mar 15 09:33:38 2015 +0000 @@ -144,7 +144,7 @@ * ソケットのローカルIPのアドレスを返す。 * 値はuipが動作中のみ有効。 */ -typedef struct NyLPC_TIPv4Addr* (*NyLPC_TiUdpSocket_getSockIP)(const NyLPC_TiUdpSocket_t* i_inst); +typedef const struct NyLPC_TIPv4Addr* (*NyLPC_TiUdpSocket_getSockIP)(const NyLPC_TiUdpSocket_t* i_inst); typedef void (*NyLPC_TiUdpSocket_finalize)(NyLPC_TiUdpSocket_t* i_inst); @@ -197,4 +197,3 @@ #endif /* __cplusplus */ #endif /* NYLPC_IIUDPSOCKET_H_ */ -
--- a/core/netif/apipa/NyLPC_cApipa.c Wed Nov 19 14:45:17 2014 +0000
+++ b/core/netif/apipa/NyLPC_cApipa.c Sun Mar 15 09:33:38 2015 +0000
@@ -1,5 +1,5 @@
#include "NyLPC_cApipa.h"
-#include "../NyLPC_cNetIf.h"
+#include "../NyLPC_cNet.h"
#include <stdio.h>
#include <string.h>
@@ -14,7 +14,7 @@
NyLPC_cStopwatch_startExpire(&sw,i_wait_in_ms);
while(!NyLPC_cStopwatch_isExpired(&sw)){
NyLPC_cThread_yield();
- if(NyLPC_cNetIf_hasArpInfo(i_ip)){
+ if(NyLPC_cNet_hasArpInfo(i_ip)){
return NyLPC_TBool_TRUE;
}
}
@@ -64,26 +64,26 @@
updateSeed(i_inst);
makeIP(i_inst,&caip);
//startInterface
- NyLPC_cNetIf_start(&cfg);
- NyLPC_cNetIf_sendArpRequest(&caip);
+ NyLPC_cNet_start(&cfg);
+ NyLPC_cNet_sendArpRequest(&caip);
//テーブル更新待ち
if(waitForArpResponse(&caip,512+(i_inst->_seed % 256))){
- NyLPC_cNetIf_stop();
+ NyLPC_cNet_stop();
continue;
}
- NyLPC_cNetIf_stop();
+ NyLPC_cNet_stop();
//IPのコンフリクトテスト
NyLPC_cIPv4Config_setIp(&cfg,&caip,&NyLPC_TIPv4Addr_APIPA_MASK);
- NyLPC_cNetIf_start(&cfg);
+ NyLPC_cNet_start(&cfg);
//!ARP送信
- NyLPC_cNetIf_sendArpRequest(&caip);
+ NyLPC_cNet_sendArpRequest(&caip);
if(waitForArpResponse(&caip,512+(256-(i_inst->_seed % 256)))){
//応答があったらエラー
- NyLPC_cNetIf_stop();
+ NyLPC_cNet_stop();
continue;
}
//OK
- NyLPC_cNetIf_stop();
+ NyLPC_cNet_stop();
NyLPC_cIPv4Config_setIp(i_cfg,&cfg.ip_addr,&cfg.netmask);
return NyLPC_TBool_TRUE;
}
--- a/core/netif/dhcp/NyLPC_cDhcpClient.c Wed Nov 19 14:45:17 2014 +0000
+++ b/core/netif/dhcp/NyLPC_cDhcpClient.c Sun Mar 15 09:33:38 2015 +0000
@@ -24,7 +24,7 @@
*
*********************************************************************************/
#include "NyLPC_cDhcpClient.h"
-#include "../NyLPC_cNetIf.h"
+#include "../NyLPC_cNet.h"
#include <stdio.h>
#include <string.h>
@@ -200,7 +200,7 @@
*/
NyLPC_TBool NyLPC_cDhcpClient_initialize(NyLPC_TcDhcpClient_t* i_inst)
{
- i_inst->_socket=NyLPC_cNetIf_createUdpSocketEx(68,NyLPC_TSocketType_UDP_NOBUF);
+ i_inst->_socket=NyLPC_cNet_createUdpSocketEx(68,NyLPC_TSocketType_UDP_NOBUF);
if(i_inst->_socket==NULL){
return NyLPC_TBool_FALSE;
}
@@ -294,14 +294,14 @@
NyLPC_cIPv4Config_setIp(&c2,&NyLPC_TIPv4Addr_ZERO,&NyLPC_TIPv4Addr_ZERO);
NyLPC_cIPv4Config_setDefaultRoute(&c2,&NyLPC_TIPv4Addr_ZERO);
//netを開始
- NyLPC_cNetIf_start(&c2);
+ NyLPC_cNet_start(&c2);
for(i=i_repeat-1;i>=0;i--){
ret=NyLPC_cDhcpClient_dhcpRequest(i_inst,i_cfg);
if(ret){
break;
}
}
- NyLPC_cNetIf_stop();
+ NyLPC_cNet_stop();
NyLPC_cIPv4Config_finalize(&c2);
return ret;
}
--- a/core/netif/mimicip/NyLPC_cIPv4.c Wed Nov 19 14:45:17 2014 +0000
+++ b/core/netif/mimicip/NyLPC_cIPv4.c Sun Mar 15 09:33:38 2015 +0000
@@ -61,225 +61,10 @@
#include "NyLPC_cMiMicIpUdpSocket_protected.h"
#include "NyLPC_cIPv4IComp_protected.h"
#include "NyLPC_cMiMicIpNetIf_protected.h"
-#include "NyLPC_cMiMicIpBaseSocket.h"
-/****************************************************
- * Socketテーブルに関する宣言
- ***************************************************/
-#define cSocketTbl_initialize(i_inst,buf) NyLPC_cPtrTbl_initialize(i_inst,buf,NyLPC_cIPv4_MAX_SOCKET)
-#define cSocketTbl_finalize(i_inst)
-
-/**
- * 条件に一致する、アクティブなTCPソケットオブジェクトを取得します。
- * この関数は、ローカルIPが一致していると仮定して検索をします。
- * @param i_rip
- * リモートIPアドレスを指定します。
- */
-static NyLPC_TcMiMicIpTcpSocket_t* cSocketTbl_getMatchTcpSocket(
- NyLPC_TcPtrTbl_t* i_inst,
- NyLPC_TUInt16 i_lport,
- struct NyLPC_TIPv4Addr i_rip,
- NyLPC_TUInt16 i_rport)
-{
- NyLPC_TcMiMicIpBaseSocket_t** p=(NyLPC_TcMiMicIpBaseSocket_t**)(i_inst->buf);
- NyLPC_TcMiMicIpTcpSocket_t* tp;
- int i;
- //一致するポートを検索
- for(i=i_inst->size-1;i>=0;i--){
- if(p[i]==NULL || p[i]->_typeid!=NyLPC_TcMiMicIpBaseSocket_TYPEID_TCP_SOCK){
- continue;
- }
- tp=(NyLPC_TcMiMicIpTcpSocket_t*)p[i];
- if(tp->tcpstateflags==UIP_CLOSED){
- continue;
- }
- //パラメータの一致チェック
- if(i_lport!=tp->uip_connr.lport || i_rport!= tp->uip_connr.rport || i_rip.v!=tp->uip_connr.ripaddr.v)
- {
- continue;
- }
- return tp;
- }
- return NULL;
-}
-static NyLPC_TcMiMicIpUdpSocket_t* cSocketTbl_getMatchUdpSocket(
- NyLPC_TcPtrTbl_t* i_inst,
- NyLPC_TUInt16 i_lport)
-{
- NyLPC_TcMiMicIpBaseSocket_t** p=(NyLPC_TcMiMicIpBaseSocket_t**)(i_inst->buf);
- NyLPC_TcMiMicIpUdpSocket_t* tp;
- int i;
- //一致するポートを検索
- for(i=i_inst->size-1;i>=0;i--){
- if(p[i]==NULL || p[i]->_typeid!=NyLPC_TcMiMicIpBaseSocket_TYPEID_UDP_SOCK){
- continue;
- }
- tp=(NyLPC_TcMiMicIpUdpSocket_t*)p[i];
- //パラメータの一致チェック
- if(i_lport==tp->uip_udp_conn.lport){
- //unicast
- return tp;
- }
- }
- return NULL;
-}
-static NyLPC_TcMiMicIpUdpSocket_t* cSocketTbl_getMatchMulticastUdpSocket(
- NyLPC_TcPtrTbl_t* i_inst,
- const struct NyLPC_TIPv4Addr* i_mcast_ip,
- NyLPC_TUInt16 i_lport)
-{
- NyLPC_TcMiMicIpBaseSocket_t** p=(NyLPC_TcMiMicIpBaseSocket_t**)(i_inst->buf);
- NyLPC_TcMiMicIpUdpSocket_t* tp;
- int i;
- //一致するポートを検索
- for(i=i_inst->size-1;i>=0;i--){
- if(p[i]==NULL || p[i]->_typeid!=NyLPC_TcMiMicIpBaseSocket_TYPEID_UDP_SOCK){
- continue;
- }
- tp=(NyLPC_TcMiMicIpUdpSocket_t*)p[i];
- //パラメータの一致チェック
- if(i_lport!=tp->uip_udp_conn.lport || (!NyLPC_TIPv4Addr_isEqual(i_mcast_ip,&(tp->uip_udp_conn.mcastaddr))))
- {
- continue;
- }
- return tp;
- }
- return NULL;
-}
-
-/**
- * i_port番号に一致するリスナを返します。
- */
-static NyLPC_TcMiMicIpTcpListener_t* cSocketTbl_getListenerByPeerPort(NyLPC_TcPtrTbl_t* i_inst,NyLPC_TUInt16 i_port)
-{
- NyLPC_TcMiMicIpBaseSocket_t** p=(NyLPC_TcMiMicIpBaseSocket_t**)(i_inst->buf);
- NyLPC_TcMiMicIpTcpListener_t* lp;
- int i;
- //一致するポートを検索して、acceptをコールする。
- for(i=i_inst->size-1;i>=0;i--){
- if(p[i]==NULL || p[i]->_typeid!=NyLPC_TcMiMicIpBaseSocket_TYPEID_TCP_LISTENER){
- continue;
- }
- lp=(NyLPC_TcMiMicIpTcpListener_t*)p[i];
- if(lp->_port!=i_port){
- continue;
- }
- return lp;
- }
- return NULL;
-}
-/**
- * 指定番号のTCPポートが未使用かを返す。
- * @return
- * i_lport番のポートが未使用であればTRUE
- */
-static NyLPC_TBool cSocketTbl_isClosedTcpPort(
- NyLPC_TcPtrTbl_t* i_inst,
- NyLPC_TUInt16 i_lport)
-{
- NyLPC_TcMiMicIpBaseSocket_t** p=(NyLPC_TcMiMicIpBaseSocket_t**)(i_inst->buf);
- NyLPC_TcMiMicIpTcpSocket_t* tp;
- int i;
- //一致するポートを検索
- for(i=i_inst->size-1;i>=0;i--){
- if(p[i]==NULL){
- continue;
- }
- if(p[i]->_typeid!=NyLPC_TcMiMicIpBaseSocket_TYPEID_TCP_SOCK){
- tp=((NyLPC_TcMiMicIpTcpSocket_t*)p[i]);
- //TCPソケット && !クローズ && ポート一致なら使用中
- if((tp->tcpstateflags!=UIP_CLOSED) && tp->uip_connr.lport==i_lport){
- return NyLPC_TBool_FALSE;
- }
- }
- if(p[i]->_typeid!=NyLPC_TcMiMicIpBaseSocket_TYPEID_TCP_LISTENER){
- //Listenerソケット && ポート一致なら使用中
- if(((NyLPC_TcMiMicIpTcpListener_t*)p[i])->_port==i_lport){
- return NyLPC_TBool_FALSE;
- }
- }
- }
- //未使用
- return NyLPC_TBool_TRUE;
-}
-/**
- * テーブルにある有効なソケットのperiodicをすべて呼び出します。
- */
-static void cSocketTbl_callPeriodic(
- NyLPC_TcPtrTbl_t* i_inst)
-{
- NyLPC_TcMiMicIpBaseSocket_t** p=(NyLPC_TcMiMicIpBaseSocket_t**)(i_inst->buf);
- int i;
- for(i=i_inst->size-1;i>=0;i--){
- if(p[i]==NULL){
- continue;
- }
- switch(p[i]->_typeid){
- case NyLPC_TcMiMicIpBaseSocket_TYPEID_TCP_SOCK:
- //downcast!
- NyLPC_cMiMicIpTcpSocket_periodic((NyLPC_TcMiMicIpTcpSocket_t*)(p[i]));
- break;
- case NyLPC_TcMiMicIpBaseSocket_TYPEID_UDP_SOCK:
- NyLPC_cMiMicIpUdpSocket_periodic((NyLPC_TcMiMicIpUdpSocket_t*)(p[i]));
- break;
- default:
- continue;
- }
- }
-}
-
-/**
- * テーブルにある有効なソケットのstartを全て呼び出します。
- */
-static void cSocketTbl_callSocketStart(
- NyLPC_TcPtrTbl_t* i_inst,
- const NyLPC_TcIPv4Config_t* i_cfg)
-{
- NyLPC_TcMiMicIpBaseSocket_t** p=(NyLPC_TcMiMicIpBaseSocket_t**)(i_inst->buf);
- int i;
- for(i=i_inst->size-1;i>=0;i--){
- if(p[i]==NULL){
- continue;
- }
- switch(p[i]->_typeid){
- case NyLPC_TcMiMicIpBaseSocket_TYPEID_UDP_SOCK:
- NyLPC_cMiMicIpUdpSocket_startService((NyLPC_TcMiMicIpUdpSocket_t*)(p[i]),i_cfg);
- break;
- case NyLPC_TcMiMicIpBaseSocket_TYPEID_TCP_SOCK:
- NyLPC_cMiMicIpTcpSocket_startService((NyLPC_TcMiMicIpTcpSocket_t*)(p[i]),i_cfg);
- break;
- default:
- continue;
- }
- }
-}
-/**
- * テーブルにある有効なソケットのstartを全て呼び出します。
- */
-static void cSocketTbl_callSocketStop(
- NyLPC_TcPtrTbl_t* i_inst)
-{
- NyLPC_TcMiMicIpBaseSocket_t** p=(NyLPC_TcMiMicIpBaseSocket_t**)(i_inst->buf);
- int i;
- for(i=i_inst->size-1;i>=0;i--){
- if(p[i]==NULL){
- continue;
- }
- switch(p[i]->_typeid){
- case NyLPC_TcMiMicIpBaseSocket_TYPEID_UDP_SOCK:
- NyLPC_cMiMicIpUdpSocket_stopService((NyLPC_TcMiMicIpUdpSocket_t*)(p[i]));
- break;
- case NyLPC_TcMiMicIpBaseSocket_TYPEID_TCP_SOCK:
- NyLPC_cMiMicIpTcpSocket_stopService((NyLPC_TcMiMicIpTcpSocket_t*)(p[i]));
- break;
- default:
- continue;
- }
- }
-}
/****************************************************
* NyLPC_cIPv4
@@ -305,8 +90,6 @@
{
//IP制御パケットの為に40バイト以上のシステムTXメモリが必要。
NyLPC_ArgAssert(NyLPC_cMiMicIpNetIf_SYS_TX_BUF_SIZE>40);
- //内部テーブルの初期化
- cSocketTbl_initialize(&(i_inst->_socket_tbl),(void**)(i_inst->_socket_array_buf));
//instanceの初期化
NyLPC_cMutex_initialize(&(i_inst->_sock_mutex));
NyLPC_cMutex_initialize(&(i_inst->_listener_mutex));
@@ -321,7 +104,6 @@
void NyLPC_cIPv4_finalize(
NyLPC_TcIPv4_t* i_inst)
{
- cSocketTbl_finalize(&(i_inst->_socket_tbl));
NyLPC_cMutex_finalize(&(i_inst->_sock_mutex));
NyLPC_cMutex_finalize(&(i_inst->_listener_mutex));
return;
@@ -338,7 +120,7 @@
//リストの初期化、ここでするべき?しないべき?
i_inst->_ref_config=i_ref_configlation;
//configulationのアップデートを登録されてるソケットに通知
- cSocketTbl_callSocketStart(&(i_inst->_socket_tbl),i_ref_configlation);
+ NyLPC_cMiMicIpNetIf_callSocketStart(i_ref_configlation);
return;
}
@@ -348,39 +130,11 @@
void NyLPC_cIPv4_stop(
NyLPC_TcIPv4_t* i_inst)
{
- cSocketTbl_callSocketStop(&(i_inst->_socket_tbl));
+ NyLPC_cMiMicIpNetIf_callSocketStop();
i_inst->_ref_config=NULL;
return;
}
-/**
- * See header file.
- */
-NyLPC_TBool NyLPC_cIPv4_addSocket(
- NyLPC_TcIPv4_t* i_inst,
- NyLPC_TcMiMicIpBaseSocket_t* i_sock)
-{
- //当面、stop中しか成功しない。
- NyLPC_Assert(!NyLPC_cMiMicIpNetIf_isRun());
- return NyLPC_cPtrTbl_add(&(i_inst->_socket_tbl),i_sock)>=0;
-}
-
-/**
- * See header file.
- */
-NyLPC_TBool NyLPC_cIPv4_removeSocket(
- NyLPC_TcIPv4_t* i_inst,
- NyLPC_TcMiMicIpBaseSocket_t* i_sock)
-{
- NyLPC_TInt16 i;
- NyLPC_Assert(!NyLPC_cMiMicIpNetIf_isRun());
- i=NyLPC_cPtrTbl_getIndex(&(i_inst->_socket_tbl),i_sock);
- if(i>=0){
- NyLPC_cPtrTbl_remove(&(i_inst->_socket_tbl),i);
- return NyLPC_TBool_TRUE;
- }
- return NyLPC_TBool_FALSE;
-}
#define IS_START(i_inst) ((i_inst)->_ref_config!=NULL)
@@ -390,7 +144,7 @@
*/
void NyLPC_cIPv4_periodec(NyLPC_TcIPv4_t* i_inst)
{
- cSocketTbl_callPeriodic(&(i_inst->_socket_tbl));
+ NyLPC_cMiMicIpNetIf_callPeriodic();
}
@@ -440,7 +194,7 @@
for(i=0;i<0x0fff;i--){
i_inst->tcp_port_counter=(i_inst->tcp_port_counter+1)%0x0fff;
n=i_inst->tcp_port_counter+49152;
- if(cSocketTbl_isClosedTcpPort(&i_inst->_socket_tbl,n))
+ if(NyLPC_cMiMicIpNetIf_isClosedTcpPort(n))
{
return n;
}
@@ -476,20 +230,15 @@
goto DROP;
}
//アクティブなTCPソケットを探す。
- sock=cSocketTbl_getMatchTcpSocket(&(i_inst->_socket_tbl),i_ipp->payload.tcp->destport,i_ipp->header->srcipaddr,i_ipp->payload.tcp->srcport);
+ sock=NyLPC_cMiMicIpNetIf_getMatchTcpSocket(i_ipp->payload.tcp->destport,i_ipp->header->srcipaddr,i_ipp->payload.tcp->srcport);
if(sock!=NULL)
{
//既存の接続を処理
return NyLPC_cMiMicIpTcpSocket_parseRx(sock,i_ipp);
}
- //未知の接続
- if(!NyLPC_cPtrTbl_hasEmpty(&(i_inst->_socket_tbl))){
- //ソケットテーブルが不十分。RST送信
- return NyLPC_cMiMicIpTcpSocket_allocTcpReverseRstAck(i_ipp);
- }
//このポートに対応したListenerを得る。
- listener=cSocketTbl_getListenerByPeerPort(&(i_inst->_socket_tbl),i_ipp->payload.tcp->destport);
+ listener=NyLPC_cMiMicIpNetIf_getListenerByPeerPort(i_ipp->payload.tcp->destport);
if(listener==NULL){
//Listen対象ではない。RST送信
return NyLPC_cMiMicIpTcpSocket_allocTcpReverseRstAck(i_ipp);
@@ -510,15 +259,15 @@
NyLPC_TcMiMicIpUdpSocket_t* sock=NULL;
if(!NyLPC_TIPv4Addr_isEqual(&(i_ipp->header->destipaddr),&(i_inst->_ref_config->ip_addr)))
{
- sock=cSocketTbl_getMatchUdpSocket(&(i_inst->_socket_tbl),i_ipp->payload.udp->destport);
+ sock=NyLPC_cMiMicIpNetIf_getMatchUdpSocket(i_ipp->payload.udp->destport);
}else{
if(NyLPC_TIPv4Addr_isEqualWithMask(&(i_ipp->header->destipaddr),&NyLPC_TIPv4Addr_MULTICAST,&NyLPC_TIPv4Addr_MULTICAST_MASK)){
//MultiCast?
//マルチキャストに参加している&&portの一致するソケットを検索
- sock=cSocketTbl_getMatchMulticastUdpSocket(&(i_inst->_socket_tbl),&(i_ipp->header->destipaddr),i_ipp->payload.udp->destport);
+ sock=NyLPC_cMiMicIpNetIf_getMatchMulticastUdpSocket(&(i_ipp->header->destipaddr),i_ipp->payload.udp->destport);
}else if(!NyLPC_TIPv4Addr_isEqual(&(i_ipp->header->destipaddr),&NyLPC_TIPv4Addr_BROADCAST)){
//Broadcast?
- sock=cSocketTbl_getMatchUdpSocket(&(i_inst->_socket_tbl),i_ipp->payload.udp->destport);
+ sock=NyLPC_cMiMicIpNetIf_getMatchUdpSocket(i_ipp->payload.udp->destport);
}
}
if(sock==NULL)
@@ -538,4 +287,3 @@
}
-
--- a/core/netif/mimicip/NyLPC_cIPv4.h Wed Nov 19 14:45:17 2014 +0000
+++ b/core/netif/mimicip/NyLPC_cIPv4.h Sun Mar 15 09:33:38 2015 +0000
@@ -107,10 +107,6 @@
NyLPC_TcMutex_t _sock_mutex;
/** リスナリソースの保護用。コールバック関数から呼び出されるソケット内部のリソース保護に使用する共通MUTEX*/
NyLPC_TcMutex_t _listener_mutex;
- /** NyLPC_cTcpSocketを管理するポインタリストです。*/
- NyLPC_TcPtrTbl_t _socket_tbl;
- /** _socket_tblが使用するメモリ領域です。*/
- NyLPC_TcMiMicIpBaseSocket_t* _socket_array_buf[NyLPC_cIPv4_MAX_SOCKET];
/** 0-0xfffまでを巡回するカウンタ*/
NyLPC_TUInt16 tcp_port_counter;
};
@@ -156,34 +152,6 @@
NyLPC_TcIPv4_t* i_inst);
/**
- * この関数は、NyLPC_TcBaseSocketオブジェクトを管理リストへ追加します。
- * @param i_inst
- * 操作するインスタンス。
- * @param i_sock
- * 追加するインスタンスのポインタ
- * @return
- * 追加が成功するとTRUEを返します。
- */
-NyLPC_TBool NyLPC_cIPv4_addSocket(
- NyLPC_TcIPv4_t* i_inst,
- NyLPC_TcMiMicIpBaseSocket_t* i_sock);
-
-/**
- * この関数は、NyLPC_cTcpSocketオブジェクトを管理リストから除外します。
- * NyLPC_TcBaseSocketが使います。
- * @param i_inst
- * 操作するインスタンス。
- * @param i_sock
- * 削除するインスタンスのポインタ
- * @return
- * 削除が成功するとTRUEを返します。
- */
-NyLPC_TBool NyLPC_cIPv4_removeSocket(
- NyLPC_TcIPv4_t* i_inst,
- NyLPC_TcMiMicIpBaseSocket_t* i_sock);
-
-
-/**
* この関数は、RxIPパケットを処理して、管理下のインスタンスに処理を依頼します。
* 現在の関数は、i_rxに最大64バイトの応答パケットのイメージを格納することがあります。
* 応答パケットは、RXに対するACKパケットです。
@@ -233,4 +201,3 @@
#endif /* __cplusplus */
#endif
-
--- a/core/netif/mimicip/NyLPC_cMiMicIpBaseSocket.c Wed Nov 19 14:45:17 2014 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,11 +0,0 @@
-#include "NyLPC_cMiMicIpBaseSocket.h"
-#include "NyLPC_cMiMicIpNetIf_protected.h"
-
-
-void NyLPC_cMiMicIpBaseSocket_initialize(NyLPC_TcMiMicIpBaseSocket_t* i_inst,NyLPC_TUInt8 i_typeid)
-{
- NyLPC_TcMiMicIpNetIf_t* srv=_NyLPC_TcMiMicIpNetIf_inst;
- i_inst->_typeid=i_typeid;
- i_inst->_parent_ipv4=&(srv->_tcpv4);
-}
-
--- a/core/netif/mimicip/NyLPC_cMiMicIpBaseSocket.h Wed Nov 19 14:45:17 2014 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,72 +0,0 @@
-/*********************************************************************************
- * 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_CMIMICIPBASESOCKET_H_
-#define NYLPC_CMIMICIPBASESOCKET_H_
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-#include "NyLPC_stdlib.h"
-#include "NyLPC_cIPv4.h"
-#include "../NyLPC_iTcpSocket.h"
-#include "../NyLPC_iUdpSocket.h"
-#include "../NyLPC_iTcpListener.h"
-
-/**
- * Base socket class
- * cIPv4 classが管理するソケットオブジェクトのベースクラスです。
- */
-typedef struct NyLPC_TcMiMicIpBaseSocket NyLPC_TcMiMicIpBaseSocket_t;
-
-#define NyLPC_TcMiMicIpBaseSocket_TYPEID_UDP_SOCK 1
-#define NyLPC_TcMiMicIpBaseSocket_TYPEID_TCP_SOCK 2
-#define NyLPC_TcMiMicIpBaseSocket_TYPEID_TCP_LISTENER 3
-
-struct NyLPC_TcMiMicIpBaseSocket
-{
- union{
- struct NyLPC_TiUdpSocket udp_sock;
- struct NyLPC_TiTcpSocket tcp_sock;
- struct NyLPC_TiTcpListener tcp_listener;
- }_super;
- /**タイプID 継承クラスのinitializerで設定。 */
- NyLPC_TUInt8 _typeid;
- NyLPC_TUInt8 _padding8;
- NyLPC_TUInt16 _padding16;
- /** 所属してるIPv4コンローラ*/
- NyLPC_TcIPv4_t* _parent_ipv4;
-};
-void NyLPC_cMiMicIpBaseSocket_initialize(NyLPC_TcMiMicIpBaseSocket_t* i_inst,NyLPC_TUInt8 i_typeid);
-#define NyLPC_cMiMicIpBaseSocket_finalize(i_inst)
-
-
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* NYLPC_CBASESOCKET_H_ */
-
--- a/core/netif/mimicip/NyLPC_cMiMicIpNetIf.c Wed Nov 19 14:45:17 2014 +0000
+++ b/core/netif/mimicip/NyLPC_cMiMicIpNetIf.c Sun Mar 15 09:33:38 2015 +0000
@@ -58,9 +58,9 @@
#include "NyLPC_stdlib.h"
#include "../NyLPC_NetIf_ip_types.h"
#include "NyLPC_cIPv4IComp_protected.h"
-#include "NyLPC_cMiMicIpTcpSocket.h"
-#include "NyLPC_cMiMicIpUdpSocket.h"
-#include "NyLPC_cMiMicIpTcpListener.h"
+#include "NyLPC_cMiMicIpTcpSocket_protected.h"
+#include "NyLPC_cMiMicIpUdpSocket_protected.h"
+#include "NyLPC_cMiMicIpTcpListener_protected.h"
@@ -117,8 +117,6 @@
static NyLPC_TcThread_t th;
-
-
NyLPC_TBool NyLPC_cMiMicIpNetIf_initialize(NyLPC_TcMiMicIpNetIf_t* i_inst)
{
//サービスは停止している事。 - Service must be uninitialized.
@@ -131,7 +129,6 @@
i_inst->_status=0x00;
NyLPC_cStopwatch_initialize(&(i_inst->_arp_sw));
NyLPC_cStopwatch_initialize(&(i_inst->_periodic_sw));
- NyLPC_cIPv4_initialize(&(i_inst->_tcpv4));
NyLPC_AbortIfNot(NyLPC_cMutex_initialize(&(i_inst->_mutex)));
_NyLPC_TcMiMicIpNetIf_inst=i_inst;
@@ -585,43 +582,228 @@
//--------------------------------------------------------------------------------
-// フラグ
-static NyLPC_TUInt8 socket_flags[
- NyLPC_cMiMicIpNetIf_config_TCPSOCKET_MAX+
- NyLPC_cMiMicIpNetIf_config_UDPSOCKET_MAX+
- NyLPC_cMiMicIpNetIf_config_NB_UDPSOCKET_MAX+
- NyLPC_cMiMicIpNetIf_config_TCPLISTENER_MAX];
+// ソケットテーブル
+//--------------------------------------------------------------------------------
+
+#define FLAGS_USED 0x00000001
-#define FLAGS_USED 0x01
-#define TCP_SOCK_FLSGS(i) (socket_flags[(i)])
-#define UDP_SOCK_FLSGS(i) (socket_flags[(i)+NyLPC_cMiMicIpNetIf_config_TCPSOCKET_MAX])
-#define UDP_NB_SOCK_FLSGS(i) (socket_flags[(i)+NyLPC_cMiMicIpNetIf_config_TCPSOCKET_MAX+NyLPC_cMiMicIpNetIf_config_UDPSOCKET_MAX])
-#define TCP_LISTENER_FLSGS(i) (socket_flags[(i)+NyLPC_cMiMicIpNetIf_config_TCPSOCKET_MAX+NyLPC_cMiMicIpNetIf_config_UDPSOCKET_MAX+NyLPC_cMiMicIpNetIf_config_NB_UDPSOCKET_MAX])
+struct TTcpTable
+{
+ NyLPC_TUInt32 flags;
+ NyLPC_TcMiMicIpTcpSocket_t socket;
+ NyLPC_TUInt8 rxbuf[NyLPC_cMiMicIpNetIf_config_TCPSOCKET_RX_BUFFER_SIZE];
+};
+struct TUdpTable
+{
+ NyLPC_TUInt32 flags;
+ NyLPC_TcMiMicIpUdpSocket_t socket;
+ NyLPC_TUInt8 rxbuf[NyLPC_cMiMicIpNetIf_config_UDPSOCKET_RX_BUFFER_SIZE];
+};
+struct TUdpNBTable
+{
+ NyLPC_TUInt32 flags;
+ NyLPC_TcMiMicIpUdpSocket_t socket;
+};
+struct TTcpListenerTable
+{
+ NyLPC_TUInt32 flags;
+ NyLPC_TcMiMicIpTcpListener_t listener;
+};
+
-//--------------------------------------------------------------------------------
-// SOCKETインスタンスのメモリブロック
-static NyLPC_TUInt8 socket_memblock[
- sizeof(NyLPC_TcMiMicIpTcpSocket_t)*NyLPC_cMiMicIpNetIf_config_TCPSOCKET_MAX +
- sizeof(NyLPC_TcMiMicIpUdpSocket_t)*NyLPC_cMiMicIpNetIf_config_UDPSOCKET_MAX +
- sizeof(NyLPC_TcMiMicIpUdpSocket_t)*NyLPC_cMiMicIpNetIf_config_NB_UDPSOCKET_MAX+
- sizeof(NyLPC_TcMiMicIpTcpListener_t)*NyLPC_cMiMicIpNetIf_config_TCPLISTENER_MAX];
+static struct TTcpTable tcp_socket_table[NyLPC_cMiMicIpNetIf_config_TCPSOCKET_MAX];
+static struct TUdpTable udp_socket_table[NyLPC_cMiMicIpNetIf_config_UDPSOCKET_MAX];
+static struct TUdpNBTable udp_socket_nb_table[NyLPC_cMiMicIpNetIf_config_NB_UDPSOCKET_MAX];
+static struct TTcpListenerTable tcp_listener_table[NyLPC_cMiMicIpNetIf_config_TCPLISTENER_MAX];
+
+NyLPC_TcMiMicIpTcpListener_t* NyLPC_cMiMicIpNetIf_getListenerByPeerPort(NyLPC_TUInt16 i_port)
+{
+ int i;
+ //一致するポートを検索して、acceptをコールする。
+ for(i=NyLPC_cMiMicIpNetIf_config_TCPLISTENER_MAX-1;i>=0;i--){
+ if((tcp_listener_table[i].flags&FLAGS_USED)==0){
+ continue;
+ }
+ if(tcp_listener_table[i].listener._port!=i_port){
+ continue;
+ }
+ return &tcp_listener_table[i].listener;
+ }
+ return NULL;
+}
+
+/**
+ * 指定番号のTCPポートが未使用かを返す。
+ * @return
+ * i_lport番のポートが未使用であればTRUE
+ */
+NyLPC_TBool NyLPC_cMiMicIpNetIf_isClosedTcpPort(NyLPC_TUInt16 i_lport)
+{
+ int i;
+ //未使用のTCPソケット?
+ for(i=NyLPC_cMiMicIpNetIf_config_TCPSOCKET_MAX-1;i>=0;i--){
+ if( ((tcp_socket_table[i].flags&FLAGS_USED)!=0) &&
+ (NyLPC_cMiMicIpTcpSocket_getLocalPort(&tcp_socket_table[i].socket)==i_lport)&&
+ (!NyLPC_cMiMicIpTcpSocket_isClosed(&tcp_socket_table[i].socket))){
+ //ポート使用中
+ return NyLPC_TBool_FALSE;
+ }
+ }
+ for(i=NyLPC_cMiMicIpNetIf_config_TCPLISTENER_MAX-1;i>=0;i--){
+ if( ((tcp_listener_table[i].flags&FLAGS_USED)!=0) &&
+ (NyLPC_cMiMicIpTcpListener_getLocalPort(&tcp_listener_table[i].listener)==i_lport)){
+ //ポート使用中
+ return NyLPC_TBool_FALSE;
+ }
+ }
+ return NyLPC_TBool_TRUE;
+}
-#define TCP_SOCK_TBL(i) (((NyLPC_TcMiMicIpTcpSocket_t*)socket_memblock)+i)
-#define UDP_SOCK_TBL(i) (((NyLPC_TcMiMicIpUdpSocket_t*)(TCP_SOCK_TBL(NyLPC_cMiMicIpNetIf_config_TCPSOCKET_MAX)))+i)
-#define UDP_NB_SOCK_TBL(i) (((NyLPC_TcMiMicIpUdpSocket_t*)(UDP_SOCK_TBL(NyLPC_cMiMicIpNetIf_config_UDPSOCKET_MAX)))+i)
-#define TCP_LISTENER_TBL(i) (((NyLPC_TcMiMicIpTcpListener_t*)(UDP_NB_SOCK_TBL(NyLPC_cMiMicIpNetIf_config_NB_UDPSOCKET_MAX)))+i)
+/**
+ * 条件に一致する、アクティブなTCPソケットオブジェクトを取得します。
+ * この関数は、ローカルIPが一致していると仮定して検索をします。
+ * @param i_rip
+ * リモートIPアドレスを指定します。
+ */
+NyLPC_TcMiMicIpTcpSocket_t* NyLPC_cMiMicIpNetIf_getMatchTcpSocket(
+ NyLPC_TUInt16 i_lport,struct NyLPC_TIPv4Addr i_rip,NyLPC_TUInt16 i_rport)
+{
+ NyLPC_TcMiMicIpTcpSocket_t* tp;
+ int i;
+ //一致するポートを検索
+ for(i=NyLPC_cMiMicIpNetIf_config_TCPSOCKET_MAX-1;i>=0;i--){
+ if((tcp_socket_table[i].flags&FLAGS_USED)==0){
+ continue;
+ }
+ if(NyLPC_cMiMicIpTcpSocket_isClosed(&tcp_socket_table[i].socket)){
+ continue;
+ }
+ tp=&tcp_socket_table[i].socket;
+ //パラメータの一致チェック
+ if(i_lport!=tp->uip_connr.lport || i_rport!= tp->uip_connr.rport || i_rip.v!=tp->uip_connr.ripaddr.v)
+ {
+ continue;
+ }
+ return tp;
+ }
+ return NULL;
+}
+NyLPC_TcMiMicIpUdpSocket_t* NyLPC_cMiMicIpNetIf_getMatchUdpSocket(
+ NyLPC_TUInt16 i_lport)
+{
+ int i;
+ for(i=NyLPC_cMiMicIpNetIf_config_UDPSOCKET_MAX-1;i>=0;i--){
+ if((udp_socket_table[i].flags&FLAGS_USED)==0){
+ continue;
+ }
+ if(i_lport!=udp_socket_table[i].socket.uip_udp_conn.lport){
+ continue;
+ }
+ //unicast
+ return &udp_socket_table[i].socket;
+ }
+ for(i=NyLPC_cMiMicIpNetIf_config_NB_UDPSOCKET_MAX-1;i>=0;i--){
+ if((udp_socket_nb_table[i].flags&FLAGS_USED)==0){
+ continue;
+ }
+ if(i_lport!=udp_socket_nb_table[i].socket.uip_udp_conn.lport){
+ continue;
+ }
+ //unicast
+ return &udp_socket_nb_table[i].socket;
+ }
+ return NULL;
+}
+NyLPC_TcMiMicIpUdpSocket_t* NyLPC_cMiMicIpNetIf_getMatchMulticastUdpSocket(
+ const struct NyLPC_TIPv4Addr* i_mcast_ip,
+ NyLPC_TUInt16 i_lport)
+{
+ int i;
+ for(i=NyLPC_cMiMicIpNetIf_config_UDPSOCKET_MAX-1;i>=0;i--){
+ if((udp_socket_table[i].flags&FLAGS_USED)==0){
+ continue;
+ }
+ if(i_lport!=udp_socket_table[i].socket.uip_udp_conn.lport || (!NyLPC_TIPv4Addr_isEqual(i_mcast_ip,&(udp_socket_table[i].socket.uip_udp_conn.mcastaddr))))
+ {
+ continue;
+ }
+ return &udp_socket_table[i].socket;
+ }
+ for(i=NyLPC_cMiMicIpNetIf_config_NB_UDPSOCKET_MAX-1;i>=0;i--){
+ if((udp_socket_nb_table[i].flags&FLAGS_USED)==0){
+ continue;
+ }
+ if(i_lport!=udp_socket_nb_table[i].socket.uip_udp_conn.lport || (!NyLPC_TIPv4Addr_isEqual(i_mcast_ip,&(udp_socket_nb_table[i].socket.uip_udp_conn.mcastaddr))))
+ {
+ continue;
+ }
+ return &udp_socket_nb_table[i].socket;
+ }
+ return NULL;
+}
-//--------------------------------------------------------------------------------
-// ソケットのメモリ
+void NyLPC_cMiMicIpNetIf_callPeriodic(void)
+{
+ int i;
+ for(i=NyLPC_cMiMicIpNetIf_config_UDPSOCKET_MAX-1;i>=0;i--){
+ if((udp_socket_table[i].flags&FLAGS_USED)!=0){
+ NyLPC_cMiMicIpUdpSocket_periodic(&udp_socket_table[i].socket);
+ }
+ }
+ for(i=NyLPC_cMiMicIpNetIf_config_NB_UDPSOCKET_MAX-1;i>=0;i--){
+ if((udp_socket_nb_table[i].flags&FLAGS_USED)!=0){
+ NyLPC_cMiMicIpUdpSocket_periodic(&udp_socket_nb_table[i].socket);
+ }
+ }
+ for(i=NyLPC_cMiMicIpNetIf_config_TCPSOCKET_MAX-1;i>=0;i--){
+ if((tcp_socket_table[i].flags&FLAGS_USED)!=0){
+ NyLPC_cMiMicIpTcpSocket_periodic(&tcp_socket_table[i].socket);
+ }
+ }
+}
+void NyLPC_cMiMicIpNetIf_callSocketStart(
+ const NyLPC_TcIPv4Config_t* i_cfg)
+{
+ int i;
+ for(i=NyLPC_cMiMicIpNetIf_config_UDPSOCKET_MAX-1;i>=0;i--){
+ if((udp_socket_table[i].flags&FLAGS_USED)!=0){
+ NyLPC_cMiMicIpUdpSocket_startService(&udp_socket_table[i].socket,i_cfg);
+ }
+ }
+ for(i=NyLPC_cMiMicIpNetIf_config_NB_UDPSOCKET_MAX-1;i>=0;i--){
+ if((udp_socket_nb_table[i].flags&FLAGS_USED)!=0){
+ NyLPC_cMiMicIpUdpSocket_startService(&udp_socket_nb_table[i].socket,i_cfg);
+ }
+ }
+ for(i=NyLPC_cMiMicIpNetIf_config_TCPSOCKET_MAX-1;i>=0;i--){
+ if((tcp_socket_table[i].flags&FLAGS_USED)!=0){
+ NyLPC_cMiMicIpTcpSocket_startService(&tcp_socket_table[i].socket,i_cfg);
+ }
+ }
+}
+void NyLPC_cMiMicIpNetIf_callSocketStop(void)
+{
+ int i;
+ for(i=NyLPC_cMiMicIpNetIf_config_UDPSOCKET_MAX-1;i>=0;i--){
+ if((udp_socket_table[i].flags&FLAGS_USED)!=0){
+ NyLPC_cMiMicIpUdpSocket_stopService(&udp_socket_table[i].socket);
+ }
+ }
+ for(i=NyLPC_cMiMicIpNetIf_config_NB_UDPSOCKET_MAX-1;i>=0;i--){
+ if((udp_socket_nb_table[i].flags&FLAGS_USED)!=0){
+ NyLPC_cMiMicIpUdpSocket_stopService(&udp_socket_nb_table[i].socket);
+ }
+ }
+ for(i=NyLPC_cMiMicIpNetIf_config_TCPSOCKET_MAX-1;i>=0;i--){
+ if((tcp_socket_table[i].flags&FLAGS_USED)!=0){
+ NyLPC_cMiMicIpTcpSocket_stopService(&tcp_socket_table[i].socket);
+ }
+ }
+}
-static NyLPC_TUInt8 socket_buffer[
- NyLPC_cMiMicIpNetIf_config_TCPSOCKET_RX_BUFFER_SIZE*NyLPC_cMiMicIpNetIf_config_TCPSOCKET_MAX+
- NyLPC_cMiMicIpNetIf_config_UDPSOCKET_RX_BUFFER_SIZE*NyLPC_cMiMicIpNetIf_config_UDPSOCKET_MAX];
-#define TCP_SOCK_BUF(i) (socket_buffer+(i)*NyLPC_cMiMicIpNetIf_config_TCPSOCKET_RX_BUFFER_SIZE)
-#define UDP_SOCK_BUF(i) (TCP_SOCK_BUF(NyLPC_cMiMicIpNetIf_config_TCPSOCKET_MAX)+(i)*NyLPC_cMiMicIpNetIf_config_UDPSOCKET_RX_BUFFER_SIZE)
//--------------------------------------------------------------------------------
// インタフェイス関数
@@ -635,13 +817,13 @@
//空きソケットの探索
for(i=0;i<NyLPC_cMiMicIpNetIf_config_TCPSOCKET_MAX;i++){
//未使用なソケットを得る
- if((TCP_SOCK_FLSGS(i)&FLAGS_USED)==0){
- if(!NyLPC_cMiMicIpTcpSocket_initialize(TCP_SOCK_TBL(i),TCP_SOCK_BUF(i),NyLPC_cMiMicIpNetIf_config_TCPSOCKET_RX_BUFFER_SIZE)){
+ if((tcp_socket_table[i].flags&FLAGS_USED)==0){
+ if(!NyLPC_cMiMicIpTcpSocket_initialize(&tcp_socket_table[i].socket,tcp_socket_table[i].rxbuf,NyLPC_cMiMicIpNetIf_config_TCPSOCKET_RX_BUFFER_SIZE)){
return NULL;
}
//ソケットを使用中に
- TCP_SOCK_FLSGS(i)|=FLAGS_USED;
- return &(TCP_SOCK_TBL(i)->_super._super.tcp_sock);
+ tcp_socket_table[i].flags|=FLAGS_USED;
+ return &(tcp_socket_table[i].socket._super);
}
}
break;
@@ -659,12 +841,12 @@
//空きソケットの探索
for(i=0;i<NyLPC_cMiMicIpNetIf_config_UDPSOCKET_MAX;i++){
//未使用なソケットを得る
- if((UDP_SOCK_FLSGS(i)&FLAGS_USED)==0){
- if(!NyLPC_cMiMicIpUdpSocket_initialize(UDP_SOCK_TBL(i),i_port,UDP_SOCK_BUF(i),NyLPC_cMiMicIpNetIf_config_UDPSOCKET_RX_BUFFER_SIZE)){
+ if((udp_socket_table[i].flags&FLAGS_USED)==0){
+ if(!NyLPC_cMiMicIpUdpSocket_initialize(&udp_socket_table[i].socket,i_port,udp_socket_table[i].rxbuf,NyLPC_cMiMicIpNetIf_config_UDPSOCKET_RX_BUFFER_SIZE)){
return NULL;
}
- UDP_SOCK_FLSGS(i)|=FLAGS_USED;
- return &(UDP_SOCK_TBL(i)->_super._super.udp_sock);
+ udp_socket_table[i].flags|=FLAGS_USED;
+ return &(udp_socket_table[i].socket._super);
}
}
break;
@@ -672,12 +854,12 @@
//空きソケットの探索
for(i=0;i<NyLPC_cMiMicIpNetIf_config_NB_UDPSOCKET_MAX;i++){
//未使用なソケットを得る
- if((UDP_NB_SOCK_FLSGS(i)&FLAGS_USED)==0){
- if(!NyLPC_cMiMicIpUdpSocket_initialize(UDP_NB_SOCK_TBL(i),i_port,NULL,0)){
+ if((udp_socket_nb_table[i].flags&FLAGS_USED)==0){
+ if(!NyLPC_cMiMicIpUdpSocket_initialize(&udp_socket_nb_table[i].socket,i_port,NULL,0)){
return NULL;
}
- UDP_NB_SOCK_FLSGS(i)|=FLAGS_USED;
- return &(UDP_NB_SOCK_TBL(i)->_super._super.udp_sock);
+ udp_socket_nb_table[i].flags|=FLAGS_USED;
+ return &(udp_socket_nb_table[i].socket._super);
}
}
break;
@@ -692,13 +874,13 @@
//空きソケットの探索
for(i=0;i<NyLPC_cMiMicIpNetIf_config_TCPLISTENER_MAX;i++){
//未使用なソケットを得る
- if((TCP_LISTENER_FLSGS(i)&FLAGS_USED)==0){
- if(!NyLPC_cMiMicIpTcpListener_initialize(TCP_LISTENER_TBL(i),i_port)){
+ if((tcp_listener_table[i].flags&FLAGS_USED)==0){
+ if(!NyLPC_cMiMicIpTcpListener_initialize(&tcp_listener_table[i].listener,i_port)){
return NULL;
}
//ソケットを使用中に
- TCP_LISTENER_FLSGS(i)|=FLAGS_USED;
- return &(TCP_LISTENER_TBL(i)->_super._super.tcp_listener);
+ tcp_listener_table[i].flags|=FLAGS_USED;
+ return &(tcp_listener_table[i].listener._super);
}
}
return NULL;
@@ -725,8 +907,8 @@
NyLPC_TUInt16 i;
//空きソケットの探索
for(i=0;i<NyLPC_cMiMicIpNetIf_config_TCPSOCKET_MAX;i++){
- if((TCP_SOCK_TBL(i))==i_inst){
- TCP_SOCK_FLSGS(i)&=~FLAGS_USED;
+ if((&tcp_socket_table[i].socket)==i_inst){
+ tcp_socket_table[i].flags&=~FLAGS_USED;
return;
}
}
@@ -736,14 +918,14 @@
{
NyLPC_TUInt16 i;
for(i=0;i<NyLPC_cMiMicIpNetIf_config_UDPSOCKET_MAX;i++){
- if((UDP_SOCK_TBL(i))==i_inst){
- UDP_SOCK_FLSGS(i)&=~FLAGS_USED;
+ if((&udp_socket_table[i].socket)==i_inst){
+ udp_socket_table[i].flags&=~FLAGS_USED;
return;
}
}
for(i=0;i<NyLPC_cMiMicIpNetIf_config_NB_UDPSOCKET_MAX;i++){
- if((UDP_NB_SOCK_TBL(i))==i_inst){
- UDP_NB_SOCK_FLSGS(i)&=~FLAGS_USED;
+ if((&udp_socket_nb_table[i].socket)==i_inst){
+ udp_socket_nb_table[i].flags&=~FLAGS_USED;
return;
}
}
@@ -754,8 +936,8 @@
NyLPC_TUInt16 i;
//空きソケットの探索
for(i=0;i<NyLPC_cMiMicIpNetIf_config_TCPLISTENER_MAX;i++){
- if((TCP_LISTENER_TBL(i))==i_inst){
- TCP_LISTENER_FLSGS(i)&=~FLAGS_USED;
+ if((&tcp_listener_table[i].listener)==i_inst){
+ tcp_listener_table[i].flags&=~FLAGS_USED;
return;
}
}
--- a/core/netif/mimicip/NyLPC_cMiMicIpNetIf.h Wed Nov 19 14:45:17 2014 +0000
+++ b/core/netif/mimicip/NyLPC_cMiMicIpNetIf.h Sun Mar 15 09:33:38 2015 +0000
@@ -63,7 +63,7 @@
**********************************************************************/
#ifdef __cplusplus
-extern "C" {
+extern "C" {
#endif /* __cplusplus */
/**********************************************************************
@@ -83,7 +83,7 @@
* mbedのExportしたのをLPCXpressoでコンパイルするときは+192しないと落ちる。
*/
#ifndef NyLPC_cMiMicIpNetIf_config_STACK_SIZE
-# define NyLPC_cMiMicIpNetIf_config_STACK_SIZE (256+192+192)
+# define NyLPC_cMiMicIpNetIf_config_STACK_SIZE (256+256+192)
#endif
/**
@@ -110,11 +110,6 @@
#endif
-/**
- * @param i_mac_addr
- * システムで唯一のUIPサービスを初期化します。1度だけ実行できます。
- */
-NyLPC_TBool NyLPC_cMiMicIpNetIf_initialize(NyLPC_TcMiMicIpNetIf_t* i_inst);
@@ -123,7 +118,6 @@
const struct NyLPC_TiNetInterface_Interface* NyLPC_cMiMicIpNetIf_getNetInterface(void);
-
#ifdef __cplusplus
}
#endif /* __cplusplus */
--- a/core/netif/mimicip/NyLPC_cMiMicIpNetIf_protected.h Wed Nov 19 14:45:17 2014 +0000 +++ b/core/netif/mimicip/NyLPC_cMiMicIpNetIf_protected.h Sun Mar 15 09:33:38 2015 +0000 @@ -72,6 +72,12 @@ extern NyLPC_TcMiMicIpNetIf_t* _NyLPC_TcMiMicIpNetIf_inst; /** + * @param i_mac_addr + * システムで唯一のUIPサービスを初期化します。1度だけ実行できます。 + */ +NyLPC_TBool NyLPC_cMiMicIpNetIf_initialize(NyLPC_TcMiMicIpNetIf_t* i_inst); + +/** * サービスが初期化済みならtrueです。 - true if service was initialized. */ #define NyLPC_cMiMicIpNetIf_isInitService() (_NyLPC_TcMiMicIpNetIf_inst!=NULL) @@ -161,6 +167,19 @@ void NyLPC_cMiMicIpNetIf_releaseUdpSocketMemory(const NyLPC_TcMiMicIpUdpSocket_t* i_inst); void NyLPC_cMiMicIpNetIf_releaseTcpListenerMemory(const NyLPC_TcMiMicIpTcpListener_t* i_inst); +NyLPC_TcMiMicIpTcpListener_t* NyLPC_cMiMicIpNetIf_getListenerByPeerPort(NyLPC_TUInt16 i_port); +NyLPC_TcMiMicIpUdpSocket_t* NyLPC_cMiMicIpNetIf_getMatchUdpSocket(NyLPC_TUInt16 i_lport); +NyLPC_TBool NyLPC_cMiMicIpNetIf_isClosedTcpPort(NyLPC_TUInt16 i_lport); +NyLPC_TcMiMicIpUdpSocket_t* NyLPC_cMiMicIpNetIf_getMatchMulticastUdpSocket( + const struct NyLPC_TIPv4Addr* i_mcast_ip,NyLPC_TUInt16 i_lport); +NyLPC_TcMiMicIpTcpSocket_t* NyLPC_cMiMicIpNetIf_getMatchTcpSocket( + NyLPC_TUInt16 i_lport,struct NyLPC_TIPv4Addr i_rip,NyLPC_TUInt16 i_rport); +void NyLPC_cMiMicIpNetIf_callPeriodic(void); +void NyLPC_cMiMicIpNetIf_callSocketStart(const NyLPC_TcIPv4Config_t* i_cfg); +void NyLPC_cMiMicIpNetIf_callSocketStop(void); + + + #ifdef __cplusplus
--- a/core/netif/mimicip/NyLPC_cMiMicIpTcpListener.c Wed Nov 19 14:45:17 2014 +0000
+++ b/core/netif/mimicip/NyLPC_cMiMicIpTcpListener.c Sun Mar 15 09:33:38 2015 +0000
@@ -101,8 +101,8 @@
//#define lockResource(i_inst) NyLPC_cMutex_lock(((i_inst)->_mutex))
//#define unlockResource(i_inst) NyLPC_cMutex_unlock(((i_inst)->_mutex))
-#define lockResource(i_inst) NyLPC_cMutex_lock(NyLPC_cIPv4_getListenerMutex(((i_inst)->_super._parent_ipv4)))
-#define unlockResource(i_inst) NyLPC_cMutex_unlock(NyLPC_cIPv4_getListenerMutex(((i_inst)->_super._parent_ipv4)))
+#define lockResource(i_inst) NyLPC_cMutex_lock(NyLPC_cIPv4_getListenerMutex(((i_inst)->_parent_ipv4)))
+#define unlockResource(i_inst) NyLPC_cMutex_unlock(NyLPC_cIPv4_getListenerMutex(((i_inst)->_parent_ipv4)))
static NyLPC_TBool listen(NyLPC_TiTcpListener_t* i_inst,NyLPC_TiTcpSocket_t* i_sock,NyLPC_TUInt32 i_wait_msec);
@@ -120,8 +120,8 @@
NyLPC_TBool NyLPC_cMiMicIpTcpListener_initialize(NyLPC_TcMiMicIpTcpListener_t* i_inst,NyLPC_TUInt16 i_port)
{
NyLPC_TcMiMicIpNetIf_t* srv=_NyLPC_TcMiMicIpNetIf_inst;
- i_inst->_super._super.tcp_listener._interface=&interface;
- NyLPC_cMiMicIpBaseSocket_initialize(&(i_inst->_super),NyLPC_TcMiMicIpBaseSocket_TYPEID_TCP_LISTENER);
+ i_inst->_super._interface=&interface;
+ i_inst->_parent_ipv4=&srv->_tcpv4;
NyLPC_TTcpListenerListenQ_init(&i_inst->_listen_q);
//uipサービスは初期化済であること。
NyLPC_Assert(NyLPC_cMiMicIpNetIf_isInitService());
@@ -130,21 +130,14 @@
// i_inst->_mutex=NyLPC_cIPv4_getListenerMutex(&srv->_tcpv4);// NyLPC_cMutex_initialize(&(i_inst->_mutex));
i_inst->_port=NyLPC_htons(i_port);
//管理リストへ登録。
- return NyLPC_cIPv4_addSocket(&(srv->_tcpv4),&(i_inst->_super));
+ return NyLPC_TBool_TRUE;
}
static void finaize(NyLPC_TiTcpListener_t* i_inst)
{
- NyLPC_TcMiMicIpNetIf_t* srv=_NyLPC_TcMiMicIpNetIf_inst;
NyLPC_Assert(NyLPC_cMiMicIpNetIf_isInitService());
- //uipサービスは初期化済であること。
- if(!NyLPC_cIPv4_removeSocket(&(srv->_tcpv4),&(((NyLPC_TcMiMicIpTcpListener_t*)i_inst)->_super))){
- //削除失敗、それは死を意味する。
- NyLPC_Abort();
- }
- NyLPC_cMiMicIpBaseSocket_finalize(&(((NyLPC_TcMiMicIpTcpListener_t*)i_inst)->_super));
NyLPC_cMiMicIpNetIf_releaseTcpListenerMemory((NyLPC_TcMiMicIpTcpListener_t*)i_inst);
return;
}
@@ -224,4 +217,3 @@
-
--- a/core/netif/mimicip/NyLPC_cMiMicIpTcpListener.h Wed Nov 19 14:45:17 2014 +0000
+++ b/core/netif/mimicip/NyLPC_cMiMicIpTcpListener.h Sun Mar 15 09:33:38 2015 +0000
@@ -29,7 +29,7 @@
#include "NyLPC_stdlib.h"
#include "NyLPC_os.h"
-#include "NyLPC_cMiMicIpBaseSocket.h"
+#include "../NyLPC_iTcpListener.h"
#include "NyLPC_cMiMicIpTcpSocket.h"
#ifdef __cplusplus
extern "C" {
@@ -63,7 +63,8 @@
*/
struct NyLPC_TcMiMicIpTcpListener
{
- NyLPC_TcMiMicIpBaseSocket_t _super;
+ struct NyLPC_TiTcpListener _super;
+ NyLPC_TcIPv4_t* _parent_ipv4;
NyLPC_TUInt16 _port; /**<ネットワークオーダーのポート番号*/
// /**
// * タスク間の調停用Mutex
@@ -95,4 +96,3 @@
#endif /* __cplusplus */
#endif /* NYLPC_CTCPLISTENER_H_ */
-
--- a/core/netif/mimicip/NyLPC_cMiMicIpTcpListener_protected.h Wed Nov 19 14:45:17 2014 +0000 +++ b/core/netif/mimicip/NyLPC_cMiMicIpTcpListener_protected.h Sun Mar 15 09:33:38 2015 +0000 @@ -40,10 +40,10 @@ * 常にTRUE */ NyLPC_TBool NyLPC_cMiMicIpTcpListener_synPacket(NyLPC_TcMiMicIpTcpListener_t* i_inst,const NyLPC_TcIPv4Payload_t* i_payload); +#define NyLPC_cMiMicIpTcpListener_getLocalPort(i) ((i)->_port) #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* NYLPC_CTCPLISTENER_PROTECTED_H_ */ -
--- a/core/netif/mimicip/NyLPC_cMiMicIpTcpSocket.c Wed Nov 19 14:45:17 2014 +0000
+++ b/core/netif/mimicip/NyLPC_cMiMicIpTcpSocket.c Sun Mar 15 09:33:38 2015 +0000
@@ -69,8 +69,8 @@
//#define lockResource(i_inst) NyLPC_cMutex_lock(&((i_inst)->_smutex))
//#define unlockResource(i_inst) NyLPC_cMutex_unlock(&((i_inst)->_smutex))
-#define lockResource(i_inst) NyLPC_cMutex_lock(NyLPC_cIPv4_getSockMutex(((i_inst)->_super._parent_ipv4)))
-#define unlockResource(i_inst) NyLPC_cMutex_unlock(NyLPC_cIPv4_getSockMutex(((i_inst)->_super._parent_ipv4)))
+#define lockResource(i_inst) NyLPC_cMutex_lock(NyLPC_cIPv4_getSockMutex(((i_inst)->_parent_ipv4)))
+#define unlockResource(i_inst) NyLPC_cMutex_unlock(NyLPC_cIPv4_getSockMutex(((i_inst)->_parent_ipv4)))
static void sendRst(NyLPC_TcMiMicIpTcpSocket_t* i_inst);
@@ -480,8 +480,9 @@
{
int i;
NyLPC_TcMiMicIpNetIf_t* srv=_NyLPC_TcMiMicIpNetIf_inst;
- i_inst->_super._super.tcp_sock._interface=&_interface;
- NyLPC_cMiMicIpBaseSocket_initialize(&(i_inst->_super),NyLPC_TcMiMicIpBaseSocket_TYPEID_TCP_SOCK);
+ i_inst->_super._interface=&_interface;
+ i_inst->_parent_ipv4=&srv->_tcpv4;
+
//uipサービスは初期化済であること。
NyLPC_Assert(NyLPC_cMiMicIpNetIf_isInitService());
@@ -494,7 +495,7 @@
i_inst->txbuf.txq[i].packet=NULL;
}
//管理リストへ登録。
- return NyLPC_cIPv4_addSocket(&(srv->_tcpv4),&(i_inst->_super));
+ return NyLPC_TBool_TRUE;
}
@@ -718,11 +719,6 @@
int i;
NyLPC_TcMiMicIpTcpSocket_t* inst=(NyLPC_TcMiMicIpTcpSocket_t*)i_inst;
NyLPC_Assert(NyLPC_cMiMicIpNetIf_isInitService());
- //uipサービスは初期化済であること。
- if(!NyLPC_cIPv4_removeSocket(&(_NyLPC_TcMiMicIpNetIf_inst->_tcpv4),&(inst->_super))){
- //削除失敗、それは死を意味する。
- NyLPC_Abort();
- }
//開放漏れの保険
if(inst->txbuf.rp!=inst->txbuf.wp){
lockResource(inst);
@@ -733,7 +729,6 @@
}
NyLPC_cFifoBuffer_finalize(&(inst->rxbuf));
// NyLPC_cMutex_finalize(&(i_inst->_smutex));
- NyLPC_cMiMicIpBaseSocket_finalize(&(inst->_super));
NyLPC_cMiMicIpNetIf_releaseTcpSocketMemory(inst);
return;
@@ -753,7 +748,7 @@
NyLPC_OnErrorGoto(Error);
}
//ポート番号の取得(lockResourceが他のソケットと共有なので、重複ポートの割当は起こりえない。でもちょっと注意して)
- lport=NyLPC_htons(NyLPC_cIPv4_getNewPortNumber(inst->_super._parent_ipv4));
+ lport=NyLPC_htons(NyLPC_cIPv4_getNewPortNumber(inst->_parent_ipv4));
if(lport==0){
NyLPC_OnErrorGoto(Error);
}
@@ -1545,4 +1540,3 @@
-
--- a/core/netif/mimicip/NyLPC_cMiMicIpTcpSocket.h Wed Nov 19 14:45:17 2014 +0000
+++ b/core/netif/mimicip/NyLPC_cMiMicIpTcpSocket.h Sun Mar 15 09:33:38 2015 +0000
@@ -31,8 +31,8 @@
#include "NyLPC_os.h"
#include "../NyLPC_NetIf_ip_types.h"
#include "NyLPC_cIPv4Payload.h"
-#include "NyLPC_cMiMicIpBaseSocket.h"
-
+#include "../NyLPC_iTcpSocket.h"
+#include "NyLPC_cIPv4.h"
#ifdef __cplusplus
extern "C" {
@@ -127,9 +127,9 @@
struct NyLPC_TcMiMicIpTcpSocket
{
- /** Base class*/
- NyLPC_TcMiMicIpBaseSocket_t _super;
- //この変数は、uipタスクの実行する関数のみが変更する。
+ struct NyLPC_TiTcpSocket _super;
+ NyLPC_TcIPv4_t* _parent_ipv4;
+ //この変数は、uipタスクの実行する関数のみが変更する。
struct uip_conn uip_connr;
NyLPC_TcFifoBuffer_t rxbuf;
struct{
@@ -149,4 +149,3 @@
#endif /* __cplusplus */
#endif /* NYLPC_CTCPSOCKET_H_ */
-
--- a/core/netif/mimicip/NyLPC_cMiMicIpTcpSocket_protected.h Wed Nov 19 14:45:17 2014 +0000
+++ b/core/netif/mimicip/NyLPC_cMiMicIpTcpSocket_protected.h Sun Mar 15 09:33:38 2015 +0000
@@ -26,7 +26,6 @@
#ifndef NYLPC_CMIMICIPTCPSOCKET_PROTECTED_H_
#define NYLPC_CMIMICIPTCPSOCKET_PROTECTED_H_
-#include "NyLPC_cIPv4.h"
#include "NyLPC_cMiMicIpTcpSocket.h"
#include "../NyLPC_cIPv4Config.h"
#include "NyLPC_cIPv4Payload_protected.h"
@@ -106,9 +105,13 @@
void* NyLPC_cMiMicIpTcpSocket_allocTcpReverseRstAck(
const NyLPC_TcIPv4Payload_t* i_src);
+/**
+ * ローカルポートを返します。
+ */
+#define NyLPC_cMiMicIpTcpSocket_getLocalPort(i) ((i)->uip_connr.lport)
+#define NyLPC_cMiMicIpTcpSocket_isClosed(i) ((i)->tcpstateflags==UIP_CLOSED)
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* NYLPC_CTCPSOCKET_PROTECTED_H_ */
-
--- a/core/netif/mimicip/NyLPC_cMiMicIpUdpSocket.c Wed Nov 19 14:45:17 2014 +0000
+++ b/core/netif/mimicip/NyLPC_cMiMicIpUdpSocket.c Sun Mar 15 09:33:38 2015 +0000
@@ -81,10 +81,10 @@
static NyLPC_TInt32 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);
static void setOnRxHandler(NyLPC_TiUdpSocket_t* i_inst,NyLPC_TiUdpSocket_onRxHandler i_handler);
static void setOnPeriodicHandler(NyLPC_TiUdpSocket_t* i_inst,NyLPC_TiUdpSocket_onPeriodicHandler i_handler);
-static struct NyLPC_TIPv4Addr* getSockIP(const NyLPC_TiUdpSocket_t* i_inst);
+static const struct NyLPC_TIPv4Addr* getSockIP(const NyLPC_TiUdpSocket_t* i_inst);
static void finalize(NyLPC_TiUdpSocket_t* i_inst);
-const struct NyLPC_TiUdpSocket_Interface interface=
+static const struct NyLPC_TiUdpSocket_Interface interface=
{
joinMulticast,
setBroadcast,
@@ -111,9 +111,8 @@
NyLPC_TBool NyLPC_cMiMicIpUdpSocket_initialize(NyLPC_TcMiMicIpUdpSocket_t* i_inst,NyLPC_TUInt16 i_port,void* i_rbuf,NyLPC_TUInt16 i_rbuf_len)
{
NyLPC_TcMiMicIpNetIf_t* srv=_NyLPC_TcMiMicIpNetIf_inst;
- i_inst->_super._super.udp_sock._interface=&interface;
- i_inst->_super._super.udp_sock._tag=NULL;
- NyLPC_cMiMicIpBaseSocket_initialize(&(i_inst->_super),NyLPC_TcMiMicIpBaseSocket_TYPEID_UDP_SOCK);
+ i_inst->_super._interface=&interface;
+ i_inst->_super._tag=NULL;
//uipサービスは初期化済であること。
NyLPC_Assert(NyLPC_cMiMicIpNetIf_isInitService());
i_inst->_smutex=NyLPC_cIPv4_getSockMutex(&(srv->_tcpv4));
@@ -125,7 +124,7 @@
NyLPC_cFifoBuffer_initialize(&(i_inst->rxbuf),i_rbuf,i_rbuf_len);
//管理リストへ登録。
- return NyLPC_cIPv4_addSocket(&(srv->_tcpv4),&(i_inst->_super));
+ return NyLPC_TBool_TRUE;
}
@@ -217,15 +216,9 @@
static void finalize(NyLPC_TiUdpSocket_t* i_inst)
{
- NyLPC_TcMiMicIpNetIf_t* srv=_NyLPC_TcMiMicIpNetIf_inst;
NyLPC_Assert(NyLPC_cMiMicIpNetIf_isInitService());
- //uipサービスは初期化済であること。
- if(!NyLPC_cIPv4_removeSocket(&(srv->_tcpv4),&(((NyLPC_TcMiMicIpUdpSocket_t*)i_inst)->_super))){
- //削除失敗、それは死を意味する。
- NyLPC_Abort();
- }
+
NyLPC_cFifoBuffer_finalize(&(i_inst->rxbuf));
- NyLPC_cMiMicIpBaseSocket_finalize(&(((NyLPC_TcMiMicIpUdpSocket_t*)i_inst)->_super));
NyLPC_cMiMicIpNetIf_releaseUdpSocketMemory((NyLPC_TcMiMicIpUdpSocket_t*)i_inst);
return;
}
@@ -265,7 +258,6 @@
lockResource(inst);
rlen=NyLPC_cFifoBuffer_getLength(&(inst->rxbuf));
//MUTEX UNLOCK
- unlockResource(inst);
if(rlen>0){
//受信キューにデータがあれば返す。
b=(char*)NyLPC_cFifoBuffer_getPtr(&(inst->rxbuf));
@@ -274,8 +266,11 @@
if(o_info!=NULL){
*o_info=rh;
}
+ unlockResource(inst);
+ NyLPC_cStopwatch_finalize(&sw);
return rh->size;
}
+ unlockResource(inst);
//タスクスイッチ
NyLPC_cThread_yield();
};
@@ -291,12 +286,13 @@
NyLPC_TUInt16 s;
const struct NyLPC_TIPv4RxInfo* rh;
//シークサイズを決定
+ lockResource(inst);
s=NyLPC_cFifoBuffer_getLength(&(inst->rxbuf));
- if(s==0){
- return;
+ if(s>0){
+ rh=(const struct NyLPC_TIPv4RxInfo*)NyLPC_cFifoBuffer_getPtr(&(inst->rxbuf));
+ NyLPC_cFifoBuffer_pop(&(inst->rxbuf),rh->size+sizeof(struct NyLPC_TIPv4RxInfo));
}
- rh=(const struct NyLPC_TIPv4RxInfo*)NyLPC_cFifoBuffer_getPtr(&(inst->rxbuf));
- NyLPC_cFifoBuffer_pop(&(inst->rxbuf),rh->size+sizeof(struct NyLPC_TIPv4RxInfo));
+ unlockResource(inst);
}
/**
@@ -410,7 +406,7 @@
NyLPC_TcMiMicIpUdpSocket_t* inst=(NyLPC_TcMiMicIpUdpSocket_t*)i_inst;
inst->as_handler.periodic=i_handler;
}
-static struct NyLPC_TIPv4Addr* getSockIP(const NyLPC_TiUdpSocket_t* i_inst)
+static const struct NyLPC_TIPv4Addr* getSockIP(const NyLPC_TiUdpSocket_t* i_inst)
{
NyLPC_TcMiMicIpUdpSocket_t* inst=(NyLPC_TcMiMicIpUdpSocket_t*)i_inst;
return &inst->uip_udp_conn.lipaddr;
@@ -432,4 +428,3 @@
}
-
--- a/core/netif/mimicip/NyLPC_cMiMicIpUdpSocket.h Wed Nov 19 14:45:17 2014 +0000
+++ b/core/netif/mimicip/NyLPC_cMiMicIpUdpSocket.h Sun Mar 15 09:33:38 2015 +0000
@@ -9,7 +9,6 @@
#define NYLPC_CMIMICIPUDPSOCKET_H_
#include "NyLPC_os.h"
-#include "NyLPC_cMiMicIpBaseSocket.h"
#include "../NyLPC_iUdpSocket.h"
@@ -25,19 +24,6 @@
typedef struct NyLPC_TcMiMicIpUdpSocket NyLPC_TcMiMicIpUdpSocket_t;
-/**
- * 受信時に非同期にコールされるハンドラ
- * UIPサービスタスクが実行する。
- * @return
- * TRUEならパケットを受信キューへ追加する。FALSEならパケットを受信キューへ追加しない。
- */
-typedef NyLPC_TBool (*NyLPC_TcMiMicIpUdpSocket_onRxHandler)(NyLPC_TiUdpSocket_t* i_inst,const void* i_buf,const struct NyLPC_TIPv4RxInfo* i_info);
-
-/**
- * 一定周期で非同期にコールされるハンドラ。
- * UIPサービスタスクが実行する。
- */
-typedef void (*NyLPC_TcMiMicIpUdpSocket_onPeriodicHandler)(NyLPC_TiUdpSocket_t* i_inst);
/**
* Representation of a uIP UDP connection.
@@ -56,16 +42,16 @@
struct NyLPC_TcMiMicIpUdpSocket
{
- NyLPC_TcMiMicIpBaseSocket_t _super;
+ struct NyLPC_TiUdpSocket _super;
//この変数は、uipタスクの実行する関数のみが変更する。
struct uip_udp_conn uip_udp_conn;
NyLPC_TcFifoBuffer_t rxbuf;
NyLPC_TcMutex_t* _smutex;
struct{
/** 受信ハンドラ。サービス実装に使用する。*/
- NyLPC_TcMiMicIpUdpSocket_onRxHandler rx;
+ NyLPC_TiUdpSocket_onRxHandler rx;
/** 定期実行ハンドラ。サービス実装に使用する。最低保障周期は1s*/
- NyLPC_TcMiMicIpUdpSocket_onPeriodicHandler periodic;
+ NyLPC_TiUdpSocket_onPeriodicHandler periodic;
}as_handler;
};
@@ -90,4 +76,3 @@
#endif /* NYLPC_CUDPSOCKET_H_ */
-
--- a/mbed/Net.cpp Wed Nov 19 14:45:17 2014 +0000
+++ b/mbed/Net.cpp Sun Mar 15 09:33:38 2015 +0000
@@ -10,15 +10,15 @@
const char* Net::UPNP_ROOT_PATH="upnp";
- Net::Net()
+ Net::Net(INetif& i_netif)
{
- NyLPC_cNetIf_initialize();
+ NyLPC_cNet_initialize(i_netif.getInterface());
this->_mdns=NULL;
this->_upnp=NULL;
}
Net::~Net()
{
- NyLPC_cNetIf_finalize();
+ NyLPC_cNet_finalize();
}
void Net::start(NetConfig& i_cfg)
{
@@ -28,13 +28,13 @@
for(;;){
//DHCP
if((base_cfg->tcp_mode & NyLPC_TcNetConfig_IPV4_FLAG_MODE_DHCP)!=0){
- if(NyLPC_cNetIf_requestAddrDhcp(&(base_cfg->super),3)){
+ if(NyLPC_cNet_requestAddrDhcp(&(base_cfg->super),3)){
break;
}
}
//AUTOIP
if((base_cfg->tcp_mode & NyLPC_TcNetConfig_IPV4_FLAG_MODE_AUTOIP)!=0){
- if(NyLPC_cNetIf_requestAddrApipa(&(base_cfg->super),3)){
+ if(NyLPC_cNet_requestAddrApipa(&(base_cfg->super),3)){
break;
}
}
@@ -51,14 +51,14 @@
NyLPC_cUPnP_initialize(this->_upnp,i_cfg.getHttpPort(),UPNP_ROOT_PATH,i_cfg.refUPnPDevDesc());
}
- NyLPC_cNetIf_start(&(base_cfg->super));
+ NyLPC_cNet_start(&(base_cfg->super));
if(this->_upnp!=NULL){
NyLPC_cUPnP_start(this->_upnp);
}
}
void Net::stop()
{
- NyLPC_cNetIf_stop();
+ NyLPC_cNet_stop();
//stop mDNS
if(this->_mdns!=NULL){
NyLPC_cMDnsServer_finalize(this->_mdns);
--- a/mbed/Net.h Wed Nov 19 14:45:17 2014 +0000
+++ b/mbed/Net.h Sun Mar 15 09:33:38 2015 +0000
@@ -4,7 +4,7 @@
////////////////////////////////////////////////////////////////////////////////
#include "NyLPC_net.h"
-
+#include "netif/INetIf.h"
namespace MiMic
{
@@ -24,7 +24,7 @@
* The constructor.
* Must be call after the RTOS started.
*/
- Net();
+ Net(INetif& i_netif);
virtual ~Net();
/**
* This function starts networking with configulation.
--- a/mbed/TcpSocket.cpp Wed Nov 19 14:45:17 2014 +0000
+++ b/mbed/TcpSocket.cpp Sun Mar 15 09:33:38 2015 +0000
@@ -11,7 +11,7 @@
TcpSocket::TcpSocket()
{
- this->_inst=NyLPC_cNetIf_createTcpSocketEx(NyLPC_TSocketType_TCP_NORMAL);
+ this->_inst=NyLPC_cNet_createTcpSocketEx(NyLPC_TSocketType_TCP_NORMAL);
if(this->_inst==NULL){
mbed_die();
}
--- a/mbed/UdpSocket.cpp Wed Nov 19 14:45:17 2014 +0000
+++ b/mbed/UdpSocket.cpp Sun Mar 15 09:33:38 2015 +0000
@@ -20,9 +20,9 @@
UdpSocket::UdpSocket(unsigned short i_port,bool i_nobuffer)
{
if(i_nobuffer){
- this->_inst=NyLPC_cNetIf_createUdpSocketEx(i_port,NyLPC_TSocketType_UDP_NOBUF);
+ this->_inst=NyLPC_cNet_createUdpSocketEx(i_port,NyLPC_TSocketType_UDP_NOBUF);
}else{
- this->_inst=NyLPC_cNetIf_createUdpSocketEx(i_port,NyLPC_TSocketType_UDP_NORMAL);
+ this->_inst=NyLPC_cNet_createUdpSocketEx(i_port,NyLPC_TSocketType_UDP_NORMAL);
}
if(this->_inst==NULL){
mbed_die();
--- a/mbed/mimic.h Wed Nov 19 14:45:17 2014 +0000 +++ b/mbed/mimic.h Sun Mar 15 09:33:38 2015 +0000 @@ -25,4 +25,8 @@ #include "mod/ModJsonRpc.h" #include "LocalFileSystem2.h" +#include "netif/INetIf.h" +#include "netif/MiMicNetIf.h" + + using namespace MiMic; \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed/netif/INetIf.h Sun Mar 15 09:33:38 2015 +0000
@@ -0,0 +1,27 @@
+/*
+ * INetIf.h
+ *
+ * Created on: 2014/12/12
+ * Author: nyatla
+ */
+
+#pragma once
+#ifndef INETIF_H_
+#define INETIF_H_
+
+#include "NyLPC_net.h"
+#include "NyLPC_netif.h"
+
+namespace MiMic
+{
+ class INetif
+ {
+ public:
+ virtual const NyLPC_TiNetInterface_Interface* getInterface()=0;
+ };
+}
+
+
+
+#endif /* INETIF_H_ */
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed/netif/MiMicNetIf.cpp Sun Mar 15 09:33:38 2015 +0000
@@ -0,0 +1,26 @@
+
+////////////////////////////////////////////////////////////////////////////////
+// Httpd.h
+////////////////////////////////////////////////////////////////////////////////
+
+#include "MiMicNetIf.h"
+#include "mbed.h"
+
+namespace MiMic
+{
+ MiMicNetIf::MiMicNetIf(){
+ }
+ MiMicNetIf::~MiMicNetIf()
+ {
+// NyLPC_cMiMicIpNetIf_finalize();
+ }
+ const NyLPC_TiNetInterface_Interface* MiMicNetIf::getInterface()
+ {
+ if(this->_inst==NULL){
+ this->_inst=NyLPC_cMiMicIpNetIf_getNetInterface();
+ }
+ return this->_inst;
+ }
+
+}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed/netif/MiMicNetIf.h Sun Mar 15 09:33:38 2015 +0000
@@ -0,0 +1,22 @@
+#pragma once
+////////////////////////////////////////////////////////////////////////////////
+// Httpd.h
+////////////////////////////////////////////////////////////////////////////////
+#include "NyLPC_net.h"
+#include "../netif/mimicip/NyLPC_cMiMicIpNetIf.h"
+#include "INetIf.h"
+namespace MiMic
+{
+ class MiMicNetIf : public INetif
+ {
+ public:
+ const NyLPC_TiNetInterface_Interface* _inst;
+ public:
+ MiMicNetIf();
+ virtual ~MiMicNetIf();
+ public:
+ virtual const NyLPC_TiNetInterface_Interface* getInterface();
+
+ };
+}
+
MiMic Webservice library