nfs: initial import.
[ccan] / ccan / nfs / libnfs-private.h
1 /* 
2    Copyright (C) by Ronnie Sahlberg <ronniesahlberg@gmail.com> 2010
3    
4    This program is free software; you can redistribute it and/or modify
5    it under the terms of the GNU General Public License as published by
6    the Free Software Foundation; either version 3 of the License, or
7    (at your option) any later version.
8    
9    This program is distributed in the hope that it will be useful,
10    but WITHOUT ANY WARRANTY; without even the implied warranty of
11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12    GNU General Public License for more details.
13    
14    You should have received a copy of the GNU General Public License
15    along with this program; if not, see <http://www.gnu.org/licenses/>.
16 */
17
18 #include <rpc/auth.h>
19
20 struct rpc_context {
21         int fd;
22         int is_connected;
23
24         char *error_string;
25
26         rpc_cb connect_cb;
27         void *connect_data;
28
29         AUTH *auth;
30         unsigned long xid;
31
32        /* buffer used for encoding RPC PDU */
33        char *encodebuf;
34        int encodebuflen;
35
36        struct rpc_pdu *outqueue;
37        struct rpc_pdu *waitpdu;
38
39        int insize;
40        int inpos;
41        char *inbuf;
42 };
43
44 struct rpc_pdu {
45         struct rpc_pdu *prev, *next;
46
47         unsigned long xid;
48         XDR xdr;
49
50         int written;
51         struct rpc_data outdata;
52
53         rpc_cb cb;
54         void *private_data;
55
56         /* function to decode the xdr reply data and buffer to decode into */
57         xdrproc_t xdr_decode_fn;
58         caddr_t xdr_decode_buf;
59         int xdr_decode_bufsize;
60 };
61
62 struct rpc_pdu *rpc_allocate_pdu(struct rpc_context *rpc, int program, int version, int procedure, rpc_cb cb, void *private_data, xdrproc_t xdr_decode_fn, int xdr_bufsize);
63 void rpc_free_pdu(struct rpc_context *rpc, struct rpc_pdu *pdu);
64 int rpc_queue_pdu(struct rpc_context *rpc, struct rpc_pdu *pdu);
65 int rpc_get_pdu_size(char *buf);
66 int rpc_process_pdu(struct rpc_context *rpc, char *buf, int size);
67 void rpc_error_all_pdus(struct rpc_context *rpc, char *error);
68