Back to index

glibc  2.9
Functions | Variables
rpc_prot.c File Reference
#include <sys/param.h>
#include <rpc/rpc.h>

Go to the source code of this file.

Functions

bool_t xdr_opaque_auth (XDR *xdrs, struct opaque_auth *ap)
bool_t xdr_des_block (XDR *xdrs, des_block *blkp)
bool_t xdr_accepted_reply (XDR *xdrs, struct accepted_reply *ar)
bool_t xdr_rejected_reply (XDR *xdrs, struct rejected_reply *rr)
bool_t xdr_replymsg (XDR *xdrs, struct rpc_msg *rmsg)
bool_t xdr_callhdr (XDR *xdrs, struct rpc_msg *cmsg)
static void accepted (enum accept_stat acpt_stat, struct rpc_err *error)
static void rejected (enum reject_stat rjct_stat, struct rpc_err *error)
void _seterr_reply (struct rpc_msg *msg, struct rpc_err *error)

Variables

static struct xdr_discrim [3]

Function Documentation

void _seterr_reply ( struct rpc_msg msg,
struct rpc_err error 
)

Definition at line 242 of file rpc_prot.c.

{
  /* optimized for normal, SUCCESSful case */
  switch (msg->rm_reply.rp_stat)
    {
    case MSG_ACCEPTED:
      if (msg->acpted_rply.ar_stat == SUCCESS)
       {
         error->re_status = RPC_SUCCESS;
         return;
       };
      accepted (msg->acpted_rply.ar_stat, error);
      break;

    case MSG_DENIED:
      rejected (msg->rjcted_rply.rj_stat, error);
      break;

    default:
      error->re_status = RPC_FAILED;
      error->re_lb.s1 = (long) (msg->rm_reply.rp_stat);
      break;
    }
  switch (error->re_status)
    {

    case RPC_VERSMISMATCH:
      error->re_vers.low = msg->rjcted_rply.rj_vers.low;
      error->re_vers.high = msg->rjcted_rply.rj_vers.high;
      break;

    case RPC_AUTHERROR:
      error->re_why = msg->rjcted_rply.rj_why;
      break;

    case RPC_PROGVERSMISMATCH:
      error->re_vers.low = msg->acpted_rply.ar_vers.low;
      error->re_vers.high = msg->acpted_rply.ar_vers.high;
      break;
    default:
      break;
    }
}

Here is the call graph for this function:

Here is the caller graph for this function:

static void accepted ( enum accept_stat  acpt_stat,
struct rpc_err error 
) [static]

Definition at line 181 of file rpc_prot.c.

{
  switch (acpt_stat)
    {

    case PROG_UNAVAIL:
      error->re_status = RPC_PROGUNAVAIL;
      return;

    case PROG_MISMATCH:
      error->re_status = RPC_PROGVERSMISMATCH;
      return;

    case PROC_UNAVAIL:
      error->re_status = RPC_PROCUNAVAIL;
      return;

    case GARBAGE_ARGS:
      error->re_status = RPC_CANTDECODEARGS;
      return;

    case SYSTEM_ERR:
      error->re_status = RPC_SYSTEMERROR;
      return;

    case SUCCESS:
      error->re_status = RPC_SUCCESS;
      return;
    }
  /* something's wrong, but we don't know what ... */
  error->re_status = RPC_FAILED;
  error->re_lb.s1 = (long) MSG_ACCEPTED;
  error->re_lb.s2 = (long) acpt_stat;
}

Here is the caller graph for this function:

static void rejected ( enum reject_stat  rjct_stat,
struct rpc_err error 
) [static]

Definition at line 218 of file rpc_prot.c.

{
  switch (rjct_stat)
    {
    case RPC_VERSMISMATCH:
      error->re_status = RPC_VERSMISMATCH;
      return;
    case AUTH_ERROR:
      error->re_status = RPC_AUTHERROR;
      return;
    default:
      /* something's wrong, but we don't know what ... */
      error->re_status = RPC_FAILED;
      error->re_lb.s1 = (long) MSG_DENIED;
      error->re_lb.s2 = (long) rjct_stat;
      return;
    }
}

Here is the caller graph for this function:

bool_t xdr_accepted_reply ( XDR xdrs,
struct accepted_reply ar 
)

