|
|
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: 5518 (0x158e)
Types: TextFile
Names: »ns_ac_in_req.c«
└─⟦3d0c2be1b⟧ Bits:30001254 ISODE-5.0 Tape
└─⟦eba4602b1⟧ »./isode-5.0.tar.Z«
└─⟦d3ac74d73⟧
└─⟦this⟧ »isode-5.0/dsap/net/ns_ac_in_req.c«
/* ns_ac_in_req.c - Perform DSP BIND */
#ifndef lint
static char *rcsid = "$Header: /f/osi/dsap/net/RCS/ns_ac_in_req.c,v 6.0 89/03/18 23:28:42 mrose Rel $";
#endif
/*
* $Header: /f/osi/dsap/net/RCS/ns_ac_in_req.c,v 6.0 89/03/18 23:28:42 mrose Rel $
*
*
* $Log: ns_ac_in_req.c,v $
* Revision 6.0 89/03/18 23:28:42 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"
Conn conn_alloc();
void conn_free();
extern LLog * log_dsap;
extern PS opt;
extern OID x500_ds_ac;
extern OID x500_ds_as;
extern struct PSAPctxlist * x500_ds_pcdl;
net_send_init_request(conn)
register struct connection * conn;
{
struct ds_bind_arg *bind_arg;
PE data;
struct AcSAPconnect acc_s;
struct AcSAPconnect *acc = &acc_s;
struct AcSAPindication aci_s;
struct AcSAPindication *aci = &aci_s;
struct AcSAPabort *aca = &aci->aci_abort;
/*
* Perhaps more parameters are needed to RyAsynBind ??
* But for now this information has no use.
*
DSAinfo this = &(id_st.info);
*
*/
struct PSAPctxlist * pc;
int inv_ret;
DLOG(log_dsap, LLOG_TRACE, ("net_send_init_request()"));
if(!conn->cn_dsa)
LLOG(log_dsap, LLOG_EXCEPTIONS, ("Connecting to a DUA!"));
/*
* Build the BIND C-structure into a PE to send.
*/
bind_arg = &(conn->cn_init_act.ia_req);
if(encode_DAS_DirectoryBindArgument(&data, 0, 0, NULLCP, bind_arg) == OK)
{
DLOG(log_dsap, LLOG_TRACE, ("Calling another DSA!"));
LLOG(log_dsap, LLOG_NOTICE, ("net_send_init_request: Calling: %s", paddr2str(&(conn->cn_addr),NULLNA)));
/*
* Set up the context list each time there is a call.
*/
pc = (struct PSAPctxlist *) malloc(sizeof(struct PSAPctxlist));
(*pc) = (*(x500_ds_pcdl)); /* structure assignment */
data -> pe_context = conn->cn_context_id = 3;
inv_ret = RyAsynBind(x500_ds_ac, &(conn->cn_addr), pc, x500_ds_as,
data, 2, acc, aci);
switch(inv_ret)
{
case NOTOK:
LLOG(log_dsap, LLOG_EXCEPTIONS, ("A-ASSOCIATE.REQUEST ASYNC NOTOK!"));
ACAFREE(aca);
conn->cn_state = CN_STATE_FAIL;
conn->cn_ad = 0;
break;
case DONE:
LLOG(log_dsap, LLOG_EXCEPTIONS, ("A-ASSOCIATE.REQUEST ASYNC DONE! (ad = %d)", acc->acc_sd));
conn->cn_ad = acc->acc_sd;
conn->cn_state = ((SetROPS(conn->cn_ad) == OK)
? CN_STATE_OPEN : CN_STATE_FAIL);
net_this_ac_aux(conn, acc);
break;
case OK:
LLOG(log_dsap, LLOG_EXCEPTIONS, ("A-ASSOCIATE.REQUEST ASYNC OK! (ad = %d)", acc->acc_sd));
conn->cn_init_act.ia_class = ACTIVITY_NET_WAIT;
conn->cn_ad = acc->acc_sd;
conn->cn_state = ((SetROPS(conn->cn_ad) == OK)
? CN_STATE_INIT : CN_STATE_FAIL);
break;
default:
LLOG(log_dsap, LLOG_EXCEPTIONS, ("Unknown return from AcAsyn : %d", inv_ret));
break;
} /* switch inv_ret */
ACCFREE(acc);
pe_free(data);
}
else
{
LLOG(log_dsap, LLOG_EXCEPTIONS, ("Unable to encode DirectoryBindArgument"));
conn->cn_state = CN_STATE_FAIL;
conn->cn_ad = 0;
}
}
net_this_ac_aux(conn, acc)
register struct connection * conn;
register struct AcSAPconnect * acc;
{
struct ds_bind_arg * bind_res;
struct ds_bind_error * bind_err;
conn->cn_init_act.ia_type = ACT_TYPE_RESP;
ParseRyBindResponse(acc);
switch(acc->acc_result)
{
case ACS_ACCEPT:
LLOG(log_dsap, LLOG_EXCEPTIONS, ("A-ASSOCIATE.RETRY ASYNC ACCEPT"));
conn->cn_init_act.ia_resp.init_resp_type = RESP_TYPE_RET;
conn->cn_init_act.ia_resp.init_ret_type = RET_TYPE_RES;
bind_res = &(conn->cn_init_act.ia_resp.init_resp_res);
if(decode_DAS_DirectoryBindResult(acc->acc_info[0], 1, NULLIP, NULLVP, bind_res) == OK)
{
conn->cn_state = ((SetROPS(conn->cn_ad) == OK)
? CN_STATE_OPEN : CN_STATE_FAIL);
}
else
{
LLOG (log_dsap,LLOG_EXCEPTIONS,( "Unable to parse DirectoryBindResult"));
conn->cn_state = CN_STATE_FAIL;
}
break;
case ACS_PERMANENT:
/*
* Get the DirectoryBindError
*/
LLOG(log_dsap, LLOG_EXCEPTIONS, ("A-ASSOCIATE.RETRY ASYNC PERMANENT"));
conn->cn_state = CN_STATE_FAIL;
conn->cn_ad = 0;
conn->cn_init_act.ia_resp.init_resp_type = RESP_TYPE_RET;
conn->cn_init_act.ia_resp.init_ret_type = RET_TYPE_ERR;
bind_err = &(conn->cn_init_act.ia_resp.init_resp_err);
if(acc->acc_info != 0)
{
if(decode_DAS_DirectoryBindError(acc->acc_info[0], 1, NULLIP, NULLVP, bind_err) != OK)
{
LLOG(log_dsap, LLOG_EXCEPTIONS, ("Unable to decode DirectoryBindError"));
conn->cn_init_act.ia_resp.init_resp_type = RESP_TYPE_REJ;
}
}
else
{
conn->cn_init_act.ia_resp.init_resp_type = RESP_TYPE_REJ;
}
default:
LLOG(log_dsap, LLOG_EXCEPTIONS, ("A-ASSOCIATE.RETRY ASYNC OTHER"));
conn->cn_state = CN_STATE_FAIL;
conn->cn_ad = 0;
conn->cn_init_act.ia_resp.init_resp_type = RESP_TYPE_REJ;
conn->cn_init_act.ia_status = acc->acc_result;
LLOG (log_dsap,LLOG_EXCEPTIONS,( "Association rejected: [%s]",
AcErrString(acc->acc_result)));
break;
} /* switch acc->acc_result */
}