Categories

ultimate p2p filesharing

Programming Ideas > Protocols by Inhahe · Apr 20, 2026 · edited
☆☆☆☆☆ No ratings yet

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

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?