Périmètre de l'intervention d'Ousmane Wilane (projet VoIP) suite à VoIPFormationJuin2006 1. backport complet de asterisk 1.2.9.1 + bristuff pour Sarge (depuis backports.org et sources de etch), avec toutes les dépendances nécessaires (surtout h323) : **2 jours** 1. création d'un paquet asterisk version SVN (1.3.99) : **2 jours** 1. intégration des ip phone 5 (programmation des touches, p.ex. Transfert pour le "transfert assisté") : **2 jours** 1. retours sur services de base : transfert, conférences, parking, etc. **2 jour** 1. utilisation de DUNDi dans le cadre du déploiement : **2 jours** Total : 10 jours. L'intervention commencera lundi 10 juillet (sur 10 jours ensuite, mais pas forcément contigüs). Cette page sera le lieu de suivi de l'avancement. = lundi 10 juillet = backport 1.2.9.1 depuis Sid sur une sarge vierge (xen1.sn.auf) * suppression de oh323 : on préférera la version ooh323 contenue dans asterisk-addons (à backporter) * suppression des docs doxygen (out of date et accelère la compilation par un facteur infini) * suppression des dépendances sur les paquets suivants: libgtk1.2-dev, libzap-dev, libtonezone-dev libpri-dev zaptel-source libopenh323-dev * Ajout -A dans debian/rules pour la création de /var/run/asterisk (découvert à l'installation) -- ligne 141 dh_installdirs -A var/run/asterisk -- résultat : asterisk 1.2.9.1.dfsg-2.auf = mardi 11 juillet = * Le package Asterisk contient le script de démarrage Sysv et les docs (/usr/share/doc). En plus d'installer asterisk-bristuff ou asterisk-classic, il faut installer le paquet asterisk. Puis le configurer pour le démarrage automatique en éditant /etc/default/asterisk (ajouté à README.Debian) * Nettoyage du Suggests (ekiga, gnomemeeting, etc) * Premiere publication asterisk-ooh323 * Il s'agit Pilote de canal H.323 pour Asterisk par Objective Systems, Inc. * Il existe trois pilotes de canaux H.323 pour asterisk. Le premier est distribué avec Asterisk (channels/h323), le second est produit par inaccessnetworks (http://www.inaccessnetworks.com/projects/asterisk-oh323) et n'est pas inclut dans les sources d'Asterisk. Le troisème qu'on utilise est produit par Objective Systems, Inc. et publié dans asterisk-addons. Il est très différent des deux autres en deux points: * Il dépend pas de la lourde suite de biliothèques H.323 openh323 et pwlib * Il est écrit en C alors que les autres le sont en C++ Ce paquet produit principalement chan_ooh323.so qui est le pilote de canal H.323 et son fichier de configuration h323.conf. De plus un fichier extensions.conf.sample est produit pour les exemples d'utilisation du pilote dans le dialplan. Procédure Crash: * Téléchargement de asterisk-addons sur ftp.digium.com et copie du repèrtoire asterisk-ooh323c dans le repèrtoire de travail * dh_make et personalisation les fichiers produits. Pour l'essentiel: 1. debian/rules Ajouter les directives suivantes à la cible `install': {{{ $(MAKE) installdirs DESTDIR=$(CURDIR)/debian/asterisk-ooh323c libdir=/usr/lib/asterisk/modules $(MAKE) installdirs DESTDIR=$(CURDIR)/debian/asterisk-ooh323c/etc/asterisk libdir= $(MAKE) install DESTDIR=$(CURDIR)/debian/asterisk-ooh323c $(MAKE) sample DESTDIR=$(CURDIR)/debian/asterisk-ooh323c }}} conformément au Makefile généré par ./configure 1. debian/control {{{ Conflicts: asterisk-oh323, asterisk-h323 Replace: asterisk-oh323, asterisk-h323 }}} 1. asterisk-ooh323c.ooh323.logrotate contient les directives logrotate 1. asterisk-ooh323c.postinst et asterisk-ooh323c.postrm ré-demarrent asterisk pour l'essentiel résultat : asterisk-ooh323c_1.2.3-1_i386.deb = jeudi 13 juillet = backport SVN Trunk r37545 depuis Sid sur une sarge vierge (xen1.sn.auf) Procédure Crash: * ./configure classique avec une option supp pour le support de jingle (iksemel), les dépendances définit sont: zlib1g-dev, libreadline5-dev, libgsm1-dev, libssl-dev, bison, libasound2-dev, postgresql-dev, unixodbc-dev, libnewt-dev, libsqlite-dev, libspeex-dev, graphviz, libcurl3-dev, gsfonts, libpopt-dev, libogg-dev, libvorbis-dev, libiksemel1-dev * menuselect pour l'activation de la moh native et des fichiers son FR * make install spécial pour faire la part entre les fichiers contenus dans asterisk-sounds-main et dans asterisk-classic (cf debian/rules) * Intégration du nouveau serveur web intégré static_http résultat : . asterisk-classic_1.3.99-1_i386.deb . asterisk_1.3.99-1_all.deb . asterisk-dev_1.3.99-1_all.deb . asterisk-sounds-main_1.3.99-1_all.deb . asterisk-web-vmail_1.3.99-1_all.deb . asterisk-config_1.3.99-1_all.deb = vendredi 14 juillet = * Valeure par défaut de internal_timing portée à `no' (Utilisation du Timer RTC pour les trunk IAX2 et pour les conférences Meetme) Tester si RTC fonctionne avec Xen, sinon ajouter la dépendance Zaptel/libpri? * Vérification de la conformité des contenus de paquets (FHS?) A re-vérifier par les Debianeurs (ici c'est une boutique debian :) * Correction du repèrtoire agi-bin (/usr/share/asterisk) * Intégration d'une cible datafiles dans debian/rules (sans make sounds) pour les fichiers static_http (AMI) et images sous /var/www/_asterisk/static-http et /var/www/_asterisk/images déjà utilité par la cible webvmail. * ./configure est invoquée --without-zaptel donc chan_zap.so n'est pas compilé même si le paquet zaptel est installé sur la machine de compile. * Modification de la règle build-arch pour la définition MENUSELECT des fichiers sounds-core-gsm FR aulieu de des EN (Definition de SOUNDS_URL et MOH_URL pour permettre l'utilisation d'une ressource locale) * Modification de la cible clean (invoquer distclean sur les sources :) clean n'arrive pas aux repèrtoires mxml et sounds = lundi 17 juillet = * Suppression des patches ast_data_dir et paramètrage de defaults.h qui contient maintenant astdatadir et astvarlibdir * Construction des paquets 1:1.3.99 et 1:1.2.9.1 achevée. * Test sur pristine xen voip-install = mardi 18 juillet = * Re-création de la dépendance de construction zaptel-source pour la compil de app_meetme * Génération des paquets 1.3.99 pour SVN-trunk-r37857M (svn up) * Tests 1.3.99 * Test de atxfer (*2 features.conf): marche en général * Quelques crash aléatoires * Parking crash toujours (gdb méne à libpthread, xen?) * Conf à trois marches pas en natif. * Tests 1.2.9.1-bristuffed + ooh323c * atxfer marche (*2 dans features.conf) * parking marche (bxfer sur 700 exten de parking définit dans features.conf) * Conf a trois marche pas * MeetMe marche (dépendance zaptel) = jeudi 20 juillet = Etude du Firmware YWH500 (PALH323API). Objectifs: Envoyer '*2' lorqu'en cours d'appel la touche 'Transfer' est appuyé sans numéros (Transfert assisté). Le transfert dit `aveugle' est toujours possible en composant le numéros de la destination avant d'appuyer sur la touche `Transfer'. `*2' sont les DTMF accpetés par défaut par Asterisk (features.conf). Résultat: * Le point d'entrée de la manoeuvre: main/keypad.c {{{ case 'U': //FUN3 OnCallTransfer(); break; }}} !OnCallTransfer() est définit dans main/function.c {{{ void OnCallTransfer() { if (!Task_bConnected) { return; } DisplayString(g_cCallTransfer, 0); #ifdef CALL_H323 ... #endif #ifdef CALL_SIP ... #endif #ifdef CALL_IAX2 if (p_strlen_x(Key_pBuf)) { Iax2UnattendedTransfer(Key_pBuf); } else { Iax2AttendedTransfer(); } #endif } }}} La fonction Iax2AttendedTransfer() est définit dans P_IAX2/iax2.c mais il ne marche pas. Une fonction Iax2SendDtmfKeys est définit dans P_IAX2/iax2.c et le prototype de la fonction est définit dans inc/inc/p_iax2.h: {{{ P_IAX2_API void Iax2SendDtmfKeys(PXCHAR pKeyBuf, UCHAR iLen); }}} Nous essayons d'utiliser Iax2SendDtmfKeys() pour envoyer les dtmfs '*2' mais la journée est achevée sans trouver un moyen de faire recompiler les modifications apportées dans iax2.c pour vérifier la théorie. = vendredi 21 juillet = Il faut recompiler la bibliothèque P_IAX2.LIB sous lib/ dés qu'on la modifie mk.bat ne le fait pas par défaut : mk lib p_iax2 * Définition de deux fonction avec les prototypes suivants dans P_IAX2/iax2.c: {{{ P_IAX2_API void Iax2_AUF_SendKey(UCHAR iKey); P_IAX2_API void Iax2_AUF_AttendedTransfer(); }}} ces prototypes sont définit dans inc/p_iax2.c Les corps de fonctions sont: {{{ P_IAX2_API void Iax2_AUF_AttendedTransfer() { Iax2_AUF_SendKey('*'); Iax2_AUF_SendKey('2'); } P_IAX2_API void Iax2_AUF_SendKey(UCHAR iKey) { DCHAR iKeyID; XCHAR pKeyBuf[2]; if (!IsInCall()) return; if (Task_bCallHold) return; iKeyID = iKey; pKeyBuf[0] = iKeyID; Iax2SendDtmfKeys(pKeyBuf, 1); } }}} * Appel de Iax2_AUF_AttendedTransfer() en lieu et place de la fonction native Iax2AttendedTransfer() qui ne marches pas. * '*2' est envoyé lorsqu'en cours d'appel la touche `Transfer' est appuyé avec un KeyBuf vide. * La compilation du firmware inclus un méchanisme de personalisation pour les fabriquants d'équipements (OEM), Thomas suggère à juste raison que ce méchanisme soit utlisé avec une compilation conditionnelle à peu près comme ceci: {{{mk ywh500 iax2 fr auf_attxfer}}} puis dans main/function.c: {{{ #if defined AUF_ATTXFER Iax2_AUF_AttendedTransfer() #else Iax2AttendedTransfer() #endif }}} Ce méchanisme utilise reversion.exe pour la génération du fichier version.h qui gère la définition des symboles à exporter. Une modification du fichier inc/version.h avant la compile: {{{ #define OEM_AUF_ATTXFER #ifdef OEM_AUF_ATTXFER #define OEM_NONE_IVR #endif }}} aboutit à des symboles perdus et à des erreurs de Lien (Linkling). Conclusions partielles: * Transfert Assisté marche * Parking Marche * Conférence MeetMe marche * Conférence à trois (Trouver la meilleure Solution avec Thomas) = lundi 24 juillet = * Suppression du Transfert dit `Aveugle' * Suppression des prototypes et fonctions non utilisées (Compilation sans Warning) * Version RC1 du firmware (ywh500_iax2_fr_none_ivr_152007.bin) * Mise en oeuvre de la conférence à trois (La YWH500 ne MIX pas les canaux En fait c'est Asterisk qui aurait du le faire mais bon ...) * YWH500 dispose de deux touches qui sont traitées de façon similaire par le Firmware: Flash et Hold (OnHookFlash() et OnCallHold() toutes deux définit dans main/function.c). En ce qui nous concerne (IAX2) les commandes IAX2 IAX_COMMAND_QUELCH et IAX_COMMAND_UNQUELCH sont envoyées en interupteur par la fonction spécialisée Iax2CallHold. La touche Flash sera donc utilisée pour la mise en oeuvre d'une conférence à trois. * Cette touche envoie une séquence de Dtmf qui envoie dans un MeetMe(${CALLERIDNUM}) l'interlocuteur actuel et si vous n'avez pas d'interlocuteur, il vous envoie vous y envoie vous-même. = mardi 25 juillet = * Définition de la Macro nwc (N-Way-Calling) * Reprogrammation de la touche Flash pour le Transfert `Aveugle' vers l'extension 99 de la Macro nwc. (main/function.c:OnHookFlash()) Lorsqu'on appuie sur la Touche Flash (Le nom va changer par la magie de Thomas :) L'intercoluteur est placé dans la conférence. On apelle Les autres interlocuteurs ou on récupère les apelles en attente et on recommence la manoeuvre. Enfin on appuie sur la touche Flash (`Conf') et il/elle se retrouve dans la conférence. La Macro Détecte les deux mode d'appels (Transféré = Avec Interlocuteur et non transfére = Sans Interlocuteur) et crée une conférence dynamique dont le numéros est le numéros de l'intiateur (Numéros de poste). Ensuite on peut y ajouter autant de participants. {{{ [macro-nwc] exten => s,1,NooP(${BLINDTRANSFER}) exten => s,2,Gotoif($["${BLINDTRANSFER}" != ""]?s-TRANSFERED|1:s-NOTTRANSFERED|1) exten => s-TRANSFERED,1,Cut(TECH=BLINDTRANSFER,/,1) exten => s-TRANSFERED,2,Gotoif($["${TECH}" : "IAX2"]?s-TRYIAX2|1:s-INVALID|1) exten => s-NOTTRANSFERED,1,Noop(${CHANNEL}) exten => s-NOTTRANSFERED,2,Gotoif($["${CHANNEL}" != ""]?s-IAX2HOLDER|1:s-INVALID|1) exten => s-TRYIAX2,1,Cut(CONFHOLDER=BLINDTRANSFER,/,2) exten => s-TRYIAX2,2,Cut(CONFHOLDER=CONFHOLDER,-,1) exten => s-TRYIAX2,3,Goto(s-USERJOIN|1) exten => s-IAX2HOLDER,1,Cut(CONFHOLDER=CHANNEL,/,2) exten => s-IAX2HOLDER,2,Cut(CONFHOLDER=CONFHOLDER,-,1) exten => s-IAX2HOLDER,3,Goto(s-CHECKCONFEXIST|1) exten => s-USERJOIN,1,MeetMe(${CONFHOLDER},qdw) exten => s-CHECKCONFEXIST,1,MeetmeCount(${CONFHOLDER},CONFCOUNT) exten => s-CHECKCONFEXIST,2,GotoIf($["${CONFCOUNT}" = ""]?s-INVALID|1:s-CONFNOTEMPTY|1) exten => s-CONFNOTEMPTY,1,Gotoif($[${CONFCOUNT} > 0]?s-HOLDERJOIN|1:s-INVALID|1) exten => s-HOLDERJOIN,1,Meetme(${CONFHOLDER},qdA) exten => s-INVALID,1,Playtones(info) exten => s-INVALID,2,Wait(10) exten => s-INVALID,3,Hangup() }}} * Affichage d'une message lors du transfert vers la conférence : main/function.c : {{{ CCHAR pBuf[] = "Mise en Conf Ok!" DisplaySTring(pBuf,0) sysSleep(8000000) }}} * Remplacement de l'application Cut (deprecated) par la fonction CUT dans la macro nwc ---- [[CatégorieVoIP]]