Tlen przez jabberowego klienta

tech • 438 słów • 3 minuty czytania

Tlen z dowolnego klienta Jabbera/XMPP bez transportów? Tak to możliwe ;)

Wreszcie udało mi się doprowadzić do porządku ten paskudny kod - serwer proxy pisany w Perlu, i zmusić sockety do działania wedle mojego widzimisię. Ale ile to musiałem się namęczyć z modułem IO::Socket::INET, aby działał poprawnie na Linuksie i Windowsie, do tego jeszcze w trybie non-blocking z łatwym odbieraniem/wysyłaniem danych.

Momentami myślałem, że wywalę głupie moduły i skorzystam z czystych socketów, albo w ogóle oleję skryptowe i napiszę w to w C++. Ostatecznie udało się wszystko opanować i czytanie z bufora przez sysread zaczęło hulać po zastosowaniu łatki na non-blocking na Windowsie ;)

Mal-XMPP<>Tlen-Proxy-Server służy do jednego celu, jest pośrednikiem między klientem Jabbera/XMPP a serwerem tlen.pl. Dzięki niemu poprzez dowolny jabberowy klient, który obsługuje połączenia przez proxy HTTP Connect, można korzystać z sieci tlen.pl. Serwer proxy napisany został w Perlu i w zamierzeniu ma przekształcać (transformować) za pomocą XSL strumienie XML klienta i serwera na odpowiedni format drugiej strony.

Pomysł projektu zrodził się za sprawą dawnej dyskusji na forum polskiej społeczności jabberowej. Niedawno znów trafiłem na ten temat i chciałem spróbować poeksperymentować i coś z tego wyszło…

Aktualnie z powodu problemów z libami do XSLT pod Windowsem, serwer przepuszcza transparentnie prawie wszystkie pakiety po poprawnym zainicjowaniu połączenia i strumieni. Z uwagi, że serwer tlenu używa pochodnego od jabbera protokołu, dostępna jest podstawowa funkcjonalność, czyli wiadomości, rozmowy, statusy, obsługa rostera i subskrypcji.

Żeby nie być gołosłownym mały screenshot ;)

Serwer nie został jeszcze upubliczniony, gdy jego kod zostanie nieco poprawiony, zagolfowany, a działanie stanie się stabilne, zostanie to dokonane. Prawdopodobnie kod programu zostanie opublikowany na zasadach jednej z licencji wolnego oprogramowania, ale to niekoniecznie musi się tak skończyć.

Nie mam jeszcze rozwiązania kilku spraw. Nie wiem czy wykorzystać forka, wątki, czy preforka na jakimś multiplekserze. Wydajniejsze i nie zbyt kosztowne w porównaniu do forka wydaje się użycie wątków i tak też planuję. Większość tego typu deamonów serwerowych korzysta z forków, ale jak dla mnie, procesy są za ciężkie w tym przedsięwzięciu.

Wkurzyło mnie wykorzystanie urlencode przez twórców tlena do wszystkiego co może zawierać dowolne znaki. Ile z tym kombinowania, aby jakiś dobry regexp napisać. W sumie wszystko, co zawarte jest między tagami i wszystkie atrybuty oprócz type i id oraz namespace będę kodował. To powinno w większości wypadków załatwić sprawę.

Ciekawy jestem kto wpadł na pomysł z tym algorytmem, musiało to być zaiste genialne. To pewnie przez ten genialny parser serwera, bo w normalnym wystarczyłoby tylko zamieniać na encje znaki < i > jak to robi się w jabberze, a reszta znaków w odpowiednim kodowaniu XML-a i nie ma żadnych problemów. A w tlenie zawsze są jakieś niespodzianki…

Komentarze (8)

koniczynek
20070818-094903-koniczynek

Szkoda, że nie będzie to napisane w C++. Mam trochę doświadczenia ze skryptami perlowymi i przy większym obciążeniu po prostu nie dają sobie tak dobrze rady, jak programy C/C++. No ale ważne, że coś się dzieje, pierwszy krok zawsze jest najtrudniejszy ;) keep up the good work! :)

MalCom
20070818-110917-malcom

To oczywiste, że kompilowane są wydajniejsze ;)

Jednym z głównych odbiorców mieli być zwykli userzy, którzy mogliby sobie po prostu na localu odpalić serwer i korzystać. Wtedy IMHO na *nixowych maszynach z Perlem nie powinno być niespodzianek i każdy by sobie z tym poradził (lepiej), niż z kompilacją i zabawą :P

Brałem również opcję publicznego serwera dla każdego, nawet dobry pomysł ;)
Dlatego, jeśli byłby ktoś chętny na swojej maszynie takie coś “postawić” dla dobra ludzkości i do tego, gdyby było w miarę duże zainteresowanie i ruch, to nie widzę przeszkód, aby przepisać na C/C++ i wydać takową wersję.

Azrael Nightwalker
20070818-131131-azrael-nightwalker

Dobra robota, tak trzymać :)

koniczynek
20070819-162707-koniczynek

To przepisz i wydaj, ja chętnie postawie publicznie ;) i pewnie niejeden administrator jeszcze, mając na uwadze to, że transport tlena nie jest optymalnym rozwiązaniem.

iWicko
20070829-234120-iwicko

Ciekawe ;) Co mam więcej napisać? Cieszę się, choć z sieci Tlena zrezygnowałem już jakiś czas temu i w sumie za bardzo nie żałuję :)

MadMan
20070910-073600-madman

Czy może coś “w temacie” się ruszyło?

MalCom
20070910-103312-malcom

Coś tam się rusza, aktualnie w C++ powstaje, tyle że małe problemy są z XSLT ;)

wilku
20080924-121052-wilku

MalCom, naprawde fajna robote robisz :)

Korzystajac z PSI lub innego klienta jabbera na MACa tez tlenik powinien pojsc za pomoca Twych czarow??

Dodaj komentarz

/dozwolony markdown/

/nie zostanie opublikowany/