OSDN Git Service

(none)
[hos/hos-v4a.git] / aplfw / driver / tcpip / tcpip / tcpip_open.c
1 /** 
2  *  Hyper Operating System  Application Framework
3  *
4  * @file  ipether.h
5  * @brief %jp{Ether上にIPプロトコルを実装(つまりMAC層近辺)}
6  *
7  * Copyright (C) 2006-2007 by Project HOS
8  * http://sourceforge.jp/projects/hos/
9  */
10
11
12 #include <stdlib.h>
13 #include <string.h>
14 #include "tcpip_local.h"
15
16
17 HANDLE TcpIp_Open(C_DRVOBJ *pDrvObj, const char *pszPath, int iMode)
18 {
19         C_TCPIP         *self;
20         C_TCPIPFILE     *pFile;
21         
22         /* upper cast */
23         self = (C_TCPIP *)pDrvObj;
24
25         /* create file descriptor */
26         if ( (pFile = SysMem_Alloc(sizeof(C_TCPIPFILE))) == NULL )
27         {
28                 return HANDLE_NULL;
29         }
30         ChrFile_Create(&pFile->ChrFile, pDrvObj, NULL);
31         StreamBuf_Create(&pFile->RecvBuf, TCPIPFILE_RECV_BUFSIZE, pFile->ubRecvBuf);
32         pFile->hEvtRecv = SysEvt_Create();
33         
34         /* デバイスオープン処理 */
35         if ( self->iOpenCount++ == 0 )
36         {
37         }
38         
39         /* オープン処理 */
40         if ( strncmp(pszPath, "udp:", 4) == 0 )
41         {
42                 /* UDPポートオープン */
43                 pFile->iType     = TCPIPFILE_TYPE_UDP;
44                 pFile->uhPortNum = (unsigned short)atoi(&pszPath[4]);
45                 
46                 /* リストに登録 */
47                 if ( self->pUdpHead == NULL )
48                 {
49                         pFile->pNext   = pFile;
50                         pFile->pPrev   = pFile;
51                         self->pUdpHead = pFile;
52                 }
53                 else
54                 {
55                         pFile->pNext = self->pUdpHead;
56                         pFile->pPrev = pFile->pPrev;
57                         pFile->pNext->pPrev = pFile;
58                         pFile->pPrev->pNext = pFile;                    
59                 }
60         }
61         
62         return (HANDLE)pFile;
63 }
64
65
66 /* end of file */