CoFi adapts applications for collaborative and multimedia authoring over bandwidth-limited networks without modifying their source code or the data repositories. CoFi follows the philosophy introduced in Puppeteer for read-only adaptation [5], which takes advantage of the exposed run-time APIs and structured document formats of modern applications.
Figure 5 shows the four-tier CoFi system architecture. It consists of the application(s), a local and a remote proxy, and the data server(s). The application(s) and data server(s) are completely unaware of CoFi. Data servers can be arbitrary repositories of data such as Web servers, file servers, or databases. All communication between the application(s) and the data server(s) goes through the CoFi local and remote proxies that work together to implement adaptation-aware editing and progressive update propagation. The CoFi local proxy runs on the bandwidth-limited device and manipulates the running application through a subset of the application's exported API. The local proxy is also in charge of acquiring user modifications, transcoding component versions, and running the adaptation policies that control the download and upload of component versions. The CoFi remote proxy runs on the other side of the bandwidth-limited link and is assumed to have high-bandwidth and low-latency connectivity (relative to the bandwidth-limited device) to the data servers. The CoFi remote proxy is responsible for interacting with the native store and transcoding component versions. Because applications differ in their file formats and run-time APIs, the CoFi proxies rely on component-specific drivers to parse documents and uncover their component structure, to detect user modifications, and to interact with the application's run-time API.
CoFi supports subsetting and versioning adaptation policies. Subsetting policies communicate a subset of the elements of a document, for example, the first page. Versioning policies transmit a less resource-intensive version of some of the components of a document, for example, a low-fidelity version of an image. CoFi adapts applications by extracting subsets and versions from documents. CoFi uses the exported APIs of the applications to incrementally increase the subset of the document or improve the fidelity of the version of the components available to the application. For example, it uses the exported APIs to insert additional pages or higher-fidelity images into the application.