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

📄 susaptest.c

📁 ftam等标准协议服务器和客户端的源代码。
💻 C
字号:
/* susaptest.c - test out -lsusap for session unit data service  */#ifndef	lintstatic char *rcsid = "$Header: /f/iso/tsap/RCS/tsaptest.c,v 5.0 88/07/21 15:00:04 mrose Rel $";#endif/* *				  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. * */#include <stdio.h>#include <ctype.h>#include "spkt.h"#include "ssap.h"#include "susap.h"#include "isoservent.h"#include "isoaddrs.h"#include "internet.h"/*  */char *gets (), *calloc ();printsrv();printtaddr();#define CLIENT_MODE  	0#define SERVER_MODE  	1 /*  *//* ARGSUSED */int main(argc, argv, envp)int argc;char **argv,     **envp;{    struct spkt *t;	                        /* Working packet pointer */    char sendbuf[1024];			        /* send buffer */    char recvbuf[1024];			        /* recv buffer */    char buffer[80],                            /* Working input buffer */         *bptr;                                 /* Pointer to our buffer */    struct udvec uvs[2];    register struct udvec *uv;    int  cc, result, data, mode;    u_short  pattern;    register struct tsapblk *tb;    struct SuSAPstart sunitdata;    struct SuSAPstart *sud = &sunitdata;    int	sd;    struct SSAPaddr   *sa;    struct isoservent *is;    struct servent *sp;    struct SSAPindication si;    struct SSAPindication *sptr;#define	NTADDRS		FD_SETSIZE    struct TSAPaddr   *ta;    register int    n = ta -> ta_naddr - 1;    register struct NSAPaddr   *na = ta -> ta_addrs;static struct TSAPaddr *tz;static struct TSAPaddr  tas[NTADDRS];    int	    port;    struct NSAPaddr *tcp_na;    printf ("\n SuSAP test driver for SUNITDATA\n");    printf ("\n running on host \"%s\"\n", SLocalHostName ());    t = NULL;    bptr = buffer;    *bptr = 'h';/* *  Init the send buffer to a continous pattern. */ for (cc = pattern = 0; cc < sizeof(sendbuf); cc++, pattern++)    sendbuf[cc] = pattern;/* *  Setup the calling and called network addresses. */    if ((is = getisoserventbyname("susaptest", "ssap")) == NULL)	{	printf ("\nfailed to lookup iso service \n");	exit (1);	}	    if (is)        printsrv (is);        if ((sa = is2saddr("loopback", "udptest", is)) == NULLSA)	{        printf ("\n ssap address translation failed \n");	exit(1);	}    if (sa)        printsaddr(sa);        if ((ta = is2taddr("loopback", "udptest", is)) == NULLTA)	{        printf ("\n tsap address translation failed \n");	exit(1);	}    if (ta)        printtaddr(ta);    while (1) {        switch (toupper(*bptr)) {            case 'H':                printf("\n\nCommands are:\n");		printf("  T - Toggle mode (default is client)\n");		printf("  B - Bind service\n");		printf("  U - Unbind service\n");		printf("  L - Listen on a socket \n");                printf("  S - Send a datagram\n");		printf("  R - Receive a datagram\n");                break;            case 'Q':                printf("\nSuSAP tester terminated by user\n");                exit(0);	    case 'T':	       		printf ("\n Toggle mode \n");		printf ("\n Current mode is ");			if (mode == SERVER_MODE)		    {		    printf ("SERVER\n");		    mode = CLIENT_MODE;		    printf ("\n Changing to CLIENT\n");		    }		else		    {		    printf ("CLIENT\n");		    mode = SERVER_MODE;		    printf ("\n Changing to SERVER\n");		    }		break;	    case 'B':		printf ("\n Binding the service\n");#ifdef UDP		if (mode == CLIENT_MODE)       		    sd = SUnitDataBind (NOTOK, NULL, sa, NULL, &si);		else       		    sd = SUnitDataBind (NOTOK, sa, NULL, NULL, &si);	    	if (sd == NOTOK)		    printf ("\n Bind unit data service failed\n");    		else		    printf ("\n application bound to socket = %d \n", sd);#endif		break;	    case 'U':		printf ("\n Unbinding the service\n");		           		SUnitDataUnbind (sd);		break;	    case 'L':       	        if ((sp = getservbyname ("tsap", "tcp")) == NULL)	            printf ("\ntcp/tsap: unknown service");				tz = tas;    	    	tcp_na = tz -> ta_addrs;    	    	tcp_na -> na_type = NA_TCP;    	    	tcp_na -> na_domain[0] = NULL;    	    	tcp_na -> na_port = sp -> s_port;	        tz -> ta_naddr = 1;		           		sd = TUnitDataListen (tcp_na, NULL);	    	if (sd == NOTOK)		    printf ("\n TNetListen failed\n");    		else		    {		    printf ("\n listening on socket = %d \n", sd);		    printf ("\n              port = %d \n", tcp_na -> na_port);		    }		break;	    case 'S':	       		printf ("\n Send a datagram \n");		printf ("\n sending %d bytes of user data\n", cc);		printf ("\n here are the first 100 bytes \n");					for (data = 0; data < 100; data++)		    printf (" %x ", sendbuf[data]);				uv = &uvs[0];    		uv -> uv_base = &sendbuf[0];		uv -> uv_len = 1024;		uv++;		uv -> uv_len = 0;		uv -> uv_base = NULL;		result = SUnitDataWrite (sd, &sendbuf[0], sizeof sendbuf, &si); 		if (result != OK)		    printf ("\n datagram write failed\n");		else   		    printf ("\n datagram write successful\n");		break;            case 'R':		printf ("\n Read datagram on socket %d \n", sd);				result = SUnitDataRead (sd, &sunitdata, 3, &si);		if (result != OK)		    printf ("\n Read failed.  \n");		else		    {			    printf ("\n Read successful.  \n");		    printf ("\n calling addr: \n");		    printsaddr (&sunitdata.ss_calling);		    printf ("\n called addr: \n");		    printsaddr (&sunitdata.ss_called);		    printf ("\n user data len = %d  ...  \n", sunitdata.ss_cc);		    for (data=0; data< min(sunitdata.ss_cc,256); data++)		    printf (" %x ", *(sunitdata.ss_data + data) );		    SUSFREE (&sunitdata);		    if (mode == CLIENT_MODE)			break;		   /* rebind to the remote addr */       		    sd = SUnitDataBind (sd, sa, &sunitdata.ss_calling, NULL, &si);	    	    if (sd == NOTOK)		        printf ("\n REBIND unit data service failed\n");    		    else		        printf ("\n application REBINDED to socket = %d \n", sd);				    }		break;            case '\0':                break;            default:                if (*bptr != '\0')                    printf("** Unrecognized command\n");                break;        }        printf("\nCommand: ");        (void)fflush(stdout);        bptr = gets(buffer);	if (feof (stdin))	    exit (1);        while (isspace(*bptr) && (*bptr != '\0')) ++bptr;    }}static	printsrv (is)register struct isoservent *is;{    register int    n = is -> is_tail - is -> is_vec - 1;    register char **ap = is -> is_vec;    printf ("ENT: \"%s\" PRV: \"%s\" SEL: %s\n",	    is -> is_entity, is -> is_provider,	    sel2str (is -> is_selector, is -> is_selectlen, 1));    for (; n >= 0; ap++, n--)	printf ("\t%d: \"%s\"\n", ap - is -> is_vec, *ap);    printf ("\n");}/*  */static	printsaddr (sa)register struct SSAPaddr *sa;{struct TSAPaddr   *ta = &(sa -> sa_addr);struct NSAPaddr   *na = ta -> ta_addrs;int    n = 1;	printf ("ADDR:    SSEL: %s\n",		sel2str (sa -> sa_selector, sa -> sa_selectlen, 1));	printf ("ADDR:    TSEL: %s\n",		sel2str (ta -> ta_selector, ta -> ta_selectlen, 1));	for (; n >= 0; na++, n--)	    {	    printf ("\t%d: ", ta -> ta_naddr - n - 1);	    switch (na -> na_type)	        {		case NA_NSAP: 		    printf ("NS %s", na2str (na));		    break;		case NA_TCP: 		    printf ("TCP %s", na2str (na));		    if (na -> na_port)			printf ("  Port %d Tset 0x%x",				(int) ntohs (na -> na_port),				(int) na -> na_tset);		    break;                case NA_X25:		case NA_BRG:                    printf ("X.25 %s%s",			    na -> na_type == NA_BRG ? "(BRIDGE) " : "",			    na2str (na));                    if (na -> na_pidlen > 0)                        printf (" %s" , sel2str (na -> na_pid,						 (int) na -> na_pidlen, 1));		    break;		default: 		    printf ("0x%x", na -> na_type);		    break;	        }	}}static	printtaddr (ta)register struct TSAPaddr *ta;{register int    n;register struct NSAPaddr   *na;	n = ta -> ta_naddr - 1;	na = ta -> ta_addrs;	printf ("ADDR:    TSEL: %s\n",		sel2str (ta -> ta_selector, ta -> ta_selectlen, 1));	for (; n >= 0; na++, n--)	    {	    printf ("\t%d: ", ta -> ta_naddr - n - 1);	    switch (na -> na_type)	        {		case NA_NSAP: 		    printf ("NS %s", na2str (na));		    break;		case NA_TCP: 		    printf ("TCP %s", na2str (na));		    if (na -> na_port)			printf ("  Port %d Tset 0x%x",				(int) ntohs (na -> na_port),				(int) na -> na_tset);		    break;                case NA_X25:		case NA_BRG:                    printf ("X.25 %s%s",			    na -> na_type == NA_BRG ? "(BRIDGE) " : "",			    na2str (na));                    if (na -> na_pidlen > 0)                        printf (" %s" , sel2str (na -> na_pid,						 (int) na -> na_pidlen, 1));		    break;		default: 		    printf ("0x%x", na -> na_type);		    break;	        }	}}

⌨️ 快捷键说明

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