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