|
|
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 n
Length: 4704 (0x1260)
Types: TextFile
Names: »ns_ac_in_rsp.c«
└─⟦3d0c2be1b⟧ Bits:30001254 ISODE-5.0 Tape
└─⟦eba4602b1⟧ »./isode-5.0.tar.Z«
└─⟦d3ac74d73⟧
└─⟦this⟧ »isode-5.0/dsap/net/ns_ac_in_rsp.c«
/* ns_ac_in_resp.c - send A-ASSOCIATE.RESPONSE */
#ifndef lint
static char *rcsid = "$Header: /f/osi/dsap/net/RCS/ns_ac_in_rsp.c,v 6.0 89/03/18 23:28:43 mrose Rel $";
#endif
/*
* $Header: /f/osi/dsap/net/RCS/ns_ac_in_rsp.c,v 6.0 89/03/18 23:28:43 mrose Rel $
*
* $Log: ns_ac_in_rsp.c,v $
* Revision 6.0 89/03/18 23:28:43 mrose
* Release 5.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 "acsap.h"
#include "rosap.h"
#include "quipu/util.h"
#include "quipu/connection.h"
extern LLog * log_dsap;
Conn conn_alloc();
void conn_free();
void acs_log ();
/*
* Respond to a request for association/bind/connection.
*/
net_send_init_response(conn)
register struct connection * conn;
{
DSAinfo this = &(id_st.info);
struct AcSAPindication aci_s;
struct AcSAPindication *aci = &aci_s;
struct AcSAPabort *aca = &aci->aci_abort;
PE data;
PE ro_data;
PE *ro_datap = &(ro_data);
int ndata;
struct init_activity * ia = &(conn->cn_init_act);
struct AcSAPstart * acs = ia->ia_acs;
struct PSAPstart * ps = &(acs->acs_start);
DLOG(log_dsap,LLOG_TRACE, ("net_send_init_response()"));
*ro_datap = NULLPE;
if(ia->ia_status == ACS_ACCEPT)
{
if(ia->ia_resp.init_ret_type == RET_TYPE_RES)
{
if(encode_DAS_DirectoryBindResult(&data, 1,
NULLIP, NULLCP, &(ia->ia_resp.init_resp_res)) == OK)
{
DLOG(log_dsap,LLOG_TRACE, ("Encoded DirectoryBindResult"));
if (build_Remote__Operations__Notation_BindResultValue (ro_datap, 1, NULL, NULLCP, data) == OK)
{
DLOG(log_dsap,LLOG_TRACE, ("Built BindResultValue"));
ndata = 1;
}
else
{
LLOG (log_dsap, LLOG_EXCEPTIONS, ("build_Remote__Operations__Notation_BindResultValue failed"));
ia->ia_status = ACS_TRANSIENT;
ia->ia_reason = ACS_USER_NOREASON;
ndata = 0;
}
pe_free(data);
}
else
{
LLOG(log_dsap,LLOG_EXCEPTIONS, ("Failed to encode DirectoryBindResult"));
ia->ia_status = ACS_TRANSIENT;
ia->ia_reason = ACS_USER_NOREASON;
ndata = 0;
}
}
else
{
if(encode_DAS_DirectoryBindError(&data, 1,
NULLIP, NULLCP, &(ia->ia_resp.init_resp_err)) == OK)
{
DLOG(log_dsap,LLOG_TRACE, ("Encoded DirectoryBindError"));
if (build_Remote__Operations__Notation_BindErrorValue (ro_datap, 1, NULL, NULLCP, data) == OK)
{
DLOG(log_dsap,LLOG_TRACE, ("Built BindErrorValue"));
ia->ia_status = ACS_PERMANENT;
ia->ia_reason = ACS_USER_NOREASON;
ndata = 1;
}
else
{
LLOG (log_dsap, LLOG_EXCEPTIONS, ("build_Remote__Operations__Notation_BindErrorValue failed"));
ia->ia_status = ACS_TRANSIENT;
ia->ia_reason = ACS_USER_NOREASON;
ndata = 0;
}
pe_free(data);
}
else
{
LLOG(log_dsap,LLOG_EXCEPTIONS, ("Failed to encode DirectoryBindError"));
ia->ia_status = ACS_TRANSIENT;
ia->ia_reason = ACS_USER_NOREASON;
ndata = 0;
}
}
}
else
{
ndata = 0;
}
if(ndata != 0)
{
/* Should get the context id from ps->ps_ctxlist */
(*ro_datap) -> pe_context = conn->cn_context_id = 3;
}
LLOG(log_dsap,LLOG_NOTICE, ("A-ASSOCIATE.RESPONSE: %s%s%s",
AcErrString (ia->ia_status),
((ia->ia_status == ACS_ACCEPT) ? "" : ", "),
((ia->ia_status == ACS_ACCEPT) ? "" : AcErrString (ia -> ia_reason))));
#ifdef DEBUG
{
int i;
for(i=0; i<ps->ps_ctxlist.pc_nctx; i++)
{
LLOG(log_dsap, LLOG_DEBUG, ("ctx[%d] id = %d, res = %d.", i,
ps->ps_ctxlist.pc_ctx[i].pc_id,
ps->ps_ctxlist.pc_ctx[i].pc_result));
}
}
#endif
if(AcAssocResponse(conn->cn_ad, ia->ia_status, ia->ia_reason,
acs->acs_context, this->aei, this->addr, &(ps->ps_ctxlist),
ps->ps_defctxresult, this->p_req, this->s_req, this->isn,
ps->ps_settings, &(ps->ps_connect), ro_datap, ndata, aci) == OK)
{
DLOG(log_dsap,LLOG_TRACE, ("AcAssocResponse OK"));
if(ia->ia_status == ACS_ACCEPT)
{
conn->cn_state = CN_STATE_OPEN;
}
else
{
DLOG(log_dsap,LLOG_TRACE, ("status != ACS_ACCEPT"));
conn->cn_state = CN_STATE_FAIL;
conn->cn_ad = 0;
}
}
else
{
acs_log(aca, "A-ASSOCIATE.RESPONSE");
ACAFREE(aca);
conn->cn_state = CN_STATE_FAIL;
}
if (ro_data != NULLPE)
pe_free (ro_data);
ACSFREE(acs);
free ((char*)acs);
}