Übersicht
Problemstellung
Die Idee
Konzept
Zeitplanung + Meilensteine
Zukunft
XMPP: Extensible Messaging and Presence Protocol
("Jabber")
- erweiterbares Messagingprotokoll
- dezentral (Architektur ähnlich wie bei Email)
- offener Standard (RFC 6120, 6121, 6122)
- einfach um neue Funktionen zu erweitern
- unterstützt Transports zu anderen IM-Diensten
genutzt von: facebook chat, whatsapp, google talk
...Nachteile:
- für in-band Dateiübertragungen muss base64 (zu Text) Codiert werden
- out-of-band Übertragungen benötigen Proxyfunktionalität
- Clients implementieren unterschiedliche Standards
base64 -> bytes * 4/3 + overhead
ibb oft rate limited
(23:26:30) A: kannst du dich dran erinnern wann das letzte mal eine dateiübertragung per jabber
geklappt hat?
(23:27:47) B: Nein^^
(23:28:14) Angebot zum Senden von xmpp_filetransfer_not_working.png an B
jede Menge Ansätze:
- SI File Transfer (XEP-0096)
- Jingle SOCKS5 Bytestreams Transport Method (XEP-0260)
- Jingle In-Band Bytestreams Transport Method (XEP-0261)
- ICE-TCP RFC 6544
- Out-of-Band Data (XEP-0066)
- SOCKS5 Bytestreams (XEP-0065)
- In-Band Bytestreams (XEP-0047)
- ...
die Idee
"...könnte man da nicht BitTorrent benutzen?"
freigeben statt pushen
xmpp: sowieso den ganzen tag offen
Vorteile:
- Downloads aus mehreren Quellen!
- Infrastruktur:
- (Serverseitig) keine Änderung nötig!
- kein (XMPP-)Proxy nötig
- kein Torrent Tracker nötig um Peers zu vermitteln
- unbekannte IPs lassen sich blockieren
- wenn gewollt: erweiterbar zu "normalem" BT Client
Werkzeuge
- Python
- libtorrent
- sleekxmpp
- flask (+ flask-jsonrpc)
- Pydoc+Sphinx
- LaTeX
Zukunft
Mögliche Erweiterungen
- Integration in XMPP Clients (Pidgin, gajim, Miranda...)
- "normale" BT Mechanismen (Verbindung zu Tracker, Peer Discovery...)
- Chat Funktionalität
- Benachrichtigungen an bestimmte Kontakte wenn Torrents verfügbar/fertig
- Möglichkeit Kontakte zu blockieren
- separate BT Clients je XMPP Account
BitTorrent: magnetlinks erstellen
magnet:?xt=urn:btih:
b8bb8887a0b8204894eff2c6e00b1f8570dbd43e
&dn=Captain+Beefheart+FLAC+discography
&tr=udp%3A%2F%2Ftracker.btzoo.eu%3A80%2Fannounce
&tr=udp%3A%2F%2Fopen.demonii.com%3A1337
&tr=udp%3A%2F%2Ftracker.istole.it%3A80
&tr=udp%3A%2F%2Ftracker.publicbt.com%3A80
&tr=udp%3A%2F%2Ftracker.openbittorrent.com%3A80
XMPP:
PEP ("push") oder GET IQ ("pull")
(als Mechanismen zum verteilen)
(todo: eigentlich reichts wenn ich das sage. folie überflüssig.)
-
- Message-Stanza: "push"-Mechanismus
- Bsp: ich schicke ("pushe") eine Textnachricht an einen meiner Kontakte
- Presence-Stanza: "publish-subscribe"-Mechanismus
- Bsp: ändert ein Kontakt seinen Status erhalten alle Kontakte im Roster einen Presence-Stanza mit
dem aktuellen Status ("publish")
- IQ-Stanza : "request-response"-Mechanismus
- IQ = Info/Query
- Mögliche IQ-Stanzatypen: get, set, error, response
- vergleichbar mit HTTP GET, POST
IPM Vortrag
BA Planung
"Filesharing auf Basis von XMPP und BitTorrent"
Jan Hartmann / 11083800
puhoy.github.io/ipm_vortrag