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

VxWorks

开发平台:

C/C++

  1. /* pmap_clnt.c - client interface to pmap rpc service */
  2. /* Copyright 1984-2000 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. 01p,18apr00,ham  fixed compilation warnings.
  38. 01o,11aug93,jmm  Changed ioctl.h and socket.h to sys/ioctl.h and sys/socket.h
  39. 01n,26may92,rrr  the tree shuffle
  40.   -changed includes to have absolute path from h/
  41. 01m,04oct91,rrr  passed through the ansification filter
  42.   -changed includes to have absolute path from h/
  43.   -changed copyright notice
  44. 01l,25oct90,dnw   removed include of utime.h.
  45. 01c,27oct89,hjb   upgraded to 4.0
  46. 01b,11nov87,jlf   added wrs copyright, title, mod history, etc.
  47. 01a,01nov87,rdc   first VxWorks version
  48. */
  49. #ifndef lint
  50. /* static char sccsid[] = "@(#)pmap_clnt.c 1.1 86/02/03 Copyr 1984 Sun Micro"; */
  51. #endif
  52. /*
  53.  * pmap_clnt.c
  54.  * Client interface to pmap rpc service.
  55.  *
  56.  */
  57. #include "vxWorks.h"
  58. #include "rpc/rpctypes.h"
  59. #include "netinet/in.h"
  60. #include "rpc/xdr.h"
  61. #include "rpc/auth.h"
  62. #include "rpc/clnt.h"
  63. #include "rpc/rpc_msg.h"
  64. #include "rpc/pmap_prot.h"
  65. #include "rpc/pmap_clnt.h"
  66. #include "rpc/get_myaddr.h"
  67. #include "sys/socket.h"
  68. #include "net/if.h"
  69. #include "sys/ioctl.h"
  70. #include "ioLib.h"
  71. #define NAMELEN 255
  72. #define BUFSIZ 1024
  73. static struct timeval timeout = { 5, 0 };
  74. static struct timeval tottimeout = { 60, 0 };
  75. /* XXX not used XXX static struct sockaddr_in myaddress; */
  76. void clnt_perror();
  77. /*
  78.  * Set a mapping between program,version and port.
  79.  * Calls the pmap service remotely to do the mapping.
  80.  */
  81. bool_t
  82. pmap_set(program, version, protocol, port)
  83. u_long program;
  84. u_long version;
  85. u_long protocol;
  86. u_short port;
  87. {
  88. struct sockaddr_in myaddress;
  89. int socket = -1;
  90. register CLIENT *client;
  91. struct pmap parms;
  92. bool_t rslt;
  93. get_myaddress(&myaddress);
  94. client = clntudp_bufcreate(&myaddress, PMAPPROG, PMAPVERS,
  95.     timeout, &socket, RPCSMALLMSGSIZE, RPCSMALLMSGSIZE);
  96. if (client == (CLIENT *)NULL)
  97. return (FALSE);
  98. parms.pm_prog = program;
  99. parms.pm_vers = version;
  100. parms.pm_prot = protocol;
  101. parms.pm_port = port;
  102. if (CLNT_CALL(client, PMAPPROC_SET, xdr_pmap, &parms, xdr_bool, &rslt,
  103.     tottimeout) != RPC_SUCCESS) {
  104. clnt_perror(client, "Cannot register service");
  105. return (FALSE);
  106. }
  107. CLNT_DESTROY(client);
  108. (void)close(socket);
  109. return (rslt);
  110. }
  111. /*
  112.  * Remove the mapping between program,version and port.
  113.  * Calls the pmap service remotely to do the un-mapping.
  114.  */
  115. bool_t
  116. pmap_unset(program, version)
  117. u_long program;
  118. u_long version;
  119. {
  120. struct sockaddr_in myaddress;
  121. int socket = -1;
  122. register CLIENT *client;
  123. struct pmap parms;
  124. bool_t rslt;
  125. get_myaddress(&myaddress);
  126. client = clntudp_bufcreate(&myaddress, PMAPPROG, PMAPVERS,
  127.     timeout, &socket, RPCSMALLMSGSIZE, RPCSMALLMSGSIZE);
  128. if (client == (CLIENT *)NULL)
  129. return (FALSE);
  130. parms.pm_prog = program;
  131. parms.pm_vers = version;
  132. parms.pm_port = parms.pm_prot = 0;
  133. CLNT_CALL(client, PMAPPROC_UNSET, xdr_pmap, &parms, xdr_bool, &rslt,
  134.     tottimeout);
  135. CLNT_DESTROY(client);
  136. (void)close(socket);
  137. return (rslt);
  138. }
  139. /* get_myaddress () is now in a separate file called get_myaddress.c -- 4.0 */