STiB is an Open Source project aimed at creating a toolkit and set of programs that implement Microsoft's BITS protocol. The code that is available is released under the terms of the GNU General Public License, version 2, or the GNU Library General Public License v2.1. See the source for specific license information. The name "STiB" stands for something, but we're not quite sure what. It could be "Slow Transfer is Benign", "STiB Terminology is Backwards", or "Sipping Tea in Belgium", or it could just be BITS spelled backwards with a small 'i'. The key components of the project, at present, are: stibtest: This is a testing program used to exercise the STiB client library (see stibclilib, below). It can send a BITS Ping command to a server, send a file to the server using the BITS upload protocol, or start a BITS upload session under user control. The latter is probably the most interesting from a testing perspective. Entering a command in the following format: $ stibtest sess sourcefile.ext http://server/path/name.ext ...will cause stibtest to attempt to create a TCP connection with the server and send the initial Create Session request to establish the BITS session. New in V0.2: Support for a simple GET command. $ stibtest get http://server/path/name.ext destinationfile.ext * Allows the user to indicate support for Microsoft PeerDist encoding in the request. * Allows the user to specify a (single) range of bytes to be retrieved. The 'stibtest get' command stores the raw content returned by the server in the destination file. stibclilib: This is a library of functions that can be used to build a BITS client. There are individual functions for sending each of the five available BITS request messages. In addition, there are functions that allow the user to compose and send their own message, parse URL strings, and parse server response messages. Known bug in V0.2: At present, stibclilib does not handle chunked encoding properly. The planned solution is to revisit the entire mechanism used for reading the server's responses. Gbfr: Growable buffers. This module packages a mechanism for creating buffers that grow in size as needed, up to a hard-coded limit. util: A grab bag of useful functions. ubi_sLinkList: A simple singly linked list implementation. To compile stibtest: cc -o stibtest -lreadline \ stibtest.c \ stibclilib.c \ Gbfr.c \ util.c \ ubi_sLinkList.c GNU Readline is required by the interactive session mode of stibtest. ToDo: * Document BITS somewhere. Microsoft has published a good deal of BITS documentation, so a web page with notes and links should be sufficient. There are some undocumented behaviors of Microsoft's server implementation that have been discovered using stibtest. * Redesign stibclilib. The current implementation is a first draft, so it makes sense to consider it to be a learning experience. * Fix chunked encoding. * See individual FIX: tags in the source.