Annotation of libwww/Library/src/HTMuxHeader.html, revision 2.3

2.1       frystyk     1: <HTML>
                      2: <HEAD>
2.2       frystyk     3:   <TITLE>W3C Sample Code Library libwww MUX Header Definition</TITLE>
2.1       frystyk     4: </HEAD>
                      5: <BODY>
                      6: <H1>
                      7:   MUX Header Definition
                      8: </H1>
                      9: <PRE>
                     10: /*
                     11: **     (c) COPYRIGHT MIT 1995.
                     12: **     Please first read the full copyright statement in the file COPYRIGH.
                     13: */
                     14: </PRE>
                     15: <P>
                     16: Define the parts of a mux header as defined by the MUX draft specification.
                     17: This is not finalized so be warned!
                     18: <P>
                     19: This module is does not contain a <CODE>.c</CODE> file. It is a part of the
2.3     ! frystyk    20: <A HREF="http://www.w3.org/Library/"> W3C Sample Code Library</A>.
2.1       frystyk    21: <PRE>
                     22: #ifndef HTMUXHEADER_H
                     23: #define HTMUXHEADER_H
                     24: </PRE>
                     25: <H2>
                     26:   Byte Swapping
                     27: </H2>
                     28: <P>
                     29: MUX is currently using little endian headers.
                     30: <PRE>
                     31: #ifdef WORDS_BIGENDIAN
                     32: #define HT_WORDSWAP(a) ( ((a) &lt;&lt; 24) | \
                     33:                         (((a) &lt;&lt; 8) &amp; 0x00ff0000) | \
                     34:                         (((a) &gt;&gt; 8) &amp; 0x0000ff00) | \
                     35:                         ((unsigned int)(a) &gt;&gt; 24) )
                     36: #else
                     37: #define HT_WORDSWAP(a) ((a))
                     38: #endif
                     39: </PRE>
                     40: <H2>
                     41:   The MUX Header
                     42: </H2>
                     43: <P>
                     44: Simple, huh?
                     45: <PRE>
                     46: typedef unsigned int  HTMuxHeader;
                     47: </PRE>
                     48: <H3>
                     49:   Generic Header flags
                     50: </H3>
                     51: <PRE>
                     52: #define MUX_LONG_LENGTH        0x80000000
                     53: #define MUX_CONTROL    0x40000000
                     54: </PRE>
                     55: <H3>
                     56:   Data Header Flags
                     57: </H3>
                     58: <PRE>
                     59: #define MUX_FLAGS       0x3C000000
                     60: #define MUX_SYN                0x20000000
                     61: #define MUX_FIN                0x10000000
                     62: #define MUX_RST                0x08000000
                     63: #define MUX_PUSH       0x04000000
                     64: </PRE>
                     65: <H3>
                     66:   Control Header Opcodes
                     67: </H3>
                     68: <PRE>
                     69: #define MUX_OPCODES     0x3C000000
                     70: #define MUX_STRING     0x00000000
                     71: #define MUX_STACK      0x04000000
                     72: #define MUX_FRAGMENT   0x08000000
                     73: #define MUX_CREDIT     0x0C000000
                     74: </PRE>
                     75: <H3>
                     76:   Length and Session ID
                     77: </H3>
                     78: <PRE>
                     79: #define MUX_SESSION    0x03FC0000
                     80: #define MUX_LENGTH     0x0003FFFF
                     81: </PRE>
                     82: <H2>
                     83:   Macros for Byte Shifting
                     84: </H2>
                     85: <PRE>
                     86: #define MUX_SET_SID(sid)       ((sid) &lt;&lt; 18)
                     87: #define MUX_SET_LEN(len)       ((len))
                     88: #define MUX_SET_PID             MUX_SET_LEN
                     89: #define MUX_SET_OPCODE(op)      ((op) &lt;&lt; 26)
                     90: 
                     91: #define MUX_GET_SID(sid)       (((sid) &amp; MUX_SESSION) &gt;&gt; 18)
                     92: #define MUX_GET_LEN(len)       ((len) &amp; MUX_LENGTH)
                     93: #define MUX_GET_PID             MUX_GET_LEN
                     94: #define MUX_GET_OPCODE(op)      ((op) &amp; MUX_OPCODES &gt;&gt; 26)
                     95: </PRE>
                     96: <H2>
                     97:   Header Alignment
                     98: </H2>
                     99: <P>
                    100: You can force 8 byte alignment by defining this to 1. Normally, we decide
                    101: pr MUX segment whether we have to use a long header or not.
                    102: <PRE>
                    103: #define LONG_LENGTH    0                            /* 4 or 8 bytes header? */
                    104: #define MUX_IS_LONG(hdr)     ((hdr) &amp; MUX_LONG_LENGTH)
                    105: 
                    106: #define MUX_ALIGN(len)       ((len) + ((4-(len)%4) % 4))
                    107: #define MUX_LONG_ALIGN(len)  ((len) + ((8-(len)%8) % 8))
                    108: </PRE>
                    109: 
                    110: <H2>
                    111: Default Values
                    112: </H2>
                    113: 
                    114: <PRE>
                    115: #define DEFAULT_CREDIT          4096
                    116: </PRE>
                    117: 
                    118: <PRE>
                    119: #endif
                    120: </PRE>
                    121: <P>
                    122:   <HR>
                    123: <ADDRESS>
2.3     ! frystyk   124:   @(#) $Id: HTMuxHeader.html,v 2.2 1997/02/16 18:42:41 frystyk Exp $
2.1       frystyk   125: </ADDRESS>
                    126: </BODY></HTML>

Webmaster