Xtrans.h revision fe567363
173143b9aSmrg/* 273143b9aSmrg 373143b9aSmrgCopyright 1993, 1994, 1998 The Open Group 473143b9aSmrg 573143b9aSmrgPermission to use, copy, modify, distribute, and sell this software and its 673143b9aSmrgdocumentation for any purpose is hereby granted without fee, provided that 773143b9aSmrgthe above copyright notice appear in all copies and that both that 873143b9aSmrgcopyright notice and this permission notice appear in supporting 973143b9aSmrgdocumentation. 1073143b9aSmrg 1173143b9aSmrgThe above copyright notice and this permission notice shall be included 1273143b9aSmrgin all copies or substantial portions of the Software. 1373143b9aSmrg 1473143b9aSmrgTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 1573143b9aSmrgOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 1673143b9aSmrgMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 1773143b9aSmrgIN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR 1873143b9aSmrgOTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 1973143b9aSmrgARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 2073143b9aSmrgOTHER DEALINGS IN THE SOFTWARE. 2173143b9aSmrg 2273143b9aSmrgExcept as contained in this notice, the name of The Open Group shall 2373143b9aSmrgnot be used in advertising or otherwise to promote the sale, use or 2473143b9aSmrgother dealings in this Software without prior written authorization 2573143b9aSmrgfrom The Open Group. 2673143b9aSmrg 2773143b9aSmrg * Copyright 1993, 1994 NCR Corporation - Dayton, Ohio, USA 2873143b9aSmrg * 2973143b9aSmrg * All Rights Reserved 3073143b9aSmrg * 3173143b9aSmrg * Permission to use, copy, modify, and distribute this software and its 3273143b9aSmrg * documentation for any purpose and without fee is hereby granted, provided 3373143b9aSmrg * that the above copyright notice appear in all copies and that both that 3473143b9aSmrg * copyright notice and this permission notice appear in supporting 3573143b9aSmrg * documentation, and that the name NCR not be used in advertising 3673143b9aSmrg * or publicity pertaining to distribution of the software without specific, 3773143b9aSmrg * written prior permission. NCR makes no representations about the 3873143b9aSmrg * suitability of this software for any purpose. It is provided "as is" 3973143b9aSmrg * without express or implied warranty. 4073143b9aSmrg * 4173143b9aSmrg * NCR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, 4273143b9aSmrg * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN 4373143b9aSmrg * NO EVENT SHALL NCR BE LIABLE FOR ANY SPECIAL, INDIRECT OR 4473143b9aSmrg * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS 4573143b9aSmrg * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, 4673143b9aSmrg * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN 4773143b9aSmrg * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 4873143b9aSmrg */ 4973143b9aSmrg 5073143b9aSmrg#ifndef _XTRANS_H_ 5173143b9aSmrg#define _XTRANS_H_ 5273143b9aSmrg 5373143b9aSmrg#include <X11/Xfuncproto.h> 5473143b9aSmrg#include <X11/Xos.h> 5573143b9aSmrg 5673143b9aSmrg#ifndef WIN32 5773143b9aSmrg#include <sys/socket.h> 5873143b9aSmrg#endif 5973143b9aSmrg 60fe567363Smrg#ifdef __clang__ 61fe567363Smrg/* Not all clients make use of all provided statics */ 62fe567363Smrg#pragma clang diagnostic push 63fe567363Smrg#pragma clang diagnostic ignored "-Wunused-function" 64fe567363Smrg#endif 6573143b9aSmrg 6673143b9aSmrg/* 6773143b9aSmrg * Set the functions names according to where this code is being compiled. 6873143b9aSmrg */ 6973143b9aSmrg 7073143b9aSmrg#ifdef X11_t 7173143b9aSmrg#define TRANS(func) _X11Trans##func 7273143b9aSmrg#ifdef XTRANSDEBUG 73fe567363Smrgstatic const char *__xtransname = "_X11Trans"; 7473143b9aSmrg#endif 7573143b9aSmrg#endif /* X11_t */ 7673143b9aSmrg 7773143b9aSmrg#ifdef XSERV_t 7873143b9aSmrg#define TRANS(func) _XSERVTrans##func 7973143b9aSmrg#ifdef XTRANSDEBUG 80fe567363Smrgstatic const char *__xtransname = "_XSERVTrans"; 8173143b9aSmrg#endif 8273143b9aSmrg#define X11_t 8373143b9aSmrg#endif /* XSERV_t */ 8473143b9aSmrg 8573143b9aSmrg#ifdef XIM_t 8673143b9aSmrg#define TRANS(func) _XimXTrans##func 8773143b9aSmrg#ifdef XTRANSDEBUG 88fe567363Smrgstatic const char *__xtransname = "_XimTrans"; 8973143b9aSmrg#endif 9073143b9aSmrg#endif /* XIM_t */ 9173143b9aSmrg 9273143b9aSmrg#ifdef FS_t 9373143b9aSmrg#define TRANS(func) _FSTrans##func 9473143b9aSmrg#ifdef XTRANSDEBUG 95fe567363Smrgstatic const char *__xtransname = "_FSTrans"; 9673143b9aSmrg#endif 9773143b9aSmrg#endif /* FS_t */ 9873143b9aSmrg 9973143b9aSmrg#ifdef FONT_t 10073143b9aSmrg#define TRANS(func) _FontTrans##func 10173143b9aSmrg#ifdef XTRANSDEBUG 102fe567363Smrgstatic const char *__xtransname = "_FontTrans"; 10373143b9aSmrg#endif 10473143b9aSmrg#endif /* FONT_t */ 10573143b9aSmrg 10673143b9aSmrg#ifdef ICE_t 10773143b9aSmrg#define TRANS(func) _IceTrans##func 10873143b9aSmrg#ifdef XTRANSDEBUG 109fe567363Smrgstatic const char *__xtransname = "_IceTrans"; 11073143b9aSmrg#endif 11173143b9aSmrg#endif /* ICE_t */ 11273143b9aSmrg 11373143b9aSmrg#ifdef TEST_t 11473143b9aSmrg#define TRANS(func) _TESTTrans##func 11573143b9aSmrg#ifdef XTRANSDEBUG 116fe567363Smrgstatic const char *__xtransname = "_TESTTrans"; 11773143b9aSmrg#endif 11873143b9aSmrg#endif /* TEST_t */ 11973143b9aSmrg 12073143b9aSmrg#ifdef LBXPROXY_t 12173143b9aSmrg#define TRANS(func) _LBXPROXYTrans##func 12273143b9aSmrg#define X11_t /* The server defines this - so should the LBX proxy */ 12373143b9aSmrg#ifdef XTRANSDEBUG 124fe567363Smrgstatic const char *__xtransname = "_LBXPROXYTrans"; 12573143b9aSmrg#endif 12673143b9aSmrg#endif /* LBXPROXY_t */ 12773143b9aSmrg 12873143b9aSmrg#if !defined(TRANS) 12973143b9aSmrg#define TRANS(func) _XTrans##func 13073143b9aSmrg#ifdef XTRANSDEBUG 131fe567363Smrgstatic const char *__xtransname = "_XTrans"; 13273143b9aSmrg#endif 13373143b9aSmrg#endif /* !TRANS */ 13473143b9aSmrg 135fe567363Smrg#ifdef __clang__ 136fe567363Smrg#pragma clang diagnostic pop 137fe567363Smrg#endif 13873143b9aSmrg 13973143b9aSmrg/* 14073143b9aSmrg * Create a single address structure that can be used wherever 14173143b9aSmrg * an address structure is needed. struct sockaddr is not big enough 14273143b9aSmrg * to hold a sockadd_un, so we create this definition to have a single 14373143b9aSmrg * structure that is big enough for all the structures we might need. 14473143b9aSmrg * 14573143b9aSmrg * This structure needs to be independent of the socket/TLI interface used. 14673143b9aSmrg */ 14773143b9aSmrg 14873143b9aSmrg#if defined(IPv6) && defined(AF_INET6) 14973143b9aSmrgtypedef struct sockaddr_storage Xtransaddr; 15073143b9aSmrg#else 15173143b9aSmrg#define XTRANS_MAX_ADDR_LEN 128 /* large enough to hold sun_path */ 15273143b9aSmrg 15373143b9aSmrgtypedef struct { 15473143b9aSmrg unsigned char addr[XTRANS_MAX_ADDR_LEN]; 15573143b9aSmrg} Xtransaddr; 15673143b9aSmrg#endif 15773143b9aSmrg 15873143b9aSmrg#ifdef LONG64 15973143b9aSmrgtypedef int BytesReadable_t; 16073143b9aSmrg#else 16173143b9aSmrgtypedef long BytesReadable_t; 16273143b9aSmrg#endif 16373143b9aSmrg 16473143b9aSmrg 165fe567363Smrg#if defined(WIN32) || defined(USG) 16673143b9aSmrg 16773143b9aSmrg/* 16873143b9aSmrg * TRANS(Readv) and TRANS(Writev) use struct iovec, normally found 16973143b9aSmrg * in Berkeley systems in <sys/uio.h>. See the readv(2) and writev(2) 17073143b9aSmrg * manual pages for details. 17173143b9aSmrg */ 17273143b9aSmrg 17373143b9aSmrgstruct iovec { 17473143b9aSmrg caddr_t iov_base; 17573143b9aSmrg int iov_len; 17673143b9aSmrg}; 17773143b9aSmrg 17873143b9aSmrg#else 17973143b9aSmrg#include <sys/uio.h> 18073143b9aSmrg#endif 18173143b9aSmrg 18273143b9aSmrgtypedef struct _XtransConnInfo *XtransConnInfo; 18373143b9aSmrg 18473143b9aSmrg 18573143b9aSmrg/* 18673143b9aSmrg * Transport Option definitions 18773143b9aSmrg */ 18873143b9aSmrg 18973143b9aSmrg#define TRANS_NONBLOCKING 1 19073143b9aSmrg#define TRANS_CLOSEONEXEC 2 19173143b9aSmrg 19273143b9aSmrg 19373143b9aSmrg/* 19473143b9aSmrg * Return values of Connect (0 is success) 19573143b9aSmrg */ 19673143b9aSmrg 19773143b9aSmrg#define TRANS_CONNECT_FAILED -1 19873143b9aSmrg#define TRANS_TRY_CONNECT_AGAIN -2 19973143b9aSmrg#define TRANS_IN_PROGRESS -3 20073143b9aSmrg 20173143b9aSmrg 20273143b9aSmrg/* 20373143b9aSmrg * Return values of CreateListener (0 is success) 20473143b9aSmrg */ 20573143b9aSmrg 20673143b9aSmrg#define TRANS_CREATE_LISTENER_FAILED -1 20773143b9aSmrg#define TRANS_ADDR_IN_USE -2 20873143b9aSmrg 20973143b9aSmrg 21073143b9aSmrg/* 21173143b9aSmrg * Return values of Accept (0 is success) 21273143b9aSmrg */ 21373143b9aSmrg 21473143b9aSmrg#define TRANS_ACCEPT_BAD_MALLOC -1 21573143b9aSmrg#define TRANS_ACCEPT_FAILED -2 21673143b9aSmrg#define TRANS_ACCEPT_MISC_ERROR -3 21773143b9aSmrg 21873143b9aSmrg 21973143b9aSmrg/* 22073143b9aSmrg * ResetListener return values 22173143b9aSmrg */ 22273143b9aSmrg 22373143b9aSmrg#define TRANS_RESET_NOOP 1 22473143b9aSmrg#define TRANS_RESET_NEW_FD 2 22573143b9aSmrg#define TRANS_RESET_FAILURE 3 22673143b9aSmrg 22773143b9aSmrg 22873143b9aSmrg/* 22973143b9aSmrg * Function prototypes for the exposed interface 23073143b9aSmrg */ 23173143b9aSmrg 23273143b9aSmrgvoid TRANS(FreeConnInfo) ( 23373143b9aSmrg XtransConnInfo /* ciptr */ 23473143b9aSmrg); 23573143b9aSmrg 23673143b9aSmrg#ifdef TRANS_CLIENT 23773143b9aSmrg 23873143b9aSmrgXtransConnInfo TRANS(OpenCOTSClient)( 23973143b9aSmrg char * /* address */ 24073143b9aSmrg); 24173143b9aSmrg 24273143b9aSmrg#endif /* TRANS_CLIENT */ 24373143b9aSmrg 24473143b9aSmrg#ifdef TRANS_SERVER 24573143b9aSmrg 24673143b9aSmrgXtransConnInfo TRANS(OpenCOTSServer)( 24773143b9aSmrg char * /* address */ 24873143b9aSmrg); 24973143b9aSmrg 25073143b9aSmrg#endif /* TRANS_SERVER */ 25173143b9aSmrg 25273143b9aSmrg#ifdef TRANS_CLIENT 25373143b9aSmrg 25473143b9aSmrgXtransConnInfo TRANS(OpenCLTSClient)( 25573143b9aSmrg char * /* address */ 25673143b9aSmrg); 25773143b9aSmrg 25873143b9aSmrg#endif /* TRANS_CLIENT */ 25973143b9aSmrg 26073143b9aSmrg#ifdef TRANS_SERVER 26173143b9aSmrg 26273143b9aSmrgXtransConnInfo TRANS(OpenCLTSServer)( 26373143b9aSmrg char * /* address */ 26473143b9aSmrg); 26573143b9aSmrg 26673143b9aSmrg#endif /* TRANS_SERVER */ 26773143b9aSmrg 26873143b9aSmrg#ifdef TRANS_REOPEN 26973143b9aSmrg 27073143b9aSmrgXtransConnInfo TRANS(ReopenCOTSServer)( 27173143b9aSmrg int, /* trans_id */ 27273143b9aSmrg int, /* fd */ 27373143b9aSmrg char * /* port */ 27473143b9aSmrg); 27573143b9aSmrg 27673143b9aSmrgXtransConnInfo TRANS(ReopenCLTSServer)( 27773143b9aSmrg int, /* trans_id */ 27873143b9aSmrg int, /* fd */ 27973143b9aSmrg char * /* port */ 28073143b9aSmrg); 28173143b9aSmrg 28273143b9aSmrgint TRANS(GetReopenInfo)( 28373143b9aSmrg XtransConnInfo, /* ciptr */ 28473143b9aSmrg int *, /* trans_id */ 28573143b9aSmrg int *, /* fd */ 28673143b9aSmrg char ** /* port */ 28773143b9aSmrg); 28873143b9aSmrg 28973143b9aSmrg#endif /* TRANS_REOPEN */ 29073143b9aSmrg 29173143b9aSmrg 29273143b9aSmrgint TRANS(SetOption)( 29373143b9aSmrg XtransConnInfo, /* ciptr */ 29473143b9aSmrg int, /* option */ 29573143b9aSmrg int /* arg */ 29673143b9aSmrg); 29773143b9aSmrg 29873143b9aSmrg#ifdef TRANS_SERVER 29973143b9aSmrg 30073143b9aSmrgint TRANS(CreateListener)( 30173143b9aSmrg XtransConnInfo, /* ciptr */ 30273143b9aSmrg char *, /* port */ 30373143b9aSmrg unsigned int /* flags */ 30473143b9aSmrg); 30573143b9aSmrg 30673143b9aSmrgint TRANS(NoListen) ( 307fe567363Smrg const char* /* protocol*/ 30873143b9aSmrg); 30973143b9aSmrg 31073143b9aSmrgint TRANS(ResetListener)( 31173143b9aSmrg XtransConnInfo /* ciptr */ 31273143b9aSmrg); 31373143b9aSmrg 31473143b9aSmrgXtransConnInfo TRANS(Accept)( 31573143b9aSmrg XtransConnInfo, /* ciptr */ 31673143b9aSmrg int * /* status */ 31773143b9aSmrg); 31873143b9aSmrg 31973143b9aSmrg#endif /* TRANS_SERVER */ 32073143b9aSmrg 32173143b9aSmrg#ifdef TRANS_CLIENT 32273143b9aSmrg 32373143b9aSmrgint TRANS(Connect)( 32473143b9aSmrg XtransConnInfo, /* ciptr */ 32573143b9aSmrg char * /* address */ 32673143b9aSmrg); 32773143b9aSmrg 32873143b9aSmrg#endif /* TRANS_CLIENT */ 32973143b9aSmrg 33073143b9aSmrgint TRANS(BytesReadable)( 33173143b9aSmrg XtransConnInfo, /* ciptr */ 33273143b9aSmrg BytesReadable_t * /* pend */ 33373143b9aSmrg); 33473143b9aSmrg 33573143b9aSmrgint TRANS(Read)( 33673143b9aSmrg XtransConnInfo, /* ciptr */ 33773143b9aSmrg char *, /* buf */ 33873143b9aSmrg int /* size */ 33973143b9aSmrg); 34073143b9aSmrg 34173143b9aSmrgint TRANS(Write)( 34273143b9aSmrg XtransConnInfo, /* ciptr */ 34373143b9aSmrg char *, /* buf */ 34473143b9aSmrg int /* size */ 34573143b9aSmrg); 34673143b9aSmrg 34773143b9aSmrgint TRANS(Readv)( 34873143b9aSmrg XtransConnInfo, /* ciptr */ 34973143b9aSmrg struct iovec *, /* buf */ 35073143b9aSmrg int /* size */ 35173143b9aSmrg); 35273143b9aSmrg 35373143b9aSmrgint TRANS(Writev)( 35473143b9aSmrg XtransConnInfo, /* ciptr */ 35573143b9aSmrg struct iovec *, /* buf */ 35673143b9aSmrg int /* size */ 35773143b9aSmrg); 35873143b9aSmrg 35973143b9aSmrgint TRANS(Disconnect)( 36073143b9aSmrg XtransConnInfo /* ciptr */ 36173143b9aSmrg); 36273143b9aSmrg 36373143b9aSmrgint TRANS(Close)( 36473143b9aSmrg XtransConnInfo /* ciptr */ 36573143b9aSmrg); 36673143b9aSmrg 36773143b9aSmrgint TRANS(CloseForCloning)( 36873143b9aSmrg XtransConnInfo /* ciptr */ 36973143b9aSmrg); 37073143b9aSmrg 37173143b9aSmrgint TRANS(IsLocal)( 37273143b9aSmrg XtransConnInfo /* ciptr */ 37373143b9aSmrg); 37473143b9aSmrg 37573143b9aSmrgint TRANS(GetMyAddr)( 37673143b9aSmrg XtransConnInfo, /* ciptr */ 37773143b9aSmrg int *, /* familyp */ 37873143b9aSmrg int *, /* addrlenp */ 37973143b9aSmrg Xtransaddr ** /* addrp */ 38073143b9aSmrg); 38173143b9aSmrg 38273143b9aSmrgint TRANS(GetPeerAddr)( 38373143b9aSmrg XtransConnInfo, /* ciptr */ 38473143b9aSmrg int *, /* familyp */ 38573143b9aSmrg int *, /* addrlenp */ 38673143b9aSmrg Xtransaddr ** /* addrp */ 38773143b9aSmrg); 38873143b9aSmrg 38973143b9aSmrgint TRANS(GetConnectionNumber)( 39073143b9aSmrg XtransConnInfo /* ciptr */ 39173143b9aSmrg); 39273143b9aSmrg 39373143b9aSmrg#ifdef TRANS_SERVER 39473143b9aSmrg 39573143b9aSmrgint TRANS(MakeAllCOTSServerListeners)( 39673143b9aSmrg char *, /* port */ 39773143b9aSmrg int *, /* partial */ 39873143b9aSmrg int *, /* count_ret */ 39973143b9aSmrg XtransConnInfo ** /* ciptrs_ret */ 40073143b9aSmrg); 40173143b9aSmrg 40273143b9aSmrgint TRANS(MakeAllCLTSServerListeners)( 40373143b9aSmrg char *, /* port */ 40473143b9aSmrg int *, /* partial */ 40573143b9aSmrg int *, /* count_ret */ 40673143b9aSmrg XtransConnInfo ** /* ciptrs_ret */ 40773143b9aSmrg); 40873143b9aSmrg 40973143b9aSmrg#endif /* TRANS_SERVER */ 41073143b9aSmrg 41173143b9aSmrg 41273143b9aSmrg/* 41373143b9aSmrg * Function Prototypes for Utility Functions. 41473143b9aSmrg */ 41573143b9aSmrg 41673143b9aSmrg#ifdef X11_t 41773143b9aSmrg 41873143b9aSmrgint TRANS(ConvertAddress)( 41973143b9aSmrg int *, /* familyp */ 42073143b9aSmrg int *, /* addrlenp */ 42173143b9aSmrg Xtransaddr ** /* addrp */ 42273143b9aSmrg); 42373143b9aSmrg 42473143b9aSmrg#endif /* X11_t */ 42573143b9aSmrg 42673143b9aSmrg#ifdef ICE_t 42773143b9aSmrg 42873143b9aSmrgchar * 42973143b9aSmrgTRANS(GetMyNetworkId)( 43073143b9aSmrg XtransConnInfo /* ciptr */ 43173143b9aSmrg); 43273143b9aSmrg 43373143b9aSmrgchar * 43473143b9aSmrgTRANS(GetPeerNetworkId)( 43573143b9aSmrg XtransConnInfo /* ciptr */ 43673143b9aSmrg); 43773143b9aSmrg 43873143b9aSmrg#endif /* ICE_t */ 43973143b9aSmrg 440fe567363Smrgint 44173143b9aSmrgTRANS(GetHostname) ( 44273143b9aSmrg char * /* buf */, 44373143b9aSmrg int /* maxlen */ 44473143b9aSmrg); 44573143b9aSmrg 446fe567363Smrg#if defined(WIN32) && defined(TCPCONN) 44773143b9aSmrgint TRANS(WSAStartup)(); 44873143b9aSmrg#endif 44973143b9aSmrg 45073143b9aSmrg#endif /* _XTRANS_H_ */ 451