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
core/uip/NyLPC_cIPv4.c@37:fc4b4fd6a649, 2013-06-19 (annotated)
- Committer:
- nyatla
- Date:
- Wed Jun 19 09:33:01 2013 +0000
- Revision:
- 37:fc4b4fd6a649
- Parent:
- 12:efe841863fc8
- Child:
- 43:a182f2b5ff41
update; MiMic Core r263; add mDNS service,DHCP client,APIPA client
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| nyatla | 0:142ee8b12fef | 1 | /********************************************************************************* |
| nyatla | 0:142ee8b12fef | 2 | * PROJECT: MiMic |
| nyatla | 0:142ee8b12fef | 3 | * -------------------------------------------------------------------------------- |
| nyatla | 0:142ee8b12fef | 4 | * |
| nyatla | 0:142ee8b12fef | 5 | * This file is part of MiMic |
| nyatla | 0:142ee8b12fef | 6 | * Copyright (C)2011 Ryo Iizuka |
| nyatla | 0:142ee8b12fef | 7 | * |
| nyatla | 0:142ee8b12fef | 8 | * MiMic is free software: you can redistribute it and/or modify |
| nyatla | 0:142ee8b12fef | 9 | * it under the terms of the GNU Lesser General Public License as published |
| nyatla | 0:142ee8b12fef | 10 | * by the Free Software Foundation, either version 3 of the License, or |
| nyatla | 0:142ee8b12fef | 11 | * (at your option) any later version. |
| nyatla | 0:142ee8b12fef | 12 | * |
| nyatla | 0:142ee8b12fef | 13 | * This program is distributed in the hope that it will be useful, |
| nyatla | 0:142ee8b12fef | 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| nyatla | 0:142ee8b12fef | 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| nyatla | 0:142ee8b12fef | 16 | * GNU General Public License for more details. |
| nyatla | 0:142ee8b12fef | 17 | * |
| nyatla | 0:142ee8b12fef | 18 | * You should have received a copy of the GNU Lesser General Public License |
| nyatla | 0:142ee8b12fef | 19 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
| nyatla | 0:142ee8b12fef | 20 | * |
| nyatla | 0:142ee8b12fef | 21 | * For further information please contact. |
| nyatla | 0:142ee8b12fef | 22 | * http://nyatla.jp/ |
| nyatla | 0:142ee8b12fef | 23 | * <airmail(at)ebony.plala.or.jp> or <nyatla(at)nyatla.jp> |
| nyatla | 0:142ee8b12fef | 24 | * |
| nyatla | 0:142ee8b12fef | 25 | * |
| nyatla | 0:142ee8b12fef | 26 | * Parts of this file were leveraged from uIP: |
| nyatla | 0:142ee8b12fef | 27 | * |
| nyatla | 0:142ee8b12fef | 28 | * Copyright (c) 2001-2003, Adam Dunkels. |
| nyatla | 0:142ee8b12fef | 29 | * All rights reserved. |
| nyatla | 0:142ee8b12fef | 30 | * |
| nyatla | 0:142ee8b12fef | 31 | * Redistribution and use in source and binary forms, with or without |
| nyatla | 0:142ee8b12fef | 32 | * modification, are permitted provided that the following conditions |
| nyatla | 0:142ee8b12fef | 33 | * are met: |
| nyatla | 0:142ee8b12fef | 34 | * 1. Redistributions of source code must retain the above copyright |
| nyatla | 0:142ee8b12fef | 35 | * notice, this list of conditions and the following disclaimer. |
| nyatla | 0:142ee8b12fef | 36 | * 2. Redistributions in binary form must reproduce the above copyright |
| nyatla | 0:142ee8b12fef | 37 | * notice, this list of conditions and the following disclaimer in the |
| nyatla | 0:142ee8b12fef | 38 | * documentation and/or other materials provided with the distribution. |
| nyatla | 0:142ee8b12fef | 39 | * 3. The name of the author may not be used to endorse or promote |
| nyatla | 0:142ee8b12fef | 40 | * products derived from this software without specific prior |
| nyatla | 0:142ee8b12fef | 41 | * written permission. |
| nyatla | 0:142ee8b12fef | 42 | * |
| nyatla | 0:142ee8b12fef | 43 | * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS |
| nyatla | 0:142ee8b12fef | 44 | * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
| nyatla | 0:142ee8b12fef | 45 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
| nyatla | 0:142ee8b12fef | 46 | * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY |
| nyatla | 0:142ee8b12fef | 47 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
| nyatla | 0:142ee8b12fef | 48 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE |
| nyatla | 0:142ee8b12fef | 49 | * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
| nyatla | 0:142ee8b12fef | 50 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, |
| nyatla | 0:142ee8b12fef | 51 | * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING |
| nyatla | 0:142ee8b12fef | 52 | * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
| nyatla | 0:142ee8b12fef | 53 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| nyatla | 0:142ee8b12fef | 54 | */ |
| nyatla | 0:142ee8b12fef | 55 | #include "NyLPC_stdlib.h" |
| nyatla | 37:fc4b4fd6a649 | 56 | #include "NyLPC_uip.h" |
| nyatla | 0:142ee8b12fef | 57 | #include "NyLPC_cIPv4.h" |
| nyatla | 0:142ee8b12fef | 58 | #include "NyLPC_cIPv4Payload_protected.h" |
| nyatla | 0:142ee8b12fef | 59 | #include "NyLPC_cTcpSocket_protected.h" |
| nyatla | 37:fc4b4fd6a649 | 60 | #include "NyLPC_cUdpSocket_protected.h" |
| nyatla | 0:142ee8b12fef | 61 | #include "NyLPC_cTcpListener_protected.h" |
| nyatla | 0:142ee8b12fef | 62 | #include "NyLPC_cIPv4IComp_protected.h" |
| nyatla | 0:142ee8b12fef | 63 | #include "NyLPC_cUipService_protected.h" |
| nyatla | 0:142ee8b12fef | 64 | |
| nyatla | 0:142ee8b12fef | 65 | |
| nyatla | 0:142ee8b12fef | 66 | |
| nyatla | 0:142ee8b12fef | 67 | /**************************************************** |
| nyatla | 0:142ee8b12fef | 68 | * Socketテーブルに関する宣言 |
| nyatla | 0:142ee8b12fef | 69 | ***************************************************/ |
| nyatla | 0:142ee8b12fef | 70 | |
| nyatla | 37:fc4b4fd6a649 | 71 | #define cSocketTbl_initialize(i_inst,buf) NyLPC_cPtrTbl_initialize(i_inst,buf,NyLPC_cIPv4_MAX_SOCKET) |
| nyatla | 37:fc4b4fd6a649 | 72 | #define cSocketTbl_finalize(i_inst) |
| nyatla | 0:142ee8b12fef | 73 | |
| nyatla | 0:142ee8b12fef | 74 | /** |
| nyatla | 37:fc4b4fd6a649 | 75 | * 条件に一致する、アクティブなTCPソケットオブジェクトを取得します。 |
| nyatla | 0:142ee8b12fef | 76 | * この関数は、ローカルIPが一致していると仮定して検索をします。 |
| nyatla | 0:142ee8b12fef | 77 | * @param i_rip |
| nyatla | 0:142ee8b12fef | 78 | * リモートIPアドレスを指定します。 |
| nyatla | 0:142ee8b12fef | 79 | */ |
| nyatla | 37:fc4b4fd6a649 | 80 | static NyLPC_TcTcpSocket_t* cSocketTbl_getMatchTcpSocket( |
| nyatla | 0:142ee8b12fef | 81 | NyLPC_TcPtrTbl_t* i_inst, |
| nyatla | 0:142ee8b12fef | 82 | NyLPC_TUInt16 i_lport, |
| nyatla | 0:142ee8b12fef | 83 | struct NyLPC_TIPv4Addr i_rip, |
| nyatla | 0:142ee8b12fef | 84 | NyLPC_TUInt16 i_rport) |
| nyatla | 0:142ee8b12fef | 85 | { |
| nyatla | 37:fc4b4fd6a649 | 86 | NyLPC_TcBaseSocket_t** p=(NyLPC_TcBaseSocket_t**)(i_inst->buf); |
| nyatla | 37:fc4b4fd6a649 | 87 | NyLPC_TcTcpSocket_t* tp; |
| nyatla | 37:fc4b4fd6a649 | 88 | int i; |
| nyatla | 37:fc4b4fd6a649 | 89 | //一致するポートを検索 |
| nyatla | 37:fc4b4fd6a649 | 90 | for(i=i_inst->size-1;i>=0;i--){ |
| nyatla | 37:fc4b4fd6a649 | 91 | if(p[i]==NULL || p[i]->_typeid!=NyLPC_TcBaseSocket_TYPEID_TCP_SOCK){ |
| nyatla | 37:fc4b4fd6a649 | 92 | continue; |
| nyatla | 37:fc4b4fd6a649 | 93 | } |
| nyatla | 37:fc4b4fd6a649 | 94 | tp=(NyLPC_TcTcpSocket_t*)p[i]; |
| nyatla | 37:fc4b4fd6a649 | 95 | if(tp->tcpstateflags==UIP_CLOSED){ |
| nyatla | 37:fc4b4fd6a649 | 96 | continue; |
| nyatla | 37:fc4b4fd6a649 | 97 | } |
| nyatla | 37:fc4b4fd6a649 | 98 | //パラメータの一致チェック |
| nyatla | 37:fc4b4fd6a649 | 99 | if(i_lport!=tp->uip_connr.lport || i_rport!= tp->uip_connr.rport || i_rip.v!=tp->uip_connr.ripaddr.v) |
| nyatla | 37:fc4b4fd6a649 | 100 | { |
| nyatla | 37:fc4b4fd6a649 | 101 | continue; |
| nyatla | 37:fc4b4fd6a649 | 102 | } |
| nyatla | 37:fc4b4fd6a649 | 103 | return tp; |
| nyatla | 37:fc4b4fd6a649 | 104 | } |
| nyatla | 37:fc4b4fd6a649 | 105 | return NULL; |
| nyatla | 37:fc4b4fd6a649 | 106 | } |
| nyatla | 37:fc4b4fd6a649 | 107 | static NyLPC_TcUdpSocket_t* cSocketTbl_getMatchUdpSocket( |
| nyatla | 37:fc4b4fd6a649 | 108 | NyLPC_TcPtrTbl_t* i_inst, |
| nyatla | 37:fc4b4fd6a649 | 109 | NyLPC_TUInt16 i_lport) |
| nyatla | 37:fc4b4fd6a649 | 110 | { |
| nyatla | 37:fc4b4fd6a649 | 111 | NyLPC_TcBaseSocket_t** p=(NyLPC_TcBaseSocket_t**)(i_inst->buf); |
| nyatla | 37:fc4b4fd6a649 | 112 | NyLPC_TcUdpSocket_t* tp; |
| nyatla | 37:fc4b4fd6a649 | 113 | int i; |
| nyatla | 37:fc4b4fd6a649 | 114 | //一致するポートを検索 |
| nyatla | 37:fc4b4fd6a649 | 115 | for(i=i_inst->size-1;i>=0;i--){ |
| nyatla | 37:fc4b4fd6a649 | 116 | if(p[i]==NULL || p[i]->_typeid!=NyLPC_TcBaseSocket_TYPEID_UDP_SOCK){ |
| nyatla | 37:fc4b4fd6a649 | 117 | continue; |
| nyatla | 37:fc4b4fd6a649 | 118 | } |
| nyatla | 37:fc4b4fd6a649 | 119 | tp=(NyLPC_TcUdpSocket_t*)p[i]; |
| nyatla | 37:fc4b4fd6a649 | 120 | //パラメータの一致チェック |
| nyatla | 37:fc4b4fd6a649 | 121 | if(i_lport!=tp->uip_udp_conn.lport) |
| nyatla | 37:fc4b4fd6a649 | 122 | { |
| nyatla | 37:fc4b4fd6a649 | 123 | continue; |
| nyatla | 37:fc4b4fd6a649 | 124 | } |
| nyatla | 37:fc4b4fd6a649 | 125 | return tp; |
| nyatla | 37:fc4b4fd6a649 | 126 | } |
| nyatla | 37:fc4b4fd6a649 | 127 | return NULL; |
| nyatla | 37:fc4b4fd6a649 | 128 | } |
| nyatla | 37:fc4b4fd6a649 | 129 | static NyLPC_TcUdpSocket_t* cSocketTbl_getMatchMulticastUdpSocket( |
| nyatla | 37:fc4b4fd6a649 | 130 | NyLPC_TcPtrTbl_t* i_inst, |
| nyatla | 37:fc4b4fd6a649 | 131 | struct NyLPC_TIPv4Addr* i_mcast_ip, |
| nyatla | 37:fc4b4fd6a649 | 132 | NyLPC_TUInt16 i_lport) |
| nyatla | 37:fc4b4fd6a649 | 133 | { |
| nyatla | 37:fc4b4fd6a649 | 134 | NyLPC_TcBaseSocket_t** p=(NyLPC_TcBaseSocket_t**)(i_inst->buf); |
| nyatla | 37:fc4b4fd6a649 | 135 | NyLPC_TcUdpSocket_t* tp; |
| nyatla | 37:fc4b4fd6a649 | 136 | int i; |
| nyatla | 37:fc4b4fd6a649 | 137 | //一致するポートを検索 |
| nyatla | 37:fc4b4fd6a649 | 138 | for(i=i_inst->size-1;i>=0;i--){ |
| nyatla | 37:fc4b4fd6a649 | 139 | if(p[i]==NULL || p[i]->_typeid!=NyLPC_TcBaseSocket_TYPEID_UDP_SOCK){ |
| nyatla | 37:fc4b4fd6a649 | 140 | continue; |
| nyatla | 37:fc4b4fd6a649 | 141 | } |
| nyatla | 37:fc4b4fd6a649 | 142 | tp=(NyLPC_TcUdpSocket_t*)p[i]; |
| nyatla | 37:fc4b4fd6a649 | 143 | //パラメータの一致チェック |
| nyatla | 37:fc4b4fd6a649 | 144 | if(i_lport!=tp->uip_udp_conn.lport || NyLPC_TIPv4Addr_isEqual(i_mcast_ip,&(tp->uip_udp_conn.lipaddr))) |
| nyatla | 37:fc4b4fd6a649 | 145 | { |
| nyatla | 37:fc4b4fd6a649 | 146 | continue; |
| nyatla | 37:fc4b4fd6a649 | 147 | } |
| nyatla | 37:fc4b4fd6a649 | 148 | return tp; |
| nyatla | 37:fc4b4fd6a649 | 149 | } |
| nyatla | 37:fc4b4fd6a649 | 150 | return NULL; |
| nyatla | 37:fc4b4fd6a649 | 151 | } |
| nyatla | 37:fc4b4fd6a649 | 152 | |
| nyatla | 37:fc4b4fd6a649 | 153 | /** |
| nyatla | 37:fc4b4fd6a649 | 154 | * i_peer番号に一致するリスナを返します。 |
| nyatla | 37:fc4b4fd6a649 | 155 | */ |
| nyatla | 37:fc4b4fd6a649 | 156 | static NyLPC_TcTcpListener_t* cSocketTbl_getListenerByPeerPort(NyLPC_TcPtrTbl_t* i_inst,NyLPC_TUInt16 i_peer_port) |
| nyatla | 37:fc4b4fd6a649 | 157 | { |
| nyatla | 37:fc4b4fd6a649 | 158 | NyLPC_TcBaseSocket_t** p=(NyLPC_TcBaseSocket_t**)(i_inst->buf); |
| nyatla | 37:fc4b4fd6a649 | 159 | NyLPC_TcTcpListener_t* lp; |
| nyatla | 0:142ee8b12fef | 160 | int i; |
| nyatla | 0:142ee8b12fef | 161 | //一致するポートを検索して、acceptをコールする。 |
| nyatla | 0:142ee8b12fef | 162 | for(i=i_inst->size-1;i>=0;i--){ |
| nyatla | 37:fc4b4fd6a649 | 163 | if(p[i]==NULL || p[i]->_typeid!=NyLPC_TcBaseSocket_TYPEID_TCP_LISTENER){ |
| nyatla | 0:142ee8b12fef | 164 | continue; |
| nyatla | 0:142ee8b12fef | 165 | } |
| nyatla | 37:fc4b4fd6a649 | 166 | lp=(NyLPC_TcTcpListener_t*)p[i]; |
| nyatla | 37:fc4b4fd6a649 | 167 | if(lp->_port!=i_peer_port){ |
| nyatla | 0:142ee8b12fef | 168 | continue; |
| nyatla | 0:142ee8b12fef | 169 | } |
| nyatla | 37:fc4b4fd6a649 | 170 | return lp; |
| nyatla | 0:142ee8b12fef | 171 | } |
| nyatla | 0:142ee8b12fef | 172 | return NULL; |
| nyatla | 0:142ee8b12fef | 173 | } |
| nyatla | 37:fc4b4fd6a649 | 174 | |
| nyatla | 0:142ee8b12fef | 175 | /** |
| nyatla | 0:142ee8b12fef | 176 | * テーブルにある有効なソケットのperiodicをすべて呼び出します。 |
| nyatla | 0:142ee8b12fef | 177 | */ |
| nyatla | 0:142ee8b12fef | 178 | static void cSocketTbl_callPeriodic( |
| nyatla | 0:142ee8b12fef | 179 | NyLPC_TcPtrTbl_t* i_inst) |
| nyatla | 0:142ee8b12fef | 180 | { |
| nyatla | 37:fc4b4fd6a649 | 181 | NyLPC_TcBaseSocket_t** p=(NyLPC_TcBaseSocket_t**)(i_inst->buf); |
| nyatla | 37:fc4b4fd6a649 | 182 | int i; |
| nyatla | 37:fc4b4fd6a649 | 183 | for(i=i_inst->size-1;i>=0;i--){ |
| nyatla | 37:fc4b4fd6a649 | 184 | if(p[i]==NULL){ |
| nyatla | 37:fc4b4fd6a649 | 185 | continue; |
| nyatla | 37:fc4b4fd6a649 | 186 | } |
| nyatla | 37:fc4b4fd6a649 | 187 | switch(p[i]->_typeid){ |
| nyatla | 37:fc4b4fd6a649 | 188 | case NyLPC_TcBaseSocket_TYPEID_TCP_SOCK: |
| nyatla | 37:fc4b4fd6a649 | 189 | //downcast! |
| nyatla | 37:fc4b4fd6a649 | 190 | NyLPC_cTcpSocket_periodic((NyLPC_TcTcpSocket_t*)(p[i])); |
| nyatla | 37:fc4b4fd6a649 | 191 | break; |
| nyatla | 37:fc4b4fd6a649 | 192 | case NyLPC_TcBaseSocket_TYPEID_UDP_SOCK: |
| nyatla | 37:fc4b4fd6a649 | 193 | NyLPC_cUdpSocket_periodic((NyLPC_TcUdpSocket_t*)(p[i])); |
| nyatla | 37:fc4b4fd6a649 | 194 | break; |
| nyatla | 37:fc4b4fd6a649 | 195 | default: |
| nyatla | 37:fc4b4fd6a649 | 196 | continue; |
| nyatla | 37:fc4b4fd6a649 | 197 | } |
| nyatla | 37:fc4b4fd6a649 | 198 | } |
| nyatla | 37:fc4b4fd6a649 | 199 | } |
| nyatla | 37:fc4b4fd6a649 | 200 | |
| nyatla | 37:fc4b4fd6a649 | 201 | /** |
| nyatla | 37:fc4b4fd6a649 | 202 | * テーブルにある有効なソケットのstartを全て呼び出します。 |
| nyatla | 37:fc4b4fd6a649 | 203 | */ |
| nyatla | 37:fc4b4fd6a649 | 204 | static void cSocketTbl_callSocketStart( |
| nyatla | 37:fc4b4fd6a649 | 205 | NyLPC_TcPtrTbl_t* i_inst, |
| nyatla | 37:fc4b4fd6a649 | 206 | const NyLPC_TcIPv4Config_t* i_cfg) |
| nyatla | 37:fc4b4fd6a649 | 207 | { |
| nyatla | 37:fc4b4fd6a649 | 208 | NyLPC_TcBaseSocket_t** p=(NyLPC_TcBaseSocket_t**)(i_inst->buf); |
| nyatla | 0:142ee8b12fef | 209 | int i; |
| nyatla | 0:142ee8b12fef | 210 | for(i=i_inst->size-1;i>=0;i--){ |
| nyatla | 0:142ee8b12fef | 211 | if(p[i]==NULL){ |
| nyatla | 0:142ee8b12fef | 212 | continue; |
| nyatla | 0:142ee8b12fef | 213 | } |
| nyatla | 37:fc4b4fd6a649 | 214 | switch(p[i]->_typeid){ |
| nyatla | 37:fc4b4fd6a649 | 215 | case NyLPC_TcBaseSocket_TYPEID_UDP_SOCK: |
| nyatla | 37:fc4b4fd6a649 | 216 | NyLPC_cUdpSocket_startService((NyLPC_TcUdpSocket_t*)(p[i]),i_cfg); |
| nyatla | 37:fc4b4fd6a649 | 217 | break; |
| nyatla | 37:fc4b4fd6a649 | 218 | case NyLPC_TcBaseSocket_TYPEID_TCP_SOCK: |
| nyatla | 37:fc4b4fd6a649 | 219 | NyLPC_cTcpSocket_startService((NyLPC_TcTcpSocket_t*)(p[i]),i_cfg); |
| nyatla | 37:fc4b4fd6a649 | 220 | break; |
| nyatla | 37:fc4b4fd6a649 | 221 | default: |
| nyatla | 37:fc4b4fd6a649 | 222 | continue; |
| nyatla | 37:fc4b4fd6a649 | 223 | } |
| nyatla | 0:142ee8b12fef | 224 | } |
| nyatla | 0:142ee8b12fef | 225 | } |
| nyatla | 37:fc4b4fd6a649 | 226 | /** |
| nyatla | 37:fc4b4fd6a649 | 227 | * テーブルにある有効なソケットのstartを全て呼び出します。 |
| nyatla | 37:fc4b4fd6a649 | 228 | */ |
| nyatla | 37:fc4b4fd6a649 | 229 | static void cSocketTbl_callSocketStop( |
| nyatla | 37:fc4b4fd6a649 | 230 | NyLPC_TcPtrTbl_t* i_inst) |
| nyatla | 37:fc4b4fd6a649 | 231 | { |
| nyatla | 37:fc4b4fd6a649 | 232 | NyLPC_TcBaseSocket_t** p=(NyLPC_TcBaseSocket_t**)(i_inst->buf); |
| nyatla | 37:fc4b4fd6a649 | 233 | int i; |
| nyatla | 37:fc4b4fd6a649 | 234 | for(i=i_inst->size-1;i>=0;i--){ |
| nyatla | 37:fc4b4fd6a649 | 235 | if(p[i]==NULL){ |
| nyatla | 37:fc4b4fd6a649 | 236 | continue; |
| nyatla | 37:fc4b4fd6a649 | 237 | } |
| nyatla | 37:fc4b4fd6a649 | 238 | switch(p[i]->_typeid){ |
| nyatla | 37:fc4b4fd6a649 | 239 | case NyLPC_TcBaseSocket_TYPEID_UDP_SOCK: |
| nyatla | 37:fc4b4fd6a649 | 240 | NyLPC_cUdpSocket_stopService((NyLPC_TcUdpSocket_t*)(p[i])); |
| nyatla | 37:fc4b4fd6a649 | 241 | break; |
| nyatla | 37:fc4b4fd6a649 | 242 | case NyLPC_TcBaseSocket_TYPEID_TCP_SOCK: |
| nyatla | 37:fc4b4fd6a649 | 243 | NyLPC_cTcpSocket_stopService((NyLPC_TcTcpSocket_t*)(p[i])); |
| nyatla | 37:fc4b4fd6a649 | 244 | break; |
| nyatla | 37:fc4b4fd6a649 | 245 | default: |
| nyatla | 37:fc4b4fd6a649 | 246 | continue; |
| nyatla | 37:fc4b4fd6a649 | 247 | } |
| nyatla | 37:fc4b4fd6a649 | 248 | } |
| nyatla | 37:fc4b4fd6a649 | 249 | } |
| nyatla | 37:fc4b4fd6a649 | 250 | |
| nyatla | 37:fc4b4fd6a649 | 251 | /**************************************************** |
| nyatla | 37:fc4b4fd6a649 | 252 | * NyLPC_cIPv4 |
| nyatla | 37:fc4b4fd6a649 | 253 | ***************************************************/ |
| nyatla | 0:142ee8b12fef | 254 | |
| nyatla | 0:142ee8b12fef | 255 | /** |
| nyatla | 0:142ee8b12fef | 256 | * Static関数 |
| nyatla | 0:142ee8b12fef | 257 | */ |
| nyatla | 0:142ee8b12fef | 258 | |
| nyatla | 0:142ee8b12fef | 259 | static NyLPC_TBool tcp_rx( |
| nyatla | 0:142ee8b12fef | 260 | NyLPC_TcIPv4_t* i_inst, |
| nyatla | 0:142ee8b12fef | 261 | NyLPC_TcIPv4Payload_t* i_ipp); |
| nyatla | 37:fc4b4fd6a649 | 262 | static NyLPC_TBool udp_rx( |
| nyatla | 37:fc4b4fd6a649 | 263 | NyLPC_TcIPv4_t* i_inst, |
| nyatla | 37:fc4b4fd6a649 | 264 | NyLPC_TcIPv4Payload_t* i_ipp); |
| nyatla | 0:142ee8b12fef | 265 | |
| nyatla | 0:142ee8b12fef | 266 | /** |
| nyatla | 0:142ee8b12fef | 267 | * See Header file. |
| nyatla | 0:142ee8b12fef | 268 | */ |
| nyatla | 0:142ee8b12fef | 269 | void NyLPC_cIPv4_initialize( |
| nyatla | 0:142ee8b12fef | 270 | NyLPC_TcIPv4_t* i_inst) |
| nyatla | 0:142ee8b12fef | 271 | { |
| nyatla | 0:142ee8b12fef | 272 | //内部テーブルの初期化 |
| nyatla | 0:142ee8b12fef | 273 | cSocketTbl_initialize(&(i_inst->_socket_tbl),(void**)(i_inst->_socket_array_buf)); |
| nyatla | 0:142ee8b12fef | 274 | //instanceの初期化 |
| nyatla | 37:fc4b4fd6a649 | 275 | NyLPC_cMutex_initialize(&(i_inst->_sock_mutex)); |
| nyatla | 37:fc4b4fd6a649 | 276 | NyLPC_cMutex_initialize(&(i_inst->_listener_mutex)); |
| nyatla | 0:142ee8b12fef | 277 | i_inst->_ref_config=NULL; |
| nyatla | 0:142ee8b12fef | 278 | return; |
| nyatla | 0:142ee8b12fef | 279 | } |
| nyatla | 0:142ee8b12fef | 280 | |
| nyatla | 0:142ee8b12fef | 281 | /** |
| nyatla | 0:142ee8b12fef | 282 | * See header file. |
| nyatla | 0:142ee8b12fef | 283 | */ |
| nyatla | 0:142ee8b12fef | 284 | void NyLPC_cIPv4_finalize( |
| nyatla | 0:142ee8b12fef | 285 | NyLPC_TcIPv4_t* i_inst) |
| nyatla | 0:142ee8b12fef | 286 | { |
| nyatla | 37:fc4b4fd6a649 | 287 | cSocketTbl_finalize(&(i_inst->_socket_tbl)); |
| nyatla | 37:fc4b4fd6a649 | 288 | NyLPC_cMutex_finalize(&(i_inst->_sock_mutex)); |
| nyatla | 37:fc4b4fd6a649 | 289 | NyLPC_cMutex_finalize(&(i_inst->_listener_mutex)); |
| nyatla | 0:142ee8b12fef | 290 | return; |
| nyatla | 0:142ee8b12fef | 291 | } |
| nyatla | 0:142ee8b12fef | 292 | |
| nyatla | 0:142ee8b12fef | 293 | /** |
| nyatla | 0:142ee8b12fef | 294 | * See header file. |
| nyatla | 0:142ee8b12fef | 295 | */ |
| nyatla | 0:142ee8b12fef | 296 | void NyLPC_cIPv4_start( |
| nyatla | 0:142ee8b12fef | 297 | NyLPC_TcIPv4_t* i_inst, |
| nyatla | 0:142ee8b12fef | 298 | const NyLPC_TcIPv4Config_t* i_ref_configlation) |
| nyatla | 0:142ee8b12fef | 299 | { |
| nyatla | 0:142ee8b12fef | 300 | NyLPC_ArgAssert(i_ref_configlation!=NULL); |
| nyatla | 0:142ee8b12fef | 301 | //リストの初期化、ここでするべき?しないべき? |
| nyatla | 0:142ee8b12fef | 302 | i_inst->_ref_config=i_ref_configlation; |
| nyatla | 37:fc4b4fd6a649 | 303 | //configulationのアップデートを登録されてるソケットに通知 |
| nyatla | 37:fc4b4fd6a649 | 304 | cSocketTbl_callSocketStart(&(i_inst->_socket_tbl),i_ref_configlation); |
| nyatla | 0:142ee8b12fef | 305 | return; |
| nyatla | 0:142ee8b12fef | 306 | } |
| nyatla | 0:142ee8b12fef | 307 | |
| nyatla | 0:142ee8b12fef | 308 | /** |
| nyatla | 0:142ee8b12fef | 309 | * See header file. |
| nyatla | 0:142ee8b12fef | 310 | */ |
| nyatla | 0:142ee8b12fef | 311 | void NyLPC_cIPv4_stop( |
| nyatla | 0:142ee8b12fef | 312 | NyLPC_TcIPv4_t* i_inst) |
| nyatla | 0:142ee8b12fef | 313 | { |
| nyatla | 37:fc4b4fd6a649 | 314 | cSocketTbl_callSocketStop(&(i_inst->_socket_tbl)); |
| nyatla | 0:142ee8b12fef | 315 | i_inst->_ref_config=NULL; |
| nyatla | 0:142ee8b12fef | 316 | return; |
| nyatla | 0:142ee8b12fef | 317 | } |
| nyatla | 0:142ee8b12fef | 318 | |
| nyatla | 0:142ee8b12fef | 319 | /** |
| nyatla | 0:142ee8b12fef | 320 | * See header file. |
| nyatla | 0:142ee8b12fef | 321 | */ |
| nyatla | 0:142ee8b12fef | 322 | NyLPC_TBool NyLPC_cIPv4_addSocket( |
| nyatla | 0:142ee8b12fef | 323 | NyLPC_TcIPv4_t* i_inst, |
| nyatla | 37:fc4b4fd6a649 | 324 | NyLPC_TcBaseSocket_t* i_sock) |
| nyatla | 0:142ee8b12fef | 325 | { |
| nyatla | 0:142ee8b12fef | 326 | //当面、stop中しか成功しない。 |
| nyatla | 0:142ee8b12fef | 327 | NyLPC_Assert(!NyLPC_cUipService_isRun()); |
| nyatla | 0:142ee8b12fef | 328 | return NyLPC_cPtrTbl_add(&(i_inst->_socket_tbl),i_sock)>=0; |
| nyatla | 0:142ee8b12fef | 329 | } |
| nyatla | 0:142ee8b12fef | 330 | |
| nyatla | 0:142ee8b12fef | 331 | /** |
| nyatla | 0:142ee8b12fef | 332 | * See header file. |
| nyatla | 0:142ee8b12fef | 333 | */ |
| nyatla | 0:142ee8b12fef | 334 | NyLPC_TBool NyLPC_cIPv4_removeSocket( |
| nyatla | 0:142ee8b12fef | 335 | NyLPC_TcIPv4_t* i_inst, |
| nyatla | 37:fc4b4fd6a649 | 336 | NyLPC_TcBaseSocket_t* i_sock) |
| nyatla | 0:142ee8b12fef | 337 | { |
| nyatla | 0:142ee8b12fef | 338 | NyLPC_TInt16 i; |
| nyatla | 0:142ee8b12fef | 339 | NyLPC_Assert(!NyLPC_cUipService_isRun()); |
| nyatla | 0:142ee8b12fef | 340 | i=NyLPC_cPtrTbl_getIndex(&(i_inst->_socket_tbl),i_sock); |
| nyatla | 0:142ee8b12fef | 341 | if(i>=0){ |
| nyatla | 0:142ee8b12fef | 342 | NyLPC_cPtrTbl_remove(&(i_inst->_socket_tbl),i); |
| nyatla | 0:142ee8b12fef | 343 | return NyLPC_TBool_TRUE; |
| nyatla | 0:142ee8b12fef | 344 | } |
| nyatla | 0:142ee8b12fef | 345 | return NyLPC_TBool_FALSE; |
| nyatla | 0:142ee8b12fef | 346 | } |
| nyatla | 0:142ee8b12fef | 347 | |
| nyatla | 0:142ee8b12fef | 348 | |
| nyatla | 0:142ee8b12fef | 349 | #define IS_START(i_inst) ((i_inst)->_ref_config!=NULL) |
| nyatla | 0:142ee8b12fef | 350 | |
| nyatla | 0:142ee8b12fef | 351 | /** |
| nyatla | 0:142ee8b12fef | 352 | * 稼動時に、1s置きに呼び出す関数です。 |
| nyatla | 0:142ee8b12fef | 353 | */ |
| nyatla | 0:142ee8b12fef | 354 | void NyLPC_cIPv4_periodec(NyLPC_TcIPv4_t* i_inst) |
| nyatla | 0:142ee8b12fef | 355 | { |
| nyatla | 0:142ee8b12fef | 356 | cSocketTbl_callPeriodic(&(i_inst->_socket_tbl)); |
| nyatla | 0:142ee8b12fef | 357 | } |
| nyatla | 0:142ee8b12fef | 358 | |
| nyatla | 0:142ee8b12fef | 359 | |
| nyatla | 0:142ee8b12fef | 360 | /** |
| nyatla | 0:142ee8b12fef | 361 | * IPv4ペイロードを処理する関数。 |
| nyatla | 0:142ee8b12fef | 362 | * この関数は、パケット受信タスクから実行します。 |
| nyatla | 0:142ee8b12fef | 363 | * @param i_rx |
| nyatla | 0:142ee8b12fef | 364 | * 先頭ポインタ。 |
| nyatla | 0:142ee8b12fef | 365 | * @return |
| nyatla | 0:142ee8b12fef | 366 | * TRUEなら、i_rxに応答パケットをセットして返します。 |
| nyatla | 0:142ee8b12fef | 367 | */ |
| nyatla | 0:142ee8b12fef | 368 | NyLPC_TBool NyLPC_cIPv4_rx(NyLPC_TcIPv4_t* i_inst,void* i_rx,NyLPC_TUInt16 i_rx_size) |
| nyatla | 0:142ee8b12fef | 369 | { |
| nyatla | 0:142ee8b12fef | 370 | NyLPC_TcUipService_t* inst=_NyLPC_TcUipService_inst; |
| nyatla | 0:142ee8b12fef | 371 | NyLPC_TcIPv4Payload_t ipv4; |
| nyatla | 0:142ee8b12fef | 372 | //NOT開始状態なら受け付けないよ。 |
| nyatla | 0:142ee8b12fef | 373 | if(!IS_START(i_inst)){ |
| nyatla | 0:142ee8b12fef | 374 | NyLPC_OnErrorGoto(ERROR_DROP); |
| nyatla | 0:142ee8b12fef | 375 | } |
| nyatla | 0:142ee8b12fef | 376 | |
| nyatla | 0:142ee8b12fef | 377 | NyLPC_cIPv4Payload_initialize(&ipv4); |
| nyatla | 0:142ee8b12fef | 378 | //IPフラグメントを読出し用にセットする。 |
| nyatla | 0:142ee8b12fef | 379 | if(!NyLPC_cIPv4Payload_setRxBuf(&ipv4,i_rx,i_rx_size)) |
| nyatla | 0:142ee8b12fef | 380 | { |
| nyatla | 0:142ee8b12fef | 381 | NyLPC_OnErrorGoto(ERROR_DROP); |
| nyatla | 0:142ee8b12fef | 382 | } |
| nyatla | 0:142ee8b12fef | 383 | switch(ipv4.header->proto) |
| nyatla | 0:142ee8b12fef | 384 | { |
| nyatla | 0:142ee8b12fef | 385 | case UIP_PROTO_TCP: |
| nyatla | 0:142ee8b12fef | 386 | //TCP受信処理 |
| nyatla | 0:142ee8b12fef | 387 | return tcp_rx(i_inst,&ipv4); |
| nyatla | 0:142ee8b12fef | 388 | case UIP_PROTO_UDP: |
| nyatla | 37:fc4b4fd6a649 | 389 | //UDP処理 |
| nyatla | 37:fc4b4fd6a649 | 390 | udp_rx(i_inst,&ipv4);//r |
| nyatla | 37:fc4b4fd6a649 | 391 | return NyLPC_TBool_FALSE; |
| nyatla | 0:142ee8b12fef | 392 | case UIP_PROTO_ICMP: |
| nyatla | 0:142ee8b12fef | 393 | if(!NyLPC_cIPv4IComp_rx(&(inst->_icomp),&ipv4)){ |
| nyatla | 0:142ee8b12fef | 394 | NyLPC_OnErrorGoto(ERROR_DROP); |
| nyatla | 0:142ee8b12fef | 395 | } |
| nyatla | 0:142ee8b12fef | 396 | return NyLPC_TBool_TRUE; |
| nyatla | 0:142ee8b12fef | 397 | } |
| nyatla | 0:142ee8b12fef | 398 | return NyLPC_TBool_FALSE; |
| nyatla | 0:142ee8b12fef | 399 | ERROR_DROP: |
| nyatla | 0:142ee8b12fef | 400 | return NyLPC_TBool_FALSE; |
| nyatla | 0:142ee8b12fef | 401 | } |
| nyatla | 0:142ee8b12fef | 402 | |
| nyatla | 0:142ee8b12fef | 403 | |
| nyatla | 0:142ee8b12fef | 404 | /********************************************************************** |
| nyatla | 0:142ee8b12fef | 405 | * |
| nyatla | 0:142ee8b12fef | 406 | * public function |
| nyatla | 0:142ee8b12fef | 407 | * |
| nyatla | 0:142ee8b12fef | 408 | **********************************************************************/ |
| nyatla | 0:142ee8b12fef | 409 | |
| nyatla | 0:142ee8b12fef | 410 | |
| nyatla | 0:142ee8b12fef | 411 | static NyLPC_TBool tcp_rx( |
| nyatla | 0:142ee8b12fef | 412 | NyLPC_TcIPv4_t* i_inst, |
| nyatla | 0:142ee8b12fef | 413 | NyLPC_TcIPv4Payload_t* i_ipp) |
| nyatla | 0:142ee8b12fef | 414 | { |
| nyatla | 0:142ee8b12fef | 415 | NyLPC_TcTcpSocket_t* sock; |
| nyatla | 0:142ee8b12fef | 416 | NyLPC_TcTcpListener_t* listener; |
| nyatla | 0:142ee8b12fef | 417 | |
| nyatla | 0:142ee8b12fef | 418 | //自分自身のIPに対する呼び出し? |
| nyatla | 0:142ee8b12fef | 419 | if(!NyLPC_TIPv4Addr_isEqual(&(i_ipp->header->destipaddr),&(i_inst->_ref_config->ip_addr))) |
| nyatla | 0:142ee8b12fef | 420 | { |
| nyatla | 0:142ee8b12fef | 421 | //自分以外のパケットはドロップ |
| nyatla | 0:142ee8b12fef | 422 | goto DROP; |
| nyatla | 0:142ee8b12fef | 423 | } |
| nyatla | 0:142ee8b12fef | 424 | //チェックサムの計算 |
| nyatla | 0:142ee8b12fef | 425 | if((NyLPC_TIPv4Header_makeTcpChecksum(i_ipp->header) != 0xffff)) |
| nyatla | 0:142ee8b12fef | 426 | { |
| nyatla | 0:142ee8b12fef | 427 | //受信エラーのあるパケットはドロップ |
| nyatla | 0:142ee8b12fef | 428 | goto DROP; |
| nyatla | 0:142ee8b12fef | 429 | } |
| nyatla | 37:fc4b4fd6a649 | 430 | //アクティブなTCPソケットを探す。 |
| nyatla | 37:fc4b4fd6a649 | 431 | sock=cSocketTbl_getMatchTcpSocket(&(i_inst->_socket_tbl),i_ipp->payload.tcp->destport,i_ipp->header->srcipaddr,i_ipp->payload.tcp->srcport); |
| nyatla | 0:142ee8b12fef | 432 | if(sock!=NULL) |
| nyatla | 0:142ee8b12fef | 433 | { |
| nyatla | 0:142ee8b12fef | 434 | //既存の接続を処理 |
| nyatla | 0:142ee8b12fef | 435 | return NyLPC_cTcpSocket_parseRx(sock,i_ipp); |
| nyatla | 0:142ee8b12fef | 436 | |
| nyatla | 0:142ee8b12fef | 437 | }else{ |
| nyatla | 0:142ee8b12fef | 438 | //未知の接続 |
| nyatla | 0:142ee8b12fef | 439 | if(!NyLPC_cPtrTbl_hasEmpty(&(i_inst->_socket_tbl))){ |
| nyatla | 0:142ee8b12fef | 440 | //ソケットテーブルが不十分。RST送信 |
| nyatla | 0:142ee8b12fef | 441 | NyLPC_cIPv4Payload_setTcpReverseRstAck(i_ipp); |
| nyatla | 0:142ee8b12fef | 442 | return NyLPC_TBool_TRUE; |
| nyatla | 0:142ee8b12fef | 443 | } |
| nyatla | 0:142ee8b12fef | 444 | //このポートに対応したListenerを得る。 |
| nyatla | 37:fc4b4fd6a649 | 445 | listener=cSocketTbl_getListenerByPeerPort(&(i_inst->_socket_tbl),i_ipp->payload.tcp->destport); |
| nyatla | 0:142ee8b12fef | 446 | if(listener==NULL){ |
| nyatla | 0:142ee8b12fef | 447 | //Listen対象ではない。RST送信 |
| nyatla | 0:142ee8b12fef | 448 | NyLPC_cIPv4Payload_setTcpReverseRstAck(i_ipp); |
| nyatla | 0:142ee8b12fef | 449 | return NyLPC_TBool_TRUE; |
| nyatla | 0:142ee8b12fef | 450 | } |
| nyatla | 0:142ee8b12fef | 451 | //リスナにソケットのバインドを依頼する。 |
| nyatla | 37:fc4b4fd6a649 | 452 | sock=NyLPC_cTcpListener_makeSynRcvdSocket(listener,i_ipp); |
| nyatla | 0:142ee8b12fef | 453 | if(sock==NULL){ |
| nyatla | 0:142ee8b12fef | 454 | //Listen失敗。ドロップ |
| nyatla | 0:142ee8b12fef | 455 | goto DROP; |
| nyatla | 0:142ee8b12fef | 456 | } |
| nyatla | 0:142ee8b12fef | 457 | return NyLPC_TBool_FALSE;//LISTEN成功。送信データなし |
| nyatla | 0:142ee8b12fef | 458 | } |
| nyatla | 0:142ee8b12fef | 459 | return NyLPC_TBool_TRUE; |
| nyatla | 0:142ee8b12fef | 460 | DROP: |
| nyatla | 0:142ee8b12fef | 461 | return NyLPC_TBool_FALSE; |
| nyatla | 0:142ee8b12fef | 462 | } |
| nyatla | 0:142ee8b12fef | 463 | |
| nyatla | 0:142ee8b12fef | 464 | |
| nyatla | 0:142ee8b12fef | 465 | |
| nyatla | 37:fc4b4fd6a649 | 466 | static NyLPC_TBool udp_rx( |
| nyatla | 37:fc4b4fd6a649 | 467 | NyLPC_TcIPv4_t* i_inst, |
| nyatla | 37:fc4b4fd6a649 | 468 | NyLPC_TcIPv4Payload_t* i_ipp) |
| nyatla | 37:fc4b4fd6a649 | 469 | { |
| nyatla | 37:fc4b4fd6a649 | 470 | NyLPC_TcUdpSocket_t* sock; |
| nyatla | 37:fc4b4fd6a649 | 471 | //Multicastか調べる |
| nyatla | 37:fc4b4fd6a649 | 472 | if(NyLPC_TIPv4Addr_isEqualWithMask(&(i_ipp->header->destipaddr),&NyLPC_TIPv4Addr_MULTICAST,&NyLPC_TIPv4Addr_MULTICAST_MASK)){ |
| nyatla | 37:fc4b4fd6a649 | 473 | //Multicastパケット |
| nyatla | 37:fc4b4fd6a649 | 474 | |
| nyatla | 37:fc4b4fd6a649 | 475 | //チェックサムの計算 |
| nyatla | 37:fc4b4fd6a649 | 476 | if((NyLPC_TIPv4Header_makeTcpChecksum(i_ipp->header) != 0xffff)) |
| nyatla | 37:fc4b4fd6a649 | 477 | { |
| nyatla | 37:fc4b4fd6a649 | 478 | //受信エラーのあるパケットはドロップ |
| nyatla | 37:fc4b4fd6a649 | 479 | goto DROP; |
| nyatla | 37:fc4b4fd6a649 | 480 | } |
| nyatla | 37:fc4b4fd6a649 | 481 | //マルチキャストに参加している&&portの一致するソケットを検索 |
| nyatla | 37:fc4b4fd6a649 | 482 | sock=cSocketTbl_getMatchMulticastUdpSocket(&(i_inst->_socket_tbl),&(i_ipp->header->destipaddr),i_ipp->payload.udp->destport); |
| nyatla | 37:fc4b4fd6a649 | 483 | if(sock==NULL) |
| nyatla | 37:fc4b4fd6a649 | 484 | { |
| nyatla | 37:fc4b4fd6a649 | 485 | goto DROP; |
| nyatla | 37:fc4b4fd6a649 | 486 | } |
| nyatla | 37:fc4b4fd6a649 | 487 | }else{ |
| nyatla | 37:fc4b4fd6a649 | 488 | //ユニキャストパケット |
| nyatla | 37:fc4b4fd6a649 | 489 | |
| nyatla | 37:fc4b4fd6a649 | 490 | //自分自身のIPに対する呼び出し? |
| nyatla | 37:fc4b4fd6a649 | 491 | if(!NyLPC_TIPv4Addr_isEqual(&(i_ipp->header->destipaddr),&(i_inst->_ref_config->ip_addr))) |
| nyatla | 37:fc4b4fd6a649 | 492 | { |
| nyatla | 37:fc4b4fd6a649 | 493 | //自分以外のパケットはドロップ |
| nyatla | 37:fc4b4fd6a649 | 494 | goto DROP; |
| nyatla | 37:fc4b4fd6a649 | 495 | } |
| nyatla | 37:fc4b4fd6a649 | 496 | //チェックサムの計算 |
| nyatla | 37:fc4b4fd6a649 | 497 | if((NyLPC_TIPv4Header_makeTcpChecksum(i_ipp->header) != 0xffff)) |
| nyatla | 37:fc4b4fd6a649 | 498 | { |
| nyatla | 37:fc4b4fd6a649 | 499 | //受信エラーのあるパケットはドロップ |
| nyatla | 37:fc4b4fd6a649 | 500 | goto DROP; |
| nyatla | 37:fc4b4fd6a649 | 501 | } |
| nyatla | 37:fc4b4fd6a649 | 502 | //ポートの一致するUDPソケットを探す。 |
| nyatla | 37:fc4b4fd6a649 | 503 | sock=cSocketTbl_getMatchUdpSocket(&(i_inst->_socket_tbl),i_ipp->payload.udp->destport); |
| nyatla | 37:fc4b4fd6a649 | 504 | if(sock==NULL) |
| nyatla | 37:fc4b4fd6a649 | 505 | { |
| nyatla | 37:fc4b4fd6a649 | 506 | goto DROP; |
| nyatla | 37:fc4b4fd6a649 | 507 | } |
| nyatla | 37:fc4b4fd6a649 | 508 | } |
| nyatla | 37:fc4b4fd6a649 | 509 | //既存の接続を処理 |
| nyatla | 37:fc4b4fd6a649 | 510 | return NyLPC_cUdpSocket_parseRx(sock,i_ipp); |
| nyatla | 37:fc4b4fd6a649 | 511 | DROP: |
| nyatla | 37:fc4b4fd6a649 | 512 | return NyLPC_TBool_FALSE; |
| nyatla | 37:fc4b4fd6a649 | 513 | } |
| nyatla | 0:142ee8b12fef | 514 | |
| nyatla | 0:142ee8b12fef | 515 |
MiMic Webservice library