added extra arg to RPC_make_arg_list.
[dyninst.git] / common / h / rpcUtil.h
1
2 #ifndef RPC_UTIL
3 #define RPC_UTIL
4
5 /*
6  * $Log: rpcUtil.h,v $
7  * Revision 1.19  1994/07/18 19:09:10  hollings
8  * added extra arg to RPC_make_arg_list.
9  *
10  * Revision 1.18  1994/06/02  23:35:15  markc
11  * Modified RPCUser class to support improved error checking for igen.
12  *
13  * Revision 1.17  1994/04/21  23:23:44  hollings
14  * removed paradynd name from make args function.
15  *
16  * Revision 1.16  1994/04/06  22:45:24  markc
17  * Cleaned up rpcUtil.h.  Moved include files to rpcUtil.C where they belonged.
18  *
19  * Revision 1.15  1994/03/31  22:59:04  hollings
20  * added well known port as a paramter to xdrRPC constructor.
21  *
22  * Revision 1.14  1994/03/25  16:07:31  markc
23  * Added option to specify timeout on readReady.
24  *
25  * Revision 1.13  1994/03/20  01:45:23  markc
26  * Changed xdr_Boolean to char rather than int to reflect Boolean change.
27  *
28  * Revision 1.12  1994/03/11  21:01:24  hollings
29  * Changed Boolean from int to char to match X11 convention.
30  *
31  *
32  */
33
34 #include <unistd.h>
35 #include <sys/types.h>
36 #include <sys/socket.h>
37
38 extern "C" {
39 #include <rpc/types.h>
40 #include <rpc/xdr.h>
41 }
42
43 #define xdr_Boolean xdr_char
44 typedef XDR *XDRptr;
45 typedef int (*xdrIOFunc)(int handle, char *buf, unsigned int len);
46
47 typedef char Boolean;
48 typedef char *String;
49
50 //
51 // Functions common to server and client side.
52 //
53 class XDRrpc {
54   public:
55     XDRrpc(char *m, char *u, char *p, xdrIOFunc, xdrIOFunc, 
56            char **arg_list=0, int nblock=0, int wellKnownPortFd = 0);
57     XDRrpc(int fd, xdrIOFunc readRoutine, xdrIOFunc writeRoutine, int nblock=0);
58     XDRrpc(int family, int port, int type, char *machine, xdrIOFunc readFunc,
59            xdrIOFunc writeFunc, int nblock=0);
60     virtual ~XDRrpc();
61     void closeConnect() { if (fd >= 0) close(fd); fd = -1;}
62     void setNonBlock();
63     int get_fd() { return fd;}
64     int readReady(int timeout=0);
65     XDR *__xdrs__;
66     int fd;
67     int pid;            // pid of child;
68     static int __wellKnownPortFd__;
69     // should the fd be closed by a destructor ??
70 };
71
72 class THREADrpc {
73   public:
74     THREADrpc(int tid);
75     void setNonBlock() { ; }
76     void setTid(int id) { tid = id; }
77   protected:
78     int tid;
79     // these are only to be used by implmentors of thread RPCs.
80     //   the value is only valid during a thread RPC.
81     unsigned int requestingThread;
82     unsigned int getRequestingThread()  { return requestingThread; }
83 };
84
85
86 //
87 // client side common routines that are transport independent.
88 //
89 class RPCUser {
90   public:
91     void awaitResponce(int tag);
92     void verifyProtocolAndVersion();
93     RPCUser(int st=0); 
94     int get_err_state() { return err_state;}
95     int clear_err_state() {err_state = 0;}
96     int did_error_occur() {return (err_state != 0);}
97   protected:
98     int err_state;
99 };
100
101 //
102 // server side routines that are transport independent.
103 //
104 class RPCServer {
105   public:
106     int __versionVerifyDone__;
107     RPCServer(int st=0);
108     int get_err_state() { return err_state;}
109     int clear_err_state() {err_state = 0;}
110     int did_error_occur() {return (err_state != 0);}
111   protected:
112     int err_state;
113 };
114
115 extern int RPC_readReady (int fd, int timeout=0);
116 extern int RPC_setup_socket (int *sfd,   // return file descriptor
117                              int family, // AF_INET ...
118                              int type);   // SOCK_STREAM ...
119 extern int xdr_String(XDR*, String*);
120 extern int RPCprocessCreate(int *pid, char *hostName, char *userName,
121                             char *commandLine, char **arg_list = 0,
122                             int wellKnownPort = 0);
123
124 extern char **RPC_make_arg_list (int family, int type, 
125                                  int port, 
126                                  int flag,
127                                  char *machienName);
128
129 extern int 
130 RPC_undo_arg_list (int argc, char **arg_list, char **machine, int &family,
131                    int &type, int &well_known_socket, int &flag);
132 extern int RPC_getConnect (int fd);
133
134 #endif