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