Commit 5633ac9e authored by llea's avatar llea

Fix some bugs, tone, add congestion sound when call number is not found

parent 18400676
......@@ -69,7 +69,7 @@ AudioRtp::createNewSession (SipCall *ca) {
}
RTXThread = new AudioRtpRTX (ca, manager->audiodriver, manager, symetric);
qDebug("Start audio thread !!");
qDebug("-- START SOUND --");
RTXThread->start();
return 0;
......
......@@ -89,20 +89,6 @@
</size>
</property>
</spacer>
<widget class="QPushButton">
<property name="name">
<cstring>buttonApply</cstring>
</property>
<property name="text">
<string>&amp;Apply</string>
</property>
<property name="accel">
<string>Alt+A</string>
</property>
<property name="autoDefault">
<bool>true</bool>
</property>
</widget>
<widget class="QPushButton">
<property name="name">
<cstring>buttonSave</cstring>
......@@ -1214,7 +1200,7 @@ Montreal, Quebec H2T 1S6&lt;/p&gt;</string>
</widget>
<images>
<image name="image0">
<data format="PNG" length="4288">89504e470d0a1a0a0000000d49484452000000ad0000003008060000006357fade0000108749444154789ced5d5f685b579efe6e098b5adca20cc31087cc600fdb82dd61a8b4f6839d9912b92f3b761266a476a176b70f529c12bbfbd0dadd97fc5912252ca9e32c9db5a638910261ac04b2561e6cd903d98db278472ad4d1f59022071cb08ba7dc04136c238c224ce0db876b5deb4af75edd7be5b4e954f7e523b9e7fcceef1c9dfbddeffceeef1c8300c200760c49729924c9e4167293dcf1766af883c5aa27687c41626685748dde26ce91383dae8b9e2839702b4392fcae3b5ec3ef2fdaaa9859219312e91c8e13d324ce8d5b466782f44fb036816b6819ad5520e9b95a9951ada2274a4ad95c4d42d4d0149a2ac84d32b36a8f51ad607026539bb835ac88150b64567274457696598dd0357abb26196a68888605b8423a13cf9e614bd1391caf4ddc1aeaa2ee8dcc4a8ece611b8c198a131112a3b78908d979334d921c9f97b8b86ade8ef3fc78f51397e4c86898fe637df4f7f66da19ffe637d1c1a1e22255292a4ef8f2421199fd8d9073a97cd716838477f6f1fdb0e78e8eff593924dfbcfc03f2ddc19863d1fe7ea26c92c0dafe422bf15c6658e94262436b5b838d21266538b8bae9636dd7f1f3f1dfc5e30fbf1d341c5ff9df2373d9a2e1b8f814f066c3dc8cfc23f534c9bdba465863573f9a7d3b634ae1dc6f51feb53fd109d07bd1c190d9359722c3aced5e11c3d073b95fbae9636a6c5f4f3cfb894fd677687264496aa7172b5b4d1dfdb677fc2edb47f3a58f61f9e798b1a345579c2b6dd4856a5713d5793e62714a962d44c74517700b94072818c4fc70ded7381d53347a5fa55d8a764c33f926d073c656fa0d5999cf1787d0bfe552a2f840104004400746f922ffd7b0cd8e5039e9a43bf4b44e4376ee85d813f89b832e7366d4f0fc70e3d44cf2ff70a91227fb55014d33c72f443e49187030eb479da111a1aae584f8559d2f7410f961e2c29768ab1d3d389fede001a5ffbb9d07ec0c3fc461e8e3a07521309445e1184627b8999244f9c3a81f58d75b89a9ad0f1c76b42c14fc7f5dd38321b407e23afb2ef6a6a82eb0d17063f1e4444d8b6e71dce71fff5fd70c0810b172fa0e3cdfd426834ccc8e58852dfb96737d61fad218f3ce6af8988bca6f6a78005bfb5fa373f2122b257100212d971b44bb1575cce51e740cc13057a81fabdf2ef62c63f479d43e9afe21fc9d0a508a627a7b1f46849d58e73cf6e247e378527ef3cc18bafbc244400bca07484e4deff9c025a7d0062a6b1bf457fc2a696802b705bb2a7871f3eae0736c94a13ceed72ab06b8f94e13ba0e7ae99dc9313593648064a589dbdce1c6d2832538ea1c989f10215e4b617e564487a71dfde8c7f49d69f4f405801cd9bfab1f79e491dfc8a3abbbabccdedac535ac6facc30107d6d7d6110070617884478e7e88b7eff8d0b3d183fa3df508f786e16a75e1b8f338e6eedfc7b5eb37d1dcea4640daf677fff5fde887dc5e475d3b2200dae052f5d7f7c8abfcfbc4f5b3bafd4c5d4a208fbc62af507ffca318e0dc1a87c36ef81e7951bfa71ef31322c297469471c86fe4f1d66417527d22acf8d7b3d1a3f68f64bba70391cb112c3d5a42705f109d873a91bc9844e3ab8df03df2a2f97337def276010bf2efaf306d6022cd2b5fd960c41f27c0a31d9a93b6ff21f087cbd5316c31063ff2a1fe156de650a144361f769731482953343535a1e3571de8e9f6a9182d40529c13e176ff43194337b7b8a830d2ac88d0a5088a99646a22a6304f806473ebb61ff31322a6ee4ee1e49973c8230f679d13fdbdfde8e9795bddce02d9dc5d542f2122f28a20845ada586827d01b40ff074784406f1fe7e6e6ca98bafb9d6e741d3e2844a3e374fdc58de1f5b3c02e07dc6fb8d17f3420f7b7a41def212f1affed64e57128edd7ac888860c3bf435d081ced47e17ea7a7134d43e754bfef89d3414e4f4e238f3cda5adbd0fef91f0459436c56178fcdace888d9156bd1821d8d26901c1a1ee1ede1a4a92802457dbb69314d2e909d07bdaafa14b734fb01cff6aab9c8cef1d341a5fcf86fe30c0318ff6d5ca93f76635c572316a21fae96366535afe56f726bf5afd57e1880567f0bed5264797f0cc69522b7c6a15365afb088b5ea1f17d4ed7bdfed26b394ed91e40ccb7e3f9214c2b0a7658bb1ed5d1f52af6a922d2e7cb1844fee34ee08d3cada76093dbffcb9358d0ae0a124b1bebe1e89ff4ba1e3413b7cff53ae590b8c1190c8feff18c4dcaca8bcda35b5df56f9b5e11caf6c6939479d03a93b092c3d5842cfd180523f78ea38ba0e1f144a995ac5f04598984972f0e341859103ff7b4787c9fc9c9bbbaff8d57ff78b32a67af8e821f014c02ec051f722429f5e90dbd561cce237969571b0ec5f49fb95d059e7c4ed892979c6bb46ab6744a36b28b5738c3b62c08856313e1d5731467834cc62866b3be02117c8c26a76ecc6b826c350a2611cb8f3a0576130adfa9afe492cabafc558a571562bfd4f8b69cdfe943264e741af3c0645e3a0c5d056fd2b6ddf6cbcfc8587d91ce71e03988d01f0d9c6d8fd87da540b60b00d186f7828336695ed7c381943c5c51449514c575c7475fda60b21849427796da31b6f9de9523166e43541c05e41880882d0f34f6f0bb13d3795f26e971b1100d82b089d873ae1804365aff0efa9dfc5b6a31b2e51b97fedfa4ddd37836fa047a91f6e1d410450d90fcd46100010ba1b51b567e50de476b955fe16fa13c892472e1f81030e44eba2989a8c21b2b7681cdef1a9fa07176cf957dafed98f4ee8be791e4a92b2087fc1f9f28ba87a75ef4cc0d754af3b6901c0d7540f1e03d2c7aa8b22a0d587e857c613b6b9d58d2f8ecea1b9d58db6e822a337c61920891c1920999a49b2734252bd9a82fb82186c7d51b5cac59cdaeee027032c847ffad1afba7ff6d409d5abacb08a763a9dc0bbdbe5229742cafde93bd3688b2eb2b02a56c26def76b3e3418752bfbeb71e01406dbf3520976f09a8dab32299300795bf85fe4cfd794ab1875d803827aac6c1d7dda38a3a14ee5bf64f1084e4c5a472bffd70872a5a821c1910c9f6031ede3c3cbd1d3df0db8d1a14d03905f675194e58ad4bb894001e77d86a77e0980f4d3fd17e229f64733cd27f0473f7ef9bd64aaea6269c3d79560eb174abb5ae73cf6ee4379e686aba520dd8795ae25b935daa72056d571a07eee8d68e7f1663e39e468c5cbc80c6d7640d1f39e061c10f2dcdd8b8a711def8cdcad1959207bcac3f5b61a8e238ae9971b879d0cb429c55cbbf82362f0b0b16ad09f4c6a3f1d546c4ae45111104016356bf8015a1772b19c6ee753c91b1f985cc78951b86fc89726878885adfd69b5a5cbc3d9c9435546972c896664b8ea6e93fd6c7f4685a5ebd2f6cad6a45323c1a96b56e4eed4721e7c17fac8fc9d1b49c9463e0677c3aae2a5f686f687844f353687c3abeed4f41fb914afde48c852f8745e354e84fd917bad130d35b7e2547d3f2782d50d6b06279bd4afe197e79d468cf7fac8fd28444cea8c719b6f25e3f93b3b676e24a2eae12216bed3b879fffe4961a3e3b8455a68b2fb3623697e52b4b86172c462b0c3ac64d9904076e919e797933658eaced0afe1b41f34c7bde5c36573597957c5ba38e35e830b72b523d43e736655f93cbab2475ec15dd4f2eafeee88392d379f092cbab94b2f296a56056de25bd13ed8d7cb948bf24272d495932b3a2ee4f7c41a2272adf97f1368359fb7bfe322bab0c66d5f6bc8b6a7be69836f4cce7ab72e536ab675abbf5cce088581e9f2e9db05aed6656abcf122bec7e768daa272eb3da71f0e4b2f604373f61cbed3a13ea7ec417f57fa7815b16f6fc91f41a6403168f7365a6fd1618b6f45acd55c7b476eb997a3595d82bdd8ce9bd91d4f5db13951f4abb8ca7db0f6ab717ac32af3598d5b65b3c81729ba427aa3fdea6f6fc916cf82cae3b6e991575fd8a4cfb2caecc8aac61e3f3fa652a31ee77c5b4a5f6a49c7a402be523bbc4ad5c0d8bed4a39fd7e2497b599363863bd9d620cce9867f01cf5cfc130ca1931aad710d2ae07a319deb6f04ce62cc9a27642710ee5c8558dc59d77d99e36fd2e99d6ccb910ce61eb5a373893b1ccb452954c2b9960da523f8c4e1a6a086d6bee815b19eaad3d70cef82422fd386d82ba5102ef4d12a22c1d304de2aa8d499bd268f76a525d284b62a6bc9cf7069f5ba6b512f71ebb67dc0fb34c4b5da6adee1c89e08c761c9d15b4b21e439b4167a2b2fd17961ecf43eb1b7fe7ba08bc0ce51abc330fe1f7807026869bf7014cc680a772f9c543b07e7d95286ff79b76089fc6b6cbbc0c781f8b65e546fed1f84b8f51ee82d5ecb0b24f9fa5f6eeceabcbcda60cdb2fc6f726e53c6653eddf55ff4eaafefeb4dc2fccc680379aabea2fde68d6b6fb53e37a27de1484e42fd6e07458cb2d71edf141fa15809f0986597cbaab5d152b866e1b3e2146da54976945e327ae105ad2f2afd2aaf879d2b42e918c17ef31a3cc80c5f9cbde1bc9edfb3aed3eef9a560badecea6e48d1741c5d57036e4f587dcd6b65376ed9a43571ca62db427939e7f9ca13ef79d2b47ad182dc26e95ddc2e5769953d70eb7ba0694b51c72f2d6cf8cc7c823f08c07ba3fc894aaf9030732aa289ddb89a93b602d3ea61d2c44112cf8ba635b38bb8f48cb4cc2ae5b544d10faf152f7d9e356dc16faba76a9a3d124bde234652386333cb6b5f0a7cbf1d562fbb595ec97f5e43fbcf7e64a8798e9c23f5ea4bfff204f55bbb3aed683de1f4388bed057f3d8f136fbeaed8ebb89ae49d6fda81a73178fede879e1e137bda48eefe3486f5a7e6c7217c5cbda74debf733bda74e07efaf90c39f97dbe5299f6edeeb934d72691d785da39e1974ee8a41fac8876b7fa7efb732831bb456f32630adb73fec1930ada9ec2ec0906973665f6d3a6845d39af5d70e3315d7cfe8ecc5b3d4be063684b4fdd1d5b0cba4d13c728d92524e7e036456e538ac5effc6e64bde3845f84261069fad7b083b3b094efe5984ad6bd2face85c4fb2657bd06765e3a13434a2253cbaba6b6935b8d1e60b6282ab2cb02b30982b0f671175c7fd588aa54888234ff44101a1e4c9595bbf30d707626632e3a5182818934bf5eef2a6bd7ff542c2f4f72f05686c21f81afff5b3b2a90fcc51ac40f0461fa254138f1e6ebc2173f1284a5fe83c2c88f9734a30ceffd570cbb2f03a12f17cbfc57cd60cf551b27c1883668d6e2995e38374ecfbc7986b4f3c6307ae2e34527abecb4a6d542ff44e5f1b1c2d49e421cbdc2ea9c5b111b3d06d4d49c06e50b1abd527f99255d066fde82ff6a4d5bf4c4d8d1b63ce58395cbea7908ce3a1fe67bcd6b51234d6b170b1ab292a62d3e3fc2b4a6d5c0e8bd45be37a9bf8b59a5698b7ebfc6df4fe1eb8d2edd7a9e7d29ecfe753b5cdfcccb71d8bfcc23f1d766ac6f243067b0c6f0ec4b20f17e87a2659f6c9227d7012dcd5bd0a66bffaaaf7db53025915774e645b1bdb2999fa375463a9ec858d3b316579556be1c29e1a11d62dad25578691c568b790af7076e55a729b9accd40aed1db8676c7ee91a5d9687631bea81d9735caeef25cad1c77b6abed4952b3a25fa2b59d0ce7e51d08662eaba727fa27ec9d66589af76a17f506b6d2fd1dfd1b12a57e59a837766f51959faa976be21abd4d4f54fed0a1e4e31a4cbcb17b721eadf3bc5cdf733549efe20ee5f1921cf97251c9a72dc4713d51795c75b58d91c6d0c4947cfeacd165f5fc03bb9ab0867fdb68c85476fed682de664757543fcf54d38e894f9b35fc6162c5024969e7b4a159b42b096af8c3405305739bdbdac52af35a41e7b0acc19e8781a9e1f38be62b50d698cf8a613d065f406a58c362b45c21b9bc6ab827c82a56151ea9e10f12ed1ba01c87b493b3d0108a976733d5b0862671670c911cbb2751cacaab7e39bea6deb71e9c913f40d4fe066e0dabc5ff077529ed1596bde0d30000000049454e44ae426082</data>
<data format="PNG" length="4100">89504e470d0a1a0a0000000d49484452000000ad0000003008060000006357fade00000fcb49444154789ced5d61681b679a7ea684a216efa22ccb1197b6d84bbb602f2c2bd78595bb5b32eadec2d9ced295b63f1aeff55829ce12bbfbe3eaf4e0ce6e97540947eaa84777ed2e6ead1cbeda2964edfc48641f98b5bc3827ed919ce5238b64480eb9f88212cc211b63142102cffd18499e19cd8c6646caaebbd5f7e72199ef7bbff7fbf4cd33cff7cefb8d41009300ea8624b9499264ac882c9075efa7815f5aac7981466e6798d9255d134bc43912676675519c2187169324c93ff7c01bf8c5455b0d935b64324b3a4311224ae2dcac6574c649ff55361670032da3b50624c5a9ea8c6a15c51932b39b6b4888069a425315592033397b8c6a05832bc9c6c26d6055ac5a21b995a32b5c5f663542d7c452433234d0100d2b708b74c61f3dc3aad1198a34166e037551f742722b4767c806638e478830898925224c765f592549cea632cce6ccdb719e9fad7de1921c9b98a4ffd400fdfd0345f4d37f6a80a3a151324b6632992f8e242119b95adf1b3ab79be36888f4f70fd07d54a4bfdf4f666dda7f04fe69617d18f6bce4287769586269fe4918973932b798635ba78bd39db36ceb74d1d5e9d6fdf7f099e01782d987cf04cbfed7cbdff454ba623e86de1eb275233f0aff4c316dae40cb0c6ba6f817566d695c3b8ceb3f35a0f821ba7bbd1c9b98240be4f4cc2c1922c5deeef27557a79bab89d583cfb82cfa5fa8d3822850314fae4e37fdfd03f6175cbdfdd3c18aff10d3163568a2fa82755f8ed5a471c5a998f905452a18357325ab3b81bc4d72938c2c440cedf3366b678e6aed6bb0cf8c0dff48ba8f8a154f20ded0b7c3dbb475635bf5af5a7d6112400040184080a4f0de1c70c8073c34877e5702e1bfe9805e09fc7b0217d73a4cdbd3c3e963f7d0f7eda784b0dc5f0d4c245679e2e49bc8230f071c708b5d181f0d556da7c002e9fbbb3e6cdcd928db9163b7d88dc1fe005abff90da1eba8c8fc5e1e8e2607e28b51841f1704b9bde84a8c23ef8e60676f07aeb636783ebd2494fc6cfeac15be9b3ee4f7f20afbaeb636b8bee3c2e9b74e232cc8ec85c8f6cf3ae08003173eb800cfcb2f09e313930c7f122eb7771e398c9dfbdbc8238fd49504c2cf2afd2961c96fadf1a51613087f4d100259d2f3464fd99ebc9ea3c98125711e3bfd3b687eaaf8bb98f0cfd1e4288fb7ec1fc9f18fc358b8b6808dfb1b8a7e9c470e23fae3793c78ed019ef8ea934218c063f2057bf88379e0fb3e0073a671e47bfa0b36be015c747458b2a7876fee350305b2da82eb70752826b86bd98d9e5e2f0337c8f84a8c0192d5166e7b570736ee6cc0d1e4406a3181c4a538523713f0885d18c630169617d037100072e4f0a111e491477e2f8f1e6f4f853d7c00ececedc0010776b6771000702134c61327dfc42bcbaf60706f10cd479a31fb8b39b85e7461d479016bebebb8f4d915b4bfd8814076dfdff6cf3a308c61e49187e7eb5d0803e8767814e30ddcf797ff3df2af6775c719ffb728f2c897ed95da2ffdd312e028f6f7c30e04eefbd17ca419a9c504263f1e2bcf437e2f8f17aebd84f5810d58f16f706f50e91fc92ed183f027616cdcdfc0d8d363e83ed68dd44709b43edf8ac07d3fda7fd38157bc3dc06de9f72f336de0ea2a2ffed106237e3d0a9ef4682edac16de0a35fd7c6b0720cfea30fcd8f6b338702b364fb0f3b2a1844cd146d6d6df07ccf83bee33e25a3914cac25d0d1f1420543b777ba5866a49b098c7f1c869c49e6afceed330fc9f617f7fd482d2630ff1ff378e7bd73c8230f67931383fd83e8ebfb89b29f4db2dd2b6b174f20fcb8208c77ba59ea27d01fc0e0cf4f0881fe01aeadad5530f5f1d78ea3e747bdc2cccc2c3dffedc1c8ce69e090031ddfe9c0e0c980345e553fde635eb4fef29deaf3a01ed7cd04c2820dff8ef520707210a5ebdd6237da46cf297edf9133412e5c5b401e79b85f74a3eb371f09928628d4168f4d6ee988d92d6bd182ba4613488e86c6b83a9e341545604adfee6a6295dc24bb7bbd8af62cea79f751715f13caec0c9f0996eb2fbd1ae32480a55763e5f6d3976775356229fae1ea749777f35afe268bbb7fadfe2701688db7d42f13ac1c8fc1bc32c1e23c742bec9536b156fde36d65ffded78f93054af648728515bf1f494a4c6b43cbcad1fd331fe2cf68922d2efc61036f2fb7d68569256dbb81be6f7fc39a4605702f9361737333a2d7e3f0dce982ef77959ab5c418812c39f8cfa7b17633517eb46b6abf62fded1079b1a8e51c4d0ec497a3d8b8b381be938172fbe0bbc3e8f951afa0666a05c3cb30ba12e3e9b74e971939f0fb651d26f3736d6dbdecd7e07ffda182a9eeddbf073c04700870343d81f1f72f48fdea30a6fc8965651e2cfba7eabf1a3a9b9c58ba3a2fad78d744ed8c685446e3f563dc690346b48a9185888231262726296738f75151ca0d2eee66a72fcf6a320c33348c0377f77acb0ca6d55ed3bf2c2bda6b31963ace6a65fcab8955cdf1a819b2bbd74b6695f3a0c5d056fd53f76f365e2e6476737cead74fd4cc80b33fbe075f5bb336dd02985bbf879f5c6b06f2b5332edff5e93294428bb93aaad693dfe9fed7135033a6babda7b79be5ddb98c99e4daab82894e25100e48f5e41a4f4bc395d0f7fa71969e04abc762b8f4cb274d694635d31aa21ed316c8f62e8379a841d31a316d49bbeb3e298b7b05907560c0f12543a62d975d32bd5b7b7fd3b70cb4172be3b4d3978b4f829c04b1959882514b9a932b061a8fe4d0db4386d7b534b3fb07a2d4af817f8af86781f4be7e5cd93eb3cf645535a305a6d5d3b4f22790fb07a2f28940a57f9635adda8f1bfbf3e13e2a2a5e21334732b5bf6728cd93e0b71b3528a1731e1ce8d16558bd227c1c05fecf63abdfa1bff7a1edabda77e483dd1c4f0c9ec0dafaba69ade46a6bc3d977cea2f5f956f88e2bb5aef3c861e4f71e686a3ab5063c7e26c717aebda4a857621c751cd8e3d58e7fcab1f5482bc63eb880d66f4a1a3e7c5464c90f2dcdd87aa415dec895da999652184a1ec735330f577abd2cc559b5fc2b6973b51ff23d81de7cb43edf8ab94b33080b828088d5376032f4169361ec96e168d2e61b3203a69531d66868945aefd6db3a5d5c1d4f4a1a4a9d1c4249b325a7d2f49f1a607a2a2dedde378bbbda143939312969dd9cd28f52ce83ffd4009353692929c7c0cfc8424451bfd4df68684cf355686421b2ef0f8bd7c972fbd88a853787b2792a8da7e20dddc424d345bf92536969be36293172aab25d35ff0cdf3c6af4e73f35c0dc628e5c51ce336ce5bd7e28656dd5a3c4d25962dc5affced0c14f6e69e0a3435865bad816ab6673592ebbe4eca6c56885c1c05890cc0e2d92627aff3065e354f05f069a67daf3e6b2b96a2956f26d8d06d6a2c3dcae70ed0c9d2bde10b1cd2c491d7bb2ebb1cd6c5d6f949cce8d17dbcc3257908e2c050bd229e97af43776234d7f564a5aca15c8e496723c91db198a33d2750997182cd83ff397dcca325850daf36694f6cc31edf8235faf8a522bd3da6d6706a75395f169f582d5ea3793ab3d4bac74fad935a15cb8dca5e678639bda0bdcfc82adb4eb8c2bc711cbe8ff4e438b16cefc91f41a6403cae7b93ad3fe091856abd4c2b476db997a34a9eca90f637a2fc774fd1667483da634c378bae3d099af608d79adc182b65df902ca154871467fbe4d9df923d9f2614477de32bbcaf65599f65194e496a46123a92a0bf70032adda5e4ef58354cb4776a58ab91a16fbcd517f1cb14d6da60dae58ef478ec1150b0c4efdef6018e68c18b46b19d76e07a315eeded45849752af23365a324b31a9b3bef963d6dfae7645a33df857086ac6bdde04ad232d3e66a64da9c09a655fb61f4a5a196f17dcd3db498a4dede03e78cbf44a41fa78d53374ae0bd422225490744494cd958b4098d7ea762ca4abb246e54d6f35ee681655a2b716fc3377bea0544fd715097696bfb8e4470453b8ece2a5a598fa1cda0335eddfe636b7753007cc0f5390576df4f005f41b99c5e4e41f81520bc37872beb007e3b073c94ea675f83f572335ad9efdd2e08efcfedd7f90ae0bd9ba8a837fdaaf19b1eadf194d06a76981ad5f642d7538aeba1eb71c3fee5f8d36b521eb3997e43d795bf9362bccf54fa85eb73c077db6b1a2fbedbae6df719e376232f0b42ecb96d381de6e6a184ae233e643a013c2b1866f1e9ee7615ac38be64788754d3a69a4c9b32bee314752dee8a0f92a675a5c888fc8c19250694e72f7b2fc7f6afebf47be035ad065a39d5dd92a0e938baae06dc5fb0fa9ad7ca69dc8a456be22b8beecdca7acef3d517de41d2b47ad1825c81f466f6eb55db650f2d7e0134ad1a75fcd2c2960fcd27f88300bc972befa8f42e09335f4534711a5773d156615a3d4c9af890c441d1b4664e11abbf9196c951da4bc87e78ad78e941d6b425bfad7e55d3ec27b16a3fb9f0741c7ca30b568bdd2cafd8df6ea3ebd9af196a9e13e748bdf6995f3c4073f154a71dad279c99a5dc5ef0fb298cbcfcadb23dcf548ccb77bb808773109ff3a1afcfc499369287df9fc3ce43f3f33039accc6fd5fafd4c9fa9d3c1f55d32f42fd6f2991f14c89d3cf094463b33e83c3487ed7f30ce972eafe016adddbc094cdbcc43b0c3b4a6b2bb0063a635fb68d3412b9ad6acbf769849de3ea97316cf52ff1ad832aeed8fae86dd248dd6916b424a8c0bae2499c9497158bdf145d2aa278e0c1f2bade0b387eec1ec2e4f8e6ffe2e015be5b7d6fac1f53944df30b9eb35b023bc378778968c6f664d1d27b71a3dc0755954e4900566130461fbad1eb8ee684455aa4441daff4a105afe385f516ff92e707625692a3aa1c6c0d5557ebed353d1af7f2fa1f9a438bd98a4f029f0f935eda840ecb96d247e2e089704411879f95bc2c29382b031d82b8c356d6846197a3f9dc3e14f80f11be90aff152b589cb2f125181b9103a6b599c108c5b47986b4f3c430bae323b29305f5d6b45ae8bf5a7d7eac30b5588aa357d99d97b2e3f4185053731ad42f69f46ae3e52ee93278f296fc576a5ad91d6347dbf25d1fac14abdf437036f990ea37af458d34ad5d2c69c86a9a56fefd08d39a5603676ea5f9d36bfaa798159a56f6fbb5fe6a1e9feff5e8b6139f8ee3f05f77c1f53f29290efb9f2944ffb71d3b7b51ac19ec31c4a7a388bee1296bcd0705f29d3ca0a579cd6a5335c6b3e4459d7521b7a71da6b0c848c3d1a425a235159590a1953747e5f0509d9856bd0b57c761b598a7747d68d19adf5a1a518b815c134b8676a76f91ea6c34bb18cb68c7658db2bbc4a9ea7167bbda9e24351bfab3b47692e1bc7402c14cb1faf544ff557b5f3354e7bdda45bd89ad76bdae7f4342ed978576d3b7d28afc54bd5c13d7c412c519e94547391fd760e14ddf92f2689de7a5f6e2548cde4c9df278498edd4897f3694b715c71469a575d6d63a4313431217d7fd6a858fdfe815d4dd8c0bf6c34642a3b7f6b41efb0a36b463fcf54d38e89579b0dfc7262d50ac96cfdb4a159b42b091af8e5407315b9af5dac32af157486240d761026a6810717cd37a0a4311f15c38a066f401ad840395a6e10dbcc1a9e09b28a3585471af8a544fb0628c521ede42cb48c472ab3991ad84093581f4324a76f65982b48bb7e29bea63cb71e5c915e4034fe066e036bc5ff074b22fee00d8621ca0000000049454e44ae426082</data>
</image>
</images>
<connections>
......@@ -1242,12 +1228,6 @@ Montreal, Quebec H2T 1S6&lt;/p&gt;</string>
<receiver>ConfigurationPanel</receiver>
<slot>saveSlot()</slot>
</connection>
<connection>
<sender>buttonApply</sender>
<signal>clicked()</signal>
<receiver>ConfigurationPanel</receiver>
<slot>applySlot()</slot>
</connection>
</connections>
<tabstops>
<tabstop>fullName</tabstop>
......@@ -1256,7 +1236,6 @@ Montreal, Quebec H2T 1S6&lt;/p&gt;</string>
<tabstop>password</tabstop>
<tabstop>hostPart</tabstop>
<tabstop>sipproxy</tabstop>
<tabstop>buttonApply</tabstop>
<tabstop>buttonSave</tabstop>
<tabstop>buttonCancel</tabstop>
<tabstop>buttonHelp</tabstop>
......@@ -1290,7 +1269,6 @@ Montreal, Quebec H2T 1S6&lt;/p&gt;</string>
</includes>
<slots>
<slot>saveSlot()</slot>
<slot>applySlot()</slot>
<slot>changeTabSlot()</slot>
</slots>
<functions>
......
......@@ -107,7 +107,7 @@ void ConfigurationPanel::init()
// For saving settings at application 'save'
void ConfigurationPanel::saveSlot()
{
{
Config::set("Signalisations", "SIP.fullName", fullName->text());
Config::set("Signalisations", "SIP.userPart", userPart->text());
Config::set("Signalisations", "SIP.username", username->text());
......@@ -147,40 +147,6 @@ void ConfigurationPanel::saveSlot()
}
void ConfigurationPanel::applySlot()
{
Config::set("Signalisations", "SIP.fullName", fullName->text());
Config::set("Signalisations", "SIP.userPart", userPart->text());
Config::set("Signalisations", "SIP.username", username->text());
Config::set("Signalisations", "SIP.password", password->text());
Config::set("Signalisations", "SIP.hostPart", hostPart->text());
Config::set("Signalisations", "SIP.sipproxy", sipproxy->text());
Config::set("Signalisations", "DTMF.pulseLength", pulseLength->value());
Config::set("Signalisations", "DTMF.playTones", playTones->isChecked());
Config::set("Signalisations", "DTMF.sendDTMFas" , sendDTMFas->currentItem());
Config::set("Signalisations", "STUN.STUNserver", STUNserver->text());
Config::set("Signalisations", "STUN.useStunYes", useStunYes->isChecked());
Config::set("Signalisations", "STUN.useStunNo", useStunNo->isChecked());
Config::set("Audio", "Drivers.driverOSS", ossButton->isChecked());
Config::set("Audio", "Drivers.driverALSA", alsaButton->isChecked());
Config::set("Audio", "Codecs.codec1", codec1->currentText());
Config::set("Audio", "Codecs.codec2", codec2->currentText());
Config::set("Audio", "Codecs.codec3", codec3->currentText());
Config::set("Audio", "Codecs.codec4", codec4->currentText());
Config::set("Audio", "Codecs.codec5", codec5->currentText());
Config::set("Preferences", "Themes.skinChoice", SkinChoice->currentText());
Config::set("Preferences", "Options.zoneToneChoice",
zoneToneChoice->currentText());
Config::set("Preferences", "Options.confirmQuit",
confirmationToQuit->isChecked());
Config::set("Preferences", "Options.checkedTray", checkedTray->isChecked());
Config::set("Preferences", "Options.autoregister",autoregister->isChecked());
Config::set("Preferences", "Options.voicemailNumber", voicemailNumber->text());
}
// Handle tab view according to current item of listbox
void ConfigurationPanel::changeTabSlot()
{
......
This diff is collapsed.
/****************************************************************************
** Form interface generated from reading ui file 'configurationpanel.ui'
**
** Created: Wed Jan 19 19:22:37 2005
** Created: Fri Jan 21 17:23:55 2005
** by: The User Interface Compiler ($Id$)
**
** WARNING! All changes made in this file will be lost!
......@@ -43,7 +43,6 @@ public:
QFrame* line1;
QPushButton* buttonHelp;
QPushButton* buttonApply;
QPushButton* buttonSave;
QPushButton* buttonCancel;
QListBox* Menu;
......@@ -121,7 +120,6 @@ public:
public slots:
virtual void saveSlot();
virtual void applySlot();
virtual void changeTabSlot();
protected:
......
......@@ -71,6 +71,8 @@ Manager::Manager (QString *Dc = NULL) {
b_ringing = false;
mute = false;
b_ringtone = false;
b_congestion = false;
if (DirectCall) {
qWarning ("Direct call.....");
gui()->lcd->textBuffer = DirectCall ;
......@@ -153,6 +155,8 @@ Manager::sip_init (void) {
// Register to the known proxies if available
if (Config::gets("Signalisations", "SIP.password").length() > 0) {
sip->setRegister ();
} else {
errorDisplay("Fill password field");
}
}
}
......@@ -172,22 +176,16 @@ Manager::ringing (void) {
return this->b_ringing;
}
// Broadcast ring message to every component
// When IP-phone user receives a call
void
Manager::ring (bool var) {
if (this->b_ringing != var) {
this->b_ringing = var;
// Blinking bar ring signalisation
// gui()->ring(var);
// Blinking not-used line
// bruitagesproot->ring(var);
}
// TODO: play file.wav
}
// When IP-phone user makes call
void
Manager::ringTone (bool var) {
if (this->b_ringtone != var) {
......@@ -197,6 +195,16 @@ Manager::ringTone (bool var) {
tone->toneHandle(ZT_TONE_RINGTONE);
}
void
Manager::congestion (bool var) {
if (this->b_congestion != var) {
this->b_congestion = var;
}
tonezone = var;
tone->toneHandle(ZT_TONE_CONGESTION);
}
#if 0
bool
Manager::getCallInProgress (void) {
return gui()->callinprogress;
......@@ -206,6 +214,7 @@ void
Manager::setCallInProgress (bool inprogress) {
gui()->callinprogress = inprogress;
}
#endif
bool
Manager::transferedCall(void) {
......@@ -226,6 +235,7 @@ Manager::actionHandle (int lineNumber, int action) {
// Stopper l'etat "ringing" du main (audio, signalisation, gui)
sip->manageActions (lineNumber, ANSWER_CALL);
this->ring(false);
phLines[lineNumber]->setbRinging(false);
gui()->lcd->setStatus("Connected");
gui()->startCallTimer(lineNumber);
break;
......@@ -329,10 +339,13 @@ Manager::handleRemoteEvent (int code, char * reason, int remotetype, int line) {
// Remote callee hangup
case EXOSIP_CALL_CLOSED:
if (getCallInProgress()) {
//if (getCallInProgress()) {
if (phLines[line]->getbInProgress()) {
this->ring(false);
phLines[line]->setbRinging(false);
gui()->setFreeStateLine(newCallLineNumber());
setCallInProgress(false);
//setCallInProgress(false);
phLines[line]->setbInProgress(false);
} else {
// Stop call timer
gui()->stopCallTimer(line);
......@@ -441,6 +454,11 @@ Manager::otherLine (void) {
return false;
}
int
Manager::getCurrentLineNumber (void) {
return gui()->currentLineNumber;
}
bool
Manager::isChosenLine (void) {
return gui()->choose;
......@@ -497,3 +515,7 @@ Manager::dtmf (int line, char digit) {
}
}
void
Manager::errorDisplay (char *error) {
gui()->lcd->appendText(error);
}
......@@ -78,16 +78,23 @@ public:
void setChoose (bool, bool);
bool useStun (void);
void dtmf (int, char);
int getCurrentLineNumber (void);
#if 0
bool getCallInProgress (void);
void setCallInProgress (bool);
#endif
bool transferedCall (void);
void ringTone (bool);
void startDialTone (void);
void congestion (bool);
void errorDisplay (char*);
private:
bool b_ringing;
bool b_ringtone;
bool b_congestion;
int firewallPort;
QString firewallAddr;
......
/****************************************************************************
** Form implementation generated from reading ui file 'phonebook.ui'
**
** Created: Wed Jan 19 19:22:37 2005
** Created: Fri Jan 21 17:23:55 2005
** by: The User Interface Compiler ($Id$)
**
** WARNING! All changes made in this file will be lost!
......
/****************************************************************************
** Form interface generated from reading ui file 'phonebook.ui'
**
** Created: Wed Jan 19 19:22:37 2005
** Created: Fri Jan 21 17:23:55 2005
** by: The User Interface Compiler ($Id$)
**
** WARNING! All changes made in this file will be lost!
......
......@@ -29,6 +29,7 @@ PhoneLine::PhoneLine (void) {
first = true;
timer = new QTime();
b_dial = false;
b_ringing = false;
}
PhoneLine::~PhoneLine (void) {
......
......@@ -52,20 +52,28 @@ public:
JPushButton *button (void);
void startTimer (void);
void stopTimer (void);
inline
void setbDial (bool dial) {b_dial = dial;}
inline
bool getbDial (void) {return b_dial;}
QTime *timer;
QString status;
QString text;
bool first;
bool b_dial;
inline void setbDial (bool dial) { b_dial = dial; }
inline bool getbDial (void) { return b_dial; }
inline void setbInProgress (bool prog) { b_inProgress = prog; }
inline bool getbInProgress (void) { return b_inProgress; }
inline bool getbRinging (void) { return b_ringing; }
inline void setbRinging (bool ring) { if (this->b_ringing != ring)
this->b_ringing = ring;
}
private:
JPushButton *jpb;
enum line_state state;
enum line_state stateLine;
bool b_dial;
bool b_inProgress;
bool b_ringing;
};
#endif // __PHONE_LINE_H__
......@@ -162,7 +162,6 @@ QtGUIMainWindow::QtGUIMainWindow (QWidget *parent, const char *name, WFlags f,
currentLineNumber = -1;
onLine = currentLineNumber;
callinprogress = false;
chosenLine = -1;
choose = false;
noChoose = false;
......@@ -188,8 +187,6 @@ QtGUIMainWindow::QtGUIMainWindow (QWidget *parent, const char *name, WFlags f,
// Connect to append url in display
connect (urlinput->buttonOK, SIGNAL(clicked()), this, SLOT(stripSlot()));
// Connect to apply settings
connect (panel->buttonApply, SIGNAL(clicked()), this, SLOT(applySlot()));
// Connect to save settings
connect (panel->buttonSave, SIGNAL(clicked()), this, SLOT(save()));
......@@ -265,9 +262,6 @@ QtGUIMainWindow::QtGUIMainWindow (QWidget *parent, const char *name, WFlags f,
this->setIcon(QPixmap(Skin::getPathPixmap(QString(PIXDIR),
QString(SFLPHONE_LOGO))));
// Init ringing state (not ringing)
//this->ring(false);
// Show the GUI
this->show();
......@@ -591,7 +585,9 @@ QtGUIMainWindow::toggleLine (int num_line) {
== ONHOLD) {
qDebug("GUI: state OFF-HOLD line %d", currentLineNumber);
lcd->clear(QString("Connected"));
lcd->inFunction = true;
if (callmanager->sip->call[currentLineNumber] != NULL) {
lcd->inFunction = true;
}
callmanager->phLines[currentLineNumber]->setStateLine(OFFHOLD);
callmanager->actionHandle (currentLineNumber, OFFHOLD_CALL);
lcd->appendText(callmanager->phLines[currentLineNumber]->text);
......@@ -623,6 +619,7 @@ QtGUIMainWindow::dial (void) {
transfer = false;
} else {
qDebug("GUI: LINE CURRENT %d", currentLineNumber);
if (callmanager->ringing()) {
// If new incoming call
currentLineNumber = callmanager->newCallLineNumber();
......@@ -654,14 +651,11 @@ QtGUIMainWindow::dial (void) {
callmanager->bufferTextRender();
callmanager->phLines[currentLineNumber]->setbDial(true);
toggleLine (currentLineNumber);
callinprogress = true;
callmanager->phLines[currentLineNumber]->setbInProgress(true);
// Set used-state pixmap 'currentLineNumber' line
callmanager->phLines[currentLineNumber]->button()->setPixmap(
TabLinePixmap[currentLineNumber][BUSY]);
callmanager->phLines[currentLineNumber]->setState(BUSY);
// RingTone
// TODO: callmanager->ringTone(true);
}
}
}
......@@ -680,7 +674,7 @@ QtGUIMainWindow::hangupLine (void) {
// set free pixmap
setFreeStateLine (currentLineNumber);
if (callinprogress) {
if (callmanager->phLines[currentLineNumber]->getbInProgress()) {
// If call is progressing, cancel the call
callmanager->actionHandle (currentLineNumber, CANCEL_CALL);
} else {
......@@ -697,7 +691,9 @@ QtGUIMainWindow::hangupLine (void) {
// set free pixmap
setFreeStateLine (currentLineNumber);
this->dialTone(false);
callmanager->congestion(false);
callmanager->phLines[currentLineNumber]->setbDial(false);
lcd->clear(QString("Hung up"));
}
choose = false;
......@@ -961,7 +957,8 @@ QtGUIMainWindow::blinkRingSlot (void) {
if ( line == -1 )
return;
if (callmanager->ringing()) {
//if (callmanager->ringing()) {
if (callmanager->phLines[line]->getbRinging()) {
// For the line
if (!isOn) {
state = FREE;
......@@ -1062,12 +1059,6 @@ QtGUIMainWindow::pressedKeySlot (int id) {
}
}
// Apply new settings
void
QtGUIMainWindow::applySlot() {
}
// Save settings in config-file
void
QtGUIMainWindow::save() {
......
......@@ -164,7 +164,6 @@ public slots:
void button_msg (void);
void button_transfer (void);
void button_conf (void);
void applySlot (void);
void clickHandle (void);
void reduceHandle (void);
void save (void);
......
......@@ -346,13 +346,23 @@ SIP::setRegister (void) {
qDebug("proxy = %s", proxy);
qDebug("from = %s", from);
if (from == NULL || proxy == NULL) {
qDebug("ERROR:Proxy and from-URI required");
if (Config::gets("Signalisations", "SIP.userPart") == "") {
callmanager->errorDisplay("Fill user part field");
return -1;
}
if (Config::gets("Signalisations", "SIP.hostPart") == "") {
callmanager->errorDisplay("Fill host part field");
return -1;
}
if (Config::gets("Signalisations", "SIP.sipproxy") == "") {
callmanager->errorDisplay("Fill proxy field");
return -1;
}
eXosip_lock();
setAuthentication();
if (setAuthentication() == -1) {
return -1;
}
if (Config::gets("Signalisations", "SIP.sipproxy") != "") {
reg_id = eXosip_register_init(from, proxy, NULL);
......@@ -386,6 +396,10 @@ SIP::setAuthentication (void) {
login = Config::gets("Signalisations", "SIP.userPart");
}
pass = Config::gets("Signalisations", "SIP.password");
if (pass == "") {
callmanager->errorDisplay("Fill password field");
return -1;
}
if (callmanager->useStun()) {
realm = Config::gets("Signalisations", "SIP.hostPart");
......@@ -426,11 +440,11 @@ SIP::startCall ( char *from, char *to, char *subject, char *route) {
int i;
if (checkUrl(from) != 0) {
qDebug("Error syntax for From header");
callmanager->errorDisplay("Error for From header");
return -1;
}
if (checkUrl(to) != 0) {
qDebug("Error syntax for To header");
callmanager->errorDisplay("Error for To header");
return -1;
}
......@@ -560,11 +574,11 @@ SIP::manageActions (int usedLine, int action) {
// IP-Phone user is answering a call.
case ANSWER_CALL:
qDebug("ANSWER_CALL line %d, call = 0x%X, cid = %d, did = %d",
usedLine, call[usedLine], call[usedLine]->cid,
call[usedLine]->did);
qDebug("ANSWER_CALL line %d, cid = %d, did = %d",
usedLine, call[usedLine]->cid, call[usedLine]->did);
callmanager->setCallInProgress(false);
//callmanager->setCallInProgress(false);
callmanager->phLines[usedLine]->setbInProgress(false);
// Get local port
snprintf (tmpbuf, 63, "%d", call[usedLine]->getLocalAudioPort());
......@@ -587,6 +601,7 @@ SIP::manageActions (int usedLine, int action) {
qDebug("CLOSE_CALL: cid = %d et did = %d", call[usedLine]->cid,
call[usedLine]->did);
qDebug("JE RACCROCHE CALL 0x%d, usedline = %d", call[usedLine], usedLine);
// Release SIP stack.
eXosip_lock();
i = eXosip_terminate_call (call[usedLine]->cid, call[usedLine]->did);
......@@ -620,7 +635,7 @@ SIP::manageActions (int usedLine, int action) {
// IP-Phone user is parking peer OFF HOLD
case OFFHOLD_CALL:
call[usedLine]->usehold = true;
qDebug("OFF HOLD CALL 0x%d, usedLine = %d", call[usedLine], usedLine);
eXosip_lock();
i = eXosip_off_hold_call(call[usedLine]->did, NULL, 0);
eXosip_unlock();
......@@ -654,6 +669,8 @@ SIP::manageActions (int usedLine, int action) {
i = eXosip_terminate_call (call[usedLine]->cid, call[usedLine]->did);
eXosip_unlock();
callmanager->ringTone(false);
// Delete the call when I hangup
if (call[usedLine] != NULL) {
delete call[usedLine];
......@@ -674,6 +691,7 @@ int
SIP::getEvent (void) {
eXosip_event_t *event;
int theline = -1;
int curLine;
static int countReg = 0;
event = eXosip_event_wait (0, 50);
......@@ -702,15 +720,17 @@ SIP::getEvent (void) {
assert (theline >= 0); assert (theline < NUMBER_OF_LINES);
if (call[theline] == NULL) {
callmanager->setCallInProgress(true);
//callmanager->setCallInProgress(true);
callmanager->phLines[theline]->setbInProgress(true);
call[theline] = new SipCall (callmanager);
call[theline]->newIncomingCall(event);
// Associate an audio port with a call
call[theline]->setLocalAudioPort(local_port);
// Visual blink signal and tone setup when somebody calls me
// Ringing starts when somebody calls IP-phone user
callmanager->ring();
callmanager->phLines[theline]->setbRinging(true);
}
break;
......@@ -722,14 +742,16 @@ SIP::getEvent (void) {
// TODO: stop the ringtone
callmanager->ringTone(false);
// Stop the call progress
callmanager->setCallInProgress(false);
curLine = callmanager->getCurrentLineNumber();
theline = findLineNumber(event);
if (call[theline] == NULL) {
call[theline] = new SipCall(callmanager);
}
// Stop the call progress
//callmanager->setCallInProgress(false);
callmanager->phLines[theline]->setbInProgress(false);
// Conditions to not start sound when callee answers for onhold
// and offhold state
......@@ -757,7 +779,10 @@ SIP::getEvent (void) {
exit(1);
}
}
} else if (callmanager->otherLine()) {
} else if (callmanager->otherLine() and
call[curLine] == NULL) {
// If a new line replaces the used current line and
// it's not ringing.
callmanager->startDialTone();
}
break;
......@@ -768,6 +793,8 @@ SIP::getEvent (void) {
event->remote_uri);
callmanager->handleRemoteEvent (0, NULL, EXOSIP_CALL_RINGING);
// TODO : rajouter tonalite qd ca sonne
//callmanager->ringTone(true);
// If we have chosen the line before validating the phone number
if (callmanager->isChosenLine() and !callmanager->otherLine()) {
......@@ -803,39 +830,55 @@ SIP::getEvent (void) {
qDebug("REQUESTFAILURE<- (%i %i) [%i %s] %s", event->cid,
event->did, event->status_code, event->reason_phrase,
event->remote_uri);
theline = findLineNumber(event);
assert (theline >= 0);
assert (theline < NUMBER_OF_LINES);
// call[theline]->requestfailureCall(event);
callmanager->phLines[theline]->setbInProgress(false);
// Handle 4XX errors
switch (event->status_code) {