int_osf2.c
上传用户:zm130024
上传日期:2007-01-04
资源大小:432k
文件大小:5k
源码类别:

代理服务器

开发平台:

Unix_Linux

  1. /*
  2.  * Copyright (c) 1997, 1998, 1999
  3.  *      Inferno Nettverk A/S, Norway.  All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms, with or without
  6.  * modification, are permitted provided that the following conditions
  7.  * are met:
  8.  * 1. The above copyright notice, this list of conditions and the following
  9.  *    disclaimer must appear in all copies of the software, derivative works
  10.  *    or modified versions, and any portions thereof, aswell as in all
  11.  *    supporting documentation.
  12.  * 2. All advertising materials mentioning features or use of this software
  13.  *    must display the following acknowledgement:
  14.  *      This product includes software developed by
  15.  *      Inferno Nettverk A/S, Norway.
  16.  * 3. The name of the author may not be used to endorse or promote products
  17.  *    derived from this software without specific prior written permission.
  18.  *
  19.  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
  20.  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  21.  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  22.  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
  23.  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  24.  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  25.  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  26.  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  27.  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  28.  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  29.  *
  30.  * Inferno Nettverk A/S requests users of this software to return to
  31.  *
  32.  *  Software Distribution Coordinator  or  sdc@inet.no
  33.  *  Inferno Nettverk A/S
  34.  *  Oslo Research Park
  35.  *  Gaustadal閑n 21
  36.  *  N-0349 Oslo
  37.  *  Norway
  38.  *
  39.  * any improvements or extensions that they make and grant Inferno Nettverk A/S
  40.  * the rights to redistribute these changes.
  41.  *
  42.  */
  43. #include "common.h"
  44. #if HAVE_EXTRA_OSF_SYMBOLS
  45. #if SOCKSLIBRARY_DYNAMIC
  46. #include "interposition.h"
  47. static const char rcsid[] =
  48. "$Id: int_osf2.c,v 1.6 1999/12/11 16:36:09 karls Exp $";
  49. #undef accept
  50. #undef getpeername
  51. #undef getsockname
  52. #undef recvfrom
  53. #undef recvmsg
  54. #undef sendmsg
  55. /* nfoo versions (with sockaddr len) of the system calls. */
  56. int
  57. sys_naccept(s, addr, addrlen)
  58. int s;
  59. struct sockaddr *addr;
  60. socklen_t *addrlen;
  61. {
  62. int rc;
  63. int (*function)(int s, struct sockaddr *addr, socklen_t *addrlen);
  64. SYSCALL_START(s);
  65. function = symbolfunction(SYMBOL_NACCEPT);
  66. rc = function(s, addr, addrlen);
  67. SYSCALL_END(s);
  68. return rc;
  69. }
  70. int
  71. sys_ngetpeername(s, name, namelen)
  72. int s;
  73. struct sockaddr *name;
  74. socklen_t *namelen;
  75. {
  76. int rc;
  77. int (*function)(int s, const struct sockaddr *name, socklen_t *namelen);
  78. SYSCALL_START(s);
  79. function = symbolfunction(SYMBOL_NGETPEERNAME);
  80. rc = function(s, name, namelen);
  81. SYSCALL_END(s);
  82. return rc;
  83. }
  84. int
  85. sys_ngetsockname(s, name, namelen)
  86. int s;
  87. struct sockaddr *name;
  88. socklen_t *namelen;
  89. {
  90. int rc;
  91. int (*function)(int s, const struct sockaddr *name, socklen_t *namelen);
  92. SYSCALL_START(s);
  93. function = symbolfunction(SYMBOL_NGETSOCKNAME);
  94. rc = function(s, name, namelen);
  95. SYSCALL_END(s);
  96. return rc;
  97. }
  98. int
  99. sys_nrecvfrom(s, buf, len, flags, from, fromlen)
  100. int s;
  101. void *buf;
  102. size_t len;
  103. int flags;
  104. struct sockaddr *from;
  105. size_t *fromlen;
  106. {
  107. int rc;
  108. int (*function)(int s, void *buf, size_t len, int flags,
  109.     struct sockaddr *from, socklen_t *fromlen);
  110. SYSCALL_START(s);
  111. function = symbolfunction(SYMBOL_NRECVFROM);
  112. rc = function(s, buf, len, flags, from, fromlen);
  113. SYSCALL_END(s);
  114. return rc;
  115. }
  116. ssize_t
  117. sys_nrecvmsg(s, msg, flags)
  118. int s;
  119. struct msghdr *msg;
  120. int flags;
  121. {
  122. ssize_t rc;
  123. int (*function)(int s, struct msghdr *msg, int flags);
  124. SYSCALL_START(s);
  125. function = symbolfunction(SYMBOL_NRECVMSG);
  126. rc = function(s, msg, flags);
  127. SYSCALL_END(s);
  128. return rc;
  129. }
  130. ssize_t
  131. sys_nsendmsg(s, msg, flags)
  132. int s;
  133. const struct msghdr *msg;
  134. int flags;
  135. {
  136. ssize_t rc;
  137. int (*function)(int s, const struct msghdr *msg, int flags);
  138. SYSCALL_START(s);
  139. function = symbolfunction(SYMBOL_NSENDMSG);
  140. rc = function(s, msg, flags);
  141. SYSCALL_END(s);
  142. return rc;
  143. }
  144. /*
  145.  * the interpositioned functions.
  146.  */
  147. int
  148. naccept(s, addr, addrlen)
  149. int s;
  150. struct sockaddr *addr;
  151. socklen_t *addrlen;
  152. {
  153. if (ISSYSCALL(s))
  154. return sys_naccept(s, addr, addrlen);
  155. return Raccept(s, addr, addrlen);
  156. }
  157. int
  158. ngetpeername(s, name, namelen)
  159. int s;
  160. struct sockaddr *name;
  161. socklen_t *namelen;
  162. {
  163. if (ISSYSCALL(s))
  164. return sys_ngetpeername(s, name, namelen);
  165. return Rgetpeername(s, name, namelen);
  166. }
  167. int
  168. ngetsockname(s, name, namelen)
  169. int s;
  170. struct sockaddr *name;
  171. socklen_t *namelen;
  172. {
  173. if (ISSYSCALL(s))
  174. return sys_ngetpeername(s, name, namelen);
  175. return Rgetsockname(s, name, namelen);
  176. }
  177. ssize_t
  178. nrecvfrom(s, buf, len, flags, from, fromlen)
  179. int s;
  180. void *buf;
  181. size_t len;
  182. int flags;
  183. struct sockaddr *from;
  184. size_t *fromlen;
  185. {
  186. if (ISSYSCALL(s))
  187. return sys_nrecvfrom(s, buf, len, flags, from, fromlen);
  188. return Rrecvfrom(s, buf, len, flags, from, fromlen);
  189. }
  190. ssize_t
  191. nrecvmsg(s, msg, flags)
  192. int s;
  193. struct msghdr *msg;
  194. int flags;
  195. {
  196. if (ISSYSCALL(s))
  197. return sys_nrecvmsg(s, msg, flags);
  198. return Rrecvmsg(s, msg, flags);
  199. }
  200. ssize_t
  201. nsendmsg(s, msg, flags)
  202. int s;
  203. const struct msghdr *msg;
  204. int flags;
  205. {
  206. if (ISSYSCALL(s))
  207. return sys_nsendmsg(s, msg, flags);
  208. return Rsendmsg(s, msg, flags);
  209. }
  210. #endif /* SOCKSLIBRARY_DYNAMIC */
  211. #endif /* HAVE_EXTRA_OSF_SYMBOLS */