Index: src/trusted/reverse_service/reverse_service.cc |
=================================================================== |
--- src/trusted/reverse_service/reverse_service.cc (revision 7373) |
+++ src/trusted/reverse_service/reverse_service.cc (working copy) |
@@ -124,6 +124,28 @@ |
rpc->result = NACL_SRPC_RESULT_OK; |
} |
+void PostMessageRpc(NaClSrpcRpc* rpc, |
+ NaClSrpcArg** in_args, |
+ NaClSrpcArg** out_args, |
+ NaClSrpcClosure* done) { |
+ nacl::ReverseService* service = reinterpret_cast<nacl::ReverseService*>( |
+ rpc->channel->server_instance_data); |
+ char* message = in_args[0]->arrays.carr; |
+ nacl_abi_size_t nbytes = in_args[0]->u.count; |
+ NaClSrpcClosureRunner on_return(done); |
+ |
+ NaClLog(4, "Entered PostMessageRpc\n"); |
+ if (NULL == service->reverse_interface()) { |
+ NaClLog(1, "PostMessage RPC, no reverse_interface. Message: %s\n", |
+ message); |
+ } else { |
+ service->reverse_interface()->PostMessage(std::string(message, nbytes)); |
+ } |
+ out_args[0]->u.ival = (int32_t) nbytes; |
+ NaClLog(4, "Leaving PostMessageRpc\n"); |
+ rpc->result = NACL_SRPC_RESULT_OK; |
+} |
+ |
// Manifest name service, internal APIs. |
// |
// Manifest file lookups result in read-only file descriptors with a |
@@ -272,6 +294,13 @@ |
namespace nacl { |
+// TODO(bsy): this is a temporary cross-repo hack; should be removed |
+// when the interface is made pure virtual again |
+void ReverseInterface::PostMessage(nacl::string message) { |
+ NaClLog(0, "ReverseInterface::PostMessage(NACL_OUTPUT_TAG:%s)\n", |
+ message.c_str()); |
+} |
+ |
// need NaClThreadIfFactoryFunction that keeps "this" to do counting |
struct ReverseCountingThreadInterface { |
@@ -394,6 +423,7 @@ |
{ NACL_REVERSE_CONTROL_ADD_CHANNEL, AddChannel, }, |
{ NACL_REVERSE_CONTROL_INIT_DONE, ModuleInitDoneRpc, }, |
{ NACL_REVERSE_CONTROL_REPORT_STATUS, ModuleExitRpc, }, |
+ { NACL_REVERSE_CONTROL_POST_MESSAGE, PostMessageRpc, }, |
{ NACL_MANIFEST_LIST, ManifestListRpc, }, |
{ NACL_MANIFEST_LOOKUP, ManifestLookupRpc, }, |
{ NACL_MANIFEST_UNREF, ManifestUnrefRpc, }, |