comparison utilities/vampipe-server.cpp @ 73:7bfc07576830

Ensure id is passed through properly in convert and in server
author Chris Cannam <c.cannam@qmul.ac.uk>
date Mon, 10 Oct 2016 15:03:47 +0100
parents a5ba837bca28
children
comparison
equal deleted inserted replaced
72:16acd7d24b1a 73:7bfc07576830
28 exit(2); 28 exit(2);
29 } 29 }
30 30
31 static CountingPluginHandleMapper mapper; 31 static CountingPluginHandleMapper mapper;
32 32
33 static RequestOrResponse::RpcId readId(const RpcRequest::Reader &r)
34 {
35 int number;
36 string tag;
37 switch (r.getId().which()) {
38 case RpcRequest::Id::Which::NUMBER:
39 number = r.getId().getNumber();
40 return { RequestOrResponse::RpcId::Number, number, "" };
41 case RpcRequest::Id::Which::TAG:
42 tag = r.getId().getTag();
43 return { RequestOrResponse::RpcId::Tag, 0, tag };
44 case RpcRequest::Id::Which::NONE:
45 return { RequestOrResponse::RpcId::Absent, 0, "" };
46 }
47 return {};
48 }
49
50 static void buildId(RpcResponse::Builder &b, const RequestOrResponse::RpcId &id)
51 {
52 switch (id.type) {
53 case RequestOrResponse::RpcId::Number:
54 b.getId().setNumber(id.number);
55 break;
56 case RequestOrResponse::RpcId::Tag:
57 b.getId().setTag(id.tag);
58 break;
59 case RequestOrResponse::RpcId::Absent:
60 b.getId().setNone();
61 break;
62 }
63 }
64
33 RequestOrResponse 65 RequestOrResponse
34 readRequestCapnp() 66 readRequestCapnp()
35 { 67 {
36 RequestOrResponse rr; 68 RequestOrResponse rr;
37 rr.direction = RequestOrResponse::Request; 69 rr.direction = RequestOrResponse::Request;
46 78
47 ::capnp::InputStreamMessageReader message(buffered); 79 ::capnp::InputStreamMessageReader message(buffered);
48 RpcRequest::Reader reader = message.getRoot<RpcRequest>(); 80 RpcRequest::Reader reader = message.getRoot<RpcRequest>();
49 81
50 rr.type = VampnProto::getRequestResponseType(reader); 82 rr.type = VampnProto::getRequestResponseType(reader);
83 rr.id = readId(reader);
51 84
52 switch (rr.type) { 85 switch (rr.type) {
53 86
54 case RRType::List: 87 case RRType::List:
55 VampnProto::readRpcRequest_List(reader); // type check only 88 VampnProto::readRpcRequest_List(reader); // type check only
78 writeResponseCapnp(RequestOrResponse &rr) 111 writeResponseCapnp(RequestOrResponse &rr)
79 { 112 {
80 ::capnp::MallocMessageBuilder message; 113 ::capnp::MallocMessageBuilder message;
81 RpcResponse::Builder builder = message.initRoot<RpcResponse>(); 114 RpcResponse::Builder builder = message.initRoot<RpcResponse>();
82 115
116 buildId(builder, rr.id);
117
83 if (!rr.success) { 118 if (!rr.success) {
84 119
85 VampnProto::buildRpcResponse_Error(builder, rr.errorText, rr.type); 120 VampnProto::buildRpcResponse_Error(builder, rr.errorText, rr.type);
86 121
87 } else { 122 } else {
238 cerr << "vampipe-server: eof reached" << endl; 273 cerr << "vampipe-server: eof reached" << endl;
239 break; 274 break;
240 } 275 }
241 276
242 RequestOrResponse response = handleRequest(request); 277 RequestOrResponse response = handleRequest(request);
278 response.id = request.id;
243 279
244 cerr << "vampipe-server: request handled, writing response" 280 cerr << "vampipe-server: request handled, writing response"
245 << endl; 281 << endl;
246 282
247 writeResponseCapnp(response); 283 writeResponseCapnp(response);