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