xti_str_opts.c

来自「Unix网络编程 基于Socket的网络编程」· C语言 代码 · 共 141 行

C
141
字号
#include	"unpxti.h"/* * Functions that convert XTI option values into printable strings. * * Note: XTI_DEBUG is defined as returning an array of t_uscalar_t's. * Our function xti_str_uscalard() checks that there is at least one entry * in the array and prints just the first entry. * Ditto for IP_OPTIONS, which is defined as returning an array of u_char's * and our function xti_str_uchard(). */static char	strres[128];	/* assume one opt at a time, so static is OK */char *xti_str_lend(struct t_opthdr *topt)		/* value length, decimal */{	snprintf(strres, sizeof(strres), "%lu (length of value)",								topt->len - sizeof(struct t_opthdr));	return(strres);}char *xti_str_uscalard(struct t_opthdr *topt)	/* t_uscalar_t, decimal */{	if (topt->len < sizeof(struct t_opthdr) + sizeof(t_uscalar_t))		return(xti_str_lend(topt));	snprintf(strres, sizeof(strres), "%ld", *((t_uscalar_t *) (topt+1)));	return(strres);}char *xti_str_uchard(struct t_opthdr *topt)	/* unsigned char, decimal */{	if (topt->len < sizeof(struct t_opthdr) + sizeof(u_char))		return(xti_str_lend(topt));	snprintf(strres, sizeof(strres), "%d", *((u_char *) (topt+1)));	return(strres);}char *xti_str_ucharx(struct t_opthdr *topt)	/* unsigned char, hex */{	if (topt->len < sizeof(struct t_opthdr) + sizeof(u_char))		return(xti_str_lend(topt));	snprintf(strres, sizeof(strres), "0x%02x", *((u_char *) (topt+1)));	return(strres);}char *xti_str_yn(t_uscalar_t val)	/* internal function for yes/no values */{	if (val == T_YES)		return("T_YES");	else if (val == T_NO)		return("T_NO");	else {		snprintf(strres, sizeof(strres), "(unknown value: %lu)", val);		return(strres);	}}char *xti_str_syng(t_scalar_t val)		/* t_scalar_t, yes/no/gabage */{	if (val == T_YES)		return("T_YES");	else if (val == (T_YES|T_GARBAGE))		return("T_YES|T_GARBAGE");	else if (val == T_NO)		return("T_NO");	else {		snprintf(strres, sizeof(strres), "(unknown value: %ld)", val);		return(strres);	}}char *xti_str_uiyn(struct t_opthdr *topt)	/* unsigned int, yes/no */{	if (topt->len < sizeof(struct t_opthdr) + sizeof(u_int))		return(xti_str_lend(topt));	return(xti_str_yn((t_uscalar_t) *((u_int *) (topt+1))));}char *xti_str_usyn(struct t_opthdr *topt)	/* t_uscalar_t, yes/no */{	if (topt->len < sizeof(struct t_opthdr) + sizeof(t_uscalar_t))		return(xti_str_lend(topt));	return(xti_str_yn(*((t_uscalar_t *) (topt+1))));}char *xti_str_linger(struct t_opthdr *topt)	/* t_linger structure */{	struct t_linger	*tl;	if (topt->len < sizeof(struct t_opthdr) + sizeof(struct t_linger))		return(xti_str_lend(topt));	tl = (struct t_linger *) (topt+1);	if (tl->l_linger == T_UNSPEC)		snprintf(strres, sizeof(strres), "%s, T_UNSPEC",						xti_str_yn((t_uscalar_t) tl->l_onoff));	else if (tl->l_linger == T_INFINITE)		snprintf(strres, sizeof(strres), "%s, T_INFINITE",						xti_str_yn((t_uscalar_t) tl->l_onoff));	else		snprintf(strres, sizeof(strres), "%s, %ld sec",						xti_str_yn((t_scalar_t) tl->l_onoff), tl->l_linger);	return(strres);}char *xti_str_kpalive(struct t_opthdr *topt)	/* t_kpalive structure */{	struct t_kpalive	*tk;	if (topt->len < sizeof(struct t_opthdr) + sizeof(struct t_kpalive))		return(xti_str_lend(topt));	tk = (struct t_kpalive *) (topt+1);	if (tk->kp_timeout == T_UNSPEC)		snprintf(strres, sizeof(strres), "%s, T_UNSPEC",				xti_str_syng((t_scalar_t) tk->kp_onoff));	else		snprintf(strres, sizeof(strres), "%s, %ld sec",				xti_str_syng((t_scalar_t) tk->kp_onoff), tk->kp_timeout);	return(strres);}char *xti_str_flags(t_scalar_t flags)			/* t_optmgmt{}.flags */{	if      (flags == T_SUCCESS)	return("T_SUCCESS");	else if (flags == T_FAILURE)	return("T_FAILURE");	else if (flags == T_NOTSUPPORT)	return("T_NOTSUPPORT");	else if (flags == T_READONLY)	return("T_READONLY");	snprintf(strres, sizeof(strres), "(unknown flags value: %ld)", flags);	return(strres);}

⌨️ 快捷键说明

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