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 t

⟦ab5ffda0c⟧ TextFile

    Length: 2998 (0xbb6)
    Types: TextFile
    Names: »task_error.c«

Derivation

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

TextFile

/* task_error.c - */

#ifndef lint
static char *rcsid = "$Header: /f/osi/quipu/RCS/task_error.c,v 7.0 89/11/23 22:18:12 mrose Rel $";
#endif

/*
 * $Header: /f/osi/quipu/RCS/task_error.c,v 7.0 89/11/23 22:18:12 mrose Rel $
 *
 *
 * $Log:	task_error.c,v $
 * Revision 7.0  89/11/23  22:18:12  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;

void ros_log ();

/*
* The DSA has produced an error for the task, encode the error,
* generate an RO-ERROR.REQUEST and update the task block.
*/
task_error(task)
register        struct task_act * task;
{
    struct connection		* cn = task->tk_conn;
    PE                          err_pe;
    int                         err_type;
    struct RoSAPindication      roi_s;
    struct RoSAPindication      *roi = &roi_s;
    struct RoSAPpreject         *rop = &(roi->roi_preject);
    struct DSError              * err;

#ifndef NO_STATS
    extern LLog * log_stat;
    LLOG (log_stat, LLOG_TRACE,("Error sent (%d)",task->tk_conn->cn_ad));
#endif

    DLOG(log_dsap, LLOG_TRACE, ("task_error"));

    if(task == NULLTASK)
    {
	LLOG(log_dsap, LLOG_FATAL, ("Task memerr 2"));
	return;
    }

    err = task->tk_error;

    /* Return the right sort of referral error */
    if(cn->cn_ctx == CN_CTX_X500_DAP)
    {
	if(err->dse_type == DSE_DSAREFERRAL)
	{
	    LLOG(log_dsap, LLOG_TRACE, ("Changing DSAREFERRAL to REFERRAL (DAP)"));
	    err->dse_type = DSE_REFERRAL;
	}
    }
    else
    {
	if(err->dse_type == DSE_REFERRAL)
	{
	    LLOG(log_dsap, LLOG_TRACE, ("Changing DSAREFERRAL to REFERRAL"));
	    err->dse_type = DSE_DSAREFERRAL;
	}
    }

    if(encode_OPError(&err_pe, &err_type, err) == OK)
    {
	/* PLOG (log_dsap, print_OPError, &err_pe, "Operation Error", 0); */
	watch_dog("RoErrorRequest");
	if(RoErrorRequest(cn->cn_ad, task->tk_id, err_type,
	  err_pe, ROS_NOPRIO, roi) ==  NOTOK)
	{
	    watch_dog_reset();
	    ros_log(rop, "RO-ERROR.REQUEST");
	    if(ROS_FATAL(rop->rop_reason) || (rop->rop_reason == ROS_PARAMETER))
	    {
		LLOG(log_dsap, LLOG_FATAL, ("RoError fatal PReject - fail the connection"));
		cn->cn_state = CN_FAILED;
	    }
	} else
		watch_dog_reset();

	if(err_pe != NULLPE)
	    pe_free(err_pe);
    }
    else
    {
	LLOG(log_dsap, LLOG_EXCEPTIONS, ("Couldn't encode error."));
	/*
	* None of the available rejects fit the problem,
	* the only plausible response is ROS_IP_RELEASE (a lie)
	* without then releasing.
	*/
	send_ro_ureject(cn->cn_ad, &(task->tk_id), ROS_IP_RELEASE);
    }

    if(cn->cn_state == CN_FAILED)
    {
	DLOG(log_dsap, LLOG_DEBUG, ("NOT extracting conn:"));
	conn_log(cn);
/*
	conn_extract(cn);
*/
    }
}