ChatLogo

ChatSystem

The Ultimate Way to Improve Your Work Performance

Olli Lammi <olammi@iki.fi>

(päivitetty viimeksi 7.1.1999)

[English version] [Finnish version]

[Yleistä] [Ominaisuudet] [Käyttöohjeet] [Virheet ja näkymät] [Download] [Palaute]

Yleistä

ChatSystem on Internet-keskustelujärjestelmä, joka on suunniteltu pienen ydintyöryhmän turvalliseen keskusteluun. Järjestelmää ei ole tarkoitettu suurten käyttäjämäärien yhtäaikaiseen keskusteluun. Järjestelmään on pyritty luomaan toimintoja, joista on hyötyä juuri ryhmäkommunikaatiossa.

Työkalut ja menetelmät

Lähtökohtana oli järjestelmä, jossa voi samanaikaisesti olla useissa eri arkkitehtuureissa toimivia asiakkaita. Järjestelmän runkona on C++:lla toteutettu protokollakokonaisuus, jonka päälle eri arkkitehtuurien asiakas- ja palvelinsovellukset on rakennettu. Tällä hetkellä valmiina on UNIX- ja Windows 95/NT -asiakkaat ja -palvelimet. Jos aikaa riittää, tavoitteena on saada aikaan myös Java-Client, jota varten protokollarunko joudutaan siirtämään Javalle.

Toteutustyökaluina on alkuvaiheessa käytetty lähinnä Linux-työasemaa, Pico-editoria, GNU C++ -kääntäjää, kahvia ja ruokaa sekä muutamia keskioluita. Protokollarungon ja UNIX-sovellusten muotouduttua järjestelmä siirtyi tiiviiseen testaukseen viiden hengen kriittisen ydinryhmän viihdykkeeksi. Protokollan koettua monenmoista eroosiota kritiikin, korjausten ja lisäysten johdosta, saatiin lopulta aikaan "lopullinen" ja "toimiva" runko, jonka päälle siirryin rakentamaan Windows-sovelluksia.

Loppuvaiheen Windows-ympäristöön sovittaminen sujui odotettua kivuttomammin. Joitain muutoksia tuli lähinnä socketien käyttöön ja muutamia lisäpiirteitä sovitettiin yleisön pyynnöstä järjestelmään. Kehitystyökaluna olen Windows-maailmassa käyttänyt Borland C++ Builder 1.0 -sovelluskehitintä, joka pienten alkukankeuksien (luetaan niitä manuaalisivuja...) jälkeen on osoittautunut loistavaksi työkaluksi. Samoin havaitsin Microsoft Visual Source Safe 5.0 -versionhallintaohjelmiston loistavaksi apuvälineeksi ohjelmistokehityksessä. Vanhat kokemukset SCCS:stä ja RCS:stä ovat nyttemmin hieman laimeita.

Chat-protokolla

Protokollan toteutuksessa on käytetty mahdollisimman standardia C++:aa. Järjestelmä on kokonaisuudessaan oliopohjainen, joten C++-toteutus on siirrettävissä kohtuullisella vaivalla Javalle (toivottavasti). Ainoa erikoisempi yleisessä toteutuksessa tarvittava kirjasto/palvelu on BSD-socketit, jotka löytyvät usemmista ympäristöistä ja sovellettuna myös Javasta.

Chat-protokolla on siirtotiellä salattu ja tiedon kulku yhteydellä on varmistettu PDU:iden numeroinnilla ja stop-and-go-menetelmällä. Yksittäinen viestipaketti on turvallisuussyistä rajoitettu kahdeksaan kilotavuun, mutta rajaa on mahdollisuus kasvattaa kääntämällä järjestelmä uudestaan. Protokollaan kuuluu yhteydenmuodostus, synkronointi, informaation siirto, datan siirto, salasanan turvallinen vaihto sekä yhteyden purku.

