|
|
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 o
Length: 8171 (0x1feb)
Types: TextFile
Names: »oper_act.c«
└─⟦2d1937cfd⟧ Bits:30007241 EUUGD22: P.P 5.0
└─⟦35176feda⟧ »EurOpenD22/isode/isode-6.tar.Z«
└─⟦de7628f85⟧
└─⟦this⟧ »isode-6.0/quipu/oper_act.c«
/* oper_act.c - routines to handle operation activity blocks */
#ifndef lint
static char *rcsid = "$Header: /f/osi/quipu/RCS/oper_act.c,v 7.0 89/11/23 22:17:50 mrose Rel $";
#endif
/*
* $Header: /f/osi/quipu/RCS/oper_act.c,v 7.0 89/11/23 22:17:50 mrose Rel $
*
*
* $Log: oper_act.c,v $
* Revision 7.0 89/11/23 22:17:50 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 "quipu/util.h"
#include "quipu/connection.h"
extern LLog * log_dsap;
struct oper_act *oper_alloc()
{
struct oper_act * on_ret;
on_ret = (struct oper_act *) calloc(1,sizeof(struct oper_act));
on_ret->on_arg = &(on_ret->on_req);
on_ret->on_cha = &(on_ret->on_req.dca_charg);
on_ret->on_result = &(on_ret->on_resp.resp_res);
on_ret->on_error = &(on_ret->on_resp.resp_err);
return(on_ret);
}
oper_free(on)
struct oper_act *on;
{
DLOG(log_dsap, LLOG_TRACE, ("oper_free()"));
on->on_state = -1;
response_free (&(on->on_resp));
if (on->on_req.dca_charg.cha_trace != (struct trace_info *)NULL)
op_arg_free (&on->on_req);
free((char *)on);
}
oper_extract(on)
struct oper_act * on;
{
DLOG(log_dsap, LLOG_TRACE, ("oper_extract()"));
if(on->on_conn != NULLCONN)
oper_conn_extract(on);
if(on->on_task != NULLTASK)
oper_task_extract(on);
oper_free(on);
}
oper_conn_extract(on)
struct oper_act * on;
{
/*
* Extract the operation activity block from the list held by its
* connection.
*/
struct oper_act * on_tmp;
struct oper_act **on_p;
DLOG(log_dsap, LLOG_TRACE, ("oper_conn_extract()"));
if(on == NULLOPER)
{
LLOG (log_dsap,LLOG_FATAL, ("oper_conn_extract: Cannot extract NULLOPER"));
return;
/* This is an implementation error */
}
if(on->on_conn == NULLCONN)
{
LLOG (log_dsap,LLOG_EXCEPTIONS, ("oper_conn_extract: already extracted"));
/* This operation must have already been extracted for some reason. */
return;
}
on_p = &(on->on_conn->cn_operlist);
for(on_tmp=(*on_p); on_tmp!=NULLOPER; on_tmp=on_tmp->on_next_conn)
{
if(on_tmp == on)
break;
on_p = &(on_tmp->on_next_conn);
}
if(on_tmp == NULLOPER)
{
LLOG(log_dsap, LLOG_EXCEPTIONS, ("oper_conn_extract: oper not on connections list!"));
}
else
{
(*on_p) = on_tmp->on_next_conn;
}
on->on_conn = NULLCONN; /* Shows that this has been conn_extracted */
}
oper_task_extract(on)
struct oper_act * on;
{
/*
* Extract this operation from the list held by its task.
*/
struct oper_act * on_tmp;
struct oper_act **on_p;
DLOG(log_dsap, LLOG_TRACE, ("oper_task_extract()"));
if(on == NULLOPER)
{
LLOG (log_dsap,LLOG_FATAL, ("oper_task_extract: Cannot extract NULLOPER"));
return;
/* This is an implementation error */
}
if(on->on_task == NULLTASK)
{
/* Must have been extracted previously. */
if (on->on_state != ON_ABANDONED)
LLOG (log_dsap,LLOG_EXCEPTIONS, ("oper_task_extract: oper has no task"));
return;
}
on_p = &(on->on_task->tk_operlist);
for(on_tmp=(*on_p); on_tmp!=NULLOPER; on_tmp=on_tmp->on_next_task)
{
if(on_tmp == on)
break;
on_p = &(on_tmp->on_next_task);
}
if(on_tmp == NULLOPER)
{
LLOG(log_dsap, LLOG_EXCEPTIONS, ("Oper not on tasks list"));
}
else
{
(*on_p) = on_tmp->on_next_task;
}
if (on->on_dsas != NULL_DI_BLOCK)
di_desist (on->on_dsas);
on->on_dsas = NULL_DI_BLOCK;
on->on_task = NULLTASK; /* Shows that this has been task_extracted */
}
oper_log(on)
struct oper_act * on;
{
DLOG (log_dsap,LLOG_DEBUG, ("Oper id = %d, state = %d, type = %d",
on->on_id, on->on_state, on->on_type));
}
op_arg_free (arg)
struct ds_op_arg * arg;
{
DLOG(log_dsap, LLOG_TRACE, ("op_arg_free()"));
if (arg->dca_dsarg.arg_type == -1 )
return;
else
/* indicate as freed */
arg->dca_dsarg.arg_type = -1;
/* free chain bits */
dn_free (arg->dca_charg.cha_originator);
dn_free (arg->dca_charg.cha_target);
if (arg->dca_charg.cha_domaininfo != NULLPE)
pe_free (arg->dca_charg.cha_domaininfo);
if(arg->dca_charg.cha_trace != NULLTRACEINFO)
trace_info_free (arg->dca_charg.cha_trace);
if (arg->dca_charg.cha_timelimit != NULLCP)
free (arg->dca_charg.cha_timelimit);
/* free argument structure */
switch (arg->dca_dsarg.arg_type) {
case OP_READ:
ca_free (&arg->dca_dsarg.arg_rd.rda_common);
dn_free (arg->dca_dsarg.arg_rd.rda_object);
as_free (arg->dca_dsarg.arg_rd.rda_eis.eis_select);
break;
case OP_COMPARE:
ca_free (&arg->dca_dsarg.arg_cm.cma_common);
dn_free (arg->dca_dsarg.arg_cm.cma_object);
AttrT_free (arg->dca_dsarg.arg_cm.cma_purported.ava_type);
AttrV_free (arg->dca_dsarg.arg_cm.cma_purported.ava_value);
break;
case OP_ABANDON:
break;
case OP_LIST:
ca_free (&arg->dca_dsarg.arg_ls.lsa_common);
dn_free (arg->dca_dsarg.arg_ls.lsa_object);
break;
case OP_SEARCH:
ca_free (&arg->dca_dsarg.arg_sr.sra_common);
dn_free (arg->dca_dsarg.arg_sr.sra_baseobject);
as_free (arg->dca_dsarg.arg_sr.sra_eis.eis_select);
filter_free (arg->dca_dsarg.arg_sr.sra_filter);
break;
case OP_ADDENTRY:
ca_free (&arg->dca_dsarg.arg_ad.ada_common);
dn_free (arg->dca_dsarg.arg_ad.ada_object);
as_free (arg->dca_dsarg.arg_ad.ada_entry);
break;
case OP_REMOVEENTRY:
ca_free (&arg->dca_dsarg.arg_rm.rma_common);
dn_free (arg->dca_dsarg.arg_rm.rma_object);
break;
case OP_MODIFYENTRY:
ca_free (&arg->dca_dsarg.arg_me.mea_common);
dn_free (arg->dca_dsarg.arg_me.mea_object);
ems_free (arg->dca_dsarg.arg_me.mea_changes);
break;
case OP_MODIFYRDN:
ca_free (&arg->dca_dsarg.arg_mr.mra_common);
dn_free (arg->dca_dsarg.arg_mr.mra_object);
rdn_free (arg->dca_dsarg.arg_mr.mra_newrdn);
break;
case OP_GETEDB:
dn_free (arg->dca_dsarg.arg_ge.ga_entry);
break;
default:
break;
}
}
trace_info_free (arg)
struct trace_info * arg;
{
DLOG(log_dsap, LLOG_TRACE, ("trace_info_free()"));
if (arg == NULLTRACEINFO)
return;
dn_free (arg->ti_target);
dn_free (arg->ti_dsa);
trace_info_free (arg->ti_next);
free( (char *) arg);
}
ca_free (arg)
CommonArgs * arg;
{
DLOG(log_dsap, LLOG_TRACE, ("ca_free()"));
dn_free (arg->ca_requestor);
extension_free (arg->ca_extensions);
}
extension_free (arg)
struct extension * arg;
{
DLOG(log_dsap, LLOG_TRACE, ("extension_free()"));
for (; arg != NULLEXT; arg=arg->ext_next) {
if (arg->ext_item != NULLPE)
pe_free (arg->ext_item);
free ((char *) arg);
}
}
response_free (arg)
struct response * arg;
{
DLOG(log_dsap, LLOG_TRACE, ("response_free()"));
ds_error_free (&arg->resp_err);
if (arg->ret_type != RET_TYPE_ERR)
op_res_free (&arg->resp_res);
crefs_free (arg->resp_ref);
}
op_res_free (arg)
struct ds_op_res * arg;
{
DLOG(log_dsap, LLOG_TRACE, ("op_res_free()"));
/* free chain bits */
if (arg->dcr_chres.chr_domaininfo != NULLPE)
pe_free (arg->dcr_chres.chr_domaininfo);
cross_refs_free (arg->dcr_chres.chr_crossrefs);
/* free argument structure */
switch (arg->dcr_dsres.result_type) {
case OP_READ:
/*
dn_free (&arg->dcr_dsres.res_rd.rdr_common.cr_requestor);
*/
entryinfo_comp_free (&arg->dcr_dsres.res_rd.rdr_entry,1);
break;
case OP_COMPARE:
/*
dn_free (&arg->dcr_dsres.res_cm.cmr_common.cr_requestor);
*/
dn_free (arg->dcr_dsres.res_cm.cmr_object);
break;
case OP_LIST:
/*
dn_free (&arg->dcr_dsres.res_ls.lsr_common.cr_requestor);
*/
dn_free (arg->dcr_dsres.res_ls.lsr_object);
subords_free (arg->dcr_dsres.res_ls.lsr_subordinates);
crefs_free (arg->dcr_dsres.res_ls.lsr_cr);
break;
case OP_SEARCH:
search_result_free(&(arg->dcr_dsres.res_sr));
break;
case OP_GETEDB:
break; /* don't free EDB */
default:
break;
}
}
cross_refs_free (arg)
struct cross_ref * arg;
{
DLOG(log_dsap, LLOG_TRACE, ("cross_refs_free()"));
if (arg == NULLXREF)
return;
dn_free (arg->xref_dn);
aps_free (arg->xref_ap);
cross_refs_free (arg->xref_next);
free ((char *)arg);
}