📄 xtranslcl.c
字号:
0,0,0); break; case XTRANS_OPEN_COTS_SERVER: ciptr->fd=LOCALtrans2devtab[i].devcotsopenserver(ciptr,port); break; case XTRANS_OPEN_CLTS_SERVER: ciptr->fd=LOCALtrans2devtab[i].devcltsopenserver(ciptr,port); break; default: PRMSG(1,"LocalOpenServer: Unknown Open type %d\n", type ,0,0); } if( ciptr->fd >= 0 ) { ciptr->priv=(char *)&LOCALtrans2devtab[i]; ciptr->index=i; ciptr->flags=1; return ciptr; } } xfree(ciptr); return NULL;}#endif /* TRANS_SERVER */#ifdef TRANS_REOPENstatic XtransConnInfoTRANS(LocalReopenServer)(type, index, fd, port)int type;int index;int fd;char *port;{ XtransConnInfo ciptr; int stat; PRMSG(2,"LocalReopenServer(%d,%d,%d)\n", type, index, fd); if( (ciptr=(XtransConnInfo)xcalloc(1,sizeof(struct _XtransConnInfo))) == NULL ) { PRMSG(1,"LocalReopenServer: calloc(1,%d) failed\n", sizeof(struct _XtransConnInfo),0,0 ); return NULL; } ciptr->fd = fd; switch( type ) { case XTRANS_OPEN_COTS_SERVER: stat = LOCALtrans2devtab[index].devcotsreopenserver(ciptr,fd,port); break; case XTRANS_OPEN_CLTS_SERVER: stat = LOCALtrans2devtab[index].devcltsreopenserver(ciptr,fd,port); break; default: PRMSG(1,"LocalReopenServer: Unknown Open type %d\n", type ,0,0); } if( stat > 0 ) { ciptr->priv=(char *)&LOCALtrans2devtab[index]; ciptr->index=index; ciptr->flags=1; return ciptr; } xfree(ciptr); return NULL;}#endif /* TRANS_REOPEN *//* * This is the Local implementation of the X Transport service layer */#ifdef TRANS_CLIENTstatic XtransConnInfoTRANS(LocalOpenCOTSClient)(thistrans, protocol, host, port)Xtransport *thistrans;char *protocol;char *host;char *port;{ PRMSG(2,"LocalOpenCOTSClient(%s,%s,%s)\n",protocol,host,port); return TRANS(LocalOpenClient)(XTRANS_OPEN_COTS_CLIENT, protocol, host, port);}#endif /* TRANS_CLIENT */#ifdef TRANS_SERVERstatic XtransConnInfoTRANS(LocalOpenCOTSServer)(thistrans, protocol, host, port)Xtransport *thistrans;char *protocol;char *host;char *port;{ char *typetocheck = NULL; int found = 0; char typebuf[TYPEBUFSIZE]; PRMSG(2,"LocalOpenCOTSServer(%s,%s,%s)\n",protocol,host,port); /* Check if this local type is in the XLOCAL list */ TRANS(LocalInitTransports)("local"); typetocheck = workingXLOCAL; while (typetocheck && !found) { int j; workingXLOCAL = strchr(workingXLOCAL, ':'); if (workingXLOCAL && *workingXLOCAL) *workingXLOCAL++ = '\0'; strncpy(typebuf, typetocheck, TYPEBUFSIZE); for (j = 0; j < TYPEBUFSIZE; j++) if (isupper(typebuf[j])) typebuf[j] = tolower(typebuf[j]); if (!strcmp(thistrans->TransName, typebuf)) found = 1; typetocheck = workingXLOCAL; } TRANS(LocalEndTransports)(); if (!found) { PRMSG(3,"LocalOpenCOTSServer: disabling %s\n",thistrans->TransName,0,0); thistrans->flags |= TRANS_DISABLED; return NULL; } return TRANS(LocalOpenServer)(XTRANS_OPEN_COTS_SERVER, protocol, host, port);}#endif /* TRANS_SERVER */#ifdef TRANS_CLIENTstatic XtransConnInfoTRANS(LocalOpenCLTSClient)(thistrans, protocol, host, port)Xtransport *thistrans;char *protocol;char *host;char *port;{ PRMSG(2,"LocalOpenCLTSClient(%s,%s,%s)\n",protocol,host,port); return TRANS(LocalOpenClient)(XTRANS_OPEN_CLTS_CLIENT, protocol, host, port);}#endif /* TRANS_CLIENT */#ifdef TRANS_SERVERstatic XtransConnInfoTRANS(LocalOpenCLTSServer)(thistrans, protocol, host, port)Xtransport *thistrans;char *protocol;char *host;char *port;{ PRMSG(2,"LocalOpenCLTSServer(%s,%s,%s)\n",protocol,host,port); return TRANS(LocalOpenServer)(XTRANS_OPEN_CLTS_SERVER, protocol, host, port);}#endif /* TRANS_SERVER */#ifdef TRANS_REOPENstatic XtransConnInfoTRANS(LocalReopenCOTSServer)(thistrans, fd, port)Xtransport *thistrans;int fd;char *port;{ int index; PRMSG(2,"LocalReopenCOTSServer(%d,%s)\n", fd, port, 0); for(index=1;index<NUMTRANSPORTS;index++) { if( strcmp(thistrans->TransName, LOCALtrans2devtab[index].transname) == 0 ) break; } if (index >= NUMTRANSPORTS) { return (NULL); } return TRANS(LocalReopenServer)(XTRANS_OPEN_COTS_SERVER, index, fd, port);}static XtransConnInfoTRANS(LocalReopenCLTSServer)(thistrans, fd, port)Xtransport *thistrans;int fd;char *port;{ int index; PRMSG(2,"LocalReopenCLTSServer(%d,%s)\n", fd, port, 0); for(index=1;index<NUMTRANSPORTS;index++) { if( strcmp(thistrans->TransName, LOCALtrans2devtab[index].transname) == 0 ) break; } if (index >= NUMTRANSPORTS) { return (NULL); } return TRANS(LocalReopenServer)(XTRANS_OPEN_CLTS_SERVER, index, fd, port);}#endif /* TRANS_REOPEN */staticTRANS(LocalSetOption)(ciptr, option, arg)XtransConnInfo ciptr;int option;int arg;{ PRMSG(2,"LocalSetOption(%d,%d,%d)\n",ciptr->fd,option,arg); return -1;}#ifdef TRANS_SERVERstaticTRANS(LocalCreateListener)(ciptr, port)XtransConnInfo ciptr;char *port;{ PRMSG(2,"LocalCreateListener(%x->%d,%s)\n",ciptr,ciptr->fd,port); return 0;}static XtransConnInfoTRANS(LocalAccept)(ciptr, status)XtransConnInfo ciptr;int *status;{ XtransConnInfo newciptr; LOCALtrans2dev *transptr; PRMSG(2,"LocalAccept(%x->%d)\n", ciptr, ciptr->fd,0); transptr=(LOCALtrans2dev *)ciptr->priv; if( (newciptr=(XtransConnInfo)xcalloc(1,sizeof(struct _XtransConnInfo)))==NULL ) { PRMSG(1,"LocalAccept: calloc(1,%d) failed\n", sizeof(struct _XtransConnInfo),0,0 ); *status = TRANS_ACCEPT_BAD_MALLOC; return NULL; } newciptr->fd=transptr->devaccept(ciptr,newciptr,status); if( newciptr->fd < 0 ) { xfree(newciptr); return NULL; } newciptr->priv=(char *)transptr; newciptr->index = ciptr->index; *status = 0; return newciptr;}#endif /* TRANS_SERVER */#ifdef TRANS_CLIENTstaticTRANS(LocalConnect)(ciptr, host, port)XtransConnInfo ciptr;char *host;char *port;{ PRMSG(2,"LocalConnect(%x->%d,%s)\n", ciptr, ciptr->fd, port); return 0;}#endif /* TRANS_CLIENT */static intTRANS(LocalBytesReadable)(ciptr, pend )XtransConnInfo ciptr;BytesReadable_t *pend;{ PRMSG(2,"LocalBytesReadable(%x->%d,%x)\n", ciptr, ciptr->fd, pend);#if defined(ISC) || defined(SCO) return ioctl(ciptr->fd, I_NREAD, (char *)pend);#else return ioctl(ciptr->fd, FIONREAD, (char *)pend);#endif}static intTRANS(LocalRead)(ciptr, buf, size)XtransConnInfo ciptr;char *buf;int size;{ PRMSG(2,"LocalRead(%d,%x,%d)\n", ciptr->fd, buf, size ); return read(ciptr->fd,buf,size);}static intTRANS(LocalWrite)(ciptr, buf, size)XtransConnInfo ciptr;char *buf;int size;{ PRMSG(2,"LocalWrite(%d,%x,%d)\n", ciptr->fd, buf, size ); return write(ciptr->fd,buf,size);}static intTRANS(LocalReadv)(ciptr, buf, size)XtransConnInfo ciptr;struct iovec *buf;int size;{ PRMSG(2,"LocalReadv(%d,%x,%d)\n", ciptr->fd, buf, size ); return READV(ciptr,buf,size);}static intTRANS(LocalWritev)(ciptr, buf, size)XtransConnInfo ciptr;struct iovec *buf;int size;{ PRMSG(2,"LocalWritev(%d,%x,%d)\n", ciptr->fd, buf, size ); return WRITEV(ciptr,buf,size);}static intTRANS(LocalDisconnect)(ciptr)XtransConnInfo ciptr;{ PRMSG(2,"LocalDisconnect(%x->%d)\n", ciptr, ciptr->fd, 0); return 0;}static intTRANS(LocalClose)(ciptr)XtransConnInfo ciptr;{ struct sockaddr_un *sockname=(struct sockaddr_un *) ciptr->addr; char path[200]; /* > sizeof sun_path +1 */ int ret; PRMSG(2,"LocalClose(%x->%d)\n", ciptr, ciptr->fd ,0); ret=close(ciptr->fd); if(ciptr->flags && sockname && sockname->sun_family == AF_UNIX && sockname->sun_path[0] ) { strncpy(path,sockname->sun_path, ciptr->addrlen-sizeof(sockname->sun_family)); unlink(path); } return ret;}static intTRANS(LocalCloseForCloning)(ciptr)XtransConnInfo ciptr;{ int ret; PRMSG(2,"LocalCloseForCloning(%x->%d)\n", ciptr, ciptr->fd ,0); /* Don't unlink path */ ret=close(ciptr->fd); return ret;}/* * MakeAllCOTSServerListeners() will go through the entire Xtransports[] * array defined in Xtrans.c and try to OpenCOTSServer() for each entry. * We will add duplicate entries to that table so that the OpenCOTSServer() * function will get called once for each type of local transport. * * The TransName is in lowercase, so it will never match during a normal * call to SelectTransport() in Xtrans.c. */Xtransport TRANS(LocalFuncs) = { /* Local Interface */ "local", TRANS_ALIAS | TRANS_LOCAL,#ifdef TRANS_CLIENT TRANS(LocalOpenCOTSClient),#endif /* TRANS_CLIENT */#ifdef TRANS_SERVER TRANS(LocalOpenCOTSServer),#endif /* TRANS_SERVER */#ifdef TRANS_CLIENT TRANS(LocalOpenCLTSClient),#endif /* TRANS_CLIENT */#ifdef TRANS_SERVER TRANS(LocalOpenCLTSServer),#endif /* TRANS_SERVER */#ifdef TRANS_REOPEN TRANS(LocalReopenCOTSServer), TRANS(LocalReopenCLTSServer),#endif TRANS(LocalSetOption),#ifdef TRANS_SERVER TRANS(LocalCreateListener), NULL, /* ResetListener */ TRANS(LocalAccept),#endif /* TRANS_SERVER */#ifdef TRANS_CLIENT TRANS(LocalConnect),#endif /* TRANS_CLIENT */ TRANS(LocalBytesReadable), TRANS(LocalRead), TRANS(LocalWrite), TRANS(LocalReadv), TRANS(LocalWritev), TRANS(LocalDisconnect), TRANS(LocalClose), TRANS(LocalCloseForCloning),};Xtransport TRANS(PTSFuncs) = { /* Local Interface */ "pts", TRANS_LOCAL,#ifdef TRANS_CLIENT TRANS(LocalOpenCOTSClient),#endif /* TRANS_CLIENT */#ifdef TRANS_SERVER TRANS(LocalOpenCOTSServer),#endif /* TRANS_SERVER */#ifdef TRANS_CLIENT TRANS(LocalOpenCLTSClient),#endif /* TRANS_CLIENT */#ifdef TRANS_SERVER TRANS(LocalOpenCLTSServer),#endif /* TRANS_SERVER */#ifdef TRANS_REOPEN TRANS(LocalReopenCOTSServer), TRANS(LocalReopenCLTSServer),#endif TRANS(LocalSetOption),#ifdef TRANS_SERVER TRANS(LocalCreateListener), NULL, /* ResetListener */ TRANS(LocalAccept),#endif /* TRANS_SERVER */#ifdef TRANS_CLIENT TRANS(LocalConnect),#endif /* TRANS_CLIENT */ TRANS(LocalBytesReadable), TRANS(LocalRead), TRANS(LocalWrite), TRANS(LocalReadv), TRANS(LocalWritev), TRANS(LocalDisconnect), TRANS(LocalClose), TRANS(LocalCloseForCloning),};Xtransport TRANS(NAMEDFuncs) = { /* Local Interface */ "named", TRANS_LOCAL,#ifdef TRANS_CLIENT TRANS(LocalOpenCOTSClient),#endif /* TRANS_CLIENT */#ifdef TRANS_SERVER TRANS(LocalOpenCOTSServer),#endif /* TRANS_SERVER */#ifdef TRANS_CLIENT TRANS(LocalOpenCLTSClient),#endif /* TRANS_CLIENT */#ifdef TRANS_SERVER TRANS(LocalOpenCLTSServer),#endif /* TRANS_SERVER */#ifdef TRANS_REOPEN TRANS(LocalReopenCOTSServer), TRANS(LocalReopenCLTSServer),#endif TRANS(LocalSetOption),#ifdef TRANS_SERVER TRANS(LocalCreateListener), NULL, /* ResetListener */ TRANS(LocalAccept),#endif /* TRANS_SERVER */#ifdef TRANS_CLIENT TRANS(LocalConnect),#endif /* TRANS_CLIENT */ TRANS(LocalBytesReadable), TRANS(LocalRead), TRANS(LocalWrite), TRANS(LocalReadv), TRANS(LocalWritev), TRANS(LocalDisconnect), TRANS(LocalClose), TRANS(LocalCloseForCloning),};Xtransport TRANS(ISCFuncs) = { /* Local Interface */ "isc", TRANS_LOCAL,#ifdef TRANS_CLIENT TRANS(LocalOpenCOTSClient),#endif /* TRANS_CLIENT */#ifdef TRANS_SERVER TRANS(LocalOpenCOTSServer),#endif /* TRANS_SERVER */#ifdef TRANS_CLIENT TRANS(LocalOpenCLTSClient),#endif /* TRANS_CLIENT */#ifdef TRANS_SERVER TRANS(LocalOpenCLTSServer),#endif /* TRANS_SERVER */#ifdef TRANS_REOPEN TRANS(LocalReopenCOTSServer), TRANS(LocalReopenCLTSServer),#endif TRANS(LocalSetOption),#ifdef TRANS_SERVER TRANS(LocalCreateListener), NULL, /* ResetListener */ TRANS(LocalAccept),#endif /* TRANS_SERVER */#ifdef TRANS_CLIENT TRANS(LocalConnect),#endif /* TRANS_CLIENT */ TRANS(LocalBytesReadable), TRANS(LocalRead), TRANS(LocalWrite), TRANS(LocalReadv), TRANS(LocalWritev), TRANS(LocalDisconnect), TRANS(LocalClose), TRANS(LocalCloseForCloning),};Xtransport TRANS(SCOFuncs) = { /* Local Interface */ "sco", TRANS_LOCAL,#ifdef TRANS_CLIENT TRANS(LocalOpenCOTSClient),#endif /* TRANS_CLIENT */#ifdef TRANS_SERVER TRANS(LocalOpenCOTSServer),#endif /* TRANS_SERVER */#ifdef TRANS_CLIENT TRANS(LocalOpenCLTSClient),#endif /* TRANS_CLIENT */#ifdef TRANS_SERVER TRANS(LocalOpenCLTSServer),#endif /* TRANS_SERVER */#ifdef TRANS_REOPEN TRANS(LocalReopenCOTSServer), TRANS(LocalReopenCLTSServer),#endif TRANS(LocalSetOption),#ifdef TRANS_SERVER TRANS(LocalCreateListener), NULL, /* ResetListener */ TRANS(LocalAccept),#endif /* TRANS_SERVER */#ifdef TRANS_CLIENT TRANS(LocalConnect),#endif /* TRANS_CLIENT */ TRANS(LocalBytesReadable), TRANS(LocalRead), TRANS(LocalWrite), TRANS(LocalReadv), TRANS(LocalWritev), TRANS(LocalDisconnect), TRANS(LocalClose), TRANS(LocalCloseForCloning),};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -