📄 spkt.h
字号:
/* spkt.h - include file for session providers (SS-PROVIDER) *//* * $Header: /f/iso/h/RCS/spkt.h,v 5.0 88/07/21 14:39:32 mrose Rel $ * * * $Log$ *//* * 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. * */#ifndef _SSAP_#include "ssap.h" /* definitions for SS-USERs */#endif#include "tsap.h" /* definitions for TS-USERs *//* */#define ssapPsig(sb, sd) \{ \ if ((sb = findsblk (sd)) == NULL) { \ (void) sigsetmask (smask); \ return ssaplose (si, SC_PARAMETER, NULLCP, \ "invalid session descriptor"); \ } \ if (!(sb -> sb_flags & SB_CONN)) {\ (void) sigsetmask (smask); \ return ssaplose (si, SC_PARAMETER, NULLCP, \ "session descriptor not connected"); \ } \ if (sb -> sb_flags & SB_FINN) { \ (void) sigsetmask (smask); \ return ssaplose (si, SC_OPERATION, NULLCP, \ "session descriptor finishing"); \ } \ if (sb -> sb_flags & SB_MAP) { \ (void) sigsetmask (smask); \ return ssaplose (si, SC_OPERATION, NULLCP, \ "majorsync in progress"); \ } \ if (sb -> sb_flags & SB_RS) { \ (void) sigsetmask (smask); \ return ssaplose (si, SC_OPERATION, NULLCP, \ "resync in progress"); \ } \ if (sb -> sb_flags & SB_RA) { \ (void) sigsetmask (smask); \ return ssaplose (si, SC_OPERATION, NULLCP, \ "awaiting your resync response"); \ } \ if (sb -> sb_flags & SB_AI) { \ (void) sigsetmask (smask); \ return ssaplose (si, SC_OPERATION, NULLCP, \ "activity interrupt/discard in progress"); \ } \ if (sb -> sb_flags & SB_AIA) { \ (void) sigsetmask (smask); \ return ssaplose (si, SC_OPERATION, NULLCP, \ "awaiting your activity interrupt/discard response"); \ } \ if (sb -> sb_flags & (SB_ED | SB_EDACK | SB_ERACK)) { \ (void) sigsetmask (smask); \ return ssaplose (si, SC_OPERATION, NULLCP, \ "exception in progress"); \ } \}#define ssapXsig(sb, sd) \{ \ if ((sb = findsblk (sd)) == NULL) { \ (void) sigsetmask (smask); \ return ssaplose (si, SC_PARAMETER, NULLCP, \ "invalid session descriptor"); \ } \ if (!(sb -> sb_flags & SB_CONN)) {\ (void) sigsetmask (smask); \ return ssaplose (si, SC_PARAMETER, NULLCP, \ "session descriptor not connected"); \ } \ if (sb -> sb_flags & SB_FINN) { \ (void) sigsetmask (smask); \ return ssaplose (si, SC_OPERATION, NULLCP, \ "session descriptor finishing"); \ } \ if (sb -> sb_flags & SB_RS) { \ (void) sigsetmask (smask); \ return ssaplose (si, SC_OPERATION, NULLCP, \ "resync in progress"); \ } \ if (sb -> sb_flags & SB_RA) { \ (void) sigsetmask (smask); \ return ssaplose (si, SC_OPERATION, NULLCP, \ "awaiting your resync response"); \ } \ if (sb -> sb_flags & SB_AI) { \ (void) sigsetmask (smask); \ return ssaplose (si, SC_OPERATION, NULLCP, \ "activity interrupt/discard in progress"); \ } \ if (sb -> sb_flags & SB_AIA) { \ (void) sigsetmask (smask); \ return ssaplose (si, SC_OPERATION, NULLCP, \ "awaiting your activity interrupt/discard response"); \ } \ if (sb -> sb_flags & SB_ED) { \ (void) sigsetmask (smask); \ return ssaplose (si, SC_OPERATION, NULLCP, \ "exception in progress"); \ } \}#define ssapRsig(sb, sd) \{ \ if ((sb = findsblk (sd)) == NULL) { \ (void) sigsetmask (smask); \ return ssaplose (si, SC_PARAMETER, NULLCP, \ "invalid session descriptor"); \ } \ if (!(sb -> sb_flags & SB_CONN)) {\ (void) sigsetmask (smask); \ return ssaplose (si, SC_PARAMETER, NULLCP, \ "session descriptor not connected"); \ } \ if (sb -> sb_flags & SB_FINN) { \ (void) sigsetmask (smask); \ return ssaplose (si, SC_OPERATION, NULLCP, \ "session descriptor finishing"); \ } \ if (sb -> sb_flags & SB_RS) { \ (void) sigsetmask (smask); \ return ssaplose (si, SC_OPERATION, NULLCP, \ "resync in progress"); \ } \ if (sb -> sb_flags & SB_AI) { \ (void) sigsetmask (smask); \ return ssaplose (si, SC_OPERATION, NULLCP, \ "activity interrupt/discard in progress"); \ } \ if (sb -> sb_flags & SB_AIA) { \ (void) sigsetmask (smask); \ return ssaplose (si, SC_OPERATION, NULLCP, \ "awaiting your activity interrupt/discard response"); \ } \ if (sb -> sb_flags & SB_AE) { \ (void) sigsetmask (smask); \ return ssaplose (si, SC_OPERATION, NULLCP, \ "activity end in progress"); \ } \ if (sb -> sb_flags & SB_ED) { \ (void) sigsetmask (smask); \ return ssaplose (si, SC_OPERATION, NULLCP, \ "exception in progress"); \ } \}#define ssapAsig(sb, sd) \{ \ if ((sb = findsblk (sd)) == NULL) { \ (void) sigsetmask (smask); \ return ssaplose (si, SC_PARAMETER, NULLCP, \ "invalid session descriptor"); \ } \ if (!(sb -> sb_flags & SB_CONN)) {\ (void) sigsetmask (smask); \ return ssaplose (si, SC_PARAMETER, NULLCP, \ "session descriptor not connected"); \ } \ if (sb -> sb_flags & SB_FINN) { \ (void) sigsetmask (smask); \ return ssaplose (si, SC_OPERATION, NULLCP, \ "session descriptor finishing"); \ } \ if (sb -> sb_flags & SB_MAA) { \ (void) sigsetmask (smask); \ return ssaplose (si, SC_OPERATION, NULLCP, \ "awaiting your majorsync response"); \ } \ if (sb -> sb_flags & SB_RS) { \ (void) sigsetmask (smask); \ return ssaplose (si, SC_OPERATION, NULLCP, \ "resync in progress"); \ } \ if (sb -> sb_flags & SB_AI) { \ (void) sigsetmask (smask); \ return ssaplose (si, SC_OPERATION, NULLCP, \ "activity interrupt/discard in response"); \ } \ if (sb -> sb_flags & (SB_ED | SB_EDACK | SB_ERACK)) { \ (void) sigsetmask (smask); \ return ssaplose (si, SC_OPERATION, NULLCP, \ "exception in progress"); \ } \}#define ssapFsig(sb, sd) \{ \ if ((sb = findsblk (sd)) == NULL) { \ (void) sigsetmask (smask); \ return ssaplose (si, SC_PARAMETER, NULLCP, \ "invalid session descriptor"); \ } \ if (!(sb -> sb_flags & SB_CONN)) {\ (void) sigsetmask (smask); \ return ssaplose (si, SC_PARAMETER, NULLCP, \ "session descriptor not connected"); \ } \ if (!(sb -> sb_flags & SB_FINN)) { \ (void) sigsetmask (smask); \ return ssaplose (si, SC_OPERATION, NULLCP, \ "session descriptor not finishing"); \ } \ if (sb -> sb_flags & SB_MAA) { \ (void) sigsetmask (smask); \ return ssaplose (si, SC_OPERATION, NULLCP, \ "awaiting your majorsync response"); \ } \ if (sb -> sb_flags & SB_RS) { \ (void) sigsetmask (smask); \ return ssaplose (si, SC_OPERATION, NULLCP, \ "resync in progress"); \ } \ if (sb -> sb_flags & SB_RA) { \ (void) sigsetmask (smask); \ return ssaplose (si, SC_OPERATION, NULLCP, \ "awaiting your resync response"); \ } \ if (sb -> sb_flags & SB_AI) { \ (void) sigsetmask (smask); \ return ssaplose (si, SC_OPERATION, NULLCP, \ "activity interrupt/discard in progress"); \ } \ if (sb -> sb_flags & SB_AIA) { \ (void) sigsetmask (smask); \ return ssaplose (si, SC_OPERATION, NULLCP, \ "awaiting your activity interrupt/discard response"); \ } \ if (sb -> sb_flags & (SB_ED | SB_EDACK | SB_ERACK)) { \ (void) sigsetmask (smask); \ return ssaplose (si, SC_OPERATION, NULLCP, \ "exception in progress"); \ } \}#ifdef HULA#define ssap_udPsig(sb, sd) \{ \ if ((sb = findsublk (sd)) == NULL) { \ (void) sigsetmask (smask); \ return susaplose (si, SC_PARAMETER, NULLCP, SuErrString(UDERR_INVALID_SESSION_DESC)); \ } \ if (!(sb -> sb_flags & SB_CLNS)) {\ (void) sigsetmask (smask); \ return susaplose (si, SC_OPERATION, NULLCP, SuErrString(UDERR_CLNS_NOT_SUPPORTED));\ }\}\#define missing_udP(p) \{ \ if (p == NULL) \ return susaplose (si, SC_PARAMETER, NULLCP, SuErrString(UDERR_MISSING_PARAMETER)); \}#endif#define missingP(p) \{ \ if (p == NULL) \ return ssaplose (si, SC_PARAMETER, NULLCP, \ "mandatory parameter \"%s\" missing", "p"); \}#define refmuchP(sr) \{ \ if ((sr) -> sr_ulen > SREF_USER_SIZE \ || (sr) -> sr_clen > SREF_COMM_SIZE \ || (sr) -> sr_alen > SREF_ADDT_SIZE \ || (sr) -> sr_vlen > SREF_USER_SIZE) \ return ssaplose (si, SC_PARAMETER, NULLCP, \ "bad format for reference"); \}#define idmuchP(sd) \{ \ if ((sd) -> sd_len > SID_DATA_SIZE) \ return ssaplose (si, SC_PARAMETER, NULLCP, \ "bad format for activity ID"); \}#define toomuchP(sb,b,n,m,p) \{ \ if (b == NULL) \ n = 0; \ else \ if (n > (sb -> sb_version < SB_VRSN2 ? m : ENCLOSE_MAX)) { \ (void) sigsetmask (smask); \ return ssaplose (si, SC_PARAMETER, NULLCP, \ "too much %s user data, %d octets", p, n); \ } \}#define NULLTX ((struct TSAPdata *) 0)#define NULLSD ((struct SSAPactid *) 0)#define NULLSR ((struct SSAPref *) 0)#ifndef lint#ifndef __STDC__#define copySSAPdata(base,len,d) \{ \ register int i = len; \ if ((d -> d/* */_cc = min (i, sizeof d -> d/* */_data)) > 0) \ bcopy (base, d -> d/* */_data, d -> d/* */_cc); \}#define copySPKTdata(s,d) \{ \ d -> d/* */_data = s -> s_udata, d -> d/* */_cc = s -> s_ulen; \ s -> s_udata = NULL; \}#else#define copySSAPdata(base,len,d) \{ \ register int i = len; \ if ((d -> d##_cc = min (i, sizeof d -> d##_data)) > 0) \ bcopy (base, d -> d##_data, d -> d##_cc); \}#define copySPKTdata(s, d) \{ \ d -> d##_data = s -> s_udata, d -> d##_cc = s -> s_ulen; \ s -> s_udata = NULL; \}#endif#else#define copySSAPdata(base,len,d) bcopy (base, (char *) d, len)#define copySPKTdata(s,d) bcopy (s -> s_udata, (char *) d, s -> s_ulen)#endif#define AB_TIM 30 /* drain for 30 seconds on ABORTs */#define RF_TIM 30 /* drain for 30 seconds on REFUSEs */#define SC_REFUSE (SC_BASE << 1) /* larger than any sc_reason */int spktlose (), ssaplose ();/* */struct ssapblk { struct ssapblk *sb_forw; /* doubly-linked list */ struct ssapblk *sb_back; /* .. */ int sb_fd; /* transport descriptor */ int sb_version; /* version number of protocol */#define SB_VRSN1 0 /* 1 */#define SB_VRSN2 1 /* 2 */#ifdef HULA#define SB_VRSN1_CLNS 1 /* connectionless version 1 9548E */#endif#define SB_ALLVRSNS ((1 << SB_VRSN1) | (1 << SB_VRSN2)) long sb_flags; /* our state */#define SB_NULL 0x000000#define SB_CONN 0x000001/* connected */#define SB_FINN 0x000002/* other side wants to finish */#define SB_INIT 0x000004/* this side initiated the session */#define SB_ASYN 0x000008/* asynchronous */#define SB_EXPD 0x000010/* expedited service available on transport */#define SB_CD 0x000020/* CD request in progress */#define SB_CDA 0x000040/* awaiting CD response from user */#define SB_GTC 0x000080/* GTC request in progress */#define SB_MAP 0x000100/* MAP request in progress */#define SB_MAA 0x000200/* awaiting MAP response from user */#define SB_AE 0x000400/* MAP is really AE */#define SB_RS 0x000800/* RS request in progress */#define SB_RA 0x001000/* awaiting RS response from user */#define SB_AI 0x002000/* AI request in progress */#define SB_AIA 0x004000/* awaiting AI response from user */#define SB_ED 0x008000/* user exception in progress */#define SB_EDACK 0x010000/* awaiting user exception to be cleared */#define SB_ERACK 0x020000/* awaiting provider exception to be cleared */#define SB_Vact 0x040000/* activity in progress */#define SB_Vsc 0x080000/* okay to reply to minorsync */#define SB_Vnextact 0x100000/* activity MAP sent/received */#ifdef HULA#define SB_CLNS 0x200000/* Connectionless Service */#endif struct ssapkt *sb_retry; /* initial spkt */ long sb_V_A; /* lowest unconfirmed ssn */ long sb_V_M; /* next ssn */ long sb_V_R; /* lowest ssn for resynchronization */ int sb_rs; /* resynchronization type (an SYNC_xxx code, plus...) */#define SYNC_INTR 3 /* Activity Interrupt */#define SYNC_DISC 4 /* Activity Discard */ long sb_rsn; /* resync serial number */ u_char sb_rsettings; /* proposed token settings */ int sb_pr; /* SPDU to prepare for (an SPDU code) */ struct ssapkt *sb_xspdu; /* saved expedited SPDU (really should be a linked list!) */ struct ssapkt *sb_spdu; /* for concatenated SPDUs */ struct qbuf sb_qbuf; /* for segmented (T)SSDUs */ int sb_len; /* .. */ int sb_code; /* .. */ u_char sb_options; /* connect options */ u_char sb_settings; /* tokens settings on connect */ u_short sb_tsdu_us; /* our max TSDU size */ u_short sb_tsdu_them; /* their max TSDU size */#define BAD_TSDU_SIZE(s) ((s) ? (s) < DT_MINSIZE : 0)#define GET_TSDU_SIZE(s) ((s) < DT_MINSIZE ? 0 : (s)) u_char sb_owned; /* tokens we own */ u_short sb_requirements; /* functional units selected */ struct SSAPaddr sb_initiating; /* initiator */ struct SSAPaddr sb_responding; /* responder */ IFP sb_DataIndication; /* INDICATION handlers */ IFP sb_TokenIndication; /* .. */ IFP sb_SyncIndication; /* .. */ IFP sb_ActivityIndication; /* .. */ IFP sb_ReportIndication; /* .. */ IFP sb_ReleaseIndication; /* .. */ IFP sb_AbortIndication; /* .. */};#define NULLBP ((struct ssapblk *) 0)#ifdef HULAint freesublk ();struct ssapblk *newsublk (), *findsublk ();#endifint freesblk ();struct ssapblk *newsblk (), *findsblk ();int ts2sslose ();int spkt2sd ();struct ssapkt *sb2spkt ();#ifdef HULAstruct ssapkt *sb2udspkt ();#endif/* SPKT datastructure */struct ssapkt { int s_errno; int s_mask; u_char s_code;#define SPDU_CN 0x0d /* CONNECT */#define SPDU_AC 0x0e /* ACCEPT */#define SPDU_RF 0x0c /* REFUSE */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -