xref: /haiku/src/add-ons/kernel/file_systems/nfs4/Request.cpp (revision 3ce57b347fe923dde6bcdba518a1ec479d43e84b)
101d6381dSPawel Dziepak /*
201d6381dSPawel Dziepak  * Copyright 2012 Haiku, Inc. All rights reserved.
301d6381dSPawel Dziepak  * Distributed under the terms of the MIT License.
401d6381dSPawel Dziepak  *
501d6381dSPawel Dziepak  * Authors:
601d6381dSPawel Dziepak  *		Paweł Dziepak, pdziepak@quarnos.org
701d6381dSPawel Dziepak  */
801d6381dSPawel Dziepak 
901d6381dSPawel Dziepak 
1001d6381dSPawel Dziepak #include "Request.h"
1101d6381dSPawel Dziepak 
1201d6381dSPawel Dziepak 
1301d6381dSPawel Dziepak status_t
1401d6381dSPawel Dziepak Request::Send()
1501d6381dSPawel Dziepak {
16*3ce57b34SPawel Dziepak 	return _TrySend();
17*3ce57b34SPawel Dziepak }
18*3ce57b34SPawel Dziepak 
19*3ce57b34SPawel Dziepak 
20*3ce57b34SPawel Dziepak status_t
21*3ce57b34SPawel Dziepak Request::_TrySend()
22*3ce57b34SPawel Dziepak {
2301d6381dSPawel Dziepak 	RPC::Reply *rpl;
24*3ce57b34SPawel Dziepak 	RPC::Request *rpc;
25*3ce57b34SPawel Dziepak 
26*3ce57b34SPawel Dziepak 	status_t result = fServer->SendCallAsync(fBuilder.Request(), &rpl, &rpc);
2701d6381dSPawel Dziepak 	if (result != B_OK)
2801d6381dSPawel Dziepak 		return result;
2901d6381dSPawel Dziepak 
30*3ce57b34SPawel Dziepak 	result = fServer->WaitCall(rpc);
31*3ce57b34SPawel Dziepak 	if (result != B_OK) {
32*3ce57b34SPawel Dziepak 		fServer->CancelCall(rpc);
33*3ce57b34SPawel Dziepak 		delete rpc;
34*3ce57b34SPawel Dziepak 		return result;
35*3ce57b34SPawel Dziepak 	}
36*3ce57b34SPawel Dziepak 
3701d6381dSPawel Dziepak 	return fReply.SetTo(rpl);
3801d6381dSPawel Dziepak }
3901d6381dSPawel Dziepak 
4001d6381dSPawel Dziepak 
4101d6381dSPawel Dziepak void
4201d6381dSPawel Dziepak Request::Reset()
4301d6381dSPawel Dziepak {
4401d6381dSPawel Dziepak 	fBuilder.Reset();
4501d6381dSPawel Dziepak 	fReply.Reset();
4601d6381dSPawel Dziepak }
4701d6381dSPawel Dziepak 
48