ot_net.h
上传用户:dangjiwu
上传日期:2013-07-19
资源大小:42019k
文件大小:11k
源码类别:

Symbian

开发平台:

Visual C++

  1. /* ***** BEGIN LICENSE BLOCK *****
  2.  * Source last modified: $Id: ot_net.h,v 1.6.36.1 2004/07/09 02:06:38 hubbe Exp $
  3.  * 
  4.  * Portions Copyright (c) 1995-2004 RealNetworks, Inc. All Rights Reserved.
  5.  * 
  6.  * The contents of this file, and the files included with this file,
  7.  * are subject to the current version of the RealNetworks Public
  8.  * Source License (the "RPSL") available at
  9.  * http://www.helixcommunity.org/content/rpsl unless you have licensed
  10.  * the file under the current version of the RealNetworks Community
  11.  * Source License (the "RCSL") available at
  12.  * http://www.helixcommunity.org/content/rcsl, in which case the RCSL
  13.  * will apply. You may also obtain the license terms directly from
  14.  * RealNetworks.  You may not use this file except in compliance with
  15.  * the RPSL or, if you have a valid RCSL with RealNetworks applicable
  16.  * to this file, the RCSL.  Please see the applicable RPSL or RCSL for
  17.  * the rights, obligations and limitations governing use of the
  18.  * contents of the file.
  19.  * 
  20.  * Alternatively, the contents of this file may be used under the
  21.  * terms of the GNU General Public License Version 2 or later (the
  22.  * "GPL") in which case the provisions of the GPL are applicable
  23.  * instead of those above. If you wish to allow use of your version of
  24.  * this file only under the terms of the GPL, and not to allow others
  25.  * to use your version of this file under the terms of either the RPSL
  26.  * or RCSL, indicate your decision by deleting the provisions above
  27.  * and replace them with the notice and other provisions required by
  28.  * the GPL. If you do not delete the provisions above, a recipient may
  29.  * use your version of this file under the terms of any one of the
  30.  * RPSL, the RCSL or the GPL.
  31.  * 
  32.  * This file is part of the Helix DNA Technology. RealNetworks is the
  33.  * developer of the Original Code and owns the copyrights in the
  34.  * portions it created.
  35.  * 
  36.  * This file, and the files included with this file, is distributed
  37.  * and made available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY
  38.  * KIND, EITHER EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS
  39.  * ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES
  40.  * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET
  41.  * ENJOYMENT OR NON-INFRINGEMENT.
  42.  * 
  43.  * Technology Compatibility Kit Test Suite(s) Location:
  44.  *    http://www.helixcommunity.org/content/tck
  45.  * 
  46.  * Contributor(s):
  47.  * 
  48.  * ***** END LICENSE BLOCK ***** */
  49. #pragma once
  50. #ifndef _OT_NET
  51. #define _OT_NET
  52. #include "conn.h"
  53. #ifndef _MAC_MACHO
  54. #include <OpenTransport.h>
  55. #include <OpenTptInternet.h>
  56. #endif
  57. #define kBufSize 256
  58. typedef struct OTSvcInfo  // Open Transport Internet services provider info 
  59. {
  60. InetSvcRef ref; // provider reference 
  61. Boolean complete; // true when asynch operation has completed 
  62. OTResult result; // result code 
  63. void *cookie; // cookie 
  64. } OTSvcInfo;
  65. #if 0
  66. enum
  67. {
  68. netOpenDriverErr = 100,
  69. netOpenStreamErr,
  70. netLostConnectionErr,
  71. netDNRErr,
  72. netTruncatedErr
  73. };
  74. #endif
  75. // CB Added
  76. typedef struct MyOTInfo
  77. {
  78. const char*  hostName;
  79. InetHostInfo hostInfo;
  80. InetSvcRef   inetSvcRef;
  81. Boolean      complete;
  82. } MyOTInfo;
  83. struct OTCallbackInfo
  84. {
  85.     OTCallbackInfo(OTEventCode code, OTResult result, void* cookie)
  86.     {
  87.         m_Code   = code;
  88.         m_Result = result; 
  89.         m_Cookie = cookie;
  90.     }
  91.     
  92.     OTEventCode m_Code;
  93.     OTResult    m_Result; 
  94.     void*       m_Cookie;
  95. };
  96. class CHXSimpleList;
  97. class OT_net : public conn {
  98. public:
  99. /*  call new_socket() to automatically create the correct platform specific network object.
  100. The type parameter may be either HX_TCP_SOCKET or HX_UDP_SOCKET. If new_socket() returns 
  101. NULL, an error occurred and the conn object was not created. Call last_error() to get the error */
  102. static OT_net *new_socket  (UINT16 type);
  103.     ~OT_net (void);
  104. /*  call init_drivers() to do any platform specific initialization of the network drivers
  105. before calling any other functions in this class */
  106. static HX_RESULT init_drivers  (void *params);
  107. /*  close_drivers() should close any network drivers used by the program
  108.   NOTE: The program MUST not make any other calls to the network drivers
  109.   until init_drivers() has been called */
  110. static HX_RESULT close_drivers  (void *params);
  111. /*  host_to_ip_str() converts the host name to an ASCII ip address of
  112. the form "XXX.XXX.XXX.XXX" */
  113. static  HX_RESULT  host_to_ip_str (char *host, char *ip, UINT32 ulIPBufLen);
  114. /*  call done() when you are finished with the socket. Done() will close the socket.
  115. You may reuse the socket by calling init() or connect() */
  116. /* join_multicast_group() has this socket join a multicast group */
  117. // Note: Only the UDP subclass object supports multicast
  118. virtual HX_RESULT join_multicast_group 
  119.     (ULONG32 addr, ULONG32 if_addr = HX_INADDR_ANY) {return HXR_INVALID_OPERATION;};
  120. virtual HX_RESULT leave_multicast_group
  121.     (ULONG32 addr, ULONG32 if_addr = HX_INADDR_ANY) {return HXR_INVALID_OPERATION;};
  122. virtual HX_RESULT set_broadcast(BOOL enable) {return HXR_INVALID_OPERATION;};
  123. virtual HX_RESULT set_multicast_if(UINT32 ulInterface){return HXR_INVALID_OPERATION;};
  124. virtual void done (void);
  125. virtual ULONG32     AddRef     (void);
  126. virtual ULONG32     Release     (void);
  127. virtual HX_RESULT init (UINT32 local_addr,
  128.  UINT16  port, 
  129.  UINT16  blocking=0) = 0;
  130.  
  131. virtual HX_RESULT listen (ULONG32 ulLocalAddr,
  132.  UINT16 port,
  133.  UINT16  backlog,
  134.  UINT16 blocking,
  135.  ULONG32 ulPlatform) = 0;
  136. virtual HX_RESULT connect (const char *host, 
  137.  UINT16  port,
  138.  UINT16  blocking=0,
  139.  ULONG32 ulPlatform=0 ) = 0;
  140. virtual HX_RESULT blocking (void);
  141. virtual HX_RESULT nonblocking (void);
  142. virtual HX_RESULT read (void  *buf, 
  143.  UINT16  *size) = 0;
  144. virtual HX_RESULT readfrom (REF(IHXBuffer*)   pBuffer,
  145.  REF(UINT32)     ulAddress,
  146.  REF(UINT16)     ulPort) = 0;
  147. virtual HX_RESULT write (void  *buf,
  148.  UINT16  *size) = 0;
  149. virtual HX_RESULT writeto (void  *buf,
  150.  UINT16  *size, 
  151.  ULONG32  addr,
  152.  UINT16  port) {return HXR_INVALID_OPERATION;};
  153. virtual ULONG32 get_addr (void) {return mRemoteHost;};
  154. virtual UINT16 get_local_port (void) {return mLocalPort;};
  155.  
  156. // Open Tranport Stuff
  157. /* NetHaveOT() returns true if Open Transport TCP is installed and available */
  158. static Boolean NetHaveOT  (void);
  159. /* NetInit  initializes the Open Transport drivers */
  160. static  HX_RESULT  NetInit  (void);
  161. /*  NetInit  looks up the IP address of host, and returns the IP address in addr
  162. if the host string contains :port, then the port is returned in port 
  163. else the default port specified by defaultPort is returned in port */
  164. static HX_RESULT lookup_host  (char *name, 
  165.  ULONG32 *addr, 
  166.  UINT16 *port,
  167.  UINT16 defaultPort = 0);
  168. virtual HX_RESULT dns_find_ip_addr (const char * host, UINT16 blocking=0);
  169. virtual BOOL dns_ip_addr_found(BOOL * valid, ULONG32 *addr);
  170. static HX_RESULT  NetGetMyAddr  (unsigned long *addr);
  171. static  HX_RESULT           NetGetIfaceInfo(InetInterfaceInfo* ifaceInfo);
  172. protected:
  173. OT_net (void);
  174. static Boolean  sCheckedOT; // have we checked already for OT
  175. static Boolean  sHaveOT; // TRUE: OT and OT TCP are present
  176. static  Boolean  sMacAddressValid;
  177. static  Boolean  sMacAddressStrValid;
  178. static  ULONG32  sMacAddress;
  179. static  char  sMacAddrStr[16]; /* Flawfinder: ignore */
  180. // Open Tranport Stuff
  181. HX_RESULT OTWait  (void);
  182. static HX_RESULT OTSvcWait  (OTSvcInfo *svcInfo);
  183. static pascal void  NotifyProc      (OT_net *s, 
  184.       OTEventCode code,
  185.       OTResult result, 
  186.       void *cookie);
  187. static pascal void  SvcNotifyProc  (void *stream, 
  188.  OTEventCode code,
  189.  OTResult result, 
  190.  void *cookie );
  191. static pascal void MyOTNotifyProc
  192. (
  193. void*  contextPtr, 
  194. OTEventCode  code,
  195. OTResult  result, 
  196. void*  cookie
  197. );
  198. static pascal void UDPTCPNotifyProc
  199. (
  200. void*  contextPtr, 
  201. OTEventCode  code,
  202. OTResult  result, 
  203. void*  cookie
  204. );
  205. static  HX_RESULT  OpenInetServices (OTSvcInfo *svcInfo);
  206. static HX_RESULT  NetGetMyAddrStr (char *addrStr);
  207.    HX_RESULT  NetNameToAddr  (char *name, 
  208.  unsigned short defaultPort, 
  209.  unsigned long *addr, 
  210.  unsigned short *port);
  211. static HX_RESULT NetAddrToName  (unsigned long addr, 
  212.  InetDomainName name);
  213. char *mActiveName;
  214. ULONG32 mRemoteHost; // IP address of server
  215. UINT16 mRemotePort; // port number on server
  216. UINT16  mLocalPort; // local port number */
  217. LONG32  mResponseCode; // last response code received on stream 
  218. Boolean  mClosing; // true when closing stream 
  219. Boolean  mOtherSideHasClosed; // true when other side has closed its end of the stream 
  220. Boolean  mWeHaveClosed; // true when we have closed our end of the stream 
  221. Boolean  mRelease; // true when stream should be released 
  222. Boolean mStartedReceivingData;  // used by Release to determine if ok to OTSndOrderlyDisconnect 
  223. Boolean mDataArrived; // flag to indicate data is waiting to be read
  224. Boolean mDataFlowOn; // flag to indicate data flow control is currently on
  225. EndpointRef mRef; // endpoint reference 
  226. Boolean  mComplete; // true when asynch operation has completed 
  227. OTEventCode mCode; // event code 
  228. OTResult  mResult; // result 
  229. void  *mCookie; // cookie 
  230. char  mBuf[kBufSize]; // data buffer /* Flawfinder: ignore */
  231. HX_RESULT mAsyncError;
  232. LONG32 m_lRefCount;
  233. CHXSimpleList* m_pPendingCallbackListOne;
  234. CHXSimpleList* m_pPendingCallbackListTwo;
  235. BOOL m_bUsingListOne;
  236. BOOL m_bUsingListTwo;
  237. BOOL m_bIsQuitting;
  238. BOOL   m_bDeferredTaskPending;
  239. //#define _USE_OT_DEFER 1
  240. #ifdef _USE_OT_DEFER
  241. long    m_OTDeferredCookie;
  242.      static pascal void DeferredTaskProc(void* param);
  243. #else
  244. DeferredTask m_DeferredTaskStruct;
  245.      static pascal void DeferredTaskProc(long param);
  246. #endif
  247.     
  248.     void AddToThePendingList(void* pNode);
  249.     void CleanupPendingLists();
  250.     void ProcessPendingCallbacks();
  251. virtual void ProcessCmd(OTEventCode code, OTResult result, void* cookie) {};
  252. static OTResult GetFourByteOption(EndpointRef ep,
  253.                            OTXTILevel level,
  254.                            OTXTIName  name,
  255.                            UInt32   *value);
  256.                            
  257. static OTResult SetFourByteOption(EndpointRef ep,
  258.                            OTXTILevel level,
  259.                            OTXTIName  name,
  260.                            UInt32    value);
  261. #ifdef _CARBON
  262. static OTClientContextPtr sOToutClientContext;
  263. #endif
  264. };
  265. #endif // _OT_NET