DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T d

⟦fd061fae7⟧ TextFile

    Length: 7577 (0x1d99)
    Types: TextFile
    Names: »ds_inv.c«

Derivation

└─⟦2d1937cfd⟧ Bits:30007241 EUUGD22: P.P 5.0
    └─⟦35176feda⟧ »EurOpenD22/isode/isode-6.tar.Z« 
        └─⟦de7628f85⟧ 
            └─⟦this⟧ »isode-6.0/dsap/net/ds_inv.c« 

TextFile

/* ds_inv.c - Invoke Directory Operations */

#ifndef lint
static char *rcsid = "$Header: /f/osi/dsap/net/RCS/ds_inv.c,v 7.0 89/11/23 21:48:13 mrose Rel $";
#endif

/*
 * $Header: /f/osi/dsap/net/RCS/ds_inv.c,v 7.0 89/11/23 21:48:13 mrose Rel $
 *
 *
 * $Log:	ds_inv.c,v $
 * Revision 7.0  89/11/23  21:48:13  mrose
 * Release 6.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"));
    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;

    ++(*id);

    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	HEAVY_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

    *resp_type = 0;
    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:
	    if(roi->roi_result.ror_id != (*id))
	    {
		LLOG(log_dsap, LLOG_EXCEPTIONS, ("RoIntrReq returned event for id other than that requested"));
	    }
	    *resp_type = op;
	    *resp_pe = roi->roi_result.ror_result;
#ifdef PDU_DUMP
	    pdu_dump (*resp_pe,DUMP_RES,op);
#endif
#ifdef	HEAVY_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:
	    if(roi->roi_error.roe_id != (*id))
	    {
		LLOG(log_dsap, LLOG_EXCEPTIONS, ("RoIntrReq returned event for id other than that requested"));
	    }
	    *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");
	if(ROS_FATAL(rop->rop_reason) || (rop->rop_reason == ROS_PARAMETER))
	{
	    LLOG(log_dsap, LLOG_FATAL, ("RoIntr fatal PReject"));
	}
	if ((*resp_type = rop->rop_reason) == ROS_INTERRUPTED) {
	    return(attempt_abandon(ad, id, op, resp_pe, resp_type));
	}
	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);
	DLOG (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;
	}
		
	(void) pe2pl (ps,pe);

	(void) fclose (fptr);
	ps_free (ps);
}
#endif