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