|
|
1.1 root 1: /* oper_error.c - deal with return of error to an operation */
2:
3: #ifndef lint
4: static char *rcsid = "$Header: /f/osi/quipu/RCS/oper_error.c,v 7.1 90/07/09 14:46:23 mrose Exp $";
5: #endif
6:
7: /*
8: * $Header: /f/osi/quipu/RCS/oper_error.c,v 7.1 90/07/09 14:46:23 mrose Exp $
9: *
10: *
11: * $Log: oper_error.c,v $
12: * Revision 7.1 90/07/09 14:46:23 mrose
13: * sync
14: *
15: * Revision 7.0 89/11/23 22:17:51 mrose
16: * Release 6.0
17: *
18: */
19:
20: /*
21: * NOTICE
22: *
23: * Acquisition, use, and distribution of this module and related
24: * materials are subject to the restrictions of a license agreement.
25: * Consult the Preface in the User's Manual for the full terms of
26: * this agreement.
27: *
28: */
29:
30:
31: /* LINTLIBRARY */
32:
33: #include "rosap.h"
34: #include "quipu/util.h"
35: #include "quipu/connection.h"
36: #include "quipu/ds_error.h"
37:
38: extern LLog * log_dsap;
39:
40: oper_error(conn, di)
41: struct connection * conn;
42: struct DSAPindication * di;
43: {
44: struct DSAPerror * de = &(di->di_error);
45: struct oper_act * oper;
46:
47: DLOG(log_dsap, LLOG_TRACE, ("net_wait_ro_error"));
48:
49: for(oper=conn->cn_operlist; oper != NULLOPER; oper=oper->on_next_conn)
50: if(oper->on_id == de->de_id)
51: break;
52:
53: if(oper == NULLOPER)
54: {
55: LLOG(log_dsap, LLOG_FATAL, ("oper_error: Cannot locate operation for error"));
56: send_ro_ureject(conn->cn_ad, &(de->de_id), ROS_REP_UNRECOG);
57: return;
58: }
59:
60: if(oper->on_state == ON_ABANDONED)
61: {
62: LLOG(log_dsap, LLOG_NOTICE, ("oper_error: operation had been abandoned"));
63: oper_extract(oper);
64: return;
65: }
66:
67: if(!ds_recog_err(de->de_err.dse_type))
68: {
69: LLOG(log_dsap, LLOG_EXCEPTIONS, ("oper_error - Unrecognised error"));
70: send_ro_ureject(conn->cn_ad, &(de->de_id), ROS_REP_RECERR);
71: oper_fail_wakeup(oper);
72: }
73:
74: oper->on_resp = (*di); /* struct copy */
75:
76: /* Need to check type of operation here! */
77: switch(oper->on_type)
78: {
79: case ON_TYPE_X500:
80: task_error_wakeup(oper);
81: break;
82: case ON_TYPE_SUBTASK:
83: subtask_error_wakeup(oper);
84: break;
85: case ON_TYPE_BIND_COMPARE:
86: bind_compare_error_wakeup(oper);
87: break;
88: case ON_TYPE_GET_DSA_INFO:
89: dsa_info_error_wakeup(oper);
90: break;
91: case ON_TYPE_GET_EDB:
92: get_edb_fail_wakeup(oper);
93: break;
94: default:
95: LLOG(log_dsap, LLOG_EXCEPTIONS, ("oper_error - on_type invalid"));
96: break;
97: }
98:
99: }
100:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.