ultimate p2p filesharing
Can enter several searches that the client remembers (indefiitely) and notifies you whenever they become available. It would probably be impractical to put hooks into every client on the network for every search so it will probably have to periodically issue the searches. Or a set of supernodes can share the global hook list and every time anybody adds a new file it notifies each of those supernodes. Perhaps they can remember frequent users' file lists across sessions.
Can search regex, or at least ? and *, grouping, and, or, not
There would be no official server, although there would be supernodes. They will be automatically delegated based on user option, bandwidth, cpu, harddrive, ram, percentage of time spent on the network, number of reconnects, etc. Clients will retain a list of supernodes and normal nodes from previous connects so that they can find the network on later connects. Not all nodes and supernodes will be online all the time or forever, but if enough are in the list, one should work. I imagine a website would be created which mantains a list of active supernodes, and perhaps even the client could be configured to automatically use that website or webservice, but the network must not end up depending on it.
Deciding which nodes become supernodes requires deciding which node decides.. I may have this info in a file somewhere.
Since the network is self-organizing, having multiple disconnected networks could be a possibility, in which case nodes, or at least supernodes, should periodically test random IP addresses to find other networks. Users should also be allowed to enter hostnames.
Automatically test WMA files for DRM and flag them accordingly.
Supernodes could, in the background, do some number crunching on their clients' list of files and find songs that users might like based on correlation between lists.
Algorithm: For every song in every list that's not yours, add a value proportional to the number of songs in your list that that list has divided by the number of songs in that list. Sort the end results based on the final sums and show you the top X results.
alternative: what about the number of songs that they have in their list that are in yours divided by the size of your list?
problem: Must use heuristics to determine when two filenames and/or their contents are considered the same song.
show all id2, id3, etc. attributes in individual optional sortable columns
the network must collectively choose supernodes based on
-average uptime
-how long they've been a member
-what proportion of that time has been online
-cpu speed
-harddrive space
-available ram
-bandwidth
-whether the user opts to be a supernode
-whether they have a static ip or uri
clients remember a list of supernodes for when they reconnect. tries to connect to one local
maybe tries to connect to one they've connected to before if they remember their file lists??
if all supernode connections fail (might have been a long time since they've connected) it starts trying to connect to a saved list of peers it has connected to in the past
if a peer is found online it is obligated to direct the client to an active supernode
if no peer is found then it starts looking for random ip addresses
other option: peers and supernodes can point other peers to webpages containing plain text listings of supernode and peer ip's s
a main objective is to make sure the network is *never* fragmented.
-have supernodes and perhaps normal nodes regularly scan the network for disenfranchised supernodes
-check their webpages they've been given for ip's that aren't a partof their network
-it should only have to check one ip, becasue if one ip is in their network then so are all the rest, if island integration is done before posting ip's to the website
show overall u/l speed and d/l speed at the bottom
can search by
size range
artist, title, etc
bitrate and whether it's VBR
file type
song length
use pyqt to make it cross platform
put higher priority on harder-to-find files (u/l and d/l)
scale-free network; power law. (sci-am may 2003). 'counting how many
web pages have exactly k links showed that the distribution followed a so-called power law: the probbability that any node was connected to k other nodes was proportional to 1/k^n. the value of n for incoming links was approximately 2, so, for instance, any node was roughly four times as likely to have just half the number of incoming links as another node.
pull items around in traffic list
multiple searches at a time
can play a file that's being uploaded on r-click
shows bitrate in transfer windows
\max uploads can be : just enough to fill bandwidth
same w/ downloads
choice to receive remotely queued when ready if d/l bandwidth saturated
no - remote queued are counted as d/l
yes
ask
regex searches
find files of exact size
resume with md5sum check
use size+crc32 to group files together in search.
d/l from multiple people at once, same file.
ratings - works, doesn't work, incomplete, misnamed, good<->bad, comments, adult content
'users who downloaded x also downloaded..'
users hotlist
clear: completed, cancelled, queued, remotely queued, searching, erroneous
delete file
resume from partial d/l not in list
EXACT notification of why a file failed. d/c from internet, remote signed off, remote was disconnected, remote terminated d/l, remote disabled uploading, remote did not exist, no disk space, other file i/o error, timed out.. other..
auto-check for duplicates (size+md5), option to not d/l
when selecting, select in groups in which to only d/l one of the entries.
for remotely queued show remote simultaneous uploads, queue position, and time til your turn (crude estimate)
in search show remote person uploading/max
search hd for mp3 mp2 avi mpg mpeg mpe jpg gif png jpeg jpe etc. opt. to automatically exclude dir's with fewer than x of given type
opt. to ask for verify of each directory.
import grokster, kazaa, morpheus settings.
and gnutella clients.
partial downloads saved as GlobalFile_partial.file name.ext
drag & drop
no central server.
preview uses file assocation.
initiate send of arbitrary file to user (his accepts/ignores/asks)
partials have GlobalFile_info.file name.ext.txt -- name, FULL size, md5, date, time, searched or remotely offerred? (from?)
ratings
alternate file names
remote user(s)
opt. to keep those files after completion.
does not ask for e-mail address. register with username and password only.
no sound in adware. no trick windows. no pop-ups. no motion/blinking.
register $10 to get rid of ads.
option to d/l only one at a time from each remote user.
(second shows queued in diff. color if not already over limit anyway.)
option to u/l only one at a time to each remote user.
(remote shows remotely queued in diff. color.
opt. to pop up window on receive prvmsg.
search option: genres - checklist
search option: ppl in hotlist - checklist
search option: filesize range
search option: md5
search option: ppl who d/l'd X also d/l'd.. - initially shows list of x based on parameters, acts as checklist, then search for also d/l'd's.
*note*: ratings and also d/l's feature must be done by a third party. un(officially)affiliated.
RELEASE RFC PROTOCOL FOR STANDARD. eventually?
java client
quick access to: suspend all uploads, suspend all downloads.
leave x room free in d/l / u/l before saturation
enter manually limits
- virus notification
- check 100K checksums to see if files are partial/incomplete downloads
- check to see if files are identical or same size
-tag files as same file
-quick loose file name matching to see if already have a file on harddrive or exact dup.
-primitive regex searches - exclusion of words..
-variable-bitrate - avg. bitrate in search criteria
- check to see if files are identical or same size
scrapt port part of ip:port, to make searching easier and standardize?
support multicast?
bandwidth priority rare files
load gui:
buttons:
search
filename - regex, or simplified search
author, title
all id2 and id3 tags
size- between x and y
rating- at least x
md5(automatic)
bitrate
screen resolution - between x*y and a*b
network statistics
users online
total files online
gb online, unique qb online
#'s of various file types
# of -unique- files online
file traffic
r-click to launch file while d/l'ing
save to downloaddir\temp until done
can click on rating--five selections, but statistics has 10 levels
can mark as incomplete - shows up in statistics. is saved in owner's media library database
cancel upload
quit after downloads and uploads completed
cancel download
erase completed file
clear completed in list
search for more sources
search for more sources for all incomplete files
shared files
select files by directories, extention types, and size limit.
can type in directories
search for a file- use 'search' search form
launch a file
search for incomplete files
show incompleteness statistic
network traffic
for supernodes:
search criteria
# of results returned from this supernode
# of other supernodes sent to, if limited
# of results returned from all supernodes
passing messages to firewalled users to connect
IM's to firewalled users
new connections
"sent supernodes"
received file list: # of files, # of most common file ext., # of gbs
system statistics
supernode went offline
supernode went online
until connected, all greyed out but traffic and shared files
adds files in shared directory to sharing list in background, computing md5 sums etc
read list of supernodes until connected to one
if none connected, read list of non-super nodes
if none connected, scan ip's randomly
if connect to a supernode:
if supernode is full, it sends you the ip:port of a node that has many empty slots.
supernode tries to connect to you on your listening port, marks you as firewalled if can't.
supernode sends a list of up to 1000 supernodes, 6 bytes each - 4 for ip, 2 for port
this is its own thread.
you send it list of all shared files - name, size, md5, id2&3, author, resolution
this is its own thread.
uses compression
send system info - uptime, length of time program running, bandwidth, hd space, ghz
if connect to a normal node:
they send you the ip:port of the node they're connected to, or if not connected then sends up to 1000 supernodes+nodes
search - send criteria
download search results - up to 200
supernodes send search to all other supernodes, supernodes return number of finds
or sedns to one and based on results extrapolates how many to send to to get 200?
requests x finds from supernode(s) with most finds
collapse all files of same md5. when selected, download from as many as possible
simultaneously. break into x parts, when faster senders complete, re-break
incoming possibilities from supernode:
command to request that you become a supernode
command to connect to a remote computer on their listening port to send them a file
message from remote user - optionally pops up separate window
file request results
attempt to connect to listening port (connectiot phase only)
list of supernodes (connection phase only)
supernode going offline, ip of alternative supernode to connect to
network statistics
SUPERNODE DEFINITION:
listens on defined port
sends:
search criteria to all other nodes or to limited number of nodes
# of files criteria matched to sending node, OR maybe complete list to the node that searched if not (number of nodes searched limitation && first node searched)
message to connect to a user to send file for firewalled user
IM to firewalled client user
message to IM firewalled user to his owner's supernode
message to node to request it be a supernode
message that shutting down and new alternate supernode ip
supernodes list to node (connection phase only)
network statistics to nodes
attempt to connect to node's listening port (connection phase only)
receives:
connection phase:
connect
system stats
search criteria from node
search criteria from supernode
from supernode: message to IM client node
from client node: message to IM a node
from supernode: new node notification
from supernode: shutting down notification
from supernode: a supernode has apparently gone offline. agree?