home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1999 March B / SCO_CASTOR4RRT.iso / uccs / root.13 / usr / include / rx.h < prev    next >
C/C++ Source or Header  |  1998-08-19  |  10KB  |  362 lines

  1. /*
  2.  * Copyright (c) 1998 The Santa Cruz Operation, Inc.. All Rights Reserved. 
  3.  *                                                                         
  4.  *        THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF THE               
  5.  *                   SANTA CRUZ OPERATION INC.                             
  6.  *                                                                         
  7.  *   The copyright notice above does not evidence any actual or intended   
  8.  *   publication of such source code.                                      
  9.  */
  10.  
  11. #ident    "@(#)head.usr:rx.h    1.1.6.5"
  12. #ident  "$Header: $"
  13.  
  14. #ifndef _RX_H
  15. #define _RX_H
  16.  
  17. #if defined(__cplusplus)
  18. extern "C" {
  19. #endif
  20.  
  21. /*
  22.  * rexec client program interface
  23.  *
  24.  */
  25.  
  26. #if defined(__STDC__)
  27.  
  28. extern int rexecve(char *, char *, char **, char **, long);
  29. extern int rx_proc_msg(int, long *, long *);
  30. extern int rx_write(int, char *, long);
  31. extern int rx_signal(int, int);
  32. extern int rx_ack_exit(int, char *, long);
  33. extern int rx_set_ioctl_hand(int, int (*) (int, int, ...));
  34. extern int rx_set_write_hand(int, ssize_t (*) (int, const void *, size_t));
  35. extern int rx_fd(int);
  36. extern int rx_free_conn(int);
  37. extern long get_Rx_errno(void);
  38. extern int set_Rx_errno(long);
  39. extern const long *_rx_errno();
  40. extern int get_Rx_cserrno(void);
  41. extern int set_Rx_cserrno(int);
  42. extern const int *_rx_cserrno();
  43.  
  44. #else
  45.  
  46. extern int rexecve();
  47. extern int rx_proc_msg();
  48. extern int rx_write();
  49. extern int rx_signal();
  50. extern int rx_ack_exit();
  51. extern int rx_set_ioctl_hand();
  52. extern int rx_set_write_hand();
  53. extern int rx_fd();
  54. extern int rx_free_conn();
  55. extern long get_Rx_errno();
  56. extern int set_Rx_errno();
  57. extern const long *_rx_errno();
  58. extern int get_Rx_cserrno();
  59. extern int set_Rx_cserrno();
  60. extern const int *_rx_cserrno();
  61.  
  62. #endif
  63.  
  64. extern char    Rxenvfile[]; /* defined in library, but it's not set there */
  65.  
  66. #ifdef _REENTRANT
  67.  
  68. #define Rx_errno    (*_rx_errno())
  69. #define Rx_cserrno    (*_rx_cserrno())
  70.  
  71. #else /* ! _REENTRANT */
  72.  
  73. extern long    Rx_errno;
  74. extern int    Rx_cserrno;
  75.  
  76. #endif /* _REENTRANT */
  77.  
  78. /*
  79.  * rexec flags
  80.  *
  81.  */
  82.  
  83. #define    RXF_SEPERR    0001    /* Separate stderr from stdout */
  84. #define    RXF_STDINPIPE    0002    /* Standard input is redirected from a pipe/file */
  85. #define    RXF_STDOUTTERM    0004    /* Standard output is going to a terminal */
  86. #define    RXF_DEBUG    0100    /* enable debug mode on client side */
  87.  
  88. /*
  89.  * all the flags together
  90.  *
  91.  */
  92.  
  93. #define    RXF_ALL        (RXF_SEPERR | RXF_STDINPIPE | RXF_STDOUTTERM | RXF_DEBUG)
  94.  
  95.  
  96. /*
  97.  * message type codes returned in msg_type parameter to rx_proc_msg()
  98.  *
  99.  */
  100.  
  101. #define    RX_INCOMPLETE    1    /* incomplete message */
  102. #define    RX_PROTOCOL    2    /* protocol mesage (open, close, etc) */
  103. #define    RX_SERVICE_DEAD    3    /* service termination message */
  104. #define    RX_TYPEAHEAD    4    /* typeahead message */
  105. #define    RX_DATA        5    /* data message */
  106. #define    RX_IOCTL    6    /* ioctl message */
  107. #define    RX_EOF        7    /* 0-length message */
  108.  
  109.  
  110. /*
  111.  * various rexec constants
  112.  *
  113.  */
  114.  
  115. #define    RX_SVCNAME    "listen:rexec"
  116. #define    RX_LOGFILE    "/var/adm/log/rexec.log"
  117. #define    RX_MODULEID    "rexec"
  118.  
  119. #define    RX_MAXRXCONN    5    /* maximum number of open rexec client connections */
  120. #define    RX_MAXSVCLINE    1024    /* maximum service entry line size */
  121. #define    RX_MAXSVCSZ    14    /* maximum service name size */
  122. #define    RX_MAXSVCDESCR    256    /* maximum service description */
  123. #define    RX_MAXSVCDEF    256    /* maximum service definition */
  124. #define    RX_MAXUTMP    1    /* maximum utmp flag size */
  125. #define    RX_MAXMSGSZ    5120    /* maximum rx message size */
  126. #define    RX_MAXARGSZ    4096    /* maximum argument string size */
  127. #define    RX_MAXENVSZ    4096    /* maximum environment string size */
  128. #define    RX_MAXTASZ    1024    /* maximum typeahead buffer size */
  129. #define    RX_MAXDATASZ    1024    /* maximum data buffer size */
  130. #define    RX_MAXIOCARGSZ    1024    /* maximum ioctl argument buffer size */
  131. #define    RX_MAXENVFNAME    256    /* maximum environment file name */
  132. #define    RX_MAXARGS    64    /* maximum number of arguments to service */
  133. #define    RX_MAXENVS    128    /* maximum number of environment variables */
  134. #define    RX_WRITEWAIT    1    /* seconds to wait in case of RXE_AGAIN */
  135.  
  136.  
  137. /*
  138.  * rexec error numbers
  139.  *
  140.  */
  141.  
  142. #define    RXE_OK        0    /* no error */
  143. #define    RXE_2MANYRX    1    /* too many open client rexec connections */
  144. #define    RXE_BADFLAGS    2    /* bad options/flags specified */
  145. #define    RXE_BADARGS    3    /* too many arguments */
  146. #define    RXE_BADENV    4    /* bad environment specified */
  147. #define    RXE_BADMACH    5    /* unknown host */
  148. #define    RXE_CONNPROB    6    /* connection problem */
  149. #define    RXE_NORXSERVER    7    /* host is not running rxserver */
  150. #define    RXE_BADVERSION    8    /* unsupported version */
  151. #define    RXE_NOSVCFILE    9    /* could not open services file */
  152. #define    RXE_NOSVC    10    /* no such service */
  153. #define    RXE_NOTAUTH    11    /* not authorized to execute service */
  154. #define    RXE_NOPTS    12    /* no pseudo terminals available */
  155. #define    RXE_PIPE    13    /* cannot make pipe for stderr */
  156. #define    RXE_BADSTART    14    /* error in starting server side */
  157. #define    RXE_NOSPACE    15    /* server side memory allocation problems */
  158. #define    RXE_BADCNUM    16    /* bad rexec connection number */
  159. #define    RXE_AGAIN    17    /* write would cause server to block, try later */
  160. #define    RXE_BADSIG    18    /* bad signal number */
  161. #define    RXE_BADSTATE    19    /* conn. is in wrong state to perform operation */
  162. #define    RXE_TIRDWR    20    /* could not push module "tirdwr" at client */
  163. #define    RXE_WRITE    21    /* write handler failure at client */
  164. #define    RXE_IOCTL    22    /* ioctl handler failure at client */
  165. #define    RXE_PROTOCOL    23    /* protocol failure - unexpected message */
  166. #define    RXE_NOERRMEM    24    /* could not allocate memory for error code */
  167. #define    RXE_UNKNOWN    99    /* unknown error code */
  168.  
  169. /*
  170.  * WARNING:
  171.  * The following definitions are used internally by libnsl and rexec.
  172.  * Since they are not part of the interface, they may be changed
  173.  * without notice in future releases.
  174.  */
  175.  
  176. /* debugging macros */
  177. #ifdef _REENTRANT
  178. #define    Printf0(format)        if (_rx_get_Dflag()) { (void) printf(format); }
  179. #define    Printf1(format,x)    if (_rx_get_Dflag()) { (void) printf(format,x); }
  180. #define    Printf2(format,x,y)    if (_rx_get_Dflag()) { (void) printf(format,x,y); }
  181. #define    Printf3(format,x,y,z)    if (_rx_get_Dflag()) { (void) printf(format,x,y,z); }
  182.  
  183. #else /* !_REENTRANT */
  184.  
  185. #define    Printf0(format)        if (Dflag) { (void) printf(format); }
  186. #define    Printf1(format,x)    if (Dflag) { (void) printf(format,x); }
  187. #define    Printf2(format,x,y)    if (Dflag) { (void) printf(format,x,y); }
  188. #define    Printf3(format,x,y,z)    if (Dflag) { (void) printf(format,x,y,z); }
  189.  
  190. #endif /* _REENTRANT */
  191.  
  192. /* types of messages which flow between rexec client and server */
  193.  
  194. #define    RXM_OPEN_REQ    1    /* open request message */
  195. #define    RXM_OPEN_ARGS    2    /* message containing service arguments */
  196. #define    RXM_OPEN_ENVF    3    /* message containing environment file */
  197. #define    RXM_OPEN_ENV    4    /* message containing user environment */
  198. #define    RXM_OPEN_DONE    5    /* message indicating end of open messages */
  199. #define    RXM_OPEN_REPLY    6    /* open reply message */
  200. #define    RXM_CLOSE_REQ    7    /* close request message */
  201. #define    RXM_CLOSE_REPLY    8    /* close reply message */
  202. #define    RXM_CLOSE_TA    9    /* close typeahead message */
  203. #define    RXM_DATA    10    /* message containing data */
  204. #define    RXM_WRITEACK    11    /* write acknowledgement message */
  205. #define    RXM_SIGNAL    12    /* message containing a signal */
  206. #define    RXM_SIGNALACK    13    /* signal acknowledgement message */
  207. #define    RXM_IOCTL    14    /* message containing an ioctl */
  208.  
  209.  
  210. /* rexec message header */
  211.  
  212. struct rx_msg_head {
  213.     long    msg_type;    /* type of rx message */
  214.     long    msg_len;    /* length of rx message */
  215. };
  216.  
  217.  
  218. /* message structures */
  219.  
  220.  
  221. /* service opening protocol messages */
  222.  
  223. /* RXM_OPEN_REQ */
  224.  
  225. struct open_req {
  226.     long    version;        /* rexec client version */
  227.     char    service[RX_MAXSVCSZ];    /* service to start */
  228.     long    flags;            /* open options */
  229. };
  230.  
  231. #define    RX_VERSION    1
  232.  
  233.  
  234. /* RXM_OPEN_ARGS */
  235.  
  236. struct open_args {
  237.     char    argstr[RX_MAXARGSZ];    /* argument string */
  238. };
  239.  
  240. #define    RX_OPEN_ARGS_SZ(argv_sz) (argv_sz)
  241.  
  242.  
  243. /* RXM_ENVF */
  244.  
  245. struct open_envf {
  246.     char    envfile[RX_MAXENVFNAME];/* environment file name */
  247. };
  248.  
  249.  
  250. /* RXM_OPEN_ENV */
  251.  
  252. struct open_env {
  253.     char    envstr[RX_MAXENVSZ];    /* environment string */
  254. };
  255.  
  256. #define    RX_OPEN_ENV_SZ(envp_sz)    (envp_sz)
  257.  
  258.  
  259. /* RXM_OPEN_REPLY */
  260.  
  261. struct open_reply {
  262.     long    version;    /* rxserver version */
  263.     long    ret_code;    /* return code for open operation */
  264.     long    credit;        /* initial write credit */
  265. };
  266.  
  267. /* server will only buffer 1 data message worth of data */
  268.  
  269. #define    RX_INITCREDIT    1
  270.  
  271.  
  272. /* service closing protocol messages */
  273.  
  274. /* RXM_CLOSE_REQ */
  275.  
  276. struct close_req {
  277.     long    ret_code;    /* dying process' return code */
  278.     long    tasize;        /* amount of unused typeahead at server */
  279. };
  280.  
  281.  
  282. /* RXM_CLOSE_REPLY */
  283.  
  284. struct close_reply {
  285.     long    tasize;        /* amount of typeahead to return */
  286. };
  287.  
  288.  
  289. /* RXM_CLOSE_TA */
  290.  
  291. struct close_ta {
  292.     long    tasize;            /* returned typeahead size */
  293.     char    tabuf[RX_MAXTASZ];    /* returned typeahead buffer */
  294. };
  295.  
  296. #define    RX_CLOSE_TA_SZ(tabuf_sz) (sizeof(struct close_ta) - RX_MAXTASZ + tabuf_sz)
  297.  
  298.  
  299. /* data and data acknowledgement messages */
  300.  
  301. /* RXM_DATA */
  302.  
  303. struct data_msg {
  304.     long    fd;            /* orig / dest fd */
  305.     long    len;            /* len of data */
  306.     char    buf[RX_MAXDATASZ];    /* data */
  307. };
  308.  
  309. #define    RX_DATA_MSG_SZ(buf_sz)    (sizeof(struct data_msg) - RX_MAXDATASZ + buf_sz)
  310.  
  311.  
  312. /* RXM_WRITE_ACK */
  313.  
  314. struct writeack_msg {
  315.     long    credit;    /* acknowledgement flag */
  316. };
  317.  
  318.  
  319. /* signal and signal acknowledgement messages */
  320.  
  321. /* RXM_SIGNAL */
  322.  
  323. struct signal_msg {
  324.     long    sig;        /* signal number */
  325. };
  326.  
  327.  
  328. /* RXM_SIGNALACK */
  329.  
  330. struct signalack_msg {
  331.     long    sig;        /* signal number */
  332. };
  333.  
  334.  
  335. /* ioctl message */
  336.  
  337. /* RXM_IOCTL */
  338.  
  339. struct ioctl_msg {
  340.     long    fd;            /* destination fd */
  341.     long    ioc;            /* ioctl number */
  342.     long    arglen;            /* ioctl argument length */
  343.     char    arg[RX_MAXIOCARGSZ];    /* ioctl argument buffer */
  344. };
  345.  
  346. #define    RX_IOCTL_MSG_SZ(arg_sz)    (sizeof(struct ioctl_msg) - RX_MAXIOCARGSZ + arg_sz)
  347.  
  348.  
  349. /* client/server states */
  350.  
  351. #define    RXS_OPENING    1
  352. #define    RXS_OPEN    2
  353. #define    RXS_CLOSING    3
  354. #define    RXS_CLOSED    4
  355.  
  356.  
  357. #if defined(__cplusplus)
  358. }
  359. #endif
  360.  
  361. #endif /* _RX_H */
  362.