Annotation of 43BSDReno/contrib/isode-beta/others/X/READ-ME, revision 1.1

1.1     ! root        1: This directory contains the work on mapping the X-Protocol onto the ISO
        !             2: Tranport Service.
        !             3: 
        !             4: It is based on X11 R3 and ISODE Relase 6.0 tsap libraries.
        !             5: 
        !             6: Basically, we require to build a server that Listens on well known
        !             7: T-SAPs. We then need clients that connect to this server.
        !             8: 
        !             9: server/
        !            10: contains a libos for building an X server with (this directory
        !            11: contains a Makefile to build such a server for a Sun at UCL).
        !            12: 
        !            13: These would replace the routines in ..../X11/R3/server/os/4.2bsd/
        !            14: (for example)
        !            15: 
        !            16: client/
        !            17: contains the OS/Comms parts of Xlib, and so clients can be re-linked
        !            18: with the .o files here before Xlib, to force the right thing to
        !            19: happen.
        !            20: 
        !            21: These would replace the relevant routines in .../X11/R3/lib/X/
        !            22: 
        !            23: ...although in both cases it is simpler to change the Imakefiles or 
        !            24: Makefiles just to pick up the .o's from here prior to searching the standard 
        !            25: libraries...
        !            26: 
        !            27: -DISOCONN  in either, builds 
        !            28: ISO T-Service usage in client and server
        !            29: 
        !            30: I would *NOT* advise defining TCPCONN or UNIXCONN or DNETCONN as well,
        !            31: but the code is sort of there...
        !            32: 
        !            33: client: 
        !            34: server:
        !            35: 
        !            36: so as we have an array of transport I/O fns and init it 
        !            37: in _XConnectDisplay in XConnDis.c and in
        !            38: CreateWellKnownSockets in connection.c appropriate for 
        !            39: DECNET/TCP or ISO TP
        !            40: 
        !            41: THIS HAS NOT BEEN TESTED in SERVER, only for clients...
        !            42: 
        !            43: Done this by:
        !            44: Add array of 
        !            45: a read(v), write(v), connect, listen, accept, close
        !            46: functions ptrs, which are used by
        !            47: 
        !            48: TWrite(v)To[Server|Client]
        !            49: TRead(v)From[Server|Client]
        !            50: TConnect
        !            51: TListen
        !            52: TAccept
        !            53: TCloseDown
        !            54: 
        !            55: well sort of...
        !            56: 
        !            57: Note that TNetAccept will function for select as well as ISO TP so we dont need a fn for that...
        !            58: 
        !            59: -DISODEBUG adds lots of fprintf(stderr...) for me.
        !            60: [if the variable isodexbug is set to TRUE in connection.c/XConnDis.c]
        !            61: 
        !            62: I use isodetcpath to get my own isodetail/isoentities file. In
        !            63: a proper installation, this aint necessary, but UCL has a weird
        !            64: setup:-)
        !            65: 
        !            66: Note, ISO Server names are 
        !            67: HostName:T-Name:DisplayNumber
        !            68: where T-Name is X or T to distinguish T/N service from TCP and DECNET
        !            69: Thus xhost must needs be changed, as must the rest of the access
        !            70: control stuff.
        !            71: So you could do a setenv DISPLAY `hostname`:X0 or what have you. 
        !            72: 
        !            73: Note, because we do an AEI lookup on name + TServiceDisplayNumber, we 
        !            74: dont have to do the atoi stuff on display numbers for ISOCONNS...they 
        !            75: would be separate AEI entries in isoentities or directory.
        !            76: 
        !            77: (server/)access.c,connect.c and (client/)XConnDis.c contain
        !            78: references to sockadd_in structs all over the place for working out
        !            79: peers and doing access control. These are changed to be TSAPaddr
        !            80: structs. Lenghts for authenitication of clients are the first NASIZE
        !            81: worth of the NSAP part of the TSAP...this is by analogy with doin it
        !            82: on the IP (i.e. per host) addr only...
        !            83: 
        !            84: The parse of HostName:T-NameDisplayNumber goes straight into a call
        !            85: to str2aei(HostName, T-Name+DisplayNumber). So you nneed  an entry
        !            86: in your isoentities or directory!!
        !            87: 
        !            88: T-Name = X or T at the moment.
        !            89: 
        !            90: i.e. xterm -display perky:X0
        !            91: 
        !            92: The entry in isoentities looks like:
        !            93: #
        !            94: # X Server (use Internet + X_TCP_PORT + 1 for now
        !            95: # The OID Is really one of Surreys at the mo!!
        !            96: # I guess OIDs for X should be done properly sometime...
        !            97: #
        !            98: 
        !            99: perky          T0              1.17.4.3.36.1.1 \
        !           100:                Internet=perky.cs.ucl.ac.uk+6001
        !           101: 
        !           102: dir            X0              1.17.4.3.36.1.3 \
        !           103:                Janet=00000511320041
        !           104:                
        !           105: #
        !           106: 
        !           107: The mapping:
        !           108: 
        !           109: X uses non-blocking writes, reads. The Open/Close are
        !           110: synchronous/blocking. A particular problem may lie in the nature of 
        !           111: reliable close in DECNET and TCP, but unreliable close in ISO TP, so we 
        !           112: really ought to use session; in fact, there's a lot of debate, but ideally,
        !           113: we would map the req/reply nature of X onto Remote Operations (which,
        !           114: contrary to popular belief, will do the streaming required by X).
        !           115: X doesnt use async (SIGIO) as far as i could find, luckily for me!!
        !           116: 
        !           117: Unfortunately, the X Request/Response and Presentation functionality
        !           118: is spread throughout the X library and DDX code, which makes this
        !           119: approach a real headache.
        !           120: 
        !           121: But, for now, its easier to do a transport mapping, and it buys us a
        !           122: lot, such as X over TP/X.25 and, through a TSB, between X.25 nets and
        !           123: TCP/IP nets, at low software effort. 
        !           124: 
        !           125: routines that have changed:
        !           126: From ddx/libos stuff (based on 4.2bsd version)
        !           127: server/
        !           128: access.c
        !           129: connection.c
        !           130: WaitFor.c
        !           131: io.c
        !           132: 
        !           133: From Xlib stuff
        !           134: client/
        !           135: XConnDis.c
        !           136: XlibInt.c
        !           137: Xlibint.h
        !           138: Xlibos.h
        !           139: 
        !           140: 1.
        !           141: socket+bind+connect=>
        !           142: TConnRequest
        !           143: QoS is set low for fun, and tsdu size is set to ethernet frame size (i
        !           144: dont understand why i did this!!).
        !           145: 
        !           146: 2.
        !           147: socket+bind+listen=>
        !           148: TNetListen
        !           149: Since an X server can handle multiple clients, we use the *static*
        !           150: server model, rather than the tsapd model.
        !           151: 
        !           152: 
        !           153: 3. 
        !           154: accept=>TNetAccept (blocking...) plus
        !           155: TInit, TConnResponse
        !           156: 
        !           157: 4.
        !           158: read/write and readv writev go over to being
        !           159: TReadRequest/TTDataRequest and TReadRequest/TWriteReqest respectively
        !           160: 
        !           161: 5.
        !           162: In the client, Xlibos.h defines macros for 
        !           163: BytesReadable, WriteToServer, ReadFromServer, WritevToServer, ReadvFromServer.
        !           164: These map onto 
        !           165: BytesReadable, 
        !           166: TWriteToServer, TReadFromServer, TWritevToServer, TReadvFromServer.
        !           167: 
        !           168: which are arrays of routines (currently [2]) indexed by the IO Family 
        !           169: (i.e. Unix or ISODE) initialised per X connection to call
        !           170: TSelectBytes, TReadRequest, TWriteReqest etc...or the unix (i.e. original) 
        !           171: equivalents...a similar trick is used in the server to achieve backwards compatibility for DECNET and raw TCP access...
        !           172: 
        !           173: Since a TReadRequest returns *all* the buffered data in the transport 
        !           174: connection, the TRead(v)FromServer routines must hold onto extra data 
        !           175: beyond the X requested amount for later calls...This is a little horrid...
        !           176: 
        !           177: 6.
        !           178: The select loop in server in WaitFor.c goes to a
        !           179: TNetAccept loop, checking for
        !           180: a) new connections
        !           181: b) writables
        !           182: c) readables
        !           183: which cause scheduling actions in the server.
        !           184: NB select can poll for much shorter times than TNetAccept which may
        !           185: cause stickiness in X performance...
        !           186: 
        !           187: 7.
        !           188: getpeername=>TGetAddresses
        !           189: 
        !           190: Finally, we have to map from ISODE back to X. Since all the tsap
        !           191: routines can return a disconnect with a reason, but (4.2bsd)
        !           192: X expects errno's to be meaningful, we should map the DR_*s to
        !           193: sensible errno's. In most cases (e.g. TService over TCP) this will
        !           194: probably happen anyway...
        !           195: 
        !           196: 
        !           197: ***********************WARNING*******************************
        !           198: This has not been extensively tested. It is a sort of existence proof
        !           199: implementation rather than a proper port. I have tested it under
        !           200: Sun OS 4.0 on a Sun 3/60C and a Sun 4/330, using ISODE Release 6 beta,
        !           201: with TService over TCP and over Sunlink X.25 6.0 and over raw TCP
        !           202: ! I havnt tested any X clients other than the
        !           203: ones with subdirectories here! 
        !           204: 
        !           205: I have *not* checked that undefing ISOCONN makes a good old R3
        !           206: TCP/UNIX/DECNET lib, and i have not bothered merging in the hpux
        !           207: or CRAY ifdef'd stuff, since we run BSD4.3 on our HPs, and dont have 
        !           208: COS on our two Crays...
        !           209: 
        !           210: The Makefiles are lazy simple minded peasantish and so forth...
        !           211: ***********************WARNING*******************************
        !           212: jon crowcroft
        !           213: 
        !           214: --------------------Addendum------------------------
        !           215: MakeAClient - how to make *a* client at UCL
        !           216: MakeAServer - how to make *a* server at UCL
        !           217: Makefile* - somethin that does all the above
        !           218: READ-ME - what you are doing now
        !           219: TODO - what i should be doing now
        !           220: bin/ - where i put them
        !           221: client/ - the client specific parts
        !           222: ideas/ - some notes from friends
        !           223: ../isode@ - a link to the future
        !           224: ../isodetail/ - my (Bond Street) tailor
        !           225: server/ - the server (dix/os) specifix
        !           226: tsap/ - another link to the future
        !           227: uwm/ - where i make uwm
        !           228: xclock/ - and a clock
        !           229: xedit/ - and something big with widgets
        !           230: xhost/ - a not quite there yet ISO auth
        !           231:  note this is the only client that actually requires source changes ...
        !           232: xinit/ - where i make my begining
        !           233: xmag/ - Room for a view
        !           234: xterm/ - terminal emulation (what zombies do)
        !           235: xwininfo/ - and just one more client to check
        !           236: 
        !           237: [Currently, this code all derives from the X11R3 OS/Comms 4.2BSD
        !           238: specific code, so i guess the MIT/X Consortium Copyright should
        !           239: remain...perhaps with an ISODE one added. I certainly dont care to put
        !           240: my name to it :-) 
        !           241: 
        !           242: The reason for this was i was hoping we could run a raw
        !           243: TCP+DECNET+T-Service multiprotocol X service...so i tried to make all
        !           244: the changes additions rather than substitutions for existing X code.
        !           245: This may be misled, but it worked for Julian Onions in his NTP
        !           246: port...and would admit of a first cut on an X/ISODE to X/TCP a(e.g.
        !           247: when shared X comes along...) - howz that for a boggle?
        !           248: 
        !           249: Also, some path names are grotty, and need Xizing, or ISODEizing -
        !           250: again that is due to UCL weird installation]
        !           251: 
        !           252: 
        !           253: Jon Crowcroft
        !           254: 
        !           255: [email protected]              internet
        !           256: [email protected]              JANET
        !           257: c=gb@o=University College London@ou=Computer Science@cn=Jon Crowcroft The Matrix
        !           258: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.