|
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 c
Length: 4809 (0x12c9) Types: TextFile Names: »conn.c«
└─⟦2d1937cfd⟧ Bits:30007241 EUUGD22: P.P 5.0 └─⟦35176feda⟧ »EurOpenD22/isode/isode-6.tar.Z« └─⟦de7628f85⟧ └─⟦this⟧ »isode-6.0/quipu/conn.c«
/* conn.c - */ #ifndef lint static char *rcsid = "$Header: /f/osi/quipu/RCS/conn.c,v 7.0 89/11/23 22:16:42 mrose Rel $"; #endif /* * $Header: /f/osi/quipu/RCS/conn.c,v 7.0 89/11/23 22:16:42 mrose Rel $ * * * $Log: conn.c,v $ * Revision 7.0 89/11/23 22:16:42 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. * */ #include "rosap.h" #include "quipu/util.h" #include "quipu/connection.h" extern LLog * log_dsap; Conn conn_alloc() { Conn conn_ret; conn_ret = (Conn) calloc(1,sizeof(struct connection)); conn_ret->cn_op_id = 1; return(conn_ret); } conn_free(conn) Conn conn; { DLOG(log_dsap, LLOG_TRACE, ("conn_free()")); if(conn->cn_what != NULLDN) dn_free(conn->cn_what); if(conn->cn_who != NULLDN) dn_free(conn->cn_who); if (conn->cn_init_act.ia_vec[0]) free (conn->cn_init_act.ia_vec[0]); if (conn->cn_init_act.ia_vec[1]) free (conn->cn_init_act.ia_vec[1]); if (conn->cn_init_act.ia_vec[2]) free (conn->cn_init_act.ia_vec[2]); if (conn->cn_init_act.ia_vec[3]) free (conn->cn_init_act.ia_vec[3]); bind_arg_free (&conn->cn_init_act.ia_req); bind_arg_free (&conn->cn_init_act.ia_res); free((char *)conn); } conn_extract(conn) Conn conn; { /* * Extract all the operations made on this connection, and all * the tasks (and their derivative operations) made on the connection; * then remove the connection from the list of active connections. */ struct oper_act * on; struct oper_act * on_next; struct task_act * tk; struct task_act * tk_next; struct connection * cn; struct connection **cn_p; struct DSError * err; DLOG (log_dsap,LLOG_TRACE, ("conn_extract")); if(conn == NULLCONN) { LLOG(log_dsap, LLOG_EXCEPTIONS, ("Extracting NULLCONN!!!")); return; } cn_p = &(connlist); for(cn=connlist; cn!=NULLCONN; cn=cn->cn_next) { DLOG(log_dsap, LLOG_DEBUG, ("checking connlist")); if(cn == conn) break; cn_p = &(cn->cn_next); } if(cn==NULLCONN) { LLOG(log_dsap, LLOG_EXCEPTIONS, ("conn_extract - connection not in connlist")); } else { /* Cut connection loose from global list */ DLOG(log_dsap, LLOG_DEBUG, ("Extracting conn from connlist")); (*cn_p) = cn->cn_next; conns_used--; } for(on=conn->cn_operlist; on!=NULLOPER; on=on_next) { on_next = on->on_next_conn; oper_fail_wakeup (on); } for(tk=conn->cn_tasklist; tk!=NULLTASK; tk=tk_next) { tk_next = tk->tk_next; err = &(tk->tk_resp.resp_err); if((err->dse_type != DSE_REFERRAL) && (err->dse_type != DSE_DSAREFERRAL)) { err->dse_type = DSE_SERVICEERROR; err->ERR_SERVICE.DSE_sv_problem = DSE_SV_UNAVAILABLE; } task_error(tk); task_extract(tk); } conn_free(conn); } conn_log(conn) struct connection * conn; { struct oper_act * oper; struct task_act * task; if(conn == NULLCONN) { LLOG (log_dsap,LLOG_NOTICE, ("Connection: NULLCONN")); return; } DLOG (log_dsap,LLOG_DEBUG, ("Connection [%x], ad = %d, ctx = %d", conn, conn->cn_ad, conn->cn_ctx)); #ifdef DEBUG switch(conn->cn_state) { case CN_INDICATED: DLOG (log_dsap,LLOG_DEBUG, ("State: INDICATED")); break; case CN_WAITING: DLOG (log_dsap,LLOG_DEBUG, ("State: WAITING")); break; case CN_CONNECTING1: DLOG (log_dsap,LLOG_DEBUG, ("State: CONNECTING 1")); break; case CN_CONNECTING2: DLOG (log_dsap,LLOG_DEBUG, ("State: CONNECTING 2")); break; case CN_OPEN: DLOG (log_dsap,LLOG_DEBUG, ("State: OPEN")); break; case CN_FAILED: DLOG (log_dsap,LLOG_DEBUG, ("State: FAIL")); break; case CN_CLOSING: DLOG (log_dsap,LLOG_DEBUG, ("State: CLOSING")); break; case CN_OPENING: DLOG (log_dsap,LLOG_DEBUG, ("State: OPENING")); break; default: DLOG (log_dsap,LLOG_DEBUG, ("State: Erroneous - %d",conn->cn_state)); break; } #endif DLOG (log_dsap,LLOG_DEBUG, ("Tasks:")); for(task=conn->cn_tasklist; task!=NULLTASK; task=task->tk_next) task_log(task); DLOG (log_dsap,LLOG_DEBUG, ("Opers:")); for(oper=conn->cn_operlist; oper!=NULLOPER; oper=oper->on_next_conn) oper_log(oper); DLOG (log_dsap,LLOG_DEBUG, ("!")); } conn_list_log(cn) struct connection * cn; { struct connection * cn_tmp; DLOG(log_dsap, LLOG_DEBUG, ("Connection List:")); for(cn_tmp=cn; cn_tmp!=NULLCONN; cn_tmp=cn_tmp->cn_next) { conn_log(cn_tmp); } DLOG(log_dsap, LLOG_DEBUG, ("End of Connection List.")); }