Man page for librpcUtil.a
[dyninst.git] / pdutil / h / rpcUtil.h
1
2 #ifndef RPC_UTIL
3 #define RPC_UTIL
4
5 extern "C" {
6 #include <rpc/types.h>
7 #include <rpc/xdr.h>
8 }
9
10 #include <sys/types.h>
11 #include <sys/socket.h>
12 #include <netinet/in.h>
13 #include <netdb.h>
14 #include <sys/time.h>
15 #include <unistd.h>
16 #include <sys/file.h>
17
18 #define xdr_Boolean     xdr_bool
19 typedef XDR *XDRptr;
20 typedef int (*xdrIOFunc)(int handle, char *buf, unsigned int len);
21
22 typedef int Boolean;
23 typedef char *String;
24  
25 //
26 // Functions common to server and client side.
27 //
28 class XDRrpc {
29   public:
30     XDRrpc(char *m, char *u, char *p, xdrIOFunc, xdrIOFunc, 
31            char **arg_list=0, int nblock=0);
32     XDRrpc(int fd, xdrIOFunc readRoutine, xdrIOFunc writeRoutine, int nblock=0);
33     XDRrpc(int family, int port, int type, char *machine, xdrIOFunc readFunc,
34            xdrIOFunc writeFunc, int nblock=0);
35     ~XDRrpc();
36     void closeConnect() { if (fd >= 0) close(fd); fd = -1;}
37     void setNonBlock();
38     int get_fd() { return fd;}
39     int readReady();
40     XDR *__xdrs__;
41     int fd;
42     int pid;            // pid of child;
43     // should the fd be closed by a destructor ??
44 };
45
46 class THREADrpc {
47   public:
48     THREADrpc(int tid);
49     void setNonBlock() { ; }
50     void setTid(int id) { tid = id; }
51   protected:
52     int tid;
53     // these are only to be used by implmentors of thread RPCs.
54     //   the value is only valid during a thread RPC.
55     unsigned int requestingThread;
56     unsigned int getRequestingThread()  { return requestingThread; }
57 };
58
59
60 //
61 // client side common routines that are transport independent.
62 //
63 class RPCUser {
64   public:
65     void awaitResponce(int tag);
66     void verifyProtocolAndVersion();
67 };
68
69 //
70 // server side routines that are transport independent.
71 //
72 class RPCServer {
73   public:
74         int __versionVerifyDone__;
75 };
76
77 extern int RPC_readReady (int fd);
78 extern int RPC_setup_socket (int *sfd,   // return file descriptor
79                              int family, // AF_INET ...
80                              int type);   // SOCK_STREAM ...
81 extern int xdr_String(XDR*, String*);
82 extern int RPCprocessCreate(int *pid, char *hostName, char *userName,
83                             char *commandLine, char **arg_list = 0);
84 extern char **RPC_make_arg_list (char *program, int family, int type, int port, int flag);
85 extern int 
86 RPC_undo_arg_list (int argc, char **arg_list, char **machine, int *family,
87                    int *type, int *well_known_socket, int *flag);
88 extern int RPC_getConnect (int fd);
89
90 #endif