Beispiel #1
0
void
svccb::reply (const void *reply, sfs::xdrproc_t xdr, bool nocache)
{
    rpc_msg rm;

    rm.rm_xid = xid ();
    rm.rm_direction = REPLY;
    rm.rm_reply.rp_stat = MSG_ACCEPTED;
    rm.acpted_rply.ar_verf = _null_auth;
    rm.acpted_rply.ar_stat = SUCCESS;
    rm.acpted_rply.ar_results.where = (char *) reply;
    rm.acpted_rply.ar_results.proc
        = reinterpret_cast<sun_xdrproc_t> (xdr ? xdr : srv->tbl[proc ()].xdr_res);

    get_rpc_stats ().end_call (this, ts_start);

    xdrsuio x (XDR_ENCODE);
    if (!xdr_replymsg (x.xdrp (), &rm)) {
        warn ("svccb::reply: xdr_replymsg failed\n");
        delete this;
        return;
    }

    trace (4, "reply %s:%s x=%x\n",
           srv->rpcprog->name, srv->tbl[msg.rm_call.cb_proc].name,
           xidswap (msg.rm_xid));
    if (asrvtrace >= 5 && !xdr && srv->tbl[msg.rm_call.cb_proc].print_res)
        srv->tbl[msg.rm_call.cb_proc].print_res (reply, NULL, asrvtrace - 4,
                "REPLY", "");
    srv->sendreply (this, &x, nocache);
}
Beispiel #2
0
void
mtdispatch_t::init_rpc_stats ()
{
  if (ok_amt_rpc_stats)
    get_rpc_stats().set_active(true).set_interval (ok_amt_rpc_stats_interval);
}