|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T d
Length: 6957 (0x1b2d)
Types: TextFile
Names: »ds_inv.c«
└─⟦3d0c2be1b⟧ Bits:30001254 ISODE-5.0 Tape
└─⟦eba4602b1⟧ »./isode-5.0.tar.Z«
└─⟦d3ac74d73⟧
└─⟦this⟧ »isode-5.0/dsap/net/ds_inv.c«
/* ds_inv.c - Invoke Directory Operations */
#ifndef lint
static char *rcsid = "$Header: /f/osi/dsap/net/RCS/ds_inv.c,v 6.0 89/03/18 23:28:21 mrose Rel $";
#endif
/*
* $Header: /f/osi/dsap/net/RCS/ds_inv.c,v 6.0 89/03/18 23:28:21 mrose Rel $
*
*
* $Log: ds_inv.c,v $
* Revision 6.0 89/03/18 23:28:21 mrose
* Release 5.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 "rosap.h"
#include "quipu/util.h"
#include "quipu/connection.h"
extern LLog * log_dsap;
extern int dsap_ad; /* Association descriptor */
extern int dsap_id; /* Last id sent */
extern char * dsa_address; /* address of default dsa */
void ros_log ();
#ifdef PDU_DUMP
#define DUMP_ARG "arg"
#define DUMP_RES "res"
#define DUMP_ERR "err"
#endif
ds_invoke(op, pe, resp_type, resp_pe)
int op;
PE pe;
int *resp_type;
PE *resp_pe;
{
DLOG(log_dsap, LLOG_FATAL, ("Better have a good reason for using ds_invoke"));
++dsap_id;
return(dap_invoke(dsap_ad, dsap_id, op, pe, resp_type, resp_pe));
}
dap_invoke(ad, id, op, pe, resp_type, resp_pe)
int ad;
int id;
int op;
PE pe;
int *resp_type;
PE *resp_pe;
{
struct RoSAPindication roi_s;
struct RoSAPindication *roi = &roi_s;
struct RoSAPpreject *rop = &(roi->roi_preject);
int inv_ret;
DLOG(log_dsap, LLOG_TRACE, ("dap_invoke(ad,id,op, ...) <%d,%d,%d, ...>", ad, id, op));
#ifdef PDU_DUMP
pdu_dump (pe,DUMP_ARG,op);
#endif
#ifdef DEBUG
/* PDU Level Logging */
switch (op) {
case OP_READ:
PLOG (log_dsap, print_DAS_ReadArgument, pe, "Read", 0);
break;
case OP_COMPARE:
PLOG (log_dsap, print_DAS_CompareArgument, pe, "Compare", 0);
break;
case OP_ABANDON:
PLOG (log_dsap, print_DAS_AbandonArgument, pe, "Abandon", 0);
break;
case OP_LIST:
PLOG (log_dsap, print_DAS_ListArgument, pe, "List", 0);
break;
case OP_SEARCH:
PLOG (log_dsap, print_DAS_SearchArgument, pe, "Search", 0);
break;
case OP_ADDENTRY:
PLOG (log_dsap, print_DAS_AddEntryArgument, pe, "AddEntry", 0);
break;
case OP_REMOVEENTRY:
PLOG (log_dsap, print_DAS_RemoveEntryArgument, pe, "RemoveEntry", 0);
break;
case OP_MODIFYENTRY:
PLOG (log_dsap, print_DAS_ModifyEntryArgument, pe, "ModifyEntry", 0);
break;
case OP_MODIFYRDN:
PLOG (log_dsap, print_DAS_ModifyRDNArgument, pe, "ModifyRDN", 0);
break;
case OP_GETEDB:
PLOG (log_dsap, print_Quipu_GetEntryDataBlockArgument, pe, "GetEDB", 0);
break;
default:
LLOG (log_dsap, LLOG_PDUS, ("Unknown operation (%d) - no argument PDU dump",op));
}
#endif
inv_ret = RoIntrRequest(ad,op,pe,id,NULLIP,ROS_NOPRIO,roi);
pe_free (pe);
DLOG(log_dsap, LLOG_NOTICE, ("RoIntrReq: returned %d", inv_ret));
switch(inv_ret)
{
case OK:
DLOG(log_dsap, LLOG_TRACE, ("ds_invoke() : RoInvokeRequest OK"));
switch(roi->roi_type)
{
case ROI_RESULT:
*resp_type = op;
*resp_pe = roi->roi_result.ror_result;
#ifdef PDU_DUMP
pdu_dump (*resp_pe,DUMP_RES,op);
#endif
#ifdef DEBUG
/* PDU Level Logging */
switch (op) {
case OP_READ:
PLOG (log_dsap, print_DAS_ReadResult, *resp_pe, "Read", 1);
break;
case OP_COMPARE:
PLOG (log_dsap, print_DAS_CompareResult, *resp_pe, "Compare", 1);
break;
case OP_ABANDON:
PLOG (log_dsap, print_DAS_AbandonResult, *resp_pe, "Abandon", 1);
break;
case OP_LIST:
PLOG (log_dsap, print_DAS_ListResult, *resp_pe, "List", 1);
break;
case OP_SEARCH:
PLOG (log_dsap, print_DAS_SearchResult, *resp_pe, "Search", 1);
break;
case OP_ADDENTRY:
PLOG (log_dsap, print_DAS_AddEntryResult, *resp_pe, "AddEntry", 1);
break;
case OP_REMOVEENTRY:
PLOG (log_dsap, print_DAS_RemoveEntryResult, *resp_pe, "RemoveEntry",1);
break;
case OP_MODIFYENTRY:
PLOG (log_dsap, print_DAS_ModifyEntryResult, *resp_pe, "ModifyEntry",1);
break;
case OP_MODIFYRDN:
PLOG (log_dsap, print_DAS_ModifyRDNResult, *resp_pe, "ModifyRDN", 1);
break;
case OP_GETEDB:
PLOG (log_dsap, print_Quipu_GetEntryDataBlockResult, *resp_pe, "GetEDB", 1);
break;
default:
LLOG (log_dsap, LLOG_PDUS, ("Unknown operation (%d) - no result PDU dump",op));
}
#endif
return(DS_OK);
case ROI_ERROR:
*resp_type = roi->roi_error.roe_error;
*resp_pe = roi->roi_error.roe_param;
#ifdef PDU_DUMP
pdu_dump (*resp_pe,DUMP_ERR,op);
#endif
/* PLOG (log_dsap, print_OPError, *resp_pe, "OperationError", 1); */
return(DS_ERROR_REMOTE);
default:
LLOG(log_dsap, LLOG_FATAL, ("Unknown roi_type : %d", roi->roi_type));
return(DS_ERROR_PROVIDER);
}
case NOTOK:
ros_log(rop, "RO-INVOKE.REQUEST");
return(DS_ERROR_PROVIDER);
case DONE:
/*
* Assume A-RELEASE.INDICATION since RO-END.INDICATION is obsolete.
*/
LLOG(log_dsap, LLOG_EXCEPTIONS, ("Responder has sent Finish!"));
return(DS_ERROR_PROVIDER);
default:
LLOG(log_dsap, LLOG_FATAL, ("Unknown return from RoInvokeRequest : %d", inv_ret));
}
return(DS_ERROR_PROVIDER);
}
#ifdef PDU_DUMP
static int pdu_count = -1;
static char * pdu_dir = NULLCP;
pdu_dump_init (dir)
char * dir;
{
pdu_count = 0;
pdu_dir = strdup (dir);
LLOG (log_dsap, LLOG_NOTICE, ("PDU Tracing enabled - %s",dir));
(void) mkdir (pdu_dir,0755);
}
pdu_dump (pe,type,op)
PE pe;
char * type;
int op;
{
char filename [BUFSIZE];
char * oper;
PS ps;
FILE * fptr;
if ( pdu_count == -1)
return;
if (strcmp (type,DUMP_ARG) == 0)
pdu_count++;
switch (op) {
case OP_READ:
oper = "read";
break;
case OP_COMPARE:
oper = "compare";
break;
case OP_ABANDON: /* Humm ... */
oper = "abandon";
break;
case OP_LIST:
oper = "list";
break;
case OP_SEARCH:
oper = "search";
break;
case OP_ADDENTRY:
oper = "add";
break;
case OP_REMOVEENTRY:
oper = "remove";
break;
case OP_MODIFYENTRY:
oper = "modify";
break;
case OP_MODIFYRDN:
oper = "modifyrdn";
break;
case OP_GETEDB:
oper = "getedb";
break;
case 100: /* special case for bind */
oper = "bind";
break;
}
(void) sprintf (filename, "%s/%s_%s.%d",pdu_dir,oper,type,pdu_count);
LLOG (log_dsap,LLOG_DEBUG,("Writing PDU to file %s",filename));
if ((fptr = fopen (filename,"w")) == (FILE *) NULL) {
LLOG(log_dsap,LLOG_EXCEPTIONS,("Cant open PDU file %s",filename));
return;
}
ps = ps_alloc (std_open);
if (std_setup (ps,fptr) != OK) {
(void) fclose (fptr);
return;
}
pe2pl (ps,pe);
(void) fclose (fptr);
ps_free (ps);
}
#endif