X-Git-Url: http://xvm.mit.edu/gitweb/invirt/third/libt4.git/blobdiff_plain/6b5e09540e9392a7015fae1ad3b01b0973600ff2..f0dcb6b97d6d40f67698d1f71ac26970f1776f82:/rsm_client.h diff --git a/rsm_client.h b/rsm_client.h index be66fec..06ca5a6 100644 --- a/rsm_client.h +++ b/rsm_client.h @@ -19,7 +19,7 @@ class rsm_client { mutex rsm_client_mutex; void primary_failure(lock & rsm_client_mutex_lock); bool init_members(lock & rsm_client_mutex_lock); - rsm_protocol::status invoke(unsigned int proc, string &rep, const string &req); + rsm_protocol::status invoke(unsigned int proc, string & rep, const string & req); template int call_m(unsigned int proc, R & r, const marshall & req); public: rsm_client(string dst); @@ -27,7 +27,7 @@ class rsm_client { template int call(rpc_protocol::proc_t

proc, R & r, const Args & ...a1) { static_assert(is_valid_call::value, "RSM method invoked with incorrect argument types"); - return call_m(proc.id, r, marshall{a1...}); + return call_m(proc.id, r, marshall(a1...)); } }; @@ -43,12 +43,11 @@ inline string hexify(const string & s) { template int rsm_client::call_m(unsigned int proc, R & r, const marshall & req) { string rep; - string res; int intret = invoke(proc, rep, req.content()); VERIFY( intret == rsm_client_protocol::OK ); - unmarshall u(rep, false); - u >> intret; + unmarshall u(rep, false, intret); if (intret < 0) return intret; + string res; u >> res; if (!u.okdone()) { LOG("failed to unmarshall the reply."); @@ -57,17 +56,15 @@ int rsm_client::call_m(unsigned int proc, R & r, const marshall & req) { "0x" << hex << proc << " with the wrong return type"); LOG("here's what I got: \"" << hexify(rep) << "\""); VERIFY(0); - return rpc_protocol::unmarshal_reply_failure; + return rpc_protocol::unmarshall_reply_failure; } - unmarshall u1(res, false); - u1 >> r; - if(!u1.okdone()) { + if(!unmarshall(res, false, r).okdone()) { LOG("failed to unmarshall the reply."); LOG("You are probably calling RPC 0x" << hex << proc << " with the wrong return type."); LOG("here's what I got: \"" << hexify(res) << "\""); VERIFY(0); - return rpc_protocol::unmarshal_reply_failure; + return rpc_protocol::unmarshall_reply_failure; } return intret; }