|
|
Initial revision
/* dsapinvoke.c - DSAP : Invoke DAP operations */
#ifndef lint
static char *rcsid = "$Header: /var/lib/cvsd/repos/CSRG/43BSDReno/contrib/isode-beta/dsap/net/dsapinvoke.c,v 1.1 2018/04/24 16:12:56 root Exp $";
#endif
/*
* $Header: /var/lib/cvsd/repos/CSRG/43BSDReno/contrib/isode-beta/dsap/net/dsapinvoke.c,v 1.1 2018/04/24 16:12:56 root Exp $
*
*
* $Log: dsapinvoke.c,v $
* Revision 1.1 2018/04/24 16:12:56 root
* Initial revision
*
* Revision 7.0 90/07/26 14:45:54 mrose
* *** empty log message ***
*
*/
/*
* NOTICE
*
* Acquisition, use, and distribution of this module and related
* materials are subject to the restrictions of a license agreement.
* Consult the Preface in the User's Manual for the full terms of
* this agreement.
*
*/
/* LINTLIBRARY */
#include <stdio.h>
#include "logger.h"
#include "quipu/dsap.h"
extern LLog * log_dsap;
int DapInvokeRequest (sd, id, arg, di)
int sd;
int id;
struct DSArgument * arg;
struct DSAPindication * di;
{
int result;
PE arg_pe;
struct RoSAPindication roi_s;
struct RoSAPindication * roi = &(roi_s);
struct RoSAPpreject * rop = &(roi->roi_preject);
if (DapEncodeInvoke (&(arg_pe), arg) != OK)
{
LLOG (log_dsap, LLOG_EXCEPTIONS, ("DapInvokeRequest: Encoding failed"));
return (dsapreject (di, DP_INVOKE, id, NULLCP, "Failed to encode operation argument"));
}
result = RoInvokeRequest (sd, arg->arg_type, ROS_ASYNC, arg_pe,
id, NULLIP, ROS_NOPRIO, roi);
if (result != OK)
{
if (ROS_FATAL (rop->rop_reason) || (rop->rop_reason == ROS_PARAMETER))
{
LLOG (log_dsap, LLOG_EXCEPTIONS, ("DapInvokeRequest(): Fatal rejection"));
return (dsaplose (di, DP_INVOKE, NULLCP, "RoInvokeRequest failed"));
}
else
{
LLOG (log_dsap, LLOG_EXCEPTIONS, ("DapInvokeRequest(): Non-Fatal rejection"));
return (dsapreject (di, DP_INVOKE, id, NULLCP, "RoInvokeRequest failed"));
}
}
if (arg_pe != NULLPE)
pe_free (arg_pe);
return (OK);
}
int DapEncodeInvoke (pep, arg)
PE * pep;
struct DSArgument * arg;
{
int success;
switch(arg->arg_type)
{
case OP_READ :
success = encode_DAS_ReadArgument(pep,1,0,NULLCP,&(arg->arg_rd));
break;
case OP_COMPARE :
success = encode_DAS_CompareArgument(pep,1,0,NULLCP,&(arg->arg_cm));
break;
case OP_ABANDON :
success = encode_DAS_AbandonArgument(pep,1,0,NULLCP,&(arg->arg_ab));
break;
case OP_LIST :
success = encode_DAS_ListArgument(pep,1,0,NULLCP,&(arg->arg_ls));
break;
case OP_SEARCH :
success = encode_DAS_SearchArgument(pep,1,0,NULLCP,&(arg->arg_sr));
break;
case OP_ADDENTRY :
success = encode_DAS_AddEntryArgument(pep,1,0,NULLCP,&(arg->arg_ad));
break;
case OP_REMOVEENTRY :
success = encode_DAS_RemoveEntryArgument(pep,1,0,NULLCP,&(arg->arg_rm));
break;
case OP_MODIFYENTRY :
success = encode_DAS_ModifyEntryArgument(pep,1,0,NULLCP,&(arg->arg_me));
break;
case OP_MODIFYRDN :
success = encode_DAS_ModifyRDNArgument(pep,1,0,NULLCP,&(arg->arg_mr));
break;
default :
success = NOTOK;
LLOG(log_dsap, LLOG_EXCEPTIONS, ("DapEncodeInvoke(): unknown op type %d", arg->arg_type));
break;
}
return(success);
}
int DspInvokeRequest (sd, id, arg, di)
int sd;
int id;
struct ds_op_arg * arg;
struct DSAPindication * di;
{
int result;
PE arg_pe;
struct RoSAPindication roi_s;
struct RoSAPindication * roi = &(roi_s);
struct RoSAPpreject * rop = &(roi->roi_preject);
if (DspEncodeInvoke (&(arg_pe), arg) != OK)
{
LLOG (log_dsap, LLOG_EXCEPTIONS, ("DspInvokeRequest: Encoding failed"));
return (dsapreject (di, DP_INVOKE, id, NULLCP, "Failed to encode operation argument"));
}
result = RoInvokeRequest (sd, arg->dca_dsarg.arg_type, ROS_ASYNC, arg_pe,
id, NULLIP, ROS_NOPRIO, roi);
if (result != OK)
{
if (ROS_FATAL (rop->rop_reason) || (rop->rop_reason == ROS_PARAMETER))
{
LLOG (log_dsap, LLOG_EXCEPTIONS, ("DspInvokeRequest(): Fatal rejection"));
return (dsaplose (di, DP_INVOKE, NULLCP, "RoInvokeRequest failed"));
}
else
{
LLOG (log_dsap, LLOG_EXCEPTIONS, ("DspInvokeRequest(): Non-Fatal rejection"));
return (dsapreject (di, DP_INVOKE, id, NULLCP, "RoInvokeRequest failed"));
}
}
if (arg_pe != NULLPE)
pe_free (arg_pe);
return (OK);
}
int DspEncodeInvoke (pep, arg)
PE * pep;
struct ds_op_arg * arg;
{
int success;
switch(arg->dca_dsarg.arg_type)
{
case OP_READ :
success = encode_DO_ChainedReadArgument(pep,1,0,NULLCP,arg);
break;
case OP_COMPARE :
success = encode_DO_ChainedCompareArgument(pep,1,0,NULLCP,arg);
break;
case OP_ABANDON :
success = encode_DAS_AbandonArgument(pep,1,0,NULLCP,&(arg->dca_dsarg.arg_ab));
break;
case OP_LIST :
success = encode_DO_ChainedListArgument(pep,1,0,NULLCP,arg);
break;
case OP_SEARCH :
success = encode_DO_ChainedSearchArgument(pep,1,0,NULLCP,arg);
break;
case OP_ADDENTRY :
success = encode_DO_ChainedAddEntryArgument(pep,1,0,NULLCP,arg);
break;
case OP_REMOVEENTRY :
success = encode_DO_ChainedRemoveEntryArgument(pep,1,0,NULLCP,arg);
break;
case OP_MODIFYENTRY :
success = encode_DO_ChainedModifyEntryArgument(pep,1,0,NULLCP,arg);
break;
case OP_MODIFYRDN :
success = encode_DO_ChainedModifyRDNArgument(pep,1,0,NULLCP,arg);
break;
default :
success = NOTOK;
LLOG(log_dsap, LLOG_EXCEPTIONS, ("DspEncodeInvoke(): unknown op type %d", arg->dca_dsarg.arg_type));
break;
}
return(success);
}
int QspInvokeRequest (sd, id, arg, di)
int sd;
int id;
struct ds_op_arg * arg;
struct DSAPindication * di;
{
int result;
PE arg_pe;
struct RoSAPindication roi_s;
struct RoSAPindication * roi = &(roi_s);
struct RoSAPpreject * rop = &(roi->roi_preject);
if (QspEncodeInvoke (&(arg_pe), arg) != OK)
{
LLOG (log_dsap, LLOG_EXCEPTIONS, ("QspInvokeRequest: Encoding failed"));
return (dsapreject (di, DP_INVOKE, id, NULLCP, "Failed to encode operation argument"));
}
result = RoInvokeRequest (sd, arg->dca_dsarg.arg_type, ROS_ASYNC, arg_pe,
id, NULLIP, ROS_NOPRIO, roi);
if (result != OK)
{
if (ROS_FATAL (rop->rop_reason) || (rop->rop_reason == ROS_PARAMETER))
{
LLOG (log_dsap, LLOG_EXCEPTIONS, ("QspInvokeRequest(): Fatal rejection"));
return (dsaplose (di, DP_INVOKE, NULLCP, "RoInvokeRequest failed"));
}
else
{
LLOG (log_dsap, LLOG_EXCEPTIONS, ("QspInvokeRequest(): Non-Fatal rejection"));
return (dsapreject (di, DP_INVOKE, id, NULLCP, "RoInvokeRequest failed"));
}
}
if (arg_pe != NULLPE)
pe_free (arg_pe);
return (OK);
}
int QspEncodeInvoke (pep, arg)
PE * pep;
struct ds_op_arg * arg;
{
int success;
switch(arg->dca_dsarg.arg_type)
{
case OP_READ :
success = encode_DO_ChainedReadArgument(pep,1,0,NULLCP,arg);
break;
case OP_COMPARE :
success = encode_DO_ChainedCompareArgument(pep,1,0,NULLCP,arg);
break;
case OP_ABANDON :
success = encode_DAS_AbandonArgument(pep,1,0,NULLCP,&(arg->dca_dsarg.arg_ab));
break;
case OP_LIST :
success = encode_DO_ChainedListArgument(pep,1,0,NULLCP,arg);
break;
case OP_SEARCH :
success = encode_DO_ChainedSearchArgument(pep,1,0,NULLCP,arg);
break;
case OP_ADDENTRY :
success = encode_DO_ChainedAddEntryArgument(pep,1,0,NULLCP,arg);
break;
case OP_REMOVEENTRY :
success = encode_DO_ChainedRemoveEntryArgument(pep,1,0,NULLCP,arg);
break;
case OP_MODIFYENTRY :
success = encode_DO_ChainedModifyEntryArgument(pep,1,0,NULLCP,arg);
break;
case OP_MODIFYRDN :
success = encode_DO_ChainedModifyRDNArgument(pep,1,0,NULLCP,arg);
break;
case OP_GETEDB :
success = encode_Quipu_GetEntryDataBlockArgument(pep,1,0,NULLCP,&(arg->dca_dsarg.arg_ge));
break;
default :
success = NOTOK;
LLOG(log_dsap, LLOG_EXCEPTIONS, ("QspEncodeInvoke(): unknown op type %d", arg->dca_dsarg.arg_type));
break;
}
return(success);
}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.