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

代理服务器

开发平台:

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_osf1.c,v 1.7 1999/12/22 09:29:15 karls Exp $";
  49. #undef accept
  50. #undef getpeername
  51. #undef getsockname
  52. #undef readv
  53. #undef recvfrom
  54. #undef recvmsg
  55. #undef sendmsg
  56. #undef writev
  57. /* the system calls. */
  58. int
  59. sys_Eaccept(s, addr, addrlen)
  60. int s;
  61. struct sockaddr * addr;
  62. socklen_t *addrlen;
  63. {
  64. int rc;
  65. int (*function)(int s, struct sockaddr * addr, socklen_t *addrlen);
  66. SYSCALL_START(s);
  67. function = symbolfunction(SYMBOL_EACCEPT);
  68. rc = function(s, addr, addrlen);
  69. SYSCALL_END(s);
  70. return rc;
  71. }
  72. int
  73. sys_Egetpeername(s, name, namelen)
  74. int s;
  75. struct sockaddr * name;
  76. socklen_t *namelen;
  77. {
  78. int rc;
  79. int (*function)(int s, const struct sockaddr * name, socklen_t *namelen);
  80. SYSCALL_START(s);
  81. function = symbolfunction(SYMBOL_EGETPEERNAME);
  82. rc = function(s, name, namelen);
  83. SYSCALL_END(s);
  84. return rc;
  85. }
  86. int
  87. sys_Egetsockname(s, name, namelen)
  88. int s;
  89. struct sockaddr * name;
  90. socklen_t *namelen;
  91. {
  92. int rc;
  93. int (*function)(int s, const struct sockaddr * name, socklen_t *namelen);
  94. SYSCALL_START(s);
  95. function = symbolfunction(SYMBOL_EGETSOCKNAME);
  96. rc = function(s, name, namelen);
  97. SYSCALL_END(s);
  98. return rc;
  99. }
  100. ssize_t
  101. sys_Ereadv(d, iov, iovcnt)
  102. int d;
  103. const struct iovec *iov;
  104. int iovcnt;
  105. {
  106. ssize_t rc;
  107. int (*function)(int d, const struct iovec *iov, int iovcnt);
  108. SYSCALL_START(d);
  109. function = symbolfunction(SYMBOL_EREADV);
  110. rc = function(d, iov, iovcnt);
  111. SYSCALL_END(d);
  112. return rc;
  113. }
  114. int
  115. sys_Erecvfrom(s, buf, len, flags, from, fromlen)
  116. int s;
  117. void *buf;
  118. size_t len;
  119. int flags;
  120. struct sockaddr * from;
  121. size_t *fromlen;
  122. {
  123. int rc;
  124. int (*function)(int s, void *buf, size_t len, int flags,
  125.     struct sockaddr * from, socklen_t *fromlen);
  126. SYSCALL_START(s);
  127. function = symbolfunction(SYMBOL_ERECVFROM);
  128. rc = function(s, buf, len, flags, from, fromlen);
  129. SYSCALL_END(s);
  130. return rc;
  131. }
  132. ssize_t
  133. sys_Erecvmsg(s, msg, flags)
  134. int s;
  135. struct msghdr *msg;
  136. int flags;
  137. {
  138. ssize_t rc;
  139. int (*function)(int s, struct msghdr *msg, int flags);
  140. SYSCALL_START(s);
  141. function = symbolfunction(SYMBOL_ERECVMSG);
  142. rc = function(s, msg, flags);
  143. SYSCALL_END(s);
  144. return rc;
  145. }
  146. ssize_t
  147. sys_Esendmsg(s, msg, flags)
  148. int s;
  149. const struct msghdr *msg;
  150. int flags;
  151. {
  152. ssize_t rc;
  153. int (*function)(int s, const struct msghdr *msg, int flags);
  154. SYSCALL_START(s);
  155. function = symbolfunction(SYMBOL_ESENDMSG);
  156. rc = function(s, msg, flags);
  157. SYSCALL_END(s);
  158. return rc;
  159. }
  160. ssize_t
  161. sys_Ewritev(d, iov, iovcnt)
  162. int d;
  163. const struct iovec *iov;
  164. int iovcnt;
  165. {
  166. ssize_t rc;
  167. int (*function)(int d, const struct iovec *buf, int iovcnt);
  168. SYSCALL_START(d);
  169. function = symbolfunction(SYMBOL_EWRITEV);
  170. rc = function(d, iov, iovcnt);
  171. SYSCALL_END(d);
  172. return rc;
  173. }
  174. /*
  175.  * the interpositioned functions.
  176.  */
  177. int
  178. _Eaccept(s, addr, addrlen)
  179. int s;
  180. struct sockaddr * addr;
  181. socklen_t *addrlen;
  182. {
  183. if (ISSYSCALL(s))
  184. return sys_Eaccept(s, addr, addrlen);
  185. return Raccept(s, addr, addrlen);
  186. }
  187. int
  188. _Egetpeername(s, name, namelen)
  189. int s;
  190. struct sockaddr * name;
  191. socklen_t *namelen;
  192. {
  193. if (ISSYSCALL(s))
  194. return sys_Egetpeername(s, name, namelen);
  195. return Rgetpeername(s, name, namelen);
  196. }
  197. int
  198. _Egetsockname(s, name, namelen)
  199. int s;
  200. struct sockaddr * name;
  201. socklen_t *namelen;
  202. {
  203. if (ISSYSCALL(s))
  204. return sys_Egetsockname(s, name, namelen);
  205. return Rgetsockname(s, name, namelen);
  206. }
  207. ssize_t
  208. _Ereadv(d, iov, iovcnt)
  209. int d;
  210. const struct iovec *iov;
  211. int iovcnt;
  212. {
  213. if (ISSYSCALL(d))
  214. return sys_Ereadv(d, iov, iovcnt);
  215. return Rreadv(d, iov, iovcnt);
  216. }
  217. ssize_t
  218. _Erecvfrom(s, buf, len, flags, from, fromlen)
  219. int s;
  220. void *buf;
  221. size_t len;
  222. int flags;
  223. struct sockaddr * from;
  224. size_t *fromlen;
  225. {
  226. if (ISSYSCALL(s))
  227. return sys_Erecvfrom(s, buf, len, flags, from, fromlen);
  228. return Rrecvfrom(s, buf, len, flags, from, fromlen);
  229. }
  230. ssize_t
  231. _Erecvmsg(s, msg, flags)
  232. int s;
  233. struct msghdr *msg;
  234. int flags;
  235. {
  236. if (ISSYSCALL(s))
  237. return sys_Erecvmsg(s, msg, flags);
  238. return Rrecvmsg(s, msg, flags);
  239. }
  240. ssize_t
  241. _Ewritev(d, iov, iovcnt)
  242. int d;
  243. const struct iovec *iov;
  244. int iovcnt;
  245. {
  246. if (ISSYSCALL(d))
  247. return sys_Ewritev(d, iov, iovcnt);
  248. return Rwritev(d, iov, iovcnt);
  249. }
  250. ssize_t
  251. _Esendmsg(s, msg, flags)
  252. int s;
  253. const struct msghdr *msg;
  254. int flags;
  255. {
  256. if (ISSYSCALL(s))
  257. return sys_Esendmsg(s, msg, flags);
  258. return Rsendmsg(s, msg, flags);
  259. }
  260. #endif /* SOCKSLIBRARY_DYNAMIC */
  261. #endif /* HAVE_EXTRA_OSF_SYMBOLS */