Tlen przez jabberowego klienta

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

Wreszcie udało mi się doprowadzić do porządku ten kod, zmusić perlowe sockety to działania wedle mych zamierzeń i wreszcie zaczęło to działać.

Mowa o serwerze proxy napisanym w perlu, to właśnie przy tym męczył mnie moduł IO:Socket:INET, o czym w ostatniej notce się żaliłem. Czytanie z bufora przez sysread, po zastosowaniu łatki na non-blocking na Windowsie, zaczęło hulać ;)

Mal-XMPP<>Tlen-Proxy-Server służy do jednego celu, jest pośrednikiem miedzy naszm klientem Jabbera/XMPP a serwerem tlen.pl. Dzięki niemu poprzez dowolny jabberowy klient, obsługującym połączenia przez proxy HTTP Connect, możemy korzystać z sieci tlen.pl.

Pomyśl projektu zrodził się za sprawą dawnej dyskusji na forum polskiej społeczności jabberowej. Niedawno znów trafiłem na ten temat i tak jakoś wyszło, chciałem spróbować, no i wyszło, co wyszło.

Serwer proxy napisany został w perlu, w zamierzeniu ma przekształcać (transformować) za pomocą XSL strumienie XML klienta i serwera na odpowiedni format drugiej strony.
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, ze 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łowny mały screenik ;)

mal-xmpp-tlen-proxy-server

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

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

Wkurzyło mnie wykorzystanie urlencode prze twórców tlena do wszystkiego co może zawierać dowolne znaki. Ile z tym kombinowania, aby jakiś dobry reg ex napisać. W sumie wszystko, co zawarte jest między tagami i wszystkie atrybuty oprócz type i id oraz namespace będę kodował, 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 jaberze, a reszta znaków w odpowiednim kodowaniu XML-a i nie ma żadnych problemów.
A w tlenie zawsze jakieś niespodzianki...

8 przemyśleń nt. „Tlen przez jabberowego klienta”

  1. 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! :)

  2. To oczywiste ze kompilowane sa wydajniejsze ;)

    Jednym z glownych odbiorcow mieli byc zwykli userzy, ktorzy mogliby sobie na localu odpalic serwer i korzystac. Wtedy IMHO na *nixowych maszynach z perlem mysle ,ze nie byloby niespodzianek, a kazdy poradzilby sobie z tym, niz z kompilacja i zabawa :P

    Bralem rowniez opcje publicznego serwera dla kazdego, nawet dobry pomysl ;)
    Dlatego, jesli bylby ktos chetny na swojej maszynie takie cos „postawic” dla dobra ludzkosci, do tego byloby w miare duze zainteresowanie i ruch, to nie widze przeszkod, aby przepisac na C/C++ i wydac takowa wersje ;)

  3. 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.

  4. 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ę :)

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *