Using an XDR Data Description Example

This section explains the XDR data description example to transfer files from one machine to another.

The following short eXternal Data Representation (XDR) data description of a file can be used to transfer files from one machine to another:

const MAXUSERNAME = 32;     /*  max length of a user name  */
const MAXFILELEN = 65535;   /*  max length of a file       */
const MAXNAMELEN = 255;     /*  max length of a file name  */
/*
 * Types of files:
 */
enum filekind {
    TEXT = 0,       /*  ascii data  */
    DATA = 1,       /*  raw data    */
    EXEC = 2        /*  executable  */
};
/*
 * File information, per kind of file:
 */
union filetype switch (filekind kind) {
    case TEXT:
        void;                /*  no extra information  */
    case DATA:
        string creator<MAXNAMELEN>;   /*  data creator  */
    case EXEC:
        string interpretor<MAXNAMELEN>; /* program interpretor */
};
/*
 * A complete file:
 */
struct file {
    string filename<MAXNAMELEN>; /*  name of file  */
    filetype type;               /*  info about file  */
    string owner<MAXUSERNAME>;   /*  owner of file    */
    opaque data<MAXFILELEN>;     /*  file data        */
};

If a user named john wants to store his sillyprog LISP program, which contains just the data (quit), his file can be encoded as follows:

Offset Hex Bytes ASCII Description
0 00 00 00 09 ... Length of file name = 9
4 73 69 6c 6c sill File name characters
8 79 70 72 6f ypro ... and more characters ...
12 67 00 00 00 g... ... and 3 zero-bytes of fill
16 00 00 00 02 ... File type is EXEC = 2
20 00 00 00 04 ... Length of owner = 4
24 6c 69 73 70 lisp Interpretor characters
28 00 00 00 04 ... Length of owner = 4
32 6a 6f 68 6e john Owner characters
36 00 00 00 06 ... Length of file data = 6
40 28 71 75 69 (qui File data bytes ...
44 74 29 00 00 t).. ... and 2 zero-bytes of fill