[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [ecf-dev] File sharing inquiries...

Hi Rem,

Remy Suen wrote:
Hi everyone,

I'm Remy Suen (you can just call me Rem), as some of you may know if you've been listening in on some of the past couple of ECF meeting conference calls. I am one of the three students that are working on ECF-related projects via Google's Summer of Code program. I'm writing a clean room implementation of the BitTorrent protocol and then creating a provider plug-in for ECF's file sharing APIs. I've got some issues I'd like to bring to the table in hopes that some of you would be able to help with.

1. How does one actually limit upload/download rates?

I've been poking away at a number of BitTorrent issues and features but have yet to start tackling this since I'm not even really sure how to start. Is it really just a matter of having a thread in the connection looking at past uploads and doing some kind of rolling average and then deciding how much data to write to the channel/socket in one second? This sounds like it could work (or not), but then now I have two threads per connection, which sounds like a lot, although I'm not sure if it really is. So any tips or hints on this would be most appreciated as I don't even know where to begin.

For the filesharing API, some specification of upload/download rates could be added to the API to allow providers (like Bittorrent) that support such features to expose them to clients on an individual file level (I assume BT supports setting rates at the level of individual files...either before or during file retrieval).



2. How will the org.eclipse.ecf.fileshare API fit in with BitTorrent, a bi-directional piece-sharing protocol?


The file sharing API is currently heavily biased towards unilateral file transportation services (rightfully so), which really leaves little API for me to use. I could certainly send IFileShareRetrieveDataEvents per block that I receive from a peer, but I can see that that getData() method isn't going to be really useful. Similar arguments could be had for IFileShareRetrieveStartEvent and its sending event counterparts. I guess what I'm trying to get at is that a BitTorrent provider for ECF is certainly doable (and I think I'm pretty close to having a simple one done, but the whole Namespace and ID concept seems awfully confusing to me), but just what kind of useful information can clients actually retrieve right now based on the current API?


Not very much...basically just the contents of the file itself. But my intention with the fileshare API was to expose other methods (on either the IFileShareContainer, IFileShareRetrieveConfig, or IFileShare) OR add adapter interfaces via IAdaptable for categories of API like rate control, statistics gathering, etc. Also new event types can easily be created added for handling asynch responses to requests.


So what I would like to do is to have Remy propose a desired set of features (e.g. rate control) and then we can propose an enchancement/generalization of the file share API to support.

RE: the namespace/ID concept...the notion is have some sort of structured and extensible way to represent addressing information (other than just String or URI). The ECF namespace extension point allows ECF providers to create their own types of IDs...with whatever structure they require to refer to a remote service, file, user, etc. e.g.

ecf.provider.bt://slewis@localhost/path/to/filename.bt

or

http://www.eclipse.org/file.txt

or

ecftcp://ecf.eclipse.org:3282/server

There's a little more available here: http://www.eclipse.org/ecf/documentation.html#Identity

But as usual more is needed.

Scott