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

📄 test-sctp_t.c

📁 No7信令,我需要交换类似的代码, 请店长审核,谢谢了,急着交换,谢谢
💻 C
📖 第 1 页 / 共 5 页
字号:
	printf("%s\n", err_string(error));}char *prim_string(ulong prim){	switch ( prim )	{		case T_CONN_REQ:	return("T_CONN_REQ");		case T_CONN_RES:	return("T_CONN_RES");		case T_DISCON_REQ:	return("T_DISCON_REQ");		case T_DATA_REQ:	return("T_DATA_REQ");		case T_EXDATA_REQ:	return("T_EXDATA_REQ");		case T_OPTDATA_REQ:	return("T_OPTDATA_REQ");		case T_INFO_REQ:	return("T_INFO_REQ");		case T_BIND_REQ:	return("T_BIND_REQ");		case T_UNBIND_REQ:	return("T_UNBIND_REQ");		case T_UNITDATA_REQ:	return("T_UNITDATA_REQ");		case T_OPTMGMT_REQ:	return("T_OPTMGMT_REQ");		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");	}}void print_prim(ulong prim){	printf("%s", prim_string(prim));}void print_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");}void print_addr(char *add_ptr, size_t add_len){	sctp_addr_t *a = (sctp_addr_t *)add_ptr;	size_t anum = add_len >= sizeof(a->port) ?		(add_len - sizeof(a->port))/sizeof(a->addr[0]) : 0;	if ( add_len )	{		int i;		if ( add_len != sizeof(a->port)+anum*sizeof(a->addr[0]) )			printf("Aaarrg! add_len = %d, anum = %d, ", add_len, anum);		printf("[%d]", ntohs(a->port));		for ( i = 0; i < anum; i++ )		{			printf("%s%d.%d.%d.%d",					i?",":"",					(a->addr[i]>> 0) & 0xff,					(a->addr[i]>> 8) & 0xff,					(a->addr[i]>>16) & 0xff,					(a->addr[i]>>24) & 0xff);		}	}	else	printf("(no address)");	printf("\n");}void print_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_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");}void print_size(ulong size){	switch ( size )	{		case -1UL:  printf("UNLIMITED\n");  break;		case -2UL:  printf("UNDEFINED\n");  break;		default:    printf("%lu\n", size);  break;	}}void print_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:				}			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:				}			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:			printf("  ADDR           = "); print_addr(cmd.cbuf + cmd.tpi.bind_ack.ADDR_offset, cmd.tpi.bind_ack.ADDR_length);			printf("  CONIND_number  = %lu\n", cmd.tpi.bind_ack.CONIND_number);			break;		case T_ADDR_REQ:			break;		case T_ADDR_ACK:			printf("  LOCADDR        = "); print_addr(cmd.cbuf + cmd.tpi.addr_ack.LOCADDR_offset, cmd.tpi.addr_ack.LOCADDR_length);			printf("  REMADDR        = "); print_addr(cmd.cbuf + cmd.tpi.addr_ack.REMADDR_offset, cmd.tpi.addr_ack.REMADDR_length);			break;		case T_UNBIND_REQ:			break;		case T_ERROR_ACK:			printf("  ERROR_prim     = "); print_prim(cmd.tpi.error_ack.ERROR_prim); printf("\n");			printf("  TLI_error      = "); print_error(cmd.tpi.error_ack.TLI_error);			printf("  UNIX_error     = %lu (%s)\n", cmd.tpi.error_ack.UNIX_error, strerror(cmd.tpi.error_ack.UNIX_error));			break;		case T_OK_ACK:			printf("  CORRECT_prim   = "); print_prim(cmd.tpi.ok_ack.CORRECT_prim); printf("\n");			break;		case T_CONN_REQ:			printf("  DEST           = "); print_addr(cmd.cbuf + cmd.tpi.conn_req.DEST_offset, cmd.tpi.conn_req.DEST_length);			printf("  OPT            = "); print_opt (cmd.cbuf + cmd.tpi.conn_req.OPT_offset,  cmd.tpi.conn_req.OPT_length);			break;		case T_CONN_IND:			printf("  SRC            = "); print_addr(cmd.cbuf + cmd.tpi.conn_ind.SRC_offset, cmd.tpi.conn_ind.SRC_length);			printf("  OPT            = "); print_opt (cmd.cbuf + cmd.tpi.conn_ind.OPT_offset, cmd.tpi.conn_ind.OPT_length);			printf("  SEQ_number     = %lx\n", cmd.tpi.conn_ind.SEQ_number);			seq[fd] = cmd.tpi.conn_ind.SEQ_number;			break;		case T_CONN_RES:			printf("  ACCEPTOR_id    = %d\n", fdi.fildes);			printf("  OPT            = "); print_opt (cmd.cbuf + cmd.tpi.conn_res.OPT_offset, cmd.tpi.conn_res.OPT_length);			printf("  SEQ_number     = %lx\n", cmd.tpi.conn_res.SEQ_number);			break;		case T_CONN_CON:			printf("  RES            = "); print_addr(cmd.cbuf + cmd.tpi.conn_con.RES_offset, cmd.tpi.conn_con.RES_length);			printf("  OPT            = "); print_opt (cmd.cbuf + cmd.tpi.conn_con.OPT_offset, cmd.tpi.conn_con.OPT_length);			break;		case T_DATA_REQ:			printf("  MORE_flag      = %lu\n", cmd.tpi.data_req.MORE_flag);			printf("  DATA           = %s\n", dbuf);			break;		case T_DATA_IND:			printf("  MORE_flag      = %lu\n", cmd.tpi.data_ind.MORE_flag);

⌨️ 快捷键说明

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