/* oper_error.c - deal with return of error to an operation */
static char *rcsid
= "$Header: /f/osi/quipu/RCS/oper_error.c,v 7.3 91/02/22 09:39:33 mrose Interim $";
* $Header: /f/osi/quipu/RCS/oper_error.c,v 7.3 91/02/22 09:39:33 mrose Interim $
* Revision 7.3 91/02/22 09:39:33 mrose
* Revision 7.2 90/10/17 11:54:31 mrose
* Revision 7.1 90/07/09 14:46:23 mrose
* Revision 7.0 89/11/23 22:17:51 mrose
* 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
#include "quipu/connection.h"
#include "quipu/ds_error.h"
struct connection
* conn
;
struct DSAPindication
* di
;
struct DSAPerror
* de
= &(di
->di_error
);
DLOG(log_dsap
, LLOG_TRACE
, ("net_wait_ro_error"));
for(oper
=conn
->cn_operlist
; oper
!= NULLOPER
; oper
=oper
->on_next_conn
)
if(oper
->on_id
== de
->de_id
)
LLOG(log_dsap
, LLOG_FATAL
, ("oper_error: Cannot locate operation for error"));
send_ro_ureject(conn
->cn_ad
, &(de
->de_id
), ROS_REP_UNRECOG
);
if(oper
->on_state
== ON_ABANDONED
)
LLOG(log_dsap
, LLOG_NOTICE
, ("oper_error: operation had been abandoned"));
if(!ds_recog_err(de
->de_err
.dse_type
))
LLOG(log_dsap
, LLOG_EXCEPTIONS
, ("oper_error - Unrecognised error"));
send_ro_ureject(conn
->cn_ad
, &(de
->de_id
), ROS_REP_RECERR
);
oper
->on_resp
= (*di
); /* struct copy */
/* Need to check type of operation here! */
subtask_error_wakeup(oper
);
case ON_TYPE_BIND_COMPARE
:
bind_compare_error_wakeup(oper
);
case ON_TYPE_GET_DSA_INFO
:
dsa_info_error_wakeup(oper
);
get_edb_fail_wakeup(oper
);
shadow_fail_wakeup(oper
);
LLOG(log_dsap
, LLOG_EXCEPTIONS
, ("oper_error - on_type invalid"));