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

📄 text2spkt.c

📁 ftam等标准协议服务器和客户端的源代码。
💻 C
字号:
/* text2spkt.c - read/write a SPDU thru a debug filter */#ifndef	lintstatic char *rcsid = "$Header: /f/iso/ssap/RCS/text2spkt.c,v 5.0 88/07/21 14:58:21 mrose Rel $";#endif/*  * $Header: /f/iso/ssap/RCS/text2spkt.c,v 5.0 88/07/21 14:58:21 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. * *//* LINTLIBRARY */#include <stdio.h>#include "spkt.h"#define	sprintc(v,b)	sprintb ((int) (v), (b))/*  */#define	SPDU_TYPE(e)	fprintf (fp, "%sCODE/ %s\n", rw, e)#define	DMASK	"\020\01RELEASE\02USER\03PROTOCOL\04UNKNOWN"#define	EMASK	"\020\01BEGIN\02END"#define	OMASK	"\020\01EXTD"#define	RMASK \    "\020\01HALFDUPLEX\02DUPLEX\03EXPEDITED\04MINORSYNC\05MAJORSYNC\06RESYNC\07ACTIVITY\010NEGOTIATED\011CAPABILITY\012EXCEPTIONS\013TYPEDATA"#define	SMASK	"\020\01NOEND"#define	TMASK	"\020\01DATA\03SYNC\05ACTIVITY\07RELEASE"#define	YMASK	"\020\01NOEXPLICIT"void	spkt2text (fp, s, read)register FILE	*fp;register struct ssapkt *s;int	read;{    char   *rw = read ? "<--- " : "---> ";    fprintf (fp, "%s(: dump of SPDU 0x%x, errno=0x%x mask=0x%x%s\n",	    rw, s, s -> s_errno, s -> s_mask,	    s -> s_mask & SMASK_SPDU_EXPD ? " (expedited)" : "");    fprintf (fp, "%sLI/ %d\n", rw, s -> s_li);    switch (s -> s_code) {	case SPDU_CN: 	case SPDU_AC: 	    SPDU_TYPE (s -> s_code == SPDU_CN ? "CONNECT" : "ACCEPT");	    if (s -> s_mask & SMASK_CN_REF)		type_ref (fp, rw, &s -> s_cn_reference);	    if (s -> s_mask & SMASK_CN_OPT)		type_bits (fp, rw, "OPTIONS", s -> s_options, CR_OPT_MASK,			OMASK);	    if (s -> s_mask & SMASK_CN_TSDU)		type_tsdu (fp, rw, s -> s_tsdu_init, s -> s_tsdu_resp);	    if (s -> s_mask & SMASK_CN_VRSN)		type_vrsn (fp, rw, s -> s_cn_version);	    if (s -> s_mask & SMASK_CN_ISN)		type_ssn (fp, rw, "ISN", s -> s_isn);	    if (s -> s_mask & SMASK_CN_SET)		type_settings (fp, rw, s -> s_settings);	    if (s -> s_code == SPDU_AC && (s -> s_mask & SMASK_AC_TOKEN))		type_bits (fp, rw, "TOKENS", s -> s_ac_token, -1, TMASK);	    if (s -> s_mask & SMASK_CN_REQ)		type_bits (fp, rw, "REQUIREMENTS", s -> s_cn_require,			-1, RMASK);	    if (s -> s_mask & SMASK_CN_CALLING)		type_id (fp, "CALLING", rw, s -> s_calling, s -> s_callinglen);	    if (s -> s_mask & SMASK_CN_CALLED)		type_id (fp, "CALLED", rw, s -> s_called, s -> s_calledlen);	    break;#ifdef HULA	case SPDU_UD: 	    SPDU_TYPE ("UNITDATA");	    if (s -> s_mask & SMASK_UD_VERSION)		type_vrsn (fp, rw, s -> s_ud_version);	    if (s -> s_mask & SMASK_UD_CALLING)		type_id (fp, "CALLING", rw, s -> s_ud_calling,					    s -> s_ud_callinglen);	    if (s -> s_mask & SMASK_UD_CALLED)		type_id (fp, "CALLED", rw, s -> s_ud_called, 				           s -> s_ud_calledlen);	    break;#endif	case SPDU_RF: 	    SPDU_TYPE ("REFUSE");	    if (s -> s_mask & SMASK_RF_REF)		type_ref (fp, rw, &s -> s_rf_reference);	    if (s -> s_mask & SMASK_RF_DISC)		type_bits (fp, rw, "DISCONNECT", s -> s_rf_disconnect,			RF_DISC_MASK, DMASK);	    if (s -> s_mask & SMASK_RF_REQ)		type_bits (fp, rw, "REQUIREMENTS", s -> s_rf_require,			-1, RMASK);	    if (s -> s_mask & SMASK_RF_VRSN)		type_vrsn (fp, rw, s -> s_rf_version);	    if (s -> s_rlen > 0) {		type_reason (fp, rw, *s -> s_rdata & 0xff);		if (s -> s_rlen > 1)		    type_data (fp, "REASON", rw, s -> s_rlen - 1,			    s -> s_rdata + 1);	    }	    break;	case SPDU_FN: 	    SPDU_TYPE ("FINISH");	    if (s -> s_mask & SMASK_FN_DISC)		type_bits (fp, rw, "DISCONNECT", s -> s_fn_disconnect,			FN_DISC_MASK, DMASK);	    break;	case SPDU_DN: 	    SPDU_TYPE ("DISCONNECT");	    break;	case SPDU_NF: 	    SPDU_TYPE ("NOT FINISHED");	    break;	case SPDU_AB: #ifdef	notdef	case SPDU_AI: 		/* aka SPDU_AB */#endif	    if (s -> s_mask & SMASK_SPDU_AB) {		SPDU_TYPE ("ABORT");		if (s -> s_mask & SMASK_AB_DISC)		    type_bits (fp, rw, "DISCONNECT", s -> s_ab_disconnect,			    AB_DISC_MASK, DMASK);		if (s -> s_mask & SMASK_AB_REFL)		    type_data (fp, "REFLECT", rw, sizeof s -> s_reflect,			    (char *) s -> s_reflect);		break;	    }	    SPDU_TYPE ("ACTIVITY INTERRUPT");	    if (s -> s_mask & SMASK_AI_REASON)		type_error (fp, rw, s -> s_ai_reason);	    break;	case SPDU_AA: #ifdef	notdef	case SPDU_AIA: 		/* aka SPDU_AA */#endif	    if (s -> s_mask & SMASK_SPDU_AA)		SPDU_TYPE ("ABORT ACCEPT");	    else		SPDU_TYPE ("ACTIVITY INTERRUPT ACK");	    break;	case SPDU_GT: #ifdef	notdef	case SPDU_DT: 		/* aka SPDU_GT */#endif	    if (s -> s_mask & SMASK_SPDU_GT) {		SPDU_TYPE ("GIVE TOKENS");		if (s -> s_mask & SMASK_GT_TOKEN)		    type_bits (fp, rw, "TOKENS", s -> s_gt_token, -1, TMASK);	    }	    else		SPDU_TYPE ("DATA TRANSFER");	    break;	case SPDU_EX: 	    SPDU_TYPE ("EXPEDITED");	    break;	case SPDU_TD: 	    SPDU_TYPE ("TYPED DATA");	    break;	case SPDU_CD: 	    SPDU_TYPE ("CAPABILITY DATA");	    break;	case SPDU_CDA: 	    SPDU_TYPE ("CAPABILITY DATA ACK");	    break;	case SPDU_PT: 	    SPDU_TYPE ("PLEASE TOKENS");	    if (s -> s_mask & SMASK_PT_TOKEN)		type_bits (fp, rw, "TOKENS", s -> s_pt_token, -1, TMASK);	    break;	case SPDU_GTC: 	    SPDU_TYPE ("GIVE TOKENS CONFIRM");	    break;	case SPDU_GTA: 	    SPDU_TYPE ("GIVE TOKENS ACK");	    break;	case SPDU_MIP: 	    SPDU_TYPE ("MINOR SYNCHRONIZATION POINT");	    if (s -> s_mask & SMASK_MIP_SYNC)		type_bits (fp, rw, "SYNC", s -> s_mip_sync, MIP_SYNC_MASK,			YMASK);	    if (s -> s_mask & SMASK_MIP_SERIAL)		type_ssn (fp, rw, "SSN", s -> s_mip_serial);	    break;	case SPDU_MIA: 	    SPDU_TYPE ("MINOR SYNC ACK");	    if (s -> s_mask & SMASK_MIA_SERIAL)		type_ssn (fp, rw, "SSN", s -> s_mia_serial);	    break;	case SPDU_MAP: #ifdef	notdef	case SPDU_AE: 		/* aka SPDU_MAP */#endif	    if ((s -> s_mask & SMASK_MAP_SYNC)		    && (s -> s_map_sync & MAP_SYNC_NOEND)) {		SPDU_TYPE ("MAJOR SYNCHRONIZATION POINT");		type_bits (fp, rw, "SYNC", s -> s_map_sync, MAP_SYNC_MASK,			SMASK);	    }	    else		SPDU_TYPE ("ACTIVITY END");	    if (s -> s_mask & SMASK_MAP_SERIAL)		type_ssn (fp, rw, "SSN", s -> s_map_serial);	    break;	case SPDU_MAA: #ifdef	notdef	case SPDU_AEA: 		/* aka SPDU_MAA */#endif	    SPDU_TYPE ("MAJOR SYNC/ACTIVITY END ACK");	    if (s -> s_mask & SMASK_MAA_SERIAL)		type_ssn (fp, rw, "SSN", s -> s_maa_serial);	    break;	case SPDU_RS: 	    SPDU_TYPE ("RESYNCHRONIZE");	    if (s -> s_mask & SMASK_RS_SET)		type_settings (fp, rw, s -> s_rs_settings);	    if (s -> s_mask & SMASK_RS_TYPE)		type_resync (fp, rw, s -> s_rs_type);	    if (s -> s_mask & SMASK_RS_SSN)		type_ssn (fp, rw, "RSN", s -> s_rs_serial);	    break;	case SPDU_RA: 	    SPDU_TYPE ("RESYNCHRONIZE ACK");	    if (s -> s_mask & SMASK_RA_SET)		type_settings (fp, rw, s -> s_ra_settings);	    if (s -> s_mask & SMASK_RA_SSN)		type_ssn (fp, rw, "RSN", s -> s_ra_serial);	    break;	case SPDU_PR: 	    SPDU_TYPE ("PREPARE");	    type_prepare (fp, rw, s -> s_pr_type);	    break;	case SPDU_ER: 	    SPDU_TYPE ("EXCEPTION REPORT");	    break;	case SPDU_ED: 	    SPDU_TYPE ("EXCEPTION DATA");	    if (s -> s_mask & SMASK_ED_REASON)		type_error (fp, rw, s -> s_ed_reason);	    break;	case SPDU_AS: 	    SPDU_TYPE ("ACTIVITY START");	    if (s -> s_mask & SMASK_AS_ID) {		fprintf (fp, "%s", rw);		type_info (fp, "ID/ %d", (int) s -> s_as_id.sd_len,			s -> s_as_id.sd_data);		fprintf (fp, "\n");	    }	    break;	case SPDU_AR: 	    SPDU_TYPE ("ACTIVITY RESUME");	    if (s -> s_mask & SMASK_AR_REF)		type_ref (fp, rw, &s -> s_ar_reference);	    if (s -> s_mask & SMASK_AR_OID) {		fprintf (fp, "%s", rw);		type_info (fp, "OLD ID/ %d", (int) s -> s_ar_oid.sd_len,			s -> s_ar_oid.sd_data);		fprintf (fp, "\n");	    }	    if (s -> s_mask & SMASK_AR_SSN)		type_ssn (fp, rw, "SSN", s -> s_ar_serial);	    if (s -> s_mask & SMASK_AR_ID) {		fprintf (fp, "%s", rw);		type_info (fp, "ID/ %d", (int) s -> s_ar_id.sd_len,			s -> s_ar_id.sd_data);		fprintf (fp, "\n");	    }	    break;	case SPDU_AD: 	    SPDU_TYPE ("ACTIVITY DISCARD");	    if (s -> s_mask & SMASK_AD_REASON)		type_error (fp, rw, s -> s_ad_reason);	    break;	case SPDU_ADA: 	    SPDU_TYPE ("ACTIVITY DISCARD ACK");	    break;	default: 	    fprintf (fp, "%sCODE/ 0x%x\n", rw, s -> s_code);	    break;    }    if (s -> s_mask & SMASK_ENCLOSE)	type_bits (fp, rw, "ENCLOSURE", s -> s_enclose, ENCL_MASK, EMASK);    if (s -> s_udata)	if (s -> s_code == SPDU_ER)	    type_data (fp, "REFLECT", rw, s -> s_ulen, s -> s_udata);	else	    if (s -> s_mask & SMASK_UDATA_PGI)		type_data (fp, "USER", rw, s -> s_ulen, s -> s_udata);	    else {		fprintf (fp, "%sUSER INFO/ ", rw);		type_info (fp, "%d", s -> s_ulen, s -> s_udata);		fprintf (fp, "\n");	    }    fprintf (fp, "%s)\n", rw);}/*  */static	type_id (fp, type, rw, selector, len)FILE   *fp;char   *type,       *rw;char   *selector;int	len;{    char    buffer[BUFSIZ];    buffer[explode (buffer, (u_char *) selector, len)] = NULL;    fprintf (fp, "%s%s/ %d/\"%s\"\n", rw, type, len, buffer);}static	type_ssn (fp, rw, what, ssn)FILE   *fp;char   *rw,       *what;u_long	ssn;{    fprintf (fp, "%s%s/ %d\n", rw, what, ssn);}static	type_bits (fp, rw, s, bits, mask, t)FILE   *fp;char   *rw,       *s,       *t;u_char  bits,	mask;{    fprintf (fp, "%s%s/ %s", rw, s, sprintc (bits & mask, t));    if (bits & ~mask)	fprintf (fp, ": illegal use of %s", sprintc (bits & ~mask, t));    fprintf (fp, "\n");}#define dotoken(requires,shift,bit,type) \{ \    token = (settings >> shift) & ST_MASK; \    fprintf (fp, " %s:%s", type, token == ST_INIT_VALUE ? "initiator" \	: token == ST_RESP_VALUE ? "responder" \	: token == ST_CALL_VALUE ? "choice" \	: "reserved"); \}static	type_settings (fp, rw, settings)FILE   *fp;char   *rw;u_char  settings;{    int     token;    fprintf (fp, "%sSETTINGS/", rw);    dotokens ();    fprintf (fp, "\n");}#undef	dotokenstatic	type_tsdu (fp, rw, init, resp)FILE   *fp;char   *rw;u_short	init,	resp;{    fprintf (fp, "%sTSDU/ INITIATOR: %d, RESPONDER: %d\n",	    rw, init, resp);}static	type_ref (fp, rw, ref)FILE   *fp;char   *rw;struct SSAPref *ref;{    fprintf (fp, "%sREFERENCE/", rw);    if (ref -> sr_vlen)	type_info (fp, "<CALLING %d", (int) ref -> sr_calling_len,		ref -> sr_calling);    else	type_info (fp, " <USER %d", (int) ref -> sr_ulen, ref -> sr_udata);    type_info (fp, ", COMMON %d", (int) ref -> sr_clen, ref -> sr_cdata);    type_info (fp, ", ADDITIONAL %d", (int) ref -> sr_alen, ref -> sr_adata);    if (ref -> sr_vlen)	type_info (fp, ", CALLED %d", (int) ref -> sr_called_len,		ref -> sr_called);    fprintf (fp, ">\n");}static	type_vrsn (fp, rw, version)FILE   *fp;char   *rw;u_char	version;{    fprintf (fp, "%sVERSION/ 0x%x\n", rw, version);}static	type_reason (fp, rw, reason)FILE   *fp;char   *rw;int	reason;{    fprintf (fp, "%sREASON/ 0x%x: %s\n", rw, reason,	    SErrString ((int) reason));}static	type_prepare (fp, rw, type)FILE   *fp;char   *rw;u_char  type;{    fprintf (fp, "%sTYPE/ ", rw);    switch (type) {	case PR_MAA: 	    fprintf (fp, "MAA");	    break;	case PR_RS: 	    fprintf (fp, "RS");	    break;	case PR_RA: 	    fprintf (fp, "RA");	    break;	case PR_AB: 	    fprintf (fp, "AB");	    break;	default: 	    fprintf (fp, "%d: illegal value", type);	    break;    }    fprintf (fp, "\n");}static	type_error (fp, rw, reason)FILE   *fp;char   *rw;u_char  reason;{    fprintf (fp, "%sREASON/ ", rw);    switch (reason) {	case SP_NOREASON: 	    fprintf (fp, "No specific reason stated");	    break;	case SP_JEOPARDY: 	    fprintf (fp, "User receiving ability jeopardized");	    break;	case SP_SEQUENCE: 	    fprintf (fp, "User sequence error");	    break;	case SP_LOCAL: 	    fprintf (fp, "Local SS-user error");	    break;	case SP_PROCEDURAL: 	    fprintf (fp, "Unrecoverable procedural error");	    break;	case SP_DEMAND: 	    fprintf (fp, "Demand data token");	    break;	default: 	    fprintf (fp, "%d: illegal value", reason);	    break;    }    fprintf (fp, "\n");}static	type_resync (fp, rw, type)FILE   *fp;char   *rw;u_char  type;{    fprintf (fp, "%sTYPE/ ", rw);    switch (type) {	case SYNC_RESTART: 	    fprintf (fp, "restart");	    break;	case SYNC_ABANDON: 	    fprintf (fp, "abandon");	    break;	case SYNC_SET: 	    fprintf (fp, "set");	    break;	default: 	    fprintf (fp, "%d: illegal value", type);	    break;    }    fprintf (fp, "\n");}static	type_data (fp, type, rw, len, data)FILE   *fp;char   *type,       *rw,       *data;int	len;{    fprintf (fp, "%s%s DATA/ ", rw, type);    type_info (fp, "%d", len, data);    fprintf (fp, "\n");}static	type_info (fp, fmt, len, data)FILE   *fp;char   *fmt,       *data;int	len;{    char    buffer[BUFSIZ];    fprintf (fp, fmt, len);    if (0 < len && len < sizeof buffer / 2) {	buffer[explode (buffer, (u_char *) data, len)] = NULL;	fprintf (fp, " %s", buffer);    }}/*  *//* ARGSUSED */void	text2spkt (s)struct ssapkt *s;{    /* NOT YET IMPLEMENTED */}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -