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