[ Next Article | Previous Article | Book Contents | Library Home | Legal | Search ]
Communications Programming Concepts

Using an XDR Data Description Example

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

[ Next Article | Previous Article | Book Contents | Library Home | Legal | Search ]