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) << 24) | \
33: (((a) << 8) & 0x00ff0000) | \
34: (((a) >> 8) & 0x0000ff00) | \
35: ((unsigned int)(a) >> 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) << 18)
87: #define MUX_SET_LEN(len) ((len))
88: #define MUX_SET_PID MUX_SET_LEN
89: #define MUX_SET_OPCODE(op) ((op) << 26)
90:
91: #define MUX_GET_SID(sid) (((sid) & MUX_SESSION) >> 18)
92: #define MUX_GET_LEN(len) ((len) & MUX_LENGTH)
93: #define MUX_GET_PID MUX_GET_LEN
94: #define MUX_GET_OPCODE(op) ((op) & MUX_OPCODES >> 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) & 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