Eine kurze Geschichte meiner ICQ-Verbindung:
Erzaehlt in 2 Akten von Ethereal und Maerchen-Onkel reptiler
1. Akt:
Verbindungsaufbau:
Die Verbindung wird mit login.icq.com (Alias fuer login.glogin.messaging.aol.com, IP 64.12.161.185) hergestellt.
Es werden dabei diverse Daten uebertragen, darunter natuerlich UIN, Passwort, Client und Version und andere Geschichten. Das alles mit dem Protokoll AIM. Alles ueber Port 5190.
Am Ende dieser Kommunikation bekomme ich im Feld
BOS server string die IP 64.12.25.188 und wieder Port 5190 mitgeteilt.
Ich verbinde mit der erhaltenen IP, auch mittels AIM-Protokoll.
Durch das AIM-Generic-Protokoll wird mir die Liste der Supported Services geschickt. Darunter finden sich unter anderem AIM Buddylist, AIM User Lookup, AIM SSI und AIM ICQ.
Mit Versionsnummern versehen schicke ich die Capabilities meine Clients und erhalte die Capabilities des Servers, auch mit Versionsnummern, zurueck. Diese Capabilities decken sich mit den Supported Services.
Anschliessen sende ich, weiterhin mit AIM Generic und weiterhin an Port 5190, eine Self Info Request.
Der Self Info Reply enthaelt unter anderem meine UIN und meine IP. Auch ein Feld "Member since" ist enthalten.
Gleicher Port, anderes Protokoll, diesmal AIM BOS. Ich schicke einen "Rights Query".
Zurueck bekomme ich die "Max Invisible List Size" und die "Max Visible List Size".
Danach schicke ich einen recht umfangreichen ICQ Request ueber AIM ICQ und erhalte einen ICQ Response.
Ich schicke nun mittels ICQ Buddylist meine komplette Buddylist an den Server und sende danach "Request List" mittels AIM SSI.
Ich schicke einen weiteren ICQ Request, wieder mittels AIM ICQ. Auf diesen kam aber scheinbar nie ein Reply.
Mittlerweile kommt per AIM SSI die Info "No List" und ich sende, auch per AIM SSI, "Activate".
Zwischenspiel:
Die Verbindung ist nun soweit aufgebaut, das war schon ein Haufen Pakete.
Die komplette Kommunikation lief ueber TCP-Port 5190.
Nun will ich mal, ueber den Server, eine Message schicken. Da aufgrund der Zeitverschiebung keiner meiner Buddies online ist schicke ich einfach eine Testmessage an einen der nicht da ist.
2. Akt:
Die Nachricht:
Ich waehle einen meiner Buddies aus um ihm eine Nachricht (Inhalt: test) zukommen zu lassen.
Waehrend ich tippe wird dem Server schon mittels AIM Messaging eine "Mini Typing Notification" gesendet.
Dies wuerde den User, falls wir uns bereits unterhalten wuerden daruber informieren, dass ich gerade tippe und nicht schlafe.
Ein beherzter Druck auf "Send" veranlasst die Nachricht mittels AIM Messaging an den Server zu schicken. Enthalten sind natuerlich die UIN meines Buddies und die Nachricht.
Vom Server erhalte ich darauf ein simples Acknowledge, auch ueber AIM Messaging.
Wie an meiner kurzen Geschichte zu sehen ist, geht die meiste Kommunikation fuer die Verbindung selbst drauf.
Die Mini Typing Notifications kann man sich hoechstwahrscheinlich sparen wenn man mittels PHP oder einer anderen Sprache senden will. Wieviel vom Verbindungsaufbau in der beobachteten Form durchgefuehrt werden
muss und was ausgelassen werden kann muss ausprobiert werden. Ich denke man kann es sich schenken die Aktion mit der Buddylist durchzufuehren. Moeglicherweise kann man auch gleich nach Verbindung zum 2. Server die Nachricht senden.
Auf jeden Fall ist die ganze Angelegenheit recht komplex.