1// SendReceiveRequest.h
2
3#ifndef NET_FS_SEND_RECEIVE_REQUEST_H
4#define NET_FS_SEND_RECEIVE_REQUEST_H
5
6#include "RequestChannel.h"
7#include "RequestConnection.h"
8
9
10// error code when disconnected
11enum {
12	ERROR_NOT_CONNECTED = ENOTCONN
13};
14
15// SendRequest
16template<typename Reply>
17static
18status_t
19SendRequest(RequestConnection* connection, Request* request,
20	Reply** _reply)
21{
22	Request* reply;
23	status_t error = connection->SendRequest(request, &reply);
24	if (error != B_OK)
25		return error;
26	*_reply = dynamic_cast<Reply*>(reply);
27	if (!*_reply) {
28		delete reply;
29		return B_BAD_DATA;
30	}
31	return B_OK;
32}
33
34// ReceiveRequest
35template<typename SpecificRequest>
36static
37status_t
38ReceiveRequest(RequestChannel* channel, SpecificRequest** _request)
39{
40	Request* request;
41	status_t error = channel->ReceiveRequest(&request);
42	if (error != B_OK)
43		return error;
44	*_request = dynamic_cast<SpecificRequest*>(request);
45	if (!*_request) {
46		delete request;
47		return B_BAD_DATA;
48	}
49	return B_OK;
50}
51
52
53#endif	// NET_FS_SEND_RECEIVE_REQUEST_H
54