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

📄 test-sctp_n.c

📁 No7信令,我需要交换类似的代码, 请店长审核,谢谢了,急着交换,谢谢
💻 C
📖 第 1 页 / 共 5 页
字号:
			case N_EXDATA_REQ:	printf("                    |                |<---(%03lu:%03lu)----|<----- N_EXDATA_REQ \n", qos_data.sid, qos_data.ssn); break;			case N_EXDATA_IND:	printf("                    |  [%010lu]  |----(%03lu:%03lu)--->|-----> N_EXDATA_IND \n",								(ulong)((N_qos_sel_data_sctp_t *)(cmd.cbuf+sizeof(cmd.npi.exdata_ind)))->tsn,								(ulong)((N_qos_sel_data_sctp_t *)(cmd.cbuf+sizeof(cmd.npi.exdata_ind)))->sid,								(ulong)((N_qos_sel_data_sctp_t *)(cmd.cbuf+sizeof(cmd.npi.exdata_ind)))->ssn);						tsn[fd] = ((N_qos_sel_data_sctp_t *)(cmd.cbuf+sizeof(cmd.npi.exdata_ind)))->tsn;						sid[fd] = ((N_qos_sel_data_sctp_t *)(cmd.cbuf+sizeof(cmd.npi.exdata_ind)))->sid; break;			case N_DATACK_REQ:	printf("                    |                |<---(%03lu:%03lu)----|<----- N_DATACK_REQ \n", qos_data.sid, qos_data.ssn); break;			case N_DATACK_IND:	printf("                    |  [%010lu]  |----(%03lu:%03lu)--->|-----> N_DATACK_IND \n",								(ulong)((N_qos_sel_data_sctp_t *)(cmd.cbuf+sizeof(cmd.npi.datack_ind)))->tsn,								(ulong)((N_qos_sel_data_sctp_t *)(cmd.cbuf+sizeof(cmd.npi.datack_ind)))->sid,								(ulong)((N_qos_sel_data_sctp_t *)(cmd.cbuf+sizeof(cmd.npi.datack_ind)))->ssn);						tsn[fd] = ((N_qos_sel_data_sctp_t *)(cmd.cbuf+sizeof(cmd.npi.datack_ind)))->tsn;						sid[fd] = ((N_qos_sel_data_sctp_t *)(cmd.cbuf+sizeof(cmd.npi.datack_ind)))->sid; break;			case N_DISCON_REQ:	printf("                    |                |<----------------|<----- N_DISCON_REQ \n"); break;			case N_DISCON_IND:	printf("                    |                |---------------->|-----> N_DISCON_IND \n"); break;			case N_RESET_REQ:	printf("                    |                |<----------------|<----- N_RESET_REQ  \n"); break;			case N_RESET_IND:	printf("                    |                |---------------->|-----> N_RESET_IND  \n"); break;			case N_RESET_RES:	printf("                    |                |<----------------|<----- N_RESET_RES  \n"); break;			case N_RESET_CON:	printf("                    |                |---------------->|-----> N_RESET_CON  \n"); break;			default:		printf("                    |                               |  |?----? ????%4ld???? \n", cmd.npi.type); break;			}		}		break;	}	}	FFLUSH(stdout);}void print_less(int fd){	switch ( show )	{		case 1:			switch ( fd )			{				case 0:					printf(" .         .  <---->|                .                 |<---->  .         . \n");					printf(" .  (more) .  <---->|                .                 |<---->  . (more)  . \n");					printf(" .         .  <---->|                .                 |<---->  .         . \n");					break;				case 3:					printf(" .         .  <---->|                .              |  |                    \n");					printf(" .  (more) .  <---->|                .              |  |                    \n");					printf(" .         .  <---->|                .              |  |                    \n");					break;				case 4:					printf("                    |                .              |<-+----->  .         . \n");					printf("                    |                .              |<-+----->  . (more)  . \n");					printf("                    |                .              |<-+----->  .         . \n");					break;				case 5:					printf("                    |                .              |  |<---->  .         . \n");					printf("                    |                .              |  |<---->  . (more)  . \n");					printf("                    |                .              |  |<---->  .         . \n");					break;			}			break;		case 2:			printf("%d-(more) ...\n", fd);			break;	}	show = 0;	return;}void print_more(void){	show = 1;}int get_msg(int fd, int wait){	int ret;	int flags = 0;	while ( (ret = getmsg(fd, &ctrl, &data, &flags)) < 0 ) {		switch ( errno )		{			default:			case EPROTO:			case EINVAL:				printf("ERROR: getmsg: [%d] %s\n", errno, strerror(errno));				exit(2);			case EINTR:			case ERESTART:				continue;			case EAGAIN:				break;		}		break;	}	if ( !ret )	{		gettimeofday(&when,NULL);		if ( show ) print_msg(fd);		return(cmd.npi.type);	}	if ( !wait ) {		/* printf("Nothing to get on getmsg\n"); */		return(FAILURE);	}	do {		struct pollfd pfd[] = {			{ fd, POLLIN|POLLPRI, 0 }		};		if ( !(ret = poll(pfd, 1, wait)) ) {			/* printf("Timeout on poll for getmsg\n"); */			return(FAILURE);		}		if ( ret == 1 || ret == 2 )		{			if ( pfd[0].revents & (POLLIN|POLLPRI) ) {				flags = 0;				if ( getmsg(fd, &ctrl, &data, &flags) == 0 ) {					gettimeofday(&when,NULL);					if ( show ) print_msg(fd);					return(cmd.prim);				}				printf("ERROR: getmsg: [%d] %s\n", errno, strerror(errno));				return(FAILURE);			}		}		if ( ret == -1 ) {			printf("ERROR: poll: [%d] %s\n", errno, strerror(errno));			return(FAILURE);		}	} while(1);}int expect(int fd, int wait, int want){	int got;	if ( (got = get_msg(fd, wait)) == want )		return(SUCCESS);	else {		switch ( show )		{		case 1:			switch ( fd )			{			case 3: printf("(%-12s)<-????X[Expected]                     X  X                    \n", prim_string(want)); break;			case 4: printf("                    X                     [Expected]X--X????->(%-12s)\n", prim_string(want)); break;			case 5: printf("                    X                     [Expected]X  X????->(%-12s)\n", prim_string(want)); break;			}			break;		case 2:			printf("%d-ERROR: Expected ", fd); print_prim(want);			printf(" got "); print_prim(got); printf("\n");			break;		}		return(FAILURE);	}}int put_msg(int fd, int band, int flags, int wait){	int ret;	struct strbuf *mydata = data.len ? &data : NULL;	while ( (ret = putpmsg(fd, &ctrl, mydata, band, flags)) < 0 ) {		switch ( errno ) 		{			default:				printf("ERROR: putpmsg: [%d] %s\n", errno, strerror(errno));				exit(2);				break;			case EINTR:			case ERESTART:				continue;			case EAGAIN:				break;		}		break;	}	if ( !ret )	{		gettimeofday(&when,NULL);		if ( show ) print_msg(fd);		return(SUCCESS);	}	if ( !wait ) {		/* printf("Nothing put on putpmsg\n"); */		return(FAILURE);	}	do {		int flag = band?POLLWRNORM|POLLOUT:POLLWRBAND;		struct pollfd pfd[] = {			{ fd, flag, 0 }		};		if ( !(ret = poll(pfd, 1, wait)) ) {			/* printf("Timeout on poll for putpmsg\n"); */			return(FAILURE);		}		if ( ret == 1 || ret == 2 )		{			if ( pfd[0].revents & (POLLOUT|POLLWRNORM|POLLWRBAND) ) {				if ( putpmsg(fd, &ctrl, mydata, band, flags) == 0 ) {					gettimeofday(&when,NULL);					if ( show ) print_msg(fd);					return(SUCCESS);				}				printf("ERROR: putpmsg: [%d] %s\n", errno, strerror(errno));				return(FAILURE);			}		}		if ( ret == -1 ) {			printf("ERROR: poll: [%d] %s\n", errno, strerror(errno));			return(FAILURE);		}	} while(1);}int sctp_n_open(void){	int fd;	if ( (fd = open("/dev/sctp_n",O_NONBLOCK|O_RDWR)) < 0 )		printf("ERROR: open: [%d] %s\n", errno, strerror(errno));	else	switch ( show ) {		case 1:			switch ( fd )			{				case 3: printf("OPEN          ----->v                                                       \n"); break;				case 4: printf("                    |                               v<-------- OPEN         \n"); break;				case 5: printf("                    |                               |  v<----- OPEN         \n"); break;			}			break;		case 2: printf("\n%d-OPEN: sctp_n\n", fd); break;	}	return(fd);}int sctp_close(int fd){	int ret;	if ( (ret = close(fd)) < 0 )		printf("ERROR: close: [%d] %s\n", errno, strerror(errno));	else	switch ( show ) {		case 1:			switch ( fd )			{				case 3: printf("CLOSE         ----->X                               |  |                    \n"); break;				case 4: printf("                                                    X<-+------ CLOSE        \n"); break;				case 5: printf("                                                       X<----- CLOSE        \n"); break;			}			break;		case 2: printf("\n%d-CLOSE:\n",fd); break;	}	return(ret);}int sctp_info_req(int fd){	data.len = 0;	ctrl.len = sizeof(cmd.npi.info_req);	cmd.prim = N_INFO_REQ;	return put_msg(fd, 0, MSG_HIPRI, 0);}int sctp_optmgmt_req(int fd, ulong flags){	data.len = 0;	ctrl.len = sizeof(cmd.npi.optmgmt_req)+sizeof(qos_info);	cmd.prim = N_OPTMGMT_REQ;	cmd.npi.optmgmt_req.OPTMGMT_flags = flags;	cmd.npi.optmgmt_req.QOS_length = sizeof(qos_info);	cmd.npi.optmgmt_req.QOS_offset = sizeof(cmd.npi.optmgmt_req);	bcopy(&qos_info, (cmd.cbuf + sizeof(cmd.npi.optmgmt_req)), sizeof(qos_info));	return put_msg(fd, 0, MSG_BAND, 0);}int sctp_bind_req(int fd, addr_t *addr, int coninds){	data.len = 0;	ctrl.len = sizeof(cmd.npi.bind_req)+sizeof(*addr);	cmd.prim = N_BIND_REQ;	cmd.npi.bind_req.ADDR_length = sizeof(*addr);	cmd.npi.bind_req.ADDR_offset = sizeof(cmd.npi.bind_req);	cmd.npi.bind_req.CONIND_number = coninds;	cmd.npi.bind_req.BIND_flags = TOKEN_REQUEST;	cmd.npi.bind_req.PROTOID_length = 0;	cmd.npi.bind_req.PROTOID_offset = 0;	bcopy(addr, (&cmd.npi.bind_req)+1, sizeof(*addr));	return put_msg(fd, 0, MSG_BAND, 0);}int sctp_unbind_req(int fd){	data.len = 0;	ctrl.len = sizeof(cmd.npi.unbind_req);	cmd.prim = N_UNBIND_REQ;	return put_msg(fd, 0, MSG_BAND, 0);}int sctp_conn_req(int fd, addr_t *addr, const char *dat){	if ( !dat ) data.len = 0; else	{		data.len = strlen(dat)+1;		strncpy(dbuf, dat, BUFSIZE);	}	ctrl.len = sizeof(cmd.npi.conn_req)+sizeof(*addr)+sizeof(qos_conn);	cmd.prim = N_CONN_REQ;	cmd.npi.conn_req.DEST_length = sizeof(*addr);	cmd.npi.conn_req.DEST_offset = sizeof(cmd.npi.conn_req);	cmd.npi.conn_req.CONN_flags = REC_CONF_OPT|EX_DATA_OPT;	cmd.npi.conn_req.QOS_length = sizeof(qos_conn);	cmd.npi.conn_req.QOS_offset = sizeof(cmd.npi.conn_req)+sizeof(*addr);	bcopy(addr, (cmd.cbuf + sizeof(cmd.npi.conn_req)), sizeof(*addr));	bcopy(&qos_conn, (cmd.cbuf + sizeof(cmd.npi.conn_req)+sizeof(*addr)), sizeof(qos_conn));	return put_msg(fd, 0, MSG_BAND, 0);}int sctp_conn_res(int fd, int fd2, const char *dat){	if ( !dat ) data.len = 0; else	{		data.len = strlen(dat)+1;		strncpy(dbuf, dat, BUFSIZE);	}	ctrl.len = sizeof(cmd.npi.conn_res);	cmd.prim = N_CONN_RES;	cmd.npi.conn_res.TOKEN_value = tok[fd2];	cmd.npi.conn_res.RES_offset = 0;	cmd.npi.conn_res.RES_length = 0;	cmd.npi.conn_res.SEQ_number = seq[fd];	cmd.npi.conn_res.CONN_flags = REC_CONF_OPT|EX_DATA_OPT;	cmd.npi.conn_res.QOS_offset = 0;	cmd.npi.conn_res.QOS_length = 0;	return put_msg(fd, 0, MSG_BAND, 0);}int sctp_discon_req(int fd, ulong seq){	data.len = 0;	ctrl.len = sizeof(cmd.npi.discon_req);	cmd.prim = N_DISCON_REQ;	cmd.npi.discon_req.DISCON_reason = 0;	cmd.npi.discon_req.RES_length = 0;	cmd.npi.discon_req.RES_offset = 0;	cmd.npi.discon_req.SEQ_number = seq;	return put_msg(fd, 0, MSG_BAND, 0);}int sctp_data_req(int fd, ulong flags, const char *dat, int wait){	if ( !dat ) return(FAILURE); else	{		data.len = strlen(dat)+1;		strncpy(dbuf, dat, BUFSIZE);	}	ctrl.len = sizeof(cmd.npi.data_req)+sizeof(qos_data);	cmd.prim = N_DATA_REQ;	cmd.npi.data_req.DATA_xfer_flags = flags;	bcopy(&qos_data, cmd.cbuf + sizeof(cmd.npi.data_req), sizeof(qos_data));	return put_msg(fd, 0, MSG_BAND, wait);}int sctp_ndata_req(int fd, ulong flags, const char *dat, size_t len, int wait){	int ret;	if ( !dat ) return(FAILURE); else	{		data.maxlen = len;		data.len = len;		data.buf = (char *)dat;	}	ctrl.len = sizeof(cmd.npi.data_req)+sizeof(qos_data);	cmd.prim = N_DATA_REQ;	cmd.npi.data_req.DATA_xfer_flags = flags;	bcopy(&qos_data, cmd.cbuf + sizeof(cmd.npi.data_req), sizeof(qos_data));	ret = put_msg(fd, 0, MSG_BAND, wait);	data.maxlen = BUFSIZE;	data.len = 0;	data.buf = dbuf;	return(ret);}int sctp_exdata_req(int fd, const char *dat){	if ( !dat ) return(FAILURE); else	{		data.len = strlen(dat)+1;		strncpy(dbuf, dat, BUFSIZE);	}	ctrl.len = sizeof(cmd.npi.exdata_req)+sizeof(qos_data);	cmd.prim = N_EXDATA_REQ;	bcopy(&qos_data, cmd.cbuf + sizeof(cmd.npi.exdata_req), sizeof(qos_data));	return put_msg(fd, 1, MSG_BAND, 0);}int sctp_datack_req(int fd, ulong tsn){	int ret;	data.len = 0;	ctrl.len = sizeof(cmd.npi.datack_req)+sizeof(qos_data);	cmd.prim = N_DATACK_REQ;	qos_data.tsn = tsn;	bcopy(&qos_data, cmd.cbuf + sizeof(cmd.npi.datack_req), sizeof(qos_data));	ret = put_msg(fd, 0, MSG_BAND, 0);	qos_data.tsn = 0;

⌨️ 快捷键说明

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