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

📄 acusaptest.c

📁 ftam等标准协议服务器和客户端的源代码。
💻 C
📖 第 1 页 / 共 2 页
字号:
/*-------------------------------------*/int audtsend()/*-------------------------------------*/{int	sum, result;    if (mode == CLIENT_MODE)	{	Addends.addend1 = 3; Addends.addend2 = 2;        printf ("\n Client sending pair of addends: ");	printf ("%d, %d\n", Addends.addend1, Addends.addend2);	if ( encode_ADD_Addends ( &cpe, 1, 0, NULLCP, &Addends ) == NOTOK )	    {            printf ("\n encode failed\n");	    return;	    }	cpe->pe_context = 1;	result = AcUnitDataWrite (csd, &cpe, 1, aci );	}    else    /* SERVER_MODE */	{        printf ("\n Server sending sum = ");	sum = pAddends->addend1 + pAddends->addend2;	free_ADD_Addends(pAddends);	Sum.parm = sum;        printf ("%d\n", sum);	if ( encode_ADD_Sum ( &spe, 1, 0, NULLCP, &Sum ) == NOTOK )	    {            printf ("\n encode failed\n");	    return;	    }	spe->pe_context = 1;	result = AcUnitDataWrite (ssd, &spe, 1, aci );	}    if ( result == NOTOK )	{        printf ("\n AcUnitDataWrite failed\n");        acs_adios (aca, "A-UNIT-DATA WRITE");	}    else           printf ("\n write successful\n");}		/*-------------------------------------*/int audtread()/*-------------------------------------*/{    if (mode == CLIENT_MODE)	{        printf ("\n Client reading sum\n");	if ( AcUnitDataRead (csd, pcacs, 5, aci ) == NOTOK ) goto rfail;/*	if ( validbinding ( csd, pcacs ) == NOTOK )	    printf ("\n validation of context and/or title failed\n");*/	if ( decode_ADD_Sum ( cacs.acs_info[0], 1, NULLIP, NULLVP, &pSum )		== NOTOK )            printf ("\n read ok but decode failed\n");	else 	    printf ( "\n successful: sum = %d\n", pSum->parm );	ACSFREE(pcacs);	free_ADD_Sum ( pSum );	return;	}    else    /* SERVER_MODE */	{        printf ("\n Server reading addends\n");	if ( AcUnitDataRead (ssd, psacs, 5, aci ) == NOTOK ) goto rfail;/*	if ( validbinding ( ssd, psacs ) == NOTOK )	    printf ("\n validation of context and/or title failed\n");*/	Addends.addend1 = Addends.addend2 = 0;	if ( decode_ADD_Addends (sacs.acs_info[0], 1, NULLIP, NULLVP, &pAddends)		== NOTOK )            printf ("\n read ok but decode failed\n");	else 	    printf ( "\n successful: Addends = %d, %d\n",					 pAddends->addend1, pAddends->addend2 );        clientaei = psacs -> acs_callingtitle;	/* struct copy */	ACSFREE(psacs);	return;	}rfail:;	printf ("\n AcUnitDataRead() failed\n" );        acs_adios (aca, "A-UNIT-DATA READ");	return;}	/*-------------------------------------*/int validbinding ( sd, acs )/*-------------------------------------*/int sd;struct  AcuSAPstart	*acs;{    struct assocblk *acb;#define	AEICMP(aei1,aei2) \    (pe_cmp ((aei1) -> aei_ap_title, (aei2) -> aei_ap_title) \  || pe_cmp ((aei1) -> aei_ae_qualifier, (aei2) -> aei_ae_qualifier))     if ( (acb = findacublk (sd)) == NULL )	{	printf ("\n cannot find assocblk\n");	return NOTOK;	}    if ( acb -> acb_context != acs -> acs_context )	return NOTOK;    if ( acb -> acb_callingtitle 	    && (AEICMP(acb->acb_callingtitle,&acs->acs_calledtitle)) )        return NOTOK;    if ( acb -> acb_binding == BIND_STATIC             && acb -> acb_calledtitle	    && AEICMP (acb -> acb_calledtitle, &acs -> acs_callingtitle ))        return NOTOK;    return OK;}/*-------------------------------------*/int audtrebind()/*-------------------------------------*/{    if (mode == CLIENT_MODE)        printf ("\n Only support on server side\n");    else    /* SERVER_MODE */	{        printf ("\n Rebinding server to new called address and title\n");/* cheating til Kurt gets back     if ((pclientaei = str2aei (myhost, "clientacusaptest")) == NULLAEI)	adios (NULLCP, "%s-%s: unknown application-entity",		 myhost, "clientacusaptest");    if ((cpa = aei2addr (pclientaei)) == NULLPA)	adios (NULLCP, "address translation failed");    printpaddr ( pa );    if ( AcUnitDataRebind (ssd, pclientaei, cpa, aci) == NOTOK )end cheat */        if ( AcUnitDataRebind (ssd, &clientaei,				 &psacs->acs_start.ps_calling, aci) == NOTOK )	    {	    printf ("\n Rebind unit data service failed\n");	    acs_adios (aca, "A-UNIT-DATA REBIND");	    }    	else	    printf ("\n application rebound to socket %d \n", ssd);	}}		/*-------------------------------------*/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	printpaddr (pa)/*-------------------------------------*/register struct PSAPaddr *pa;{struct SSAPaddr   *sa = &(pa -> pa_addr);struct TSAPaddr   *ta = &(sa -> sa_addr);struct NSAPaddr   *na = ta -> ta_addrs;int    n = ta -> ta_naddr - 1;	printf ("ADDR:    PSEL: %s\n",		sel2str (pa -> pa_selector, pa -> pa_selectlen, 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;	        }	}}void	acs_adios (aca, event)register struct AcSAPabort *aca;char   *event;{    acs_advise (aca, event);    _exit (1);}void	acs_advise (aca, event)register struct AcSAPabort *aca;char   *event;{    char    buffer[BUFSIZ];    if (aca -> aca_cc > 0)	(void) sprintf (buffer, "[%s] %*.*s",		AcuErrString (aca -> aca_reason),		aca -> aca_cc, aca -> aca_cc, aca -> aca_data);    else	(void) sprintf (buffer, "[%s]", AcuErrString (aca -> aca_reason));	advise (NULLCP, "%s: %s (source %d)", event, buffer,		aca -> aca_source);}/*  */#ifndef	lintvoid	_advise ();void	adios (va_alist)va_dcl{    va_list ap;    va_start (ap);    _advise (ap);    va_end (ap);    _exit (1);}#else/* VARARGS */void	adios (what, fmt)char   *what,       *fmt;{    adios (what, fmt);}#endif#ifndef	lintvoid	advise (va_alist)va_dcl{    va_list ap;    va_start (ap);    _advise (ap);    va_end (ap);}static void  _advise (ap)va_list	ap;{    char    buffer[BUFSIZ];    asprintf (buffer, ap);    (void) fflush (stdout);    fprintf (stderr, "%s: ", myservice);    (void) fputs (buffer, stderr);    (void) fputc ('\n', stderr);    (void) fflush (stderr);}#else/* VARARGS */void	advise (what, fmt)char   *what,       *fmt;{    advise (what, fmt);}#endif#ifndef	lintvoid	ryr_advise (va_alist)va_dcl{    char   *what;    va_list ap;    va_start (ap);    _advise (ap);    va_end (ap);}#else/* VARARGS */void	ryr_advise (what, fmt)char   *what,       *fmt;{    ryr_advise (what, fmt);}#endif

⌨️ 快捷键说明

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