Salausmenetelmänä on käytetty hatustavedettyä menetelmää, joka ei varmasti ole 100% varma, mutta kuitenkin melko monimutkainen ja kestää varmasti kevyet kuunteluyritykset. Salauksen koodipohja on kuitenkin siten tehty, että menetelmää on kohtuullisen helppo muuttaa, jos siihen tulee tarvetta. Ehkäpä kryptologiakurssi olisi paikallaan.

Salaus perustuu salasanasta, vakioavaimesta ja pseudosatunnaislukujonosta muodostettuun avaimeen. Jokaisella siirtotien paketilla on siis eri salausavain. Avain on 32-bittinen ja menetelmänä käytetään XOR:a. 32 bitin pseudosatunnaislukugeneraattori alustetaan kellonajalla ja käyttäjän salasanalla. Asiakkaan ja palvelimen generaattorien tulee siis olla synkronissa, jotta yhteys toimisi. Asiakassovelluksen kello synkronoidaan palvelimen kanssa parin sekunnin tarkkuudella yhteyden avauksen yhteydessä. Asiakassovelluksessa näkyvät kellonajat ovat siis palvelimen antamassa Chat-ajassa. Salasanaa ei koskaan lähetetä selväkielisenä yhteyden yli. Yhteyden avaamisen yhteydessä tunnuksen varmistus tapahtuu monivaiheisella kättelyllä, jonka aikana tapahtuu myös generaattoreiden synkronointi.

ChatClient-asiakassovellus

ChatClient-asiakassovelluksesta on tehty tällä hetkellä merkkipohjainen UNIX-versio ja graafinen Windows-versio. Tulevaisuudessa tehtäväksi saattaa tulla Java-applettina toimiva sovellus. Jossain vaiheessa joku on maininnut jopa X-ikkunointia tukevan version tekemisen, mutta tässä vaiheessa asia näyttää vielä kaukaiselta.

Asiakasversiot on tehty toteuttamlla saman protokollarajapinnan päälle erilaiset käyttöliittymät. Eri asiakasversioissa on samat ominaisuudet vain hieman eri lailla toteutettuna. Windows-käyttöliittymässä konfigurointi ja yhteyksien hallinta on tehty graafisilla käyttöliittymäkomponenteilla. Versioiden käyttö on pyritty kuitenkin tekemään mahdollisimman samanlaiseksi näppäinyhdistelmien ja toiminnan kannalta, jotta eri versioiden välillä olisi helppo siirtyä.

UNIX-asiakkaan käyttöliittymä on toteutettu curses-kirjaston avulla. Minä ja curses emme olleet mitenkään hyviä kavereita alusta asti, eikä meidän suhdettamme voi kyllä vieläkään luonnehtia mitenkään lämpimäksi (engl. curse - kirous). Käyttöliittymästä tuli kuitenkin olosuhteisiin nähden melko toimiva ja sen on todettu toimivan eri arkkitehtuureissa eri curses-kirjastoversioilla.

ChatServer-palvelinsovellus

ChatServer-palvelin on Chat-protokollan päälle rakennettu hyvin yksinkertainen sovellus. Protokolla hoitaa automaattisesti suurimman osan toiminnasta. Palvelimet on suunniteltu toimimaan taustalla, eivätkä ne tarvitse konfiguraatioparametrien asettamisen jälkeen käyttäjän huomiota.

UNIX-palvelin konfiguroidaan parametritiedostolla. Käyttäjärekisterin hallintaan on oma ohjelmansa. Windows-versiossa konfiguraatioparametrien, yhteyksien ja käyttäjärekisterin hallinta on koottu palvelimen yhteyteen graafiseksi käyttöliittymäksi. Käyttäjien ja parametrien hallinta onnistuu molemmissa versioissa myös palvelimen ollessa toiminnassa.

Palvelimen perustan toteutuksessa ei ole käytetty mitään erityisiä ohjelmakirjastoja. Windows-version käyttöliittymä vaatii tietenkin asianmukaisen kirjastotuen kääntämistä varten.

