echelon-0.1.0/0040755000175000017500000000000007220347622013331 5ustar marillatmarillatechelon-0.1.0/doc/0040755000175000017500000000000007220227557014102 5ustar marillatmarillatechelon-0.1.0/doc/LISEZMOI0100644000175000017500000001277307220225362015257 0ustar marillatmarillat =========================================================== | echelon --- tout ce que vous avez toujours voulu savoir...| |===========================================================| | | | Auteur : Patrice KARATCHENTZEFF © 2000 | | Licence : GPL bien-sûr... | | | =========================================================== echelon est un petit programme destiné originellement à ma mère pour se servir de son petit système Linux pour lire et émettre ses courriels. Comme elle est loin d'une experte en informatique, et ce n'est pas peu de le dire, j'ai écrit cette petite application pour lui faciliter la vie. Et finalement, je l'ai adoptée moi aussi :-) Le but: se connecter aisément d'un clic de souris, se déconnecter de la même manière, rapatrier le courrier électronique, comptabiliser le temps de connexion et visualiser l'état des courriels en partance. Pour le moment, j'y ai aussi inclus l'affichage des journaux de bord suivants: /var/log/messages /var/log/mail.log /var/log/{exim,smail}/logfile Ils s'affichent en couleur, ce qui facilite la lecture. L'intérêt principal de cette fonctionnalité est de pouvoir dialoguer avec un utilisateur à distance (par téléphone typiquement) en cas de problème et d'obtenir les informations pertinentes aisément sans demander des opérations acrobatiques à l'utilisateur. La configuration est aisée via une interface graphique. Elle n'est pas encore tout à fait terminée mais elle est très suffisante pour régler les opérations de base. Les statistiques de connexions sont aussi rangées dans ~/.echelonrc/statistic/ mais la version 0.1 ne les exploitent pas encore. Si vous êtes curieux, vous pourrez remonter vos traces. Les statistiques sont rangées par mois. La version 0.2 gardera plus d'informations (nombre de courriels transmis, reçus, nombre d'octets émis et recus, etc...). Il faut un système Debian fonctionnel (2.1 ou 2.2), un MTA (exim ou smail) de configuré correctement et fetchmail fonctionnel. Les scripts pon et poff doivent aussi pouvoir tourner. Le tout sans être root (donc bien savoir configurer les accès aux différents groupes pour un utilisateur quelconque). Je compte ajouter rapidement les fonctionalités suivantes: - statistiques de connexions (temps de connexion cumulés, ...) - info système (toujours pour le débogage à distance) - internationnalisation (si demande...) - configuration interface via une boîte de dialogues (couleurs, fontes,...) - aide en ligne echelon ne fonctionne que sur Debian. slink ou potato. Comme la cible initiale était un utilisateur novice, j'ai fait en sorte de limiter fortement la casse possible. Ainsi, les boutons connexion et déconnexion sont exclusifs et il ne sera pas possible de quitter le logiciel sans se déconnecter auparavant (Pas encore dans la version 0.1...). Les messages sont aussi verbeux que possible pour aider l'utilisateur. J'espère avoir prévu tous les cas possibles d'erreurs. Il est encore possible de lancer plusieurs fetchmail consécutivement: je vais faire le nécessaire pour l'empêcher. Pour le moment, pour utiliser echelon, il faut avoir perl et perl-Tk installé. Installez le paquet echelon par la méthode de votre choix (dpkg, dselect ou apt). Assurez-vous que l'utilisateur « user » qui va l'utiliser posséde les droits nécessaires: $ su $ addgroup user adm (pour lire les journaux de bord) $ addgroup user mail (pour exim) $ addgroup user dip (pour se connecter via le modem) echelon utilise les journaux de bord pour analyser (connexion effective, courriels entrant et sortant, ...). Je ne connais pas les effets de bord en terme de sécurité. Attention donc aux environnements à risque (surtout pour adm). Ceci est une des raisons pour lesquelle echelon ne tourne que sur Debian. Le portage se fera peut-être pour une autre distribution plus tard. Enfin, lancez-le: $ ./echelon & Le fonctionnement est très intuitif donc je vous le laisse le découvrir. En gros, vous pouvez vous connecter et vous déconnecter. Appuyer sur « rapatrier le courrier » fork sur fetchmail alors n'appuyer qu'une fois... Pour le reste, echelon vous guidera intégralement. Prière de m'envoyer un retour, même et surtout si cela fonctionne correctement. Pour le support d'autres MTA (que exim et smail), prière de m'envoyer votre fichier de journal de bord correspondant (et qui soit significatif: connexion réussie, échouée, pas de courriels, plusieurs courriels, un seul courriel, ...). Donner aussi le nom avec le chemin absolu, ainsi que les droits et le groupe correspondant. M'envoyer un petit courriel AVANT en précisant quel type de MTA vous allez m'envoyer. Ne rien m'envoyer AVANT ma réponse pour éviter les doublons. Prière de comprimer avec bzip et d'envoyer quelque chose de raisonnable... (< 300 ko). Vous pouvez me contacter en français ou en anglais indifféremment. BOGUES CONNUS: ============= + sur slink, en sortie de programme, on a le message: « Attempt to free unreferenced scalar. ». Pas encore compris pourquoi. + sur slink, le chop ne fonctionne pas pareil que sur potato. Il y a donc une magouille en interne pour avoir les mêmes résultats. Ce n'est pas joli mais c'est « en attendant... ». Je n'ai pas eu le temps d'approfondir la question. AVANT de m'envoyer des questions, assurez-vous d'avoir bien lu la FAQ que vous trouverez dans /usr/share/doc/echelon/FAQ. Un remerciement tout spécial à Christian Marillat pour m'avoir empaqueter echelon comme un beau paquet debian. PK echelon-0.1.0/doc/FAQ.sgml0100644000175000017500000002512007220227313015360 0ustar marillatmarillat Foire aux question sur echelon Patrice Karatchentzeff 20 décembre 2000 Ceci est un condensé des questions et des réponses associées les plus fréquemment posés sur echelon Copyright © 2000 Patrice Karatchentzeff J'utilise smail et lorsque que je lance echelon la première fois, j'obtiens un « Ouverture de MAILOUT impossible: No such file or directory at ./echelon line 1562 ».

Mea culpa. C'est un bogue que je n'ai pas encore fixé. Le MTA est par défaut exim donc échelon s'attend à trouver le fichier de log de exim. En tentant de l'ouvrir, puisqu'il n'existe pas, il plante l'application. Pour fixer cela, éditez le fichier ~/.echelonrc/preferences et modifiez $MTA = "Exim"; en $MTA = "Smail"; (Attention, aux majuscules et à la ponctuation). Relancez echelon et tout devrait fonctionner. Dans le menu préférences, les champs Apparence et Décompte sont vides. Hé oui, la version 0.1 n'est pas encore la version 1.0. Patience donc... le fichier ~/.echelonrc/preferences est bien compliqué. Pourquoi n'avoir pas fait un bête fichier de configuration « standard » ?

Ce fichier est en fait une part intégrante du programme echelon. J'ai délibérement laissé cette partie en Perl pour sa souplesse. Les gens ne connaissant pas Perl peuvent très bien utiliser le menu de préférence pour configurer echelon. Les autres font ce qu'ils veulent... Pourquoi doit relancer echelon en cas de changement dans le menu préférence pour le MTA ?

On pourrait parler de bogue encore... Quoique. Il faut à nouveau « parser » les journaux de bord du MTA had hoc. Je ne l'ai pas encore implémenté. Le plus simple est alors de faire relancer echelon à l'utilisateur. Que se passe-t-il si l'on se trompe sur le nombre de compte POP que va vider fetchmail ?

Dans l'absolu, on ne craint rien. fetchmail va bien se dérouler et vous ne perdrez rien. Par contre, les indications renvoyées par echelon seront erronnées. À la fin de chaque « vidange », il vous dira que c'est fini et que vous pouvez vous déconnecter. Par contre, le décompte des courriels en cours de téléchargement sera toujours exact. Comment connaître le nombre de courriels en cours d'émission ?

Attendre la version 0.2 de echelon. echelon est super (merci :-)). Je voudrais participer: comment faire ?

Pour le moment je travaille tout seul (sauf Christian qui m'a fait le paquet Debian). J'aurai besoin d'aide pour l'internationnalisation (pour la traduction) si la demande dans ce sens se fait sentir. La version 0.1 tient dans un seul fichier assez gros. La version 0.2 sera découpée en plusieurs fichiers pour plus de facilités de développement. À ce moment, des contributions extérieures seront possibles (notamment pour le support d'autres MTA par exemple). La programmation est très modulaire et donc la participation sera facile. Je veux devenir bétâ-(alpha?)testeur

Je n'ai pas à disposition de site pour télécharger une révision de développement. Envoyez-moi simplement un courriel et je vous enverrai la version en cours. Si cela prend trop d'ampleur, on verra à passer de l'artisanat à quelque chose de plus sérieux. Je voudrai une nouvelle fonctionnalité ou bien telle implémentation de telle fonctionnalité n'est pas terrible... Ce serait bien si on pouvait... etc...

Dîtes-le moi. Tout simplement. Le projet peut se développer différemment si le besoin s'en fait sentir. Je suis ouvert. Au moins à la discussion. Je ne promet rien mais j'essaierai de satisfaire les demandes. Dans la mesure du raisonnable. Et de mes moyens. Je voudrai une version dans une autre langue (anglais, allemand,...).

Ce n'est pas planifié avant la version 0.3. Et encore, uniquement s'il y a de la demande. Et de l'aide. J'aurai bien une remarque à faire mais je n'ose pas la faire.

AUCUNE remarque n'est inutile. La moindre petite faute est à corriger, que ce soit d'orthographe, de grammaire ou de code. Alors, n'hésitez pas. Je n'ai jamais mangé personne. Pas encore :-) Ou peut-on trouver de la doc ?

Cela va venir avec la version 0.2. Du moins, j'espère. En attendant, allez dans /usr/share/doc/echelon. Il y a la présente FAQ et une petite introduction. La FAQ est au format sgml debiandoc. La page man viendra avec le temps... Dans le menu préférence, on ne propose pas plus de 6 boîtes POP. Or moi, j'en ai plus...

La liste est indicative: c'est tout. Vous devez entrer à la main le nombre de comptes que vous avez. Et sauvegarder. Le programme echelon est trop long à lire...

En effet, la version 0.1 comporte près de 2200 lignes dans un seul fichier. Je n'ai pas vu la taille grossir pour ce premier objectif. La version 0.2 va être complètement transformé pour plus de lisibilité. Je n'aime pas les couleurs...

Patience. La version 0.2 offrira une personnalisation plus poussée. En attendant, vous pouvez toujours éditer le programme et changer le $top -> setPalette... Pourquoi la connexion passe au vert et que l'on obtient pas le droit d'aller rapatrier le courrier immédiatement ?

Il s'agit en fait du temps de facturation. Il y a facturation chez votre FAI lorsque ppp établit une connexion et négocie tout ce dont vous avez besoin pour apparaître sur le réseau, avec en particulier votre adresse IP locale. En attendant, vous payez la communication. C'est dégueulasse mais c'est comme cela... Le temps de négociation est assez court mais non négligeable: chez moi (club-internet et free), cela va de 0 seconde à plus de 5 secondes. Répété un certain nombre de fois, cela fait rapidement un temps conséquent. Pourquoi echelon semble figer pendant le rapatriement du courrier ?

C'est votre fournisseur qui n'envoie rien... Testez avec un outil de visualisation en direct des trames émises (j'utilise wmnet). echelon ne fait reproduire que la triste réalité des faits. En particulier, si le serveur SMTP de votre FAI est mauvais, vous attendrez...

Je compte dans une version ultérieure inclure à côté du bouton de raptriement une petite innterface indiquant le trafic ppp. Peut-on interrompre une connexion en cours, même si fetchmail tourne ?

Oui, pour le moment. Après, je vais certainement blinder la chose. J'ai un abonnement XX heures par mois. Quand faut-il que je coupe pour optimiser mes temps de connexion ?

C'est facile: il suffit de regarder le temps de connexion. Vous êtes généralement facturé à la minute (allez quand même vérifier...) avec un contrat du genre: « toute minute commnencée est due.... ». Mon compteur de temps est normalement callé sur celui de facturation du FAI (qui comme vous pouvez le voir ne correspond pas à votre temps réel d'exploitation). Il vous suffit donc de couper juste avant la fin d'une unité de temps (en l'occurence d'une minute). Couper vers 55 secondes pour être tranquille: la déconnexion est quasi-instantannée.

Il faut quand bien souligner que cette façon de faire des FAI est bien dégueulasse alors qu'une facturation à la seconde est facile à faire. Mais, comme en politique, le pigeon est toujours celui qui y croit... Ou alors les informaticiens des FAI ne valent pas un clou... Peut-on avoir le temps complet d'utilisation depuis un certain temps ?

C'est en cours de développement... Certainement dans la version 0.2 Pourquoi l'avoir appelé echelon ?

Et pourquoi pas ? Parce que cela me plait :-) En fait, je l'ai appelé ainsi car au final, ce programme sera un véritable mouchard. Cela ne vous rappelle rien, n'est-ce pas ? « Amis » de la NSA, je vous emm... bien :-) Licence et garantie

C'est du GPL alors pas de garantie :-) (cf votre www.fsf.org/gpl pour plus de détails...) echelon consomme en permanence presque 10% des ressources cpu de mon pentium sans rien faire. Pourquoi ?

