clnt_simple.c
上传用户:nvosite88
上传日期:2007-01-17
资源大小:4983k
文件大小:4k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* clnt_simple.c - simplified front end to rpc */
  2. /* Copyright 1984-2001 Wind River Systems, Inc. */
  3. #include "copyright_wrs.h"
  4. /*
  5.  * Copyright (C) 1984, Sun Microsystems, Inc.
  6.  *
  7.  * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
  8.  * unrestricted use provided that this legend is included on all tape
  9.  * media and as a part of the software program in whole or part.  Users
  10.  * may copy or modify Sun RPC without charge, but are not authorized
  11.  * to license or distribute it to anyone else except as part of a product or
  12.  * program developed by the user.
  13.  *
  14.  * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
  15.  * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
  16.  * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
  17.  *
  18.  * Sun RPC is provided with no support and without any obligation on the
  19.  * part of Sun Microsystems, Inc. to assist in its use, correction,
  20.  * modification or enhancement.
  21.  *
  22.  * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
  23.  * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
  24.  * OR ANY PART THEREOF.
  25.  *
  26.  * In no event will Sun Microsystems, Inc. be liable for any lost revenue
  27.  * or profits or other special, indirect and consequential damages, even if
  28.  * Sun has been advised of the possibility of such damages.
  29.  *
  30.  * Sun Microsystems, Inc.
  31.  * 2550 Garcia Avenue
  32.  * Mountain View, California  94043
  33.  */
  34. /*
  35. modification history
  36. --------------------
  37. 01r,05nov01,vvv  fixed compilation warning
  38. 01q,18apr00,ham  fixed compilation warnings.
  39. 01p,11aug93,jmm  Changed ioctl.h and socket.h to sys/ioctl.h and sys/socket.h
  40. 01o,26may92,rrr  the tree shuffle
  41. 01n,04oct91,rrr  passed through the ansification filter
  42.   -changed includes to have absolute path from h/
  43.   -changed copyright notice
  44. 01m,01apr91,elh  added clnt_simpleInclude.
  45. 01l,25oct90,dnw  removed include of utime.h.
  46. 01k,26jun90,hjb  removed sccsid[].
  47. 01j,10may90,dnw  moved moduleStatics to rpcGbl; removed init/exit routines
  48.  changed taskModuleList to taskRpcStatics
  49.  changed taskModuleList->rpccreateerr to rpccreateerr macro
  50. 01i,11may90,yao  added missing modification history (01h) for the last checkin.
  51. 01h,09may90,yao  typecasted malloc to (char *).
  52. 01g,19apr90,hjb  de-linted.
  53. 01f,29apr89,gae  added clnt_simpleExit to do tidy cleanup for tasks.
  54.  changed clnt_simpleInit to return pointer to moduleStatics.
  55. 01d,30may88,dnw  changed to v4 names.
  56. 01c,29mar88,rdc   incorrect check of status returned by remGetHostByName
  57.   in callrpc fixed.
  58. 01b,11nov87,jlf   added wrs copyright, title, mod history, etc.
  59. 01a,01nov87,rdc   first VxWorks version
  60. */
  61. #ifndef lint
  62. /* static char sccsid[] = "@(#)clnt_simple.c 1.1 86/02/03 Copyr 1984 Sun Micro"; */
  63. #endif
  64. /*
  65.  * clnt_simple.c
  66.  * Simplified front end to rpc.
  67.  *
  68.  */
  69. #include "rpc/rpc.h"
  70. #include "sys/socket.h"
  71. #include "vxWorks.h"
  72. #include "memLib.h"
  73. #include "string.h"
  74. #include "rpc/rpcGbl.h"
  75. #include "hostLib.h"
  76. #include "unistd.h"
  77. void clnt_simpleInclude ()
  78.     {
  79.     }
  80. int
  81. callrpc(host, prognum, versnum, procnum, inproc, in, outproc, out)
  82. char *host;
  83. xdrproc_t inproc, outproc;
  84. char *in, *out;
  85. {
  86. struct sockaddr_in server_addr;
  87. enum clnt_stat clnt_stat;
  88. int hp;
  89. struct timeval timeout, tottimeout;
  90. FAST struct clnt_simple *ms = &taskRpcStatics->clnt_simple;
  91. if (ms->valid && ms->oldprognum == prognum && ms->oldversnum == versnum
  92. && strcmp(ms->oldhost, host) == 0) {
  93. /* reuse old client */
  94. }
  95. else {
  96. ms->valid = 0;
  97. close(ms->socket);
  98. ms->socket = RPC_ANYSOCK;
  99. if (ms->client) {
  100. clnt_destroy(ms->client);
  101. ms->client = NULL;
  102. }
  103. /* XXX if ((hp = gethostbyname(host)) == NULL) */
  104. if ((hp = hostGetByName (host)) == ERROR)
  105. return ((int) RPC_UNKNOWNHOST);
  106. timeout.tv_usec = 0;
  107. timeout.tv_sec = 5;
  108. /* XXX bcopy(hp->h_addr, &server_addr.sin_addr, hp->h_length); */
  109. server_addr.sin_addr.s_addr = hp;
  110. server_addr.sin_family = AF_INET;
  111. server_addr.sin_port =  0;
  112. if ((ms->client = clntudp_create(&server_addr, (u_long)prognum,
  113.     (u_long)versnum, timeout, &ms->socket)) == NULL)
  114. return ((int) rpc_createerr.cf_stat);
  115. ms->valid = 1;
  116. ms->oldprognum = prognum;
  117. ms->oldversnum = versnum;
  118. strcpy(ms->oldhost, host);
  119. }
  120. tottimeout.tv_sec = 25;
  121. tottimeout.tv_usec = 0;
  122. clnt_stat = clnt_call(ms->client, procnum, inproc, in,
  123.     outproc, out, tottimeout);
  124. /*
  125.  * if call failed, empty cache
  126.  */
  127. if (clnt_stat != RPC_SUCCESS)
  128. ms->valid = 0;
  129. return ((int) clnt_stat);
  130. }