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

📄 test-inet_tcp.c

📁 7号信令功能代码,为开源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
	case T_ORDREL_REQ:		return ("T_ORDREL_REQ");	case T_CONN_IND:		return ("T_CONN_IND");	case T_CONN_CON:		return ("T_CONN_CON");	case T_DISCON_IND:		return ("T_DISCON_IND");	case T_DATA_IND:		return ("T_DATA_IND");	case T_EXDATA_IND:		return ("T_EXDATA_IND");	case T_OPTDATA_IND:		return ("T_OPTDATA_IND");	case T_INFO_ACK:		return ("T_INFO_ACK");	case T_BIND_ACK:		return ("T_BIND_ACK");	case T_ERROR_ACK:		return ("T_ERROR_ACK");	case T_OK_ACK:		return ("T_OK_ACK");	case T_UNITDATA_IND:		return ("T_UNITDATA_IND");	case T_UDERROR_IND:		return ("T_UDERROR_IND");	case T_OPTMGMT_ACK:		return ("T_OPTMGMT_ACK");	case T_ORDREL_IND:		return ("T_ORDREL_IND");	case T_ADDR_REQ:		return ("T_ADDR_REQ");	case T_ADDR_ACK:		return ("T_ADDR_ACK");	case FAILURE:		return ("(nothing)");	default:		return ("(unexpected");	}}voidprint_prim(ulong prim){	printf("%s", prim_string(prim));}voidprint_state(ulong state){	switch (state) {	case TS_UNBND:		printf("TS_UNBND");		break;	case TS_WACK_BREQ:		printf("TS_WACK_BREQ");		break;	case TS_WACK_UREQ:		printf("TS_WACK_UREQ");		break;	case TS_IDLE:		printf("TS_IDLE");		break;	case TS_WACK_OPTREQ:		printf("TS_WACK_OPTREQ");		break;	case TS_WACK_CREQ:		printf("TS_WACK_CREQ");		break;	case TS_WCON_CREQ:		printf("TS_WCON_CREQ");		break;	case TS_WRES_CIND:		printf("TS_WRES_CIND");		break;	case TS_WACK_CRES:		printf("TS_WACK_CRES");		break;	case TS_DATA_XFER:		printf("TS_DATA_XFER");		break;	case TS_WIND_ORDREL:		printf("TS_WIND_ORDREL");		break;	case TS_WREQ_ORDREL:		printf("TS_WRES_ORDREL");		break;	case TS_WACK_DREQ6:		printf("TS_WACK_DREQ6");		break;	case TS_WACK_DREQ7:		printf("TS_WACK_DREQ7");		break;	case TS_WACK_DREQ9:		printf("TS_WACK_DREQ9");		break;	case TS_WACK_DREQ10:		printf("TS_WACK_DREQ10");		break;	case TS_WACK_DREQ11:		printf("TS_WACK_DREQ11");		break;	default:		printf("(unknown [%lu])", state);		break;	}	printf("\n");}voidprint_addr(char *add_ptr, size_t add_len){	struct sockaddr_in *a = (struct sockaddr_in *) add_ptr;	if (add_len) {		if (add_len != sizeof(*a))			printf("Aaarrg! add_len = %d, ", add_len);		printf("%d.%d.%d.%d:%d", (a->sin_addr.s_addr >> 0) & 0xff,		       (a->sin_addr.s_addr >> 8) & 0xff, (a->sin_addr.s_addr >> 16) & 0xff,		       (a->sin_addr.s_addr >> 24) & 0xff, ntohs(a->sin_port));	} else		printf("(no address)");	printf("\n");}voidprint_opt(char *opt_ptr, size_t opt_len){	struct t_opthdr *oh = (struct t_opthdr *) opt_ptr;	size_t opt_rem = opt_len;	if (opt_len) {		while (opt_rem && opt_rem > sizeof(*oh) && oh->len <= opt_rem) {			char result[128] = "(failure)";			long val = *((t_scalar_t *) (oh + 1));			printf("\n\t");			switch (oh->level) {			case T_INET_IP:				switch (oh->name) {				case T_IP_OPTIONS:					printf("T_IP_OPTIONS = ");					sprintf(result, "%s", "(not impl)");					break;				case T_IP_TOS:					printf("T_IP_TOS = ");					sprintf(result, "0x%lx", val);					break;				case T_IP_TTL:					printf("T_IP_TTL = ");					sprintf(result, "%ld", val);					break;				case T_IP_REUSEADDR:					printf("T_IP_REUSEADDR = ");					sprintf(result, "%s", val == T_YES ? "T_YES" : "T_NO");					break;				case T_IP_DONTROUTE:					printf("T_IP_DONTROUTE = ");					sprintf(result, "%s", val == T_YES ? "T_YES" : "T_NO");					break;				case T_IP_BROADCAST:					printf("T_IP_BROADCAST = ");					sprintf(result, "%s", val == T_YES ? "T_YES" : "T_NO");					break;				default:					printf("(bad option name %lu)", oh->name);					break;				}				break;			case T_INET_TCP:				switch (oh->name) {				case T_TCP_NODELAY:					printf("T_TCP_NODELAY = ");					sprintf(result, "%s", val == T_YES ? "T_YES" : "T_NO");					break;				case T_TCP_MAXSEG:					printf("T_TCP_MAXSEG = ");					sprintf(result, "%ld", val);					break;				case T_TCP_KEEPALIVE:					printf("T_TCP_KEEPALIVE = ");					sprintf(result, "%s", val == T_YES ? "T_YES" : "T_NO");					break;				default:					printf("(bad option name %lu)", oh->name);					break;				}				break;			case T_INET_UDP:				switch (oh->name) {				case T_UDP_CHECKSUM:					printf("T_UDP_CHECKSUM = ");					sprintf(result, "%s", val == T_YES ? "T_YES" : "T_NO");					break;				default:					printf("(bad option name %lu)", oh->name);					break;				}				break;			case T_INET_SCTP:				switch (oh->name) {				case T_SCTP_NODELAY:					printf("T_SCTP_NODELAY = ");					sprintf(result, "%s", val == T_YES ? "T_YES" : "T_NO");					break;				case T_SCTP_CORK:					printf("T_SCTP_CORK = ");					sprintf(result, "%s", val == T_YES ? "T_YES" : "T_NO");					break;				case T_SCTP_PPI:					printf("T_SCTP_PPI = ");					sprintf(result, "%ld", val);					break;				case T_SCTP_SID:					printf("T_SCTP_SID = ");					sprintf(result, "%ld", val);					break;				case T_SCTP_SSN:					printf("T_SCTP_SSN = ");					sprintf(result, "%ld", val);					break;				case T_SCTP_TSN:					printf("T_SCTP_TSN = ");					sprintf(result, "%lu", (ulong) val);					break;				case T_SCTP_RECVOPT:					printf("T_SCTP_RECVOPT = ");					sprintf(result, "%s", val == T_YES ? "T_YES" : "T_NO");					break;				case T_SCTP_COOKIE_LIFE:					printf("T_SCTP_COOKIE_LIFE = ");					sprintf(result, "%ld", val);					break;				case T_SCTP_SACK_DELAY:					printf("T_SCTP_SACK_DELAY = ");					sprintf(result, "%ld", val);					break;				case T_SCTP_PATH_MAX_RETRANS:					printf("T_SCTP_PATH_MAX_RETRANS = ");					sprintf(result, "%ld", val);					break;				case T_SCTP_ASSOC_MAX_RETRANS:					printf("T_SCTP_ASSOC_MAX_RETRANS = ");					sprintf(result, "%ld", val);					break;				case T_SCTP_MAX_INIT_RETRIES:					printf("T_SCTP_MAX_INIT_RETRIES = ");					sprintf(result, "%ld", val);					break;				case T_SCTP_HEARTBEAT_ITVL:					printf("T_SCTP_HEARTBEAT_ITVL = ");					sprintf(result, "%ld", val);					break;				case T_SCTP_RTO_INITIAL:					printf("T_SCTP_RTO_INITIAL = ");					sprintf(result, "%ld", val);					break;				case T_SCTP_RTO_MIN:					printf("T_SCTP_RTO_MIN = ");					sprintf(result, "%ld", val);					break;				case T_SCTP_RTO_MAX:					printf("T_SCTP_RTO_MAX = ");					sprintf(result, "%ld", val);					break;				case T_SCTP_OSTREAMS:					printf("T_SCTP_OSTREAMS = ");					sprintf(result, "%ld", val);					break;				case T_SCTP_ISTREAMS:					printf("T_SCTP_ISTREAMS = ");					sprintf(result, "%ld", val);					break;				case T_SCTP_COOKIE_INC:					printf("T_SCTP_COOKIE_INC = ");					sprintf(result, "%ld", val);					break;				case T_SCTP_THROTTLE_ITVL:					printf("T_SCTP_THROTTLE_ITVL = ");					sprintf(result, "%ld", val);					break;				case T_SCTP_MAC_TYPE:					printf("T_SCTP_MAC_TYPE = ");					switch (val) {					default:					case SCTP_HMAC_NONE:						sprintf(result, "NONE");						break;					case SCTP_HMAC_SHA_1:						sprintf(result, "SHA_1");						break;					case SCTP_HMAC_MD5:						sprintf(result, "MD5");						break;					}					break;				case T_SCTP_HB:					printf("T_SCTP_HB = ");					sprintf(result, "%s", "(undone)");					break;				case T_SCTP_RTO:					printf("T_SCTP_RTO = ");					sprintf(result, "%s", "(undone)");					break;				case T_SCTP_MAXSEG:					printf("T_SCTP_MAXSEG = ");					sprintf(result, "%ld", val);					break;				case T_SCTP_STATUS:					printf("T_SCTP_STATUS = ");					sprintf(result, "%s", "(undone)");					break;				case T_SCTP_DEBUG:					printf("T_SCTP_DEBUG = ");					if (!val)						sprintf(result, "(none)");					else {						char *where = result;						if (val & SCTP_OPTION_DROPPING)							where += sprintf(where, " DROPPING");						if (val & SCTP_OPTION_BREAK)							where += sprintf(where, " BREAK");						if (val & SCTP_OPTION_DBREAK)							where += sprintf(where, " DBREAK");						if (val & SCTP_OPTION_RANDOM)							where += sprintf(where, " RANDOM");					}					break;				default:					printf("(bad option name %lu)", oh->name);					break;				}				break;			default:				printf("(bad option level %lu)", oh->level);				break;			}			printf("%s", result);			opt_rem -= oh->len;			oh = (struct t_opthdr *) (((char *) oh) + oh->len);		}		if (opt_rem)			printf("\n\tBadly formatted options.");	} else		printf("(no opt)");	printf("\n");}voidprint_size(ulong size){	switch (size) {	case -1UL:		printf("T_INFINITE\n");		break;	case -2UL:		printf("T_INVALID\n");		break;	default:		printf("%lu\n", size);		break;	}}voidprint_msg(int fd){	if (ctrl.len > 0) {		switch (show) {		case 0:			return;		case 2:			printf("%d-", fd);			print_prim(cmd.tpi.type);			printf(":\n");			switch (cmd.tpi.type) {			case T_INFO_REQ:				break;			case T_INFO_ACK:				printf("  TSDU_size      = ");				print_size(cmd.tpi.info_ack.TSDU_size);				printf("  ETSDU_size     = ");				print_size(cmd.tpi.info_ack.ETSDU_size);				printf("  CDATA_size     = ");				print_size(cmd.tpi.info_ack.CDATA_size);				printf("  DDATA_size     = ");				print_size(cmd.tpi.info_ack.DDATA_size);				printf("  ADDR_size      = ");				print_size(cmd.tpi.info_ack.ADDR_size);				printf("  OPT_size       = ");				print_size(cmd.tpi.info_ack.OPT_size);				printf("  TIDU_size      = ");				print_size(cmd.tpi.info_ack.TIDU_size);				printf("  SERV_type      = ");				switch (cmd.tpi.info_ack.SERV_type) {				case T_COTS:					printf("T_COTS\n");					break;				case T_COTS_ORD:					printf("T_COTS_ORD\n");					break;				case T_CLTS:					printf("T_CLTS\n");					break;				default:					printf("(unknown)\n");					break;				}				printf("  CURRENT_state  = ");				print_state(cmd.tpi.info_ack.CURRENT_state);				printf("  PROVIDER_flag  = ");				if (cmd.tpi.info_ack.PROVIDER_flag & T_SNDZERO)					printf("T_SNDZERO\n");				if (cmd.tpi.info_ack.PROVIDER_flag & XPG4_1)					printf(" XPG4_1\n");				break;			case T_OPTMGMT_REQ:				printf("  MGMT_flags     = ");				switch (cmd.tpi.optmgmt_req.MGMT_flags) {				case T_NEGOTIATE:					printf("T_NEGOTIATE\n");					break;				case T_CHECK:					printf("T_CHECK\n");					break;				case T_CURRENT:					printf("T_CURRENT\n");					break;				case T_DEFAULT:					printf("T_DEFAULT\n");					break;				default:					break;				}				printf("  OPT            = ");				print_opt(cmd.cbuf + cmd.tpi.optmgmt_req.OPT_offset,					  cmd.tpi.optmgmt_req.OPT_length);				break;			case T_OPTMGMT_ACK:				printf("  MGMT_flags     = ");				switch (cmd.tpi.optmgmt_ack.MGMT_flags) {				case T_NEGOTIATE:					printf("T_NEGOTIATE\n");					break;				case T_CHECK:					printf("T_CHECK\n");					break;				case T_CURRENT:					printf("T_CURRENT\n");					break;				case T_DEFAULT:					printf("T_DEFAULT\n");					break;				default:					break;				}				printf("  OPT            = ");				print_opt(cmd.cbuf + cmd.tpi.optmgmt_ack.OPT_offset,					  cmd.tpi.optmgmt_ack.OPT_length);				break;			case T_BIND_REQ:				printf("  ADDR           = ");				print_addr(cmd.cbuf + cmd.tpi.bind_req.ADDR_offset,					   cmd.tpi.bind_req.ADDR_length);				printf("  CONIND_number  = %lu\n", cmd.tpi.bind_req.CONIND_number);				break;			case T_BIND_ACK:

⌨️ 快捷键说明

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