Ü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