| // Package sideband implements a sideband mutiplex/demultiplexer |
| package sideband |
| |
| // If 'side-band' or 'side-band-64k' capabilities have been specified by |
| // the client, the server will send the packfile data multiplexed. |
| // |
| // Either mode indicates that the packfile data will be streamed broken |
| // up into packets of up to either 1000 bytes in the case of 'side_band', |
| // or 65520 bytes in the case of 'side_band_64k'. Each packet is made up |
| // of a leading 4-byte pkt-line length of how much data is in the packet, |
| // followed by a 1-byte stream code, followed by the actual data. |
| // |
| // The stream code can be one of: |
| // |
| // 1 - pack data |
| // 2 - progress messages |
| // 3 - fatal error message just before stream aborts |
| // |
| // The "side-band-64k" capability came about as a way for newer clients |
| // that can handle much larger packets to request packets that are |
| // actually crammed nearly full, while maintaining backward compatibility |
| // for the older clients. |
| // |
| // Further, with side-band and its up to 1000-byte messages, it's actually |
| // 999 bytes of payload and 1 byte for the stream code. With side-band-64k, |
| // same deal, you have up to 65519 bytes of data and 1 byte for the stream |
| // code. |
| // |
| // The client MUST send only maximum of one of "side-band" and "side- |
| // band-64k". Server MUST diagnose it as an error if client requests |
| // both. |