En fait, l'affichage de l'heure à la seconde est coûteuse. Je prévois une option pour les petites configurations qui permettra de n'afficher au choix que les minutes. Cela devrait résoudre le problème. Ce n'est quand même pas une grande gêne... Pas essayé sur un 486. Un retour serait appréciable. Quel est le langage utilisé pour écrire echelon ?

C'est du Perl pour tous les traitements. Pour l'interface, il s'agit de Tk. Le couple Perl-Tk est très agréable à utiliser et l'emploi de Tk permet de faire de belles interfaces graphiques, sans se fatiguer. les sources ne sont pas ou peu commentée...

Je ne commente jamais un algorithme, ou si peu. Par contre, toutes les variables le sont. J'ai aussi succintement décrit les sous-programmes. Cela devrait largement suffire. Le Perl, et en particulier ma façon de l'écrire, se suffit à lui-même. Même en ce qui concerne Tk. Le code est très aéré pour permettre une visualisation et une compréhension accrue. Enfin, les commentaires sont en anglais pour permettre à tout le monde de les suivre. Et les variables portent des noms parlants. J'ai tout découpé en petits sous-programmes pour une modularité accrue.

Ma façon d'écrire n'est pas très économique. On pourrait facilement gagner 30% en gain de place. Je le sais. Mais quel est l'intérêt pour un langage interprêté (et pour un langage tout court...) ? Au moins, tout le monde peut lire les sources facilement, sans être un expert de Perl (ce que je ne suis pas). Si d'ailleurs un expert relève une façon plus pertinente de traiter certaines parties, qu'il ne se gêne pas pour me proposer quelque chose de mieux (avec un justificatif: du genre algo plus rapide, moins coûteux en mémoire, etc...).

Il y a peut-être des modules de la CPAN qui font mieux que ce que j'ai écrit. Je veux bien les utiliser s'ils font parti de la distribution de base d'une potato. Sinon non. echelon-0.1.0/doc/FAQ.txt0100644000175000017500000004173007220227546015252 0ustar marillatmarillat Foire aux question sur echelon ------------------------------ Patrice Karatchentzeff 20 décembre 2000 ------------------------------------------------------------------------------- Résumé ------ Ceci est un condensé des questions et des réponses associées les plus fréquemment posés sur echelon Copyright --------- Copyright (C) 2000 Patrice Karatchentzeff ------------------------------------------------------------------------------- Table des matières ------------------ 1. J'utilise `smail' et lorsque que je lance `echelon' la première fois, j'obtiens un _«Ouverture de MAILOUT impossible: No such file or directory at ./echelon line 1562»_. 2. Dans le menu `préférences', les champs `Apparence' et `Décompte' sont vides. Hé oui, la version 0.1 n'est pas encore la version 1.0. Patience donc... 3. le fichier _~/.echelonrc/preferences_ est bien compliqué. Pourquoi n'avoir pas fait un bête fichier de configuration «standard»? 4. Pourquoi doit relancer `echelon' en cas de changement dans le menu _préférence_ pour le MTA ? 5. Que se passe-t-il si l'on se trompe sur le nombre de compte POP que va vider `fetchmail' ? 6. Comment connaître le nombre de courriels en cours d'émission ? 7. `echelon' est super (merci :-)). Je voudrais participer: comment faire ? 8. Je veux devenir bétâ-(alpha?)testeur 9. Je voudrai une nouvelle fonctionnalité ou bien telle implémentation de telle fonctionnalité n'est pas terrible... Ce serait bien si on pouvait... etc... 10. Je voudrai une version dans une autre langue (anglais, allemand,...). 11. J'aurai bien une remarque à faire mais je n'ose pas la faire. 12. Ou peut-on trouver de la doc ? 13. Dans le menu _préférence_, on ne propose pas plus de 6 boîtes POP. Or moi, j'en ai plus... 14. Le programme `echelon' est trop long à lire... 15. Je n'aime pas les couleurs... 16. Pourquoi la connexion passe au vert et que l'on obtient pas le droit d'aller rapatrier le courrier immédiatement ? 17. Pourquoi `echelon' semble figer pendant le rapatriement du courrier ? 18. Peut-on interrompre une connexion en cours, même si fetchmail tourne ? 19. J'ai un abonnement XX heures par mois. Quand faut-il que je coupe pour optimiser mes temps de connexion ? 20. Peut-on avoir le temps complet d'utilisation depuis un certain temps ? 21. Pourquoi l'avoir appelé `echelon' ? 22. Licence et garantie 23. `echelon' consomme en permanence presque 10% des ressources cpu de mon pentium sans rien faire. Pourquoi ? 24. Quel est le langage utilisé pour écrire echelon ? 25. les sources ne sont pas ou peu commentée... ------------------------------------------------------------------------------- 1. J'utilise `smail' et lorsque que je lance `echelon' la première fois, j'obtiens un _«Ouverture de MAILOUT impossible: No such file or directory at ./echelon line 1562»_. ---------------------------------------------------------------------------- Mea culpa. C'est un bogue que je n'ai pas encore fixé. Le MTA est par défaut `exim' donc `échelon' s'attend à trouver le fichier de log de `exim'. En tentant de l'ouvrir, puisqu'il n'existe pas, il plante l'application. Pour fixer cela, éditez le fichier _~/.echelonrc/preferences_ et modifiez $MTA = "Exim"; en $MTA = "Smail"; (Attention, aux majuscules et à la ponctuation). Relancez `echelon' et tout devrait fonctionner. ------------------------------------------------------------------------------- 2. Dans le menu `préférences', les champs `Apparence' et `Décompte' sont vides. Hé oui, la version 0.1 n'est pas encore la version 1.0. Patience donc... ---------------------------------------------------------------------------- ------------------------------------------------------------------------------- 3. le fichier _~/.echelonrc/preferences_ est bien compliqué. Pourquoi n'avoir pas fait un bête fichier de configuration «standard»? ---------------------------------------------------------------------------- Ce fichier est en fait une part intégrante du programme `echelon'. J'ai délibérement laissé cette partie en Perl pour sa souplesse. Les gens ne connaissant pas Perl peuvent très bien utiliser le menu de préférence pour configurer `echelon'. Les autres font ce qu'ils veulent... ------------------------------------------------------------------------------- 4. Pourquoi doit relancer `echelon' en cas de changement dans le menu _préférence_ pour le MTA ? ---------------------------------------------------------------------------- On pourrait parler de bogue encore... Quoique. Il faut à nouveau «parser» les journaux de bord du MTA _had hoc_. Je ne l'ai pas encore implémenté. Le plus simple est alors de faire relancer `echelon' à l'utilisateur. ------------------------------------------------------------------------------- 5. Que se passe-t-il si l'on se trompe sur le nombre de compte POP que va vider `fetchmail' ? ---------------------------------------------------------------------------- Dans l'absolu, on ne craint rien. `fetchmail' va bien se dérouler et vous ne perdrez rien. Par contre, les indications renvoyées par `echelon' seront erronnées. À la fin de chaque «vidange», il vous dira que c'est fini et que vous pouvez vous déconnecter. Par contre, le décompte des courriels en cours de téléchargement sera toujours exact. ------------------------------------------------------------------------------- 6. Comment connaître le nombre de courriels en cours d'émission ? ----------------------------------------------------------------- Attendre la version 0.2 de `echelon'. ------------------------------------------------------------------------------- 7. `echelon' est super (merci :-)). Je voudrais participer: comment faire ? --------------------------------------------------------------------------- Pour le moment je travaille tout seul (sauf Christian qui m'a fait le paquet Debian). J'aurai besoin d'aide pour l'internationnalisation (pour la traduction) si la demande dans ce sens se fait sentir. La version 0.1 tient dans un seul fichier assez gros. La version 0.2 sera découpée en plusieurs fichiers pour plus de facilités de développement. À ce moment, des contributions extérieures seront possibles (notamment pour le support d'autres MTA par exemple). La programmation est très modulaire et donc la participation sera facile. ------------------------------------------------------------------------------- 8. Je veux devenir bétâ-(alpha?)testeur --------------------------------------- Je n'ai pas à disposition de site pour télécharger une révision de développement. Envoyez-moi simplement un courriel et je vous enverrai la version en cours. Si cela prend trop d'ampleur, on verra à passer de l'artisanat à quelque chose de plus sérieux. ------------------------------------------------------------------------------- 9. Je voudrai une nouvelle fonctionnalité ou bien telle implémentation de telle fonctionnalité n'est pas terrible... Ce serait bien si on pouvait... etc... ---------------------------------------------------------------------------- Dîtes-le moi. Tout simplement. Le projet peut se développer différemment si le besoin s'en fait sentir. Je suis ouvert. Au moins à la discussion. Je ne promet rien mais j'essaierai de satisfaire les demandes. Dans la mesure du raisonnable. Et de mes moyens. ------------------------------------------------------------------------------- 10. Je voudrai une version dans une autre langue (anglais, allemand,...). ------------------------------------------------------------------------- Ce n'est pas planifié avant la version 0.3. Et encore, uniquement s'il y a de la demande. Et de l'aide. ------------------------------------------------------------------------------- 11. J'aurai bien une remarque à faire mais je n'ose pas la faire. ----------------------------------------------------------------- AUCUNE remarque n'est inutile. La moindre petite faute est à corriger, que ce soit d'orthographe, de grammaire ou de code. Alors, n'hésitez pas. Je n'ai jamais mangé personne. Pas encore :-) ------------------------------------------------------------------------------- 12. Ou peut-on trouver de la doc ? ---------------------------------- Cela va venir avec la version 0.2. Du moins, j'espère. En attendant, allez dans _/usr/share/doc/echelon_. Il y a la présente FAQ et une petite introduction. La FAQ est au format `sgml debiandoc'. La page `man' viendra avec le temps... ------------------------------------------------------------------------------- 13. Dans le menu _préférence_, on ne propose pas plus de 6 boîtes POP. Or moi, j'en ai plus... ---------------------------------------------------------------------------- La liste est indicative: c'est tout. Vous devez entrer à la main le nombre de comptes que vous avez. Et sauvegarder. ------------------------------------------------------------------------------- 14. Le programme `echelon' est trop long à lire... -------------------------------------------------- En effet, la version 0.1 comporte près de 2200 lignes dans un seul fichier. Je n'ai pas vu la taille grossir pour ce premier objectif. La version 0.2 va être complètement transformé pour plus de lisibilité. ------------------------------------------------------------------------------- 15. Je n'aime pas les couleurs... --------------------------------- Patience. La version 0.2 offrira une personnalisation plus poussée. En attendant, vous pouvez toujours éditer le programme et changer le $top -> setPalette ... ------------------------------------------------------------------------------- 16. Pourquoi la connexion passe au vert et que l'on obtient pas le droit d'aller rapatrier le courrier immédiatement ? ---------------------------------------------------------------------------- Il s'agit en fait du temps de facturation. Il y a facturation chez votre FAI lorsque ppp établit une connexion et négocie tout ce dont vous avez besoin pour apparaître sur le réseau, avec en particulier votre adresse IP locale. En attendant, vous payez la communication. C'est dégueulasse mais c'est comme cela... Le temps de négociation est assez court mais non négligeable: chez moi (club-internet et free), cela va de 0 seconde à plus de 5 secondes. Répété un certain nombre de fois, cela fait rapidement un temps conséquent. ------------------------------------------------------------------------------- 17. Pourquoi `echelon' semble figer pendant le rapatriement du courrier ? ------------------------------------------------------------------------- C'est votre fournisseur qui n'envoie rien... Testez avec un outil de visualisation en direct des trames émises (j'utilise `wmnet'). echelon ne fait reproduire que la triste réalité des faits. En particulier, si le serveur SMTP de votre FAI est mauvais, vous attendrez... Je compte dans une version ultérieure inclure à côté du bouton de raptriement une petite innterface indiquant le trafic ppp. ------------------------------------------------------------------------------- 18. Peut-on interrompre une connexion en cours, même si fetchmail tourne ? -------------------------------------------------------------------------- Oui, pour le moment. Après, je vais certainement blinder la chose. ------------------------------------------------------------------------------- 19. J'ai un abonnement XX heures par mois. Quand faut-il que je coupe pour optimiser mes temps de connexion ? ---------------------------------------------------------------------------- C'est facile: il suffit de regarder le temps de connexion. Vous êtes généralement facturé à la minute (allez quand même vérifier...) avec un contrat du genre: « toute minute commnencée est due.... ». Mon compteur de temps est normalement callé sur celui de facturation du FAI (qui comme vous pouvez le voir ne correspond pas à votre temps réel d'exploitation). Il vous suffit donc de couper juste avant la fin d'une unité de temps (en l'occurence d'une minute). Couper vers 55 secondes pour être tranquille: la déconnexion est quasi-instantannée. Il faut quand bien souligner que cette façon de faire des FAI est bien dégueulasse alors qu'une facturation à la seconde est facile à faire. Mais, comme en politique, le pigeon est toujours celui qui y croit... Ou alors les informaticiens des FAI ne valent pas un clou... ------------------------------------------------------------------------------- 20. Peut-on avoir le temps complet d'utilisation depuis un certain temps ? -------------------------------------------------------------------------- C'est en cours de développement... Certainement dans la version 0.2 ------------------------------------------------------------------------------- 21. Pourquoi l'avoir appelé `echelon' ? --------------------------------------- Et pourquoi pas ? Parce que cela me plait :-) En fait, je l'ai appelé ainsi car au final, ce programme sera un véritable mouchard. Cela ne vous rappelle rien, n'est-ce pas ? «Amis» de la NSA, je vous emm... bien :-) ------------------------------------------------------------------------------- 22. Licence et garantie ----------------------- C'est du GPL alors pas de garantie :-) (cf votre www.fsf.org/gpl pour plus de détails...) ------------------------------------------------------------------------------- 23. `echelon' consomme en permanence presque 10% des ressources cpu de mon pentium sans rien faire. Pourquoi ? ---------------------------------------------------------------------------- En fait, l'affichage de l'heure à la seconde est coûteuse. Je prévois une option pour les petites configurations qui permettra de n'afficher au choix que les minutes. Cela devrait résoudre le problème. Ce n'est quand même pas une grande gêne... Pas essayé sur un 486. Un retour serait appréciable. ------------------------------------------------------------------------------- 24. Quel est le langage utilisé pour écrire echelon ? ----------------------------------------------------- C'est du `Perl' pour tous les traitements. Pour l'interface, il s'agit de `Tk'. Le couple `Perl-Tk' est très agréable à utiliser et l'emploi de `Tk' permet de faire de belles interfaces graphiques, sans se fatiguer. ------------------------------------------------------------------------------- 25. les sources ne sont pas ou peu commentée... ----------------------------------------------- Je ne commente jamais un algorithme, ou si peu. Par contre, toutes les variables le sont. J'ai aussi succintement décrit les sous-programmes. Cela devrait largement suffire. Le Perl, et en particulier ma façon de l'écrire, se suffit à lui-même. Même en ce qui concerne Tk. Le code est très aéré pour permettre une visualisation et une compréhension accrue. Enfin, les commentaires sont en anglais pour permettre à tout le monde de les suivre. Et les variables portent des noms parlants. J'ai tout découpé en petits sous-programmes pour une modularité accrue. Ma façon d'écrire n'est pas très économique. On pourrait facilement gagner 30% en gain de place. Je le sais. Mais quel est l'intérêt pour un langage interprêté (et pour un langage tout court...) ? Au moins, tout le monde peut lire les sources facilement, sans être un expert de Perl (ce que je ne suis pas). Si d'ailleurs un expert relève une façon plus pertinente de traiter certaines parties, qu'il ne se gêne pas pour me proposer quelque chose de mieux (avec un justificatif: du genre algo plus rapide, moins coûteux en mémoire, etc...). Il y a peut-être des modules de la CPAN qui font mieux que ce que j'ai écrit. Je veux bien les utiliser s'ils font parti de la distribution de base d'une potato. Sinon non. ------------------------------------------------------------------------------- Foire aux question sur echelon Patrice Karatchentzeff 20 décembre 2000 echelon-0.1.0/doc/FAQ.html/0040755000175000017500000000000007220227054015444 5ustar marillatmarillatechelon-0.1.0/doc/FAQ.html/index.html0100644000175000017500000000755407220227316017452 0ustar marillatmarillat Foire aux question sur echelon


