Changed xdr_Boolean to char rather than int to reflect Boolean change.
[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.13  1994/03/20 01:45:23  markc
8  * Changed xdr_Boolean to char rather than int to reflect Boolean change.
9  *
10  * Revision 1.12  1994/03/11  21:01:24  hollings
11  * Changed Boolean from int to char to match X11 convention.
12  *
13  *
14  */
15
16 // prevents malloc from being redefined
17 #ifdef MIPS
18 #define MALLOC_DEFINED_AS_VOID
19 #endif
20
21 #include <stdio.h>
22 #include <strings.h>
23 #include <string.h>
24 #include <stdlib.h>
25 #include <errno.h>
26 #include <assert.h>
27 #include <fcntl.h>
28 #include <memory.h>
29 #include <sys/types.h>
30 #include <sys/socket.h>
31 #include <netinet/in.h>
32 #include <netdb.h>
33 #include <sys/time.h>
34 #include <unistd.h>
35 #include <sys/file.h>
36
37 extern "C" {
38 #include <rpc/types.h>
39 #include <rpc/xdr.h>
40 }
41
42 // functions that g++-fixincludes missed
43 #ifdef MIPS
44 void bzero (char*, int);
45 int select (int, fd_set*, fd_set*, fd_set*, struct timeval*);
46 char *strdup (char*);
47 int gethostname(char*, int);
48 int socket(int, int, int);
49 int bind(int s, struct sockaddr *, int);
50 int getsockname(int, struct sockaddr*, int *);
51 int listen(int, int);
52 int connect(int s, struct sockaddr*, int);
53 int socketpair(int, int, int, int sv[2]);
54 int vfork();
55 int accept(int, struct sockaddr *addr, int *);
56 #endif
57
58 #define xdr_Boolean xdr_char
59 typedef XDR *XDRptr;
60 typedef int (*xdrIOFunc)(int handle, char *buf, unsigned int len);
61
62 typedef char Boolean;
63 typedef char *String;
64
65 //
66 // Functions common to server and client side.
67 //
68 class XDRrpc {
69   public:
70     XDRrpc(char *m, char *u, char *p, xdrIOFunc, xdrIOFunc, 
71            char **arg_list=0, int nblock=0);
72     XDRrpc(int fd, xdrIOFunc readRoutine, xdrIOFunc writeRoutine, int nblock=0);
73     XDRrpc(int family, int port, int type, char *machine, xdrIOFunc readFunc,
74            xdrIOFunc writeFunc, int nblock=0);
75     virtual ~XDRrpc();
76     void closeConnect() { if (fd >= 0) close(fd); fd = -1;}
77     void setNonBlock();
78     int get_fd() { return fd;}
79     int readReady();
80     XDR *__xdrs__;
81     int fd;
82     int pid;            // pid of child;
83     // should the fd be closed by a destructor ??
84 };
85
86 class THREADrpc {
87   public:
88     THREADrpc(int tid);
89     void setNonBlock() { ; }
90     void setTid(int id) { tid = id; }
91   protected:
92     int tid;
93     // these are only to be used by implmentors of thread RPCs.
94     //   the value is only valid during a thread RPC.
95     unsigned int requestingThread;
96     unsigned int getRequestingThread()  { return requestingThread; }
97 };
98
99
100 //
101 // client side common routines that are transport independent.
102 //
103 class RPCUser {
104   public:
105     void awaitResponce(int tag);
106     void verifyProtocolAndVersion();
107 };
108
109 //
110 // server side routines that are transport independent.
111 //
112 class RPCServer {
113   public:
114         int __versionVerifyDone__;
115 };
116
117 extern int RPC_readReady (int fd);
118 extern int RPC_setup_socket (int *sfd,   // return file descriptor
119                              int family, // AF_INET ...
120                              int type);   // SOCK_STREAM ...
121 extern int xdr_String(XDR*, String*);
122 extern int RPCprocessCreate(int *pid, char *hostName, char *userName,
123                             char *commandLine, char **arg_list = 0);
124 extern char **RPC_make_arg_list (char *program, int family, int type, int port, int flag);
125 extern int 
126 RPC_undo_arg_list (int argc, char **arg_list, char **machine, int &family,
127                    int &type, int &well_known_socket, int &flag);
128 extern int RPC_getConnect (int fd);
129
130 #endif