b980eabeeb475a877f002a2d96da06c88b3b8b67
2 Copyright (C) 2010 by Ronnie Sahlberg <ronniesahlberg@gmail.com>
4 This program is free software; you can redistribute it and/or modify
5 it under the terms of the GNU Lesser General Public License as published by
6 the Free Software Foundation; either version 2.1 of the License, or
7 (at your option) any later version.
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 Lesser General Public License for more details.
14 You should have received a copy of the GNU Lesser General Public License
15 along with this program; if not, see <http://www.gnu.org/licenses/>.
29 #include "libnfs-raw.h"
30 #include "libnfs-private.h"
32 struct rpc_context
*rpc_init_context(void)
34 struct rpc_context
*rpc
;
36 rpc
= malloc(sizeof(struct rpc_context
));
40 bzero(rpc
, sizeof(struct rpc_context
));
42 rpc
->encodebuflen
= 65536;
43 rpc
->encodebuf
= malloc(rpc
->encodebuflen
);
44 if (rpc
->encodebuf
== NULL
) {
49 rpc
->auth
= authunix_create_default();
50 if (rpc
->auth
== NULL
) {
62 struct rpc_context
*rpc_init_udp_context(void)
64 struct rpc_context
*rpc
;
66 rpc
= rpc_init_context();
74 void rpc_set_auth(struct rpc_context
*rpc
, struct AUTH
*auth
)
76 if (rpc
->auth
!= NULL
) {
77 auth_destroy(rpc
->auth
);
83 void rpc_set_error(struct rpc_context
*rpc
, char *error_string
, ...)
88 if (rpc
->error_string
!= NULL
) {
89 free(rpc
->error_string
);
91 va_start(ap
, error_string
);
92 vasprintf(&str
, error_string
, ap
);
93 rpc
->error_string
= str
;
97 char *rpc_get_error(struct rpc_context
*rpc
)
99 return rpc
->error_string
;
102 void rpc_error_all_pdus(struct rpc_context
*rpc
, char *error
)
106 while((pdu
= rpc
->outqueue
) != NULL
) {
107 pdu
->cb(rpc
, RPC_STATUS_ERROR
, error
, pdu
->private_data
);
108 SLIST_REMOVE(&rpc
->outqueue
, pdu
);
109 rpc_free_pdu(rpc
, pdu
);
111 while((pdu
= rpc
->waitpdu
) != NULL
) {
112 pdu
->cb(rpc
, RPC_STATUS_ERROR
, error
, pdu
->private_data
);
113 SLIST_REMOVE(&rpc
->waitpdu
, pdu
);
114 rpc_free_pdu(rpc
, pdu
);
119 void rpc_destroy_context(struct rpc_context
*rpc
)
123 while((pdu
= rpc
->outqueue
) != NULL
) {
124 pdu
->cb(rpc
, RPC_STATUS_CANCEL
, NULL
, pdu
->private_data
);
125 SLIST_REMOVE(&rpc
->outqueue
, pdu
);
126 rpc_free_pdu(rpc
, pdu
);
128 while((pdu
= rpc
->waitpdu
) != NULL
) {
129 pdu
->cb(rpc
, RPC_STATUS_CANCEL
, NULL
, pdu
->private_data
);
130 SLIST_REMOVE(&rpc
->waitpdu
, pdu
);
131 rpc_free_pdu(rpc
, pdu
);
134 auth_destroy(rpc
->auth
);
141 if (rpc
->encodebuf
!= NULL
) {
142 free(rpc
->encodebuf
);
143 rpc
->encodebuf
= NULL
;
146 if (rpc
->error_string
!= NULL
) {
147 free(rpc
->error_string
);
148 rpc
->error_string
= NULL
;