Tlen przez jabberowego klienta

16 sierpnia 2007

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…

Podobne notatki:

Może zainteresują Cię również następujące, pododbne notatki:

Komentarze i nawiązania (8)

Kanał RSS komentarzy

  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. Dobra robota, tak trzymać :)

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

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

  6. Czy może coś „w temacie” się ruszyło?

  7. Cos tam sie rusza, w C++ powstaje, tyle ze male problemiki z XSLT ;)

  8. MalColm, naprawde fajna robote robisz :)
    Korzystajac z PSI lub innego klienta jabbera na MACa tez tlenik powinien pojsc za pomoca Twych czarow??

Dodaj swój komentarz

Możesz użyć tych tagów XHTML-a: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Jeśli chcesz wstawić kilku linijkowy fragment kodu, użyj tagów <pre lang="x"></pre> (gdzie x język kodu np. cpp, perl, html). W ten sposób kod zostanie odpowiednio sformatowany i pokolorowany przez system.

Uwaga!

Na tym blogu działa system cache oraz filtr antyspamowy. Twój komentarz może być widoczny na stronie z pewnym opóźnieniem. Proszę o cierpliwość. Jeśli utraciłeś już wszystkie jej zasoby poinformuj mnie o tym, być może system uznał Cię za spamera ;)