mac_net.cp
上传用户:zhongxx05
上传日期:2007-06-06
资源大小:33641k
文件大小:5k
源码类别:

Symbian

开发平台:

C/C++

  1. /* ***** BEGIN LICENSE BLOCK ***** 
  2.  * Version: RCSL 1.0/RPSL 1.0 
  3.  *  
  4.  * Portions Copyright (c) 1995-2002 RealNetworks, Inc. All Rights Reserved. 
  5.  *      
  6.  * The contents of this file, and the files included with this file, are 
  7.  * subject to the current version of the RealNetworks Public Source License 
  8.  * Version 1.0 (the "RPSL") available at 
  9.  * http://www.helixcommunity.org/content/rpsl unless you have licensed 
  10.  * the file under the RealNetworks Community Source License Version 1.0 
  11.  * (the "RCSL") available at http://www.helixcommunity.org/content/rcsl, 
  12.  * in which case the RCSL will apply. You may also obtain the license terms 
  13.  * directly from RealNetworks.  You may not use this file except in 
  14.  * compliance with the RPSL or, if you have a valid RCSL with RealNetworks 
  15.  * applicable to this file, the RCSL.  Please see the applicable RPSL or 
  16.  * RCSL for the rights, obligations and limitations governing use of the 
  17.  * contents of the file.  
  18.  *  
  19.  * This file is part of the Helix DNA Technology. RealNetworks is the 
  20.  * developer of the Original Code and owns the copyrights in the portions 
  21.  * it created. 
  22.  *  
  23.  * This file, and the files included with this file, is distributed and made 
  24.  * available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 
  25.  * EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES, 
  26.  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS 
  27.  * FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 
  28.  * 
  29.  * Technology Compatibility Kit Test Suite(s) Location: 
  30.  *    http://www.helixcommunity.org/content/tck 
  31.  * 
  32.  * Contributor(s): 
  33.  *  
  34.  * ***** END LICENSE BLOCK ***** */ 
  35. #include "hxcom.h"
  36. #include "Mac_net.h"
  37. #include "OT_net.h"
  38. #include "macsockets.h"
  39. #ifdef _CARBON
  40. #include "hx_moreprocesses.h"
  41. #endif
  42. Boolean Mac_net::sHasOT = FALSE;
  43. Boolean Mac_net::sNetInitialized = FALSE;
  44. Mac_net*
  45. Mac_net::new_socket(UINT16 type)
  46. {
  47. Mac_net  *c;
  48. HX_RESULT theErr = HXR_OK;
  49. if(!sNetInitialized)
  50. return(NULL);
  51. if(sHasOT)  // create Open Transport socket
  52. {
  53. c = (Mac_net *) OT_net::new_socket(type);
  54. }
  55. else 
  56. {
  57. c = NULL;
  58. }
  59. return(c);
  60. }
  61. // Mac_net should set the socket reference to a value indicating the socket is not open
  62. Mac_net::Mac_net (void)
  63. {
  64. mLastError = noErr;
  65. m_lRefCount = 0;
  66. }
  67. // ~Mac_net should close the socket if it is open
  68. Mac_net::~Mac_net(void)
  69. {
  70. }
  71. Boolean 
  72. Mac_net::CheckForCancel(void)
  73. {
  74. #ifdef _CARBON
  75.     if (IsMacInCooperativeThread())
  76.     {
  77. return ::CheckEventQueueForUserCancel();
  78.     }
  79.     else
  80.     {
  81. return false;
  82.     }
  83. #else
  84. EventRecord theEvent;
  85. Boolean  Cancel;
  86. char  c;
  87. Cancel = FALSE;
  88. if(WaitNextEvent(everyEvent, &theEvent, 0L,NULL)) /* check for cancel */
  89. {
  90. AEProcessAppleEvent(&theEvent);
  91. if(theEvent.what == keyDown)
  92. {
  93. if (theEvent.modifiers & cmdKey)
  94. {
  95. c = theEvent.message & charCodeMask;
  96. if(c == '.')
  97. Cancel = TRUE;
  98. }
  99. }
  100. }
  101. return(Cancel);
  102. #endif // _CARBON
  103. }
  104. // init_drivers() should do any network driver initialization here
  105. // params is a pointer to a platform specfic defined struct that 
  106. // contains an required initialization data
  107. HX_RESULT
  108. Mac_net::init_drivers(void *params)
  109. {
  110. HX_RESULT theErr = HXR_OK;
  111. if(sNetInitialized)
  112. return HXR_OK;
  113. // check if OT can be initialized
  114. theErr = OT_net::init_drivers(params);
  115. if(theErr == HXR_OK)
  116. {
  117. sHasOT = TRUE;
  118. sNetInitialized = TRUE;
  119. }
  120. else 
  121. {
  122. // no longer uses MacTCP
  123. }
  124. if(theErr)
  125. theErr = HXR_NET_CONNECT;
  126. return(theErr);
  127. }
  128. /*  close_drivers() should close any network drivers used by the program
  129.   NOTE: The program MUST not make any other calls to the network drivers
  130.   until init_drivers() has been called */
  131. HX_RESULT
  132. Mac_net::close_drivers(void *params)
  133. {
  134. HX_RESULT theErr = HXR_OK;
  135. if(sNetInitialized)
  136. {
  137. if(sHasOT) 
  138. theErr = OT_net::close_drivers(params);
  139. }
  140. return(theErr);
  141. }
  142. HX_RESULT
  143. Mac_net::host_to_ip_str(char *host, char *ip, UINT32 ulBufLen)
  144. {
  145. HX_RESULT theErr = HXR_OK;
  146. if(sNetInitialized)
  147. {
  148. if(sHasOT) 
  149. theErr = OT_net::host_to_ip_str(host,ip, ulBufLen);
  150. }
  151. else
  152. theErr = HXR_SOCKET_CREATE;
  153. return(theErr);
  154. }
  155. INT16
  156. getsockname(int sock, sockaddr* addr, INT16* addr_len)
  157. {
  158. return 0; // shouldn't these really do more?
  159. }
  160. ULONG32 Mac_net::AddRef()
  161. {
  162.     return InterlockedIncrement(&m_lRefCount);
  163. }
  164. ULONG32 Mac_net::Release()
  165. {
  166.     if (InterlockedDecrement(&m_lRefCount) > 0)
  167.     {
  168.         return m_lRefCount;
  169.     }
  170.     delete this;
  171.     return 0;
  172. }