|
|
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 m
Length: 3094 (0xc16)
Types: TextFile
Names: »mrelease.c«
└─⟦2d1937cfd⟧ Bits:30007241 EUUGD22: P.P 5.0
└─⟦e83f91978⟧ »EurOpenD22/isode/osimis-2.0.tar.Z«
└─⟦d846658bd⟧
└─⟦this⟧ »osimis/msap/mrelease.c«
/*
* Copyright (c) 1988 University College London
* All rights reserved.
*
* Redistribution and use in source and binary forms are permitted
* provided that the above copyright notice and this paragraph are
* duplicated in all such forms and that any documentation,
* advertising materials, and other materials related to such
* distribution and use acknowledge that the software was developed
* by the Department of Computer Science, University College London.
* The name of the University may not be used to
* endorse or promote products derived from this software without
* specific prior written permission.
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*/
/* Routines to release a management association */
/*
* By George Pavlou, April 1990
*/
#include <stdio.h>
#include "isode/rosap.h"
#include "msap.h"
/* LINTLIBRARY */
int M_TerminateReq (msd, reason, info, mi)
int msd, reason;
PE info;
struct MSAPindication * mi;
{
struct AcSAPrelease acrs;
struct AcSAPindication acis;
int ninfo = (info ? 1 : 0);
if (AcRelRequest(msd, reason, &info, ninfo, NOTOK, &acrs, &acis) == NOTOK) {
mi->mi_type = MI_ABORT;
mi->mi_abort.ma_source = MA_PROVIDER;
mi->mi_abort.ma_reason = acis.aci_abort.aca_reason;
mi->mi_abort.ma_info = NULL;
(void) strncpy(mi->mi_abort.ma_data, acis.aci_abort.aca_data, MA_SIZE);
ACAFREE(&acis.aci_abort);
return NOTOK;
}
ACRFREE(&acrs);
if (acrs.acr_affirmative)
return OK;
mi->mi_type = MI_ABORT;
mi->mi_abort.ma_source = MA_USER;
mi->mi_abort.ma_reason = MA_NOTREL;
mi->mi_abort.ma_info = NULL;
(void) strncpy(mi->mi_abort.ma_data, "Peer refused to release", MA_SIZE);
return NOTOK;
}
int M_TerminateResp (msd, status, reason, info, mi)
int msd, status, reason;
PE info;
struct MSAPindication * mi;
{
struct AcSAPindication acis;
int ninfo = (info ? 1 : 0);
if (AcRelResponse(msd, status, reason, &info, ninfo, &acis) == NOTOK) {
mi->mi_type = MI_ABORT;
mi->mi_abort.ma_source = MA_PROVIDER;
mi->mi_abort.ma_reason = acis.aci_abort.aca_reason;
mi->mi_abort.ma_info = NULL;
(void) strncpy(mi->mi_abort.ma_data, acis.aci_abort.aca_data, MA_SIZE);
ACAFREE(&acis.aci_abort);
return NOTOK;
}
return OK;
}
/* M_AbortReq - abort an association unilaterally
*/
int M_AbortReq (msd, info, mi)
int msd;
External * info;
struct MSAPindication * mi;
{
struct AcSAPindication acis;
struct MSAPabort mas;
PE pe;
mas.ma_info = info;
mas.ma_source = MA_USER;
(void) build_CMIPAbort_CMIPAbortInfo(&pe, 1, 0, NULLCP, &mas);
pe -> pe_context = 1;
if (AcUAbortRequest(msd, &pe, 1, &acis) == NOTOK) {
mi->mi_type = MI_ABORT;
mi->mi_abort.ma_source = acis.aci_abort.aca_source;
mi->mi_abort.ma_reason = acis.aci_abort.aca_reason;
(void) strncpy(mi->mi_abort.ma_data, acis.aci_abort.aca_data, MA_SIZE);
ACAFREE(&acis.aci_abort);
return NOTOK;
}
return OK;
}