[ Résumé ] [ Copyright ] [ Table des matières ]

Foire aux question sur echelon


Résumé

Ceci est un condensé des questions et des réponses associées les plus fréquemment posés sur echelon

Copyright

Copyright © 2000 Patrice Karatchentzeff


Table des matières


[ Résumé ] [ Copyright ] [ Table des matières ]
Foire aux question sur echelon
20 décembre 2000
Patrice Karatchentzeff
echelon-0.1.0/doc/FAQ.html/ch1.html0100644000175000017500000000327307220227316017010 0ustar marillatmarillat Foire aux question sur echelon - J'utilise smail et lorsque que je lance echelon la première fois, j'obtiens un « Ouverture de MAILOUT impossible: No such file or directory at ./echelon line 1562 ».
[ Résumé ] [ Copyright ] [ Table des matières ] [ suivant ]

Foire aux question sur echelon
Chapitre 1 J'utilise smail et lorsque que je lance echelon la première fois, j'obtiens un « Ouverture de MAILOUT impossible: No such file or directory at ./echelon line 1562 ».


Mea culpa. C'est un bogue que je n'ai pas encore fixé. Le MTA est par défaut exim donc échelon s'attend à trouver le fichier de log de exim. En tentant de l'ouvrir, puisqu'il n'existe pas, il plante l'application. Pour fixer cela, éditez le fichier ~/.echelonrc/preferences et modifiez

     	$MTA = "Exim";
     en
     	$MTA = "Smail";

(Attention, aux majuscules et à la ponctuation). Relancez echelon et tout devrait fonctionner.


[ Résumé ] [ Copyright ] [ Table des matières ] [ suivant ]
Foire aux question sur echelon
20 décembre 2000
Patrice Karatchentzeff
echelon-0.1.0/doc/FAQ.html/ch2.html0100644000175000017500000000225307220227316017006 0ustar marillatmarillat Foire aux question sur echelon - Dans le menu préférences, les champs Apparence et Décompte sont vides. Hé oui, la version 0.1 n'est pas encore la version 1.0. Patience donc...
[ précedent ] [ Résumé ] [ Copyright ] [ Table des matières ] [ suivant ]

Foire aux question sur echelon
Chapitre 2 Dans le menu préférences, les champs Apparence et Décompte sont vides. Hé oui, la version 0.1 n'est pas encore la version 1.0. Patience donc...



[ précedent ] [ Résumé ] [ Copyright ] [ Table des matières ] [ suivant ]
Foire aux question sur echelon
20 décembre 2000
Patrice Karatchentzeff
echelon-0.1.0/doc/FAQ.html/ch3.html0100644000175000017500000000270207220227316017006 0ustar marillatmarillat Foire aux question sur echelon - le fichier ~/.echelonrc/preferences est bien compliqué. Pourquoi n'avoir pas fait un bête fichier de configuration « standard » ?
[ précedent ] [ Résumé ] [ Copyright ] [ Table des matières ] [ suivant ]

Foire aux question sur echelon
Chapitre 3 le fichier ~/.echelonrc/preferences est bien compliqué. Pourquoi n'avoir pas fait un bête fichier de configuration « standard » ?


Ce fichier est en fait une part intégrante du programme echelon. J'ai délibérement laissé cette partie en Perl pour sa souplesse. Les gens ne connaissant pas Perl peuvent très bien utiliser le menu de préférence pour configurer echelon. Les autres font ce qu'ils veulent...


[ précedent ] [ Résumé ] [ Copyright ] [ Table des matières ] [ suivant ]
Foire aux question sur echelon
20 décembre 2000
Patrice Karatchentzeff
echelon-0.1.0/doc/FAQ.html/ch4.html0100644000175000017500000000245607220227316017015 0ustar marillatmarillat Foire aux question sur echelon - Pourquoi doit relancer echelon en cas de changement dans le menu préférence pour le MTA ?
[ précedent ] [ Résumé ] [ Copyright ] [ Table des matières ] [ suivant ]

Foire aux question sur echelon
Chapitre 4 Pourquoi doit relancer echelon en cas de changement dans le menu préférence pour le MTA ?


On pourrait parler de bogue encore... Quoique. Il faut à nouveau « parser » les journaux de bord du MTA had hoc. Je ne l'ai pas encore implémenté. Le plus simple est alors de faire relancer echelon à l'utilisateur.


[ précedent ] [ Résumé ] [ Copyright ] [ Table des matières ] [ suivant ]
Foire aux question sur echelon
20 décembre 2000
Patrice Karatchentzeff
echelon-0.1.0/doc/FAQ.html/ch5.html0100644000175000017500000000264407220227316017015 0ustar marillatmarillat Foire aux question sur echelon - Que se passe-t-il si l'on se trompe sur le nombre de compte POP que va vider fetchmail ?
[ précedent ] [ Résumé ] [ Copyright ] [ Table des matières ] [ suivant ]

Foire aux question sur echelon
Chapitre 5 Que se passe-t-il si l'on se trompe sur le nombre de compte POP que va vider fetchmail ?


Dans l'absolu, on ne craint rien. fetchmail va bien se dérouler et vous ne perdrez rien. Par contre, les indications renvoyées par echelon seront erronnées. À la fin de chaque « vidange », il vous dira que c'est fini et que vous pouvez vous déconnecter. Par contre, le décompte des courriels en cours de téléchargement sera toujours exact.


[ précedent ] [ Résumé ] [ Copyright ] [ Table des matières ] [ suivant ]
Foire aux question sur echelon
20 décembre 2000
Patrice Karatchentzeff
echelon-0.1.0/doc/FAQ.html/ch6.html0100644000175000017500000000203007220227316017003 0ustar marillatmarillat Foire aux question sur echelon - Comment connaître le nombre de courriels en cours d'émission ?
[ précedent ] [ Résumé ] [ Copyright ] [ Table des matières ] [ suivant ]

Foire aux question sur echelon
Chapitre 6 Comment connaître le nombre de courriels en cours d'émission ?


Attendre la version 0.2 de echelon.


[ précedent ] [ Résumé ] [ Copyright ] [ Table des matières ] [ suivant ]
Foire aux question sur echelon
20 décembre 2000
Patrice Karatchentzeff
echelon-0.1.0/doc/FAQ.html/ch7.html0100644000175000017500000000304007220227316017006 0ustar marillatmarillat Foire aux question sur echelon - echelon est super (merci :-)). Je voudrais participer: comment faire ?
[ précedent ] [ Résumé ] [ Copyright ] [ Table des matières ] [ suivant ]

Foire aux question sur echelon
Chapitre 7 echelon est super (merci :-)). Je voudrais participer: comment faire ?


