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