/* * Return name service output */ void NameServiceDump(NaClSrpcRpc *rpc, NaClSrpcArg **in_args, NaClSrpcArg **out_args, NaClSrpcClosure *done) { struct StringBuffer sb; StringBufferCtor(&sb); if (EnumerateNames(&sb, &ns_channel)) { out_args[0]->arrays.str = strdup(sb.buffer); rpc->result = NACL_SRPC_RESULT_OK; } else { rpc->result = NACL_SRPC_RESULT_APP_ERROR; } done->Run(done); StringBufferDtor(&sb); }
int main(void) { int ns; NaClSrpcChannel channel; int connected_socket; int status; int rng; if (!NaClSrpcModuleInit()) { fprintf(stderr, "srpc module init failed\n"); return 1; } printf("Hello world\n"); ns = -1; nacl_nameservice(&ns); printf("ns = %d\n", ns); assert(-1 != ns); connected_socket = imc_connect(ns); assert(-1 != connected_socket); if (!NaClSrpcClientCtor(&channel, connected_socket)) { fprintf(stderr, "Srpc client channel ctor failed\n"); return 1; } printf("NaClSrpcClientCtor succeeded\n"); if (!EnumerateNames(&channel)) { fprintf(stderr, "Could not enumerate names\n"); return 1; } printf("EnumerateNames succeeded\n"); if (NACL_SRPC_RESULT_OK != NaClSrpcInvokeBySignature(&channel, NACL_NAME_SERVICE_LOOKUP, "SecureRandom", O_RDONLY, &status, &rng)) { fprintf(stderr, "nameservice lookup failed, status %d\n", status); return 1; } printf("rpc status %d\n", status); assert(NACL_NAME_SERVICE_SUCCESS == status); printf("rng descriptor %d\n", rng); dump_output(rng, RNG_OUTPUT_BYTES); return 0; }