Pour le moment je travaille tout seul (sauf Christian qui m'a fait le paquet Debian). J'aurai besoin d'aide pour l'internationnalisation (pour la traduction) si la demande dans ce sens se fait sentir. La version 0.1 tient dans un seul fichier assez gros. La version 0.2 sera découpée en plusieurs fichiers pour plus de facilités de développement. À ce moment, des contributions extérieures seront possibles (notamment pour le support d'autres MTA par exemple). La programmation est très modulaire et donc la participation sera facile.


[ précedent ] [ Résumé ] [ Copyright ] [ Table des matières ] [ suivant ]
Foire aux question sur echelon
20 décembre 2000
Patrice Karatchentzeff
echelon-0.1.0/doc/FAQ.html/ch8.html0100644000175000017500000000226307220227316017015 0ustar marillatmarillat Foire aux question sur echelon - Je veux devenir bétâ-(alpha?)testeur
[ précedent ] [ Résumé ] [ Copyright ] [ Table des matières ] [ suivant ]

Foire aux question sur echelon
Chapitre 8 Je veux devenir bétâ-(alpha?)testeur


Je n'ai pas à disposition de site pour télécharger une révision de développement. Envoyez-moi simplement un courriel et je vous enverrai la version en cours. Si cela prend trop d'ampleur, on verra à passer de l'artisanat à quelque chose de plus sérieux.


[ précedent ] [ Résumé ] [ Copyright ] [ Table des matières ] [ suivant ]
Foire aux question sur echelon
20 décembre 2000
Patrice Karatchentzeff
echelon-0.1.0/doc/FAQ.html/ch9.html0100644000175000017500000000264607220227316017023 0ustar marillatmarillat Foire aux question sur echelon - Je voudrai une nouvelle fonctionnalité ou bien telle implémentation de telle fonctionnalité n'est pas terrible... Ce serait bien si on pouvait... etc...
[ précedent ] [ Résumé ] [ Copyright ] [ Table des matières ] [ suivant ]

Foire aux question sur echelon
Chapitre 9 Je voudrai une nouvelle fonctionnalité ou bien telle implémentation de telle fonctionnalité n'est pas terrible... Ce serait bien si on pouvait... etc...


Dîtes-le moi. Tout simplement. Le projet peut se développer différemment si le besoin s'en fait sentir. Je suis ouvert. Au moins à la discussion. Je ne promet rien mais j'essaierai de satisfaire les demandes. Dans la mesure du raisonnable. Et de mes moyens.


[ précedent ] [ Résumé ] [ Copyright ] [ Table des matières ] [ suivant ]
Foire aux question sur echelon
20 décembre 2000
Patrice Karatchentzeff
echelon-0.1.0/doc/FAQ.html/ch10.html0100644000175000017500000000214207220227316017062 0ustar marillatmarillat Foire aux question sur echelon - Je voudrai une version dans une autre langue (anglais, allemand,...).
[ précedent ] [ Résumé ] [ Copyright ] [ Table des matières ] [ suivant ]

Foire aux question sur echelon
Chapitre 10 Je voudrai une version dans une autre langue (anglais, allemand,...).


Ce n'est pas planifié avant la version 0.3. Et encore, uniquement s'il y a de la demande. Et de l'aide.


[ précedent ] [ Résumé ] [ Copyright ] [ Table des matières ] [ suivant ]
Foire aux question sur echelon
20 décembre 2000
Patrice Karatchentzeff
echelon-0.1.0/doc/FAQ.html/ch11.html0100644000175000017500000000225507220227316017070 0ustar marillatmarillat Foire aux question sur echelon - J'aurai bien une remarque à faire mais je n'ose pas la faire.
[ précedent ] [ Résumé ] [ Copyright ] [ Table des matières ] [ suivant ]

Foire aux question sur echelon
Chapitre 11 J'aurai bien une remarque à faire mais je n'ose pas la faire.


AUCUNE remarque n'est inutile. La moindre petite faute est à corriger, que ce soit d'orthographe, de grammaire ou de code. Alors, n'hésitez pas. Je n'ai jamais mangé personne. Pas encore :-)


[ précedent ] [ Résumé ] [ Copyright ] [ Table des matières ] [ suivant ]
Foire aux question sur echelon
20 décembre 2000
Patrice Karatchentzeff
echelon-0.1.0/doc/FAQ.html/ch12.html0100644000175000017500000000227107220227316017067 0ustar marillatmarillat Foire aux question sur echelon - Ou peut-on trouver de la doc ?
[ précedent ] [ Résumé ] [ Copyright ] [ Table des matières ] [ suivant ]

Foire aux question sur echelon
Chapitre 12 Ou peut-on trouver de la doc ?


Cela va venir avec la version 0.2. Du moins, j'espère. En attendant, allez dans /usr/share/doc/echelon. Il y a la présente FAQ et une petite introduction. La FAQ est au format sgml debiandoc. La page man viendra avec le temps...


[ précedent ] [ Résumé ] [ Copyright ] [ Table des matières ] [ suivant ]
Foire aux question sur echelon
20 décembre 2000
Patrice Karatchentzeff
echelon-0.1.0/doc/FAQ.html/ch13.html0100644000175000017500000000224007220227316017064 0ustar marillatmarillat Foire aux question sur echelon - Dans le menu préférence, on ne propose pas plus de 6 boîtes POP. Or moi, j'en ai plus...
[ précedent ] [ Résumé ] [ Copyright ] [ Table des matières ] [ suivant ]

Foire aux question sur echelon
Chapitre 13 Dans le menu préférence, on ne propose pas plus de 6 boîtes POP. Or moi, j'en ai plus...


La liste est indicative: c'est tout. Vous devez entrer à la main le nombre de comptes que vous avez. Et sauvegarder.


[ précedent ] [ Résumé ] [ Copyright ] [ Table des matières ] [ suivant ]
Foire aux question sur echelon
20 décembre 2000
Patrice Karatchentzeff
echelon-0.1.0/doc/FAQ.html/ch14.html0100644000175000017500000000224607220227316017073 0ustar marillatmarillat Foire aux question sur echelon - Le programme echelon est trop long à lire...
[ précedent ] [ Résumé ] [ Copyright ] [ Table des matières ] [ suivant ]

Foire aux question sur echelon
Chapitre 14 Le programme echelon est trop long à lire...


En effet, la version 0.1 comporte près de 2200 lignes dans un seul fichier. Je n'ai pas vu la taille grossir pour ce premier objectif. La version 0.2 va être complètement transformé pour plus de lisibilité.


[ précedent ] [ Résumé ] [ Copyright ] [ Table des matières ] [ suivant ]
Foire aux question sur echelon
20 décembre 2000
Patrice Karatchentzeff
echelon-0.1.0/doc/FAQ.html/ch15.html0100644000175000017500000000214707220227316017074 0ustar marillatmarillat Foire aux question sur echelon - Je n'aime pas les couleurs...
[ précedent ] [ Résumé ] [ Copyright ] [ Table des matières ] [ suivant ]

Foire aux question sur echelon
Chapitre 15 Je n'aime pas les couleurs...


Patience. La version 0.2 offrira une personnalisation plus poussée. En attendant, vous pouvez toujours éditer le programme et changer le

     $top -> setPalette

...


[ précedent ] [ Résumé ] [ Copyright ] [ Table des matières ] [ suivant ]
Foire aux question sur echelon
20 décembre 2000
Patrice Karatchentzeff
echelon-0.1.0/doc/FAQ.html/ch16.html0100644000175000017500000000315207220227316017072 0ustar marillatmarillat Foire aux question sur echelon - Pourquoi la connexion passe au vert et que l'on obtient pas le droit d'aller rapatrier le courrier immédiatement ?
[ précedent ] [ Résumé ] [ Copyright ] [ Table des matières ] [ suivant ]

Foire aux question sur echelon
Chapitre 16 Pourquoi la connexion passe au vert et que l'on obtient pas le droit d'aller rapatrier le courrier immédiatement ?


Il s'agit en fait du temps de facturation. Il y a facturation chez votre FAI lorsque ppp établit une connexion et négocie tout ce dont vous avez besoin pour apparaître sur le réseau, avec en particulier votre adresse IP locale. En attendant, vous payez la communication. C'est dégueulasse mais c'est comme cela... Le temps de négociation est assez court mais non négligeable: chez moi (club-internet et free), cela va de 0 seconde à plus de 5 secondes. Répété un certain nombre de fois, cela fait rapidement un temps conséquent.


[ précedent ] [ Résumé ] [ Copyright ] [ Table des matières ] [ suivant ]
Foire aux question sur echelon
20 décembre 2000
Patrice Karatchentzeff
echelon-0.1.0/doc/FAQ.html/ch17.html0100644000175000017500000000264107220227316017075 0ustar marillatmarillat Foire aux question sur echelon - Pourquoi echelon semble figer pendant le rapatriement du courrier ?
[ précedent ] [ Résumé ] [ Copyright ] [ Table des matières ] [ suivant ]

Foire aux question sur echelon
Chapitre 17 Pourquoi echelon semble figer pendant le rapatriement du courrier ?


C'est votre fournisseur qui n'envoie rien... Testez avec un outil de visualisation en direct des trames émises (j'utilise wmnet). echelon ne fait reproduire que la triste réalité des faits. En particulier, si le serveur SMTP de votre FAI est mauvais, vous attendrez...

Je compte dans une version ultérieure inclure à côté du bouton de raptriement une petite innterface indiquant le trafic ppp.


[ précedent ] [ Résumé ] [ Copyright ] [ Table des matières ] [ suivant ]
Foire aux question sur echelon
20 décembre 2000
Patrice Karatchentzeff
echelon-0.1.0/doc/FAQ.html/ch18.html0100644000175000017500000000210007220227316017064 0ustar marillatmarillat Foire aux question sur echelon - Peut-on interrompre une connexion en cours, même si fetchmail tourne ?
[ précedent ] [ Résumé ] [ Copyright ] [ Table des matières ] [ suivant ]

Foire aux question sur echelon
Chapitre 18 Peut-on interrompre une connexion en cours, même si fetchmail tourne ?


Oui, pour le moment. Après, je vais certainement blinder la chose.


[ précedent ] [ Résumé ] [ Copyright ] [ Table des matières ] [ suivant ]
Foire aux question sur echelon
20 décembre 2000
Patrice Karatchentzeff
echelon-0.1.0/doc/FAQ.html/ch19.html0100644000175000017500000000360107220227316017074 0ustar marillatmarillat Foire aux question sur echelon - J'ai un abonnement XX heures par mois. Quand faut-il que je coupe pour optimiser mes temps de connexion ?
[ précedent ] [ Résumé ] [ Copyright ] [ Table des matières ] [ suivant ]

Foire aux question sur echelon
Chapitre 19 J'ai un abonnement XX heures par mois. Quand faut-il que je coupe pour optimiser mes temps de connexion ?


C'est facile: il suffit de regarder le temps de connexion. Vous êtes généralement facturé à la minute (allez quand même vérifier...) avec un contrat du genre: « toute minute commnencée est due.... ». Mon compteur de temps est normalement callé sur celui de facturation du FAI (qui comme vous pouvez le voir ne correspond pas à votre temps réel d'exploitation). Il vous suffit donc de couper juste avant la fin d'une unité de temps (en l'occurence d'une minute). Couper vers 55 secondes pour être tranquille: la déconnexion est quasi-instantannée.

Il faut quand bien souligner que cette façon de faire des FAI est bien dégueulasse alors qu'une facturation à la seconde est facile à faire. Mais, comme en politique, le pigeon est toujours celui qui y croit... Ou alors les informaticiens des FAI ne valent pas un clou...


[ précedent ] [ Résumé ] [ Copyright ] [ Table des matières ] [ suivant ]
Foire aux question sur echelon
20 décembre 2000
Patrice Karatchentzeff
echelon-0.1.0/doc/FAQ.html/ch20.html0100644000175000017500000000210107220227316017056 0ustar marillatmarillat Foire aux question sur echelon - Peut-on avoir le temps complet d'utilisation depuis un certain temps ?
[ précedent ] [ Résumé ] [ Copyright ] [ Table des matières ] [ suivant ]

Foire aux question sur echelon
Chapitre 20 Peut-on avoir le temps complet d'utilisation depuis un certain temps ?


C'est en cours de développement... Certainement dans la version 0.2


[ précedent ] [ Résumé ] [ Copyright ] [ Table des matières ] [ suivant ]
Foire aux question sur echelon
20 décembre 2000
Patrice Karatchentzeff
echelon-0.1.0/doc/FAQ.html/ch21.html0100644000175000017500000000224707220227317017073 0ustar marillatmarillat Foire aux question sur echelon - Pourquoi l'avoir appelé echelon ?
[ précedent ] [ Résumé ] [ Copyright ] [ Table des matières ] [ suivant ]

Foire aux question sur echelon
Chapitre 21 Pourquoi l'avoir appelé echelon ?


Et pourquoi pas ? Parce que cela me plait :-) En fait, je l'ai appelé ainsi car au final, ce programme sera un véritable mouchard. Cela ne vous rappelle rien, n'est-ce pas ? « Amis » de la NSA, je vous emm... bien :-)


[ précedent ] [ Résumé ] [ Copyright ] [ Table des matières ] [ suivant ]
Foire aux question sur echelon
20 décembre 2000
Patrice Karatchentzeff
echelon-0.1.0/doc/FAQ.html/ch22.html0100644000175000017500000000176007220227317017073 0ustar marillatmarillat Foire aux question sur echelon - Licence et garantie
[ précedent ] [ Résumé ] [ Copyright ] [ Table des matières ] [ suivant ]

Foire aux question sur echelon
Chapitre 22 Licence et garantie


C'est du GPL alors pas de garantie :-) (cf votre www.fsf.org/gpl pour plus de détails...)


[ précedent ] [ Résumé ] [ Copyright ] [ Table des matières ] [ suivant ]
Foire aux question sur echelon
20 décembre 2000
Patrice Karatchentzeff
echelon-0.1.0/doc/FAQ.html/ch23.html0100644000175000017500000000257407220227317017100 0ustar marillatmarillat Foire aux question sur echelon - echelon consomme en permanence presque 10% des ressources cpu de mon pentium sans rien faire. Pourquoi ?
[ précedent ] [ Résumé ] [ Copyright ] [ Table des matières ] [ suivant ]

Foire aux question sur echelon
Chapitre 23 echelon consomme en permanence presque 10% des ressources cpu de mon pentium sans rien faire. Pourquoi ?


En fait, l'affichage de l'heure à la seconde est coûteuse. Je prévois une option pour les petites configurations qui permettra de n'afficher au choix que les minutes. Cela devrait résoudre le problème. Ce n'est quand même pas une grande gêne... Pas essayé sur un 486. Un retour serait appréciable.


[ précedent ] [ Résumé ] [ Copyright ] [ Table des matières ] [ suivant ]
Foire aux question sur echelon
20 décembre 2000
Patrice Karatchentzeff
echelon-0.1.0/doc/FAQ.html/ch24.html0100644000175000017500000000233007220227317017067 0ustar marillatmarillat Foire aux question sur echelon - Quel est le langage utilisé pour écrire echelon ?
[ précedent ] [ Résumé ] [ Copyright ] [ Table des matières ] [ suivant ]

Foire aux question sur echelon
Chapitre 24 Quel est le langage utilisé pour écrire echelon ?


C'est du Perl pour tous les traitements. Pour l'interface, il s'agit de Tk. Le couple Perl-Tk est très agréable à utiliser et l'emploi de Tk permet de faire de belles interfaces graphiques, sans se fatiguer.


[ précedent ] [ Résumé ] [ Copyright ] [ Table des matières ] [ suivant ]
Foire aux question sur echelon
20 décembre 2000
Patrice Karatchentzeff
echelon-0.1.0/doc/FAQ.html/ch25.html0100644000175000017500000000422007220227317017070 0ustar marillatmarillat Foire aux question sur echelon - les sources ne sont pas ou peu commentée...
[ précedent ] [ Résumé ] [ Copyright ] [ Table des matières ]

Foire aux question sur echelon
Chapitre 25 les sources ne sont pas ou peu commentée...


Je ne commente jamais un algorithme, ou si peu. Par contre, toutes les variables le sont. J'ai aussi succintement décrit les sous-programmes. Cela devrait largement suffire. Le Perl, et en particulier ma façon de l'écrire, se suffit à lui-même. Même en ce qui concerne Tk. Le code est très aéré pour permettre une visualisation et une compréhension accrue. Enfin, les commentaires sont en anglais pour permettre à tout le monde de les suivre. Et les variables portent des noms parlants. J'ai tout découpé en petits sous-programmes pour une modularité accrue.

Ma façon d'écrire n'est pas très économique. On pourrait facilement gagner 30% en gain de place. Je le sais. Mais quel est l'intérêt pour un langage interprêté (et pour un langage tout court...) ? Au moins, tout le monde peut lire les sources facilement, sans être un expert de Perl (ce que je ne suis pas). Si d'ailleurs un expert relève une façon plus pertinente de traiter certaines parties, qu'il ne se gêne pas pour me proposer quelque chose de mieux (avec un justificatif: du genre algo plus rapide, moins coûteux en mémoire, etc...).

Il y a peut-être des modules de la CPAN qui font mieux que ce que j'ai écrit. Je veux bien les utiliser s'ils font parti de la distribution de base d'une potato. Sinon non.


