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

📄 cltp.c

📁 ftam等标准协议服务器和客户端的源代码。
💻 C
字号:
/* **************************************************************** *                                                              * *  HULA project						* *                                             			* *  program:  	cltp.c		                                * *  author:   	kurt dobbins                                    * *  date:     	5/89                                            * *                                                              * *  This program implements the ISO 8602 Connectionless-Mode 	* *  Transport Protocol.  It is designed to provide  	 	* *  connectionless service over connectionless-mode network	* *  service.  There are no provisions for running over a        * *  connection-oriented network service.		        * *                                  				* *  entry points:                   				* *                                  				* * 	T_UnitDataWrite (tb, uv, hptr, td)                      * *      T_UnitDataRead (tb, tud, td)	                        * *								* **************************************************************** *								* *								* *			     NOTICE		   		* *								* *    Acquisition, use, and distribution of this module and     * *    related materials are subject to the restrictions of a    * *    license agreement.					* *								*     *    This software is for prototype purposes only.		* *								* **************************************************************** */#include <stdio.h>#include "tpkt.h"/*  *//* returns ptr to header and header len */int  T_UnitDataWrite (tb, uv, hptr, td)register struct tsapblk *tb;register struct udvec *uv;char	              **hptr;struct TSAPdisconnect *td;{    char   *vptr,           *liptr;    int	   n;    /*     *  Format the ISO T-UNITDATA header     */ 	if ((vptr =  malloc ((unsigned) (3 + 7 + 			   (2 + tb -> tb_initiating.ta_selectlen) 			 + (2 + tb -> tb_initiating.ta_selectlen) 			 + 3))) == NULL)	    return DR_CONGEST;	*hptr = vptr;	liptr = vptr++;        *vptr++ = TPDU_UD;	*liptr = 1; 	if (tb -> tb_initiating.ta_selectlen > 0) 	    {	    *vptr++ = VDAT_TSAP_CLI;	    *vptr++ = tb -> tb_initiating.ta_selectlen;	    bcopy (tb -> tb_initiating.ta_selector, 		   vptr, 		   tb -> tb_initiating.ta_selectlen);	    vptr += tb -> tb_initiating.ta_selectlen;	    *liptr += 2 + tb -> tb_initiating.ta_selectlen;	    }	if (tb -> tb_responding.ta_selectlen > 0) 	    {	    *vptr++ = VDAT_TSAP_SRV;	    *vptr++ = tb -> tb_responding.ta_selectlen;	    bcopy (tb -> tb_responding.ta_selector, 		   vptr,                    tb -> tb_responding.ta_selectlen);	    vptr += tb -> tb_responding.ta_selectlen;	    *liptr += 2 + tb -> tb_responding.ta_selectlen;	    }	/*	 *  LI field doesn't include itself so bump up the actual	 */        return ( (*liptr) + 1 );}/*  *//* returns header length */int  T_UnitDataRead (tb, tud, td)register struct tsapblk *tb;register struct TSAPunitdata *tud;struct TSAPdisconnect *td;{    int		code;    char	*vptr;			/* to variable data */    int	   	len, vlen, savelen;    vptr = (char*) tud -> tud_qbuf.qb_data;         /*      *  Get LI.     */    vlen = *vptr;    savelen = vlen;    /*     *  Check for valid unitdata TPDU.     */    vptr++;    if (*vptr++ != TPDU_UD)	return DR_PROTOCOL;    len = 0;    vlen--;    for (; vlen > 0; vptr += len, vlen -= len)	{	int	ilen;	if (vlen < 2)	    return DR_LENGTH;   		code = *vptr++ & 0xff;	len = *vptr++ & 0xff;	if ((vlen -= 2) < len)	    return NOTOK;	switch (code) 	    {	    case VDAT_TSAP_SRV:	        if ((ilen = len) > sizeof tud -> tud_called)		    ilen = sizeof tud -> tud_called;		    bcopy (vptr, 			   &tud -> tud_called, 			   ilen);		 break;	     case VDAT_TSAP_CLI:	         if ((ilen = len) > sizeof tud -> tud_calling)		     ilen = sizeof tud -> tud_calling;		     bcopy (vptr, 			    &tud -> tud_calling,			    ilen);		  break;		case VDAT_OPTIONS:		case VDAT_ALTERNATE:		case VDAT_SIZE:		case VDAT_VRSN:		case VDAT_SECURITY:		case VDAT_CHECKSUM:		case VDAT_ACKTIME:		case VDAT_THROUGHPUT:		case VDAT_ERRORATE:		case VDAT_PRIORITY:		case VDAT_DELAY:		case VDAT_TTR:		    break;		default: 		    return NOTOK;	   }    }    /*     * Update the pointer to the user data.     */    tud -> tud_qbuf.qb_data  = (char*) vptr;   /*    *  LI field doesn't include itself so bump up the actual    *  length in savelen to return.    */    return (savelen + 1);}

⌨️ 快捷键说明

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