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)
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! :)
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ę.
Dobra robota, tak trzymać :)
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.
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ę :)
Czy może coś “w temacie” się ruszyło?
Coś tam się rusza, aktualnie w C++ powstaje, tyle że małe problemy są z XSLT ;)
MalCom, naprawde fajna robote robisz :)
Korzystajac z PSI lub innego klienta jabbera na MACa tez tlenik powinien pojsc za pomoca Twych czarow??