OSDN Git Service

(none)
[hos/hos-v4a.git] / aplfw / driver / tcpip / tcpip / tcpip_read.c
1 /** 
2  *  Hyper Operating System  Application Framework
3  *
4  * @file  tcpip.h
5  * @brief %jp{TCP/IP プロトコル}
6  *
7  * Copyright (C) 2006-2007 by Project HOS
8  * http://sourceforge.jp/projects/hos/
9  */
10
11
12 #include "tcpip_local.h"
13
14
15 /* IPパケット受信 */
16 FILE_SIZE TcpIp_Read(C_DRVOBJ *pDrvObj, C_FILEOBJ *pFileObj, void *pBuf, FILE_SIZE Size)
17 {
18         C_TCPIP         *self;
19         C_TCPIPFILE     *pFile;
20         int                     iRecvSize;
21         
22         /* upper cast */
23         self  = (C_TCPIP *)pDrvObj;
24         pFile = (C_TCPIPFILE *)pFileObj;
25         
26         
27         if ( pFile->iType == TCPIPFILE_TYPE_UDP )
28         {
29                 unsigned short uhUdpSize;
30                 
31                 while ( StreamBuf_RefDataSize(&pFile->RecvBuf) < sizeof(uhUdpSize) + sizeof(T_TCPIP_ADDRESS) )
32                 {
33                         SysEvt_Wait(pFile->hEvtRecv);
34                 }
35                 
36                 StreamBuf_RecvData(&pFile->RecvBuf, &uhUdpSize, sizeof(uhUdpSize));
37                 StreamBuf_RecvData(&pFile->RecvBuf, pBuf, sizeof(T_TCPIP_ADDRESS) + (uhUdpSize - 8));
38                 
39                 iRecvSize = sizeof(T_TCPIP_ADDRESS) + (uhUdpSize - 8);
40         }
41         
42         return iRecvSize;
43 }
44
45
46 /* endof file */