Lopuksi

ChatSystem on täysin ohjelmistoteknisestä kiinnostuksesta syntynyt yhden miehen projekti, jonka tarkoituksena ei ollut tuottaa ennennäkemätöntä Internet-keskustelujärjestelmää. Tarkoituksena oli tuottaa hyvin yksinkertainen tuote, jonka avulla voin kokeilla useita eri ohjelmointitekniikoita ja -ympäristöjä ja opetella verkko- ja protokollaohjelmointia sekä saada vielä kaiken lisäksi aikaan jotain toimivaa, josta voisi olla jollekin jotain iloa. Järjestelmää on koekäytetty nyt kesäkuusta 1997 asti. Samalla on menestyksekkäästi häiritty useiden henkilöiden töiden ja opiskelun edistymistä. Testauksen edetessä on löytynyt useita virheitä ja parannusehdotuksia, joita on korjattu ja toteutettu kun on ollut aikaa ja kiinnostusta.


Yhteenveto ominaisuuksista


Käyttöohjeet (työn alla)

Seuraavassa on lyhyet käyttöohjeet asiakassovelluksiin sekä lyhyt toiminto- ja konfigurointimahdollisuuslista palvelimesta.


Havaitut virheet ja tulevaisuudennäkymät

Alla on listattu ChatSystemistä löytyneitä virheitä ja puutteita, joihin on mahdollisesti tulossa korjaus tuleviin versioihin sekä tulevaisuudennäkymiä ominaisuuksista, joita Chatin tulevissa versioissa kenties nähdään.

Havaitut virheet

Uusia piirteitä


Download

HUOM!

ChatClient on ajettavissa Tampereen teknillisen korkeakoulun UNIX-koneilla seuraavissa hakemistopoluissa:

Lintula (cs.tut.fi):
~olammi/bin/chat/chatc
Proffa (proffa.cc.tut.fi):
~olammi/bin/chat/chatc

ChatServerin tutustumisversiot (ks. alla) ovat samoin ajettavissa em. koneilla seuraavissa hakemistopoluissa:

Lintula (cs.tut.fi):
~olammi/bin/chat/chats_eval
Proffa (proffa.cc.tut.fi):
~olammi/bin/chat/chats_eval

ChatClient:

Täysin toimivat ChatClient-versiot (Beta):

UNIX-asiakas voidaan kääntää myös moniin muihin kohdeympäristöihin, jotka vain tukevat curses-kirjastoa ja BSD-socketeja. Tällä hetkellä Client kääntyy ainakin Linux-, Solaris- ja Digital UNIX-ympäristöihin.

ChatServer:

Rajoitetut ChatServer-versiot tutustumista varten. Sallii vain kaksi samanaikaista avointa asiakasyhteyttä palvelimeen. Ei lokitoimintoja, neljä kokeilukäyttäjätunnusta (Usernames: chat, chat2, chat3 ja chat4, Passwords: chat), ei konfiguroitavissa (kiinteät palvelinportit 5666).

Jos olet kiinnostunut täydellisistä palvelinversioista, tiedustele lisää sähköpostitse. Palvelin on helposti käännettävissä ylläolevien mahdollisuuksien lisäksi lähes mihin tahansa BSD-socketeja tukevaan ympäristöön (lähdekoodi C++:aa).


Palaute

Järjestelmä on vielä kehitysasteella, joten virheitä ja puutteita saattaa esiintyä. Jos havaitset toiminnassa jotain korjattavaa tai epäkäytännöllisyyttä, voit lähettää allekirjoittaneelle sähköpostia, jossa kuvaat virheen tai parannusehdotuksesi. Katsotaan sitten, mitä asialle voidaan tehdä.

Olen kiitollinen kaikesta palautteesta.


Olli Lammi LeHTori - HTML OK