The file storage and retrieval service allows convenient access to currently existing file-sharing networks such as Mnet and Gnutella.

Core Interface:

The file storage and retrieval service does not have an XML-RPC interface. This service already exists at a lower level in HTTP. Therefore, the file storage and retrieval service uses HTTP GET and PUT.

File storage is done using HTTP PUT. When a file is put, any tasks necessary to make the file accessible to the network should occur. For instance, some networks require that the filename be associated with the file's hash with a tracker service in order for the file to be downloaded using its name. If this is the case then it should be done automatically when a PUT is done.

File retrieval is done using HTTP GET. Since GET is passed a URI, the node should do whatever is necessary to resolve a URI into a form which can be used to fetch the file. For instance, in some networks a URI must be looked up in a tracker to find the file's hash and then it is the hash which is used to request the file. If this is the case then it should be done automatically when a GET is done.


A footnote is in order regarding the use of HTTP PUT. While it is useful and convenient to use the methods already included in HTTP to do file uploads, it may not be feasible for deployment reasons. Many accounts which allow users to run CGI scripts do not also allow the arbitrary use of HTTP PUT. In order to achieve maximum deployment on these accounts (for example, many university accounts), it is wise to keep all of the interfaces constrained so that they can be done as CGI scripts. Therefore, the use of HTTP PUT may be deprecated in the future.

The obvious way to do file uploads with CGI is to have the sending node call an XML-RPC call on the recieving node giving it the URL of the file and requesting that the receiving node download it. This is not being implemented at the moment as it requires that the receiving node make a callback (possibly through a firewall) in order for the file to be transferred. Due to the issues with firewalls, this will not be implemented until an implementation of the Tristero firewall transgression service is available.