Operacje na strumieniach (łączymy się do sieci) - mała rada

Hejka!

Ostatnio dość intensywnie rozwijam pewien mały projekcik komunikatora XMPP (aka Jabbera) na Maczunia. Bawiąc się Cocoa przy tym dość intensywnie napotkałem na kilka poważnych niedociągnięć i chciałbym podzielić się uwagami na temat ich rozwiązania.
A nuż się komuś kiedyś przyda.

Chciałbym poruszyć kwestię klasy NSStream. Bardzo użyteczna klasunia pozwalająca dość bezboleśnie rozwiązać problemy z łączeniem się po sieci.
Jest asynchroniczna, informuje nas o wszystkim i trzyma osobno wejście i wyjście. Bardzo fajne. Jest też o tyle wygodna, że z wykorzystaniem biblioteki OpenSSL, ma obsługę SSLv1, SSLv2 i TLSv1.

Jest tylko jeden drobny problem.

Większość protokołów wykorzystujących TLS (w tym XMPP) wymaga wymiany kilku zdań, zanim przeniesie się na szyfrowane połączenie. Implementacja w NSStream jest jednak na tyle ułomna, że nie można po połączeniu wykonać “przerzucenia” się na połączenie szyfrowane (odpowiednik funkcji SSLowej SSL_do_handshake()).

Być może się mylę, ale chyba właśnie tak jest. Ja nie potrafiłem sobie poradzić.

Należy jednak podkreślić, że NSStream jest implementacją nad POSIXowym rozwiązaniem socketów.

Napisanie własnej klasy strumienia z właściwą obsługą jest kwestią paru chwil. Gdyby ktoś kiedyś miał taki problem, mogę dostarczyć gotowca :smiley:

Pozdrawiam,
b.