dsapinvoke.c
来自「ftam等标准协议服务器和客户端的源代码。」· C语言 代码 · 共 315 行
C
315 行
/* dsapinvoke.c - DSAP : Invoke DAP operations */#ifndef lintstatic char *rcsid = "$Header: /xtel/isode/isode/dsap/net/RCS/dsapinvoke.c,v 9.0 1992/06/16 12:14:05 isode Rel $";#endif/* * $Header: /xtel/isode/isode/dsap/net/RCS/dsapinvoke.c,v 9.0 1992/06/16 12:14:05 isode Rel $ * * * $Log: dsapinvoke.c,v $ * Revision 9.0 1992/06/16 12:14:05 isode * Release 8.0 * *//* * 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"#include "../x500as/DAS-types.h"#include "../x500as/Quipu-types.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")); } watch_dog("RoInvokeRequest (DSP)"); result = RoInvokeRequest (sd, arg->dca_dsarg.arg_type, ROS_ASYNC, arg_pe, id, NULLIP, ROS_NOPRIO, roi); watch_dog_reset(); 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")); } watch_dog("RoInvokeRequest (QSP)"); result = RoInvokeRequest (sd, arg->dca_dsarg.arg_type, ROS_ASYNC, arg_pe, id, NULLIP, ROS_NOPRIO, roi); watch_dog_reset(); 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);}int IspInvokeRequest (sd, id, arg, di)int sd;int id;struct ds_op_arg * arg;struct DSAPindication * di;{ return QspInvokeRequest (sd, id, arg, di);}int IspEncodeInvoke (pep, arg)PE * pep;struct ds_op_arg * arg;{ return QspEncodeInvoke (pep, arg);}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?