[ précedent ] [ Résumé ] [ Copyright ] [ Table des matières ]
Foire aux question sur echelon
20 décembre 2000
Patrice Karatchentzeff
echelon-0.1.0/echelon0100755000175000017500000015464707220234014014700 0ustar marillatmarillateval 'exec perl $0 ${1+"$@"}' # -*- Perl -*- if (0); ######################################################################## # file : echelon # language : perl, with Tk extension # version : $version = "0.1.0"; # author : Patrice KARATCHENTZEFF # mailto : p.karatchentzeff@free.fr # license : GNU General Public License, version 2.0 and older # target : This program aimed to let easier the ppp connexion and # : the deconnexion on a Debian GNU/Linux system and to # : fetch mail and follows log files. # requier. : a ppp connexion, a fonctionnal systeme for MTA, an access # : for users to ppp and log file. You will also need perl/Tk # ######################################################################## #################################### # # Perl requierments # #################################### use Tk; use IO::File; use Tk::ROText; use Tk::NoteBook; use Tk::LabFrame; use Tk::BrowseEntry; use Tk::Dialog; #################################### # # Variables # #################################### $user = $ENV{"USER"}; # username $hostname = (split(/\./,`hostname`))[0];# short hostname $ppp0_pid = '/var/run/ppp0.pid'; # ppp0.pid place $ppp1_pid = '/var/run/ppp1.pid'; # ppp1.pid place $connection_start = "no"; # yes or no $connection_state = "" ; # live, dead or attempt $flag = 0; # for printing interface time # connection $long = 0; # connection time by default $already = 0; # 0, never connecting; 1, one # or more $color = 'black'; # color font by default $state = 'normal'; # default button state $number = "-1"; # for mail-in check $size = ""; # for mail-in check $flag_end = 0 ; # for mail-in check $disconnectStatus = "no"; # for disconnect action $version_debian = `cat /etc/debian_version`; # fixing a perl version feature $echelonPath = "$ENV{HOME}/.echelonrc"; # personal preference location $PeerScript = '/etc/ppp/peers'; # chatscript location #$PeerScript = './peers'; # chatscript location (local debug) $numberPOPaccountCheck = 0; # for testing the number of POP account $WarningFirstTime = 0; # non 0 if first echelon lauching $statisticStorage = ""; # filename of the statistic connection storage $currentDate = ""; # date year/month/day format # default variables $default_MTA = 'Exim'; # default MTA $default_peers = 'provider'; # default peers script $default_POPnumber = '1'; # default POP account number $default_fetchmail = "/home/$ENV{USER}/.fetchmailrc";# default fetchmailrc location #################################### # # let's go # #################################### # system setup # $date = Date(); &Setup; # graphic part # $top = MainWindow->new; $top -> title("echelon"); # Top menus printing # &menu; # Color # $top ->setPalette ( # "font" => '-*-courier-bold-*-*-*-12-*-*-*-*-*-iso8859-1', "background" => 'LightSlateGrey', "foreground" => 'black', "activeBackground" => 'LightSlateGrey', "activeForeground" => 'red', ); # main window, top level, definition # $top_frame = $top -> Frame ( -relief => 'groove', -borderwidth => '2', -width => '360', -height => '120', ); # main window, bottom level, definition # $bottom_frame = $top -> Frame ( -relief => 'groove', -borderwidth => '2', -width => '240', -height => '120' ); $top_frame -> pack ( -fill => 'x', -expand => '0' ); $bottom_frame -> pack ( -fill => 'both', -expand => '1' ); # top level GUI printing # &PrintHeaders; &CurrentTime; $ctime = CTime(); $dtime = DTime(); # bottom level GUI printing # &PrintNoteBook; # log files viewer # &log_viewer; &TestConnection; # warning dialog box if first lauching # &WarningFirstTime() if ($WarningFirstTime != 0); MainLoop; #################################### # # subprograms # #################################### # Return the current date # sub Date { my ($date, $sec, $min, $hours, $day, $month, $year, $wday, $realyear, $realmonth) ; ($sec, $min, $hours, $mday, $month, $year, $wday)= localtime(time); %Wday = ( 0 => "Dimanche", 4 => "Jeudi", 1 => "Lundi", 5 => "Vendredi", 2 => "Mardi", 6 => "Samedi", 3 => "Mercredi", ); %Month = ( 0 => "janvier" , 6 => "juillet", 1 => "février", 7 => "août", 2 => "mars", 8 => "septembre", 3 => "avril", 9 => "octobre", 4 => "mai", 10 => "novembre", 5 => "juin", 11 => "décembre", ); $date = "$Wday{$wday} $mday $Month{$month}"; $realyear = 1900 + $year; $realmonth = 1 + $month; $statisticStorage = "$realyear"."_"."$realmonth"; $currentDate = "$realyear"."/"."$realmonth"."/"."$mday"; return $date; } # System setup # sub Setup { my ($var); if (-e $echelonPath) { &LoadSetup; } else { # default preference setting $MTA = $default_MTA; $peers = $default_peers; $numberPOPaccount = $default_POPnumber; $FETCHMAILRC = $default_fetchmail; # creating file &CreateSetup; &LoadSetup; ++$WarningFirstTime; } } # Creating a system setup environment # sub CreateSetup { my ($date) =`date`; mkdir("$echelonPath", 0700) || die "Impossible de créer le répertoire $echelonPath: $!\n"; mkdir("$echelonPath/statistic", 0700) || die "Impossible de créer le répertoire $echelonPath/statistic: $!\n"; open (VERSION, "> $echelonPath/version") || die "Impossible de créer le fichier $echelonPath/version: $!\n"; print VERSION "$version"; close (VERSION); &CreatePrefFile; } # Create preference file # sub CreatePrefFile { open (PREFERENCES, "> $echelonPath/preferences") || die "Impossible de créer le fichier $echelonPath/preferences: $!\n"; print PREFERENCES "#####################################################################\n"; print PREFERENCES "# Preference file: generated by seelog $version\n"; print PREFERENCES "#\n"; print PREFERENCES "# do NOT edit this file by hand if you don't know EXACTLY what you do\n"; print PREFERENCES "#\n"; print PREFERENCES "# If you want to modify something, click on the menu preference in seelog\n"; print PREFERENCES "#\n"; print PREFERENCES "#####################################################################\n"; print PREFERENCES "\n"; print PREFERENCES "# LAST MODIFIED on $date\n"; print PREFERENCES "\n"; print PREFERENCES "# System log files\n"; # print PREFERENCES "\$MESSAGE_log = './log/messages';\n";# local debug print PREFERENCES "\$MESSAGE_log = '/var/log/messages';\n"; # print PREFERENCES "\$MAIL_IN_log = './log/mail.log';\n";# local debug print PREFERENCES "\$MAIL_IN_log = '/var/log/mail.log';\n"; print PREFERENCES "\n"; print PREFERENCES "# System mail data\n"; print PREFERENCES "\$MTA = \"$MTA\";\n"; # print PREFERENCES "\$MAIL_OUT_log ='./log/exim.log';\n";# local debug print PREFERENCES "\$MAIL_OUT_log ='/var/log/exim/mainlog' if (\$MTA eq 'Exim');\n"; print PREFERENCES "\$MAIL_OUT_log ='/var/log/smail/logfile' if (\$MTA eq 'Smail');\n"; print PREFERENCES "\n"; print PREFERENCES "# System connection data\n"; print PREFERENCES "\$numberPOPaccount = \"$numberPOPaccount\";\n"; print PREFERENCES "\$peers = \"$peers\";\n"; print PREFERENCES "\$PON = \"/usr/bin/pon \$peers\";\n"; print PREFERENCES "\$POFF = \"/usr/bin/poff \$peers\";\n"; print PREFERENCES "\n"; print PREFERENCES "\$FETCHMAILRC =\"$FETCHMAILRC\";\n"; print PREFERENCES "\$FETCHMAIL = \"LC_ALL=C;/usr/bin/fetchmail -v -f \$FETCHMAILRC > /dev/null 2>&1\""; close (PREFERENCES); } # Load setup configuration # sub LoadSetup { my ($return); unless ($return = do "$echelonPath/preferences") { warn "impossible de parser le fichier $echelonPath/preferences: $@" if $@; warn "impossible d'appliquer le 'do' au fichier $echelonPath/preferences: $!" unless defined $return; warn "impossible d'exécuter le fichier $echelonPath/preferences" unless $return; } @default = ($MTA, $numberPOPaccount, $peers, $FETCHMAILRC); } # Warnig Dialog box in case of first lauching echelon # sub WarningFirstTime { $WarningDialogFirstTime = &SimpleDialogWidget ( $WarningDialogFirstTime, $top, "Mise en garde...", "Bienvenue dans echelon.\n\n C'est la première fois que vous lancez ce logiciel. Vous devez le configurer. Vous pouvez le faire aisément à partir du menu « préférence » situé en haut et à gauche de la fenêtre principale.\n" ); } # loop for printing time # sub CurrentTime { $current_time= PrintTime(); after(500, sub {&CurrentTime}); } # Time when connection # sub CTime { if ($connection_state eq "live") { $ctimeEpoch = time; $ctime = PrintTime(); } else { $ctime = "-"; }; return $ctime; } # Time when disconnection # sub DTime { if ($connection_state eq "dead") { $dtimeEpoch = time; $dtime = PrintTime(); } else { $dtime = "-"; }; return $dtime; } # return the current time # sub PrintTime { my ($time, $date, $sec, $min, $hours, $day, $month, $year, $wday) ; ($sec, $min, $hours, $mday, $month, $year, $wday)= localtime(time); $sec = "0$sec" if ($sec < 10); $min = "0$min" if ($min < 10); $time = "$hours:$min:$sec"; return $time; } # Print environment if living connection # sub TestConnection { &TestLiveConnection; if ($connection_state eq "live") { $ctime = CTime() if ($flag == 0); $dtime = "-"; $flag = 1; $already = 1; # for still printing lenght time connection $ltimeEpoch = time; # current time $format = $ltimeEpoch - $ctimeEpoch; $long = Format($format); $connexion = "Connexion active"; $signal -> configure(-background => 'green4'); $Connect_button{connect}[0] -> configure(-state => 'disabled'); $Connect_button{disconnect}[0] -> configure(-state => 'normal'); $Connect_button{disconnect}[0] -> flash(); $button -> configure(-state => 'normal'); } elsif ($connection_state eq "attempt") { $connexion = "En cours de connexion"; $signal -> configure(-background => 'yellow'); $Connect_button{connect}[0] -> configure(-state => 'disabled'); $Connect_button{disconnect}[0] -> configure(-state => 'normal'); $button -> configure(-state => 'disabled'); } else { $dtime = DTime() if ($flag == 1); $ctime = "-"; if (($flag == 1)||($already == 1)) { $long = Format($dtimeEpoch - $ctimeEpoch); } else { $long = "-"; }; $connexion = "Connexion inactive"; $signal -> configure(-background => 'red'); $Connect_button{connect}[0] -> configure(-state => 'normal'); $Connect_button{disconnect}[0] -> configure(-state => 'disabled'); $button -> configure(-state => 'disabled'); $flag = 0; } after (500, sub {&TestConnection}); } # Format integer into readeable time # sub Format { my ($Time, $time, $sec, $min, $hour); $time = $_[0]; $hour = ($time - ($time % 3600))/3600; $hour = "0"."$hour" if ($hour < 10); # nice printing out $min = (($time % 3600) - (($time % 3600) % 60)) / 60; $min = "0"."$min" if ($min < 10); # nice printing out $sec = $time - (( 3600 * $hour ) + ( 60 * $min )); $sec = "0"."$sec" if ($sec < 10); $Time = "$hour:"."$min:"."$sec"; return $Time; } # test if living connection # sub TestLiveConnection { if ((-e "$ppp0_pid")||(-e "$ppp1_pid")) { $connection_state = "live"; } else { if ($connection_start eq "yes") { $connection_state = "attempt"; } else { $connection_state = "dead"; } } } # Quit ptkdesk # sub Quit { &QuitLog(MESSAGE, MAILIN, MAILOUT); exit; } # Menus # sub menu { $MenuB_Frame = $top -> Frame ( -relief => 'ridge', ); $MenuB_Frame -> pack ( -expand => '0', -fill => 'x', ); %Menu = ( qquit => ["quit", "Quitter", "Quit", ' (Alt-q)'], ppref => ["pref", "Préférence", "Pref", ' (Alt-p)'], aabout => ["about", "Au sujet de...", "About",' (Alt-a)'], hhelp => ["help", "Aide", "Help", ' (Alt-h)'], vversion => ["vers", "Version", "Rev", ' (Alt-v)'], bbug => ["bug", "Rapport de bogues", "BugTo", ] ); $side = 'left'; foreach $menu (qw/qquit ppref hhelp/) { if ($menu eq "hhelp") { $side = 'right'; $MenuB_{$Menu{$menu}[0]} = $MenuB_Frame -> Menubutton ( -underline => '0', -text => "$Menu{$menu}[1]", -menuitems => [['command' => "$Menu{$menu}[1]", -command => \&{"$Menu{$menu}[2]"}, -accelerator => "$Menu{$menu}[3]"], ['command' => "$Menu{vversion}[1]", -command => \&{"$Menu{vversion}[2]"}, -accelerator => "$Menu{vversion}[3]"], ['command' => "$Menu{aabout}[1]", -command => \&{"$Menu{aabout}[2]"}, -accelerator => "$Menu{aabout}[3]", -accelerator => "$Menu{vversion}[3]"], ['command' => "$Menu{bbug}[1]", -command => \&{"$Menu{bbug}[2]"}], ] ); } else { $MenuB_{$Menu{$menu}[0]} = $MenuB_Frame -> Menubutton ( -underline => '0', -text => "$Menu{$menu}[1]", -menuitems => [['command' => "$Menu{$menu}[1]", -command => \&{"$Menu{$menu}[2]"}, -accelerator => "$Menu{$menu}[3]"], ] ); }; $MenuB_{$Menu{$menu}[0]} -> pack ( -side => "$side", -expand => '0', ); } }; # Generic simple dialog widet # sub SimpleDialogWidget { my ($dialog, $father, $title, $text) = @_; my ($quit) = "quitter"; my ($buttons); if (not Exists($dialog)) { $dialog = $father -> Dialog ( -font => "-adobe-helvetica-bold-r-normal-*-*-120-*-*-p-*-iso8859-1", -title => "$title", -wraplength => '6i', -text => "$text", -bitmap => 'info', -default_button => $quit, -buttons => [$quit], ); $buttons = $dialog -> Show('-global'); }; if ($buttons eq $quit) { $dialog -> destroy(); }; return ($dialog); } # Help dialog widget # sub Help { $HelpDialog = &SimpleDialogWidget ( $HelpDialog, $MenuB_{$Menu{qquit}[0]}, "Aide en ligne", "L\'aide en ligne sera disponible dans la version 0.2", ); } # Version dialog widget # sub Rev { $VersionDialog = &SimpleDialogWidget ( $VersionDialog, $MenuB_{$Menu{qquit}[0]}, "Numéro de version", "La version de echelon est $version", ); } # About dialog widget # sub About { $AboutDialog = &SimpleDialogWidget ( $AboutDialog, $MenuB_{$Menu{qquit}[0]}, "Au sujet de...", "Echelon (version $version) est un logiciel libre sous licence GPL.\n\n Echelon permet sous Debian de se connecter, déconnecter, calculer le temps de connexion, visualiser le rapatriement et l'émission de vos courriels.\n\nL'auteur (Patrice Karatchentzeff, p.karatchentzeff\@free.fr) décline toute responsabilité quant à ... etc ... etc... Lire la General Public License pour les conditions.\n\n Prière de me transmettre directement les bogues et les injures via mon adresse électronique.\n\n Bonne utilisation...", ); } # Bug report dialog widget # sub BugTo { $VersionDialog = &SimpleDialogWidget ( $VersionDialog, $MenuB_{$Menu{qquit}[0]}, "Rapport de bogue", "Veuillez envoyer vos rapports de bogues à p.karatchentzeff\@free.fr.\n Donnez le numéro de version de echelon, la version de Debian ainsi que des explications détaillées du problème. Vous pouvez joindre votre fichier de préférences. Vous pouvez aussi joindre un tar de l'ensemble des fichiers (n'oubliez pas de ziper) si l'ensemble fait moins de 300 ko (avec les journaux de bord par exemple).", ); } # preference menu # sub Pref { if (! Exists($pref)) { $pref = $top -> Toplevel(); $pref -> title("echelon: préférences"); $pref -> resizable(0,0); &PrefWidget; } else { $pref -> deiconify(); $pref -> raise(); } } # preference widget print # sub PrefWidget { $prefFrameTop = $pref -> Frame(); $prefFrameTop -> pack ( -side => 'top', -expand => '1', -fill => 'both', ); $prefFrameBottom = $pref -> Frame(); $prefFrameBottom -> pack ( -side => 'bottom', -expand => '0', -fill => 'x', ); # Notebook &PrintPrefNoteBook; # Bottom buttons &PrintPrefButtons; } # print preference top NoteBook # sub PrintPrefNoteBook { $notebookPref = $pref -> NoteBook(); %PrefNoteBook = ( connectionPref => [PrefConnect, "Connexion", 0], popPref => [PrefPOP, "Courriel", 1], MTAPref => [PrefMTA, "MTA", 0], accountPref => [PrefAccount, "Décompte", 0], formPref => [PrefForm, "Apparence", 0], fetchPref => [FetchForm, "Rapatriement", 0], ); foreach $note (keys %PrefNoteBook) { $page_{$PrefNoteBook{$note}[0]} = $notebookPref -> add ( "$PrefNoteBook{$note}[1]", -label => "$PrefNoteBook{$note}[1]", -underline => "$PrefNoteBook{$note}[2]", ); } $notebookPref -> pack ( -expand => '1', -fill => 'both' ); &PrefNoteBook_1; &PrefNoteBook_2; &PrefNoteBook_3; &PrefNoteBook_4; &PrefNoteBook_5; &PrefNoteBook_6; } # First NoteBook reference page (connection) # sub PrefNoteBook_1 { # top labFrame ($ConnectionPref_frame, $ConnectionPrefLabFrame) = PrintMainLabFramePref ( $page_{$PrefNoteBook{connectionPref}[0]}, "Scripts de connexion", ); # Peers Entry $BrowseEntryPref = PrefEntryPeers ( $BrowseEntryPref, $ConnectionPrefLabFrame ); # Help buttons %PrefButtonConnection = ( help => [HelpConnection, "Aide", 0], search => [SearchConnection, "Recherche automatique",0], ); $ConnectionPrefLabFrame2 = PrefPrintHelpButton ( $ConnectionPref_frame, $ConnectionPrefLabFrame2, %PrefButtonConnection, ); } # First Notebook reference entry # sub PrefEntryPeers { my ($Entry, $LabFrame) = @_; my ($script); $Entry = $LabFrame -> BrowseEntry ( -label => "Scripts utilisés par pon et poff:", -variable => \$peers, ); foreach $script (`ls $PeerScript`) { chomp($script); if (!(($script =~ ".*~")||($script =~ '.*.bak'))) # remove backup files { $Entry -> insert('end',$script); } } $Entry -> pack(); return ($Entry); } # Help menu preference connection dialog box # sub HelpConnection { $HelpConnectionDialog = &SimpleDialogWidget ( $HelpConnectionDialog, $ConnectionPref_frame, "Aide en ligne", "Vous devez sélectionner le script de connection utilisé par pon ou poff pour vous connecter à Internet.\n La valeur par défaut est « provider ».\n", ); } # Search menu preference connection dialog box # sub SearchConnection { $SearchConnectionDialog = &SimpleDialogWidget ( $HelpConnectionDialog, $ConnectionPref_frame, "Aide en ligne", "Patience...\n Pas avant la version 0.2\n" ); } # Second NoteBook reference page (POP) # sub PrefNoteBook_2 { my ($printOutMenu, $ValueMenu, @list); # top labFrame ($POPPref_frame, $POPPrefLabFrame) = PrintMainLabFramePref ( $page_{$PrefNoteBook{popPref}[0]}, "Rapatriement du courrier", ); $POPOptionLabel = $POPPrefLabFrame -> Label ( -text => "Nombre de compte POP:" ); $POPOptionLabel -> pack ( -side => 'left', ); $POPOptionEntry = $POPPrefLabFrame -> Entry ( -textvariable => \$numberPOPaccount, -background => 'linen', -foreground => 'black', ); $POPOptionEntry -> pack ( -side => 'left', -expand => '1', -fill => 'x' ); $POPOptionMenu = $POPPrefLabFrame -> Optionmenu ( -textvariable => \$numberPOPaccount, -variable => \$numberPOPaccount, -options => [["1", 1], ["2", 2], ["3", 3], ["4", 4], ["5", 5], ["6", 6], ], ); $POPOptionMenu -> pack ( -side => 'left', ); # on-line help %PrefButtonPOP = ( help => [HelpPOP, "Aide", 0], search => [SearchPOP, "Recherche automatique",0], default => [DefaultPOP,"Valeurs par défaut", 0], ); $POPPref_frame = PrefPrintHelpButton ( $POPPref_frame, $POPPrefLabFrame2, %PrefButtonPOP, ); $POPnumber = $ValueMenu; } # preference help POP menu # sub HelpPOP { $HelpPOPDialog = &SimpleDialogWidget ( $HelpPOPDialog, $POPPref_frame, "Aide en ligne", "Vous devez mettre ici le nombre de compte POP que vous allez vider lors du rapatriement du courrier.\n Cette option n'est pas indispensable mais permet d'avoir un dialogue cohérent lors du rapatriement de la dernière boîte (phrase de fin et signal sonore).\n La valeur par défaut est « 1 ».\n", ); } # Search help POP menu # sub SearchPOP { $SearchPOPDialog = &SimpleDialogWidget ( $HelpPOPDialog, $POPPref_frame, "Aide en ligne", "Patience...\n Pas avant la version 0.2\n" ); } # default POP preference menu # sub DefaultPOP { $numberPOPaccount = $default_POPnumber; } # Third NoteBook reference page (MTA) # sub PrefNoteBook_3 { my ($printOutMenu, $ValueMenu); ($MTAPref_frame, $MTAPrefLabFrame) = PrintMainLabFramePref ( $page_{$PrefNoteBook{MTAPref}[0]}, "Agent de transport du courriel", ); $MTAOptionLabel = $MTAPrefLabFrame -> Label ( -text => "Nom de l'agent:" ); $MTAOptionLabel -> pack ( -side => 'left', ); $MTAOptionEntry = $MTAPrefLabFrame -> Entry ( -textvariable => \$MTA, -background => 'linen', -foreground => 'black', ); $MTAOptionEntry -> pack ( -side => 'left', -expand => '1', -fill => 'x' ); $MTAOptionMenu = $MTAPrefLabFrame -> Optionmenu ( -textvariable => \$MTA, -variable => \$MTA, -options => [["exim", 'Exim' ], ["smail", 'Smail'], ], ); $MTAOptionMenu -> pack ( -side => 'left', ); # on-line help %PrefButtonMTA = ( help => [HelpMTA, "Aide", 0], search => [SearchMTA, "Recherche automatique",0], default => [DefaultMTA,"Valeurs par défaut", 0], ); $MTAPref_frame = PrefPrintHelpButton ( $MTAPref_frame, $MTAPrefLabFrame2, %PrefButtonMTA, ); } # preference help MTA menu # sub HelpMTA { $HelpMTADialog = &SimpleDialogWidget ( $HelpMTADialog, $MTAPref_frame, "Aide en ligne", "Vous devez mettre ici le nom de votre transporteur de courriel interne (MTA). Seuls Exim et Smail sont à ce jour supportés. \nLa valeur par défaut est « Exim ».\n ATTENTION, modifier cette valeur demander OBLIGATOIREMENT de relancer echelon pour être pris en compte\n", ); } # Search help MTA menu # sub SearchMTA { $SearchMTADialog = &SimpleDialogWidget ( $HelpMTADialog, $MTAPref_frame, "Aide en ligne", "Patience...\n Pas avant la version 0.2\n" ); } # Default MTA preference menu # sub DefaultMTA { $MTA = $default_MTA; } # Fourth NoteBook reference page (Time account) # sub PrefNoteBook_4 { ($AccountPref_frame, $AccountPrefLabFrame) = PrintMainLabFramePref ( $page_{$PrefNoteBook{accountPref}[0]}, "Gestion du temps", ); } # Fifth NoteBook reference page (form preference) # sub PrefNoteBook_5 { ($formPref_frame, $formPrefLabFrame) = PrintMainLabFramePref ( $page_{$PrefNoteBook{formPref}[0]}, "Ergonomie", ); } # Sixth NoteBook reference page (fetchmail preference) # sub PrefNoteBook_6 { my ($fetch, $ValueVar); ($fetchPref_frame, $fetchPrefLabFrame) = PrintMainLabFramePref ( $page_{$PrefNoteBook{fetchPref}[0]}, "Rapatriement du courrier via fetchmail", ); %RadioButtonFetch = ( radiofetch1 => ["~/.fetchmailrc", "/home/$ENV{USER}/.fetchmailrc"], radiofetch2 => ["/etc/fetchmailrc", "/etc/fetchmailrc" ], ); foreach $fetch (keys %RadioButtonFetch) { $radio_{$fetch} = $fetchPrefLabFrame -> Radiobutton ( -text => $RadioButtonFetch{$fetch}[0], -value => $RadioButtonFetch{$fetch}[1], -variable => \$FETCHMAILRC, -justify => 'left', -selectcolor => 'green', ); $radio_{$fetch} -> pack ( -anchor => 'w', ); }; # on-line help %PrefButtonFetch = ( help => [HelpFetch, "Aide", 0], search => [SearchFetch, "Recherche automatique",0], default => [DefaultFetch,"Valeurs par défaut", 0], ); $fetchPref_frame = PrefPrintHelpButton ( $fetchPref_frame, $fetchPrefLabFrame2, %PrefButtonFetch, ); } # fetch preference menu help dialog # sub HelpFetch { $HelpFetchDialog = &SimpleDialogWidget ( $HelpFetchDialog, $fetchPref_frame, "Aide en ligne", "Vous devez sélectionner l\'emplacement du fichier de configuration de fetchmail.\n Par défaut, il est choisi à la racine de votre compte.\n " ); } # Search Fetch preference menu # sub SearchFetch { $SearchFecthDialog = &SimpleDialogWidget ( $HelpFetchDialog, $fetchPref_frame, "Aide en ligne", "Patience...\n Pas avant la version 0.2\n" ); } # Default Fetch preference menu # sub DefaultFetch { $FETCHMAILRC = $default_fetchmail; } # Main LabFrame Print for preference widget # sub PrintMainLabFramePref { my ($RefFrame,$label) = @_; my ($NewFrame, $NewLabFrame); $NewFrame = $RefFrame -> Frame ( -relief => 'groove', ); $NewFrame -> pack ( -expand => '1', -fill => 'both' ); $NewLabFrame = $NewFrame -> LabFrame ( -label => "$label", -labelside => "acrosstop", ); $NewLabFrame -> pack ( -expand => '1', -fill => 'both' ); return ($NewFrame, $NewLabFrame); } # print preference bottom buttons # sub PrintPrefButtons { %prefBottomButtons = ( save => [PrefSave, "Sauver", 0], quit => [PrefQuit, "Quitter", 0], ); *pBB = *prefBottomButtons; # for short print foreach $button (qw/save quit/) { $butt_{$pBB{$button}[0]} = $prefFrameBottom -> Button ( -text => "$pBB{$button}[1]", -command => \&{$pBB{$button}[0]}, -underline => "$pBB{$button}[2]", ); $butt_{$pBB{$button}[0]} -> pack ( -side => 'left', -expand => '1', -fill => 'x', ); } } # Print the help button of each notebook # sub PrefPrintHelpButton { my ($RefFrame, $LabFrame, %PrefButton) = @_; my (@button) = keys(%PrefButton); my ($button); $LabFrame = $RefFrame -> LabFrame ( -label => "Aide en ligne", -labelside => "acrosstop", ); $LabFrame -> pack ( -expand => '1', -fill => 'both' ); foreach $button (@button) { $BUTTON_{$PrefButton{$button}[0]} = $LabFrame -> Button ( -text => "$PrefButton{$button}[1]", -underline => "$PrefButton{$button}[2]", -command => \&{$PrefButton{$button}[0]}, ); $BUTTON_{$PrefButton{$button}[0]} -> pack ( -side => 'left', -expand => '1', -fill => 'x' ); } return ($RefFrame); } # save modification from preference widget and reruns echelon # sub PrefSave { &CreatePrefFile; &LoadSetup; } # Quit the preference widget and save modifications if any # sub PrefQuit { my (@tempVar, $incr, $diff, $length, $buttons); my ($ok, $cancel) = ('Sauvegarder', 'Annuler'); # check if a variable has changed $diff = 0; @tempVar = ($MTA, $numberPOPaccount, $peers, $FETCHMAILRC); $length = @tempVar; for ($incr = 0; $incr < $length; $incr++) { if ($tempVar[$incr] ne $default[$incr]) { ++$diff; last; } }; if ($diff ne "0") # preference has changed { if (not Exists($PrefDialogQuit)) { $PrefDialogQuit = $pref -> Dialog ( -font => "-adobe-helvetica-bold-r-normal-*-*-120-*-*-p-*-iso8859-1", -title => 'Configuration différente !', -wraplength => '6i', -text => "Vous avez modifié votre environnement: cliquez sur SAUVEGARDER pour conserver vos modification.\n\n Si vous ne le voulez pas, cliquez sur ANNULER: attention, dans ce cas, vous perdrez toutes les modifications apportées...\n", -bitmap => 'question', -default_button => $ok, -buttons => [$ok, $cancel], ); $buttons = $PrefDialogQuit -> Show('-global'); }; if ($buttons eq $ok) { &PrefSave; &Quit; } else { $pref -> destroy(); }; } else { $pref -> destroy() if (Exists($pref)); } } # print GUI Headers # sub PrintHeaders { # declarations # $top_frame_top = $top_frame -> Scrolled ( "ROText", -width => '79', -scrollbars => 'osoe', -height => '4', -wrap => 'none' ); $top_frame_top -> pack ( -expand => '1', -fill => 'both' ); %field = ( user => ["user", "Utilisateur:"], host => ["hostname", "Machine:" ], date => ["date", "Date:" ], time => ["current_time", "Heure:" ], ); # two first floors # foreach $common (qw/user host date time/) { $label_{$field{$common}[0]} = $top_frame_top -> Label ( -text => "$field{$common}[1]", -relief => 'groove', -width => '13' ); $top_frame_top -> windowCreate ( 'end', -window => $label_{$field{$common}[0]} ); $label_{$field{$common}[0]} = $top_frame_top -> Label ( -textvariable => \${$field{$common}[0]}, -width => '25', -relief => 'sunken', -background => 'linen', -foreground => 'black', ); $top_frame_top -> windowCreate ( 'end', -window => $label_{$field{$common}[0]}, ); if (($common eq "host")||($common eq "time")) { $top_frame_top -> insert('end', "\n"); } } # third floor # $label_syst = $top_frame_top -> Label ( -text => "État du système ", -relief => 'groove', -width => '45' ); $top_frame_top -> windowCreate ( 'end', -window => $label_syst ); $connect = $top_frame_top -> Label ( -textvariable => \$connexion, -width => '25', -background => 'white', -foreground => 'black', -relief => 'sunken', ); $top_frame_top -> windowCreate ( 'end', -window => $connect ); $signal = $top_frame_top -> Label ( -width => '7', -relief => 'raised', -background => 'red' ); $top_frame_top -> windowCreate ( 'end', -window => $signal ); } # Print the GUI bottom forms # sub PrintNoteBook { $notebook = $bottom_frame -> NoteBook ( -width => '79', ); %NoteBook = ( connection => [COnnection, "Connexion", 0], mail => [Mail, "Courriel", 1], log => [Log, "Journaux de bord", 0], ); foreach $note (qw/connection mail log/) { $page_{$NoteBook{$note}[0]} = $notebook -> add ( "$NoteBook{$note}[1]", -label => "$NoteBook{$note}[1]", -underline => "$NoteBook{$note}[2]", ); } $notebook -> pack ( -expand => '1', -fill => 'both' ); &print_Connection; # First NoteBook page &print_Mail; # Secund NoteBook page &print_Log; # third NoteBokk page } # First NoteBook page # sub print_Connection { $Connection_frame = $page_{$NoteBook{connection}[0]} -> Frame ( -relief => 'sunken', ); $Connection_frame -> pack ( -expand => '1', -fill => 'both' ); # two first floor # foreach $Connect (qw/connect1 connect2/) { ($relief, $expand, $height, $background) = ('sunken', '1', '15', 'linen'); ($relief, $expand, $height, $background) = ('raised', '0', '5','LightSlateGrey') if ($Connect eq connect1); ${"$Connect"} = $Connection_frame -> Scrolled ( "ROText", -relief => "$relief", -width => '79', -scrollbars => 'osoe', -height => "$height", -wrap => 'none', -background => "$background", ); ${"$Connect"} -> pack ( -expand => "$expand", -fill => 'both' ); }; # third floor # $Connect_button = $Connection_frame -> Frame ( -relief => 'sunken', ); $Connect_button -> pack ( -expand => '0', -side => 'left', ); %Connect_button = ( connect => [Connect, "Connexion" ], disconnect => [Disconnect, "Déconnexion"], ); foreach $button (qw/connect disconnect/) { $state = StateButton($button); $Connect_button{$button}[0] = $Connect_button -> Button ( -text => "$Connect_button{$button}[1]", -command => \&{$Connect_button{$button}[0]}, -state => "$state", ); $Connect_button{$button}[0] -> pack ( -side => 'left', ); } # first floor: print screen (state) # &PrintConnectionState; # second floor: print screen (log) # &PrintConnectionLog; } # Connect button command # sub Connect { $disconnectStatus = "no"; $connection_start = "yes"; system($PON); } # Disconnect button command # sub Disconnect { system($POFF); $connection_start = "no"; $disconnectStatus = "yes"; &printStatisticConnect(); } # state button: disable or active if active connection # sub StateButton { my ($button) = @_; $state = "normal" if (($connection_state eq "dead")&&($button eq "connect")); $state = "disabled" if ((($connection_state eq "alive") ||($connection_state eq "attempt")) &&($button eq "connect")); $state = "normal" if ((($connection_state eq "alive") ||($connection_state eq "attempt")) &&($button eq "disconnect")); $state = "disabled" if (($connection_state eq "dead")&&($button eq "disconnect")); return $state; } # first NoteBook page: State connection print # sub PrintConnectionState { %StateConnect = ( state => [\$connexion, "État du système:" ], connectTime => [\$ctime, "Heure de connexion:" ], disconnectTime => [\$dtime, "Heure de déconnexion:" ], connectLong => [\$long, "Durée de connexion:" ], ); *S = *StateConnect; # for short print... # System statistic informations print # foreach $item (qw/state connectTime disconnectTime connectLong/) { $State_{$S{$item}[0]} = $connect1 -> Label ( -text => "$S{$item}[1]", -relief => 'groove', -width => '30', ); $connect1 -> windowCreate ( 'end', -window => $State_{$S{$item}[0]}, ); $State_{$S{$item}[0]} = $connect1 -> Label ( -textvariable => $S{$item}[0], -width => '30', -relief => 'flat', -wraplength => '150', ); $connect1 -> windowCreate ( 'end', -window => $State_{$S{$item}[0]}, ); $connect1 -> insert('end', "\n") if !($item eq "connectLong"); } } # statistic conection taping # sub printStatisticConnect { my ($disconectTime); my ($file) = "$echelonPath/statistic/$statisticStorage"; $disconnectTime = PrintTime(); open (STATISTIC, ">>$file") || die "Impossible de créer le fichier $file: $!\n"; # Date User ConnectionTime DisconectionTime TimeConnection print STATISTIC "$currentDate $user $ctime $disconnectTime $long \n"; close (STATISTIC)|| die "Impossible de fermer $file: $!\n"; } # first NoteBook page: Log connection print # sub PrintConnectionLog { $ConnectionLogVar = $connect2 -> Scrolled ( "ROText", # -width => 78, -scrollbars => 'osoe', # -height => 5, -wrap => 'none', -background => "linen" ); $connect2 -> pack ( ); } # Second NoteBook page # sub print_Mail { my ($state) ='disabled'; # The two both LabFrames # foreach $lab (qw/LabFrameTop LabFrameBottom/) { $label = "Réception"; $label = "Émission" if ($lab eq "LabFrameBottom"); ${"$lab"} = $page_{$NoteBook{mail}[0]} -> LabFrame ( -label => "$label", -labelside => "acrosstop", ); ${"$lab"} -> pack ( -expand => '1', -fill => 'both', ); $text_{"$lab"} = ${"$lab"} -> Scrolled ( "ROText", -width => 78, -scrollbars => 'osoe', -height => 5, -wrap => 'none', -background => "linen" ); $text_{"$lab"} -> pack ( -expand => '1', -fill => 'both', ); } # The fetchmail button # $button_frame = $page_{$NoteBook{mail}[0]} -> Frame ( -relief => 'flat', ); $button_frame -> pack ( -expand => '0', -fill => 'x', ); $state = 'active' if ($connection_state eq 'live'); $state = 'disabled' if (($connection_state eq 'dead')||($connection_state eq 'attempt')); $button = $button_frame -> Button ( -text => "Rapatrier le courrier", -command => \&fetchmail, -state => "$state", ); $button -> pack ( -expand => '0', -fill => 'x', ); } # fetchmail button. # Forks, in order not to stop the event loop and for printing in live # the analyse of arriving mails # sub fetchmail { $print = "Tentative de rapatriement du courrier:\n", $text_{LabFrameTop} -> insert('end',"$print", 'DarkViolet'); Fork: { if ($pid = fork) { exec "$FETCHMAIL"; } elsif (defined $pid) { } elsif ($! =~ /No more process/) { sleep 5; redo FORK; } else { die "can't fork: $!\n"; } } } # Third NoteBook page # sub print_Log { foreach $lab (qw/LabFrame1 LabFrame2 LabFrame3/) { $label = "$MESSAGE_log"; $label = "$MAIL_IN_log" if ($lab eq "LabFrame2"); $label = "$MAIL_OUT_log" if ($lab eq "LabFrame3"); ${"$lab"} = $page_{$NoteBook{log}[0]} -> LabFrame ( -label => "$label", -labelside => "acrosstop", ); ${"$lab"} -> pack ( -expand => '1', -fill => 'both', ); $text_{"$lab"} = ${"$lab"} -> Scrolled ( "ROText", -width => 78, -scrollbars => 'osoe', -height => 5, -wrap => 'none', -background => "linen" ); $text_{"$lab"} -> pack ( -expand => '1', -fill => 'both', ); } } # view the log file # sub log_viewer { my ($varlog); %LOG = ( syst_log => [$MESSAGE_log, $text_{LabFrame1}, MESSAGE], in_log => [$MAIL_IN_log, $text_{LabFrame2}, MAILIN ], out_log => [$MAIL_OUT_log, $text_{LabFrame3}, MAILOUT], ); foreach $varlog (qw/syst_log in_log out_log/) { open($LOG{$varlog}[2], "$LOG{$varlog}[0]") || die "Ouverture de $LOG{$varlog}[2] impossible: $!"; seek($LOG{$varlog}[2], 0, SEEK_END) # end of file for the mail if (($varlog eq 'in_log')||($varlog eq 'out_log')); ReadFile($LOG{$varlog}[2], $LOG{$varlog}[1]); } } # tail simulation # sub ReadFile { my ($LOG, $win)= @_; &AllTag($win); while (<$LOG>) { &ColorLog($LOG, $win, $_); $win -> see('end'); } seek($LOG,0,1); after(500, sub {&ReadFile($LOG, $win)}); } # Colors supports for log file print # sub ColorLog { my ($LOG, $win, $currentLine)= @_; if ($LOG eq "MESSAGE") { &ColorMessage($win, $currentLine); &AnalyseMessageLogAfterConnect($currentLine) if (($connection_start eq "yes")||($disconnectStatus eq "yes")); } elsif ($LOG eq "MAILIN") { &ColorMailIn($win, $currentLine); &AnalyseMailIn($currentLine); } elsif ($LOG eq "MAILOUT") { if ($MTA eq 'Smail') { &ColorMailOut_smail($win, $currentLine); &AnalyseMailOut_smail($currentLine); }; if ($MTA eq 'Exim') { &ColorMailOut_exim($win, $currentLine); &AnalyseMailOut_exim($currentLine); }; } else { print "WARNING: no log file specified\n"; } } # Colors support for messages log file # (standard file for Linux system) # sub ColorMessage { my ($win, $currentLine)=@_; my ($currentLength, $pos, @word); @word = split(/ +/, $currentLine); $currentLength = @word; for ($pos=1; $pos <= ($currentLength-1); $pos++) { $word[$pos]="$word[$pos] "; }; $win -> insert('end', "$word[0] $word[1]", 'blue') if ($currentLength >= 2); $win -> insert('end', "$word[2]", 'LightSlateBlue') if ($currentLength >= 3); $win -> insert('end', "$word[3]", 'navy') if ($currentLength >= 4); if ($currentLength >= 5) { for ($pos = 4; $pos <= ($currentLength-1); $pos++) { if ($word[4] =~ /pppd/) { $win -> insert('end', "$word[$pos]", 'red'); } elsif ($word[4] =~ /chat/) { $win -> insert('end', "$word[$pos]", 'orange'); } else { $win -> insert('end', "$word[$pos]", 'green4'); } } } } # Colors support for mail-in log file # (Standard file for Linux system) # sub ColorMailIn { my ($win, $currentLine)= @_; my ($currentLength, $pos, @word); @word = split(/ +/, $currentLine); $currentLength = @word; for ($pos=1; $pos <= ($currentLength-1); $pos++) { $word[$pos]="$word[$pos] "; }; $win -> insert('end', "$word[0] $word[1]", 'blue') if ($currentLength >= 2); $win -> insert('end', "$word[2]", 'LightSlateBlue') if ($currentLength >= 3); $win -> insert('end', "$word[3]", 'navy') if ($currentLength >= 4); if ($currentLength >= 5) { for ($pos = 4; $pos <= ($currentLength-1); $pos++) { if ($word[$pos] =~ /fetchmail/) { $win -> insert('end', "$word[$pos]", 'red'); } elsif ($word[4] =~ /fetchmail/) { if ($word[5] =~ /POP/) { $win -> insert('end', "$word[$pos]", 'orange'); } elsif ($word[5] =~ /SMTP/) { $win -> insert('end', "$word[$pos]", 'green4'); } else { $win -> insert('end', "$word[$pos]", 'DarkViolet'); } } else { $win -> insert('end', "$word[$pos]", 'black'); } } } } # Colors support for mail-out log file # non-standard file: depend of your MDA # # FOR SMAIL ONLY # sub ColorMailOut_smail { my ($win, $currentLine)= @_; my ($currentLength, $pos, @word); @word = split(/ +/, $currentLine); $currentLength = @word; for ($pos=1; $pos <= ($currentLength-1); $pos++) { $word[$pos]="$word[$pos] "; }; $win -> insert('end', "$word[0] ", 'blue') if ($currentLength >= 1); $win -> insert('end', "$word[1]", 'LightSlateBlue') if ($currentLength >= 2); $win -> insert('end', "$word[2]", 'navy') if ($currentLength >= 3); if ($currentLength >= 4) { for ($pos = 3; $pos <= ($currentLength-1); $pos++) { # delivering mails if ($word[$pos] =~ /Completed/) { $win -> insert('end', "$word[$pos]", 'red'); }; if ($word[$pos] =~ /Delivered/) { $win -> insert('end', "$word[$pos]", 'red'); } elsif ($word[3] =~ /Delivered/) { if ($word[$pos] =~ /VIA/) # !!! délivrance !!!! { $win -> insert('end', "$word[$pos]", 'DarkViolet'); } elsif ($word[$pos] =~ /^TO|DIRECTOR/) { $win -> insert('end', "$word[$pos]", 'orange'); } elsif ($word[$pos] =~ /ORIG|TRANSPORT/) { $win -> insert('end', "$word[$pos]", 'green4'); } else { $win -> insert('end', "$word[$pos]", 'black'); } }; # incoming mails if ($word[$pos] =~ /Received/) { $win -> insert('end', "$word[$pos]", 'yellow3'); } elsif ($word[3] =~ /Received/) { if ($word[$pos] =~ /FROM/) { $win -> insert('end', "$word[$pos]", 'DarkViolet'); } elsif ($word[$pos] =~ /HOST|PROGRAM|SIZE|ID-METHOD/) { $win -> insert('end', "$word[$pos]", 'orange'); } elsif ($word[$pos] =~ /PROTOCOL|ORIG|IDENT/) { $win -> insert('end', "$word[$pos]", 'green4'); } else { $win -> insert('end', "$word[$pos]", 'black'); } }; if (!( ($word[3] =~ /Delivered|Received|Completed/))) { $win -> insert('end', "$word[$pos]", 'black'); }; } } } # Colors support for mail-out log file # non-standard file: depend of your MTA # # FOR EXIM ONLY # sub ColorMailOut_exim { my ($win, $currentLine)= @_; my ($currentLength, $pos, @word); @word = split(/ +/, $currentLine); $currentLength = @word; for ($pos=1; $pos <= ($currentLength-1); $pos++) { $word[$pos]="$word[$pos] "; }; $win -> insert('end', "$word[0] ", 'blue') if ($currentLength >= 1); $win -> insert('end', "$word[1]", 'LightSlateBlue') if ($currentLength >= 2); $win -> insert('end', "$word[2]", 'navy') if ($currentLength >= 3); if ($currentLength >= 4) { for ($pos = 3; $pos <= ($currentLength-1); $pos++) { # exim talking if ($word[$pos] =~ /queue|run:|pid|-qf/) { $win -> insert('end', "$word[$pos]", 'navy'); } # delivering mails elsif ($word[3] =~ /\<=/) { if ($word[$pos] =~ /\<=/) { $win -> insert('end', "$word[$pos]", 'green4'); } elsif (($word[$pos] =~ /@/)&&(!($word[$pos] =~ /^id=/))) { $win -> insert('end', "$word[$pos]", 'DarkViolet'); } elsif ($word[$pos] =~ /H=.*|U=.*|S=.*/) { $win -> insert('end', "$word[$pos]", 'orange'); } else { $win -> insert('end', "$word[$pos]", 'green4'); } } # incoming mails elsif ($word[3] =~ /=\>/) { if ($word[$pos] =~ /=\>/) { $win -> insert('end', "$word[$pos]", 'red'); } elsif (($word[$pos] =~ /@/)&&(!($word[$pos] =~ /^id=/))) { $win -> insert('end', "$word[$pos]", 'red'); } elsif ($word[$pos] =~ /R=|H=/) { $win -> insert('end', "$word[$pos]", 'orange'); } else { $win -> insert('end', "$word[$pos]", 'green4'); } } elsif ($word[$pos] =~ /Completed/) { $win -> insert('end', "$word[$pos]", 'red'); } else { $win -> insert('end', "$word[$pos]", 'green4'); } } } } # All colors tag # sub AllTag { my ($win) = @_; foreach $color (qw/black red blue orange green4 yellow3 DarkViolet LightSlateBlue navy/) { $win -> tagConfigure ( "$color", -font => '-*-fixed-medium-*-*-*-13-*-75-*-*-*-*-1', -foreground => "$color", ); }; } # Analyse the mail-in log file # sub AnalyseMailIn { my ($line)= @_; my (@word, $print, $user, $message, $byte); AllTag($text_{LabFrameTop}); if ($line =~ /POP3\> USER/) { @word = split(/ +/,$line); chop($word[7]);chop($word[7]); chop($word[7]) if ($version_debian < 2.1); # remove \n, ^ et M $text_{LabFrameTop} -> insert('end',"\n$word[7]: ", 'red'); $print = "identification réussie à $word[2], le $word[1] $word[0]\n", $text_{LabFrameTop} -> insert('end',"$print", 'navy'); }; if ($line =~ /POP3\< \+OK [0-9]+ [0-9]+/) { @word = split(/ +/,$line); chomp($word[8]); $size = $word[8]; $number = $word[7]; $message = "courriels" if ($word[7] > 1); $message = "courriel" if ($word[7] <= 1); $byte = "octets" if ($word[7] > 0); $byte = "octet" if ($word[7] == 0); $print = " Vous avez $number $message ($size $byte)\n"; $text_{LabFrameTop} -> insert('end',"$print", 'black'); ++$numberPOPaccountCheck if ($number == 0); }; if ((!($number eq "-1"))&&($number > 0)) { if ($line =~ /POP3\> DELE [0-9]+/) { @word = split(/ +/,$line); chop($word[7]);chop($word[7]); chop($word[7]) if ($version_debian < 2.1); # Why ? # may be a perl version problem on chop... $print = " * téléchargement en cours ($word[7]/$number)\n"; if ($word[7] == 1) { $text_{LabFrameTop} -> insert('end',"$print", 'green4'); } else { $text_{LabFrameTop} -> delete("end - 2 lines", 'end'); $text_{LabFrameTop} -> insert('end',"\n$print", 'green4'); }; if ($word[7] == $number) { $print = " * téléchargement terminé.\n"; $text_{LabFrameTop} -> insert('end',"$print", 'green4'); $flag_end = 1; ++$numberPOPaccountCheck; }; }; }; if ((($flag_end == 1)||($number == 0))&&($numberPOPaccountCheck == $numberPOPaccount)) { $print = " Vous pouvez maintenant vous déconnecter\n"; $text_{LabFrameTop} -> insert('end',"$print", 'DarkViolet'); $text_{LabFrameTop} -> bell(); $flag_end = 0; $numberPOPaccountCheck = 0; $number = "-1"; }; $text_{LabFrameTop} -> see('end'); } # Analyse the mail-out log file # Depends of your MTA # # SMAIL ONLY # sub AnalyseMailOut_smail { my ($line)= @_; my (@word, $print, @date); AllTag($text_{LabFrameBottom}); if ($line =~ /Delivered VIA/) # outside delivery only { @word = split(/ +/,$line); $word[5] =~ s/TO://; @date = split(/\//,$word[0]); $print = "Le courriel destiné à "; $text_{LabFrameBottom} -> insert('end',"$print", 'black'); $print = "$word[5] "; $text_{LabFrameBottom} -> insert('end',"$print", 'red'); $print = "a bien été acheminé à\n"; $text_{LabFrameBottom} -> insert('end',"$print", 'black'); $print = " $word[1] "; $text_{LabFrameBottom} -> insert('end',"$print", 'DarkViolet'); $print = "à la date du "; $text_{LabFrameBottom} -> insert('end',"$print", 'black'); $print = "$date[1]/$date[0]/$date[2]\n"; $text_{LabFrameBottom} -> insert('end',"$print", 'DarkViolet'); } } # Analyse the mail-out log file # Depends of your MTA # # EXIM ONLY # sub AnalyseMailOut_exim { my ($line)= @_; my (@word, $print, @date); AllTag($text_{LabFrameBottom}); if ($line =~ /=>/) { @word = split(/ +/,$line); if ($word[4] =~ /@/) # for filtering local delivery { @date = split(/-/,$word[0]); $print = "Le courriel destiné à "; $text_{LabFrameBottom} -> insert('end',"$print", 'black'); $print = "$word[4] "; $text_{LabFrameBottom} -> insert('end',"$print", 'red'); $print = "a bien été acheminé à\n"; $text_{LabFrameBottom} -> insert('end',"$print", 'black'); $print = " $word[1] "; $text_{LabFrameBottom} -> insert('end',"$print", 'DarkViolet'); $print = "à la date du "; $text_{LabFrameBottom} -> insert('end',"$print", 'black'); $print = "$date[1]/$date[0]/$date[2]\n"; $text_{LabFrameBottom} -> insert('end',"$print", 'DarkViolet'); } } } # For checking a sig-up signal on ppp if connection attempt fails # sub AnalyseMessageLogAfterConnect { my ($line)=@_; my (@word); AllTag($connect2); @word = split(/ +/,$line); if (($line =~ /chat/)&&($line =~ /abort/i)&&($line =~ /busy/i)) { $ConnectionLogVar ="Tentative de connexion à votre fournisseur d'accès...\n"; $connect2 -> insert('end', "$ConnectionLogVar", 'DarkViolet'); } elsif ($word[6]) { if (($word[6] =~ /[0-9]{10}/)&&($line =~ /send/i)&&($line =~ /chat/i)) { $ConnectionLogVar = " + numérotation du modem\n"; $connect2 -> insert('end', "$ConnectionLogVar", 'navy'); } elsif ($line =~ /Serial connection established/i) { $ConnectionLogVar = " + connexion au fournisseur réussie\n"; $connect2 -> insert('end', "$ConnectionLogVar", 'navy'); } elsif ($line =~ /Remote IP/i) { $ConnectionLogVar = " + connexion ppp active\n"; $connect2 -> insert('end', "$ConnectionLogVar", 'navy'); $ConnectionLogVar = " Vous êtes maintenant connecté(e) au réseau:\n"; $connect2 -> insert('end', "$ConnectionLogVar", 'green4'); $ConnectionLogVar = " vous pouvez allez rapatrier votre courrier.\n"; $connect2 -> insert('end', "$ConnectionLogVar", 'green4'); } } elsif (($line =~ /chat/)&&($line =~ /Failed/i)) { $ConnectionLogVar = " + connexion au fournisseur perdue\n"; $connect2 -> insert('end', "$ConnectionLogVar", 'navy'); $ConnectionLogVar = " Votre tentative de connexion a échoué: recommencez.\n"; $connect2 -> insert('end', "$ConnectionLogVar", 'red'); $connection_start = 'no'; } elsif (($line =~ /pppd/)&&($line =~ /Exit/i)) { $ConnectionLogVar = "\n Vous n'êtes plus connecté(e).\n\n"; $connect2 -> insert('end', "$ConnectionLogVar", 'orange'); $disconnectStatus = "no"; } } # close properly the "log" file handle # # sub QuitLog { my (@LOG)= @_; my $log; foreach $log (@LOG) { close($log) or die "Fermeture impossible de $log: $!"; }; }