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

📄 xtranstli.c

📁 远程桌面连接工具
💻 C
📖 第 1 页 / 共 3 页
字号:
TRANS(TLIOpenCOTSServer)(thistrans, protocol, host, port)Xtransport	*thistrans;char		*protocol;char		*host;char		*port;{    XtransConnInfo	ciptr;    int 		i;        PRMSG(2,"TLIOpenCOTSServer(%s,%s,%s)\n", protocol, host, port );        if( (i=TRANS(TLISelectFamily)(thistrans->TransName)) < 0 )    {	PRMSG(1,	      "TLIOpenCOTSServer: Unable to determine device for %s\n",	      thistrans->TransName, 0,0 );	return NULL;    }        if( (ciptr=TRANS(TLIOpen)(TLItrans2devtab[i].devcotsname)) == NULL )    {	PRMSG(1,	      "TLIOpenCOTSServer: Unable to open device for %s\n",	      thistrans->TransName, 0,0 );	return NULL;    }        /* Set the family type */    ciptr->family = TLItrans2devtab[i].family;    /* Save the TLIFamily for later use in TLIAddrToNetbuf() lookups */        ciptr->index = i;        return ciptr;}#endif /* TRANS_SERVER */#ifdef TRANS_CLIENTstatic XtransConnInfoTRANS(TLIOpenCLTSClient)(thistrans, protocol, host, port)Xtransport	*thistrans;char		*protocol;char		*host;char		*port;{    XtransConnInfo	ciptr;    int 		i;        PRMSG(2,"TLIOpenCLTSClient(%s,%s,%s)\n", protocol, host, port );        if( (i=TRANS(TLISelectFamily)(thistrans->TransName)) < 0 )    {	PRMSG(1,	      "TLIOpenCLTSClient: Unable to determine device for %s\n",	      thistrans->TransName, 0,0 );	return NULL;    }        if( (ciptr=TRANS(TLIOpen)(TLItrans2devtab[i].devcltsname)) == NULL )    {	PRMSG(1,	      "TLIOpenCLTSClient: Unable to open device for %s\n",	      thistrans->TransName, 0,0 );	return NULL;    }        if( TRANS(TLITLIBindLocal)(ciptr->fd,TLItrans2devtab[i].family,port) < 0 )    {	PRMSG(1,	      "TLIOpenCLTSClient: ...TLITLIBindLocal() failed: %d\n",	      errno, 0,0 );	t_close(ciptr->fd);	xfree(ciptr);	return NULL;    }        if( TRANS(TLIGetAddr)(ciptr) < 0 )    {	PRMSG(1,	      "TLIOpenCLTSClient: ...TLIGetPeerAddr() failed: %d\n",	      errno, 0,0 );	t_close(ciptr->fd);	xfree(ciptr);	return NULL;    }        return ciptr;}			#endif /* TRANS_CLIENT */#ifdef TRANS_SERVERstatic XtransConnInfoTRANS(TLIOpenCLTSServer)(thistrans, protocol, host, port)Xtransport	*thistrans;char		*protocol;char		*host;char		*port;{    XtransConnInfo	ciptr;    int 		i;        PRMSG(2,"TLIOpenCLTSServer(%s,%s,%s)\n", protocol, host, port );        if( (i=TRANS(TLISelectFamily)(thistrans->TransName)) < 0 )    {	PRMSG(1,	      "TLIOpenCLTSServer: Unable to determine device for %s\n",	      thistrans->TransName, 0,0 );	return NULL;    }        if( (ciptr=TRANS(TLIOpen)(TLItrans2devtab[i].devcltsname)) == NULL )    {	PRMSG(1,	      "TLIOpenCLTSServer: Unable to open device for %s\n",	      thistrans->TransName, 0,0 );	return NULL;    }        return ciptr;}			#endif /* TRANS_SERVER */#ifdef TRANS_REOPENstatic XtransConnInfoTRANS(TLIReopenCOTSServer)(thistrans, fd, port)Xtransport	*thistrans;int	   	fd;char		*port;{    XtransConnInfo	ciptr;    int			i;        PRMSG(2,"TLIReopenCOTSServer(%d, %s)\n", fd, port, 0 );        if( (i=TRANS(TLISelectFamily)(thistrans->TransName)) < 0 )    {	PRMSG(1,	      "TLIReopenCOTSServer: Unable to determine device for %s\n",	      thistrans->TransName, 0,0 );	return NULL;    }    if( (ciptr=TRANS(TLIReopen)(	TLItrans2devtab[i].devcotsname, fd, port)) == NULL )    {	PRMSG(1,	      "TLIReopenCOTSServer: Unable to open device for %s\n",	      thistrans->TransName, 0,0 );	return NULL;    }        /* Save the TLIFamily for later use in TLIAddrToNetbuf() lookups */        ciptr->index = i;        return ciptr;}static XtransConnInfoTRANS(TLIReopenCLTSServer)(thistrans, fd, port)Xtransport	*thistrans;int	   	fd;char		*port;{    XtransConnInfo	ciptr;    int 		i;        PRMSG(2,"TLIReopenCLTSServer(%d, %s)\n", fd, port, 0 );        if( (i=TRANS(TLISelectFamily)(thistrans->TransName)) < 0 )    {	PRMSG(1,	      "TLIReopenCLTSServer: Unable to determine device for %s\n",	      thistrans->TransName, 0,0 );	return NULL;    }    if( (ciptr=TRANS(TLIReopen)(	TLItrans2devtab[i].devcltsname, fd, port)) == NULL )    {	PRMSG(1,	      "TLIReopenCLTSServer: Unable to open device for %s\n",	      thistrans->TransName, 0,0 );	return NULL;    }        ciptr->index = i;    return ciptr;}			#endif /* TRANS_REOPEN */staticTRANS(TLISetOption)(ciptr, option, arg)XtransConnInfo	ciptr;int		option;int		arg;{    PRMSG(2,"TLISetOption(%d,%d,%d)\n", ciptr->fd, option, arg );        return -1;}#ifdef TRANS_SERVERstaticTRANS(TLICreateListener)(ciptr, req)XtransConnInfo	ciptr;struct t_bind	*req;{    struct t_bind	*ret;        PRMSG(2,"TLICreateListener(%x->%d,%x)\n", ciptr, ciptr->fd, req );        if( (ret=(struct t_bind *)t_alloc(ciptr->fd,T_BIND,T_ALL)) == NULL )    {	PRMSG(1, "TLICreateListener: failed to allocate a t_bind\n",	      0,0,0 );	return TRANS_CREATE_LISTENER_FAILED;    }        if( t_bind(ciptr->fd, req, ret) < 0 )    {	PRMSG(1, "TLICreateListener: t_bind failed\n", 0,0,0 );	t_free((char *)req,T_BIND);	t_free((char *)ret,T_BIND);	return TRANS_CREATE_LISTENER_FAILED;    }        if( memcmp(req->addr.buf,ret->addr.buf,req->addr.len) != 0 )    {	PRMSG(1, "TLICreateListener: unable to bind to %x\n",	      req, 0,0 );	t_free((char *)req,T_BIND);	t_free((char *)ret,T_BIND);	return TRANS_ADDR_IN_USE;    }        /*     * Everything looks good: fill in the XtransConnInfo structure.     */        if( (ciptr->addr=(char *)xalloc(ret->addr.len)) == NULL )    {	PRMSG(1,	      "TLICreateListener: Unable to allocate space for the address\n",	      0,0,0 );	t_free((char *)req,T_BIND);	t_free((char *)ret, T_BIND);	return TRANS_CREATE_LISTENER_FAILED;    }        ciptr->addrlen=ret->addr.len;    memcpy(ciptr->addr,ret->addr.buf,ret->addr.len);        t_free((char *)req,T_BIND);    t_free((char *)ret, T_BIND);        return 0;}staticTRANS(TLIINETCreateListener)(ciptr, port)XtransConnInfo	ciptr;char		*port;{#define PORTBUFSIZE     64      /* what is a real size for this? */    char    portbuf[PORTBUFSIZE];    struct t_bind	*req;    struct sockaddr_in	*sinaddr;        PRMSG(2,"TLIINETCreateListener(%x->%d,%s)\n", ciptr,	ciptr->fd, port ? port : "NULL" );    #ifdef X11_t    /*     * X has a well known port, that is transport dependent. It is easier     * to handle it here, than try and come up with a transport independent     * representation that can be passed in and resolved the usual way.     *     * The port that is passed here is really a string containing the idisplay     * from ConnectDisplay().     */        if (is_numeric (port))    {	short tmpport = (short) atoi (port);		sprintf(portbuf,"%d", X_TCP_PORT+tmpport );    }    else	strncpy(portbuf,port,PORTBUFSIZE);    port=portbuf;#endif        if( (req=(struct t_bind *)t_alloc(ciptr->fd,T_BIND,T_ALL)) == NULL )    {	PRMSG(1,	    "TLIINETCreateListener: failed to allocate a t_bind\n",	    0,0,0 );	return TRANS_CREATE_LISTENER_FAILED;    }    if( port && *port ) {	if(TRANS(TLIAddrToNetbuf)(ciptr->index,HOST_SELF,port,&(req->addr)) < 0)	{	    PRMSG(1,		  "TLIINETCreateListener: can't resolve name:HOST_SELF.%s\n",		  port, 0,0 );	    t_free((char *)req,T_BIND);	    return TRANS_CREATE_LISTENER_FAILED;	}    } else {	sinaddr=(struct sockaddr_in *)req->addr.buf;	sinaddr->sin_family=AF_INET;	sinaddr->sin_port=0;	sinaddr->sin_addr.s_addr=0;    }    /* Set the qlen */    req->qlen=1;        return TRANS(TLICreateListener)(ciptr, req);}staticTRANS(TLITLICreateListener)(ciptr, port)XtransConnInfo	ciptr;char		*port;{    struct t_bind	*req;    struct sockaddr_un	*sunaddr;        PRMSG(2,"TLITLICreateListener(%x->%d,%s)\n", ciptr, ciptr->fd,	port ? port : "NULL");        if( (req=(struct t_bind *)t_alloc(ciptr->fd,T_BIND,0)) == NULL )    {	PRMSG(1,	      "TLITLICreateListener: failed to allocate a t_bind\n",	      0,0,0 );	return TRANS_CREATE_LISTENER_FAILED;    }        if( (sunaddr=(struct sockaddr_un *)	 malloc(sizeof(struct sockaddr_un))) == NULL )    {	PRMSG(1,	      "TLITLICreateListener: failed to allocate a sockaddr_un\n",	      0,0,0 );	t_free((char *)req,T_BIND);	return TRANS_CREATE_LISTENER_FAILED;    }        sunaddr->sun_family=AF_UNIX;    if( port && *port ) {	if( *port == '/' ) { /* A full pathname */	    (void) strcpy(sunaddr->sun_path, port);	} else {	    (void) sprintf(sunaddr->sun_path,"%s%s", TLINODENAME, port );	}    } else {	(void) sprintf(sunaddr->sun_path,"%s%d", TLINODENAME, getpid());    }        req->addr.buf=(char *)sunaddr;    req->addr.len=sizeof(*sunaddr);    req->addr.maxlen=sizeof(*sunaddr);        /* Set the qlen */        req->qlen=1;        return TRANS(TLICreateListener)(ciptr, req);}static XtransConnInfoTRANS(TLIAccept)(ciptr, status)XtransConnInfo	ciptr;int		*status;{    struct t_call	*call;    XtransConnInfo	newciptr;    int	i;        PRMSG(2,"TLIAccept(%x->%d)\n", ciptr, ciptr->fd, 0 );        if( (call=(struct t_call *)t_alloc(ciptr->fd,T_CALL,T_ALL)) == NULL )    {	PRMSG(1, "TLIAccept() failed to allocate a t_call\n", 0,0,0 );	*status = TRANS_ACCEPT_BAD_MALLOC;	return NULL;    }        if( t_listen(ciptr->fd,call) < 0 )    {	extern char *t_errlist[];	extern int t_errno;	PRMSG(1, "TLIAccept() t_listen() failed\n", 0,0,0 );	PRMSG(1, "TLIAccept: %s\n", t_errlist[t_errno], 0,0 );	t_free((char *)call,T_CALL);	*status = TRANS_ACCEPT_MISC_ERROR;	return NULL;    }        /*     * Now we need to set up the new endpoint for the incoming connection.     */        i=ciptr->index; /* Makes the next line more readable */        if( (newciptr=TRANS(TLIOpen)(TLItrans2devtab[i].devcotsname)) == NULL )    {	PRMSG(1, "TLIAccept() failed to open a new endpoint\n", 0,0,0 );	t_free((char *)call,T_CALL);	*status = TRANS_ACCEPT_MISC_ERROR;	return NULL;    }        if( TRANS(TLITLIBindLocal)(newciptr->fd,TLItrans2devtab[i].family,"") < 0 )    {	PRMSG(1,	      "TLIAccept: TRANS(TLITLIBindLocal)() failed: %d\n",	      errno, 0,0 );	t_free((char *)call,T_CALL);	t_close(newciptr->fd);	xfree(newciptr);	*status = TRANS_ACCEPT_MISC_ERROR;	return NULL;    }            if( t_accept(ciptr->fd,newciptr->fd,call) < 0 )    {	extern char *t_errlist[];	extern int t_errno;	PRMSG(1, "TLIAccept() t_accept() failed\n", 0,0,0 );	PRMSG(1, "TLIAccept: %s\n", t_errlist[t_errno], 0,0 );	t_free((char *)call,T_CALL);	t_close(newciptr->fd);	xfree(newciptr->addr);	xfree(newciptr);	*status = TRANS_ACCEPT_FAILED;	return NULL;    }        t_free((char *)call,T_CALL);        if( TRANS(TLIGetAddr)(newciptr) < 0 )    {

⌨️ 快捷键说明

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