Annotation of 43BSDReno/contrib/isode-beta/others/X/READ-ME, revision 1.1.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.