⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 spkt.h

📁 ftam等标准协议服务器和客户端的源代码。
💻 H
📖 第 1 页 / 共 2 页
字号:
/* 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 + -