# XMPP-Transport

Ein XMPP-Transport (auch XMPP-Agent oder XMPP-Gateway) ist ein Dienst innerhalb eines XMPP-Netzwerkes, der Nutzer anderer Instant-Messaging-Systeme transparent als XMPP-Nutzer repräsentiert.
Hiermit ist es möglich, andere Netzwerke (oft als Legacy Services bezeichnet) wie AIM, ICQ, Y!M, Gadu-Gadu oder IRC zu verwenden und mit deren Benutzern zu interagieren. Auch zu MSN gab es Transports, welche durch die Abschaltung von MSN jedoch obsolet wurden. Die Server „übersetzen“ dabei die Nachrichten zwischen den Netzwerken, ohne dass die beiden beteiligten Benutzer hierfür besondere Vorkehrungen treffen müssen.

## Funktionsweise

Folgendes Beispiel soll den Ablauf zwischen Alice, die einen XMPP-Client benutzt und Bob, der bei ICQ registriert ist, veranschaulichen:
* Alice übergibt dem Transport zunächst ihre ICQ-Anmeldedaten (ICQ-Nummer und Passwort).
* Daraufhin loggt sich der Transport im Auftrag von Alice bei ICQ ein und verhält sich dem ICQ-Netzwerk gegenüber wie ein normaler ICQ-Client. Einerseits überträgt der Transport nun alle Nachrichten von Bob (im ICQ-Netzwerk) an den XMPP-Client von Alice. Andererseits leitet er alle Nachrichten von Alice an Bob weiter.
* Bob bekommt von diesem Ablauf nichts mit. Ihm erscheint es so, als ob er direkt mit Alice kommunizieren würde.
* In der Kontaktliste (bei XMPP „Roster“ genannt) von Alice wird Bob als „normaler“ XMPP-User dargestellt, obwohl er nicht mit dem XMPP-, sondern mit dem ICQ-Netzwerk verbunden ist.
Jeder Benutzer von XMPP kann sich bei Transports registrieren, indem er seine vorhandenen Login-Informationen an diesen Dienst übergibt. Dazu müssen Clients Service Discovery (kurz disco, zu deutsch „Dienste durchsuchen“) unterstützen. So ist es möglich, Server nach angebotenen Transports zu durchsuchen und ohne zusätzliche Installation von Plugins, Kommunikation mit Nutzern proprietärer Instant-Messaging-Netzwerke zu betreiben.
Obwohl das XMPP-Protokoll bezüglich der Umsetzung von Funktionen von Fremdnetzen keine Einschränkungen vorgibt, unterstützen die aktuellen Transports nur Basisfunktionen (Senden und Empfangen von Nachrichten, Sichtbarkeiten). Sofern Datentransfers und Chaträume unterstützt werden, ist die Nutzung zumeist nur eingeschränkt möglich.
Der Transport selbst wird auch durch einen Jabber Identifier repräsentiert. So kann man z. B. die Sichtbarkeit oder Abwesenheitsnachricht für das jeweilige Netz gesondert setzen, oder „für den Transport offline sein“, was ein Ausloggen aus dem jeweiligen Dienst bewirkt.

### Vorteile

Der Vorteil dieses Konzepts ist, dass ein großer Teil der Komplexität von den Clients auf die Transports abgewälzt wird. Das erlaubt die Herstellung von reinen XMPP-Clients, die ohne Transports eine zu kleine Akzeptanz hätten.
Reine XMPP-Clients sind erheblich einfacher zu programmieren und zu warten, zumal das XMPP-Protokoll wegen der öffentlichen und stabilen Spezifikation gut implementiert werden kann. Davon profitiert letztlich der Endanwender, weil dadurch die Vielfalt der Clients steigt.
Außerdem müssen Updates im Umgang mit den Fremd-Protokollen nicht durch neue Client-Versionen verteilt werden. Stattdessen wird nur die Server-Software aktualisiert, und alle Clients profitieren unmittelbar von den Änderungen.
Ein weiterer Vorteil ist die größere Homogenität in der Benutzerführung, die reine XMPP-Clients bieten. Die ist zwar nicht zwingend auf reine XMPP-Clients beschränkt, de facto führen die speziellen Eigenschaften der Fremdprotokolle zu komplexeren Konfigurationsfenstern von Multi-Protokoll-Clients.

### Nachteile

Die Transporte werden von vielen Nutzern aufgrund unbefriedigender Verlässlichkeit und Stabilität sowie der hohen serverseitigen Last nur als Notlösung betrachtet. Sie sehen den Sinn der Nutzung vor allem darin, während der Übergangszeit die bisherigen Kontakte, die noch proprietäre Netzwerke nutzen, in XMPP verfügbar zu haben. Dennoch wird von vielen Nutzern auch der Dauereinsatz als gerechtfertigt angesehen, zumal nicht alle Kontakte Interesse an einer Migration zu XMPP haben.

## Bekannte Software für XMPP-Transports

Funktionalitätsreiche, in Python entwickelte Transports sind:
* Projektübersicht zu PyAIMt bei Google Code
* Projektübersicht zu PyICQt bei Google Code
* PyIRCt
* PyMSNt
* PyYIMt
* Spectrum Transportsuite die mehrere Transports beinhaltet
Andere, frühe Implementierungen die teilweise noch in den Paketlisten einiger Distributoren enthalten sind nutzten einen Fork des jabberd.
Kommerzielle Anbieter bieten auch Gateways vom XMPP- ins GSM-Netz für den transparenten SMS-Versand an.
* biboumi – XMPP ↔ IRC Gateway

## Dokumente

* Wikibooks: XMPP-Kompendium: Fremde Netzwerke einbinden – Lern- und Lehrmaterialien
* XEP 0100: Gateway Interaction
* XEP 0030: Service Discovery