Definition at line 84 of file rpc_prot.c.

{
  /* personalized union, rather than calling xdr_union */
  if (!INTUSE(xdr_opaque_auth) (xdrs, &(ar->ar_verf)))
    return FALSE;
  if (!INTUSE(xdr_enum) (xdrs, (enum_t *) & (ar->ar_stat)))
    return FALSE;
  switch (ar->ar_stat)
    {
    case SUCCESS:
      return ((*(ar->ar_results.proc)) (xdrs, ar->ar_results.where));
    case PROG_MISMATCH:
      if (!INTUSE(xdr_u_long) (xdrs, &(ar->ar_vers.low)))
       return FALSE;
      return (INTUSE(xdr_u_long) (xdrs, &(ar->ar_vers.high)));
    default:
      return TRUE;
    }
  return TRUE;              /* TRUE => open ended set of problems */
}

Here is the call graph for this function:

bool_t xdr_callhdr ( XDR xdrs,
struct rpc_msg cmsg 
)

Definition at line 160 of file rpc_prot.c.

{

  cmsg->rm_direction = CALL;
  cmsg->rm_call.cb_rpcvers = RPC_MSG_VERSION;
  if (
       (xdrs->x_op == XDR_ENCODE) &&
       INTUSE(xdr_u_long) (xdrs, &(cmsg->rm_xid)) &&
       INTUSE(xdr_enum) (xdrs, (enum_t *) & (cmsg->rm_direction)) &&
       INTUSE(xdr_u_long) (xdrs, &(cmsg->rm_call.cb_rpcvers)) &&
       INTUSE(xdr_u_long) (xdrs, &(cmsg->rm_call.cb_prog)))
    return INTUSE(xdr_u_long) (xdrs, &(cmsg->rm_call.cb_vers));
  return FALSE;
}

Here is the call graph for this function:

Here is the caller graph for this function:

bool_t xdr_des_block ( XDR xdrs,
des_block blkp 
)

Definition at line 72 of file rpc_prot.c.

{
  return INTUSE(xdr_opaque) (xdrs, (caddr_t) blkp, sizeof (des_block));
}

Here is the call graph for this function:

Here is the caller graph for this function:

bool_t xdr_opaque_auth ( XDR xdrs,
struct opaque_auth ap 
)

Definition at line 58 of file rpc_prot.c.

{

  if (INTUSE(xdr_enum) (xdrs, &(ap->oa_flavor)))
    return INTUSE(xdr_bytes) (xdrs, &ap->oa_base,
                    &ap->oa_length, MAX_AUTH_BYTES);
  return FALSE;
}

Here is the call graph for this function:

Here is the caller graph for this function:

bool_t xdr_rejected_reply ( XDR xdrs,
struct rejected_reply rr 
)

Definition at line 110 of file rpc_prot.c.

{
  /* personalized union, rather than calling xdr_union */
  if (!INTUSE(xdr_enum) (xdrs, (enum_t *) & (rr->rj_stat)))
    return FALSE;
  switch (rr->rj_stat)
    {
    case RPC_MISMATCH:
      if (!INTUSE(xdr_u_long) (xdrs, &(rr->rj_vers.low)))
       return FALSE;
      return INTUSE(xdr_u_long) (xdrs, &(rr->rj_vers.high));

    case AUTH_ERROR:
      return INTUSE(xdr_enum) (xdrs, (enum_t *) & (rr->rj_why));
    }
  return FALSE;
}

Here is the call graph for this function:

bool_t xdr_replymsg ( XDR xdrs,
struct rpc_msg rmsg 
)

Definition at line 139 of file rpc_prot.c.

{
  if (INTUSE(xdr_u_long) (xdrs, &(rmsg->rm_xid)) &&
      INTUSE(xdr_enum) (xdrs, (enum_t *) & (rmsg->rm_direction)) &&
      (rmsg->rm_direction == REPLY))
    return INTUSE(xdr_union) (xdrs, (enum_t *) & (rmsg->rm_reply.rp_stat),
                           (caddr_t) & (rmsg->rm_reply.ru), reply_dscrm,
                           NULL_xdrproc_t);
  return FALSE;
}

Here is the call graph for this function:

Here is the caller graph for this function:


Variable Documentation

struct xdr_discrim[3] [static]