Compare commits
5800 Commits
Author | SHA1 | Date |
---|---|---|
Asterisk Development Team | fe79ea813f | |
Asterisk Development Team | 23f9f9154e | |
Pirmin Walthert | 5337667d38 | |
Asterisk Development Team | 7a9a2241ad | |
Pirmin Walthert | 4075ae5957 | |
Asterisk Development Team | d00cf806ee | |
Asterisk Development Team | 07bf7890dc | |
Joshua C. Colp | c8cabb08aa | |
Pirmin Walthert | 4b7293f44e | |
Joshua C. Colp | 0d86f49f7f | |
Joshua C. Colp | 17a878dd99 | |
Joshua C. Colp | 4fba0f678b | |
sungtae kim | 5de3f22ee0 | |
Guido Falsi | 683f0b269e | |
Roger James | 3df1b65dd0 | |
traud | 377f5b6992 | |
traud | 103b789e56 | |
Pirmin Walthert | 146e7c54f1 | |
Nathan Bruning | 10292dc663 | |
Guido Falsi | 77837059ac | |
Jaco Kroon | f5a1a91b03 | |
George Joseph | 2d1713395b | |
Alexander Traud | 18cc090761 | |
Joshua C. Colp | 35f7e24ebc | |
Guido Falsi | 5c74f22977 | |
Peter Turczak | 7714bbfeaa | |
Asterisk Development Team | 074d766fb3 | |
sungtae kim | f2d9d31ef5 | |
DanielYK | e4508fcc6e | |
Alexander Traud | 91ce91dbc6 | |
Alexander Traud | f91dc188dd | |
Alexander Traud | bb5c0f30c4 | |
Alexander Traud | 7124850d3c | |
Alexander Traud | 59f2ad2019 | |
Alexander Traud | 1edf0047a1 | |
Alexander Traud | dac20ce461 | |
Alexander Traud | 65598af3ff | |
Alexander Traud | 47e887dbf6 | |
Alexander Traud | 007a6ab05a | |
bernard merindol | 43dfd0d300 | |
Jean Aunis | 947a6e8674 | |
Jaco Kroon | ce1213e72f | |
Alexander Traud | 64427c667b | |
Jaco Kroon | a142a1455c | |
Alexander Traud | 23211669a7 | |
traud | 2bcc3df533 | |
Alexander Traud | a0d5f7ccff | |
Alexander Traud | 92efcc9047 | |
Kevin Harwell | b2e7fc6972 | |
traud | 9b259c6514 | |
Alexander Traud | 785225c5a0 | |
traud | 9082f90217 | |
Sebastien Duthil | bb974877fa | |
traud | 05440f3ef6 | |
Sean Bright | b92bd5783b | |
traud | 55dacdce56 | |
Jaco Kroon | 42989a285b | |
Joshua C. Colp | 69805a772e | |
traud | b338da8a19 | |
traud | 151a27fa81 | |
sungtae kim | 59e193b295 | |
Torrey Searle | ad7be12f0d | |
Jaco Kroon | 5ddac396f0 | |
Joshua C. Colp | 305227dd38 | |
Kevin Harwell | e96e5cc3d4 | |
Jaco Kroon | 6b2aea9ce2 | |
Jaco Kroon | 96efd52460 | |
Jaco Kroon | 9065d95254 | |
Sungtae Kim | 0daf62f501 | |
Jaco Kroon | 18b058d65b | |
Jaco Kroon | 5d5f05ab61 | |
Michael Neuhauser | 0bd1420064 | |
Jaco Kroon | f4a8c71dc2 | |
Jaco Kroon | 345e072a6d | |
Sean Bright | 8b7071994e | |
Sean Bright | 3e4e016a6c | |
Joshua C. Colp | 6636fff2cf | |
George Joseph | 4990a6e2fb | |
Torrey Searle | 85786d75c7 | |
Joshua C. Colp | 793f312199 | |
George Joseph | 348819093d | |
George Joseph | 6dc064b84f | |
George Joseph | 8f33d14d00 | |
George Joseph | 8943624bf7 | |
Joshua Colp | d6248d5f5c | |
Paulo Vicentini | f0b6d24704 | |
Sean Bright | 58b8c24c40 | |
Jared Smith | 74718010d0 | |
Rodrigo Ramírez Norambuena | b999447494 | |
Asterisk Development Team | 077cc24d66 | |
Torrey Searle | 04f2fad021 | |
Sean Bright | 0ee0134cc9 | |
lvl | 4b242d4280 | |
Joshua Colp | 30f718a598 | |
Joshua Colp | 994853658b | |
Sebastian Kemper | d6b5a18111 | |
Kevin Harwell | c5ababbd2b | |
Kevin Harwell | 0fb06121cb | |
Kevin Harwell | 5685254418 | |
Kevin Harwell | d49adf8033 | |
Torrey Searle | ed670ca0c6 | |
Kevin Harwell | 6af57d5750 | |
Kevin Harwell | 2241f828ca | |
Kevin Harwell | ff87627140 | |
Walter Doekes | c3e9d37ce7 | |
Walter Doekes | 6995b0a8fa | |
Kevin Harwell | d13cd25d4c | |
Jaco Kroon | 2ff7057287 | |
George Joseph | f2fa99f124 | |
George Joseph | 8fb06b30b2 | |
George Joseph | 2df95ab6d6 | |
George Joseph | 66f2c78513 | |
Sean Bright | cbbf192f0a | |
Sean Bright | 66388abbb1 | |
George Joseph | 31dea3d7d9 | |
Ben Ford | f928600a98 | |
Joshua C. Colp | a60071610c | |
Sean Bright | 0246bca581 | |
Torrey Searle | 21ed671893 | |
Joshua Colp | 10632beb50 | |
George Joseph | 796680cc57 | |
Sean Bright | 7687d1bda5 | |
Sean Bright | ea1f318534 | |
George Joseph | 74d0244dc3 | |
Joshua Colp | 40ef98e959 | |
Joshua Colp | c95192e7ac | |
Joshua Colp | 4f93e1427d | |
Sean Bright | d5fa23e72a | |
Friendly Automation | bf1d5faea4 | |
Friendly Automation | 169922e5ee | |
Sylvain Afchain | 9419295aee | |
Walter Doekes | 44e1c7d93f | |
Walter Doekes | cea6cad343 | |
Joshua Colp | 08ba741a8e | |
George Joseph | a02f14ab9f | |
George Joseph | 104e72e588 | |
George Joseph | 8855b1b63c | |
Sean Bright | a3a2fbaec6 | |
Friendly Automation | 95c0072a5b | |
Joshua C. Colp | e14fd3b22a | |
Sean Bright | dafdcc623c | |
Friendly Automation | 67ed0db0da | |
Kevin Harwell | 78d9bc8ef6 | |
Kevin Harwell | 1051227dd9 | |
Sean Bright | d99580ae69 | |
Friendly Automation | 017a33c649 | |
Asterisk Development Team | fe72f4e216 | |
Friendly Automation | b0b229f63c | |
George Joseph | 4eb2ad5e17 | |
Sean Bright | b6ebdabd9c | |
Friendly Automation | 9d6c4f437d | |
Friendly Automation | 0d9173974e | |
Joshua Colp | 63a629c360 | |
Joshua Colp | eb78eec8ed | |
Friendly Automation | f5128d610d | |
Sean Bright | ca7309fd29 | |
Sean Bright | 14de6b9ba7 | |
Sean Bright | 9382718f50 | |
Friendly Automation | 537645d28c | |
Joshua Colp | 073d67ece0 | |
Rodrigo Ramírez Norambuena | 5c5bf49cb1 | |
Friendly Automation | 46dc85f207 | |
Joshua Colp | 84670cd9aa | |
Andrew Siplas | 419fd1da11 | |
Friendly Automation | 0f89e6e4c0 | |
Joshua Colp | 5e30a3e7ee | |
Sean Bright | bfc93cc954 | |
Sean Bright | ee05a43951 | |
Sean Bright | 884b86e7c0 | |
Sean Bright | d514fa3300 | |
Sean Bright | 6906e0aa3c | |
Joshua Colp | 9ba3bddd37 | |
Joshua Colp | 3a135e5827 | |
Sean Bright | d0a412fced | |
Sean Bright | 1a4fcaadb2 | |
Joshua Colp | 9b22061e2c | |
Joshua Colp | a902641833 | |
Sean Bright | 5e868fc11f | |
Joshua Colp | 8bf22b8abb | |
Joshua Colp | 0d1fcf0626 | |
Sean Bright | 53967ebd0f | |
Walter Doekes | e99f70f112 | |
Sean Bright | b8963987a6 | |
Sean Bright | 6648472a28 | |
Friendly Automation | 3e446508b4 | |
Jaco Kroon | e7d2ab666b | |
Kevin Harwell | fa700acf39 | |
Joshua Colp | 4cefb2f3cb | |
Joshua Colp | 81899e71e7 | |
Corey Farrell | 7601a5f0f8 | |
Kevin Harwell | ba5b0c5c36 | |
George Joseph | 83077366de | |
Joshua Colp | 379050504d | |
Joshua C. Colp | 9720b29d8e | |
Friendly Automation | 1d3739fcbd | |
Sean Bright | 49bb7d85cd | |
George Joseph | aa84bc31e2 | |
Friendly Automation | 0b7569a977 | |
Friendly Automation | 1577f6d923 | |
Friendly Automation | b929ac2c64 | |
Friendly Automation | beb7987fed | |
Friendly Automation | 4db92ee97e | |
Friendly Automation | 3a86c176a6 | |
George Joseph | e642d46b05 | |
George Joseph | 9249c30b87 | |
Richard Mudgett | 3a8290d1f2 | |
George Joseph | e4e5e07e3d | |
Richard Mudgett | f6f25601a4 | |
Richard Mudgett | 4414def9f9 | |
Richard Mudgett | 9997710f8f | |
Richard Mudgett | aed10616e5 | |
Richard Mudgett | 1cd2e340e0 | |
Sean Bright | 430350ed53 | |
Sean Bright | 0d252feab6 | |
Snuffy | c00c448c05 | |
Friendly Automation | 20c411065b | |
Joshua Colp | 5a3826e334 | |
Boris P. Korzun | d95b719891 | |
George Joseph | 7e66d2578e | |
Jean Aunis | 72548ca9e5 | |
Sean Bright | 401056fd27 | |
Friendly Automation | 1a96383e29 | |
Jaco Kroon | e8ca2af820 | |
Joshua C. Colp | 49520c0ec6 | |
Friendly Automation | 1254747497 | |
Friendly Automation | 66970af0d3 | |
Sean Bright | 6ceb4c25fb | |
Friendly Automation | b9d465935b | |
Friendly Automation | a451aafae0 | |
Friendly Automation | f7fcb601ab | |
Pascal Cadotte Michaud | 8654d6cb20 | |
Friendly Automation | 172e2f651b | |
Joshua C. Colp | c1faa9ecda | |
Frederic LE FOLL | b07bccd0bd | |
George Joseph | 028a2f2d9a | |
Joshua C. Colp | 7cea1c4306 | |
Joshua C. Colp | ca35de4282 | |
Friendly Automation | 7004fb6175 | |
Joshua Colp | 089b7529df | |
Kevin Harwell | 754fca9297 | |
Stanislav | 22f9c57f43 | |
Asterisk Development Team | 51482dec75 | |
Pascal Cadotte Michaud | 644ae311bb | |
George Joseph | d4df66dc8a | |
Joshua Colp | c1cfca5ef1 | |
Friendly Automation | 815d0f8e5a | |
Jaco Kroon | 72d51ab8f5 | |
Friendly Automation | 40b1fdbba4 | |
George Joseph | 02576bfef7 | |
Friendly Automation | bf179634c0 | |
Friendly Automation | 4df3b39e10 | |
Jaco Kroon | 6e79028020 | |
Friendly Automation | 5386b674e1 | |
Friendly Automation | 575f4d9639 | |
Friendly Automation | 1e200cf2b2 | |
Friendly Automation | f9b10259e5 | |
Sean Bright | 1750847fc0 | |
Sean Bright | 890f8a79d4 | |
Walter Doekes | d8063c1cf9 | |
Frederic LE FOLL | 3a32b75c33 | |
Sean Bright | 2b5259b7e8 | |
George Joseph | 5aee4f7655 | |
Friendly Automation | 5554082d88 | |
George Joseph | cec947525b | |
Joshua Colp | 032f5d8971 | |
Joshua Colp | e401f725d1 | |
Benjamin Keith Ford | 2652720df4 | |
Friendly Automation | 80e9e986ad | |
Ben Ford | c2279540ba | |
George Joseph | 1b9281a5de | |
Ben Ford | c257794330 | |
George Joseph | bb732e4292 | |
Friendly Automation | 955e331174 | |
Pascal Cadotte Michaud | 3778e1abcd | |
Kevin Harwell | e00381d8d0 | |
Friendly Automation | 7bcfcd3433 | |
Friendly Automation | 243c1af2b9 | |
Salah Ahmed | 9c586e5be7 | |
George Joseph | 95213b01d2 | |
Sean Bright | b03af8ba3c | |
George Joseph | d60f23ecbd | |
George Joseph | 7702ea986e | |
Friendly Automation | 8508a06706 | |
George Joseph | c79db42573 | |
Frederic LE FOLL | ad50410568 | |
lvl | 17c393377e | |
Alexei Gradinari | 26fc3a3127 | |
George Joseph | ab28da7c9d | |
Friendly Automation | a42f3ff3b7 | |
Friendly Automation | 803bc786f6 | |
Friendly Automation | e82a91ee1c | |
Martin Tomec | f032b8c158 | |
Joshua Colp | eb3b49928e | |
George Joseph | 7a236ed20d | |
Michael Cargile | 9361e32bed | |
Joshua Colp | 6856cdc6ba | |
Kevin Harwell | 300e21662c | |
Joshua Colp | 3b94982b4f | |
Sean Bright | e5d0add8c6 | |
Kevin Harwell | 6ca76798e1 | |
George Joseph | 7a85a947af | |
Joshua Colp | 9c8424a97b | |
Friendly Automation | 854a8014ce | |
Sean Bright | 27fc662cf2 | |
Joshua Colp | 50feafe9b8 | |
Friendly Automation | 6f2431cb13 | |
Sean Bright | f1e3a13579 | |
Friendly Automation | 8e42a55ebd | |
Friendly Automation | c56663b2cf | |
Sean Bright | 0cccfcba9e | |
Salah Ahmed | 414eebcbc9 | |
cmaj | c8e38f8550 | |
Friendly Automation | 78ad383837 | |
Friendly Automation | 59487acfb8 | |
Joshua Colp | 337e4ed671 | |
Christoph Moench-Tegeder | a7749f4fcd | |
George Joseph | 91d5094464 | |
csavinovich | c3a1f2ce91 | |
Kevin Harwell | e34651d62c | |
George Joseph | ba55298891 | |
George Joseph | 6ff5432a07 | |
George Joseph | 1bb0e60e55 | |
George Joseph | 46c70c67f9 | |
George Joseph | 164e5372a2 | |
Kevin Harwell | a2ddaaac32 | |
lvl | bc8d56816d | |
George Joseph | 32c52b7dda | |
Sean Bright | 0834e06673 | |
Kevin Harwell | 3f7f376a68 | |
Kevin Harwell | 2042020abf | |
Kevin Harwell | 0b7efc1687 | |
Friendly Automation | a3ef4d22d4 | |
Sean Bright | fa897059a5 | |
George Joseph | 1b29d0a7ed | |
Torrey Searle | 6fd195ca91 | |
Alexei Gradinari | c1d82f73a3 | |
Sean Bright | 438085f10e | |
George Joseph | c6f81a7ba4 | |
Friendly Automation | 88dea7a111 | |
Friendly Automation | ac64659b33 | |
Joshua Colp | b60bf27881 | |
Ben Ford | 67bd02d08d | |
Asterisk Development Team | 0dc1ba17b8 | |
Sean Bright | 7280e2ec51 | |
Friendly Automation | fde6ed7d91 | |
George Joseph | 85f47022e0 | |
George Joseph | c5a9c039ba | |
Sean Bright | 22fb0f286d | |
Joshua Colp | d775bc5add | |
George Joseph | 6991a944c0 | |
Kevin Harwell | 9384639953 | |
Corey Farrell | c881d36319 | |
Ben Ford | 3069153bdf | |
George Joseph | e8a9cc21ab | |
Friendly Automation | 6320b86d89 | |
Friendly Automation | d6c52479a4 | |
Kevin Harwell | f5dda8d796 | |
Kevin Harwell | 6517690168 | |
George Joseph | afd6b98757 | |
Corey Farrell | 48fd773743 | |
Corey Farrell | 25918f2837 | |
Joshua Colp | 16790d6029 | |
Joshua Colp | a97bd89f84 | |
Guido Falsi | ae70c2a428 | |
Friendly Automation | a1b371603f | |
Sean Bright | 622e487cd4 | |
Asterisk Development Team | 18fbd8d8c3 | |
Asterisk Development Team | 2a7cec9051 | |
Friendly Automation | 5bb71c4c1d | |
George Joseph | a0f13c1e22 | |
Joshua Colp | 0bf277e8f6 | |
Joshua Colp | 228682501a | |
sungtae kim | 2705652152 | |
Frederic LE FOLL | 9462722b17 | |
Frederic LE FOLL | 2b563368df | |
George Joseph | e6f74e94f6 | |
Sean Bright | 060495ed86 | |
Joshua Colp | c711546559 | |
Igor Goncharovsky | 8e07fcc30d | |
George Joseph | 92876e8f0b | |
Friendly Automation | 8b3cee9068 | |
George Joseph | 5632bcc126 | |
Kevin Harwell | af12d36f7e | |
George Joseph | 0e747da168 | |
Igor Goncharovsky | 7f1a574ce7 | |
Igor Goncharovsky | b003c9b3ae | |
Sean Bright | 5154e7f359 | |
Joshua Colp | 4d4a430128 | |
Joshua Colp | f0bc74a291 | |
Alexei Gradinari | e6a4cca4aa | |
George Joseph | b02f53463c | |
Dan Cropp | 1a86b2499a | |
Friendly Automation | 8bc51928c1 | |
Stas Kobzar | 06e5c11589 | |
George Joseph | 22372d5d2b | |
Sean Bright | ddc64ca059 | |
Alexei Gradinari | 16bc4ed93c | |
Sean Bright | 8a96746994 | |
George Joseph | 7251b76c62 | |
Friendly Automation | 5598dc045b | |
George Joseph | c6558e09af | |
Kevin Harwell | feaadbd250 | |
George Joseph | 17908cb76e | |
Friendly Automation | 6d174e4ef2 | |
Joshua Colp | 1496aef51b | |
George Joseph | a57b59c959 | |
George Joseph | 018c278c72 | |
George Joseph | 1a051fcf5a | |
Torrey Searle | 6f77e12f21 | |
Kevin Harwell | f145b58542 | |
Sean Bright | bb74c691ce | |
Joshua Colp | c6a34ddbf4 | |
George Joseph | 46beb0fa1a | |
Sean Bright | 5096a5ddf7 | |
Sean Bright | 2982138d2b | |
George Joseph | 5f020b1825 | |
George Joseph | 16fe80d8da | |
George Joseph | e51e2cae58 | |
Leonid Fainshtein | 8e09fbb4e9 | |
Tzafrir Cohen | fdaefbb20a | |
Tzafrir Cohen | effca9917d | |
Tzafrir Cohen | b3de2c0e1e | |
Tzafrir Cohen | 4b779a59e4 | |
Sean Bright | 202fdc88dd | |
George Joseph | 0cded803ec | |
George Joseph | b63425f469 | |
George Joseph | 51b1111eaf | |
Friendly Automation | 7b33cef82a | |
George Joseph | 8d1acc27d5 | |
Rodrigo Ramírez Norambuena | 5c87fa6a0e | |
George Joseph | 51504432a7 | |
George Joseph | 284b657539 | |
Friendly Automation | 976f884a24 | |
Asterisk Development Team | b3d0754f82 | |
Walter Doekes | 3449240130 | |
George Joseph | aaafe8a108 | |
Kevin Harwell | d2eaba4853 | |
Joshua Colp | 3cb839d111 | |
Friendly Automation | a7bb02ae34 | |
George Joseph | 41d6492de0 | |
Francesco Castellano | 1318a3a2b7 | |
Tzafrir Cohen | d8bf4b1608 | |
Chris-Savinovich | e206a54d59 | |
George Joseph | 72f001d558 | |
Friendly Automation | 6ac6218f73 | |
Kevin Harwell | 8ef52e8a19 | |
George Joseph | be54e94773 | |
George Joseph | 493268a938 | |
Kevin Harwell | a302d46dd8 | |
Sean Bright | ba57b004c4 | |
George Joseph | 94e0e26c2a | |
George Joseph | 44e65b92c1 | |
George Joseph | dd20beedb9 | |
George Joseph | e39dbc4909 | |
George Joseph | 79087b6aeb | |
Joshua Colp | 9721f3908d | |
George Joseph | f22dedc597 | |
George Joseph | 5d45686c28 | |
Alexei Gradinari | d5db7473e7 | |
George Joseph | e4ee209bfe | |
Alexei Gradinari | 3bfe1f3a1b | |
George Joseph | d0f01af913 | |
Joshua Colp | d5fed38ab5 | |
George Joseph | 41f5d15763 | |
Joshua Colp | 1ea9bad34d | |
George Joseph | 83c353c650 | |
George Joseph | dd4f0c94e8 | |
George Joseph | 0e30d17293 | |
Alexei Gradinari | 45a9ee4c53 | |
agupta | 67841b8f55 | |
Alexei Gradinari | dd12e1cbd3 | |
Chris-Savinovich | 45c1159c62 | |
Joshua Colp | 1c665ae39b | |
Friendly Automation | 6df25921ca | |
Friendly Automation | 066ff4d3a8 | |
Friendly Automation | e4d91ab4b2 | |
Alexei Gradinari | e306c62ff1 | |
Asterisk Development Team | fba341af8b | |
Friendly Automation | 7dd93bfe9a | |
Nasir Iqbal | f7527921b6 | |
Alexei Gradinari | dfa513c565 | |
Ben Ford | 6aeab9d5e7 | |
Guido Falsi | ac4921c373 | |
Alexei Gradinari | 6ded762dbf | |
George Joseph | d6fb8abd84 | |
Joshua Colp | fc49632bbc | |
George Joseph | 90fe830a77 | |
Alexei Gradinari | 595d60846a | |
Friendly Automation | fa98e8cacb | |
Friendly Automation | 7067177be4 | |
Joshua Colp | e6cedc77a4 | |
George Joseph | 4337895aee | |
Friendly Automation | 92832bf176 | |
George Joseph | c41e3184e3 | |
Ben Ford | f71a0e3f60 | |
Friendly Automation | 8b0029692f | |
George Joseph | 7646e2257f | |
George Joseph | cfeb8a59eb | |
George Joseph | 9d8a093a94 | |
George Joseph | 6edef49525 | |
Friendly Automation | 66aa081bb3 | |
Friendly Automation | 57a9935ae0 | |
agupta | 188b1d3e68 | |
Friendly Automation | 10b46eea9e | |
Ben Ford | 4589260961 | |
Antoni Goldstein | 001e7762e4 | |
Kevin Harwell | 4ea20c9c85 | |
Friendly Automation | e1e9274c57 | |
Friendly Automation | 72170f73e4 | |
George Joseph | 6d4023e3a6 | |
Friendly Automation | dcd26ce6ac | |
Guido Falsi | 8ee69fbdd0 | |
Lucas Mendes | aaee0fa6f5 | |
Dan Cropp | 00588226c6 | |
Friendly Automation | 94bbd75745 | |
Friendly Automation | bb1280b8c1 | |
Friendly Automation | 57f4bbf61f | |
Sean Bright | 33ed8fdadc | |
Benjamin Keith Ford | d15f01b294 | |
Joshua Colp | 4cde7de0f0 | |
Joshua Colp | 2a0e47e9cb | |
George Joseph | e61e436b38 | |
George Joseph | 2fe9fd5cf9 | |
Sean Bright | d2f519dcfa | |
George Joseph | 52b956e3eb | |
George Joseph | 0eebc70592 | |
Sean Bright | 79a620080c | |
Friendly Automation | 13af11b495 | |
Friendly Automation | ce92860995 | |
Sean Bright | fd2e8d0da7 | |
Sean Bright | 9051e62523 | |
Sean Bright | 237989a5e8 | |
Sean Bright | f66f21895f | |
George Joseph | a981ec141d | |
Sean Bright | 7666fdc394 | |
Alexander Anikin | 9a1e8090c3 | |
George Joseph | 1a4fbaa52e | |
Alexei Gradinari | cb24eb4cc2 | |
Joshua Colp | cef62d4ffc | |
Ben Ford | 251348cbbb | |
Friendly Automation | 6531f8b2ea | |
Friendly Automation | e7de71ee24 | |
Friendly Automation | 7b64432c4e | |
Chris-Savinovich | f9bb53a1dd | |
Salah Ahmed | a9a0303544 | |
sungtae kim | 707897e5f7 | |
Friendly Automation | a5b463cabf | |
George Joseph | b3faf7311a | |
Ben Ford | 4853fc2218 | |
Matthew Fredrickson | 1c7bc63cff | |
George Joseph | d049155303 | |
Friendly Automation | 664f706771 | |
Ben Ford | 4de27f332d | |
George Joseph | 0fdfac87f3 | |
Friendly Automation | df4a7a8fae | |
sungtae kim | fb7aa52ae0 | |
George Joseph | bcc3b86ca5 | |
Ben Ford | 90c1653997 | |
Alexei Gradinari | 6e20e071a9 | |
Joshua Colp | c289bac4d3 | |
Sean Bright | 4a6bd68869 | |
Sean Bright | 33647ebe2c | |
Joshua Colp | 03708f435c | |
Friendly Automation | ac7caa269c | |
Friendly Automation | e821071943 | |
sungtae kim | 04d1bc3df0 | |
Sean Bright | 53aa750839 | |
Alexei Gradinari | 3b1cf67fa9 | |
Matthew Fredrickson | 4315634bc9 | |
George Joseph | 85f87790a5 | |
George Joseph | f45178db28 | |
George Joseph | 69b194c837 | |
Friendly Automation | 1274bc5af6 | |
Friendly Automation | 5c70d0c1b9 | |
George Joseph | 93d5e4b106 | |
sungtae kim | dc94a3180e | |
Sean Bright | cc954977eb | |
Richard Mudgett | f4bb80ba85 | |
Friendly Automation | 3df8d605cc | |
George Joseph | c87158f2da | |
Joshua C. Colp | c7d58aec7a | |
Joshua C. Colp | 9b5136ddc3 | |
Kevin Harwell | 5d67b8b144 | |
Kevin Harwell | 9717d1672c | |
Joshua Colp | f0254cc1e9 | |
Joshua C. Colp | aa9091dcdd | |
Joshua C. Colp | aa0ff97c3b | |
Dömsödi Gergely | 92d1889813 | |
Joshua C. Colp | 48e64c5dc2 | |
Kevin Harwell | a96729c1cd | |
George Joseph | ee75df6ec9 | |
Chris-Savinovich | 29d2d22e82 | |
George Joseph | ce0d50541d | |
Joshua Colp | 07b3253155 | |
Friendly Automation | 4f6daa0aff | |
sungtae kim | 4bdf24a689 | |
cirillor | 68d2304621 | |
Torrey Searle | cbc704c5ec | |
George Joseph | 2c90b92da9 | |
George Joseph | c3189a696e | |
Friendly Automation | b5c0526443 | |
Friendly Automation | db18f8c959 | |
Sean Bright | b4bba8f217 | |
Sean Bright | 1cb6466268 | |
Sean Bright | 9a4027ad41 | |
Ben Ford | 65170ba8f0 | |
cirillor | 5065f31fca | |
Friendly Automation | 856f3e6895 | |
Friendly Automation | 0f51ee7d38 | |
Joshua Colp | 7fb2a34edb | |
Friendly Automation | a103faca52 | |
Sean Bright | cb6a976656 | |
Sean Bright | 7bcbc0bdfd | |
Friendly Automation | 509e37d05e | |
Joshua Colp | 1f3d6e1ebf | |
sungtae kim | 4dd4dbddbb | |
Sean Bright | 5821090661 | |
Kevin Harwell | 7e8833cc1c | |
Friendly Automation | cdcba0d1b5 | |
Friendly Automation | f0363d7ea8 | |
Sean Bright | aa8ab603b0 | |
Sean Bright | c38c8db14a | |
Friendly Automation | c4a172efba | |
Joshua Colp | 2c04996106 | |
Sean Bright | 1b3a489204 | |
Joshua Colp | 70391dc515 | |
Joshua Colp | 2f4a15101b | |
Joshua Colp | 9598c210fa | |
Sean Bright | 85b1f8f886 | |
Kevin Harwell | 41effb7d4d | |
George Joseph | 5ce084579f | |
Joshua C. Colp | a8d4f56c25 | |
George Joseph | 4aa55a8ca6 | |
Torrey Searle | e9bd8c4204 | |
Joshua C. Colp | 600db408c7 | |
Joshua C. Colp | 9921262c85 | |
Joshua C. Colp | d4060756e7 | |
Friendly Automation | 55419d3996 | |
Kevin Harwell | ec7f92c4ef | |
Joshua C. Colp | 9c94c027cd | |
Sungtae Kim | 148ddfba9a | |
George Joseph | 23ffc3af5c | |
Joshua C. Colp | 82758295df | |
George Joseph | bae3fd04c1 | |
Kevin Harwell | da93d17af8 | |
George Joseph | 86bb86ce46 | |
Friendly Automation | f4fd910d2e | |
Friendly Automation | b298777458 | |
Joshua C. Colp | 3de4d0c6c1 | |
sungtae kim | f6689547ae | |
Joshua Colp | 46df13e2d0 | |
Kevin Harwell | b2d3c9d2de | |
George Joseph | 1ec00d205f | |
Chris Savinovich | 3e922adcc1 | |
Torrey Searle | 7c17bc75ed | |
Paulo Vicentini | 2db81ee2b4 | |
George Joseph | 44914234ba | |
Joshua C. Colp | 3c632d81bc | |
Joshua C. Colp | cb45aa1f9d | |
Joshua Colp | 9a6464e54f | |
Kevin Harwell | 3974633c00 | |
Joshua Colp | a4d930c2ed | |
George Joseph | d496bf2099 | |
Sungtae Kim | f16d711679 | |
George Joseph | 1edcff6b03 | |
George Joseph | 5fb8d852f4 | |
Friendly Automation | 1377cfc3c1 | |
George Joseph | 33ebaae23f | |
sungtae kim | 67d587f47d | |
Sean Bright | e70f8f7c20 | |
Friendly Automation | 58eb82aa8a | |
Joshua C. Colp | 41da4ed8b2 | |
George Joseph | 8222e8ee2f | |
Friendly Automation | 762f40fca0 | |
Ben Ford | 26a04477f4 | |
Kevin Harwell | 5a0a4c2efa | |
George Joseph | 66982824bf | |
Friendly Automation | a1d7d469a9 | |
George Joseph | 10cf12e7e0 | |
George Joseph | c496fc2e28 | |
Giuseppe Sucameli | a618d20ca4 | |
Kevin Harwell | 62faecd60d | |
Jean Aunis | e456600575 | |
Friendly Automation | 9514829403 | |
Joshua C. Colp | b13051705d | |
Friendly Automation | b9b095bb2e | |
Joshua C. Colp | e47e8ff39a | |
eyalhasson | 9eb3a7a82c | |
Paulo Vicentini | c01d2f66ee | |
Jeremy Lainé | 59ae83d07e | |
Joshua C. Colp | 2c1ac524b8 | |
Friendly Automation | 06df43f6dd | |
Joshua C. Colp | 128b90a437 | |
Gerald Schnabel | 8791dda672 | |
Chris-Savinovich | 9b85882f04 | |
George Joseph | d0eccac3ff | |
Kevin Harwell | 2e1cbcde7d | |
Joshua C. Colp | e66d4d1d2a | |
George Joseph | 8414ca191e | |
Jeremy Lainé | da50162fa4 | |
Sean Bright | 9cd6161083 | |
Valentin Vidic | efde1ab138 | |
Joshua C. Colp | 42922af7b8 | |
Sean Bright | 28da2948d1 | |
Sean Bright | d87fc1c591 | |
Friendly Automation | 5254ebf09f | |
Joshua C. Colp | 94f9c681d4 | |
Friendly Automation | c7a7638236 | |
Friendly Automation | 7de0b919c9 | |
Alexei Gradinari | 4a8564cafa | |
mohitdhiman | 84a7b4d356 | |
Diederik de Groot | 790626ec82 | |
Joshua C. Colp | d309f1d9f7 | |
George Joseph | e3439d3011 | |
Bryan Boatright | 250812df09 | |
Richard Mudgett | b26ec935ec | |
George Joseph | 7f2a953691 | |
Corey Farrell | 240f339938 | |
George Joseph | 96f8b19b1f | |
George Joseph | a39dd50436 | |
Alexei Gradinari | f9face3612 | |
Richard Mudgett | a551539048 | |
Joshua C. Colp | 5dc38c2fa9 | |
George Joseph | 1036959a49 | |
George Joseph | e137086163 | |
Friendly Automation | ead94ad621 | |
Sean Bright | a2336adfb9 | |
Friendly Automation | 4cfc25d4e6 | |
Sean Bright | 560747dca4 | |
Friendly Automation | c01a770fc0 | |
Sean Bright | 92cc094d4e | |
Friendly Automation | 70a2f51786 | |
Friendly Automation | ac5c4316ef | |
Friendly Automation | 212f2a3aa3 | |
Joshua C. Colp | e5605232df | |
Friendly Automation | a03202e551 | |
Joshua C. Colp | e557a72566 | |
George Joseph | 6109126e2d | |
Friendly Automation | 53bda83f5e | |
Sean Bright | b84fd37ef0 | |
George Joseph | 232a56d0af | |
Sean Bright | 3f3035680b | |
Joshua C. Colp | a2e4621d77 | |
Sean Bright | 93f00ebe59 | |
George Joseph | 1ef993911f | |
Joshua C. Colp | e8a8729ed4 | |
Alexei Gradinari | 6392e452f2 | |
Giuseppe Sucameli | f4afd097af | |
George Joseph | 21a5ad0fd9 | |
Sean Bright | 8c312c54ed | |
George Joseph | 30934a0145 | |
George Joseph | d9252612a7 | |
Sean Bright | 44c8868fb1 | |
George Joseph | d5765e9318 | |
George Joseph | f908722c6a | |
Chris-Savinovich | 40ab571e0d | |
Jenkins2 | c30f04fa07 | |
lvl | 91630834f7 | |
Chris-Savinovich | 2e15657485 | |
George Joseph | 822d321a10 | |
George Joseph | 363d19326b | |
Kevin Harwell | d3b0284641 | |
Pirmin Walthert | 385d7523c7 | |
Corey Farrell | ec02d7fd4c | |
George Joseph | 922fbafda0 | |
Jenkins2 | 9f0459d2a0 | |
Jenkins2 | 379db83b7a | |
Jenkins2 | 57969c634e | |
Corey Farrell | 7c346aa4f4 | |
Corey Farrell | 0a9904e1c6 | |
Jenkins2 | 78dbbcef65 | |
Jenkins2 | 35a5d63195 | |
Kevin Harwell | aa728adab0 | |
George Joseph | d2397e643d | |
Joshua C. Colp | a5a8cba8c7 | |
Joshua Colp | e0b5d74e93 | |
Joshua Colp | 6dba9ca6b4 | |
Joshua Colp | b9692fb909 | |
Joshua Colp | b7b581f209 | |
George Joseph | 0deaf81bff | |
Alexei Gradinari | b6d0fbda9d | |
George Joseph | 6dcbbdec9b | |
Joshua Colp | d748ed4147 | |
George Joseph | 7ec470c1ca | |
George Joseph | ba068d3576 | |
George Joseph | 7e83dc6ce5 | |
George Joseph | 73efe86436 | |
George Joseph | a335f4c9ad | |
George Joseph | e0fbf92372 | |
George Joseph | 4937772a8d | |
George Joseph | 97633c09c5 | |
Corey Farrell | 2f75f1941a | |
Corey Farrell | 433f1acbec | |
Corey Farrell | 580bc5e2c6 | |
George Joseph | 4ae848e27a | |
Torrey Searle | da4879443b | |
Corey Farrell | 013d0c50fb | |
Joshua Colp | a40b6ad471 | |
Joshua Colp | 7a562e896e | |
George Joseph | e691f9fab2 | |
Corey Farrell | 8e7a8e8734 | |
Alexei Gradinari | cf620ce0f6 | |
Corey Farrell | dc54dc0439 | |
Joshua Colp | 6aea312a55 | |
Corey Farrell | 2301580ba8 | |
Robert Cripps | 834d37c39c | |
Corey Farrell | d4d3818ecb | |
Corey Farrell | 1709f6be77 | |
Chris-Savinovich | bc2420ee0e | |
Joshua Colp | 2c35dfc502 | |
Kevin Harwell | 214d0d118a | |
Alexei Gradinari | 158214c1a0 | |
George Joseph | 8b965c386a | |
Joshua Colp | 2f8499788a | |
Jasper Hafkenscheid | cf193d53ad | |
Pascal Cadotte Michaud | 0a4e8a43e3 | |
George Joseph | 5605928db0 | |
George Joseph | 466607da1c | |
George Joseph | 5567f618a9 | |
Joshua Colp | 9946bcc557 | |
Richard Mudgett | c81ffa9ec8 | |
Alexei Gradinari | bfe3821800 | |
Pascal Cadotte Michaud | e0472eb1d0 | |
George Joseph | 0b695d1e38 | |
Alexei Gradinari | 82f0a86e39 | |
Torrey Searle | bbbec2e95e | |
Joshua Colp | dc52719cb9 | |
Richard Mudgett | 92f71534fd | |
George Joseph | 1c33cf5cf1 | |
George Joseph | 46e3dbf1fd | |
George Joseph | ba97d7709d | |
Richard Mudgett | d3d938016b | |
Richard Mudgett | ace9bc0db4 | |
Corey Farrell | 54a1fbe428 | |
Alexei Gradinari | 0e7b91a22b | |
Corey Farrell | 655a962aa5 | |
George Joseph | b7cb2c90e6 | |
Richard Mudgett | badf0adf86 | |
Sean Bright | 78aee0f6a2 | |
Richard Mudgett | d8b9e3413c | |
Richard Mudgett | ce2e04801a | |
Corey Farrell | 01716f70e6 | |
Richard Mudgett | 75565adb55 | |
George Joseph | 6296b5c7be | |
George Joseph | 737f6aec2f | |
Jenkins2 | 0f41b4b7f8 | |
George Joseph | 145e2be84a | |
George Joseph | e10033f074 | |
George Joseph | fb33300123 | |
Corey Farrell | 7c49125f5b | |
Alexei Gradinari | 6b1a981ee1 | |
Corey Farrell | ebfb8baeed | |
Corey Farrell | c4b979a841 | |
Corey Farrell | 348a23b187 | |
Richard Mudgett | ccdb53a1ca | |
Corey Farrell | 3be3d4a730 | |
George Joseph | 39698e1dfd | |
George Joseph | 7bba0b29be | |
George Joseph | c007f01b4a | |
George Joseph | 674a882489 | |
Richard Mudgett | 69d62b5d04 | |
Richard Mudgett | f7cc6bada6 | |
George Joseph | 1311aeecfb | |
Jenkins2 | 8f6d527349 | |
George Joseph | 2065fe0c04 | |
George Joseph | e91cce7673 | |
George Joseph | d85100aed0 | |
George Joseph | 2c0123aad8 | |
George Joseph | 50cfb30734 | |
George Joseph | 1300f8b490 | |
George Joseph | 4d6e271419 | |
George Joseph | 422b4bb112 | |
neutrino88 | 1359f673bb | |
Sean Bright | 4a19205ac7 | |
Sean Bright | e71c1ba045 | |
Corey Farrell | e1ce997437 | |
George Joseph | 856d0f1312 | |
George Joseph | 6f44c996ae | |
George Joseph | 6f69e5adf2 | |
Corey Farrell | 2cec36fcc3 | |
George Joseph | 4b812569c8 | |
George Joseph | d57f3f64f8 | |
Sean Bright | 7c65723f91 | |
Sean Bright | 71e9a94673 | |
Sean Bright | c27da79ede | |
Corey Farrell | 4ca65bdf17 | |
Richard Mudgett | d55ded340f | |
Corey Farrell | bdd9f760ae | |
Corey Farrell | e3c18f073b | |
neutrino88 | 3d03fca94a | |
Richard Mudgett | ec52409a53 | |
Joshua Colp | 44615acd08 | |
Joshua Colp | 35338370cc | |
Joshua Colp | dc5e8d87f7 | |
Joshua Colp | a02522c140 | |
Joshua Colp | dc03526380 | |
Corey Farrell | b994c03650 | |
Corey Farrell | 95dc10eb72 | |
George Joseph | 628dc8d63c | |
Kevin Harwell | fa76297e66 | |
George Joseph | ef9bb05bfa | |
George Joseph | 69660f3c9a | |
George Joseph | 921c8589ef | |
Ben Ford | aa31657e28 | |
Corey Farrell | 73fa382227 | |
Sean Bright | acfc06cfc0 | |
Alexei Gradinari | 7d79805d54 | |
George Joseph | efadf89131 | |
Joshua Colp | 49116b55d9 | |
Corey Farrell | 1f5c2a2d0d | |
Moritz Fain | 27c46b8ff3 | |
Cao Minh Hiep | 74c5c1cd1b | |
George Joseph | 4ddca53164 | |
George Joseph | 5b8b18cbd2 | |
George Joseph | 97f4290421 | |
George Joseph | 63c02eeba4 | |
Joshua Colp | 155ff8e174 | |
Corey Farrell | 9c35f80adf | |
George Joseph | 594bbbea57 | |
George Joseph | a509bb729a | |
George Joseph | 984af7a1e8 | |
George Joseph | eda4e86df2 | |
Kevin Harwell | 286cf80bec | |
George Joseph | 656b3e85cf | |
George Joseph | 1948fbe439 | |
Alexei Gradinari | 37c1f35922 | |
Sean Bright | 3033242a7b | |
George Joseph | a741cd4f11 | |
George Joseph | 7bdf1d3c67 | |
Sean Bright | 33ca3664ca | |
George Joseph | 1d141112b5 | |
George Joseph | 94a4eea7f6 | |
Joshua Colp | bce2a09793 | |
Joshua Colp | b2310c5434 | |
Richard Mudgett | ac18bb23a9 | |
Richard Mudgett | 418eb22ba6 | |
Joshua Colp | f4294baf21 | |
Richard Mudgett | 2f84ff9728 | |
George Joseph | c4f1adf78e | |
Florian Floimair | 8539f6a657 | |
pk16208 | 84c574bb8b | |
George Joseph | 1843b0e2b5 | |
Joshua Colp | cd2deadb69 | |
Sean Bright | 99b2e0c2ff | |
George Joseph | 926ac196af | |
George Joseph | 3a09d9c74c | |
George Joseph | 0b88512a4d | |
Sean Bright | 44375c0616 | |
Sean Bright | d3c869c736 | |
George Joseph | 52324ef1a1 | |
Jenkins2 | d4becda8ec | |
Jenkins2 | 641e5b7e63 | |
George Joseph | dd429cd4d8 | |
Joshua Colp | 55a306deef | |
Corey Farrell | d1f6a323a0 | |
Walter Doekes | d226458c5b | |
Sean Bright | 931b68d3e6 | |
Corey Farrell | 436daa50ff | |
Joshua Colp | 3fd1216083 | |
Joshua Colp | b9cf678d18 | |
Frederic LE FOLL | a5f87a3a36 | |
lvl | eda1af091e | |
Sean Bright | b0ef54af71 | |
George Joseph | 60b703d9ca | |
George Joseph | 87550706c8 | |
George Joseph | 8936a264bb | |
George Joseph | 5d4cf16c17 | |
Rodrigo Ramírez Norambuena | 17040d1ce3 | |
Chris-Savinovich | 7b898dd8e1 | |
Richard Mudgett | 4e20fe9f06 | |
Jenkins2 | c0e47ee2be | |
Joshua Colp | d0da68bfc9 | |
Joshua Colp | 6bf0943ecb | |
Richard Mudgett | f2266602a1 | |
Rodrigo Ramírez Norambuena | 00e5c7d0ff | |
Joshua Colp | cfe8ef917d | |
Joshua Colp | fa71f498ce | |
George Joseph | 36a03b673a | |
George Joseph | 7ede0ca5b3 | |
Sean Bright | f3188a634d | |
Corey Farrell | abb04622f7 | |
Jenkins2 | 37102eb449 | |
George Joseph | 8e904d22cf | |
Joshua Colp | c2cafddaf3 | |
Jaco Kroon | 2a5d408733 | |
Jaco Kroon | b528715fa0 | |
Matthew Fredrickson | adb3195697 | |
Jenkins2 | 6c4a029bbe | |
Florian Floimair | 1928e00d90 | |
Joshua Colp | 0bc1366e15 | |
Sean Bright | b9d9c0a8b9 | |
Joshua Colp | 1cb87da69c | |
alecdavis | 6964bc37e0 | |
neutrino88 | 49d388bfa8 | |
Joshua Colp | ef061d1854 | |
Joshua Colp | a339cc1240 | |
Joshua Colp | d195767b07 | |
Richard Mudgett | 9b9dee2d2c | |
George Joseph | 3146666b71 | |
Richard Mudgett | a66fa4db24 | |
Richard Mudgett | f3924b576a | |
Richard Mudgett | fbc53412f6 | |
Richard Mudgett | ad2dfb07b0 | |
Richard Mudgett | 0a7dab8904 | |
Joshua Colp | 9ce4708da9 | |
Joshua Colp | 40d2d317ae | |
George Joseph | 33a1593fba | |
George Joseph | ab095ca4c6 | |
George Joseph | b1e294c670 | |
George Joseph | 45d096fe8d | |
George Joseph | 0c4d49c5a9 | |
Corey Farrell | db367ddbbf | |
Corey Farrell | 7f4420a222 | |
Corey Farrell | 7df97d0a00 | |
George Joseph | 735b70cd38 | |
Richard Mudgett | e8ac75eed0 | |
Joshua Colp | 555516233d | |
George Joseph | e89f3317ba | |
Ivan Poddubny | f48761907a | |
Corey Farrell | dc786aa576 | |
Torrey Searle | a1b0db826a | |
Joshua Colp | 673d509911 | |
Corey Farrell | f3a8bfff36 | |
Joshua Colp | c22efd9990 | |
Joshua Colp | c17a20e543 | |
Joshua Colp | 18760a7c98 | |
Joshua Colp | 4fa27efc03 | |
Richard Mudgett | b7f195b6fd | |
Joshua Colp | 856b6d1954 | |
Joshua Colp | e3e45a86f6 | |
Joshua Colp | 80567a67d9 | |
Alexander Traud | 819842f7fb | |
Richard Mudgett | 1f97ea7e2c | |
Kevin Harwell | d3358a8c84 | |
Kevin Harwell | d71cf6dc35 | |
Kevin Harwell | 4dee592608 | |
Alexander Traud | 0d880fac93 | |
Joshua Colp | a5ce9b6c4b | |
Salah Ahmed | 4aa91c6f11 | |
Joshua Colp | 37085a0cb7 | |
Jenkins2 | 2c89bba900 | |
Torrey Searle | ff94fcb6f1 | |
Joshua Colp | 904095833e | |
Joshua Colp | 465546fbe4 | |
Richard Mudgett | 75131c9e1c | |
George Joseph | 7f203d2bd8 | |
Alexander Traud | 4aa1a42159 | |
Alexander Traud | d9da161b5c | |
Joshua Colp | edddcb3dc6 | |
Richard Mudgett | 8baedc2204 | |
Joshua Colp | d33ed08afc | |
Alexander Traud | a4b105c99b | |
Jenkins2 | 111cde6026 | |
Joshua Colp | bb5e2f3c71 | |
Joshua Colp | ef647cc31e | |
George Joseph | 2b0d003a35 | |
George Joseph | 5fbf2ce248 | |
Corey Farrell | eacf8fe96c | |
Kevin Harwell | 059e1e3bc8 | |
Joshua Colp | dd1b4b38cf | |
George Joseph | a34ef4dcd9 | |
Joshua Colp | cdf6e93b6d | |
Jenkins2 | efa53816ef | |
Jenkins2 | b91ea7a726 | |
George Joseph | 21168ba931 | |
George Joseph | 9b4fb9d1aa | |
Corey Farrell | 90325f0569 | |
Corey Farrell | 3ed6abcc1f | |
George Joseph | b971faf740 | |
Corey Farrell | ab103d66db | |
Jenkins2 | b876d624d7 | |
George Joseph | 54364318b5 | |
Florian Floimair | fd1b8c57e9 | |
Jenkins2 | 6dac6e0ab8 | |
Jenkins2 | 990ac404f4 | |
George Joseph | b3060d5ccf | |
George Joseph | eccd5886c3 | |
George Joseph | 32ae565da2 | |
Jenkins2 | 7b84eabb1d | |
George Joseph | 487951735e | |
Corey Farrell | 46ea59a0ca | |
George Joseph | a9e7198eab | |
Jenkins2 | 00433d2b78 | |
Jenkins2 | 2328f0cb7d | |
Jenkins2 | 2ca8ed3783 | |
Corey Farrell | f34c59e745 | |
Corey Farrell | 82d351ca0e | |
Joshua Colp | 1fbe1b1eff | |
Corey Farrell | f36b4091f5 | |
neutrino88 | e5721b01f6 | |
Corey Farrell | fd84eb65b3 | |
George Joseph | 2acba0f418 | |
Joshua Colp | 18e9acc3c1 | |
George Joseph | 58c7b64ed6 | |
Richard Mudgett | 0ade9df3b6 | |
George Joseph | f4ddc56b9a | |
George Joseph | 716bac536f | |
George Joseph | bc1dd131f6 | |
Torrey Searle | bd36ec69e2 | |
Alexander Traud | 6cf1aefff8 | |
Chris-Savinovich | ae5ba776ae | |
Joshua Colp | 03c1bbffd2 | |
George Joseph | 953bdc3365 | |
Joshua Colp | 00f9872dbd | |
Joshua Colp | 64e5ce7225 | |
Nick French | 6a0847cfc6 | |
Joshua Colp | 39a352a35c | |
George Joseph | f8fa7182ac | |
George Joseph | ca651c8973 | |
Nick French | 47572a5831 | |
Richard Mudgett | 33668ab46a | |
George Joseph | 081f689bc5 | |
George Joseph | ab72d23795 | |
George Joseph | 694503d378 | |
George Joseph | 65cf0001fe | |
George Joseph | c025f09452 | |
George Joseph | 0da16dd5d0 | |
Richard Mudgett | c8ea924b50 | |
George Joseph | bb52ce0b64 | |
George Joseph | a5e6ffa1f2 | |
George Joseph | 1817d5a3e7 | |
George Joseph | 340c383d21 | |
George Joseph | 0023e40308 | |
George Joseph | 014f226bf1 | |
Corey Farrell | 871715f77c | |
George Joseph | b97b39fe1b | |
Jenkins2 | 3560ab197d | |
George Joseph | 1b1271c3ea | |
George Joseph | df67a98938 | |
George Joseph | 947d024539 | |
George Joseph | 578d381164 | |
George Joseph | 96464a523b | |
George Joseph | 2d16c85574 | |
Alexander Traud | d739aa71f8 | |
George Joseph | 8167048804 | |
Joshua Colp | 3fe275ca02 | |
Jenkins2 | 50e46e3bdb | |
Jenkins2 | bca550649a | |
Jenkins2 | ba5668bb1f | |
Jenkins2 | 90b99c58d4 | |
Joshua Colp | 6b7a4f07ed | |
Jenkins2 | 0c7cc3a16b | |
Alexander Traud | 167baff944 | |
Alexei Gradinari | 9e615dac63 | |
George Joseph | 7666b80378 | |
George Joseph | 3470409dd6 | |
Joshua Colp | 76f2699d2d | |
Richard Mudgett | a82f9762fd | |
Jenkins2 | b6a13f0fc2 | |
Richard Mudgett | b6b49071af | |
Jenkins2 | 43dc9c3d5f | |
Jenkins2 | 0d2a8b911c | |
Joshua Colp | 62859ad526 | |
Richard Mudgett | 140ce56f50 | |
Joshua Colp | 5f3869608a | |
Jenkins2 | 4ed6ab2595 | |
Jenkins2 | 567e306f8e | |
Joshua Colp | 82765b4409 | |
Robert Mordec | 447ec4e472 | |
Matthew Fredrickson | 33f4716d13 | |
Kirsty Tyerman | 3203c3491a | |
Richard Mudgett | d0e4cbfc51 | |
Jenkins2 | 6b6fa461d6 | |
Jenkins2 | a5754e7904 | |
George Joseph | 6087c1e575 | |
Kevin Harwell | ef788f4d64 | |
George Joseph | 06966e91fe | |
Jenkins2 | 4603e24609 | |
Alexander Traud | 5e9230b528 | |
Jenkins2 | caeb7fbe17 | |
Jenkins2 | acf9178925 | |
Jenkins2 | b057932138 | |
Jenkins2 | bcaf644875 | |
Joshua Colp | 101cd0d18e | |
Joshua Colp | dca83e2aa2 | |
Joshua Colp | 400f683fc1 | |
Jenkins2 | 533ab01414 | |
Richard Mudgett | cb9475eb3d | |
Alexander Traud | 6d201a5df4 | |
Alexander Traud | c8966b8c29 | |
George Joseph | 498e775a4a | |
George Joseph | aedbf5ba58 | |
George Joseph | 4228dc7b4f | |
Alexander Traud | 81f39649ea | |
Alexander Traud | 78855e13e8 | |
Alexander Traud | 0b3c090ada | |
Alexander Traud | a0445c7a3e | |
Alexander Traud | d3fe2aceab | |
Kevin Harwell | e7ffbbd40e | |
Jenkins2 | 8cc080a95c | |
Alexander Traud | 7686e674bf | |
Jenkins2 | 8c3edf3a69 | |
Richard Mudgett | f878de44af | |
Richard Mudgett | 99f439dc01 | |
Richard Mudgett | 6a1626c265 | |
Richard Mudgett | 1abcc41fff | |
Richard Mudgett | 5d34ca5b33 | |
Richard Mudgett | a6edbc9be1 | |
Richard Mudgett | 7b30158147 | |
Matthew Fredrickson | 3570a62b32 | |
Richard Mudgett | f94a310ca0 | |
Sam Wierema | bb0ce22b2b | |
Jenkins2 | c72aef9657 | |
Joshua Colp | 4f5b8f77b9 | |
Alexander Traud | b004b44a46 | |
ktyerman | c6116a3234 | |
Alexander Traud | e3de4bc46e | |
Jenkins2 | 49c4c8af98 | |
Joshua Colp | 7609249a22 | |
Joshua Colp | 2b25fdb80c | |
Jenkins2 | e46ab4743b | |
Jenkins2 | 6fa33215ef | |
Jenkins2 | 867a23e267 | |
Richard Mudgett | 034a04af2a | |
Alexander Traud | ef2386fcd7 | |
Alexander Traud | 2c3ad1e40d | |
Alexander Traud | 7763aa824e | |
Alexander Traud | e62e069705 | |
Alexei Gradinari | d9d50396cf | |
George Joseph | 98da1971e3 | |
Alexander Traud | 1205bcb69f | |
Joshua Colp | 19f8f85689 | |
George Joseph | 8b6c84787c | |
George Joseph | 499867d006 | |
Joshua Colp | b5a186d723 | |
George Joseph | 8dbd3d2b05 | |
George Joseph | a938f49bc5 | |
George Joseph | 93a85150e1 | |
Joshua Colp | f17d09ae63 | |
George Joseph | db2413b446 | |
Pirmin Walthert | 8b67e2bd14 | |
William McCall | 9ff4779f03 | |
Joshua Colp | a385467a35 | |
Richard Mudgett | 071232244a | |
Joshua Colp | 369e611ac0 | |
Alexander Traud | 8c78337479 | |
Alexei Gradinari | 9ad3918acd | |
Alexander Traud | 6833c763c7 | |
Alexander Traud | 204cc25a27 | |
Joshua Colp | 7f318c3ab5 | |
George Joseph | acfdfcd19e | |
Joshua Colp | bb33dafa8f | |
Joshua Colp | 27a8189b0c | |
Joshua Colp | 751652ec59 | |
Torrey Searle | 4b7fd478d5 | |
Alexei Gradinari | a576f50362 | |
Richard Mudgett | 90a075221b | |
Alexei Gradinari | d6145087cf | |
Joshua Colp | 6dbecc2319 | |
Alexander Traud | ec40bd945c | |
Alexander Traud | b6234f9577 | |
Kevin Harwell | 835cbbe38c | |
Jenkins2 | aa37dad11a | |
Jenkins2 | 9564fc19f5 | |
Nic Colledge | 436d17fa50 | |
Brian P. Martin | 8c1202beb9 | |
Alexander Traud | b615df06d3 | |
Alexander Traud | 99b24dc63b | |
Jenkins2 | 0afe108dd6 | |
Jenkins2 | 118eef8907 | |
Joshua Colp | 23e58ec220 | |
Joshua Colp | 8926bc20fd | |
Jenkins2 | 3e65d3bee9 | |
Joshua Colp | ac9d6b0523 | |
Nic Colledge | 36f08075da | |
Alexander Traud | 308a967470 | |
Corey Farrell | 67212eae87 | |
Alexander Traud | 9fe4f99cba | |
Corey Farrell | d893e57c90 | |
Joshua Colp | a722e79434 | |
Joshua Colp | eba5ead107 | |
Matthew Fredrickson | 316efcddb9 | |
Jenkins2 | 6783eb8cca | |
Corey Farrell | 19ebad0d30 | |
Alexander Traud | c6a4d34b7f | |
Corey Farrell | ba6034db48 | |
Jaco Kroon | 47548ff485 | |
Corey Farrell | 5dffdf79d1 | |
Jenkins2 | 2d0fb07f53 | |
Jenkins2 | 8966a39e9d | |
Joshua Colp | 6192e40e04 | |
Joshua Colp | a36d6e3674 | |
Sean Bright | 850e554793 | |
Richard Mudgett | 51a6a986f1 | |
Richard Mudgett | 3663968705 | |
George Joseph | 42abc9c430 | |
George Joseph | 0a9c7443bd | |
George Joseph | 2b50b31b68 | |
Joshua Colp | bea52b3706 | |
George Joseph | c5d19565fe | |
Joshua Colp | aac46639e5 | |
Joshua Colp | 5b0a58bc3e | |
Joshua Colp | 8c5f4dade3 | |
Joshua Colp | dec91abcae | |
Jenkins2 | ba06e54925 | |
Joshua Colp | cb4e991181 | |
Joshua Colp | 4f07ed445f | |
Kevin Harwell | 63c68d023c | |
Alexander Anikin | 1593ff91fe | |
Alexander Traud | 94c8b20f5f | |
Alexander Traud | 7b219311eb | |
Alexander Traud | 00711bce99 | |
Alexander Traud | 866b884eab | |
Jenkins2 | caedeef695 | |
Jenkins2 | b3cec9d445 | |
Jenkins2 | ada0676e1d | |
Corey Farrell | ea14243971 | |
Jenkins2 | d474763a2c | |
Jenkins2 | 57aca68bbf | |
Sean Bright | 7b05184bca | |
Alexander Anikin | 8611135e96 | |
Jenkins2 | e516c34c02 | |
George Joseph | 3c2249fd37 | |
George Joseph | be7d4faed5 | |
Alexander Traud | 92f88f164a | |
Alexander Traud | fb9634bcb3 | |
George Joseph | 39c51394c8 | |
Jenkins2 | ad0ba520b5 | |
Jenkins2 | fb9cbd524b | |
Jenkins2 | f83f5c48b2 | |
Ben Ford | f2e140e8a7 | |
Richard Mudgett | b92ebdba5f | |
Richard Mudgett | 12aa25b2e1 | |
Richard Mudgett | dfdc9a2575 | |
Richard Mudgett | af36823907 | |
Jenkins2 | 264af6bec0 | |
Jenkins2 | dfd0529abc | |
Jenkins2 | 6aee468ba1 | |
Evandro Cesar Arruda | 7886354343 | |
Chris-Savinovich | 724d926d46 | |
Nathan Bruning | 6a4afe09ce | |
Jenkins2 | 0edc4ade93 | |
Jenkins2 | 483d874836 | |
Richard Mudgett | c4f02c975b | |
Jenkins2 | 36f94cbcde | |
Corey Farrell | 7593359787 | |
Richard Mudgett | 72b16ee400 | |
Jenkins2 | dcac292ae3 | |
Jenkins2 | 9117bbb45d | |
Richard Mudgett | ea055386e0 | |
Richard Mudgett | e94f8e4a24 | |
Richard Mudgett | 906db6a3ff | |
Corey Farrell | 07e408e588 | |
Corey Farrell | 01b3c435d8 | |
Jenkins2 | 7888b6115a | |
George Joseph | cea1a22ef3 | |
George Joseph | 158c0efd4f | |
George Joseph | 69c61237cd | |
Jenkins2 | b621ea4109 | |
Joshua Colp | 945f7c6082 | |
Alexander Traud | 83353997f4 | |
Jenkins2 | e9313920e5 | |
Jenkins2 | 025fe67f2a | |
Richard Mudgett | e1363283d7 | |
Kevin Harwell | f17d53fd32 | |
Kevin Harwell | dfaa8a4935 | |
George Joseph | c63a2e28f1 | |
Corey Farrell | 5908c6753b | |
Alexander Traud | e8e4fc6202 | |
Alexander Traud | 96a668e60b | |
Corey Farrell | 6615469a05 | |
Jenkins2 | 2041d56d58 | |
Joshua Colp | c399e8528b | |
Alexander Traud | de4e2c1de8 | |
Alexander Traud | 79bb956b69 | |
George Joseph | 3a4a441817 | |
Jenkins2 | b9eb86b56e | |
Kevin Harwell | 17cd687679 | |
Ross Beer | 5955cdf5ae | |
Ivan Poddubny | 69de659224 | |
Alexander Traud | 7580d1e0bb | |
Jenkins2 | 7d8445d576 | |
Jenkins2 | b39c727848 | |
Jenkins2 | 8b1665bc55 | |
Joshua Colp | 6bda2d7baf | |
Joshua Colp | 4040b0e909 | |
Jenkins2 | fbd2504907 | |
Jenkins2 | 44c85ddc57 | |
Jenkins2 | 7f40e09b3e | |
Joshua Colp | 38d081c9f6 | |
Joshua Colp | 3742534956 | |
Jenkins2 | 648405779e | |
Jenkins2 | 1a82f5b645 | |
Jenkins2 | 6a6bda3703 | |
Jenkins2 | dc4960e48a | |
Joshua Colp | aacea4263a | |
Joshua Colp | d3a0d545a3 | |
Joshua Colp | 599f326b41 | |
Corey Farrell | 6f304697b0 | |
Corey Farrell | 8df4811cfa | |
Corey Farrell | a89323236f | |
Corey Farrell | dc520b6d8f | |
Corey Farrell | 534fda0a59 | |
George Joseph | a8daaa171e | |
George Joseph | 373e7e3fb0 | |
Jenkins2 | 94b72ace2f | |
Jenkins2 | 09e61213b7 | |
Jenkins2 | 36fd7c26fb | |
Jenkins2 | 08e0181fc3 | |
Jenkins2 | 9e21d04755 | |
George Joseph | 6faa428a38 | |
Corey Farrell | bd926539b0 | |
Corey Farrell | d202b56a74 | |
Corey Farrell | 18cbfcf4f0 | |
Corey Farrell | d57b58f5e9 | |
Corey Farrell | 34e16cbf3a | |
Corey Farrell | 98a3baca70 | |
Alexander Traud | 7b40605d8e | |
Alexander Traud | 06ba605988 | |
Alexander Traud | 0f634c1446 | |
Joshua Colp | b50331626e | |
Jenkins2 | 1f2ff45626 | |
Alexander Traud | c0c537c1d3 | |
Jenkins2 | 3b49fb3446 | |
George Joseph | 3bc40401a7 | |
Alexander Traud | afcd1dd8e5 | |
Alexander Traud | 5b80e97fff | |
George Joseph | d5af24bb14 | |
Florian Floimair | 69463c612d | |
Corey Farrell | a7ebb9409d | |
Corey Farrell | 5ac64a4464 | |
Alexander Traud | e04be32fc5 | |
Corey Farrell | eb699f3631 | |
Corey Farrell | 7e0c56f800 | |
Corey Farrell | 7e041d6233 | |
Joshua Colp | c78f4b8e61 | |
Jenkins2 | adb0bebe66 | |
Corey Farrell | 6539b89254 | |
Jenkins2 | a243fed64f | |
Ross Beer | 96eaabd920 | |
Alexander Traud | b237ef7f27 | |
Jenkins2 | 029c9383aa | |
Joshua Colp | ed7d24d0c1 | |
Joshua Colp | acf3bdc3d5 | |
Joshua Colp | d13ef8c974 | |
Jenkins2 | f518380dba | |
Jenkins2 | fb4c995ad5 | |
Jenkins2 | c42508aeb6 | |
Corey Farrell | dc738b145f | |
Alexander Traud | 7533d25e8d | |
Jenkins2 | 0a402dc851 | |
Joshua Colp | e3c76be75b | |
George Joseph | aae7fd6508 | |
Jenkins2 | 9b630985a1 | |
Joshua Colp | f05ac26d4a | |
Jenkins2 | af79e3091f | |
Alexander Traud | 09c43fdc1a | |
Corey Farrell | c09a10bb1b | |
Alexander Traud | bd6e0b1a72 | |
Alexander Traud | ba88af8a25 | |
Jenkins2 | 99702af57a | |
Alexander Traud | c227462370 | |
Jenkins2 | 0d7b7158ba | |
Kevin Harwell | 4135226f0b | |
Richard Mudgett | 9ae427c7fd | |
Alexander Traud | 57e8754a3a | |
Jenkins2 | 19682f84bc | |
Alexander Traud | 0d70a9a006 | |
Jenkins2 | 51b926aaeb | |
Alexander Traud | 7b6b6b0a7e | |
Alexander Traud | 54874eb44d | |
Corey Farrell | b81eadcefc | |
Jenkins2 | 7f864dbc36 | |
Richard Mudgett | 342aec5980 | |
Sungtae Kim | 0597e72e1d | |
Jean Aunis | a35a654a52 | |
Ross Beer | ecff05d51c | |
Alexander Traud | 725fd32428 | |
Jenkins2 | 359a0cc5a2 | |
Alexander Traud | 93df498f4e | |
Jenkins2 | 4d0a2b9976 | |
Jenkins2 | 8cbe31d0cf | |
Jenkins2 | 5fedd85bd1 | |
Alexander Traud | 44dbb8251d | |
Jenkins2 | 451fec3044 | |
Jenkins2 | 83c2d6a89f | |
Jenkins2 | 91193807c8 | |
Jenkins2 | 894a55c850 | |
Jenkins2 | 848db5abd6 | |
Alexander Traud | 2d63c185f0 | |
Jenkins2 | 2961dd6c6d | |
Jenkins2 | 9f56ad1673 | |
Alexander Traud | 0af1446d6e | |
Alexander Traud | 95ecbaa6b8 | |
Alexander Traud | 7b5e0960ef | |
Alexander Traud | 6b899b2849 | |
Alexander Traud | 98e8e849da | |
Alexander Traud | 8348862103 | |
Alexander Traud | 47d45ba025 | |
Alexander Traud | 4035582b64 | |
Jenkins2 | 0a452a5f1d | |
Jenkins2 | d175dc794c | |
Richard Mudgett | 104468ad3a | |
Corey Farrell | 41894965f2 | |
Michael Cargile | bb973aeceb | |
George Joseph | 68df9e609e | |
Jenkins2 | d0e270c973 | |
Corey Farrell | caad0c09cd | |
Jenkins2 | 499f0bfd72 | |
Jenkins2 | 5b5391d7d9 | |
Richard Mudgett | 3e5864bcc8 | |
Kevin Harwell | ffb15b2bc7 | |
Alexander Traud | 05fc37bbc2 | |
Sean Bright | 220accb461 | |
Kevin Harwell | 55dc071950 | |
Kevin Harwell | 1266754d3c | |
Joshua Colp | b1a0e601c9 | |
Kevin Harwell | 05af43b240 | |
Kevin Harwell | c5dc2fb4ab | |
George Joseph | 5947fd148b | |
George Joseph | a780386dbb | |
Joshua Colp | de5df002a0 | |
Jenkins2 | 4f166b9017 | |
Jenkins2 | 450afe655c | |
Joshua Colp | 4da0e19b89 | |
Jenkins2 | f49e5d3998 | |
Jenkins2 | c45d266edd | |
Jenkins2 | ee9bee7e05 | |
Corey Farrell | cacb72f5ae | |
Jenkins2 | 4df75c8266 | |
Jenkins2 | 21ff3c38c4 | |
Jenkins2 | b01f1d096b | |
Jenkins2 | cf6f0547c3 | |
Jenkins2 | c0f7da277a | |
Jenkins2 | e35152b550 | |
Jenkins2 | e34db67cfb | |
Sean Bright | 5ebc94da02 | |
Jenkins2 | 0fe38b7dfa | |
Thomas Guebels | 9325de11f8 | |
Corey Farrell | e532b982b3 | |
Corey Farrell | 9c8763e4d2 | |
Sean Bright | 1a7ad4c9cf | |
Alexander Traud | 6eb22964ba | |
Corey Farrell | 27d28116d9 | |
Jenkins2 | d09954b192 | |
Sean Bright | 9ad9433257 | |
Alexander Traud | c5e34f0794 | |
Alexander Traud | 88ec9be78a | |
Richard Mudgett | 421d4e9c7d | |
Jenkins2 | bbc0ba07b1 | |
Jenkins2 | 626b5a7948 | |
Alexander Traud | 0ba6337d32 | |
Jenkins2 | 0e91eb23b2 | |
Jenkins2 | ab4c3ea746 | |
Alexander Traud | 58aa0d1014 | |
Alexander Traud | 139dd38193 | |
Alexander Traud | 94ff290361 | |
Sean Bright | 48acd5cd26 | |
Sean Bright | 54efc0c637 | |
Jenkins2 | fdf988cd28 | |
Jenkins2 | 8212fd6bf4 | |
Alexander Traud | 4a5221cd43 | |
Alexander Traud | eabe72a679 | |
Alexander Traud | c2283fca21 | |
Jenkins2 | a81dfd5949 | |
Jenkins2 | d9bf0de50e | |
Jenkins2 | add4a70354 | |
Joshua Colp | f5e6a9a2d2 | |
Jenkins2 | 58e9ed1c9c | |
Corey Farrell | 4e5d5b2ce2 | |
Richard Mudgett | ba63dad12d | |
Corey Farrell | 6c72c22d51 | |
Jenkins2 | a62fcfa17b | |
Jenkins2 | f16a623ac0 | |
Alexander Traud | 0ab97e9774 | |
Alexander Traud | 81bec7c359 | |
Alexander Traud | b1c6a644d3 | |
Alexander Traud | 21bd7421ef | |
Richard Mudgett | dcfcf310a1 | |
Oron Peled | 0fc3e831a7 | |
Jenkins2 | 42290f9a45 | |
Jenkins2 | 0fcdece2a1 | |
Jenkins2 | 5c98924d64 | |
Jenkins2 | e3a2b699db | |
Richard Mudgett | da987df122 | |
Richard Mudgett | 1ff580bb25 | |
Richard Mudgett | 0cf7a9e0ca | |
Jenkins2 | 88e323a2a0 | |
Jenkins2 | 2bb68c707f | |
Jenkins2 | d2df34f204 | |
Jenkins2 | 65c8b7d6b4 | |
Jenkins2 | 4bc5291878 | |
Jenkins2 | 34e3b51296 | |
Richard Mudgett | 1adf90320d | |
Richard Mudgett | 93a1ffc834 | |
Richard Mudgett | 5d16cefd63 | |
Jenkins2 | 8941934e0b | |
Sungtae Kim | dd9690f68c | |
Jenkins2 | 6b172f6f2b | |
Joshua Elson | 8125b825d3 | |
Sean Bright | 09edcd93aa | |
Richard Mudgett | 665444b772 | |
Richard Mudgett | ef1aeb9437 | |
Jenkins2 | 62d491527e | |
George Joseph | 7debdd285c | |
Jenkins2 | 58ba7490a9 | |
Jenkins2 | 7cd9798a46 | |
Jenkins2 | c9bff6be9b | |
Jenkins2 | 994e62668b | |
Corey Farrell | 698b28e9c7 | |
Richard Mudgett | 6520489952 | |
Richard Mudgett | 4a337b1a76 | |
Richard Mudgett | 2c4dde0ed0 | |
Jenkins2 | d82da7afff | |
Jenkins2 | ae236c5455 | |
Jenkins2 | cee39bf820 | |
Jenkins2 | 0d105398f0 | |
Corey Farrell | 4c8c0e4c22 | |
George Joseph | 5b699c812e | |
Jenkins2 | 897f7fb30e | |
Jenkins2 | c956349667 | |
Jenkins2 | a1c7383d49 | |
Alexander Traud | 967c70acb5 | |
Jenkins2 | 5b3b627821 | |
Alexander Traud | dd6b8cd0b2 | |
Jenkins2 | 663f86a1a9 | |
Alexander Traud | 8daed642c7 | |
Alexander Traud | f59fb7fec8 | |
Corey Farrell | 154bccf147 | |
Alexander Traud | 4bb38022ea | |
Alexander Traud | 021168f06f | |
Alexander Traud | e998c906a7 | |
Richard Mudgett | 87f8459410 | |
Alexander Traud | 6b771e346b | |
Alexander Traud | 7ad6792011 | |
Jenkins2 | ede9185249 | |
Jenkins2 | 24def35abc | |
Jenkins2 | 14fc07279f | |
Jenkins2 | 2bdc26b2d2 | |
Jenkins2 | 5d74e07793 | |
Richard Mudgett | 85b384728c | |
Jenkins2 | 31b501c1a7 | |
Jenkins2 | 86aa3572ee | |
Alexander Traud | 420586beab | |
Jenkins2 | 25adeb120a | |
Jenkins2 | 38d2a5fd7b | |
Alexander Traud | d5a24cfdf7 | |
Jenkins2 | 32486dd40d | |
Alexander Traud | 31e5008b47 | |
Jenkins2 | 579dd18eb7 | |
Alexander Traud | ffb7b62019 | |
Alexander Traud | 3b566fc8ec | |
Alexander Traud | f20a522d43 | |
Alexander Traud | 1fbca9a40d | |
krells | d5bcbd460e | |
Jenkins2 | 9193f2dd79 | |
Jenkins2 | 8c8bb2dbf2 | |
Jenkins2 | fa42549d4e | |
Sean Bright | b353c90627 | |
Jenkins2 | c5739f9858 | |
Joshua Colp | b944cb629e | |
Jenkins2 | 8e5f07c53c | |
Jenkins2 | b1a65933e2 | |
Igor Goncharovsky | 1488efb3a8 | |
Joshua Colp | c137446772 | |
ghjm | 0b399013c6 | |
Jenkins2 | 16f211c647 | |
Corey Farrell | 22edb10c44 | |
Alexander Traud | 9ffa1f4301 | |
Alexander Traud | de65fd11fe | |
Alexander Traud | 72845d54f0 | |
Jenkins2 | 9083022ebf | |
Alexander Traud | 985834607b | |
Jenkins2 | d7f5421ea4 | |
Richard Mudgett | 1bbd9f4a47 | |
George Joseph | fbd0667c84 | |
Alexander Traud | 637bd26575 | |
Richard Mudgett | b0a78bdc3e | |
Jenkins2 | 5ebb32d3e3 | |
Jenkins2 | cb5593c594 | |
Jenkins2 | 197bff1532 | |
Yasuhiko Kamata | c0a4a939cc | |
Jenkins2 | e79e8c557b | |
George Joseph | 948b852f48 | |
Corey Farrell | f01bac230d | |
Corey Farrell | 97b574c927 | |
Jenkins2 | 2c32e22792 | |
Jenkins2 | bb7ae01487 | |
Jenkins2 | 25b07f8c49 | |
Alexander Traud | f07b0df627 | |
Jenkins2 | 9debcc10fe | |
Alexander Traud | 659c44f5fb | |
Alexander Traud | 45008c604d | |
Alexander Traud | d53a312a03 | |
Alexander Traud | 1d625a7428 | |
Richard Mudgett | f35960d55b | |
Jenkins2 | 231caefd9b | |
Tzafrir Cohen | 90b2dc1450 | |
Jenkins2 | 60a66b56a5 | |
Jenkins2 | 1f1b8e85b0 | |
Joshua Colp | fab209e746 | |
Jenkins2 | 8d642b8d07 | |
Jenkins2 | 2697904f0e | |
Jenkins2 | 6acabbeaca | |
Jenkins2 | 7c4733bf7f | |
Jenkins2 | ffec53b528 | |
Jenkins2 | d72d6f6223 | |
Corey Farrell | 608112ced3 | |
Joshua Colp | cdefdea1cc | |
Joshua Colp | 7f2d6f51ed | |
Joshua Colp | a1eb5b06a8 | |
Corey Farrell | b7c25740fa | |
Richard Mudgett | 2e09ed3b18 | |
Jenkins2 | 8e0f2c7379 | |
Richard Mudgett | dd6dee7e50 | |
Richard Mudgett | 96040fa6bb | |
Richard Mudgett | a8a2f39f04 | |
Corey Farrell | dedf0ff2bf | |
Corey Farrell | 8a6b3537b1 | |
Corey Farrell | 909e642918 | |
Corey Farrell | bd11159dbc | |
Corey Farrell | 975a38e524 | |
Alexander Traud | b45fb3a6ec | |
Sean Bright | 1da8846ca7 | |
Jenkins2 | 637f6216c4 | |
Jenkins2 | edbfcfcae1 | |
Jenkins2 | e8f81a2905 | |
Jenkins2 | 3a8744b59b | |
Jenkins2 | 29d96b46f0 | |
Corey Farrell | c67eb7031b | |
Corey Farrell | 17480f6ea4 | |
Jenkins2 | 7cc614d223 | |
Jenkins2 | b6b1d73cb5 | |
Jenkins2 | d680ade35c | |
Jenkins2 | 776ec5765d | |
Corey Farrell | c1acc4f364 | |
Jenkins2 | eeb99efead | |
Jenkins2 | 5745f3489b | |
Richard Mudgett | 96348acbe8 | |
Alexander Traud | da1a9f392a | |
Alexander Traud | aa52c52b21 | |
Alexander Traud | 9865e689d2 | |
Alexander Traud | a68da30069 | |
Alexander Traud | e60135efd4 | |
Richard Mudgett | ba57c03740 | |
Richard Mudgett | 0feca9bc18 | |
Alexander Traud | 440fb4d02b | |
Alexander Traud | dda0ab236d | |
Alexander Traud | c11999f140 | |
Alexander Traud | cee6de4e63 | |
Corey Farrell | 0f141351f9 | |
Jenkins2 | b8271826b3 | |
Jenkins2 | eb8a36d961 | |
Corey Farrell | d73a3a1764 | |
Corey Farrell | ec74570598 | |
Corey Farrell | 74b6fafbe6 | |
Kevin Harwell | d25a9bc7d3 | |
Jenkins2 | 9e47e113e1 | |
Jenkins2 | 6baf53e4be | |
Joshua Colp | 3fa33de301 | |
Tzafrir Cohen | 00b0c67144 | |
Jenkins2 | 8e5167a0b5 | |
Jenkins2 | 3edaa955ba | |
Corey Farrell | dd528c53c0 | |
Corey Farrell | 5b395a7b97 | |
Sean Bright | d2c836d24a | |
Corey Farrell | b275b0a84f | |
Jenkins2 | b47882df72 | |
Richard Mudgett | 751fd9b628 | |
Jenkins2 | e4d536b64d | |
George Joseph | 712450c78a | |
Jenkins2 | 9792bb0aa9 | |
Sean Bright | bae301c18c | |
Richard Mudgett | 5de8f49294 | |
Richard Mudgett | 9f1cfbafca | |
Richard Mudgett | eead5d0c30 | |
Corey Farrell | 0bdddbe526 | |
Corey Farrell | d62c87bb8d | |
Corey Farrell | 92fb393cab | |
Kevin Harwell | 53799318bc | |
Sean Bright | ce3d56920b | |
Jenkins2 | 35a2e09c65 | |
Jenkins2 | 29b10b42bb | |
Sean Bright | b4ae112e3a | |
Jenkins2 | d85290ca48 | |
Joshua Colp | e94962ce63 | |
Jenkins2 | 2ca8095691 | |
Jenkins2 | 0097ad91ef | |
Joshua Colp | 8030309a2f | |
Corey Farrell | 719e8eee03 | |
Sean Bright | 6892c13a2c | |
Corey Farrell | 82b6ba976f | |
Richard Mudgett | 4f45748f52 | |
Corey Farrell | 6b3188fb8c | |
Corey Farrell | be3800c49d | |
Corey Farrell | d05ec48145 | |
Joshua Colp | 616659d620 | |
Jenkins2 | b100233801 | |
Jenkins2 | 2072057657 | |
Joshua Colp | f1d50c0fb0 | |
Jenkins2 | eda4f59656 | |
Jenkins2 | b539ea2a38 | |
George Joseph | ee62652e2d | |
Corey Farrell | 9adffca9c7 | |
Aaron An | c38b750810 | |
Jenkins2 | dba037d422 | |
Ivan Poddubny | fef23297b7 | |
Corey Farrell | 0e5d8ad09b | |
Jenkins2 | 909f41a2e0 | |
Jenkins2 | bde7c0420a | |
Oron Peled | fc86e58a5a | |
Jenkins2 | c7bdffb281 | |
Corey Farrell | d6b2f457d9 | |
Corey Farrell | 381ed4f1cc | |
Corey Farrell | 67b5a4e616 | |
Corey Farrell | 3782230e00 | |
Corey Farrell | 1d636f4afa | |
Richard Mudgett | 5801917a75 | |
Richard Mudgett | 46ed7afdd9 | |
Joshua Colp | b14d165927 | |
Jenkins2 | cbb71df228 | |
Jenkins2 | 56a931f64c | |
Jenkins2 | b6d03c086b | |
Corey Farrell | 5cdc65cf1e | |
Joshua Colp | 9867219329 | |
George Joseph | 43903f1e83 | |
George Joseph | d6ea23d60e | |
Jenkins2 | 232a61006c | |
Jenkins2 | 0fc61f23c6 | |
Jenkins2 | d1a68d90b0 | |
George Joseph | 1b50eb2d9f | |
Joshua Colp | 7f2df9e277 | |
Jenkins2 | b270d5b5a2 | |
Joshua Colp | 4cda942ebd | |
Richard Mudgett | a368ad9229 | |
Jenkins2 | e31e3b581b | |
Jenkins2 | ccb563d357 | |
Jenkins2 | 7d230e690c | |
Jenkins2 | 2ea359f738 | |
Jenkins2 | 1865b3d230 | |
Corey Farrell | b3b7367e6b | |
Jenkins2 | ab8ae8fa92 | |
Jenkins2 | 7ad305bfef | |
Corey Farrell | 8921b2581d | |
Corey Farrell | d5a7a98528 | |
Corey Farrell | 5e9d70ae5d | |
Corey Farrell | 4de95d4bf0 | |
Corey Farrell | e3bd95f55c | |
Corey Farrell | 501f4dcdd8 | |
Corey Farrell | 7413bcbeb5 | |
Corey Farrell | 8165115faa | |
Sean Bright | 8338f3ec14 | |
Jenkins2 | 7377927b18 | |
Corey Farrell | 85dec2ae4f | |
Richard Mudgett | 61e81338d9 | |
Sean Bright | 62e743e6a7 | |
Sean Bright | 74073c395b | |
Sean Bright | a1fcb7b5a6 | |
Joshua Colp | 9a016bd65e | |
Joshua Colp | a35032816a | |
Jenkins2 | 9a68fa36d1 | |
George Joseph | 6d290f1880 | |
Jenkins2 | c35fa1868e | |
Jenkins2 | 53f1de6259 | |
Corey Farrell | dd72844e4d | |
Jenkins2 | 20ca06b1db | |
Jenkins2 | 992b7197b7 | |
George Joseph | e40bffd53b | |
Jenkins2 | 9b94e440ae | |
Joshua Colp | 5705e8ae0e | |
Jenkins2 | 2b8a152c69 | |
Joshua Colp | 7a68faeb1d | |
Ivan Poddubny | 7ffc41d19f | |
Sean Bright | e1a358a6e4 | |
Sean Bright | ce2c89ce68 | |
Corey Farrell | 6632f61153 | |
Richard Mudgett | 73b3390dbe | |
Sean Bright | ca448bf150 | |
Sean Bright | d9b932a455 | |
Corey Farrell | 4decf4e492 | |
Richard Mudgett | 28eddc7ea6 | |
Jenkins2 | 60acbeb431 | |
Jenkins2 | 3bfddd9e73 | |
Jenkins2 | 84fe5f0219 | |
Joshua Colp | 8834a8eff9 | |
Jenkins2 | 90fe599e45 | |
Jenkins2 | 3b6fc78f4e | |
Sean Bright | 028f4320de | |
Joshua Colp | ed089535d4 | |
Sean Bright | 4838557132 | |
Sean Bright | a4b291029f | |
Corey Farrell | 9fc4f10e0e | |
Sean Bright | c3bc44fa1b | |
Sean Bright | f726f11974 | |
Corey Farrell | 3d79c34350 | |
Kevin Harwell | ecdccb8071 | |
Kevin Harwell | f20ab2b65f | |
Jenkins2 | 54a86779a3 | |
Jenkins2 | ac7501b15c | |
Jenkins2 | 9bf73ae1b3 | |
Jenkins2 | 58addb1e38 | |
Corey Farrell | 5a0dcd9275 | |
Corey Farrell | 2691ee68ce | |
Corey Farrell | db6602f6f7 | |
Corey Farrell | 289549d659 | |
Richard Mudgett | f59a75c6fa | |
Richard Mudgett | 93859f9aca | |
Jenkins2 | 8e6aedbdcd | |
Jenkins2 | 0ff3694979 | |
Joshua Colp | c4fe9ff002 | |
Joshua Colp | 466f9035f5 | |
Niklas Larsson | aacdbdcfd2 | |
Richard Mudgett | 594faa192d | |
Sungtae Kim | e7201c93cc | |
Joshua Colp | c80595a852 | |
Richard Mudgett | 9330eacc50 | |
Jenkins2 | 43ffae44c7 | |
Jenkins2 | c0d1f447ba | |
Jenkins2 | 7e4bd0cf69 | |
Alexander Traud | e819cf7826 | |
Jenkins2 | 9e9dccd293 | |
Jenkins2 | 59bb2c1920 | |
Alexander Traud | 64942276d1 | |
Joshua Colp | 41c14fd807 | |
Corey Farrell | f5cfd87c4a | |
Corey Farrell | ef25628b10 | |
George Joseph | 0cdd31ee10 | |
Sean Bright | 6635ddc819 | |
Sean Bright | 077ceacd48 | |
Joshua Colp | dac70daf1b | |
Jenkins2 | 0f4152307a | |
Joshua Colp | 8e979ce41b | |
Jenkins2 | 838b0a41e0 | |
Jenkins2 | 749c544dbb | |
Corey Farrell | 6274e58a25 | |
Corey Farrell | 635fe8ec87 | |
Joshua Colp | 85ffedabd1 | |
Joshua Colp | 759468c45f | |
Jenkins2 | 2edbaa1588 | |
Jenkins2 | c9a531d03b | |
Jenkins2 | c3a25ff753 | |
Jenkins2 | efb165a8a8 | |
George Joseph | f1f88c40f6 | |
Jenkins2 | 2e3f878423 | |
George Joseph | 635583dabd | |
George Joseph | 9cbcd89587 | |
Joshua Colp | 32bd372f3a | |
Joshua Colp | 13f3588150 | |
Alexander Traud | c46cab49a3 | |
Richard Mudgett | 81e2d8aa9a | |
Alexander Traud | 0f719aa051 | |
Joshua Colp | ee3562619c | |
Richard Mudgett | 8dd9a79e6e | |
Joshua Colp | 71871e1ea7 | |
Joshua Colp | 83dffa6088 | |
Joshua Colp | fc180eb56a | |
Joshua Colp | 193073e851 | |
Joshua Colp | 3cd7114490 | |
Corey Farrell | a78d747ee8 | |
Alexander Anikin | d6568aa72a | |
Kevin Harwell | 5abab0a34c | |
Alexander Traud | 6ebe03d4b3 | |
Joshua Colp | d2fb0ffb5b | |
Corey Farrell | 2bff38b8a8 | |
Joshua Colp | 27491c6847 | |
Joshua Colp | 3d429a5072 | |
Joshua Colp | db7a180ce2 | |
Corey Farrell | c6e1e6e968 | |
Corey Farrell | e9ba6a6b88 | |
Corey Farrell | 26a400c67a | |
Corey Farrell | e723331f4f | |
Corey Farrell | e07d94111d | |
Corey Farrell | 8a63f4e709 | |
Corey Farrell | 115f53a0fb | |
Joshua Colp | 0fd8db7ec2 | |
Joshua Colp | a8ac9a551d | |
Joshua Colp | 090ce0cd1b | |
Joshua Colp | 4e6a0d5683 | |
Joshua Colp | 29bf57ff2f | |
Joshua Colp | 4045cb4df9 | |
Joshua Colp | 3ce96d2e03 | |
Joshua Colp | 1aba7dd229 | |
Alexander Traud | 41498dcb5d | |
Corey Farrell | 84fd41729e | |
Joshua Colp | 1e68c8e738 | |
Joshua Colp | 9b34aaddd9 | |
Corey Farrell | df6161b70e | |
Joshua Colp | da89afc2e2 | |
Corey Farrell | 1e2b38adf5 | |
Corey Farrell | ddc86ec664 | |
Corey Farrell | 0e90d74604 | |
Corey Farrell | 746dd80eab | |
Joshua Colp | bef287ccf2 | |
Corey Farrell | 8971a7ff3c | |
Corey Farrell | 9d688cf12c | |
Joshua Colp | 3356c796a0 | |
Joshua Colp | be3a33f3d1 | |
Joshua Colp | b611cd6f9c | |
Joshua Colp | 9c8894c4af | |
Alexander Traud | 50cb5199c1 | |
Joshua Colp | e0f9d4d808 | |
Corey Farrell | 6a5ab65c88 | |
Corey Farrell | 366cc259bc | |
Corey Farrell | 69113388e9 | |
Corey Farrell | 5fe2e7bfdc | |
Corey Farrell | d68e54b7ab | |
Corey Farrell | 0f270cbe9e | |
Corey Farrell | 3dca4c7742 | |
Corey Farrell | 5f0b4a1645 | |
Corey Farrell | a369bfc4b2 | |
Pirmin Walthert | 6b0963c42a | |
Sean Bright | 3c72064d3f | |
Corey Farrell | 455b1bdeb0 | |
Joshua Colp | ef8ee3ee69 | |
Corey Farrell | 549542e50e | |
Corey Farrell | 2852dac480 | |
Corey Farrell | 0b8b153d3c | |
Jenkins2 | 2e9c7f9b8f | |
Joshua Colp | 0a7bbb068b | |
Corey Farrell | 69055724ce | |
Sean Bright | 60cfe00c4e | |
Sean Bright | db2677133c | |
Joshua Colp | 71c0478a04 | |
Joshua Colp | 8d55b132b9 | |
Jenkins2 | 9fb2da7963 | |
Jenkins2 | cb74309a51 | |
Joshua Colp | 5df5f3e86d | |
Richard Mudgett | 8a7dd5cc44 | |
Richard Mudgett | 7f916d621a | |
George Joseph | 7e874eae7a | |
George Joseph | 062a4390ac | |
Torrey Searle | e7f8302d30 | |
Joshua Colp | e25ec49b62 | |
Jenkins2 | 57fe717471 | |
Jenkins2 | d74b50ecf7 | |
Jenkins2 | d7303f6337 | |
Joshua Colp | f233e421dd | |
Joshua Colp | c2dddb001a | |
Corey Farrell | b8209a1273 | |
Jenkins2 | 4aadd2e495 | |
Corey Farrell | 9c6d4ec022 | |
Jenkins2 | c7b7aefbc7 | |
George Joseph | b5f2779a23 | |
Ben Ford | e6ada55430 | |
Sean Bright | cf062303e3 | |
Corey Farrell | 2ad6210dd7 | |
Corey Farrell | 76e640bd53 | |
Joshua Colp | b1743cb3c7 | |
Jenkins2 | bcd2241c47 | |
Corey Farrell | b03d389bec | |
Richard Mudgett | 507d9b5f9e | |
Richard Mudgett | bb2173275a | |
Jenkins2 | 1250b7c664 | |
Joshua Colp | 360d50d74c | |
Corey Farrell | 211f5d8dd4 | |
Jenkins2 | 6cce744401 | |
Corey Farrell | d12be40750 | |
Kevin Harwell | e3bc8f7815 | |
Richard Mudgett | 32042c6c3c | |
Joshua Colp | 7296d3e5af | |
Jenkins2 | 88d3773330 | |
George Joseph | 67d12d1437 | |
George Joseph | 62e70c70a5 | |
George Joseph | b2fbf1afd7 | |
Jenkins2 | 936a85419e | |
Jenkins2 | cdafec0f7a | |
Kevin Harwell | 4b3e03ae87 | |
Richard Mudgett | 2b85799512 | |
George Joseph | 2faa3e3bab | |
Joshua Colp | 4e8271c2a5 | |
Jenkins2 | fe78531d5e | |
Corey Farrell | 16df0e9786 | |
Corey Farrell | cf91dde509 | |
Jenkins2 | 5c47ee4476 | |
Jenkins2 | 34065994fe | |
Jenkins2 | 841fc3e5c2 | |
Joshua Colp | 7657519a53 | |
Joshua Colp | 5a60ce3ee3 | |
Jenkins2 | cb1ec6255f | |
Joshua Colp | 40f906add4 | |
Richard Mudgett | 7ad4c19b20 | |
Jenkins2 | 8824ed44dc | |
Corey Farrell | c1a608f862 | |
Joshua Colp | 5d19dc2cb1 | |
Aaron An | d95bfcd013 | |
Joshua Colp | 315ccf40f4 | |
Jenkins2 | ec40b74e51 | |
Jenkins2 | 01064bd6bc | |
Richard Mudgett | ec58521a48 | |
Jenkins2 | 37863c163c | |
Jenkins2 | 36b5a66c27 | |
Corey Farrell | 69af7eb663 | |
Corey Farrell | 4f75655cb6 | |
Corey Farrell | 8cdc0ef385 | |
Corey Farrell | e4fba95022 | |
Corey Farrell | b96dd55add | |
Corey Farrell | 3dc600ef84 | |
Corey Farrell | fc041554c3 | |
Corey Farrell | 75539dbf2c | |
Corey Farrell | b4240bea6c | |
Corey Farrell | 803dc3dee5 | |
Corey Farrell | 0a0e2c4253 | |
Richard Mudgett | 593f789563 | |
Joshua Colp | 56e32ca355 | |
Richard Mudgett | 6bc8af2433 | |
Richard Mudgett | 33d02f5090 | |
Richard Mudgett | 9013415593 | |
Jenkins2 | ad7860fd19 | |
Jenkins2 | 55001ea31e | |
Jenkins2 | 0eee42626a | |
Jenkins2 | 19c9200429 | |
Joshua Colp | 1479d2603e | |
Sean Bright | 250c173cfb | |
Jenkins2 | 6e34cf6af7 | |
Jenkins2 | 22602ec7dd | |
Jenkins2 | 686d11837e | |
Alexander Traud | 7dd2b18e32 | |
Corey Farrell | b5331af53b | |
Alexander Traud | 5f4197735d | |
Richard Mudgett | 3bce5a9dfa | |
Richard Mudgett | 675e50b903 | |
Richard Mudgett | 4ea61eef94 | |
Richard Mudgett | 8ec2db7084 | |
Corey Farrell | d3cfcc0da6 | |
Joshua Colp | 543d8ee388 | |
Jenkins2 | a1d6920745 | |
Ben Ford | ffcb7e2a25 | |
Corey Farrell | bfb0f27c87 | |
Corey Farrell | 7c35740ba1 | |
Corey Farrell | 73a5e9f0e9 | |
Sean Bright | d524ad523d | |
Kevin Harwell | a7c00707a5 | |
Jenkins2 | ae2687494a | |
Jenkins2 | 71d3f2cb90 | |
Jenkins2 | 6b14200093 | |
Jenkins2 | a87391cfcb | |
Jenkins2 | 835db751e1 | |
Tzafrir Cohen | 1b535d8457 | |
Corey Farrell | cee81b3c8b | |
Igor Goncharovskiy | 8436f1d35a | |
Corey Farrell | 987b16e8f9 | |
Joshua Colp | 2e5e7e0b14 | |
Jenkins2 | a1467ab7bc | |
Joshua Colp | 40d30cd70e | |
Richard Mudgett | 2db97ee219 | |
Richard Mudgett | ca7f3d297b | |
Joshua Colp | 7385d1e017 | |
Joshua Colp | 28368b3553 | |
George Joseph | 3f7ad66245 | |
Corey Farrell | 4772849016 | |
Ben Ford | dfe00b80e7 | |
Joshua Colp | cf63db7217 | |
Jenkins2 | 271780019a | |
Jenkins2 | 02538548e6 | |
Corey Farrell | 23d05ebc49 | |
Jenkins2 | 65b3c68230 | |
Jenkins2 | 8cb61c6f40 | |
Jenkins2 | 56082b6b4d | |
Jenkins2 | 529e8e2afa | |
Corey Farrell | c95ab4c1ce | |
Jenkins2 | e7d8b4ebe7 | |
Jenkins2 | 3440f535db | |
Alexander Traud | 5351e862ee | |
Corey Farrell | ec278955a3 | |
Corey Farrell | 6cec3149be | |
George Joseph | 4a2575a107 | |
Jenkins2 | 302626c115 | |
Richard Mudgett | b4cb0050bd | |
Joshua Colp | 07e17fd04f | |
Alexander Traud | c7a9a6ef0c | |
Richard Mudgett | b57dcc8d9c | |
Corey Farrell | fb4ed70e62 | |
Joshua Colp | 63e536d97f | |
Corey Farrell | 216251abcb | |
Corey Farrell | 7dd7ca2858 | |
Jenkins2 | dbafed0ed5 | |
Joshua Colp | c5f671e2df | |
Jenkins2 | 4c83f685e6 | |
Jenkins2 | e1d713c40c | |
Jenkins2 | 0d4febb1c8 | |
Jenkins2 | e7e181c2bc | |
Matt Jordan | 0a11097a22 | |
Richard Mudgett | 7f8c212e75 | |
Richard Mudgett | 85723a9e50 | |
Tzafrir Cohen | 944e500e95 | |
Jenkins2 | ce0ef34020 | |
Jenkins2 | 3b1324b13e | |
Alexander Traud | dcbf61a31e | |
Guido Falsi | 85cada85d6 | |
Jenkins2 | 6fc88e80e8 | |
Jenkins2 | 31cbb53a0a | |
Jenkins2 | bf21ba9c2d | |
Jenkins2 | d0cd6cb1a7 | |
Kevin Harwell | 4bc2aca9b7 | |
Corey Farrell | 89f11364f6 | |
Alexander Traud | 114ed320ea | |
Joshua Colp | 7215d07ca2 | |
Richard Mudgett | a8c6c3bd7d | |
Richard Mudgett | b56fa63db8 | |
Richard Mudgett | 92c5cf3920 | |
Richard Mudgett | 6393c106ca | |
Jenkins2 | 28a3ff75d5 | |
Thomas Sevestre | 6d3ee9fb93 | |
Daniel Tryba | 21d502818f | |
Jenkins2 | 603418aac7 | |
Joshua Colp | 5bed433e71 | |
Torrey Searle | 407b78504d | |
Jenkins2 | b4113450e6 | |
Jenkins2 | b498942ba3 | |
Daniel Tryba | af09996178 | |
Tzafrir Cohen | 8e05796e81 | |
Jenkins2 | 4a2caab4f6 | |
Richard Mudgett | 5f6bad6733 | |
Jenkins2 | 4a0fa1ba59 | |
Joshua Colp | 0430ae5d51 | |
George Joseph | f3f141781c | |
Jenkins2 | 5a8c148dcf | |
Nathan Bruning | 416e35589e | |
Jenkins2 | 821d7428ab | |
Sean Bright | e71a65a358 | |
Richard Mudgett | 42fdfffefc | |
Jenkins2 | da07a3bb62 | |
Jenkins2 | 2f3d3881d4 | |
Corey Farrell | 48971e4d43 | |
Joshua Colp | ce26554b51 | |
Jenkins2 | dedd5abfe2 | |
Jenkins2 | dc524825a9 | |
Jenkins2 | d536802de2 | |
Jenkins2 | b3c49f271e | |
Jenkins2 | 103737f7b1 | |
Jenkins2 | 4aba59b036 | |
Richard Mudgett | 128f7ffaa2 | |
Richard Mudgett | 3525081a7c | |
Richard Mudgett | 7366657a9a | |
Richard Mudgett | 34d55352a5 | |
Richard Mudgett | d388c18abf | |
Corey Farrell | 82592c3673 | |
Sean Bright | 6b16fa12c8 | |
hajekd | 39b68a41f7 | |
Alexander Traud | 209916981a | |
Corey Farrell | f1163c0f6f | |
Jenkins2 | d2a39f896d | |
Jenkins2 | 3844179335 | |
Corey Farrell | 8bf4be1048 | |
Jenkins2 | 7703ab0443 | |
Jenkins2 | a6ead833ee | |
Corey Farrell | 5110600f1e | |
Corey Farrell | 462dd7c2de | |
Jenkins2 | 646d97f626 | |
krells | 29c442b587 | |
Torrey Searle | 6c30f4a2d1 | |
Jenkins2 | 5a8f85ae98 | |
Daniel Tryba | 6dfe5b29b6 | |
Jenkins2 | 9d4a7b528c | |
Richard Mudgett | 0945f10d3b | |
Richard Mudgett | a433bb38b5 | |
Jenkins2 | b6d5e9223c | |
George Joseph | 47620ea862 | |
Joshua Colp | f4daa91dcb | |
George Joseph | d70d7b2f5d | |
Richard Mudgett | 221d8a5c24 | |
Jenkins2 | a40978f865 | |
Jenkins2 | df17e01274 | |
Sean Bright | f3b1b64d21 | |
Joshua Colp | 7977daa0cc | |
Richard Mudgett | 8d2c3effc2 | |
George Joseph | 690f7f7c76 | |
Sean Bright | f39af4d36d | |
Jenkins2 | 9576ae0e7e | |
Jenkins2 | fef8b6efec | |
Rodrigo Ramírez Norambuena | c98e980fff | |
Joshua Colp | 2f8e7be0d1 | |
StefanEng86 | 0adf6f3bd9 | |
Jean Aunis | da40976987 | |
Jenkins2 | 4bde3d8634 | |
George Joseph | 828a0611bc | |
Jenkins2 | 2f11ea59db | |
David J. Pryke | 94f616e5e2 | |
Joshua Colp | 839c35adab | |
Jenkins2 | 1a35e2b8c1 | |
Alexander Traud | cfc0ca1fb5 | |
Alexander Traud | 99a08eb7ab | |
alex | f1eb36ea51 | |
Richard Mudgett | 6d4b801c83 | |
Jenkins2 | b6e1b13de4 | |
Sean Bright | 5075cc8eed | |
Jenkins2 | 14109355f3 | |
George Joseph | 63900374fa | |
Jenkins2 | 77c6bab990 | |
Jenkins2 | df7211421e | |
Sean Bright | db785ddb92 | |
Sean Bright | 0688f61a01 | |
George Joseph | ed2a4ee81e | |
Jenkins2 | 1aef4fe9df | |
Richard Mudgett | 044674c0cd | |
Jenkins2 | 55af8326b5 | |
George Joseph | 5ff2d06aa6 | |
Walter Doekes | babb617f20 | |
Florian Floimair | ad606844be | |
Jenkins2 | 63211cc0ff | |
Joshua Colp | 2971c2f333 | |
Jenkins2 | 584f6abc4e | |
Jenkins2 | bab59a8190 | |
Jenkins2 | 1161fce1a1 | |
Jacek Konieczny | 2aefc6e5fe | |
Scott Griepentrog | c0d4f1880e | |
Sean Bright | e4797b2cbd | |
George Joseph | 186ef1a657 | |
Joshua Colp | 9a366d2424 | |
Jenkins2 | f6d63a2539 | |
Jenkins2 | 47e8ffe40a | |
Jenkins2 | ae5471e313 | |
Vitezslav Novy | 597d1f8951 | |
Jenkins2 | b55bab3237 | |
George Joseph | 15ddc9acb3 | |
Jenkins2 | f9b28dd990 | |
Florian Floimair | 2370469645 | |
Alexander Traud | 13aa1241c3 | |
Ben Ford | 598a18ffee | |
Richard Mudgett | 6c922b3157 | |
Sean Bright | 3f7d0b63fc | |
Walter Doekes | 45744fc53d | |
Joshua Colp | 7b240d1734 | |
Jenkins2 | 6b9d18be7a | |
George Joseph | 786c4791f9 | |
Sean Bright | 55f30c29fd | |
Sean Bright | f36db2dbdc | |
Sean Bright | 5f4863d4f9 | |
Jenkins2 | 07577fc997 | |
Jenkins2 | b0064245b3 | |
Jenkins2 | c4254e237c | |
George Joseph | 990b017668 | |
Corey Farrell | 04ee3eb774 | |
Joshua Colp | 1a022285dd | |
Jenkins2 | 844f70f301 | |
Richard Mudgett | 4aaccb7795 | |
Sean Bright | d2ace23248 | |
Jenkins2 | 2d69137bf4 | |
Jenkins2 | 378e0f7764 | |
Jenkins2 | 71cc740828 | |
Jenkins2 | 06e7d6e750 | |
Jenkins2 | a3b36b5043 | |
Andre Nazario | a45af32983 | |
Sean Bright | 9e6efcace5 | |
Sean Bright | 01b5913ce0 | |
Jenkins2 | 28857047da | |
Jenkins2 | c0251ae004 | |
Florian Floimair | bf178a0f4f | |
Matt Jordan | fff2f68616 | |
Sean Bright | 579d4593ac | |
Sean Bright | 0af145de2d | |
Sean Bright | d251a961ac | |
Jenkins2 | e8cfd5a80f | |
Richard Mudgett | 3f22b53349 | |
Sungtae Kim | b88c3a4209 | |
Jenkins2 | 71753d67f4 | |
Torrey Searle | 8e99969000 | |
Jenkins2 | 3fffa7ae86 | |
Michael Kuron | 4faf77feec | |
Sean Bright | a6251ec373 | |
George Joseph | 572b5307e0 | |
Jenkins2 | b461fe8bcd | |
Richard Mudgett | 8594f73a81 | |
Richard Mudgett | d08342b0cb | |
Jenkins2 | fa50a3def9 | |
Andrey Egorov | 54e3ac402f | |
George Joseph | b81de2c896 | |
Jenkins2 | 1bfb4047ae | |
Jenkins2 | cc4735742c | |
Jenkins2 | 1ff6082da9 | |
Richard Mudgett | bac3e8c08b | |
Richard Mudgett | 1cf2c79f37 | |
Richard Mudgett | 07d026b4cd | |
Richard Mudgett | ca261d4b70 | |
Richard Mudgett | 162f6ab845 | |
Jenkins2 | 7ad750477d | |
Scott Griepentrog | 22575b6342 | |
Joshua Colp | 0cf2e60161 | |
Jenkins2 | 9bc114ffba | |
Joshua Colp | b5eca43b29 | |
George Joseph | 363d61ef58 | |
Jenkins2 | 0493f08468 | |
Jenkins2 | f75f6c71f8 | |
Jenkins2 | 3cf30b4544 | |
Torrey Searle | 3608f96ea3 | |
Joshua Colp | 0de7312fac | |
Corey Farrell | 905c4ca3dc | |
Jenkins2 | 6dd12aaacd | |
Jenkins2 | 672af3c0ea | |
Jenkins2 | b1537ce7f6 | |
Tzafrir Cohen | 38dbc708e7 | |
Jenkins2 | bc097c4671 | |
Torrey Searle | c4f201cd73 | |
Corey Farrell | 84b6a5efd7 | |
Richard Mudgett | f9a823e9dc | |
Richard Mudgett | 631180a0c3 | |
Richard Mudgett | 7b84c6693e | |
Richard Mudgett | a32614a2a8 | |
Corey Farrell | d066758a4c | |
George Joseph | ed1bce956e | |
Niklas Larsson | 9a09f7dd5d | |
Joshua Colp | 3418d8d145 | |
Sean Bright | 4d318cac68 | |
Joshua Colp | 114602f434 | |
Corey Farrell | 0f49e6ee2e | |
George Joseph | 0d58fefa30 | |
Torrey Searle | 423d01cf16 | |
Sean Bright | c16000f201 | |
Jenkins2 | 7f142fb804 | |
Jenkins2 | 25b691f1ed | |
Joshua Colp | 8314dd95aa | |
Sergej Kasumovic | 708cdc0b8e | |
George Joseph | 9035d77296 | |
Joshua Colp | 24bb5a8908 | |
Matthew Fredrickson | 07f8e45a90 | |
Rusty Newton | 7e9aa74daa | |
Richard Mudgett | 7ff9d8785d | |
Rusty Newton | 4f93f75e7e | |
Jenkins2 | 158be3b757 | |
Jenkins2 | 084bdc79ac | |
Sean Bright | cea4ce246d | |
Jenkins2 | eb60c902e8 | |
Jenkins2 | a5e73ad1f8 | |
Benjamin Keith Ford | 9a47dd7113 | |
Holger Hans Peter Freyther | 1c3e7df26e | |
Joshua Colp | f0558d58f0 | |
Jenkins2 | 1108da4f95 | |
Jenkins2 | fa27fe9a32 | |
Jenkins2 | f1c2ba156e | |
Joshua Colp | 51761b759d | |
Torrey Searle | a4c85309f0 | |
Sergej Kasumovic | 3858d99b73 | |
Sergej Kasumovic | cdd6ca488a | |
Rusty Newton | 9f66fb7901 | |
Corey Farrell | df49ad2528 | |
Jenkins2 | e29284b131 | |
Sean Bright | 6d0ff310c6 | |
Jenkins2 | ec182b6d50 | |
Joshua Colp | 3bf42a58c4 | |
George Joseph | 4e555437dc | |
Tzafrir Cohen | 4f2f3bfebf | |
George Joseph | 32b98ad956 | |
Jenkins2 | 1498d66f69 | |
Jenkins2 | b5cd0f9ff3 | |
Jenkins2 | ccd1015bcb | |
Jenkins2 | baa51a3bb5 | |
Benjamin Keith Ford | 25e18bf514 | |
Richard Mudgett | 8a803f75a0 | |
Jenkins2 | 66eb4f34cf | |
Richard Mudgett | aa514f420b | |
Joshua Colp | 5a894ff27e | |
George Joseph | 379fe65831 | |
Jenkins2 | cad74cdd8f | |
Jenkins2 | dc1fc28a4a | |
Richard Mudgett | 22c4c1a0ba | |
George Joseph | 642c597507 | |
Jenkins2 | cf6e0b8f8b | |
Jenkins2 | aadece5664 | |
Jenkins2 | d55798fff0 | |
George Joseph | 40490768cc | |
Jenkins2 | 2bbe8cb3f5 | |
Sean Bright | 6258de458b | |
Alexander Traud | 39d2ebbf56 | |
Alexander Traud | 9f4b3b966e | |
Sean Bright | 194625c1de | |
Corey Farrell | 73520e9f58 | |
Jenkins2 | 067410a445 | |
Richard Mudgett | 0d64cbde57 | |
Richard Mudgett | 905d18e8bf | |
Jenkins2 | 35bc1ee28d | |
George Joseph | bbe68f139d | |
George Joseph | 6bd7c0f37c | |
Ivan Poddubny | 2c43ca0ac5 | |
Jenkins2 | 997c11235e | |
Joshua Colp | 0426b1d88a | |
George Joseph | eb48e99bd4 | |
Torrey Searle | 1f59d08924 | |
Torrey Searle | 9fbc34d2bd | |
Torrey Searle | 154d2914fa | |
Richard Mudgett | 764d04fa87 | |
Alexei Gradinari | 0f6a9617eb | |
Jenkins2 | bd9d72793d | |
Joshua Colp | 7b325d55e1 | |
Kevin Harwell | 1f9913f272 | |
Kevin Harwell | 67664fbf95 | |
Jenkins2 | 9554166182 | |
Jenkins2 | 2619c04f1e | |
Jenkins2 | 34b3665612 | |
Rodrigo Ramírez Norambuena | cecf6540dc | |
Alexei Gradinari | 8f356192d1 | |
Jenkins2 | 507ce0aa95 | |
George Joseph | 470bccd769 | |
Jenkins2 | 707e0e62e6 | |
Alexei Gradinari | 8e749c8f51 | |
Jenkins2 | 2c87fced4f | |
Jenkins2 | 47b9651658 | |
George Joseph | edfdb4dff5 | |
Matthew Fredrickson | 0a40073750 | |
Alexei Gradinari | a6e4899612 | |
Jenkins2 | 0b7a0681a3 | |
Jenkins2 | d88344c3d4 | |
Jan Friesse | 005a4afa6b | |
George Joseph | 7901b9853e | |
Jenkins2 | 37bc343b58 | |
Alexei Gradinari | 3b6c327c51 | |
Jenkins2 | ae6c38db98 | |
Jenkins2 | 5fa52f0b5a | |
Richard Mudgett | b9a4ab8c8c | |
Jenkins2 | 8b12ad2f61 | |
Jenkins2 | a3b142dbe0 | |
Jenkins2 | 320fb81580 | |
Joshua Colp | 4910a3bf40 | |
George Joseph | 8a858275eb | |
Jenkins2 | ffedf68136 | |
Jenkins2 | 4ade9085d5 | |
George Joseph | 3065bcd021 | |
Joshua Colp | 4ece39f476 | |
Richard Mudgett | f1a209d5ac | |
Frederic LE FOLL | dc307af7f2 | |
George Joseph | c2eea791e4 | |
George Joseph | 2dee95cc7a | |
Jenkins2 | e26d15fabb | |
Jørgen H | e16a669c70 | |
Jenkins2 | 44d4b55697 | |
George Joseph | 7dafe82751 | |
Joshua Colp | e414833f6e | |
Kevin Harwell | 6cdf3191d3 | |
George Joseph | 0bde568669 | |
Joshua Colp | bc51d4324a | |
Alexei Gradinari | 08be5e01e8 | |
Joshua Colp | d715beae16 | |
Joshua Colp | 052cd049bc | |
Jenkins2 | 1f7aedf6f7 | |
Alexei Gradinari | 59c9bbe696 | |
David M. Lee | 68de35a6a0 | |
Sean Bright | da3312457e | |
Guido Falsi | 6a64f65fe6 | |
Jenkins2 | 85dff8e26e | |
Guido Falsi | 44cee2f4a1 | |
Joshua Colp | 1f10c6b3b0 | |
Sean Bright | 590ffcaf0b | |
Alexei Gradinari | 5520b6c201 | |
Joshua Colp | 996a4791ff | |
Jenkins2 | 812f5b51cb | |
Jenkins2 | f0400ed858 | |
Sean Bright | c093bf8072 | |
Joshua Colp | 746c2c5745 | |
Jenkins2 | 95b2b542f6 | |
Joshua Colp | 3d7e9375fb | |
Kevin Harwell | adfb28882b | |
Jenkins2 | cee5b78be8 | |
Jenkins2 | 174a9b5d99 | |
Jenkins2 | 1e086cf018 | |
Jenkins2 | 3e8eea0325 | |
Jenkins2 | a76b473c49 | |
Joshua Colp | b276810aa1 | |
Jenkins2 | 3f336ca053 | |
Sean Bright | 283cc59af7 | |
Joshua Colp | dc05183f4b | |
Sean Bright | cf6cf59646 | |
Sean Bright | 70e5887906 | |
Sean Bright | 97b003f5e2 | |
George Joseph | c10341646d | |
Joshua Colp | 1e65857e6f | |
Joshua Colp | b07b216235 | |
Sean Bright | 5e9cd1f20d | |
Jenkins2 | d4ccd3a6c0 | |
Jenkins2 | 5715360ba5 | |
George Joseph | a8f8c5d857 | |
George Joseph | a2d15b93f1 | |
Jenkins2 | 558199e5dd | |
Sean Bright | 72213c98e3 | |
Jenkins2 | a3684b74e6 | |
George Joseph | 65898c3af8 | |
Joshua Colp | 1bddf1efc3 | |
Jenkins2 | a69905af69 | |
Jenkins2 | 4dfcccdb70 | |
Jenkins2 | bc4ef72394 | |
Sean Bright | 90237dca11 | |
Sean Bright | 3eb7fbba72 | |
Sean Bright | f306e451f6 | |
Sean Bright | a007e438c3 | |
Sean Bright | 971a401ce9 | |
Sean Bright | 700ef6861a | |
Joshua Colp | 6bfcb1acc7 | |
Jenkins2 | d0a1239f55 | |
Robert Mordec | f1b32de2c5 | |
Kevin Harwell | e91efef2bb | |
Sean Bright | 4479038073 | |
Jenkins2 | 7af41de364 | |
Yasin CANER | 36628cc9c4 | |
Jenkins2 | ff6d179864 | |
Jenkins2 | 7919b7287f | |
Jenkins2 | 6aa11c4b31 | |
Mark Michelson | 919ccdb9ac | |
Mark Michelson | 49c032abef | |
George Joseph | 1cc18d4025 | |
Sean Bright | c107ab4c04 | |
Ivan Poddubny | cfeae52c0f | |
Jenkins2 | 722ec0671e | |
Rodrigo Ramírez Norambuena | 5da91c65be | |
Joshua Colp | 1618203964 | |
Richard Mudgett | b67363006f | |
Jenkins2 | 6383d9214a | |
Jenkins2 | 3cfbb8b481 | |
Jenkins2 | ddbc68b68a | |
Alexei Gradinari | 6af2dd34af | |
Jenkins2 | a546e16cdb | |
Jenkins2 | a2c0d8c25d | |
Joshua Colp | 6fba0a41f0 | |
Joshua Elson | 8ec6e19c86 | |
George Joseph | d6325373ac | |
Joshua Colp | 10a49ab362 | |
Joshua Colp | 371213217c | |
George Joseph | 7d4a22bf2e | |
Vitezslav Novy | 1bcce442d0 | |
Joshua Colp | e3fa458440 | |
Joshua Colp | 4d0bc3e5fc | |
Richard Mudgett | 614eda785d | |
Jenkins2 | 250fee82aa | |
Joshua Colp | c3ed63cb2c | |
George Joseph | bed6c0d04b | |
Joshua Colp | ce1985b099 | |
Joshua Colp | 7ffd80cc04 | |
Kevin Harwell | bbe90d6aed | |
Jenkins2 | 1d44c838d8 | |
Sean Bright | 526a0081a0 | |
Jenkins2 | 08dc126b38 | |
Jenkins2 | 20cc154dd3 | |
Thierry Magnien | 23db04ed93 | |
Richard Mudgett | 02234e920c | |
Richard Mudgett | 9d5df48968 | |
George Joseph | 623832b94e | |
Jenkins2 | bf7cf10d15 | |
Jenkins2 | 9bb683242c | |
Jenkins2 | dc7166e59f | |
Jenkins2 | a439faec57 | |
Jenkins2 | e3df529db5 | |
Joshua Colp | 5e3e309c82 | |
Jenkins2 | b49e41390d | |
Jenkins2 | cf19589001 | |
George Joseph | c5b9ed20fd | |
Kevin Harwell | c853cfdc7c | |
Kevin Harwell | 4d3b4fbf22 | |
Jean Aunis | 566ad7c35d | |
George Joseph | 001dc2ade6 | |
Jenkins2 | d2bb9f21d4 | |
Joshua Colp | ae696132a2 | |
George Joseph | 95313c5f9e | |
George Joseph | f9369143db | |
Sean Bright | 1b50df78d0 | |
George Joseph | f7ca69809a | |
Joshua Colp | c09b9dba90 | |
Sean Bright | 1b88a3a4cf | |
Sean Bright | cea3742c54 | |
George Joseph | dac4442cdd | |
Richard Mudgett | 1213ac1ac5 | |
Richard Mudgett | 80fd7fd908 | |
George Joseph | 5860ad3ee8 | |
George Joseph | eb479ee6c7 | |
George Joseph | 98bb64f88a | |
George Joseph | 12affa7b6e | |
Sean Bright | 98e38daf82 | |
Richard Mudgett | 55f452884f | |
Richard Mudgett | f856cfbb51 | |
Sean Bright | dafcd97a77 | |
Joshua Colp | f9de4b5de9 | |
Joshua Colp | 69bebd8f1a | |
Joshua Colp | 441a75daea | |
Sean Bright | 9bbfa6fda1 | |
George Joseph | 4ccaffe644 | |
Sean Bright | 90c630aaa1 | |
Richard Mudgett | 9084c85cb1 | |
Sean Bright | 357d1fbdcc | |
Sean Bright | ac15ebc379 | |
Joshua Colp | 5e2a8ef94a | |
zuul | a22de46a06 | |
Joshua Colp | ec051345f2 | |
George Joseph | f882ca2572 | |
zuul | 2e9f186c17 | |
Joshua Colp | fdc63152c3 | |
Richard Mudgett | cd80af508e | |
Richard Mudgett | f8219a2e12 | |
Richard Mudgett | 19b82a8644 | |
Richard Mudgett | aecf19e7d2 | |
Richard Mudgett | 304f652cda | |
Richard Mudgett | bb8cd2add7 | |
Torrey Searle | d8967ff2c0 | |
Walter Doekes | bbbd262ec0 | |
zuul | e8514129a6 | |
zuul | b82f58d2bf | |
zuul | 293f9d39b7 | |
Joshua Colp | b3f4a6365e | |
Alexander Traud | e0e5a337fd | |
Joshua Colp | 09ec2dbbf3 | |
Joshua Colp | 0b00df55fc | |
Torrey Searle | 3e7c396a51 | |
Joshua Colp | 4b504544f6 | |
Joshua Colp | 1a35801994 | |
Joshua Colp | f80b7f7014 | |
George Joseph | 4e6e069491 | |
George Joseph | d2a33cdedc | |
Walter Doekes | ab9d2fc86d | |
Richard Mudgett | 6906765381 | |
Corey Farrell | 68bde0f07d | |
Daniel Journo | 70e5a2655d | |
Richard Mudgett | 27b556778d | |
Alexander Traud | 94bd529f9e | |
zuul | 365db26535 | |
Joshua Colp | bca9685d39 | |
George Joseph | 01c1e60a4f | |
zuul | eb03c75f58 | |
Corey Farrell | c701550803 | |
zuul | f040eb0502 | |
Sean Bright | 754e99d517 | |
George Joseph | 0667febf3d | |
Walter Doekes | 7954b39a50 | |
Sean Bright | c9648f4690 | |
Joshua Colp | 1d1309b1ed | |
Corey Farrell | 3c23ebdef4 | |
Joshua Colp | e52ced02d8 | |
Joshua Colp | 5d3db15d2e | |
George Joseph | 8e0d8cdf08 | |
zuul | 354c69699c | |
Joshua Colp | de2a202e56 | |
Alexander Traud | ef19db9261 | |
Joshua Colp | 95c66234ba | |
Joshua Colp | b0a1e40542 | |
zuul | 92517fc6a7 | |
George Joseph | a827892ff7 | |
Sean Bright | 864dda07f3 | |
Richard Mudgett | a9529cbb21 | |
Josh Roberson | bb68f57a03 | |
Sean Bright | 79a2c26c03 | |
Sean Bright | 2c28f7a922 | |
Sean Bright | 61fd70c250 | |
Sean Bright | 73bb08fd6a | |
Sean Bright | 55693383e2 | |
Sean Bright | 1966265562 | |
Sean Bright | 03b99ae3d2 | |
zuul | 39fff2ebf9 | |
Joshua Colp | ddbff36c12 | |
zuul | 30f5409eef | |
zuul | 1fccedf0fd | |
zuul | 2f2811c2dc | |
zuul | b7b171c06f | |
Sean Bright | d9d2beba1c | |
zuul | 68d523a1af | |
Kevin Harwell | 552cf009c0 | |
Kevin Harwell | f1b34e6eb4 | |
Kevin Harwell | e6aeeabddf | |
Sean Bright | 0939a19cff | |
Sean Bright | a487f6fb97 | |
Sean Bright | 90fb1fca41 | |
zuul | 4fcb8d807e | |
zuul | b79e67ba47 | |
zuul | 5f75cc8279 | |
zuul | d7c52125e9 | |
Joshua Colp | f762dfaf2a | |
Sebastian Gutierrez | e196190f11 | |
zuul | 14a9a6fc09 | |
Richard Begg | 398e5ec16c | |
zuul | d7ba743329 | |
zuul | 72ae513f15 | |
Sean Bright | 218f618095 | |
Sean Bright | 1c8b81a2a4 | |
Sean Bright | b3cc20799b | |
Joshua Elson | 91c97b5da5 | |
Sean Bright | 7f34c11b6a | |
zuul | fdea369852 | |
Aaron An | d5b480afca | |
Joshua Colp | 9613391868 | |
Sean Bright | 38cebc73a3 | |
Sean Bright | 265455bc2d | |
Joshua Colp | baeabb82ea | |
Joshua Colp | 1b828e50fe | |
Joshua Colp | 130af0ab80 | |
Joshua Colp | a2d29a7545 | |
Joshua Colp | e76947bd88 | |
Joshua Colp | 6da1b60918 | |
Robert Mordec | 76afb9e18a | |
Richard Mudgett | 60b372a883 | |
Sean Bright | 9a57b24e17 | |
Joshua Colp | 161fe61a0f | |
Sean Bright | 8721d0bf1b | |
Richard Mudgett | 792171ea9e | |
Richard Mudgett | 047fb7f11e | |
Richard Mudgett | a75f02c089 | |
Matt Jordan | 776ffd7724 | |
Richard Begg | 139bc3495f | |
Joshua Colp | 7ea7797e12 | |
George Joseph | 9b756662a8 | |
Joshua Colp | 57be9cf8f9 | |
Joshua Colp | 701b753a0b | |
zuul | 9a5c028107 | |
zuul | 05ab662f70 | |
zuul | bcc566b77e | |
Richard Mudgett | adad6020be | |
zuul | 481ed5c8f1 | |
zuul | aa5d108caa | |
Mark Michelson | 7bc69753bc | |
Sean Bright | 163e9e53dc | |
Joshua Colp | 7612601964 | |
Joshua Colp | 947f1ebf86 | |
Joshua Colp | 0f87808414 | |
Joshua Colp | 475dfdb88c | |
Joshua Colp | 47ccdd45ca | |
Joshua Colp | 45d5c04fd0 | |
Torrey Searle | 48447313b6 | |
zuul | 683321cba9 | |
Joshua Colp | 86c69ccdf7 | |
Richard Mudgett | 9fd9b39e8b | |
Richard Begg | 5389666d6f | |
Matt Jordan | 658d59c683 | |
Matt Jordan | b3c2c996f1 | |
Matt Jordan | 51985565ef | |
zuul | 071e6d971c | |
Matt Jordan | f9b791debe | |
Matt Jordan | 216e28aa95 | |
Joshua Colp | c8d1b915d7 | |
George Joseph | 6d1eb880c2 | |
George Joseph | 523de8eb8e | |
Jean Aunis | d3ef833b3b | |
Joshua Colp | 8386a38e06 | |
Daniel Journo | 67c989ce78 | |
Joshua Colp | 2a85888262 | |
Daniel Journo | bc6eeab822 | |
Joshua Colp | a860bf63e1 | |
Daniel Journo | d9972423d1 | |
Sean Bright | 77901a58ca | |
Richard Mudgett | 4271c700f7 | |
Joshua Colp | 75ebd8f0d2 | |
zuul | 65a025e9fa | |
Jørgen H | e510595c86 | |
Sean Bright | 76971d4c4a | |
zuul | 848e211e1c | |
zuul | c36cab8468 | |
zuul | 4bff6bc144 | |
zuul | 024e724aca | |
zuul | acb906fa2f | |
zuul | 59a00786e8 | |
zuul | bf3cb76452 | |
Sean Bright | fa8f6c2fc4 | |
Tzafrir Cohen | 5b34b751a0 | |
George Joseph | 8e6ecdade2 | |
Jørgen H | 0595c31da7 | |
George Joseph | c07bcca87e | |
Vitezslav Novy | d91f61f0b5 | |
George Joseph | 3d2c119778 | |
Joshua Colp | eac818801b | |
Joshua Colp | 9d3ab062cc | |
Joshua Colp | 1d5b6fe2b6 | |
Joshua Colp | d49af061bc | |
George Joseph | 9c05ddbddd | |
George Joseph | bee55aaf2c | |
Sean Bright | da0cadd100 | |
Joshua Colp | 803afec45f | |
Sean Bright | f1963c5b8d | |
Michael L. Young | 1ec796ce18 | |
zuul | debaf377be | |
zuul | 726e3945c3 | |
Joshua Colp | 5c9c097d17 | |
zuul | 89e0bf6ddd | |
Joshua Colp | e9c8514b03 | |
Sean Bright | ca6d001144 | |
Joshua Colp | c637285419 | |
zuul | 4e0dba31cf | |
zuul | 0afff51e72 | |
zuul | a3584c6834 | |
zuul | 51c9dd3d16 | |
zuul | 38b04d7dac | |
George Joseph | 61172a841b | |
Sean Bright | 0654bf637c | |
Joshua Colp | ef105410d8 | |
zuul | 5333c2782c | |
Joshua Colp | 90f6613033 | |
Sean Bright | d5522de597 | |
Sean Bright | 5eb7875243 | |
zuul | f29ea24d9f | |
Joshua Colp | d90430953c | |
Richard Mudgett | 3b606093d3 | |
Richard Mudgett | 6208962b00 | |
Richard Mudgett | 9f11da85a2 | |
zuul | 557ef67690 | |
zuul | 8287a012b6 | |
Richard Mudgett | 473813311b | |
Richard Mudgett | d58fdae811 | |
Richard Mudgett | eb9ae4f7cb | |
Richard Mudgett | 57f19d6efb | |
zuul | d7433aa796 | |
zuul | d8ae2e053b | |
Sean Bright | 47daca8a2b | |
zuul | a6db9c480e | |
Joshua Colp | 06214173a9 | |
George Joseph | c9ea98f9bf | |
Sean Bright | d8972f50f4 | |
Sean Bright | b980cae1f7 | |
Sean Bright | 011b7be62a | |
Sean Bright | b2836dde7e | |
Sean Bright | 6d5e9993b2 | |
zuul | 919fe21155 | |
Sean Bright | 5b7c6678ae | |
Richard Mudgett | 096496e13e | |
Sean Bright | 047a1e7dcc | |
Joshua Colp | 2b10ba8074 | |
Sean Bright | 2cd75fe311 | |
zuul | 73cbb915c1 | |
Joshua Colp | e910dbab90 | |
Joshua Colp | 24c2ef2418 | |
zuul | 6b62ab7776 | |
zuul | ec0aefc822 | |
Sean Bright | 9b02bbfa88 | |
Joshua Elson | 0fc27fa364 | |
Igor Goncharovsky | 7aa731c1c7 | |
George Joseph | be77b845d9 | |
Sean Bright | 73133d5354 | |
zuul | c5b48fbe77 | |
zuul | 07163005ad | |
zuul | 258b808dce | |
zuul | 4551525fa9 | |
zuul | 730bc7e972 | |
Tzafrir Cohen | 99b40e72ae | |
Sean Bright | 4c31e03e80 | |
zuul | 500b02cb82 | |
Tzafrir Cohen | e97e50b68b | |
Tzafrir Cohen | 0d555f0d81 | |
zuul | 0d6c99e715 | |
zuul | bc2104819c | |
rrittgarn | 9d34df9a5e | |
Sean Bright | f99e5f4de4 | |
zuul | e0c52c5ec2 | |
zuul | 6958241b3f | |
Sean Bright | ea8a610776 | |
zuul | c38cd504ad | |
Norbert Varga | 17030100ca | |
Joshua Colp | 18f1b52601 | |
Richard Mudgett | a46a21642e | |
Richard Mudgett | 67b21dc63a | |
Sean Bright | 8936568515 | |
Richard Mudgett | 2817f87d27 | |
George Joseph | c7fcc4468f | |
Mark Michelson | cbc23c31cf | |
Joshua Colp | 2a3df5aa22 | |
zuul | 3da771bc3a | |
Joshua Colp | 7e14e086cf | |
Joshua Colp | 7b39d6901a | |
Richard Mudgett | c384dfd6b0 | |
zuul | 431923feb6 | |
George Joseph | 95e33a1f31 | |
zuul | ba201f71af | |
zuul | b6eccdbef2 | |
zuul | 0bb5c58cba | |
Sean Bright | 70aff89e5d | |
Joshua Colp | 60f2e96d62 | |
Joshua Colp | 4e18f9afac | |
Sean Bright | 3aee199913 | |
zuul | e4f742de15 | |
Mark Michelson | 6492e91392 | |
Richard Mudgett | 43f0ff4b69 | |
Richard Mudgett | a199f94908 | |
Richard Mudgett | 6bed318a66 | |
Joshua Colp | e371e13b9e | |
Sean Bright | 339c30f2b6 | |
George Joseph | 7fd28cefdb | |
zuul | ea54c0e1fe | |
Joshua Colp | d2f30f0225 | |
zuul | fd3f69cd05 | |
zuul | 56e925f96a | |
zuul | 484e8ed5e3 | |
George Joseph | 456bc3c704 | |
George Joseph | bcb2c1f62f | |
Torrey Searle | 54b027916a | |
George Joseph | d6f67df8ce | |
George Joseph | e28d3c4917 | |
George Joseph | cb504ad6ae | |
kkm | 3c8f84786e | |
kkm | 555e8cd2ba | |
kkm | be92f10a16 | |
George Joseph | b39c04fc02 | |
George Joseph | f5b31cb2ae | |
zuul | 1a81ba335b | |
Joshua Colp | 616e98ce0a | |
Joshua Colp | aae9df0643 | |
zuul | a7e6f0dee5 | |
George Joseph | da098e2227 | |
Mark Michelson | 9e3150b98d | |
zuul | 3410000948 | |
zuul | 89e9d2cfb8 | |
Richard Mudgett | c54f9d2bf0 | |
zuul | e51193bf72 | |
George Joseph | f93861b204 | |
George Joseph | f2c1ee6d71 | |
George Joseph | 284b8b981e | |
George Joseph | 7b06dae2d8 | |
Joshua Colp | a2f0adccbd | |
Richard Mudgett | 607b3ac736 | |
Richard Mudgett | ab8cb5a7ce | |
Richard Mudgett | dcd8e4b1a0 | |
Richard Mudgett | 00a227e93d | |
Richard Mudgett | 38a2021c68 | |
Richard Mudgett | ab7a9fc5b2 | |
Richard Mudgett | 1484a991e1 | |
George Joseph | 17f4989d49 | |
Richard Mudgett | 30cb4eb57f | |
Tzafrir Cohen | cd2677f966 | |
Tzafrir Cohen | b62f84bfb1 | |
George Joseph | 48178e5918 | |
Richard Mudgett | e3dcb9ddd9 | |
Mark Michelson | 75497c33ea | |
George Joseph | 5a4cd9fc6f | |
George Joseph | 9dc30b3a6d | |
Joshua Colp | 4fc146e287 | |
George Joseph | 177e81ee47 | |
Joshua Colp | 6d23b2e360 | |
Joshua Colp | fb21931a52 | |
Richard Mudgett | a969bf3577 | |
zuul | 8c3ec5038f | |
zuul | 7f68f69732 | |
zuul | f1186fdfeb | |
Richard Mudgett | 3890337e7a | |
Richard Mudgett | fe4801c4f9 | |
Richard Mudgett | 46484b8730 | |
Richard Mudgett | 8160474d7d | |
George Joseph | c628a7acac | |
Richard Mudgett | e335b706ee | |
Kevin Harwell | 883e7fde31 | |
Richard Mudgett | 473330983b | |
zuul | b9c73de158 | |
Aaron An | 0047b1bc49 | |
George Joseph | 47474cfd54 | |
Joshua Colp | ac4d6828f5 | |
Joshua Colp | d30bef1de9 | |
Joshua Colp | bc5102adec | |
Joshua Colp | fdfa805552 | |
George Joseph | f8cd73ec3c | |
zuul | ecf49ae69a | |
Joshua Colp | 37aaaa2da2 | |
zuul | bd37196774 | |
zuul | 1fc8838883 | |
George Joseph | 6fcf248fe3 | |
George Joseph | fd5fdb4e59 | |
George Joseph | 3c48ab0532 | |
Alexander Traud | 569dac8e50 | |
Alexander Traud | 367128e70b | |
George Joseph | d7e5a747c3 | |
Joshua Colp | 34e728cfb9 | |
Joshua Elson | a398f98b08 | |
George Joseph | 0ab9d103f6 | |
Richard Mudgett | 21151408f7 | |
Richard Mudgett | 9dcf9e9cea | |
Richard Mudgett | a9e459f8ac | |
Richard Mudgett | bcdd282ada | |
Richard Mudgett | ac31233dbe | |
Richard Mudgett | 0aa5db4b38 | |
Richard Mudgett | e2fa3c7eda | |
Joshua Colp | bc6fc3ab4d | |
Joshua Colp | 2a94c2c97e | |
George Joseph | eaa05b039b | |
George Joseph | 4ea24af6c6 | |
Joshua Colp | 2b675ce122 | |
Joshua Colp | 4a8766f490 | |
zuul | c8aff2c51b | |
Martin Tomec | d13be4eff6 | |
George Joseph | 815f755155 | |
Corey Farrell | 493849dcd7 | |
David M. Lee | ab447f8a6a | |
Richard Mudgett | 35736d419a | |
Richard Mudgett | 4b285d226d | |
Richard Mudgett | 9114574188 | |
Richard Mudgett | 75a6afbec5 | |
George Joseph | 91485734a4 | |
George Joseph | cd46e86491 | |
Joshua Colp | 791c15942b | |
Joshua Colp | c7eb439953 | |
zuul | 5f9316e143 | |
zuul | 949a4a443a | |
Joshua Colp | 939010fc15 | |
Badalyan Vyacheslav | 22820e10fe | |
Badalyan Vyacheslav | 6aa2c5e5f9 | |
Badalyan Vyacheslav | b596fac838 | |
Badalyan Vyacheslav | 483ed9f1aa | |
Kevin Harwell | f9644de0bd | |
Walter Doekes | 41c6319c4e | |
Joshua Colp | 888142e891 | |
George Joseph | ebc67d3053 | |
Joshua Colp | 738203f6e6 | |
Richard Mudgett | d506874477 | |
George Joseph | 4b233675d8 | |
Joshua Colp | f08095ef18 | |
Joshua Colp | b9a79a56c7 | |
Richard Mudgett | 580f83dac7 | |
Richard Mudgett | 61ba2a014a | |
Joshua Colp | fdf0a2afb0 | |
Joshua Colp | 8d56016ae4 | |
Joshua Colp | 28b76ed667 | |
Joshua Colp | c3a509be7e | |
Joshua Colp | cd5e9a89d1 | |
Joshua Colp | bddc60df73 | |
Joshua Colp | 662a4741e2 | |
Guido Falsi | 2ceb609edb | |
Eduardo S. Libardi | 53459cdaa9 | |
Richard Mudgett | 44fe4a5769 | |
Mark Michelson | 17b0b91afa | |
zuul | eec82c6221 | |
zuul | 3d43e5ed3c | |
Tzafrir Cohen | b0c9f07f04 | |
Matt Jordan | a33ed3327a | |
Mark Michelson | 2bae7f4ed9 | |
zuul | e6ecbdf001 | |
Matt Jordan | 09c36a6535 | |
George Joseph | 29e887e9e1 | |
Tzafrir Cohen | bfb8c962c4 | |
Timo Teräs | a1fa909033 | |
Michael Kuron | 0cc8351484 | |
zuul | 5027b0d5e6 | |
gestoip2 | 8756ce64b7 | |
Michael Kuron | 8e77d6f520 | |
Timo Teräs | 86d824b7ff | |
George Joseph | 425da14927 | |
Joshua Colp | b83c9ff2ad | |
Joshua Colp | 5c9680da9d | |
Joshua Colp | 9e5f76c1e1 | |
Joshua Colp | 51d2d7c359 | |
Mark Michelson | cb624b10ae | |
George Joseph | 2a40c3a867 | |
misha | 12c4e664bc | |
Mark Michelson | bde3d022a3 | |
zuul | 3135a745e3 | |
George Joseph | d3f921ed51 | |
George Joseph | b213045fe4 | |
George Joseph | c877801e5d | |
George Joseph | 404596b790 | |
Joshua Colp | 19ca0e7fc8 | |
zuul | b745c326c2 | |
Mark Michelson | 2c031b67d3 | |
Joshua Colp | 4c1b9fbefe | |
Joshua Colp | d0a72d3779 | |
zuul | 36b59ee9c1 | |
zuul | f68790d46a | |
zuul | f4f152f35c | |
Richard Mudgett | ed0f1afc8c | |
Joshua Colp | 4c3d25875f | |
Joshua Colp | 6672fd5faa | |
Richard Mudgett | e632222bc4 | |
Joshua Colp | c4baa50f9a | |
Alexei Gradinari | cf6d13180e | |
George Joseph | c92dcc76da | |
Maciej Szmigiero | 7b96e8cc3d | |
Matt Jordan | 0790aa528a | |
Matt Jordan | 993a6f96c7 | |
Matt Jordan | d23b4af477 | |
George Joseph | 404a62eeee | |
George Joseph | 09d8febc91 | |
George Joseph | ffad2b44df | |
George Joseph | 2fefb6187f | |
zuul | a58d359701 | |
George Joseph | 5e0c224043 | |
Joshua Colp | ec17e96784 | |
Joshua Colp | d5774005fe | |
Igor Goncharovskiy | 3faca1d4ff | |
Joshua Colp | 10e64a5fb8 | |
zuul | cf08676c00 | |
Richard Mudgett | 412d43fa21 | |
Richard Mudgett | 2e7fc56d3c | |
Richard Mudgett | da68b185b3 | |
George Joseph | ee73af1d88 | |
Joshua Colp | b70eb07c53 | |
Joshua Colp | 71dc333565 | |
George Joseph | ccc8a37584 | |
George Joseph | 07e7ac5119 | |
George Joseph | 06045fc29e | |
George Joseph | 9e13c3e2a1 | |
George Joseph | 6b5a7ced13 | |
George Joseph | 6be5d8de0d | |
George Joseph | 1df434e2b4 | |
George Joseph | 58c88cfbaa | |
Joshua Colp | 44fd077739 | |
George Joseph | a562fbe618 | |
George Joseph | dfcb2b6c24 | |
Sebastian Gutierrez | 7fd5031c1c | |
Mark Michelson | e043d1a55c | |
Mark Michelson | 44f7e25239 | |
Mark Michelson | 2e3a354575 | |
Mark Michelson | 5c10091f3d | |
zuul | 3870e8d76d | |
zuul | 7477c95749 | |
Joshua Colp | 093eadf46a | |
Joshua Colp | 0310845acd | |
Joshua Colp | 77e56bc2e0 | |
Joshua Colp | dc04c1725f | |
Joshua Colp | 58df0ccc0e | |
Joshua Colp | 768bac97cc | |
Joshua Colp | 87c884965c | |
Joshua Colp | 222cee2410 | |
Joshua Colp | 814d8a99d1 | |
Mark Michelson | 9231a56cf3 | |
Kevin Harwell | a3614d75f6 | |
zuul | 64e71fcf68 | |
Alexander Anikin | a9ac1f5de4 | |
Alexander Anikin | 0ee249075a | |
zuul | f02647ebbd | |
zuul | 3a4baca35a | |
Michael Kuron | 59c23e1768 | |
Matt Jordan | e79acaeb75 | |
Matt Jordan | 7a83196985 | |
Matt Jordan | e7dc536b7a | |
Matt Jordan | 7c824b955d | |
Matt Jordan | fd6af2dee8 | |
Kevin Harwell | bd4d7d8ad0 | |
Kevin Harwell | cb30963d22 | |
Joshua Colp | 3a1f9c5dab | |
Alexander Anikin | eceab15f33 | |
George Joseph | a9992da4aa | |
Joshua Colp | 57a9797e0a | |
Sebastian Gutierrez | 714412f6c4 | |
Alexander Traud | 0cf1778eed | |
Joshua Colp | d971647949 | |
Joshua Colp | 18974927e5 | |
Joshua Colp | 49fe410cc0 | |
Joshua Colp | 3f3f6d091e | |
zuul | e59a775fb4 | |
zuul | ba72bfb76c | |
zuul | c674415ad8 | |
Joshua Colp | 820ab579e2 | |
Richard Mudgett | afecb2cfc0 | |
zuul | ed89866e76 | |
Joshua Colp | 5f188bb7a8 | |
Tzafrir Cohen | 94c9496ed5 | |
Tzafrir Cohen | c1c9487375 | |
Kevin Harwell | 50fa868ab8 | |
Grachev Sergey | b3f10b7b94 | |
Matt Jordan | 29692d4aa4 | |
George Joseph | a36a7d0cf4 | |
Etienne Lessard | 42bd70b29f | |
Joshua Colp | 55435e211b | |
zuul | 86720ec0aa | |
Corey Farrell | 30b1bc77d2 | |
Corey Farrell | b96f18560b | |
George Joseph | 6b1c55dc9b | |
zuul | a9977758c9 | |
Richard Mudgett | d7f457e4c1 | |
Rusty Newton | 87903a6848 | |
Joshua Colp | 6012db0e05 | |
Corey Farrell | f373de3020 | |
Joshua Colp | e8a3af2629 | |
zuul | 66044dd606 | |
zuul | 12ee2fd58d | |
Mark Michelson | 7d7b52c434 | |
zuul | f20b5ef36e | |
Joshua Colp | 9c761b8f45 | |
George Joseph | 61a5c3460e | |
Joshua Colp | 675c71ae8c | |
Joshua Colp | 46863c9d9a | |
Joshua Colp | dc13003dd9 | |
Joshua Colp | 14496ce1e5 | |
Joshua Colp | e0bc17edff | |
Joshua Colp | f534f67f52 | |
Mark Michelson | 226a7e36c5 | |
George Joseph | 3a2092b722 | |
Joshua Colp | 2bd8af6d0b | |
zuul | 2203a50042 | |
Joshua Colp | 5677e18631 | |
Joshua Colp | 578e34b445 | |
Pascal Cadotte Michaud | 640203802e | |
George Joseph | 9b3557e054 | |
Joshua Colp | bb982480d8 | |
Mark Michelson | eff97808fb | |
snuffy | c2036c827c | |
zuul | 87483f3545 | |
zuul | a2af51fab1 | |
zuul | ad2dde8106 | |
Joshua Colp | 1bde92f68c | |
Michael Walton | 3c62b60e56 | |
Mark Michelson | 012fda29d2 | |
zuul | 6adc293b14 | |
zuul | 0384bae66f | |
Alexei Gradinari | 6d462b9eaf | |
Joshua Colp | c25163993d | |
Alexander Traud | 662b560c35 | |
zuul | 633c9062ab | |
zuul | 1a8a15e931 | |
Mark Michelson | df75b647da | |
Tzafrir Cohen | 6f5880913f | |
George Joseph | 546ec4b038 | |
Moises Silva | 644fad7477 | |
Matt Jordan | 42cfdcd1b7 | |
George Joseph | 74d9385273 | |
Michael Kuron | f1fd873df0 | |
zuul | d1d446b237 | |
Leandro Dardini | 0306869399 | |
zuul | 3bdd7c0e38 | |
zuul | 8d12d6021b | |
zuul | 05c6ab0d8f | |
zuul | 4d1cb6a46d | |
zuul | 0fa6036b97 | |
zuul | 1b9ef66c50 | |
Corey Farrell | ce4cfd2eca | |
Richard Mudgett | 3c54328c57 | |
Richard Mudgett | 7f8f125738 | |
Richard Mudgett | 9621c9bcbc | |
Richard Mudgett | e4bb9f9a37 | |
Richard Mudgett | bcac905bd3 | |
Richard Mudgett | ee4ae2b648 | |
George Joseph | 90ae4e4337 | |
zuul | 3633c7926c | |
Torrey Searle | 86c15db6a1 | |
Joshua Colp | 2fbc0531e0 | |
zuul | 2971c1b4eb | |
Rodrigo Ramírez Norambuena | 29b7a5b00f | |
zuul | 39dbe7aba4 | |
Joshua Colp | 64b43d4474 | |
zuul | 5e19935395 | |
George Joseph | f919edc4e2 | |
Alexander Traud | a859bcb49c | |
zuul | da78600feb | |
Badalyan Vyacheslav | a884b26392 | |
zuul | d75beaa04a | |
Torrey Searle | 349c34f72a | |
zuul | f2e392a3d2 | |
Badalyan Vyacheslav | 9da3489d24 | |
Badalyan Vyacheslav | fa2885b3ff | |
zuul | f809850aa0 | |
George Joseph | e6b0053d75 | |
George Joseph | 0dc0356e39 | |
Corey Farrell | dd873bcada | |
George Joseph | 86550f9c17 | |
Alexander Traud | f166681c12 | |
Michael Walton | 430f6e5388 | |
Joshua Colp | b0b106a473 | |
Kevin Harwell | 2449d2877c | |
George Joseph | f0a2e628d6 | |
George Joseph | 1e8b3d00ce | |
George Joseph | 269ee510c9 | |
George Joseph | 0674f319b9 | |
zuul | 1497e29c4f | |
George Joseph | 5258c067ae | |
George Joseph | a5af8709c8 | |
George Joseph | 44c0c51cf1 | |
George Joseph | 0ab443007b | |
zuul | 9b0e6f9c86 | |
zuul | 52e3c6c2e0 | |
Aaron An | a0a17a8c6f | |
Alexander Traud | 0502675e5c | |
George Joseph | 0056bcaebd | |
zuul | 7cce1a7817 | |
Joshua Colp | d7587a67eb | |
zuul | 94b705f9fb | |
Joshua Colp | 323aff3a09 | |
zuul | 81bb672861 | |
Joshua Colp | 10c180760c | |
zuul | 5cb3fc5d67 | |
Tzafrir Cohen | 42cc267016 | |
Joshua Colp | f16ab19292 | |
zuul | a6b05e6371 | |
Corey Farrell | c9ce299b64 | |
Joshua Colp | 77fafd1534 | |
zuul | 177557bc00 | |
Corey Farrell | 610eb4c189 | |
Tzafrir Cohen | 36092ee3a0 | |
Walter Doekes | 9372d32100 | |
zuul | 34461b89ac | |
zuul | 0bd4398b8a | |
zuul | 9383beb073 | |
Walter Doekes | e96448e991 | |
Timo Teräs | 01884a7af6 | |
Richard Mudgett | cdbad152c7 | |
Joshua Colp | 449719be00 | |
George Joseph | 4d64b176eb | |
zuul | 11d05fc369 | |
zuul | 1ddaa825ec | |
zuul | f0baa12538 | |
zuul | 139d86c8ab | |
Joshua Colp | 1cac856e17 | |
zuul | a5f7b07579 | |
Joshua Colp | 9df4056d70 | |
Steve Davies | 98e42cc662 | |
zuul | efba4a7b9c | |
zuul | 3d7cbaa675 | |
Richard Mudgett | 0388882cdb | |
zuul | c833c1fda1 | |
Walter Doekes | da8ba990d1 | |
Richard Mudgett | e9ddab4685 | |
Richard Mudgett | 30af92e78d | |
Walter Doekes | 7ed5dc2c58 | |
Joshua Colp | 7580a736bb | |
Joshua Colp | efcfc4c1ee | |
Mark Michelson | f1ffc22933 | |
zuul | fdb29f1b4e | |
zuul | 02ff55626e | |
zuul | 7180de3f16 | |
Richard Mudgett | 23d6ec7417 | |
Joshua Colp | 5f19657710 | |
zuul | 249a733c17 | |
zuul | 8925367291 | |
zuul | 4b66c74c94 | |
Joshua Colp | 89f7cd8182 | |
Tzafrir Cohen | 206d4f57dc | |
zuul | 6d56b87642 | |
zuul | 9e874d2cc8 | |
zuul | 6de392eb17 | |
zuul | 5a63bfc8fc | |
zuul | 52335c3fe7 | |
zuul | e3f549c2f6 | |
zuul | c8c83bcb37 | |
zuul | 899385d47b | |
George Joseph | 117a7741c8 | |
zuul | 1b752842b9 | |
Walter Doekes | d04ae7d1d8 | |
zuul | 9470848fba | |
Matt Jordan | df3d0188e4 | |
Matt Jordan | a64063cc97 | |
Richard Mudgett | 03fc438f6e | |
Richard Mudgett | b5e753227d | |
Richard Mudgett | 9b7501b6ad | |
Richard Mudgett | 3314e1cec2 | |
Richard Mudgett | 6372f40ba0 | |
Richard Mudgett | 11eb1afd2d | |
Richard Mudgett | 0f9b144c1a | |
Richard Mudgett | 8d1c535bd6 | |
Alexei Gradinari | 9bca895469 | |
Mark Michelson | 63feffa126 | |
zuul | 1bd571ef75 | |
zuul | 84b7bda139 | |
Michael Kuron | a002a4d2db | |
Alexei Gradinari | 308a65fe6c | |
zuul | 27989f22f3 | |
zuul | cfab4d4d41 | |
zuul | fcba60749c | |
zuul | 0542afa180 | |
chrisderock | 2fa168348e | |
Etienne Lessard | 27951792c4 | |
Joshua Colp | 1b91adf7a1 | |
zuul | ba3984753a | |
George Joseph | fb82fdb013 | |
Alexander Traud | 847bd47ff0 | |
Alexander Traud | b59d3b48d0 | |
Joshua Colp | f69f5cd3c4 | |
Richard Mudgett | 5cd583d7a2 | |
Richard Mudgett | 8b4b2500ee | |
Richard Mudgett | e8d4f40022 | |
Richard Mudgett | 35cf6c7702 | |
Richard Mudgett | 50b2aa506f | |
Richard Mudgett | 038cbc0215 | |
Richard Mudgett | 88e9d05ef7 | |
Joshua Colp | 4e5b930d3f | |
George Joseph | c9e83f6d0b | |
Corey Farrell | cb8fd610e2 | |
Mark Michelson | b8b5d52b5e | |
Joshua Colp | b9897e237e | |
Joshua Colp | d5d7cbfcfb | |
zuul | 5bae285de4 | |
Mark Michelson | c16ef02318 | |
zuul | e0c807c33d | |
zuul | 903a8f17cf | |
David M. Lee | e54dcf4fd5 | |
Alexander Traud | be38c95def | |
zuul | 8778e22b15 | |
zuul | fcc49d760f | |
zuul | 6b3e96e479 | |
zuul | d4a4a23818 | |
Mark Michelson | 0cdeb2bfb0 | |
zuul | 16cb686fac | |
zuul | f46f88157e | |
zuul | d49043c092 | |
Alexei Gradinari | b494b9f88c | |
zuul | 504da21d47 | |
zuul | 6bea2a55e8 | |
Alexander Traud | a628009eb9 | |
Alexander Traud | b1fe070d0b | |
Joshua Colp | 5d4ce33e8c | |
Kevin Harwell | ff2378c735 | |
Kevin Harwell | 43f400ef95 | |
George Joseph | 4c1ae07d51 | |
Kevin Harwell | cab6975b02 | |
Joshua Colp | 43254c2db7 | |
Joshua Colp | e3d72c7aee | |
Joshua Colp | e1ef9e697e | |
Joshua Colp | f5165fd0aa | |
Joshua Colp | 9426627452 | |
Joshua Colp | 02f5d30739 | |
Joshua Colp | 1ae280ed6c | |
Joshua Colp | 02f2937f48 | |
Joshua Colp | 3a22938d12 | |
Alexander Traud | 2381ddde63 | |
Alexander Traud | 6500f5e138 | |
Alexander Traud | 21e9c69e56 | |
Alexander Traud | c9a97398f7 | |
Alexander Traud | 60275359bc | |
Alexander Traud | 0d479232eb | |
Alexander Traud | cbc1b2d020 | |
Alexander Traud | 5f33e99534 | |
Alexander Traud | 231ea0350d | |
Alexander Traud | 23eb065121 | |
Alexander Traud | 0b675a208b | |
Richard Mudgett | 1cd12d73a6 | |
George Joseph | 329507fe20 | |
Torrey Searle | 6f448f32fe | |
Alexander Traud | 56e0aed177 | |
George Joseph | 2edcfcf1eb | |
zuul | 455bc78901 | |
Joshua Colp | 5c24677127 | |
Joshua Colp | d85310e3e8 | |
zuul | 7ed9bc8169 | |
zuul | 643aac69a7 | |
zuul | 050b90769a | |
zuul | 6c4c31456f | |
Corey Farrell | f4e28b3a09 | |
Joshua Colp | 8cc34aa480 | |
Joshua Colp | 10fa55576d | |
Joshua Colp | 952edd30d1 | |
Joshua Colp | b4828cb125 | |
Joshua Colp | 274794eb1e | |
Joshua Colp | ccd73a2dbd | |
zuul | ebdc880eb3 | |
zuul | 9a55d541aa | |
Richard Mudgett | a8d9a53bae | |
Richard Mudgett | 74a91b9ee5 | |
Richard Mudgett | 29beb2890c | |
Corey Farrell | 9b822293bd | |
Alexei Gradinari | 403c794684 | |
cjack | 93332cb1d0 | |
Joshua Colp | 2735ec899a | |
Matt Jordan | f59bd47ed3 | |
Matt Jordan | 4facaac408 | |
Matt Jordan | 232d4fe24f | |
Matt Jordan | 63c0b2f7c9 | |
Matt Jordan | 0422667d6c | |
Matt Jordan | f9e734974b | |
Matt Jordan | 781bb410d0 | |
zuul | 2dc23297a9 | |
zuul | 8633259301 | |
zuul | 03b7d04298 | |
zuul | 3ea349e2bd | |
Matt Jordan | cfd6852d39 | |
zuul | b3586baeea | |
zuul | ce7357237c | |
zuul | 0383500afb | |
zuul | ee150b697f | |
zuul | 4a05856f40 | |
Corey Farrell | cb043249b6 | |
George Joseph | 4d5e96ab53 | |
George Joseph | 143df33110 | |
Richard Mudgett | 1fc5c90014 | |
Richard Mudgett | 73052e5732 | |
Richard Mudgett | 9d4bd3d763 | |
Richard Mudgett | e1248c3075 | |
Richard Mudgett | 6e40334d89 | |
Matt Jordan | a3c5488ff4 | |
zuul | 1a3cc84371 | |
Kevin Harwell | 5913929d31 | |
zuul | 134db75e67 | |
zuul | dbc78c9fab | |
Alexei Gradinari | 1589452fdc | |
Joshua Colp | c864ebab52 | |
Kevin Harwell | f6ec94cca6 | |
Matt Jordan | 5f815f9dba | |
Mark Michelson | a119bab6a6 | |
zuul | 5a5b949333 | |
Joshua Colp | 926c1c72bd | |
Alexei Gradinari | a06a1af0eb | |
Joshua Colp | bf21359292 | |
Joshua Colp | 485fd27f7c | |
Corey Farrell | 805f105f88 | |
Alexei Gradinari | ea71bd6e3e | |
Joshua Colp | 9dc8cfabd5 | |
zuul | 9db6cdba1a | |
zuul | bc43220fc6 | |
Joshua Colp | 2a0f42c494 | |
George Joseph | ad3e65433c | |
Joshua Colp | 85f9642420 | |
Joshua Colp | f1b0286aa4 | |
Kevin Harwell | efc4034d72 | |
Joshua Colp | 9d59de79c9 | |
Mark Michelson | f6821fbaec | |
Joshua Colp | 829b4ba8b3 | |
Joshua Colp | 102d28c11a | |
Alexander Traud | b78d10a2df | |
George Joseph | 1f95c011c7 | |
zuul | 104b17eea9 | |
zuul | 1e64f4a295 | |
zuul | b8fb794e53 | |
David M. Lee | df42f64d62 | |
George Joseph | 56a07fbab9 | |
zuul | 948a9b615f | |
zuul | f2a93dc9f2 | |
zuul | c2aed1c6e0 | |
Joshua Colp | 7f9369c1b6 | |
Joshua Colp | cc5660406c | |
Joshua Colp | cc825e54b0 | |
Joshua Colp | 323042d99d | |
zuul | d5e380b8fb | |
Joshua Colp | 78de6eabbc | |
Corey Farrell | 57e9c66819 | |
Richard Mudgett | 873fc0fda5 | |
zuul | 7883f128d5 | |
Alexei Gradinari | f00525a6f6 | |
George Joseph | 972cee2e4c | |
David M. Lee | 8902a51d59 | |
Kevin Harwell | 852e763571 | |
Richard Mudgett | e8c34680ca | |
Richard Mudgett | c1f240b818 | |
Richard Mudgett | 003a52fd62 | |
Richard Mudgett | 4c0a0cbe02 | |
Joshua Colp | 87433c2566 | |
Richard Mudgett | 159e437e5a | |
zuul | 7ec9819403 | |
zuul | 17e0e058ca | |
Mark Michelson | eda95236d1 | |
zuul | 8d6a7b89bd | |
Alexander Traud | 66c9dfb272 | |
Joshua Colp | 0de05c2938 | |
zuul | e3fbb4e099 | |
Richard Mudgett | 33716106e0 | |
zuul | 80a9899100 | |
zuul | 2b001fd6aa | |
zuul | 00ed6b74ea | |
zuul | ffbaefa48f | |
Joshua Colp | 0b8448a74b | |
George Joseph | 52ab0bf258 | |
Joshua Colp | efebb1b9e0 | |
zuul | dec1e31f45 | |
Alexei Gradinari | 5997ec7c9e | |
zuul | d4242d6250 | |
zuul | 7dacb14c03 | |
zuul | 290269bb23 | |
zuul | 7ce180a754 | |
Corey Farrell | 7fdf7c3d4c | |
Richard Mudgett | dcb8aa8c1c | |
Richard Mudgett | fa91cf3eec | |
Richard Mudgett | 2e1bdc3775 | |
Richard Mudgett | 628e8c91d5 | |
Richard Mudgett | 676aeede36 | |
Richard Mudgett | 652130feb2 | |
Richard Mudgett | 851b1c3a17 | |
Alexander Traud | 021d4892cd | |
Corey Farrell | c8e41d14a1 | |
Alexander Traud | e404f51b42 | |
Alexander Traud | 5f24874ebb | |
zuul | 962c7ef5d9 | |
Corey Farrell | 76d4983c15 | |
zuul | 4b2031226d | |
Alexei Gradinari | cb58f853e1 | |
Mark Michelson | 28501051b4 | |
zuul | 714ceb88df | |
Joshua Colp | 8892029a03 | |
zuul | b4976b9038 | |
zuul | 64a09963be | |
zuul | b12aee68be | |
zuul | 3c1a40eb8d | |
Joshua Colp | 43b5f8d57b | |
zuul | 56668e3e9c | |
zuul | 91148fdd4f | |
Corey Farrell | a17b071e36 | |
zuul | 436fc7ca2b | |
zuul | 8c3d301dc6 | |
Joshua Colp | ca98b6cea2 | |
Joshua Colp | 355fc081e6 | |
Kevin Harwell | 8cef8f35e7 | |
Richard Mudgett | afbd10b0c5 | |
Corey Farrell | 2be13d62fd | |
Alexander Traud | 332beb27d8 | |
Corey Farrell | 672a64bda3 | |
Richard Mudgett | fea201f7e6 | |
Richard Mudgett | 02877b4b4f | |
Alexander Traud | 148cd1b319 | |
zuul | 8cea01ab1b | |
zuul | 08f5f10f8f | |
zuul | f5aa9f8034 | |
zuul | 1cfe9514bd | |
zuul | afd7aba585 | |
zuul | daec52a8e6 | |
zuul | f0eb5a8b8b | |
zuul | f3b7339260 | |
Richard Mudgett | 97b4c7a5b4 | |
Alexander Traud | 3be6fa1e4b | |
Richard Mudgett | 5ee205d8bb | |
Alexander Traud | f5e9872016 | |
Joshua Colp | 17efed6cf7 | |
Corey Farrell | 06ba533bc7 | |
zuul | 8019f32129 | |
zuul | f3fd648be6 | |
Corey Farrell | 9d4e664f62 | |
Scott Griepentrog | e26bd15e7a | |
Joshua Colp | 77b0145a25 | |
Alexei Gradinari | b4a9fa2c9e | |
Matt Jordan | 1dfd3fc995 | |
Matt Jordan | 9dd0aeeb44 | |
Matt Jordan | 1ec4f8dd00 | |
Alexei Gradinari | 2c16a81dd5 | |
Alexander Traud | a1bd57884d | |
Joshua Colp | ac6824e4c3 | |
Joshua Colp | 12b754ca36 | |
Joshua Colp | 65d0c0beb1 | |
Joshua Colp | 643086dbc9 | |
Joshua Colp | 9e72f29ddd | |
Joshua Colp | d8b8dca04b | |
Joshua Colp | 7ed680cf92 | |
Richard Mudgett | 640fbbbe28 | |
Richard Mudgett | 359134c8d3 | |
Richard Mudgett | 5fabcf2ca1 | |
Richard Mudgett | 38a4e983dc | |
Richard Mudgett | 1952434df5 | |
Richard Mudgett | 28928ba5c4 | |
George Joseph | 43a78100c0 | |
Joshua Colp | 77c49ac1a1 | |
Matt Jordan | 99eff80e76 | |
Matt Jordan | 78960975f2 | |
zuul | 999ce35bae | |
zuul | 272c02d4ed | |
Joshua Colp | 289d301c9f | |
Joshua Colp | c49b07aa63 | |
George Joseph | d07c8a0504 | |
George Joseph | f3d236ca7f | |
Matt Jordan | 9d5b0934d9 | |
Joshua Colp | 1dfc286418 | |
Alexander Traud | 5f0a098243 | |
zuul | 73e2186195 | |
zuul | 5a568df73d | |
zuul | b044195e31 | |
Joshua Colp | 5a73c115c8 | |
zuul | 43612a84c8 | |
zuul | 08a4699367 | |
Corey Farrell | 3d904659ec | |
zuul | dab39a6813 | |
George Joseph | 48db4c2159 | |
George Joseph | bc69b03316 | |
Mark Michelson | 1b79e2deff | |
Alexander Traud | e30602587c | |
George Joseph | 77da168e58 | |
Alexei Gradinari | b3c787d1dd | |
Torrey Searle | dfcd466bf0 | |
zuul | d155d82747 | |
Joshua Colp | 6a2deb4d21 | |
zuul | 5280813846 | |
Richard Mudgett | c982da0641 | |
Joshua Colp | d19169396c | |
George Joseph | 6a568bcc66 | |
Alexander Traud | ef97911a1c | |
Scott Griepentrog | 69d58a1e37 | |
Alexander Traud | cbfa9f771e | |
zuul | b0e71c6571 | |
zuul | 9856b4afe0 | |
Joshua Colp | ba0d9e7f7a | |
Richard Mudgett | c1512f4108 | |
Alexei Gradinari | 5134a8043a | |
Joshua Colp | fe8aab6959 | |
zuul | db91fb74db | |
Mark Michelson | cfebe3b94a | |
Alexander Traud | 76516bd79d | |
zuul | 4d52b4c3e5 | |
Vasil Kolev | 89cc86fc38 | |
Richard Mudgett | d53a36ff33 | |
Richard Mudgett | 03953d8034 | |
zuul | 97a8576d16 | |
Richard Mudgett | 32ab98116e | |
Joshua Colp | e80354caab | |
Joshua Colp | 9c2664d624 | |
Richard Mudgett | 0429c53368 | |
Richard Mudgett | 5823f279f3 | |
Richard Mudgett | dde58df318 | |
Alexander Traud | ca38a3cbb4 | |
Joshua Colp | c2f68787a3 | |
Joshua Colp | ff018e28a0 | |
Joshua Colp | ecc186a4cc | |
Joshua Colp | e842a99e7c | |
zuul | 1ac47c5aae | |
zuul | 2204a6e6f1 | |
zuul | 935d53fa08 | |
zuul | 51ff79bdeb | |
zuul | 7e2dbcd771 | |
zuul | 54be8fd149 | |
Joshua Colp | caf6cccc5c | |
zuul | 8438315428 | |
Mark Michelson | 715ef071a1 | |
George Joseph | a99ddc6a0d | |
zuul | bd3b6e9f19 | |
zuul | c09af61c76 | |
Joshua Colp | 9d8a174092 | |
Joshua Colp | f834852137 | |
Matt Jordan | eabb398d71 | |
Alexander Traud | 0d84421f93 | |
zuul | c9b873add8 | |
Timo Teräs | 9c5a0b814b | |
Richard Mudgett | 9c35f34301 | |
Richard Mudgett | 557333ea4c | |
Richard Mudgett | 110d772467 | |
Richard Mudgett | 610eee2a36 | |
Richard Mudgett | 26e3492246 | |
Richard Mudgett | ceb1007ed7 | |
Richard Mudgett | 27bafc3a8b | |
Richard Mudgett | 16b08444da | |
Richard Mudgett | 993b769524 | |
zuul | ae8f6e996e | |
Joshua Colp | 321a9b128f | |
Alexander Traud | c6ee4a0f44 | |
Alexander Traud | d38b8e6399 | |
zuul | 93237209eb | |
George Joseph | c27c232057 | |
Joshua Colp | cda3385409 | |
Joshua Colp | 4665aa89e3 | |
zuul | 49b1be8952 | |
zuul | c4771ffb7c | |
Richard Mudgett | e2132dd358 | |
Alexei Gradinari | 2de58c6d01 | |
Richard Mudgett | b2ce0e354b | |
zuul | acb614d5ae | |
Joshua Colp | e3c9ad6382 | |
zuul | eff382c72b | |
zuul | 856d6e34c3 | |
George Joseph | fe305ccf01 | |
George Joseph | e8abfdcdc5 | |
Rusty Newton | 37d039fdf3 | |
Joshua Colp | dc230f3b8f | |
Richard Mudgett | 03d5b3ce5c | |
Alexei Gradinari | 859bbec09b | |
Alexei Gradinari | 230686f4ec | |
Alexei Gradinari | 04c12561a7 | |
Corey Farrell | a42bea3314 | |
zuul | 87fe6b1622 | |
zuul | 06c6478ad8 | |
zuul | 373e68539b | |
zuul | 80d1fc859e | |
Tzafrir Cohen | a32616d60c | |
Ivan Poddubny | 9ddaab789e | |
Richard Mudgett | 9453d1187a | |
Alexei Gradinari | cd89501d48 | |
Mark Michelson | c0b190dd9a | |
Joshua Colp | ddcf983e39 | |
Joshua Colp | 3296d2d194 | |
Joshua Colp | f09f923514 | |
Joshua Colp | 4e4a991d90 | |
snuffy | 39fedfa423 | |
Joshua Colp | 7d986ff3f6 | |
Joshua Colp | 1b7ba9bb00 | |
Joshua Colp | 4a04a5a3ec | |
Joshua Colp | 811a54836d | |
Joshua Colp | cceccd68ad | |
Joshua Colp | 4509aa890f | |
Joshua Colp | 480b8cda30 | |
George Joseph | 935e0496c4 | |
George Joseph | 77e8ec162b | |
George Joseph | 3f6ef63099 | |
zuul | bcb133ce93 | |
George Joseph | b6f9392a12 | |
Matt Jordan | 361a16f316 | |
Matt Jordan | f91a7dc993 | |
zuul | 12db14b9b1 | |
Sean Bright | 9de5cd209e | |
zuul | e6a946400f | |
zuul | c735ce1a05 | |
Alexei Gradinari | 524a302974 | |
Matt Jordan | 89ae4466ea | |
zuul | 1705c5d2ba | |
Joshua Colp | dd9900849b | |
zuul | 8143a00c69 | |
zuul | 515f49747c | |
zuul | bf3c7a891a | |
zuul | 25db2a8bf5 | |
Joshua Colp | a83bf5dabd | |
Tzafrir Cohen | a73d79c22f | |
Tzafrir Cohen | 1c56de9453 | |
Tzafrir Cohen | d7af591c59 | |
Tzafrir Cohen | 9b7db18fc1 | |
Tzafrir Cohen | eec539a46e | |
zuul | 95285c6d23 | |
Mark Michelson | 02d30e171e | |
George Joseph | e2df15bae9 | |
Sebastian Damm | a94a12bbf7 | |
Alexei Gradinari | 36d66a23e0 | |
Matt Jordan | 37214b0bdf | |
zuul | a01ce2b889 | |
Kevin Harwell | 49b25a0956 | |
Kevin Harwell | 1b5c91b7be | |
Kevin Harwell | 10de553c9d | |
Kevin Harwell | 1a833b9739 | |
Kevin Harwell | 4752ef02e0 | |
zuul | 81773ceb9c | |
Joshua Colp | 2d4c818ac1 | |
zuul | 577d65b701 | |
Joshua Colp | 7561ffa64a | |
Kevin Harwell | 4d063814ba | |
George Joseph | fb6227a372 | |
zuul | 0f54a5ee98 | |
zuul | 5261151286 | |
Jaco Kroon | 2db17a793c | |
zuul | 60cc53ecb3 | |
George Joseph | 2a7130b8b0 | |
Alexei Gradinari | 72eb7c8301 | |
Chris Trobridge | dd00c71aae | |
Alexei Gradinari | e6eb17efd9 | |
zuul | 3fd8113386 | |
Joshua Colp | fa11f4c920 | |
Alexei Gradinari | 9c2032240e | |
zuul | 168a7b3dd8 | |
Alexei Gradinari | fe38d21c2a | |
zuul | 8aef2c4156 | |
Joshua Colp | 3fa70be0f5 | |
zuul | 2970f72dff | |
Alexei Gradinari | 7a14e669f0 | |
Alexei Gradinari | 06d4ac0355 | |
Alexei Gradinari | 2d17fe06c5 | |
Joshua Colp | 3677409116 | |
Diederik de Groot | a2f19d82a8 | |
George Joseph | f39089f17c | |
Andrew Nagy | 8028fc7585 | |
Alexei Gradinari | 3cb8934de0 | |
zuul | 69ced86c6c | |
Joshua Colp | d65023b5a5 | |
zuul | 3e5666eadc | |
zuul | 72ee8c1bf9 | |
Joshua Colp | 1ce30f1fb5 | |
zuul | cc8a50631e | |
zuul | 2ae097f144 | |
zuul | 28e6978e82 | |
Richard Mudgett | 7992923c70 | |
Richard Mudgett | 5dc0e082b2 | |
Richard Mudgett | f9e416f053 | |
Richard Mudgett | b1b2019046 | |
Richard Mudgett | b7f07fdff5 | |
George Joseph | 719ece5659 | |
Joshua Colp | 86fb803257 | |
George Joseph | 38bed4515d | |
Joshua Colp | a16aa467f5 | |
Joshua Colp | e0e03cd2c8 | |
Mark Michelson | 677d5b5151 | |
Alexei Gradinari | df3639700a | |
Joshua Colp | e5c5fac8f1 | |
zuul | b4ddcc0e94 | |
Joshua Colp | 949bf6b282 | |
Joshua Colp | 6959f5484b | |
Joshua Colp | 9d8f59aaf2 | |
Joshua Colp | 4efc6b4315 | |
George Joseph | b38f1146e5 | |
Joshua Colp | 83dadc4683 | |
kkm | 29bab0d1a4 | |
zuul | 6c28e8c827 | |
Kevin Harwell | c345e530f4 | |
zuul | a8f8e3c340 | |
DarkS | c0688a6398 | |
George Joseph | eb7c581806 | |
zuul | 13ee3402ed | |
zuul | 84d2e4fb42 | |
zuul | 77ae5cd7fd | |
zuul | 09f8f8daa1 | |
Richard Mudgett | ebf0724a83 | |
Richard Mudgett | ba63aa7c9e | |
Richard Mudgett | d5ee6acf28 | |
Richard Mudgett | 7303e3dc96 | |
Richard Mudgett | 1e93f3d723 | |
Richard Mudgett | 5e388d4188 | |
Mark Michelson | 068ae54c76 | |
Leif Madsen | 6aeefa89bc | |
Joshua Colp | 6112a94d03 | |
Diederik de Groot | e750ea9b5b | |
Richard Mudgett | a036c35903 | |
Richard Mudgett | 9942d50aa5 | |
Joshua Colp | b1b3460783 | |
George Joseph | 516c626a7d | |
Joshua Colp | 08f6408dc6 | |
Joshua Colp | ded3794fc6 | |
Mark Michelson | efae187217 | |
Joshua Colp | 9a22ef81af | |
Joshua Colp | 47adff8977 | |
Joshua Colp | a048a0ffbd | |
Joshua Colp | c922846c6d | |
Mark Michelson | f436b9ab11 | |
Joshua Colp | 49bfdc9ac0 | |
Richard Mudgett | f4693d1897 | |
Jaco Kroon | 22335fe18a | |
Joshua Colp | c7732a2600 | |
ibercom | 3b9d8b60b2 | |
Richard Mudgett | 724acb6ce7 | |
Joshua Colp | 56c8182913 | |
Mark Michelson | 5f78801859 | |
George Joseph | 9740277713 | |
Joshua Colp | 13cb5ea73f | |
Joshua Colp | 120493d5c0 | |
Joshua Colp | 6c9c714bb6 | |
Mark Michelson | 7fb3724a77 | |
Mark Michelson | 707fd4dcd0 | |
Mark Michelson | 0b4bb19e0b | |
Richard Mudgett | f6e080c6a4 | |
Joshua Colp | 1f853df29c | |
George Joseph | cf15a2f2d3 | |
Joshua Colp | 4ab4fc9141 | |
Joshua Colp | daa086fae4 | |
zuul | 70c788ec5e | |
Alexei Gradinari | f896136460 | |
Alexei Gradinari | 70b7673f09 | |
zuul | cf1c0277b5 | |
zuul | 600148b5b0 | |
Joshua Colp | 5eec2386cf | |
zuul | df40173a00 | |
Alexei Gradinari | 64ecd41c8f | |
Jaco Kroon | 3f6c4667b8 | |
zuul | f2edcfe62e | |
George Joseph | fe7e48db03 | |
zuul | 736a2c303d | |
George Joseph | 0c414eaf35 | |
George Joseph | 772ff3048f | |
Alexei Gradinari | fd601f26f7 | |
zuul | e7e16b7465 | |
Alexei Gradinari | 5f768d2a9c | |
Richard Mudgett | 82638fb0c7 | |
Alexei Gradinari | bc320df173 | |
Richard Mudgett | 2ef8a954b3 | |
George Joseph | d312fdeb1b | |
Joshua Colp | 901e8d78c4 | |
Joshua Colp | 8207372e66 | |
Jacek Konieczny | 0735a4d6d7 | |
Joshua Colp | 587a97a515 | |
Mark Michelson | c61dca6419 | |
Joshua Colp | edf2ce2eff | |
Joshua Colp | 05a9b3eaf7 | |
George Joseph | 50b0922a22 | |
Joshua Colp | cb56ef8069 | |
Joshua Colp | 2b84290386 | |
Joshua Colp | bb7214180c | |
George Joseph | f6f4cf459f | |
Joshua Colp | cac6453e9a | |
Joshua Colp | 5de637df4d | |
George Joseph | fe448ac8a7 | |
Joshua Colp | 3c91a76a3b | |
Joshua Colp | 072bf78ba3 | |
George Joseph | 9d4318f798 | |
George Joseph | 566601837e | |
zuul | e9db9ebeae | |
zuul | e8c6cf8947 | |
Joshua Colp | b602886c6b | |
Joshua Colp | cb9b7f6b1b | |
Joshua Colp | 2b5dfe668a | |
Joshua Colp | 6ad59a69f8 | |
zuul | 61d03df059 | |
zuul | 6be8b89b2f | |
George Joseph | 964f54bd5d | |
Richard Mudgett | 5f73c2ef0a | |
Richard Mudgett | 74d63f56ee | |
Richard Mudgett | cf49b44090 | |
Richard Mudgett | 7f53f1d89e | |
Richard Mudgett | ecf4102d02 | |
Richard Mudgett | a179aba65e | |
George Joseph | 16c7d8e74a | |
George Joseph | d8f0bc3572 | |
Joshua Colp | e1fdb0a6da | |
George Joseph | 8dc8d6ceb8 | |
George Joseph | c7eb18d865 | |
zuul | e595f02f83 | |
George Joseph | 1583559a06 | |
Joshua Colp | 7b7e3909e4 | |
Joshua Colp | e0a916d6f5 | |
Jacek Konieczny | 0cfab30b28 | |
zuul | 3528a9a42e | |
Jacek Konieczny | 6a9c18fb59 | |
George Joseph | 1bce690ccb | |
Joshua Colp | c88c09a920 | |
zuul | 3974bf1ef0 | |
Richard Mudgett | 50f90d4099 | |
George Joseph | 5aa5c49413 | |
Richard Mudgett | 05fc3a96d1 | |
Richard Mudgett | a4189763ab | |
Philip Correia | 6f95b5eda1 | |
zuul | 01150597f6 | |
zuul | f3b154d7d2 | |
zuul | 096e7a88ce | |
zuul | 36d016b1ab | |
zuul | 8271a06dde | |
Alexander Traud | 81ce60f6d4 | |
zuul | d3af5320d4 | |
Gianluca Merlo | c6e4c48e67 | |
Mark Michelson | 59c8e189fd | |
Walter Doekes | ff3eebf454 | |
Walter Doekes | 82e55e4883 | |
George Joseph | d963a33749 | |
Francesco Castellano | c5170677e7 | |
zuul | 7d6782cc0f | |
George Joseph | 51deadee38 | |
Gianluca Merlo | aa2fcd244e | |
Kevin Harwell | 6a40520fe9 | |
Kevin Harwell | 9444ddadf8 | |
zuul | 65ad761130 | |
zuul | d444a2713f | |
Rodrigo Ramírez Norambuena | 88240f98d9 | |
Rodrigo Ramírez Norambuena | efcf9a96db | |
Sergio Medina Toledo | 2b1b8e382a | |
zuul | aeef52db9f | |
Richard Mudgett | de04308ae4 | |
Richard Mudgett | 5f6627a8a4 | |
Richard Mudgett | 32bd7a64f9 | |
Richard Mudgett | 43556b800b | |
Richard Mudgett | 38c1cdab2c | |
Richard Mudgett | e4ad55c888 | |
Richard Mudgett | 98d5669c28 | |
Richard Mudgett | 9cb8f73226 | |
Richard Mudgett | c5c7f48a15 | |
Richard Mudgett | f959d84dfd | |
Richard Mudgett | 5f3225ddcc | |
Richard Mudgett | 7a74971771 | |
zuul | 9157014c04 | |
zuul | c9cd4b9aa7 | |
zuul | 739c28357e | |
Andrew Nagy | d2c09ed73b | |
zuul | 6186306852 | |
zuul | 40df2805f7 | |
zuul | f4785cd2bc | |
Richard Mudgett | b2d2906445 | |
zuul | dcebcaa3da | |
Joshua Colp | 6d309cd2cd | |
Richard Mudgett | 9ae21b510f | |
Richard Mudgett | 56bcb97a3c | |
Joshua Colp | 677a65fcbb | |
George Joseph | 32f0a3d52a | |
George Joseph | 38499e7125 | |
Walter Doekes | 336cae73cc | |
Joshua Colp | ed34bbdf9b | |
zuul | 9263ea0b13 | |
zuul | f74ac9d5b6 | |
George Joseph | 875d5e9872 | |
George Joseph | 530cff5f5f | |
George Joseph | 3c8076a83b | |
zuul | 6e58f83d8d | |
Joshua Colp | cb70ed7214 | |
zuul | 772036b525 | |
George Joseph | 27f32cd0a6 | |
zuul | 9b0a96b947 | |
George Joseph | 7cf7b0a4f9 | |
zuul | d2be16472e | |
George Joseph | 53f57001f2 | |
zuul | 039ea76a8a | |
Kevin Harwell | 40d9e9e238 | |
Kevin Harwell | ff3da61c35 | |
zuul | 9e896540c8 | |
Joshua Colp | 26b8f2692e | |
Joshua Colp | 2dc79e13be | |
Joshua Colp | 86124f63c8 | |
Joshua Colp | 3b6b164f2e | |
zuul | d6e274b97d | |
Joshua Colp | f4670c6a76 | |
George Joseph | 86d6e44cc1 | |
George Joseph | 6f0d7ce9db | |
Scott Griepentrog | 1ea7a5a774 | |
Scott Griepentrog | 3c37c7071f | |
Richard Mudgett | 9633be9d25 | |
Richard Mudgett | 4165ea7778 | |
Richard Mudgett | 41f4af4ce5 | |
Richard Mudgett | 4c5998ff55 | |
George Joseph | b59956a875 | |
zuul | d1495bc0eb | |
zuul | 84d1036205 | |
zuul | 5393a4963a | |
zuul | dbf52dd7d7 | |
zuul | 4c85d7b612 | |
zuul | 94f3198c90 | |
zuul | 414e297648 | |
Richard Mudgett | 18a323e542 | |
Richard Mudgett | 263a39f2cc | |
Richard Mudgett | 221422be50 | |
Richard Mudgett | 0a5bc64491 | |
Richard Mudgett | 513638a5f4 | |
Richard Mudgett | 7c4495cb70 | |
George Joseph | 48d713a832 | |
George Joseph | ee947d4a7a | |
zuul | d35c494df1 | |
George Joseph | 6e70e8ccdb | |
Leif Madsen | 4417f64d83 | |
zuul | 0985f44363 | |
Joshua Colp | f159f6ec07 | |
Richard Mudgett | e7a6abbbd3 | |
Richard Mudgett | 6656afffa0 | |
Christof Lauber | ea9deff996 | |
zuul | aa637f0a91 | |
Joshua Colp | 56561c386a | |
George Joseph | d2a1457e0b | |
zuul | b4fdf93d06 | |
zuul | 25b1613b52 | |
George Joseph | 6b921f706d | |
zuul | 37c273f0de | |
Alexei Gradinari | f295088764 | |
Mark Michelson | f1f79812c1 | |
Rodrigo Ramírez Norambuena | 79dc5e2f00 | |
Richard Mudgett | 5a3a857dd6 | |
George Joseph | 87ab65c557 | |
George Joseph | c0f3062031 | |
George Joseph | 5e848dae7b | |
George Joseph | 34c64707d1 | |
Joshua Colp | 9c28acd9db | |
Mark Michelson | ebe167f792 | |
Joshua Colp | 1c4f2a920d | |
Joshua Colp | 1cddd954f9 | |
zuul | 953ba9da88 | |
Corey Farrell | ac00c6bc2d | |
George Joseph | b1b797e0e7 | |
zuul | 8c15f309c2 | |
Badalyan Vyacheslav | 20e9792fbc | |
Sean Bright | 962a9d61f8 | |
Joshua Colp | 249d80f120 | |
George Joseph | c1bf014ea0 | |
Joshua Colp | 0e25e4a924 | |
Badalyan Vyacheslav | bd07b6f0dd | |
Badalyan Vyacheslav | e9e896abd1 | |
Corey Farrell | 93e8ed0154 | |
Joshua Colp | a7c8d4cd6b | |
George Joseph | 2451d4e455 | |
Joshua Colp | 78fa818c1b | |
Richard Mudgett | 6f978fbfe5 | |
George Joseph | ec8fd6714d | |
Joshua Colp | 1fca224533 | |
Joshua Colp | c9e1c203b5 | |
Joshua Colp | 2177dbea50 | |
Mark Michelson | 6a799cd78f | |
George Joseph | 953d1cc11a | |
Mark Michelson | c5e7d5c105 | |
Joshua Colp | 6cac364284 | |
Joshua Colp | 014fc9ef65 | |
Mark Michelson | 23829b3253 | |
Sean Bright | 4e8e6d3922 | |
Kevin Harwell | f55f79edba | |
Kevin Harwell | 4834d460d6 | |
Richard Mudgett | c6b1b2b1c8 | |
Joshua Colp | f8acadde2c | |
Richard Mudgett | 3c81a052c8 | |
George Joseph | 2a6ee8caeb | |
Joshua Colp | 73159cb45f | |
Mark Michelson | 389a94eda2 | |
Mark Michelson | 32fc784284 | |
Karsten Wemheuer | 0405c31756 | |
Joshua Colp | f6551868be | |
George Joseph | 8804d0973c | |
George Joseph | 109b0aff6b | |
George Joseph | a85fab7c44 | |
StefanEng86 | aa9348ab9a | |
Mark Michelson | 65bd4fcc3f | |
Joshua Colp | 9711ad0de6 | |
Mark Michelson | afdf8e5d5c | |
Richard Mudgett | 2a9e623ff9 | |
Richard Mudgett | ed3c9c1512 | |
Richard Mudgett | 1d0abf86e7 | |
Richard Mudgett | f0d40afa69 | |
Richard Mudgett | 3e51e5c7fd | |
George Joseph | 9da18af992 | |
George Joseph | aee8448bc2 | |
Joshua Colp | 4cc784eb04 | |
Joshua Colp | f22074e5d9 | |
Mark Michelson | 4a3275abb9 | |
Matt Jordan | c9a0f4f8ff | |
Rusty Newton | b2c8a99f9e | |
Mark Michelson | 8261bda1bf | |
Corey Farrell | a6823bb0c4 | |
Joshua Colp | fcb6c1737d | |
Mark Michelson | 1003c2eb05 | |
Mark Michelson | eedd77fda0 | |
Richard Mudgett | 1c95b211a0 | |
Matt Jordan | a0d3932e2a | |
Matt Jordan | c3f4afe40c | |
Corey Farrell | 6ff945ab87 | |
Richard Mudgett | 02035212de | |
Diederik de Groot | c68c66c61f | |
Richard Mudgett | f87c3275cc | |
Mark Michelson | 09a6354f9e | |
Joshua Colp | a2928b6093 | |
Joshua Colp | de3d988b9e | |
Joshua Colp | d1113e0f56 | |
Matt Jordan | 46b2de55f9 | |
George Joseph | 137fe5ae01 | |
Matt Jordan | 113adf336a | |
Joshua Colp | b5c13c1545 | |
Richard Mudgett | 0ab89182d9 | |
Richard Mudgett | a2a8ea3330 | |
Richard Mudgett | d604a9afc8 | |
Joshua Colp | 80e901396e | |
Joshua Colp | e7b83fa76e | |
George Joseph | a0c79f3a4f | |
Mark Michelson | e50c6f32cc | |
Rusty Newton | 018ccf680b | |
Joshua Colp | 33af878768 | |
Daniel Journo | 5644bca9f9 | |
Joshua Colp | d690b88a1e | |
Joshua Colp | aaa52a2a05 | |
Joshua Colp | 0aa47e11e1 | |
Corey Farrell | 3f5f30cf82 | |
Kevin Harwell | 660fedecb7 | |
Richard Mudgett | 9cda1de34d | |
Richard Mudgett | a79af2b312 | |
Kevin Harwell | 83feb7db3b | |
Mark Michelson | 935d641f3b | |
Joshua Colp | 236896f391 | |
Daniel Journo | 46f21df302 | |
Mark Michelson | caba57631d | |
Joshua Colp | 32b29d7b02 | |
Mark Michelson | f18ad96b77 | |
Sean Bright | e7cfda0b38 | |
Richard Mudgett | 5586abc957 | |
Joshua Colp | 092c0db493 | |
Joshua Colp | b91dfcd1fb | |
Joshua Colp | b41f69dcbc | |
Joshua Colp | 56d1162dc2 | |
Joshua Colp | 25c0ed2f64 | |
Joshua Colp | 3bf8c5140d | |
Joshua Colp | 569595c899 | |
Mark Michelson | 4cd58c3b20 | |
Joshua Colp | ace79fadad | |
George Joseph | 219c204a41 | |
Mark Michelson | f9a275fef4 | |
Joshua Colp | 77a46ac84d | |
Joshua Colp | 8ec4d20fa9 | |
Daniel Journo | 22801a06ee | |
Joshua Colp | ddc9c1f720 | |
Joshua Colp | 85fdbcefae | |
Joshua Colp | 672920d0cf | |
Joshua Colp | 85145be4b8 | |
Kevin Harwell | 1600ebca7d | |
Corey Farrell | 0fc3dad965 | |
Corey Farrell | f34dd10495 | |
Corey Farrell | 1d3a1167fc | |
Joshua Colp | 3a160cdbf6 | |
George Joseph | 4b10fc9173 | |
Corey Farrell | 79b4309881 | |
Corey Farrell | a5406b1f9e | |
Joshua Colp | 573b37c658 | |
Richard Mudgett | cf8e7a580b | |
Richard Mudgett | 4276f185f0 | |
Richard Mudgett | f02ac1b7f9 | |
Richard Mudgett | ec1f1c6742 | |
Richard Mudgett | d8bc3e0c8b | |
Richard Mudgett | 2c4b7502de | |
Richard Mudgett | 3b33ac7a46 | |
Richard Mudgett | 0fc32c4dd3 | |
Richard Mudgett | 0e0c24ad78 | |
Diederik de Groot | 0f79c8839b | |
Diederik de Groot | 4285dee778 | |
Joshua Colp | 01e5894388 | |
Mark Michelson | 96094feab6 | |
Corey Farrell | 52e9de0016 | |
Joshua Colp | eb3d083551 | |
Joshua Colp | b1ee692568 | |
Joshua Colp | 2e61c3d97b | |
Aaron An | 86eae38d7e | |
George Joseph | 881dc862e0 | |
Matt Jordan | 9016e51c03 | |
George Joseph | d228b62fd4 | |
Corey Farrell | e462f0063f | |
Corey Farrell | ab191d124c | |
Corey Farrell | 09a9b93896 | |
Corey Farrell | c608274a39 | |
Martin Tomec | 338a8ffed6 | |
Rodrigo Ramírez Norambuena | e13719bff1 | |
Joshua Colp | 937ba51659 | |
George Joseph | 4ec85a9f07 | |
Corey Farrell | 7fdcfd7724 | |
Richard Mudgett | 80a8b2a4cd | |
Matt Jordan | f42036bf6b | |
Matt Jordan | 4e1d9c4a20 | |
Matt Jordan | 1087b0c6ed | |
Matt Jordan | 1f23e65b89 | |
Corey Farrell | 2ffade4574 | |
Matt Jordan | bc7c882326 | |
Matt Jordan | 5a75caa9e6 | |
George Joseph | 20b8474f20 | |
Joshua Colp | a68467d293 | |
Joshua Colp | 47d508e911 | |
Matt Jordan | e4a566918a | |
Joshua Colp | a280400758 | |
George Joseph | 3a1c4885be | |
Dade Brandon | 136c537695 | |
Matt Jordan | 5e99ba393e | |
Matt Jordan | 1a1f64f36f | |
Joshua Colp | efa0868295 | |
Matt Jordan | 84b1475674 | |
Corey Farrell | f2efbb5d75 | |
Matt Jordan | dde7f3c1c4 | |
Dade Brandon | be050f2638 | |
Richard Mudgett | b3024cad10 | |
Matt Jordan | 0a9941de9d | |
Kevin Harwell | 1e24a0ca8a | |
Matt Jordan | 15641cb6cd | |
Dade Brandon | 1d3d20dd68 | |
Dade Brandon | 965a0eee46 | |
Matt Jordan | 7ec9b5b98f | |
Joshua Colp | e652a786d6 | |
Mark Michelson | 03dab00d1d | |
Carlos Oliva | ae428d8460 | |
Joshua Colp | 62e49a7e20 | |
Joshua Colp | 59d5bb0613 | |
Joshua Colp | 51a2cab780 | |
Joshua Colp | 0cefcabd58 | |
Joshua Colp | 158a0a5422 | |
Joshua Colp | a9d6fc571d | |
Mark Michelson | 53bd5a539a | |
Mark Michelson | da17dc4d75 | |
Matt Jordan | 280adca0a5 | |
server-pandora | 24ae124e4f | |
Richard Mudgett | 36097a185d | |
Matt Jordan | 77ac79b175 | |
Matt Jordan | 94f9927784 | |
George Joseph | 5b867fa904 | |
Jonathan Rose | 14b41115e3 | |
Joshua Colp | c344fb02f4 | |
Joshua Colp | 2be0d49042 | |
pchero | fe8011cc50 | |
tcambron | cd119ed4a2 | |
Corey Farrell | ddf4dddf4f | |
Filip Jenicek | 142d4fefb8 | |
George Joseph | 21962dad93 | |
Eugene Voityuk | 28d9243079 | |
Joshua Colp | 246e513110 | |
Joshua Colp | 35cc249732 | |
George Joseph | e03582a1c2 | |
Alexander Traud | 876600ce6e | |
Alexander Traud | 69e3d40ad7 | |
Richard Mudgett | 2b992014dc | |
Joshua Colp | eb9a353490 | |
Matt Jordan | 529535f0c2 | |
George Joseph | 450579e908 | |
Matt Jordan | 9c0aaf0609 | |
Matt Jordan | ffb0643467 | |
Matt Jordan | e8f78f87a8 | |
Alexander Traud | 5a18193dc0 | |
Alexander Traud | 3e2178c05e | |
Jonathan Rose | 072d94183c | |
Joshua Colp | cfb146e055 | |
Joshua Colp | 59134eb7cb | |
Joshua Colp | 1d5ddb4b99 | |
George Joseph | 9184fbeb34 | |
Joshua Colp | 8ab0c2107a | |
Joshua Colp | 3b1452b542 | |
Joshua Colp | 53d4f77064 | |
George Joseph | ed9134282e | |
Jonathan Rose | eadad24b59 | |
Richard Mudgett | bb0b60619d | |
Richard Mudgett | e7c88e11aa | |
Richard Mudgett | 4aed349a7b | |
Richard Mudgett | 6d9156d10f | |
Alexander Traud | b76c196e13 | |
Matt Jordan | 6614babea2 | |
Niklas Larsson | 3fcf160fae | |
Matt Jordan | 762dc9c89d | |
Matt Jordan | 5d80a6e714 | |
Kevin Harwell | 45efbf8503 | |
Walter Doekes | b2787876d6 | |
Matt Jordan | e96604c902 | |
David M. Lee | 59881fbb99 | |
Corey Farrell | b75f587d15 | |
Joshua Colp | 3f85a1be5a | |
Mark Michelson | ba7665b070 | |
Richard Mudgett | fc45f4040d | |
Matt Jordan | 7e4d948397 | |
Matt Jordan | 25332911fe | |
Matt Jordan | 6a7cb60a47 | |
Matt Jordan | 16437667eb | |
Matt Jordan | 001b7f482b | |
Matt Jordan | 0f88f909ec | |
Matt Jordan | 4875e5ac32 | |
Joshua Colp | fa969196b3 | |
Joshua Colp | 6dd8b67216 | |
Matt Jordan | aa8f1b04b6 | |
Matt Jordan | 2b94d9a10d | |
Matt Jordan | af288b2d96 | |
Mark Michelson | 6fcd361540 | |
Joshua Colp | bdc7845a43 | |
Matt Jordan | d27aac0a9d | |
Matt Jordan | 90d9a70789 | |
Matt Jordan | 75097a0955 | |
Matt Jordan | 8f71263e72 | |
Alexander Traud | 0b508789ab | |
Alexander Traud | 1aa552b2a2 | |
Matt Jordan | 3354b325c6 | |
Richard Mudgett | d4a522d587 | |
Richard Mudgett | e44ab3816c | |
tcambron | 1e0040b88f | |
Matt Jordan | ccf80f95a2 | |
Matt Jordan | e3cb27d341 | |
Matt Jordan | 6c10d30d0e | |
Joshua Colp | 0843e6043e | |
Matt Jordan | f62b642fe3 | |
Mark Michelson | fdd2afcd16 | |
Alec Davis | 7debb986a5 | |
Joshua Colp | afd9a89e5a | |
Richard Mudgett | c0f2f8de45 | |
Mark Michelson | 4f43b85c92 | |
Alexander Traud | d8d3991390 | |
Mark Michelson | 367972e42d | |
Joshua Colp | cd51b0aeac | |
Matt Jordan | db93c357ce | |
Mark Michelson | 2f9cb7d62b | |
Joshua Colp | 7ae22c2690 | |
Joshua Colp | 4e5bf12b33 | |
Steve Davies | 07583c2888 | |
Joshua Colp | b818d70533 | |
Matt Jordan | dac0bf063c | |
Matt Jordan | e07f5a6133 | |
Matt Jordan | e098fb1813 | |
Matt Jordan | bd157b9ca8 | |
Alexander Traud | 4bf84459c7 | |
Joshua Colp | 18e61a6442 | |
Joshua Colp | 3e0f161761 | |
Joshua Colp | 07189ee2c9 | |
Alexander Traud | 1bff400df7 | |
Alexander Traud | f3ac4d8090 | |
Walter Doekes | 6d1bdb9d3b | |
Walter Doekes | 8410336681 | |
Walter Doekes | 0d425f2eb4 | |
Alexander Traud | 33752e0837 | |
Jonathan Rose | 6ff48319d9 | |
Matt Jordan | 506aea26e6 | |
Corey Farrell | d098d00424 | |
Matt Jordan | afec1b1b64 | |
Matt Jordan | 1cf699c848 | |
Matt Jordan | 562556c79f | |
Matt Jordan | 715f770c9f | |
Matt Jordan | f0f190af08 | |
Corey Farrell | 0393bd6bed | |
Mark Michelson | 6fbffe42e1 | |
Joshua Colp | 0071a993f0 | |
Matt Jordan | 11e54b1932 | |
Matt Jordan | 118d628e08 | |
Joshua Colp | 9a021a42ad | |
Matt Jordan | b640858e9b | |
Joshua Colp | ba566b0f0f | |
Alexander Traud | 1256aedf66 | |
Joshua Colp | 31f13a1e93 | |
Matt Jordan | 7d1a2b0839 | |
Matt Jordan | 6875944771 | |
Matt Jordan | 131c3c181d | |
Matt Jordan | c7651da5d1 | |
Matt Jordan | 90f0ed5475 | |
Matt Jordan | d9be087da4 | |
Matt Jordan | 4d576fe6d9 | |
George Joseph | 5f593e7c38 | |
George Joseph | 162acd45f7 | |
Joshua Colp | d818e6edce | |
Kevin Harwell | c58091737d | |
Joshua Colp | 8315479929 | |
Joshua Colp | 84f1068bab | |
Joshua Colp | 53ed5a0675 | |
Mark Michelson | ebe69dee0d | |
Mark Michelson | 3b19efefef | |
Mark Michelson | 0a346f095f | |
Mark Michelson | ad39508095 | |
Mark Michelson | 067f408760 | |
Mark Michelson | 1bcc592765 | |
Mark Michelson | b3cc2bd7df | |
Richard Mudgett | c8c65dfa41 | |
Richard Mudgett | b271d4a28a | |
Joshua Colp | 04030b0dd0 | |
Joshua Colp | f2725c8b77 | |
Alexander Traud | 84ff075d41 | |
Alexander Traud | 869ef2a8ee | |
Matt Jordan | 9fd2adc204 | |
Matt Jordan | 72cbb6df55 | |
Joshua Colp | 7c560a9a31 | |
Matt Jordan | 9fc9777fa3 | |
Matt Jordan | 25ec63ab0c | |
Joshua Colp | 5db999d813 | |
Joshua Colp | ebdfd38511 | |
Richard Mudgett | dc6ec661b3 | |
Matt Jordan | f8707ae9a5 | |
Ivan Poddubny | 486b172b50 | |
Richard Mudgett | e14023ca35 | |
Richard Mudgett | a99e821520 | |
Richard Mudgett | 8d31d2526b | |
Joshua Colp | 1c799b1f1e | |
Richard Mudgett | 3329c714f7 | |
StefanEng86 | a1435aa3fa | |
Ivan Poddubny | 3357678b94 | |
Matt Jordan | b714b2152d | |
Florian Sauerteig | f939e2bd48 | |
Richard Mudgett | 426263a64d | |
Matt Jordan | 41b0e516e2 | |
Matt Jordan | 50fa9ff997 | |
Debian Amtelco | 8f777ab584 | |
Ivan Poddubny | 74635b5638 | |
Joshua Colp | b39e92f036 | |
Joshua Colp | d979834c85 | |
Joshua Colp | 45a7c9078d | |
Joshua Colp | 17262a8c5c | |
Joshua Colp | fd0186dc85 | |
Joshua Colp | 64701bdb01 | |
Richard Mudgett | 40c69e78f5 | |
Richard Mudgett | dfeb513e85 | |
Richard Mudgett | ced0a2d71b | |
Richard Mudgett | cc279eea11 | |
Richard Mudgett | 9af3b613f6 | |
Joshua Colp | 56ed7b9dd5 | |
Richard Mudgett | ddebb217f0 | |
Matt Jordan | 30df76b5c8 | |
Matt Jordan | e00e3f2030 | |
Kevin Harwell | d30939b6e8 | |
Richard Mudgett | 5f19c9bade | |
Richard Mudgett | 3a85764039 | |
Richard Mudgett | 028033e5a8 | |
Matt Jordan | f6062ac616 | |
Matt Jordan | 9425eaa96d | |
Matt Jordan | 549d726065 | |
Matt Jordan | 5efb96520b | |
Joshua Colp | 771757e338 | |
Joshua Colp | bc856bda64 | |
Matt Jordan | 9e7c554089 | |
Joshua Colp | 7a5ce4ad5a | |
Matt Jordan | 90165e306d | |
Scott Griepentrog | e1223ff6db | |
Richard Mudgett | 6b1e7583c1 | |
Richard Mudgett | 6bf304bf25 | |
Richard Mudgett | e36b5f1e8e | |
Richard Mudgett | 747bfac895 | |
Richard Mudgett | 14481d9aa0 | |
Richard Mudgett | bbeda190c3 | |
Joshua Colp | 41f856e5a2 | |
Mark Michelson | f050fa76eb | |
Mark Michelson | 629458d349 | |
Matt Jordan | 0d95610ae2 | |
Richard Mudgett | 5f15cd93f0 | |
Matt Jordan | b50e372394 | |
Matt Jordan | 3502c0431d | |
Matt Jordan | 4c9f613309 | |
Elazar Broad | ec514ad64d | |
Matt Jordan | 0ce661f0c0 | |
Joshua Colp | a45abbf3ce | |
Kevin Harwell | aeddee39fb | |
Matt Jordan | 960f00939a | |
Matt Jordan | efbd0f5a97 | |
Matt Jordan | c7beb33ebb | |
Matt Jordan | 16f1598b31 | |
Joshua Colp | c02f07b8c4 | |
Joshua Colp | 578429a54d | |
Joshua Colp | 2bd27d1222 | |
Scott Griepentrog | c94f46080f | |
Walter Doekes | b59c4d82b5 | |
Richard Mudgett | 4cc59533b9 | |
Kevin Harwell | 4fb95bbc4e | |
Scott Griepentrog | fb6b5c684b | |
Joshua Colp | a665b31281 | |
Kevin Harwell | 6409e7b11a | |
Mark Michelson | fe5077b1f8 | |
Alexander Traud | b88c54fa4b | |
Mark Michelson | 5c713fdf18 | |
Matt Jordan | 4fd0af298e | |
Rodrigo Ramírez Norambuena | 865377fc38 | |
Richard Mudgett | e75aff53e6 | |
Richard Mudgett | 4d91d01df1 | |
Richard Mudgett | f36a9d1221 | |
Richard Mudgett | 94582f8fab | |
Richard Mudgett | 8b3ed52239 | |
Richard Mudgett | 4329bd1e4c | |
Richard Mudgett | a456a20ecf | |
Richard Mudgett | f58f4c6e27 | |
Mark Michelson | 9d1f176e29 | |
Matt Jordan | 1dd0e220bf | |
Joshua Colp | 16fa1cbb6c | |
Matt Jordan | 4eedd9ef9d | |
Matt Jordan | 49b13d5624 | |
Alexander Anikin | 71408df2b8 | |
Scott Griepentrog | f72f9ceefc | |
Joshua Colp | 34ad877bac | |
Jonathan Rose | fbf720db91 | |
Matt Jordan | 777f9adfc7 | |
David M. Lee | 695f26cbb7 | |
Guido Falsi | 4ed9c9a280 | |
Joshua Colp | 9c5a0035d9 | |
Joshua Colp | 5469caa9dd | |
Alexander Anikin | 480c443e26 | |
Matt Jordan | c3e6debdb9 | |
Matt Jordan | 24be90c6d7 | |
Matt Jordan | 319fe8224f | |
Joshua Colp | 6a4d2b2e58 | |
Joshua Colp | 3070dd0660 | |
Matt Jordan | 78d0b9d97e | |
David M. Lee | 61c6c6aa6c | |
Mark Michelson | ac62928d6b | |
Scott Griepentrog | 6002472a62 | |
Martin Tomec | d32e516c7c | |
Joshua Colp | 2733638d0d | |
Mark Michelson | ad9cb6c2ce | |
Joshua Colp | cc1363209e | |
Mark Michelson | d58c8d73af | |
Joshua Colp | 4e3b3f25f6 | |
Mark Michelson | 03fe79f29e | |
Matt Jordan | 45b06a648b | |
Matt Jordan | 545795ae0d | |
Joshua Colp | a676ba2aad | |
Joshua Colp | 1b1561f4c8 | |
Joshua Colp | 85e1cb51b2 | |
Mark Michelson | b5801fe42c | |
Joshua Colp | c2df44ad3e | |
Mark Michelson | fdf096fff1 | |
Joshua Colp | c2c7319082 | |
Scott Griepentrog | 6862c2a167 | |
Scott Griepentrog | f1cd636658 | |
Joshua Colp | c01111223f | |
Joshua Colp | 2a4eee0cd9 | |
Mark Michelson | d238cf33a9 | |
Mark Michelson | d0f911f326 | |
Joshua Colp | 5f781cb799 | |
Joshua Colp | 7c4d0c3506 | |
Joshua Colp | 6c2dab1e88 | |
Matt Jordan | bc6fe07f5c | |
Joshua Colp | e0cf42f61e | |
Mark Michelson | 53c3dab8ed | |
Richard Mudgett | 0582776f7f | |
Scott Griepentrog | 504213f542 | |
Matt Jordan | 94d93e4d40 | |
Matt Jordan | 1a5e087ecf | |
Richard Mudgett | 77518d5434 | |
Richard Mudgett | c61547fee6 | |
Richard Mudgett | bd867cd078 | |
Richard Mudgett | e5f5b9f384 | |
Richard Mudgett | ded51e3d77 | |
Scott Griepentrog | ab373f2cef | |
Mark Michelson | b719f56c72 | |
Richard Mudgett | cea5dc7b8a | |
Richard Mudgett | b3a56bee83 | |
Mark Michelson | 8f3117ebaf | |
Kevin Harwell | 25af2d71c8 | |
Joshua Colp | e18c300550 | |
Joshua Colp | 0bc6fe6f7d | |
Mark Michelson | d37488c7c3 | |
Joshua Colp | f8df3589cd | |
Joshua Colp | b4e9416138 | |
Richard Mudgett | 256bc52b66 | |
Richard Mudgett | 800e0ea48d | |
Richard Mudgett | c126afe18f | |
Matt Jordan | 47d9ff1741 | |
Matt Jordan | 532476738d | |
Alexander Traud | f68c995bc9 | |
Joshua Colp | c57b78d4c9 | |
Joshua Colp | f733bc10b1 | |
Matt Jordan | 8e194047ac | |
Matt Jordan | a0f451c35e | |
Matt Jordan | c3bd7fb835 | |
David M. Lee | 26f0559a94 | |
Scott Emidy | df9ce36366 | |
Scott Emidy | e9f1bc08cb | |
Joshua Colp | cf27200391 | |
Joshua Colp | 4b1bd40d7e | |
Scott Emidy | 78364132ce | |
Mark Michelson | e25569ef95 | |
Joshua Colp | 9182c9e4e6 | |
Joshua Colp | ba40b07ddc | |
Joshua Colp | 8521a86367 | |
Joshua Colp | c07fa843ec | |
Mark Michelson | 56d11d4198 | |
Joshua Colp | 9a12804e59 | |
Mark Michelson | 27dc2094e9 | |
Matt Jordan | 1aa23a5d1b | |
Mark Michelson | 39cc28f6ea | |
Mark Duncan | aed068844c | |
Joshua Colp | 20ee33e22e | |
Mark Michelson | e28fbebc57 | |
Benjamin Ford | 1ae762634c | |
Richard Mudgett | aeeb170fc4 | |
Richard Mudgett | 84262749d2 | |
Richard Mudgett | 1519eb44a7 | |
Richard Mudgett | a93b7a927c | |
Richard Mudgett | 741fa0d26d | |
Richard Mudgett | 89b21fd9a3 | |
Richard Mudgett | 7427c7f13b | |
Richard Mudgett | e20f435b60 | |
Richard Mudgett | bc5d7f9c37 | |
Richard Mudgett | 13eb491e35 | |
Joshua Colp | 9be856e3c6 | |
Mark Michelson | 48698a5e21 | |
Mark Michelson | 10ba72a927 | |
Mark Michelson | c9099d06cc | |
Jonathan Rose | 8458b8d441 | |
Matt Jordan | f78a4b52b8 | |
Joshua Colp | 2749721791 | |
Joshua Colp | 1997b6f677 | |
Mark Michelson | b4e19e414a | |
Mark Michelson | f635520527 | |
Matt Jordan | 4d8f47f4bf | |
Joshua Colp | ff83c115c7 | |
Joshua Colp | f509730cb9 | |
Mark Michelson | 54b25c80c8 | |
Joshua Colp | f1493f900e | |
Joshua Colp | d16347f33b | |
Rusty Newton | 62c64c3bd1 | |
Mark Michelson | d9094ddd73 | |
Matt Jordan | 34207887e6 | |
Matt Jordan | 8a1d9a9f83 | |
Joshua Colp | 29de5b497f | |
Michael Cargile | a23adcca3d | |
Matt Jordan | 03064daeb2 | |
Mark Michelson | 1915aa5a54 | |
Joshua Colp | 2c626ceb64 | |
Patric Marschall | abb14ac5b8 | |
Richard Mudgett | 875aee4c09 | |
Matt Jordan | 9d7f689b4b | |
Matt Jordan | 325d83f37f | |
Matt Jordan | 8bcf6d2801 | |
Matt Jordan | 80eaf0b025 | |
Matt Jordan | 174f0e9d4d | |
Matt Jordan | bba2c44ac4 | |
Richard Mudgett | e31cb6b248 | |
Richard Mudgett | 243c0d1609 | |
Richard Mudgett | c782320c68 | |
Richard Mudgett | 2735dd5b2d | |
Richard Mudgett | 3d0ca343ca | |
Richard Mudgett | 8d08bb179c | |
Joshua Colp | 5086bdacfb | |
Mark Michelson | ca41785774 | |
Matt Jordan | 0a1a550593 | |
Benjamin Ford | 3384e64ef6 | |
Matt Jordan | 00d858da87 | |
Matt Jordan | 0b6ff77afb | |
Matt Jordan | 2f0d6d346c | |
Matt Jordan | cd2213f1ae | |
Matt Jordan | 2e4bdbd78a | |
Richard Mudgett | 653f2087e0 | |
Benjamin Ford | 1aafadf814 | |
Benjamin Ford | 9dcae23cfc | |
Benjamin Ford | c219a98d2b | |
Mark Michelson | 585d98fbb6 | |
Mark Michelson | ca65ddcd19 | |
Benjamin Ford | 73e35d20de | |
Kevin Harwell | 97ee0ee6c6 | |
Matt Jordan | 6176ef782c | |
Matt Jordan | bb76b88baf | |
Matt Jordan | 5f13c2226a | |
Matt Jordan | 5c491a6295 | |
Matt Jordan | 4a5f23e716 | |
Matt Jordan | 3645ed0971 | |
Matt Jordan | 2325b106fd | |
Matt Jordan | 328f0be806 | |
Matt Jordan | bee41eec62 | |
Matt Jordan | e51d86682a | |
Matt Jordan | 4d738e9026 | |
Benjamin Ford | 47ea312b24 | |
Matt Jordan | 37e1c479ca | |
Joshua Colp | d558b00c85 | |
Joshua Colp | b74b071369 | |
Joshua Colp | 7ff1ac8797 | |
Matt Jordan | b842a8dabf | |
Matt Jordan | 84a6ed05b7 | |
Joshua Colp | 7386a761c1 | |
Joshua Colp | 4c99310468 | |
Joshua Colp | f35d8f5670 | |
Joshua Colp | 618b97c143 | |
Joshua Colp | 2bc9245d9d | |
Joshua Colp | 6d4227bbba | |
Joshua Colp | 05e8e14982 | |
Richard Mudgett | 38bace4fbb | |
Richard Mudgett | 2f7688c788 | |
Richard Mudgett | 74be3a50d7 | |
Richard Mudgett | 589e93617a | |
Richard Mudgett | 0d67e04359 | |
Richard Mudgett | 0422433f47 | |
Richard Mudgett | 8ea214aed7 | |
Richard Mudgett | ada7346792 | |
Joshua Colp | cba550df7a | |
Joshua Colp | 55137c3d12 | |
Matt Jordan | 49f81ddb85 | |
Joshua Colp | a9f721303d | |
Walter Doekes | e0f565663b | |
Matt Jordan | de3678c92e | |
Joshua Colp | ffde1073bb | |
Joshua Colp | 43926568c3 | |
Joshua Colp | c2f4bf142f | |
Joshua Colp | c5c5c2a4ae | |
Walter Doekes | a5a262be78 | |
Walter Doekes | b835312b4c | |
Walter Doekes | 6551e16e03 | |
Walter Doekes | f4dd9560cf | |
Richard Mudgett | 78a1f4aa46 | |
Scott Griepentrog | 6b16fbfc22 | |
Matt Jordan | 8e07ab145d | |
Joshua Colp | 69bfa518a0 | |
Matt Jordan | 4c0b26b9e8 | |
Mark Michelson | 156395e743 | |
Matt Jordan | bfa5d38a1b | |
Matt Jordan | d84247a481 | |
Matt Jordan | a5e9c4e9b2 | |
Matt Jordan | 399cd8bcd9 | |
Mark Michelson | 24eec5a10b | |
Richard Mudgett | 0ec461a637 | |
Matt Jordan | 0a1700d286 | |
Matt Jordan | d8e61c04a4 | |
Matt Jordan | 9b70a078f6 | |
Matt Jordan | c69c8d4e80 | |
Matt Jordan | e5499c3233 | |
Matt Jordan | dc067e585f | |
Mark Michelson | 05a2cc1293 | |
Matt Jordan | 71c1c559cf | |
Mark Michelson | 028fa54620 | |
Richard Mudgett | 84c12f9e0c | |
Richard Mudgett | 602c4b74b5 | |
Richard Mudgett | 8c6a95a9ac | |
Joshua Colp | e4a2ef9e4e | |
Richard Mudgett | 20f3d77ab9 | |
Richard Mudgett | 4313f32969 | |
Richard Mudgett | 890c923786 | |
Mark Michelson | db0521f905 | |
Joshua Colp | 61658dd219 | |
Joshua Colp | 282b5f3c85 | |
Richard Mudgett | 2602a7484b | |
Richard Mudgett | 2b0482d699 | |
Matt Jordan | f31fb5d54e | |
Joshua Colp | e99e654d75 | |
Matt Jordan | 6264dbf02d | |
Matt Jordan | b240c3fa63 | |
Matt Jordan | d75d96f57d | |
Matt Jordan | 681790ef01 | |
Joshua Colp | 80e82dc97f | |
Kevin Harwell | 35a99b6394 | |
Richard Mudgett | 036bc0012f | |
Richard Mudgett | bec7435945 | |
Richard Mudgett | c2519fdf1c | |
Alexander Traud | a419c69def | |
Joshua Colp | 74616ae43d | |
Mark Michelson | 9015bb4c8c | |
Mark Michelson | 723a9d4225 | |
Joshua Colp | fd21dc34c2 | |
Corey Farrell | 79bf56c78a | |
Kevin Harwell | 31c77b157b | |
mjordan | de8c7f46ed | |
Matt Jordan | 78ea356e78 | |
Matt Jordan | 0b8b952921 | |
Mark Michelson | 2618d1e638 | |
Mark Michelson | 0b233ea61d | |
Damian Ivereigh | 3f57f3f8ec | |
Matt Jordan | 30a0f2d9ac | |
Joshua Colp | dbb067279e | |
Richard Mudgett | a2f4d03c87 | |
Mark Michelson | 006930ee51 | |
Richard Mudgett | a2b718f4f6 | |
Richard Mudgett | 32ddf6d86b | |
Yousf Ateya | cf98c744d5 | |
Mark Michelson | d55d17027c | |
Ivan Poddubny | 8af6c9cf6b | |
ibercom | 3046bc17ed | |
Matt Jordan | 8ea1c0aa81 | |
Matt Jordan | e29f28e7a5 | |
Corey Farrell | 55c8daf88b | |
Joshua Colp | 720251f2b8 | |
ibercom | e0090216db | |
Mark Michelson | 88212ccb7f | |
Kevin Harwell | f5d5aa67dc | |
George Joseph | 5dc9fb4198 | |
David M. Lee | d908272b7e | |
Matt Jordan | bc70904c05 | |
Mark Michelson | 1e3701a529 | |
Corey Farrell | 9e7827e3ac | |
Ivan Poddubny | 888bb49618 | |
George Joseph | 857166b5e5 | |
George Joseph | 1558a89129 | |
George Joseph | 35c699086a | |
Richard Mudgett | fe21f2e52f | |
George Joseph | 262d590819 | |
Joshua Colp | 87c03b792b | |
Joshua Colp | 5a42397018 | |
Ivan Poddubny | 97a6ce1717 | |
Matt Jordan | b9826bf101 | |
Ivan Poddubny | 554bd1e39c | |
Corey Farrell | 0d266cbe02 | |
Matt Jordan | eaabc4d04c | |
Matt Jordan | 4690bc81f7 | |
Matt Jordan | 51ffed5e61 | |
Matt Jordan | 7950b65e4f | |
Matt Jordan | ea8620a51b | |
Matt Jordan | 5ac65ddfb4 | |
Joshua Colp | 1b475a8410 | |
Matt Jordan | 02dfb118ba | |
George Joseph | 60e2fbfe62 | |
demon-ru | 42476e6633 | |
Corey Farrell | e7edb59db6 | |
Matt Jordan | 9d8a462356 | |
Matt Jordan | 620054c527 | |
Matt Jordan | f5e195b44e | |
Matt Jordan | e8a4e01c32 | |
Joshua Colp | 3c98544543 | |
Corey Farrell | 9b6e228419 | |
George Joseph | 7fcf0a97b8 | |
Kevin Harwell | b1e8c0b9eb | |
Matt Jordan | 4a450f863b | |
Corey Edwards | 17d6ede337 | |
Matt Jordan | 31cc24aad6 | |
snuffy | f9114179e6 | |
George Joseph | dd78ab42e4 | |
snuffy | 091b436007 | |
Joshua Colp | 8697a49ef9 | |
Joshua Colp | aea349a87e | |
Corey Farrell | 6b7282ca40 | |
Joshua Colp | 8f8d54a18e | |
Jonathan Rose | 02c5130589 | |
Joshua Colp | 586da882bc | |
Jonathan Rose | d49d64b79c | |
Joshua Colp | 51478575e4 | |
Joshua Colp | 5fcaf727cc | |
Joshua Colp | 6a12b0634b | |
Rodrigo Ramírez Norambuena | 9b13536fed | |
Alexandre Fournier | e67e8d5c7f | |
Yousf Ateya | 16f602f5c2 | |
Joshua Colp | 62422712f7 | |
Richard Mudgett | c780b6e431 | |
Sebastian Kemper | 6627de830b | |
George Joseph | 637c8f065e | |
Corey Farrell | 3cdb7950f0 | |
Rodrigo Ramírez Norambuena | 6553a00770 | |
Joshua Colp | 8523a5ed09 | |
George Joseph | ea917fefaf | |
Ivan Poddubny | d5864a358c | |
Rusty Newton | 4dbd4021c9 | |
Matt Jordan | 7111ba6df4 | |
Sean Bright | 613a461c3d | |
Rusty Newton | 394fcb5eab | |
Joshua Colp | 30c3b254c5 | |
Alexander Traud | 2115f11b54 | |
George Joseph | 5392e970d0 | |
Joshua Colp | 1e44d1bef9 | |
Ivan Poddubny | 608f0a94ee | |
Matt Jordan | 22c6c12af2 | |
Joshua Colp | d649d682c4 | |
Matt Jordan | 9322bc6ff6 | |
Matt Jordan | b1514362ef | |
Joshua Colp | 652ee2ff83 | |
George Joseph | 5f9aea8e3c | |
Kevin Harwell | 68513e00f7 | |
Richard Mudgett | 904f5d98f6 | |
Joshua Colp | d6ffbe39b0 | |
Matt Jordan | dfb292ce3e | |
Matt Jordan | 50e90f9121 | |
Richard Mudgett | be1260a35f | |
George Joseph | 8b0f85ac06 | |
Ivan Poddubny | 87263b47b5 | |
Matt Jordan | 2d9081b5ec | |
Matt Jordan | 8ca25dfd7e | |
Corey Farrell | 366ea63438 | |
Corey Farrell | 69ae8cf0a4 | |
Joshua Colp | 181ae3b8d9 | |
George Joseph | 7a7e9733c2 | |
Corey Farrell | 040d2f8558 | |
Matt Jordan | 626bffc4c2 | |
Matt Jordan | 87fb7fc165 | |
Matt Jordan | 81c27127aa | |
Matt Jordan | 743fed71fc | |
Martin Tomec | 3dcec04ab5 | |
Matt Jordan | 74799b3fe2 | |
Matt Jordan | 78c02f8e88 | |
Corey Farrell | f38066fcad | |
Matt Jordan | e76a6a97bf | |
D Tucny | 92120247e9 | |
Matt Jordan | 13819a34c4 | |
Matt Jordan | b518ba1c6c | |
Corey Farrell | ad6ea29697 | |
Matt Jordan | 9888562c8c | |
Matt Jordan | b4000f2d44 | |
Rodrigo Ramírez Norambuena | 525c8c8689 | |
Corey Farrell | 63196a8256 | |
Corey Farrell | ac1f0090eb | |
Corey Farrell | 5875bf183c | |
Matt Jordan | 1b19c15f17 | |
Matt Jordan | ec0f80b6e8 | |
Matt Jordan | ed51fbbe9c | |
Corey Farrell | 3efe0df044 | |
Mark Michelson | 077979618b | |
Mark Michelson | 4b8cddfb36 | |
Joshua Colp | 415a0d0745 | |
Mark Michelson | e0c6f88010 | |
Matt Jordan | d1bc86fc99 | |
Richard Mudgett | d3c310a28c | |
Rodrigo Ramírez Norambuena | 7f611fa0e8 | |
Joshua Colp | e332c7ed5e | |
Diederik de Groot | 9c3ed42875 | |
Matt Jordan | 37a193da18 | |
Matt Jordan | 6a86b3555b | |
Matt Jordan | d4e207e27e | |
Kevin Harwell | 3fb6daeb55 | |
Joshua Colp | 49ef81c15c | |
Ashley Sanders | 3278fe5327 | |
Joshua Colp | 89f6719f7a | |
Corey Farrell | d61f03c4f9 | |
Corey Farrell | 3e4624ad21 | |
Corey Farrell | fed9faab8d | |
Joshua Colp | df23c8a86b | |
Joshua Colp | 95ab9fdb1a | |
Joshua Colp | 0e70dc0dc8 | |
Mark Michelson | e39bd6ba46 | |
Mark Michelson | 1bf008fc76 | |
Joshua Colp | 7ee05892d6 | |
Steve Davies | 0b6410c4f8 | |
Joshua Colp | 427209603d | |
George Joseph | 99fb87ae13 | |
Rodrigo Ramírez Norambuena | d5dd43856e | |
Matt Jordan | e9788056e9 | |
Matt Jordan | 2d277996b7 | |
Matt Jordan | 145f65598c | |
Kevin Harwell | 7e5056b393 | |
Mark Michelson | 1da9ec969d | |
Matt Jordan | bf3d9db4a6 | |
Diederik de Groot | cb318f3960 | |
Mark Michelson | b3cd5bc77f | |
Mark Michelson | eabf3b5a3c | |
George Joseph | f70d21b2cf | |
Diederik de Groot | 1bb16bedc7 | |
Matt Jordan | a06924e9d9 | |
George Joseph | 1474bb05f6 | |
Corey Farrell | 73efb093b8 | |
George Joseph | b0e929219b | |
Matt Jordan | 5a3948a66f | |
Mark Michelson | 2ef1e1fc68 | |
Diederik de Groot | d6dfc85666 | |
Joshua Colp | edd9e54818 | |
Joshua Colp | 7b57116833 | |
Joshua Colp | 4423d5f755 | |
Corey Farrell | ad1a118632 | |
Mark Michelson | 3327560cb2 | |
Richard Mudgett | d08446ec36 | |
Joshua Colp | 96e18453f4 | |
Diederik de Groot | 2be9cc2643 | |
George Joseph | b74b2cdcda | |
Matt Jordan | 27a122af66 | |
Joshua Colp | 9581a0ebf3 | |
George Joseph | 63169e00ff | |
Matt Jordan | f0c82a173a | |
Richard Mudgett | 82bc0fd3ad | |
Corey Farrell | c59a800707 | |
Matt Jordan | e05b076827 | |
Mark Michelson | 4f1a8dbe92 | |
George Joseph | 674b18bdf0 | |
Matt Jordan | f1abf51b73 | |
Matt Jordan | ab5b38e434 | |
Joshua Colp | ec77b6148f | |
Kevin Harwell | b56c1914fa | |
Scott Griepentrog | 8d4ce7cc2b | |
George Joseph | bf46799f0e | |
George Joseph | 1b6f6ff841 | |
George Joseph | 5d218cde87 | |
Matt Jordan | 97f83c4c53 | |
Rodrigo Ramírez Norambuena | abd56db3e0 | |
Corey Farrell | 222fbe1d9a | |
Rodrigo Ramírez Norambuena | 07e729cc7b | |
George Joseph | 7d43d85bea | |
David M. Lee | 3d27c223a5 | |
Matt Jordan | 30045b4e67 | |
Joshua Colp | 88dbf6653e | |
Matt Jordan | e996d8f728 | |
Matt Jordan | d1a6f1a9f9 | |
Corey Farrell | 0e4b997cd7 | |
Matt Jordan | 91c1ed7ef6 | |
Corey Farrell | a77c31b99c | |
Matt Jordan | d918c3b78e | |
George Joseph | 555b5f5d30 | |
Matthew Jordan | 5807ca519c | |
Matthew Jordan | d0d78d5732 | |
Matthew Jordan | 4cf7d0bf01 | |
Richard Mudgett | 13cd99682d | |
Kevin Harwell | af458e2e60 | |
Matthew Jordan | 88b0fa7755 | |
George Joseph | 16afee4651 | |
Richard Mudgett | 125acc52fe | |
Richard Mudgett | a63f7ad04a | |
Matthew Jordan | c9791dba1f | |
Matthew Jordan | c39faa4729 | |
George Joseph | 75c2c85962 | |
George Joseph | 73c286a393 | |
Kevin Harwell | 5737650a67 | |
Richard Mudgett | 1695a5b85f | |
Richard Mudgett | 92c1688edb | |
Matthew Jordan | 2679d0100a | |
Matthew Jordan | 6ba6e3dffd | |
Matthew Jordan | e05c8ae68e | |
Jonathan Rose | f21b45db49 | |
Richard Mudgett | 4441bb6a25 | |
Jonathan Rose | f767440906 | |
Richard Mudgett | 1712d16825 | |
Matthew Jordan | ae39dd1f46 | |
Matthew Jordan | 05397ad01e | |
Matthew Jordan | be13c72142 | |
Matthew Jordan | f324870dab | |
Scott Griepentrog | a6aed7f6f6 | |
Scott Griepentrog | 0584e29300 | |
Kevin Harwell | d754f70239 | |
Mark Michelson | c516981dc7 | |
Matthew Jordan | ab803ec342 | |
Matthew Jordan | 488f093e97 | |
Matthew Jordan | c027133f6d | |
Kevin Harwell | 2270c40d33 | |
George Joseph | 95de71f247 | |
Matthew Jordan | d54ccda3b1 | |
Matthew Jordan | 0ecd472e4f | |
Matthew Jordan | 4e7be5b2dc | |
Mark Michelson | 2443b40341 | |
Corey Farrell | b1102cd642 | |
Mark Michelson | 0f25076f67 | |
Corey Farrell | 709fa14b44 | |
Mark Michelson | 1ee8424f27 | |
Scott Griepentrog | 169e57d2e0 | |
Corey Farrell | 1eb0c5f4e8 | |
Ashley Sanders | e301185983 | |
Ashley Sanders | a1f12d9231 | |
Ashley Sanders | 7293ecd90b | |
Richard Mudgett | 94949e7f2f | |
Corey Farrell | 9967739669 | |
Corey Farrell | 2d39bc5528 | |
Matthew Jordan | 5f8faf16af | |
Matthew Jordan | 09b681e344 | |
Matthew Jordan | 7f33abb827 | |
Matthew Jordan | 47eeb67e14 | |
Matthew Jordan | dbb4d6f9e7 | |
Matthew Jordan | e126ab9eeb | |
Matthew Jordan | 2f6534527d | |
Matthew Jordan | eb70993a50 | |
Matthew Jordan | c0ff16036a | |
Matthew Jordan | 844bc76bef | |
Matthew Jordan | 5e204042d9 | |
Jonathan Rose | cfbf5fbe91 | |
Jonathan Rose | 1a50d8d4c2 | |
Rusty Newton | c6c08d755d | |
Richard Mudgett | 13557675d4 | |
Mark Michelson | 85feac857c | |
Richard Mudgett | dc2cf21144 | |
Matthew Jordan | 6e6f5b3a1f | |
Corey Farrell | b0df413fb2 | |
Corey Farrell | d01706ce1e | |
Corey Farrell | 4b225e2104 | |
Corey Farrell | 6adf26f14d | |
Corey Farrell | d0df545a44 | |
Kevin Harwell | fd434a210f | |
Richard Mudgett | dea885a607 | |
Matthew Jordan | 05de9082a5 | |
Richard Mudgett | b1e9552b08 | |
Matthew Jordan | a3fe43fbdc | |
Matthew Jordan | 08a88aab15 | |
Richard Mudgett | 6ca98524bf | |
Richard Mudgett | 1c09028171 | |
Matthew Jordan | 73dcea59bd | |
Corey Farrell | 4c84dca2d8 | |
Corey Farrell | 958bc84caf | |
Corey Farrell | 7fddae99dd | |
Richard Mudgett | dba0f1ad67 | |
Scott Griepentrog | 2c7b945149 | |
Scott Griepentrog | 1fb1c81923 | |
Richard Mudgett | 2122c205e6 | |
Kevin Harwell | 94fe4a9178 | |
Kevin Harwell | 1f428f25f0 | |
Richard Mudgett | 522f063186 | |
Matthew Jordan | 5c03a5f2e7 | |
Joshua Colp | f7c6bedb06 | |
Joshua Colp | 287a22435f | |
Matthew Jordan | 37d33ed997 | |
Matthew Jordan | a4c27baf47 | |
Richard Mudgett | a3292230b8 | |
Richard Mudgett | 34aa0214eb | |
Kevin Harwell | 0497b7b155 | |
Matthew Jordan | b9fd61f2c7 | |
Matthew Jordan | f5bc032567 | |
Richard Mudgett | bd029688cd | |
Richard Mudgett | c24a294f0b | |
Richard Mudgett | 737064bfa4 | |
Joshua Colp | bc357c1d7e | |
Matthew Jordan | afea98dc73 | |
Matthew Jordan | 055001716c | |
Matthew Jordan | 92178247ee | |
Richard Mudgett | cae712d986 | |
Kevin Harwell | 110b99646c | |
Joshua Colp | 714cb27000 | |
Richard Mudgett | e158517a9c | |
Richard Mudgett | 5d16d80b59 | |
Jonathan Rose | 772793f18e | |
Richard Mudgett | 8cced7767c | |
Richard Mudgett | 13e715b30c | |
George Joseph | 06fa8db864 | |
Matthew Jordan | 999d96d405 | |
Matthew Jordan | 9cdadc168c | |
Richard Mudgett | 9d85e855de | |
Scott Griepentrog | c33c5183a5 | |
Kevin Harwell | 169058e73f | |
Matthew Jordan | de86b30dba | |
Matthew Jordan | 34989bd9c8 | |
Rusty Newton | 53aec7a969 | |
Matthew Jordan | 474fec4f92 | |
Matthew Jordan | ddff640f94 | |
Matthew Jordan | dd8ac00f24 | |
David M. Lee | 43a3e80be1 | |
Matthew Jordan | 978649a568 | |
Matthew Jordan | 3d1a1533bf | |
Kevin Harwell | 5b73246a9d | |
Joshua Colp | f726304283 | |
Joshua Colp | 7a507ae31a | |
Joshua Colp | f0d018e249 | |
Matthew Jordan | c40d78c31e | |
Joshua Colp | bf9d416536 | |
Corey Farrell | 93c9c3af2f | |
Corey Farrell | 54a699fb64 | |
Richard Mudgett | 89b48af3e5 | |
George Joseph | 8e806f9e12 | |
Matthew Jordan | c7bdf62a95 | |
Richard Mudgett | e0ff83c272 | |
Richard Mudgett | 40547e7210 | |
Richard Mudgett | 2181c9443f | |
Matthew Jordan | 374013d817 | |
Corey Farrell | eb9448a1ae | |
Richard Mudgett | 6d3fcfc3c2 | |
Matthew Jordan | 562b7bf6f0 | |
Joshua Colp | 7890d0ad07 | |
Joshua Colp | cbe63ab283 | |
Joshua Colp | c8f3074cc4 | |
Joshua Colp | a3044cbf02 | |
Joshua Colp | ce70587ba6 | |
Matthew Jordan | 4f4d03fdd1 | |
Joshua Colp | 758a897876 | |
Joshua Colp | 8c6e3ad3b4 | |
Joshua Colp | 3543a36362 | |
Joshua Colp | 5d26236758 | |
Richard Mudgett | 4d797f17c5 | |
Matthew Jordan | 1995baad71 | |
Kevin Harwell | e8ec15a9ef | |
Kevin Harwell | e64d151fae | |
Richard Mudgett | feddab7944 | |
Matthew Jordan | 29f3ff0b61 | |
Kevin Harwell | 72e5ba2ce8 | |
Corey Farrell | 2531f75057 | |
George Joseph | 4d8ab20a8a | |
Matthew Jordan | 32e42e50cc | |
Matthew Jordan | 03445a147e | |
Matthew Jordan | 8582411344 | |
Matthew Jordan | 675b2b8103 | |
Scott Griepentrog | 323c0927ac | |
Joshua Colp | 18c8c1bae3 | |
Joshua Colp | 2f2eb1931a | |
Joshua Colp | f67402a52a | |
Richard Mudgett | 05e2832b35 | |
Kevin Harwell | 6583b4de98 | |
Ashley Sanders | 112d23c73e | |
Mark Michelson | 43dd42d8ae | |
Scott Griepentrog | f7d23dfcc6 | |
Mark Michelson | e8896ac008 | |
Mark Michelson | 22fc3359da | |
Mark Michelson | b8ea23b0d1 | |
George Joseph | 6e5eb9af88 | |
Joshua Colp | e0461290d0 | |
Mark Michelson | 8c068fc096 | |
Mark Michelson | 25a67d561c | |
Sean Bright | c3add776af | |
Richard Mudgett | 88fbe4e917 | |
Kevin Harwell | 61822e78ae | |
Kevin Harwell | e2b493b8f0 | |
Kevin Harwell | 9e3d316dd1 | |
Richard Mudgett | eda125f98d | |
Joshua Colp | b64f4bb6ee | |
Jonathan Rose | a620b287bd | |
Matthew Jordan | 7f9b28b0c6 | |
Matthew Jordan | 1a17693789 | |
Joshua Colp | ceedd40370 | |
David M. Lee | 702d79de2a | |
Matthew Jordan | 1fc823c770 | |
Richard Mudgett | e302116e40 | |
Richard Mudgett | f8b3fb6e2f | |
David M. Lee | 197265438e | |
Kevin Harwell | 630eea087d | |
Walter Doekes | e23f07beb8 | |
Walter Doekes | 9210648bbe | |
Richard Mudgett | 355eb9d22f | |
Richard Mudgett | c73b4b2a46 | |
Scott Griepentrog | bdfdb01bcf | |
Matthew Jordan | beb20440e0 | |
Richard Mudgett | 5e10007dbd | |
Matthew Jordan | 74a13629e2 | |
Matthew Jordan | 452f0eeb57 | |
Matthew Jordan | 894d4d781c | |
Matthew Jordan | 98c3983c89 | |
Ashley Sanders | a7ba8a58a8 | |
Richard Mudgett | 6af6a216a1 | |
Matthew Jordan | 072db5e1b9 | |
Matthew Jordan | e659b3e53d | |
Mark Michelson | ab5af1f3d8 | |
Joshua Colp | 643b81d98e | |
Kevin Harwell | 34c220203f | |
Mark Michelson | e257244bbb | |
Mark Michelson | 821c15ae53 | |
Mark Michelson | 8bc4a89e1f | |
Richard Mudgett | fa80d9658d | |
Richard Mudgett | 6c426e86bd | |
Joshua Colp | c95391f23c | |
Matthew Jordan | f6630e2481 | |
Kevin Harwell | 77a036bf3f | |
Mark Michelson | e370c9e68e | |
Matthew Jordan | 89a431df84 | |
Richard Mudgett | 1f94b96749 | |
Joshua Colp | 056f11ac65 | |
Richard Mudgett | 368ecf13bf | |
Matthew Jordan | 7d606d87bf | |
Matthew Jordan | 4e2be8fb8f | |
Matthew Jordan | dc993db55c | |
Scott Griepentrog | 4791d629d1 | |
Scott Griepentrog | 2b0d522dbb | |
Richard Mudgett | 4b363688d4 | |
Kinsey Moore | eb9ce791d8 | |
George Joseph | b937438c17 | |
George Joseph | 143bec54ee | |
George Joseph | 6e59bf6491 | |
Kinsey Moore | 8f3c60cee7 | |
Mark Michelson | 42b342c6e2 | |
George Joseph | a10d2966b6 | |
George Joseph | 13ed8f73ed | |
George Joseph | 42e4cb7174 | |
Mark Michelson | 9ea8dd036f | |
George Joseph | 75cd302b0a | |
Kinsey Moore | e17a1a8ba1 | |
Matthew Jordan | dd42e92e7a | |
George Joseph | 4becfae3b1 | |
George Joseph | 9d457fe5c2 | |
George Joseph | 0fa6c34dc6 | |
George Joseph | d873b09075 | |
Scott Griepentrog | 566907fabd | |
Joshua Colp | b9a7875dd6 | |
Joshua Colp | a7c38428af | |
Kinsey Moore | cca262e7d3 | |
Kevin Harwell | 1a0979d437 | |
Matthew Jordan | b521c612fc | |
Matthew Jordan | 915bb88d3e | |
Matthew Jordan | 006ffdcfb2 | |
George Joseph | d1c532034b | |
George Joseph | 0a3dd7589e | |
Richard Mudgett | 7a356232bd | |
Richard Mudgett | fca0be57d9 | |
Matthew Jordan | 9735a13429 | |
George Joseph | fc79cf6428 | |
Joshua Colp | f88460115f | |
Richard Mudgett | 4b054bdc6d | |
Richard Mudgett | 7074bf956b | |
Scott Griepentrog | 6a99df47c0 | |
Richard Mudgett | b22c833c12 | |
Richard Mudgett | e603fbe04a | |
Kevin Harwell | 4fad85f9bf | |
Mark Michelson | 14d2f8f20f | |
Mark Michelson | c1582929f9 | |
Mark Michelson | 5bd5f580c1 | |
George Joseph | b4621cd0f5 | |
George Joseph | 105f224cfd | |
Walter Doekes | 9ae57e0dd6 | |
George Joseph | a3534b7c05 | |
Joshua Colp | f26d4618eb | |
Joshua Colp | ad85e54fd9 | |
George Joseph | 89617370ec | |
Mark Michelson | b85f79c0c1 | |
George Joseph | 2b8c441096 | |
Richard Mudgett | 8f12ded887 | |
Matthew Jordan | 8c019b1a6b | |
Matthew Jordan | 7ff0d266a6 | |
Joshua Colp | 439e6e1c5d | |
Kevin Harwell | 01c4e76c4e | |
David M. Lee | 49386cf568 | |
Kinsey Moore | 3b0c40f337 | |
Kinsey Moore | 15af40180a | |
Joshua Colp | 0c9fbb449f | |
Joshua Colp | 61fe4f10d2 | |
Kevin Harwell | 8237bd357d | |
Kinsey Moore | 2288f910ea | |
Kinsey Moore | b7f7d045ac | |
Kinsey Moore | 50f6517296 | |
Kevin Harwell | d4a05879d6 | |
Joshua Colp | fb768ec33a | |
Kinsey Moore | a220a08777 | |
Scott Griepentrog | 22a91bf698 | |
Kevin Harwell | 2f21f85c37 | |
Kevin Harwell | 525c823b4b | |
Kevin Harwell | 664067e318 | |
Joshua Colp | 74b032bb03 | |
Kinsey Moore | 64581d894d | |
Matthew Jordan | cbc91f50c1 | |
Mark Michelson | 1712694817 | |
Mark Michelson | 93b1df3bf6 | |
Kinsey Moore | 55c9a46abd | |
Matthew Jordan | 7fd1227202 | |
Matthew Jordan | 0321d00413 | |
George Joseph | 67372d1f0a | |
Matthew Jordan | ffd928263f | |
Matthew Jordan | 30c34062c3 | |
Matthew Jordan | a83b4ad1da | |
Matthew Jordan | e7c97d158f | |
Matthew Jordan | bda506c346 | |
George Joseph | 9a5442cf99 | |
Matthew Jordan | f1b4969a33 | |
Matthew Jordan | 604c9c4990 | |
Joshua Colp | a551851e5b | |
George Joseph | a53efbb86c | |
George Joseph | 7472c661ca | |
Matthew Jordan | d79c68d3fb | |
Joshua Colp | 6e30ccd242 | |
Joshua Colp | 0104fb0c60 | |
Richard Mudgett | 52a059caf5 | |
Richard Mudgett | 1583ea4832 | |
Richard Mudgett | 7f4b222e07 | |
George Joseph | 2846d23688 | |
Matthew Jordan | 4f26a7ea36 | |
Mark Michelson | 8e64f6a0af | |
Kevin Harwell | e2181139c9 | |
Jonathan Rose | ddc3f4846f | |
Kevin Harwell | 19ba0d1363 | |
Joshua Colp | e7f16827cb | |
Joshua Colp | aeb5f34ecc | |
Corey Farrell | 8fb20cb05d | |
Richard Mudgett | 524588c345 | |
Joshua Colp | a0d9eab389 | |
Joshua Colp | 87c2e9e238 | |
Richard Mudgett | 8648bc1f6f | |
Mark Michelson | a1f1cdbd87 | |
Corey Farrell | e8286df19c | |
Matthew Jordan | 45f4fe6f1c | |
Matthew Jordan | c5ef48b861 | |
Matthew Jordan | 6d59f1546e | |
Joshua Colp | b902694840 | |
Joshua Colp | 62d33a6696 | |
Joshua Colp | 99414651e4 | |
Joshua Colp | cbba061f13 | |
Matthew Jordan | 5e09dd3c75 | |
Matthew Jordan | 6b7a2dc7b9 | |
Jonathan Rose | 8c61b4890b | |
Scott Griepentrog | 674185ec14 | |
Mark Michelson | 1536b0ecb6 | |
Joshua Colp | 9067e6faa4 | |
Mark Michelson | 77c57f2b1a | |
Kevin Harwell | 721ae89155 | |
Kinsey Moore | 5013659972 | |
Matthew Jordan | 153cfb4c2d | |
Corey Farrell | 00866a640d | |
Joshua Colp | 5ee03e74a8 | |
Corey Farrell | 5ca2b16721 | |
Corey Farrell | 8ab323fead | |
Matthew Jordan | 468ccd1b66 | |
Matthew Jordan | f10a8475b5 | |
Matthew Jordan | ffe194fd78 | |
Matthew Jordan | 266c022a45 | |
Corey Farrell | a6bfa0d20a | |
Richard Mudgett | a2d6e15af8 | |
Richard Mudgett | 2878554bcc | |
Joshua Colp | 248c592292 | |
Corey Farrell | f2d43e7e07 | |
Corey Farrell | 1c255e711e | |
Corey Farrell | 433366ab90 | |
George Joseph | c056506d84 | |
Mark Michelson | 27dc7e47d7 | |
Joshua Colp | 0d0131bf34 | |
George Joseph | 9d1b3ec22a | |
George Joseph | e5e29897fa | |
Corey Farrell | 06beefd20a | |
Corey Farrell | 3e29fa3686 | |
Corey Farrell | ac48e34b87 | |
Richard Mudgett | b586e7f0b2 | |
Corey Farrell | 5bec46e6c8 | |
Corey Farrell | 5f17490f4d | |
Corey Farrell | 54460c74e4 | |
Matthew Jordan | d5309929be | |
Tzafrir Cohen | beb58e48c3 | |
Scott Griepentrog | b3b93a7c15 | |
Scott Griepentrog | b4ee155c62 | |
Matthew Jordan | f6809b01df | |
Corey Farrell | b2320497f8 | |
Corey Farrell | 7bd256b711 | |
Corey Farrell | d51169cd36 | |
Kevin Harwell | c3b1d0df0d | |
Kevin Harwell | fed9d0deb0 | |
Walter Doekes | 3f31b73f54 | |
Igor Goncharovskiy | 934ab9d1b8 | |
Matthew Jordan | 906c7f4b97 | |
Matthew Jordan | ab07cf71f8 | |
Tzafrir Cohen | b1acfd36fd | |
Richard Mudgett | 1ba42a4d8e | |
Corey Farrell | 0ca681a414 | |
Corey Farrell | a256324fcf | |
Malcolm Davenport | ed07535b1c | |
Matthew Jordan | 294ff83152 | |
Matthew Jordan | 221dcb1335 | |
Malcolm Davenport | 0bbb351655 | |
Malcolm Davenport | 1ec27418da | |
Corey Farrell | 688edd55c3 | |
Corey Farrell | a113a7d2ea | |
Sean Bright | 88d9d3f1fc | |
Matthew Jordan | b23580afe6 | |
Matthew Jordan | f3fbcc550e | |
Matthew Jordan | 775640f658 | |
Jonathan Rose | e979d0d5c1 | |
Shaun Ruffell | 14db1236ad | |
Richard Mudgett | 70f1c82ac2 | |
Matthew Jordan | 0e911663e3 | |
George Joseph | cb31a8aa7a | |
Matthew Jordan | 70b21c4617 | |
Matthew Jordan | 2c7556769c | |
Matthew Jordan | 7a76de11b1 | |
Jonathan Rose | 8e610ab20e | |
Matthew Jordan | dd7031bfb7 | |
Matthew Jordan | 97b5c22f07 | |
Richard Mudgett | fa94bc815b | |
Matthew Jordan | 5f300b7a40 | |
Matthew Jordan | cb9ae40a31 | |
Matthew Jordan | fdcec1ef40 | |
George Joseph | b8f505294a | |
Kinsey Moore | 289830cdc6 | |
Igor Goncharovskiy | 50e802445c | |
Joshua Colp | 70a3e74f0a | |
Richard Mudgett | 1f1a352fbd | |
Jonathan Rose | fab0df2f4c | |
Alexandr Anikin | edf5af72e9 | |
George Joseph | 54a5b8798f | |
Jonathan Rose | 2d07283dc5 | |
George Joseph | 26724c65f7 | |
Corey Farrell | c0943cf8d6 | |
Richard Mudgett | 9a7fb8ee6c | |
Corey Farrell | 6b93ab5824 | |
George Joseph | 8bb06d592a | |
Joshua Colp | efefbe15a4 | |
Walter Doekes | 0ebe3d78bc | |
Walter Doekes | 6644fd46e7 | |
Walter Doekes | 1e6c3d1a26 | |
George Joseph | 004c387041 | |
Joshua Colp | 743ad19699 | |
Matthew Jordan | b8aed5b14d | |
Joshua Colp | 23ffd68e70 | |
Kinsey Moore | 32624fb541 | |
Joshua Colp | 494bb9f931 | |
Walter Doekes | 4c2aef333c | |
George Joseph | bbc56596fd | |
Kevin Harwell | e2ae7bd79f | |
George Joseph | d3342fb98d | |
Matthew Jordan | cc07f4835c | |
George Joseph | d1c9621852 | |
Richard Mudgett | 376ec31b17 | |
Walter Doekes | 4c7887b852 | |
Joshua Colp | 0292839ae0 | |
Kinsey Moore | b32d8b5317 | |
Kinsey Moore | 9e08180304 | |
Kinsey Moore | 57a5e2ebee | |
Joshua Colp | 673c2febba | |
Matthew Jordan | 17d079c371 | |
Matthew Jordan | 9f5c73586c | |
Matthew Jordan | 5c607f9735 | |
Richard Mudgett | 6a8cb946eb | |
Matthew Jordan | c092e49344 | |
Matthew Jordan | 4f28ae4f51 | |
Matthew Jordan | 57233a97e8 | |
Matthew Jordan | 69032d62aa | |
Matthew Jordan | f36b64f58e | |
Corey Farrell | 9e3b5be182 | |
Corey Farrell | 0904b18fcc | |
Corey Farrell | a03464bea2 | |
Corey Farrell | 3987b978d6 | |
Richard Mudgett | 30e6eed19d | |
Richard Mudgett | cff192429b | |
Richard Mudgett | 6a844be566 | |
George Joseph | b67094624d | |
Kinsey Moore | ef2c567597 | |
Kinsey Moore | 1cb36afce3 | |
Joshua Colp | 6246189df7 | |
Richard Mudgett | 94105b30a6 | |
Jonathan Rose | 9ff743e995 | |
Scott Griepentrog | 1e620fe59e | |
Jonathan Rose | 2dfc3b65f8 | |
Corey Farrell | a2c47caa09 | |
Joshua Colp | a1763a89a3 | |
Joshua Colp | 0de2d080c2 | |
Kinsey Moore | e3da76a352 | |
Kinsey Moore | ac095304e6 | |
Walter Doekes | 303547231e | |
Walter Doekes | 45e32e4b8c | |
Joshua Colp | d9b15388b2 | |
Joshua Colp | b1bb6b97df | |
George Joseph | faae530006 | |
Walter Doekes | 8d55892df7 | |
Richard Mudgett | 2a7c5208ee | |
Richard Mudgett | 00207158e1 | |
Joshua Colp | 19ffbb1e64 | |
Richard Mudgett | 5a77eb3476 | |
Walter Doekes | 77de3be28d | |
Richard Mudgett | 8ae471258e | |
Richard Mudgett | 774890de1b | |
Walter Doekes | 20f4ea0df7 | |
Mark Michelson | d25390073b | |
Walter Doekes | 0f3540553d | |
Walter Doekes | 9d1c0348f2 | |
Matthew Jordan | d85e59a23b | |
Matthew Jordan | f48d3f849d | |
Matthew Jordan | d74dee638c | |
Joshua Colp | 9a988639f4 | |
Richard Mudgett | fbbe455b9d | |
Jonathan Rose | d1b1e911bf | |
Jonathan Rose | c95b53e21a | |
Kinsey Moore | fade256307 | |
Sean Bright | 6b3c47bd6a | |
George Joseph | c7ae706b2d | |
Mark Michelson | 23f58d6f80 | |
Jonathan Rose | 5567d3e7d2 | |
Richard Mudgett | 588a8d9078 | |
Richard Mudgett | 8b0352ffae | |
Mark Michelson | 23a375be5f | |
Mark Michelson | 5c5aee4458 | |
Mark Michelson | 7a35800551 | |
George Joseph | a2482acdce | |
David M. Lee | 27df9b73e2 | |
George Joseph | 0a2e6a1c7e | |
Joshua Colp | c48b609fb3 | |
Joshua Colp | 85d7e44186 | |
Joshua Colp | 93f7c8a434 | |
Scott Griepentrog | 79b702f308 | |
Joshua Colp | 48d58da883 | |
Joshua Colp | 4098d87eef | |
Walter Doekes | 7efcca8de1 | |
Walter Doekes | 5840c47223 | |
Jonathan Rose | 2e3f45e8e6 | |
Mark Michelson | 0f2bd8d855 | |
George Joseph | 43c4529f15 | |
Sean Bright | 8f15395e09 | |
Rusty Newton | a8f290e208 | |
Mark Michelson | 048560f330 | |
Mark Michelson | a8ef508f5e | |
Mark Michelson | 9a5ee513d5 | |
Jonathan Rose | 346877f6c9 | |
Matthew Jordan | 128d187f38 | |
Matthew Jordan | 8302bc7f0a | |
Joshua Colp | df77a7c5f0 | |
Matthew Jordan | 0fbd9947e2 | |
Matthew Jordan | ffffc0efd8 | |
Richard Mudgett | b06cd2f048 | |
Jonathan Rose | c56aa2d8f6 | |
Jonathan Rose | 43a35c2407 | |
Richard Mudgett | 3ce9a8b4f4 | |
Kinsey Moore | e59ae8b0c9 | |
Jonathan Rose | de07c80ede | |
Joshua Colp | 1bcb46c578 | |
Mark Michelson | c98e04753b | |
Matthew Jordan | 6033c16fc3 | |
Matthew Jordan | 2d8c38cf9a | |
George Joseph | e0c66f5f14 | |
George Joseph | d4dd19cb77 | |
Matthew Jordan | 34ea694094 | |
Matthew Jordan | 636db18496 | |
Scott Griepentrog | bd99a96b21 | |
Matthew Jordan | ed4c696319 | |
Michael L. Young | 64f1a6e830 | |
Richard Mudgett | 6e698ef440 | |
Mark Michelson | 7918e67d35 | |
Richard Mudgett | a4700eee6a | |
Richard Mudgett | a02d8a0681 | |
George Joseph | 372236cc2a | |
Kinsey Moore | a4a58c2771 | |
George Joseph | e985cb076d | |
Mark Michelson | 7c4ed8cc89 | |
Richard Mudgett | 00ffbc40e1 | |
Richard Mudgett | d6ea6f5848 | |
Joshua Colp | 42fe127009 | |
Joshua Colp | e86ee8e76b | |
Joshua Colp | 3592d4b398 | |
Joshua Colp | 6fa02d1bfd | |
Mark Michelson | 16c96760e7 | |
Jonathan Rose | 712907eec6 | |
Matthew Jordan | 50381d2c77 | |
Richard Mudgett | 6684442945 | |
Mark Michelson | a457acff46 | |
Mark Michelson | 5de3fa2c60 | |
Mark Michelson | a9befb9eec | |
Jonathan Rose | 2903df52f3 | |
Mark Michelson | b806440959 | |
Matthew Jordan | 47c37abb93 | |
Matthew Jordan | aa1dd38e54 | |
Matthew Jordan | bc0536e009 | |
Matthew Jordan | 12341c90c1 | |
Richard Mudgett | e8b72c6f4b | |
Richard Mudgett | ab526502e6 | |
Mark Michelson | 12891b608b | |
Mark Michelson | 04876df6a2 | |
Kinsey Moore | 04f478212c | |
Mark Michelson | bc58898587 | |
Mark Michelson | 6e5ca3fe5b | |
Kinsey Moore | 4a22e1d865 | |
Jonathan Rose | 5c35544a23 | |
Richard Mudgett | 3b5127ba69 | |
Damien Wedhorn | 0a33671e0c | |
George Joseph | a8fc671c13 | |
Matthew Jordan | 7eef81c370 | |
Matthew Jordan | a6cf7b53da | |
Matthew Jordan | b9906d8438 | |
Matthew Jordan | f5d4e581f3 | |
Matthew Jordan | 524cb990a3 | |
Joshua Colp | 66fb08e26d | |
Jonathan Rose | 2c013ae774 | |
Matthew Jordan | 544e092b2d | |
Matthew Jordan | cce3d9ec5c | |
Matthew Jordan | fa02e06132 | |
Matthew Jordan | 6e4d44c2a1 | |
Richard Mudgett | ee93b5a314 | |
Richard Mudgett | 7eb4ee9b2f | |
Richard Mudgett | cd81f920a4 | |
Kinsey Moore | e8a5847742 | |
Jonathan Rose | cd28e5dda2 | |
Kinsey Moore | e6022f9f97 | |
Walter Doekes | 602aef327e | |
Richard Mudgett | f0a65379f5 | |
Richard Mudgett | bede29b762 | |
Joshua Colp | a2bbe5d360 | |
Richard Mudgett | a0b7f2ce42 | |
Matthew Jordan | e30904854e | |
Kinsey Moore | ccb2f94691 | |
Kinsey Moore | 406dded64c | |
Mark Michelson | ef70c08dc7 | |
Mark Michelson | 1b500d2fa1 | |
Mark Michelson | c43c22fe89 | |
Matthew Jordan | cc7853f40f | |
Walter Doekes | b94fc06966 | |
Walter Doekes | 4e07345c28 | |
Matthew Jordan | 6c34de22b5 | |
Matthew Jordan | 95871451f6 | |
Matthew Jordan | 8b411f710b | |
Matthew Jordan | af6f95f64c | |
Jason Parker | 7438e38f22 | |
Jason Parker | 2b804661bc | |
Matthew Jordan | 02fc8e2449 | |
Matthew Jordan | fbb612751e | |
Matthew Jordan | 5b82edd783 | |
Matthew Jordan | 949c59f25f | |
Kinsey Moore | d2dff48f70 | |
Matthew Jordan | 8b560be831 | |
Matthew Jordan | 288f57882e | |
Matthew Jordan | d4f4162258 |
|
@ -0,0 +1,40 @@
|
|||
# git ls-files --others --exclude-from=.git/info/exclude
|
||||
# Lines that start with '#' are comments.
|
||||
# For a project mostly in C, the following would be a good set of
|
||||
# exclude patterns (uncomment them if you want to use them):
|
||||
# *.[oa]
|
||||
# *~
|
||||
|
||||
# See .gitignore in subdirectories for more ignored files
|
||||
|
||||
*~
|
||||
*.[oadi]
|
||||
*.gz
|
||||
*.ii
|
||||
*.oo
|
||||
*.eo
|
||||
*.so
|
||||
*.exports
|
||||
*.moduleinfo
|
||||
*.makeopts
|
||||
*.makedeps
|
||||
.lastclean
|
||||
/.pc
|
||||
aclocal.m4
|
||||
autom4te.cache
|
||||
config.log
|
||||
config.status
|
||||
defaults.h
|
||||
makeopts
|
||||
makeopts.embed_rules
|
||||
menuselect-tree
|
||||
*.sha1
|
||||
*.pyc
|
||||
*.gcno
|
||||
*.gcda
|
||||
latex
|
||||
doxygen.log
|
||||
out/
|
||||
*.orig
|
||||
tests/CI/output
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
[gerrit]
|
||||
defaultbranch=13
|
||||
#
|
||||
# Intentional padding to ensure it is possible to point a commit
|
||||
# to an alternative gerrit server/repository without breaking
|
||||
# cherry-pick between branches.
|
||||
#
|
||||
host=gerrit.asterisk.org
|
||||
port=29418
|
||||
project=asterisk.git
|
|
@ -0,0 +1 @@
|
|||
40
|
4
CREDITS
4
CREDITS
|
@ -22,7 +22,7 @@
|
|||
* John Todd, TalkPlus, Inc. and JR Richardson, Ntegrated Solutions.
|
||||
for funding the development of SIP Session Timers support.
|
||||
|
||||
* Omnitor AB, Gunnar Hellstr<EFBFBD>m, for funding work with videocaps,
|
||||
* Omnitor AB, Gunnar Hellström, for funding work with videocaps,
|
||||
T.140 RED, originate with video/text and many more
|
||||
contributions.
|
||||
|
||||
|
@ -252,7 +252,7 @@
|
|||
cdr_tds rewrite, countless other improvements, fixes, and good
|
||||
ideas. sean(AT)malleable.com
|
||||
|
||||
* Jan Kal<EFBFBD>b - Calendaring support for Exchange Server 2007+ via
|
||||
* Jan Kaláb - Calendaring support for Exchange Server 2007+ via
|
||||
Exchange Web Services.
|
||||
|
||||
* University of Oslo (uio.no), Norway - SIP Max-Forwards setting
|
||||
|
|
2
LICENSE
2
LICENSE
|
@ -25,7 +25,7 @@ GPL'd products (although if you've written a module for Asterisk we
|
|||
would strongly encourage you to make the same exception that we do).
|
||||
|
||||
Specific permission is also granted to link Asterisk with OpenSSL, OpenH323
|
||||
and/or the UW IMAP Toolkit and distribute the resulting binary files.
|
||||
UniMRCP, and/or the UW IMAP Toolkit and distribute the resulting binary files.
|
||||
|
||||
In addition, Asterisk implements several management/control protocols.
|
||||
This includes the Asterisk Manager Interface (AMI), the Asterisk Gateway
|
||||
|
|
542
Makefile
542
Makefile
|
@ -99,12 +99,22 @@ export WGET_EXTRA_ARGS
|
|||
export LDCONFIG
|
||||
export LDCONFIG_FLAGS
|
||||
export PYTHON
|
||||
export TAR
|
||||
export PATCH
|
||||
export SED
|
||||
export NM
|
||||
|
||||
-include makeopts
|
||||
# makeopts is required unless the goal is just {dist{-}}clean
|
||||
ifeq ($(MAKECMDGOALS),clean)
|
||||
else ifeq ($(MAKECMDGOALS),distclean)
|
||||
else ifeq ($(MAKECMDGOALS),dist-clean)
|
||||
else
|
||||
include makeopts
|
||||
endif
|
||||
|
||||
# start the primary CFLAGS and LDFLAGS with any that were provided
|
||||
# to the configure script
|
||||
_ASTCFLAGS:=$(CONFIG_CFLAGS)
|
||||
_ASTCFLAGS:=$(CONFIG_CFLAGS) $(CONFIG_SIGNED_CHAR)
|
||||
_ASTLDFLAGS:=$(CONFIG_LDFLAGS)
|
||||
|
||||
# Some build systems, such as the one in openwrt, like to pass custom target
|
||||
|
@ -117,6 +127,9 @@ _ASTLDFLAGS+=$(LDOPTS)
|
|||
# libxml2 cflags
|
||||
_ASTCFLAGS+=$(LIBXML2_INCLUDE)
|
||||
|
||||
# BIND_8_COMPAT
|
||||
_ASTCFLAGS+=$(BIND8_CFLAGS)
|
||||
|
||||
#Uncomment this to see all build commands instead of 'quiet' output
|
||||
#NOISY_BUILD=yes
|
||||
|
||||
|
@ -124,7 +137,7 @@ empty:=
|
|||
space:=$(empty) $(empty)
|
||||
ASTTOPDIR:=$(subst $(space),\$(space),$(CURDIR))
|
||||
|
||||
# Overwite config files on "make samples"
|
||||
# Overwite config files on "make samples" or other config installation targets
|
||||
OVERWRITE=y
|
||||
|
||||
# Include debug and macro symbols in the executables (-g) and profiling info (-pg)
|
||||
|
@ -151,16 +164,24 @@ LINKER_SYMBOL_PREFIX=
|
|||
# Uncomment this to use the older DSP routines
|
||||
#_ASTCFLAGS+=-DOLD_DSP_ROUTINES
|
||||
|
||||
# If the file .asterisk.makeopts is present in your home directory, you can
|
||||
# include all of your favorite menuselect options so that every time you download
|
||||
# a new version of Asterisk, you don't have to run menuselect to set them.
|
||||
# The file /etc/asterisk.makeopts will also be included but can be overridden
|
||||
# by the file in your home directory.
|
||||
|
||||
# Default install directory for DAHDI hooks.
|
||||
DAHDI_UDEV_HOOK_DIR = /usr/share/dahdi/span_config.d
|
||||
|
||||
GLOBAL_MAKEOPTS=$(wildcard /etc/asterisk.makeopts)
|
||||
USER_MAKEOPTS=$(wildcard ~/.asterisk.makeopts)
|
||||
# This Makefile previously contained a note about the ability to use .asterisk.makeopts
|
||||
# from your home directory or /etc/asterisk.makeopts to set defaults for menuselect.
|
||||
# These files have never worked in this branch of Asterisk. The work around is to
|
||||
# manually copy the file containing defaults before running 'make menuselect':
|
||||
#
|
||||
# cp ${HOME}/.asterisk.makeopts menuselect.makeopts
|
||||
# or
|
||||
# cp /etc/asterisk.makeopts menuselect.makeopts
|
||||
#
|
||||
# As an alternative, menuselect/menuselect can be used by a script to enable or disable
|
||||
# individual options or entire categories. To use this feature you must first
|
||||
# compile menuselect using 'make menuselect.makeopts'. For information about parameters
|
||||
# supported run:
|
||||
# menuselect/menuselect --help
|
||||
|
||||
|
||||
MOD_SUBDIR_CFLAGS="-I$(ASTTOPDIR)/include"
|
||||
OTHER_SUBDIR_CFLAGS="-I$(ASTTOPDIR)/include"
|
||||
|
@ -168,11 +189,6 @@ OTHER_SUBDIR_CFLAGS="-I$(ASTTOPDIR)/include"
|
|||
# Create OPTIONS variable, but probably we can assign directly to ASTCFLAGS
|
||||
OPTIONS=
|
||||
|
||||
ifeq ($(OSARCH),linux-gnu)
|
||||
# flag to tell 'ldconfig' to only process specified directories
|
||||
LDCONFIG_FLAGS=-n
|
||||
endif
|
||||
|
||||
ifeq ($(findstring -save-temps,$(_ASTCFLAGS) $(ASTCFLAGS)),)
|
||||
ifeq ($(findstring -pipe,$(_ASTCFLAGS) $(ASTCFLAGS)),)
|
||||
_ASTCFLAGS+=-pipe
|
||||
|
@ -183,7 +199,7 @@ ifeq ($(findstring -Wall,$(_ASTCFLAGS) $(ASTCFLAGS)),)
|
|||
_ASTCFLAGS+=-Wall
|
||||
endif
|
||||
|
||||
_ASTCFLAGS+=-Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations $(AST_NESTED_FUNCTIONS) $(DEBUG)
|
||||
_ASTCFLAGS+=-Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations $(AST_NESTED_FUNCTIONS) $(AST_CLANG_BLOCKS) $(DEBUG)
|
||||
ADDL_TARGETS=
|
||||
|
||||
ifeq ($(AST_DEVMODE),yes)
|
||||
|
@ -197,10 +213,14 @@ ifeq ($(AST_DEVMODE),yes)
|
|||
ifeq ($(AST_DEVMODE_STRICT),yes)
|
||||
_ASTCFLAGS+=-Wshadow
|
||||
endif
|
||||
ADDL_TARGETS+=validate-docs
|
||||
ifneq ($(DISABLE_XMLDOC),yes)
|
||||
ADDL_TARGETS+=validate-docs
|
||||
endif
|
||||
endif
|
||||
|
||||
ifneq ($(findstring BSD,$(OSARCH)),)
|
||||
ifeq ($(OSARCH),NetBSD)
|
||||
_ASTCFLAGS+=-isystem /usr/pkg/include
|
||||
else ifneq ($(findstring BSD,$(OSARCH)),)
|
||||
_ASTCFLAGS+=-isystem /usr/local/include
|
||||
endif
|
||||
|
||||
|
@ -208,23 +228,27 @@ ifeq ($(OSARCH),FreeBSD)
|
|||
# -V is understood by BSD Make, not by GNU make.
|
||||
BSDVERSION=$(shell make -V OSVERSION -f /usr/share/mk/bsd.port.subdir.mk)
|
||||
_ASTCFLAGS+=$(shell if test $(BSDVERSION) -lt 500016 ; then echo "-D_THREAD_SAFE"; fi)
|
||||
# flag to tell 'ldconfig' to only process specified directories
|
||||
LDCONFIG_FLAGS=-m
|
||||
endif
|
||||
|
||||
ifeq ($(OSARCH),NetBSD)
|
||||
_ASTCFLAGS+=-pthread -I/usr/pkg/include
|
||||
_ASTCFLAGS+=-pthread -D__LIBPTHREAD_SOURCE__ -I/usr/pkg/include
|
||||
endif
|
||||
|
||||
ifeq ($(OSARCH),OpenBSD)
|
||||
_ASTCFLAGS+=-pthread -ftrampolines
|
||||
endif
|
||||
|
||||
ifeq ($(OSARCH),linux-uclibc)
|
||||
AST_LIBS+=-lpthread -ldl
|
||||
endif
|
||||
|
||||
ifeq ($(OSARCH),SunOS)
|
||||
_ASTCFLAGS+=-Wcast-align -DSOLARIS -I../include/solaris-compat -I/opt/ssl/include -I/usr/local/ssl/include -D_XPG4_2 -D__EXTENSIONS__
|
||||
endif
|
||||
|
||||
ifneq ($(GREP),)
|
||||
ifeq ($(GREP),)
|
||||
else ifeq ($(GREP),:)
|
||||
else
|
||||
ASTERISKVERSION:=$(shell GREP=$(GREP) AWK=$(AWK) GIT=$(GIT) build_tools/make_version .)
|
||||
endif
|
||||
ifneq ($(AWK),)
|
||||
|
@ -237,32 +261,39 @@ ifneq ($(wildcard .svn),)
|
|||
ASTERISKVERSIONNUM:=999999
|
||||
endif
|
||||
|
||||
ifneq ($(DISABLE_XMLDOC),yes)
|
||||
CORE_XMLDOC=doc/core-en_US.xml
|
||||
FULL_XMLDOC=doc/full-en_US.xml
|
||||
else
|
||||
CORE_XMLDOC=
|
||||
FULL_XMLDOC=
|
||||
endif
|
||||
|
||||
_ASTCFLAGS+=$(OPTIONS)
|
||||
|
||||
MOD_SUBDIRS:=channels pbx apps codecs formats cdr cel bridges funcs tests main res addons $(LOCAL_MOD_SUBDIRS)
|
||||
OTHER_SUBDIRS:=utils agi
|
||||
MOD_SUBDIRS:=third-party channels pbx apps codecs formats cdr cel bridges funcs tests main res addons $(LOCAL_MOD_SUBDIRS)
|
||||
OTHER_SUBDIRS:=utils agi contrib
|
||||
SUBDIRS:=$(OTHER_SUBDIRS) $(MOD_SUBDIRS)
|
||||
SUBDIRS_INSTALL:=$(SUBDIRS:%=%-install)
|
||||
SUBDIRS_CLEAN:=$(SUBDIRS:%=%-clean)
|
||||
SUBDIRS_DIST_CLEAN:=$(SUBDIRS:%=%-dist-clean)
|
||||
SUBDIRS_UNINSTALL:=$(SUBDIRS:%=%-uninstall)
|
||||
MOD_SUBDIRS_EMBED_LDSCRIPT:=$(MOD_SUBDIRS:%=%-embed-ldscript)
|
||||
MOD_SUBDIRS_EMBED_LDFLAGS:=$(MOD_SUBDIRS:%=%-embed-ldflags)
|
||||
MOD_SUBDIRS_EMBED_LIBS:=$(MOD_SUBDIRS:%=%-embed-libs)
|
||||
MOD_SUBDIRS_MENUSELECT_TREE:=$(MOD_SUBDIRS:%=%-menuselect-tree)
|
||||
|
||||
ifneq ($(findstring darwin,$(OSARCH)),)
|
||||
_ASTCFLAGS+=-D__Darwin__ -mmacosx-version-min=10.6
|
||||
_SOLINK=-mmacosx-version-min=10.6 -Xlinker -undefined -Xlinker dynamic_lookup
|
||||
_SOLINK=-mmacosx-version-min=10.6 -Wl,-undefined,dynamic_lookup
|
||||
_SOLINK+=/usr/lib/bundle1.o
|
||||
SOLINK=-bundle $(_SOLINK)
|
||||
DYLINK=-Xlinker -dylib $(_SOLINK)
|
||||
DYLINK=-Wl,-dylib $(_SOLINK)
|
||||
_ASTLDFLAGS+=-L/usr/local/lib
|
||||
else
|
||||
# These are used for all but Darwin
|
||||
SOLINK=-shared
|
||||
DYLINK=$(SOLINK)
|
||||
ifneq ($(findstring BSD,$(OSARCH)),)
|
||||
ifeq ($(OSARCH),NetBSD)
|
||||
_ASTLDFLAGS+=-L/usr/pkg/lib
|
||||
else ifneq ($(findstring BSD,$(OSARCH)),)
|
||||
_ASTLDFLAGS+=-L/usr/local/lib
|
||||
endif
|
||||
endif
|
||||
|
@ -320,9 +351,9 @@ full: _full
|
|||
@echo " +-------------------------------------------+"
|
||||
|
||||
|
||||
_all: makeopts $(SUBDIRS) doc/core-en_US.xml $(ADDL_TARGETS)
|
||||
_all: makeopts $(SUBDIRS) $(CORE_XMLDOC) $(ADDL_TARGETS)
|
||||
|
||||
_full: makeopts $(SUBDIRS) doc/full-en_US.xml $(ADDL_TARGETS)
|
||||
_full: makeopts $(SUBDIRS) $(FULL_XMLDOC) $(ADDL_TARGETS)
|
||||
|
||||
makeopts: configure
|
||||
@echo "****"
|
||||
|
@ -331,45 +362,20 @@ makeopts: configure
|
|||
@echo "****"
|
||||
@exit 1
|
||||
|
||||
menuselect.makeopts: menuselect/menuselect menuselect-tree makeopts build_tools/menuselect-deps $(GLOBAL_MAKEOPTS) $(USER_MAKEOPTS)
|
||||
menuselect.makeopts: menuselect/menuselect menuselect-tree makeopts build_tools/menuselect-deps
|
||||
ifeq ($(filter %menuselect,$(MAKECMDGOALS)),)
|
||||
menuselect/menuselect --check-deps $@
|
||||
menuselect/menuselect --check-deps $@ $(GLOBAL_MAKEOPTS) $(USER_MAKEOPTS)
|
||||
menuselect/menuselect --check-deps $@
|
||||
endif
|
||||
|
||||
$(MOD_SUBDIRS_EMBED_LDSCRIPT):
|
||||
+@echo "EMBED_LDSCRIPTS+="`$(SILENTMAKE) -C $(@:-embed-ldscript=) SUBDIR=$(@:-embed-ldscript=) __embed_ldscript` >> makeopts.embed_rules
|
||||
|
||||
$(MOD_SUBDIRS_EMBED_LDFLAGS):
|
||||
+@echo "EMBED_LDFLAGS+="`$(SILENTMAKE) -C $(@:-embed-ldflags=) SUBDIR=$(@:-embed-ldflags=) __embed_ldflags` >> makeopts.embed_rules
|
||||
|
||||
$(MOD_SUBDIRS_EMBED_LIBS):
|
||||
+@echo "EMBED_LIBS+="`$(SILENTMAKE) -C $(@:-embed-libs=) SUBDIR=$(@:-embed-libs=) __embed_libs` >> makeopts.embed_rules
|
||||
|
||||
$(MOD_SUBDIRS_MENUSELECT_TREE):
|
||||
+@$(SUBMAKE) -C $(@:-menuselect-tree=) SUBDIR=$(@:-menuselect-tree=) moduleinfo
|
||||
+@$(SUBMAKE) -C $(@:-menuselect-tree=) SUBDIR=$(@:-menuselect-tree=) makeopts
|
||||
|
||||
makeopts.embed_rules: menuselect.makeopts
|
||||
@echo "Generating embedded module rules ..."
|
||||
@rm -f $@
|
||||
+@$(SUBMAKE) $(MOD_SUBDIRS_EMBED_LDSCRIPT)
|
||||
+@$(SUBMAKE) $(MOD_SUBDIRS_EMBED_LDFLAGS)
|
||||
+@$(SUBMAKE) $(MOD_SUBDIRS_EMBED_LIBS)
|
||||
|
||||
$(SUBDIRS): makeopts .lastclean main/version.c include/asterisk/build.h include/asterisk/buildopts.h defaults.h makeopts.embed_rules
|
||||
$(SUBDIRS): makeopts .lastclean main/version.c include/asterisk/build.h include/asterisk/buildopts.h defaults.h
|
||||
|
||||
ifeq ($(findstring $(OSARCH), mingw32 cygwin ),)
|
||||
ifeq ($(shell grep ^MENUSELECT_EMBED=$$ menuselect.makeopts 2>/dev/null),)
|
||||
# Non-windows:
|
||||
# ensure that all module subdirectories are processed before 'main' during
|
||||
# a parallel build, since if there are modules selected to be embedded the
|
||||
# directories containing them must be completed before the main Asterisk
|
||||
# binary can be built.
|
||||
# If MENUSELECT_EMBED is empty, we don't need this and allow 'main' to be
|
||||
# be built without building all dependencies first.
|
||||
main: $(filter-out main,$(MOD_SUBDIRS))
|
||||
endif
|
||||
main: third-party
|
||||
else
|
||||
# Windows: we need to build main (i.e. the asterisk dll) first,
|
||||
# followed by res, followed by the other directories, because
|
||||
|
@ -392,7 +398,7 @@ defaults.h: makeopts .lastclean build_tools/make_defaults_h
|
|||
@cmp -s $@.tmp $@ || mv $@.tmp $@
|
||||
@rm -f $@.tmp
|
||||
|
||||
main/version.c: FORCE .lastclean
|
||||
main/version.c: FORCE menuselect.makeopts .lastclean
|
||||
@build_tools/make_version_c > $@.tmp
|
||||
@cmp -s $@.tmp $@ || mv $@.tmp $@
|
||||
@rm -f $@.tmp
|
||||
|
@ -422,6 +428,8 @@ _clean:
|
|||
rm -f doc/core-en_US.xml
|
||||
rm -f doc/full-en_US.xml
|
||||
rm -f doc/rest-api/*.wiki
|
||||
rm -f doxygen.log
|
||||
rm -rf latex
|
||||
rm -f rest-api-templates/*.pyc
|
||||
@$(MAKE) -C menuselect clean
|
||||
cp -f .cleancount .lastclean
|
||||
|
@ -432,15 +440,15 @@ distclean: $(SUBDIRS_DIST_CLEAN) _clean
|
|||
@$(MAKE) -C menuselect dist-clean
|
||||
@$(MAKE) -C sounds dist-clean
|
||||
rm -f menuselect.makeopts makeopts menuselect-tree menuselect.makedeps
|
||||
rm -f makeopts.embed_rules
|
||||
rm -f config.log config.status config.cache
|
||||
rm -rf autom4te.cache
|
||||
rm -f include/asterisk/autoconfig.h
|
||||
rm -f include/asterisk/buildopts.h
|
||||
rm -rf doc/api
|
||||
rm -f doc/asterisk-ng-doxygen
|
||||
rm -f build_tools/menuselect-deps
|
||||
|
||||
datafiles: _all doc/core-en_US.xml
|
||||
datafiles: _all $(CORE_XMLDOC)
|
||||
CFLAGS="$(_ASTCFLAGS) $(ASTCFLAGS)" build_tools/mkpkgconfig "$(DESTDIR)$(libdir)/pkgconfig";
|
||||
|
||||
# # Recursively install contents of the static-http directory, in case
|
||||
|
@ -452,8 +460,10 @@ datafiles: _all doc/core-en_US.xml
|
|||
$(INSTALL) -m 644 $$x "$(DESTDIR)$(ASTDATADIR)/$$x" ; \
|
||||
fi \
|
||||
done
|
||||
ifneq ($(DISABLE_XMLDOC),yes)
|
||||
$(INSTALL) -m 644 doc/core-en_US.xml "$(DESTDIR)$(ASTDATADIR)/static-http";
|
||||
$(INSTALL) -m 644 doc/appdocsxml.xslt "$(DESTDIR)$(ASTDATADIR)/static-http";
|
||||
endif
|
||||
if [ -d doc/tex/asterisk ] ; then \
|
||||
$(INSTALL) -d "$(DESTDIR)$(ASTDATADIR)/static-http/docs" ; \
|
||||
for n in doc/tex/asterisk/* ; do \
|
||||
|
@ -468,7 +478,9 @@ datafiles: _all doc/core-en_US.xml
|
|||
$(INSTALL) -m 644 $$x "$(DESTDIR)$(ASTDATADIR)/rest-api" ; \
|
||||
done
|
||||
|
||||
ifneq ($(GREP),)
|
||||
ifeq ($(GREP),)
|
||||
else ifeq ($(GREP),:)
|
||||
else
|
||||
XML_core_en_US = $(foreach dir,$(MOD_SUBDIRS),$(shell $(GREP) -l "language=\"en_US\"" $(dir)/*.c $(dir)/*.cc 2>/dev/null))
|
||||
endif
|
||||
|
||||
|
@ -476,7 +488,7 @@ doc/core-en_US.xml: makeopts .lastclean $(XML_core_en_US)
|
|||
@printf "Building Documentation For: "
|
||||
@echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" > $@
|
||||
@echo "<!DOCTYPE docs SYSTEM \"appdocsxml.dtd\">" >> $@
|
||||
@echo "<?xml-stylesheet type=\"text/xsl\" href=\"appdocsxml.xslt\"?>" > $@
|
||||
@echo "<?xml-stylesheet type=\"text/xsl\" href=\"appdocsxml.xslt\"?>" >> $@
|
||||
@echo "<docs xmlns:xi=\"http://www.w3.org/2001/XInclude\">" >> $@
|
||||
@for x in $(MOD_SUBDIRS); do \
|
||||
printf "$$x " ; \
|
||||
|
@ -487,7 +499,9 @@ doc/core-en_US.xml: makeopts .lastclean $(XML_core_en_US)
|
|||
@echo
|
||||
@echo "</docs>" >> $@
|
||||
|
||||
ifneq ($(GREP),)
|
||||
ifeq ($(GREP),)
|
||||
else ifeq ($(GREP),:)
|
||||
else
|
||||
XML_full_en_US = $(foreach dir,$(MOD_SUBDIRS),$(shell $(GREP) -l "language=\"en_US\"" $(dir)/*.c $(dir)/*.cc 2>/dev/null))
|
||||
endif
|
||||
|
||||
|
@ -500,9 +514,9 @@ else
|
|||
@printf "Building Documentation For: "
|
||||
@echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" > $@
|
||||
@echo "<!DOCTYPE docs SYSTEM \"appdocsxml.dtd\">" >> $@
|
||||
@echo "<?xml-stylesheet type=\"text/xsl\" href=\"appdocsxml.xslt\"?>" > $@
|
||||
@echo "<?xml-stylesheet type=\"text/xsl\" href=\"appdocsxml.xslt\"?>" >> $@
|
||||
@echo "<docs xmlns:xi=\"http://www.w3.org/2001/XInclude\">" >> $@
|
||||
@for x in $(MOD_SUBDIRS); do \
|
||||
@for x in $(filter-out third-party,$(MOD_SUBDIRS)); do \
|
||||
printf "$$x " ; \
|
||||
for i in `find $$x -name '*.c'`; do \
|
||||
$(PYTHON) build_tools/get_documentation.py < $$i >> $@ ; \
|
||||
|
@ -549,13 +563,13 @@ INSTALLDIRS="$(ASTLIBDIR)" "$(ASTMODDIR)" "$(ASTSBINDIR)" "$(ASTETCDIR)" "$(ASTV
|
|||
"$(ASTSPOOLDIR)" "$(ASTSPOOLDIR)/dictate" "$(ASTSPOOLDIR)/meetme" \
|
||||
"$(ASTSPOOLDIR)/monitor" "$(ASTSPOOLDIR)/system" "$(ASTSPOOLDIR)/tmp" \
|
||||
"$(ASTSPOOLDIR)/voicemail" "$(ASTSPOOLDIR)/recording" \
|
||||
"$(ASTHEADERDIR)" "$(ASTHEADERDIR)/doxygen" \
|
||||
"$(ASTLOGDIR)" "$(ASTLOGDIR)/cdr-csv" "$(ASTLOGDIR)/cdr-custom" \
|
||||
"$(ASTLOGDIR)/cel-custom" "$(ASTDATADIR)" "$(ASTDATADIR)/documentation" \
|
||||
"$(ASTDATADIR)/documentation/thirdparty" "$(ASTDATADIR)/firmware" \
|
||||
"$(ASTDATADIR)/firmware/iax" "$(ASTDATADIR)/images" "$(ASTDATADIR)/keys" \
|
||||
"$(ASTDATADIR)/phoneprov" "$(ASTDATADIR)/rest-api" "$(ASTDATADIR)/static-http" \
|
||||
"$(ASTDATADIR)/sounds" "$(ASTDATADIR)/moh" "$(ASTMANDIR)/man8" "$(AGI_DIR)" "$(ASTDBDIR)"
|
||||
"$(ASTDATADIR)/sounds" "$(ASTDATADIR)/moh" "$(ASTMANDIR)/man8" "$(AGI_DIR)" "$(ASTDBDIR)" \
|
||||
"$(ASTDATADIR)/third-party"
|
||||
|
||||
installdirs:
|
||||
@for i in $(INSTALLDIRS); do \
|
||||
|
@ -567,22 +581,19 @@ installdirs:
|
|||
main-bininstall:
|
||||
+@DESTDIR="$(DESTDIR)" ASTSBINDIR="$(ASTSBINDIR)" ASTLIBDIR="$(ASTLIBDIR)" $(SUBMAKE) -C main bininstall
|
||||
|
||||
bininstall: _all installdirs $(SUBDIRS_INSTALL) main-bininstall
|
||||
bininstall: _all installdirs $(SUBDIRS_INSTALL) main-bininstall install-headers
|
||||
$(INSTALL) -m 755 contrib/scripts/astversion "$(DESTDIR)$(ASTSBINDIR)/"
|
||||
$(INSTALL) -m 755 contrib/scripts/astgenkey "$(DESTDIR)$(ASTSBINDIR)/"
|
||||
$(INSTALL) -m 755 contrib/scripts/autosupport "$(DESTDIR)$(ASTSBINDIR)/"
|
||||
if [ ! -f /sbin/launchd ]; then \
|
||||
./build_tools/install_subst contrib/scripts/safe_asterisk "$(DESTDIR)$(ASTSBINDIR)/safe_asterisk"; \
|
||||
fi
|
||||
$(INSTALL) -m 644 include/asterisk.h "$(DESTDIR)$(includedir)"
|
||||
$(INSTALL) -m 644 include/asterisk/*.h "$(DESTDIR)$(ASTHEADERDIR)"
|
||||
$(INSTALL) -m 644 include/asterisk/doxygen/*.h "$(DESTDIR)$(ASTHEADERDIR)/doxygen"
|
||||
if [ -n "$(OLDHEADERS)" ]; then \
|
||||
for h in $(OLDHEADERS); do rm -f "$(DESTDIR)$(ASTHEADERDIR)/$$h"; done \
|
||||
fi
|
||||
|
||||
ifneq ($(DISABLE_XMLDOC),yes)
|
||||
$(INSTALL) -m 644 doc/core-*.xml "$(DESTDIR)$(ASTDATADIR)/documentation"
|
||||
$(INSTALL) -m 644 doc/appdocsxml.xslt "$(DESTDIR)$(ASTDATADIR)/documentation"
|
||||
$(INSTALL) -m 644 doc/appdocsxml.dtd "$(DESTDIR)$(ASTDATADIR)/documentation"
|
||||
endif
|
||||
$(INSTALL) -m 644 doc/asterisk.8 "$(DESTDIR)$(ASTMANDIR)/man8"
|
||||
$(INSTALL) -m 644 doc/astdb*.8 "$(DESTDIR)$(ASTMANDIR)/man8"
|
||||
$(INSTALL) -m 644 contrib/scripts/astgenkey.8 "$(DESTDIR)$(ASTMANDIR)/man8"
|
||||
|
@ -591,17 +602,25 @@ bininstall: _all installdirs $(SUBDIRS_INSTALL) main-bininstall
|
|||
if [ -f contrib/firmware/iax/iaxy.bin ] ; then \
|
||||
$(INSTALL) -m 644 contrib/firmware/iax/iaxy.bin "$(DESTDIR)$(ASTDATADIR)/firmware/iax/iaxy.bin"; \
|
||||
fi
|
||||
ifeq ($(HAVE_DAHDI),1)
|
||||
$(INSTALL) -d $(DESTDIR)/$(DAHDI_UDEV_HOOK_DIR)
|
||||
$(INSTALL) -m 644 contrib/scripts/dahdi_span_config_hook $(DESTDIR)$(DAHDI_UDEV_HOOK_DIR)/40-asterisk
|
||||
endif
|
||||
|
||||
$(SUBDIRS_INSTALL):
|
||||
+@DESTDIR="$(DESTDIR)" ASTSBINDIR="$(ASTSBINDIR)" $(SUBMAKE) -C $(@:-install=) install
|
||||
+@DESTDIR="$(DESTDIR)" ASTSBINDIR="$(ASTSBINDIR)" ASTDATADIR="$(ASTDATADIR)" $(SUBMAKE) -C $(@:-install=) install
|
||||
|
||||
NEWMODS:=$(foreach d,$(MOD_SUBDIRS),$(notdir $(wildcard $(d)/*.so)))
|
||||
OLDMODS=$(filter-out $(NEWMODS) $(notdir $(DESTDIR)$(ASTMODDIR)),$(notdir $(wildcard $(DESTDIR)$(ASTMODDIR)/*.so)))
|
||||
ifneq ($(BASH),:)
|
||||
FILMODS=$(filter-out $(shell ./build_tools/list_valid_installed_externals),$(OLDMODS))
|
||||
else
|
||||
FILMODS=$(OLDMODS)
|
||||
endif
|
||||
BADMODS=$(strip $(FILMODS))
|
||||
|
||||
oldmodcheck:
|
||||
@if [ -n "$(OLDMODS)" ]; then \
|
||||
@if [ -n "$(BADMODS)" ]; then \
|
||||
echo " WARNING WARNING WARNING" ;\
|
||||
echo "" ;\
|
||||
echo " Your Asterisk modules directory, located at" ;\
|
||||
|
@ -611,15 +630,91 @@ oldmodcheck:
|
|||
echo " modules are compatible with this version before" ;\
|
||||
echo " attempting to run Asterisk." ;\
|
||||
echo "" ;\
|
||||
for f in $(OLDMODS); do \
|
||||
for f in $(BADMODS); do \
|
||||
echo " $$f" ;\
|
||||
done ;\
|
||||
echo "" ;\
|
||||
echo " WARNING WARNING WARNING" ;\
|
||||
fi
|
||||
|
||||
ld-cache-update:
|
||||
ifeq ($(LDCONFIG),)
|
||||
else ifeq ($(LDCONFIG),:)
|
||||
else
|
||||
ifeq ($(DESTDIR),) # DESTDIR means binary archive creation; ldconfig should be run on postinst
|
||||
@if [ $$(id -u) -eq 0 ] ; then \
|
||||
$(LDCONFIG) "$(ASTLIBDIR)/" ; \
|
||||
else \
|
||||
echo " WARNING WARNING WARNING" ;\
|
||||
echo "" ;\
|
||||
echo " You cannot rebuild the system linker cache unless you are root. " ;\
|
||||
echo " You MUST do one of the following..." ;\
|
||||
echo " * Re-run 'make install' as root. " ;\
|
||||
echo " * Run 'ldconfig $(ASTLIBDIR)' as root. " ;\
|
||||
echo " * Run asterisk with 'LD_LIBRARY_PATH=$(ASTLIBDIR) asterisk' " ;\
|
||||
echo "" ;\
|
||||
echo " WARNING WARNING WARNING" ;\
|
||||
fi
|
||||
endif
|
||||
endif
|
||||
|
||||
export _oldlibdir =
|
||||
export _oldmoddir =
|
||||
ifeq ($(findstring 64,$(HOST_CPU)),64)
|
||||
# Strip any trailing '/' so the dir and notdir functions work correctly
|
||||
_current_libdir = $(patsubst %/,%,$(DESTDIR)$(ASTLIBDIR))
|
||||
|
||||
# Only process if the paths end in lib64 or lib.
|
||||
# If we're installing to lib64, check lib for orphans.
|
||||
# If we're installing to lib, check lib64 for orphans.
|
||||
# Otherwise, leave _oldlibdir empty.
|
||||
ifeq ($(notdir $(_current_libdir)),lib64)
|
||||
_oldlibdir = $(dir $(_current_libdir))lib
|
||||
else ifeq ($(notdir $(_current_libdir)),lib)
|
||||
_oldlibdir = $(dir $(_current_libdir))lib64
|
||||
endif
|
||||
|
||||
# Strip any trailing '/' so the dir and notdir functions work correctly
|
||||
_current_moddir = $(patsubst %/,%,$(DESTDIR)$(ASTMODDIR))
|
||||
|
||||
# Only process if the paths contain /lib64/ or /lib/.
|
||||
# If we're installing to lib64, check lib for orphans.
|
||||
# If we're installing to lib, check lib64 for orphans.
|
||||
# Otherwise, leave _oldmoddir empty.
|
||||
ifeq ($(findstring /lib64/,$(_current_moddir)),/lib64/)
|
||||
_oldmoddir = $(subst /lib64/,/lib/,$(_current_moddir))
|
||||
else ifeq ($(findstring /lib/,$(_current_moddir)),/lib/)
|
||||
_oldmoddir = $(subst /lib/,/lib64/,$(_current_moddir))
|
||||
endif
|
||||
endif
|
||||
|
||||
check-old-libdir:
|
||||
@test -n "$(_oldlibdir)" -a -d "$(_oldlibdir)" || exit 0 ;\
|
||||
oldfiles=`find "$(_oldlibdir)" -name libasterisk* -print -quit -o \( -path *asterisk/modules/* -a -name *.so \) -print -quit 2>/dev/null` ;\
|
||||
if [ "x$$oldfiles" != "x" ] ; then \
|
||||
echo " WARNING WARNING WARNING" ;\
|
||||
echo "" ;\
|
||||
echo " Installation is to: " ;\
|
||||
echo " $(DESTDIR)$(ASTLIBDIR)" ;\
|
||||
echo " but there are asterisk shared libraries in: " ;\
|
||||
echo " $(_oldlibdir)" ;\
|
||||
echo " or" ;\
|
||||
echo " $(_oldlibdir)/asterisk/modules" ;\
|
||||
echo "" ;\
|
||||
echo " It is unlikely that asterisk will start." ;\
|
||||
echo "" ;\
|
||||
echo " You should do one of the following..." ;\
|
||||
echo " * Run 'make uninstall' to remove the incorrect libraries" ;\
|
||||
echo " then run 'make install' again." ;\
|
||||
echo " * Manually remove the libraries from" ;\
|
||||
echo " $(_oldlibdir)" ;\
|
||||
echo " and run 'ldconfig' to rebuild the linker cache." ;\
|
||||
echo "" ;\
|
||||
echo " WARNING WARNING WARNING" ;\
|
||||
fi
|
||||
|
||||
badshell:
|
||||
ifneq ($(findstring ~,$(DESTDIR)),)
|
||||
ifneq ($(filter ~%,$(DESTDIR)),)
|
||||
@echo "Your shell doesn't do ~ expansion when expected (specifically, when doing \"make install DESTDIR=~/path\")."
|
||||
@echo "Try replacing ~ with \$$HOME, as in \"make install DESTDIR=\$$HOME/path\"."
|
||||
@exit 1
|
||||
|
@ -638,7 +733,12 @@ install: badshell bininstall datafiles
|
|||
@echo " + configuration files (overwriting any +"
|
||||
@echo " + existing config files), run: +"
|
||||
@echo " + +"
|
||||
@echo " + $(mK) samples +"
|
||||
@echo " + For generic reference documentation: +"
|
||||
@echo " + $(mK) samples +"
|
||||
@echo " + +"
|
||||
@echo " + For a sample basic PBX: +"
|
||||
@echo " + $(mK) basic-pbx +"
|
||||
@echo " + +"
|
||||
@echo " + +"
|
||||
@echo " +----------------- or ---------------------+"
|
||||
@echo " + +"
|
||||
|
@ -651,11 +751,73 @@ install: badshell bininstall datafiles
|
|||
@echo " + doxygen installed on your local system +"
|
||||
@echo " +-------------------------------------------+"
|
||||
@$(MAKE) -s oldmodcheck
|
||||
@$(MAKE) -s ld-cache-update
|
||||
@$(MAKE) -s check-old-libdir
|
||||
|
||||
isntall: install
|
||||
|
||||
upgrade: bininstall
|
||||
|
||||
|
||||
# Install configuration files from the specified directory
|
||||
# Parameters:
|
||||
# (1) the configuration directory to install from
|
||||
# (2) the extension to strip off
|
||||
define INSTALL_CONFIGS
|
||||
@for x in $(1)/*$(2); do \
|
||||
dst="$(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x $(2)`"; \
|
||||
if [ -f "$${dst}" ]; then \
|
||||
if [ "$(OVERWRITE)" = "y" ]; then \
|
||||
if cmp -s "$${dst}" "$$x" ; then \
|
||||
echo "Config file $$x is unchanged"; \
|
||||
continue; \
|
||||
fi ; \
|
||||
mv -f "$${dst}" "$${dst}.old" ; \
|
||||
else \
|
||||
echo "Skipping config file $$x"; \
|
||||
continue; \
|
||||
fi ;\
|
||||
fi ; \
|
||||
echo "Installing file $$x"; \
|
||||
$(INSTALL) -m 644 "$$x" "$${dst}" ;\
|
||||
done ; \
|
||||
if [ "$(OVERWRITE)" = "y" ]; then \
|
||||
echo "Updating asterisk.conf" ; \
|
||||
sed -e 's|^astetcdir.*$$|astetcdir => $(ASTETCDIR)|' \
|
||||
-e 's|^astmoddir.*$$|astmoddir => $(ASTMODDIR)|' \
|
||||
-e 's|^astvarlibdir.*$$|astvarlibdir => $(ASTVARLIBDIR)|' \
|
||||
-e 's|^astdbdir.*$$|astdbdir => $(ASTDBDIR)|' \
|
||||
-e 's|^astkeydir.*$$|astkeydir => $(ASTKEYDIR)|' \
|
||||
-e 's|^astdatadir.*$$|astdatadir => $(ASTDATADIR)|' \
|
||||
-e 's|^astagidir.*$$|astagidir => $(AGI_DIR)|' \
|
||||
-e 's|^astspooldir.*$$|astspooldir => $(ASTSPOOLDIR)|' \
|
||||
-e 's|^astrundir.*$$|astrundir => $(ASTVARRUNDIR)|' \
|
||||
-e 's|^astlogdir.*$$|astlogdir => $(ASTLOGDIR)|' \
|
||||
-e 's|^astsbindir.*$$|astsbindir => $(ASTSBINDIR)|' \
|
||||
"$(DESTDIR)$(ASTCONFPATH)" > "$(DESTDIR)$(ASTCONFPATH).tmp" ; \
|
||||
$(INSTALL) -m 644 "$(DESTDIR)$(ASTCONFPATH).tmp" "$(DESTDIR)$(ASTCONFPATH)" ; \
|
||||
rm -f "$(DESTDIR)$(ASTCONFPATH).tmp" ; \
|
||||
fi
|
||||
endef
|
||||
|
||||
install-headers:
|
||||
# Will create all components of "$(DESTDIR)$(ASTHEADERDIR)/doxygen" including "$(DESTDIR)$(includedir)"
|
||||
$(INSTALL) -d "$(DESTDIR)$(ASTHEADERDIR)/doxygen"
|
||||
$(INSTALL) -m 644 include/asterisk.h "$(DESTDIR)$(includedir)"
|
||||
$(INSTALL) -m 644 include/asterisk/*.h "$(DESTDIR)$(ASTHEADERDIR)"
|
||||
$(INSTALL) -m 644 include/asterisk/doxygen/*.h "$(DESTDIR)$(ASTHEADERDIR)/doxygen"
|
||||
if [ -n "$(OLDHEADERS)" ]; then \
|
||||
for h in $(OLDHEADERS); do rm -f "$(DESTDIR)$(ASTHEADERDIR)/$$h"; done \
|
||||
fi
|
||||
|
||||
install-configs:
|
||||
@if test -z "$(CONFIG_SRC)" -o ! -d "$(CONFIG_SRC)"; then \
|
||||
>&2 echo "CONFIG_SRC must be set to a directory."; \
|
||||
exit 1; \
|
||||
fi
|
||||
@echo "Installing config files from $(CONFIG_SRC)/*$(CONFIG_EXTEN)"
|
||||
$(call INSTALL_CONFIGS,$(CONFIG_SRC),$(CONFIG_EXTEN))
|
||||
|
||||
# XXX why *.adsi is installed first ?
|
||||
adsi:
|
||||
@echo Installing adsi config files...
|
||||
|
@ -672,43 +834,9 @@ adsi:
|
|||
|
||||
samples: adsi
|
||||
@echo Installing other config files...
|
||||
@for x in configs/samples/*.sample; do \
|
||||
dst="$(DESTDIR)$(ASTETCDIR)/`$(BASENAME) $$x .sample`" ; \
|
||||
if [ -f "$${dst}" ]; then \
|
||||
if [ "$(OVERWRITE)" = "y" ]; then \
|
||||
if cmp -s "$${dst}" "$$x" ; then \
|
||||
echo "Config file $$x is unchanged"; \
|
||||
continue; \
|
||||
fi ; \
|
||||
mv -f "$${dst}" "$${dst}.old" ; \
|
||||
else \
|
||||
echo "Skipping config file $$x"; \
|
||||
continue; \
|
||||
fi ;\
|
||||
fi ; \
|
||||
echo "Installing file $$x"; \
|
||||
$(INSTALL) -m 644 "$$x" "$${dst}" ;\
|
||||
done
|
||||
if [ "$(OVERWRITE)" = "y" ]; then \
|
||||
echo "Updating asterisk.conf" ; \
|
||||
sed -e 's|^astetcdir.*$$|astetcdir => $(ASTETCDIR)|' \
|
||||
-e 's|^astmoddir.*$$|astmoddir => $(ASTMODDIR)|' \
|
||||
-e 's|^astvarlibdir.*$$|astvarlibdir => $(ASTVARLIBDIR)|' \
|
||||
-e 's|^astdbdir.*$$|astdbdir => $(ASTDBDIR)|' \
|
||||
-e 's|^astkeydir.*$$|astkeydir => $(ASTKEYDIR)|' \
|
||||
-e 's|^astdatadir.*$$|astdatadir => $(ASTDATADIR)|' \
|
||||
-e 's|^astagidir.*$$|astagidir => $(AGI_DIR)|' \
|
||||
-e 's|^astspooldir.*$$|astspooldir => $(ASTSPOOLDIR)|' \
|
||||
-e 's|^astrundir.*$$|astrundir => $(ASTVARRUNDIR)|' \
|
||||
-e 's|^astlogdir.*$$|astlogdir => $(ASTLOGDIR)|' \
|
||||
-e 's|^astsbindir.*$$|astsbindir => $(ASTSBINDIR)|' \
|
||||
"$(DESTDIR)$(ASTCONFPATH)" > "$(DESTDIR)$(ASTCONFPATH).tmp" ; \
|
||||
$(INSTALL) -m 644 "$(DESTDIR)$(ASTCONFPATH).tmp" "$(DESTDIR)$(ASTCONFPATH)" ; \
|
||||
rm -f "$(DESTDIR)$(ASTCONFPATH).tmp" ; \
|
||||
fi ; \
|
||||
$(call INSTALL_CONFIGS,configs/samples,.sample)
|
||||
$(INSTALL) -d "$(DESTDIR)$(ASTSPOOLDIR)/voicemail/default/1234/INBOX"
|
||||
build_tools/make_sample_voicemail "$(DESTDIR)/$(ASTDATADIR)" "$(DESTDIR)/$(ASTSPOOLDIR)"
|
||||
|
||||
@for x in phoneprov/*; do \
|
||||
dst="$(DESTDIR)$(ASTDATADIR)/$$x" ; \
|
||||
if [ -f "$${dst}" ]; then \
|
||||
|
@ -727,6 +855,10 @@ samples: adsi
|
|||
$(INSTALL) -m 644 "$$x" "$${dst}" ;\
|
||||
done
|
||||
|
||||
basic-pbx:
|
||||
@echo Installing basic-pbx config files...
|
||||
$(call INSTALL_CONFIGS,configs/basic-pbx)
|
||||
|
||||
webvmail:
|
||||
@[ -d "$(DESTDIR)$(HTTP_DOCSDIR)/" ] || ( printf "http docs directory not found.\nUpdate assignment of variable HTTP_DOCSDIR in Makefile!\n" && exit 1 )
|
||||
@[ -d "$(DESTDIR)$(HTTP_CGIDIR)" ] || ( printf "cgi-bin directory not found.\nUpdate assignment of variable HTTP_CGIDIR in Makefile!\n" && exit 1 )
|
||||
|
@ -754,7 +886,8 @@ webvmail:
|
|||
@echo " +-------------------------------------------+"
|
||||
|
||||
progdocs:
|
||||
# Note, Makefile conditionals must not be tabbed out. Wasted hours with that.
|
||||
# Note, Makefile conditionals must not be tabbed out. Wasted hours with that.
|
||||
@cp doc/asterisk-ng-doxygen.in doc/asterisk-ng-doxygen
|
||||
ifeq ($(DOXYGEN),:)
|
||||
@echo "Doxygen is not installed. Please install and re-run the configuration script."
|
||||
else
|
||||
|
@ -762,20 +895,20 @@ ifeq ($(DOT),:)
|
|||
@echo "DOT is not installed. Doxygen will not produce any diagrams. Please install and re-run the configuration script."
|
||||
else
|
||||
# Enable DOT
|
||||
@echo "HAVE_DOT = YES" >> contrib/asterisk-ng-doxygen
|
||||
@echo "HAVE_DOT = YES" >> doc/asterisk-ng-doxygen
|
||||
endif
|
||||
# Set Doxygen PROJECT_NUMBER variable
|
||||
ifneq ($(ASTERISKVERSION),UNKNOWN__and_probably_unsupported)
|
||||
@echo "PROJECT_NUMBER = $(ASTERISKVERSION)" >> contrib/asterisk-ng-doxygen
|
||||
@echo "PROJECT_NUMBER = $(ASTERISKVERSION)" >> doc/asterisk-ng-doxygen
|
||||
else
|
||||
echo "Asterisk Version is unknown, not configuring Doxygen PROJECT_NUMBER."
|
||||
endif
|
||||
# Validate Doxygen Configuration
|
||||
@doxygen -u contrib/asterisk-ng-doxygen
|
||||
# Validate and auto-update local copy
|
||||
@doxygen -u doc/asterisk-ng-doxygen
|
||||
# Run Doxygen
|
||||
@doxygen contrib/asterisk-ng-doxygen
|
||||
@doxygen doc/asterisk-ng-doxygen
|
||||
# Remove configuration backup file
|
||||
@rm -f contrib/asterisk-ng-doxygen.bak
|
||||
@rm -f doc/asterisk-ng-doxygen.bak
|
||||
endif
|
||||
|
||||
install-logrotate:
|
||||
|
@ -787,60 +920,66 @@ install-logrotate:
|
|||
rm -f contrib/scripts/asterisk.logrotate.tmp
|
||||
|
||||
config:
|
||||
@if [ "${OSARCH}" = "linux-gnu" ]; then \
|
||||
if [ -f /etc/redhat-release -o -f /etc/fedora-release ]; then \
|
||||
./build_tools/install_subst contrib/init.d/rc.redhat.asterisk "$(DESTDIR)/etc/rc.d/init.d/asterisk"; \
|
||||
if [ ! -f "$(DESTDIR)/etc/sysconfig/asterisk" ] ; then \
|
||||
$(INSTALL) -m 644 contrib/init.d/etc_default_asterisk "$(DESTDIR)/etc/sysconfig/asterisk" ; \
|
||||
fi ; \
|
||||
if [ -z "$(DESTDIR)" ] ; then \
|
||||
/sbin/chkconfig --add asterisk ; \
|
||||
fi ; \
|
||||
elif [ -f /etc/debian_version ] ; then \
|
||||
./build_tools/install_subst contrib/init.d/rc.debian.asterisk "$(DESTDIR)/etc/init.d/asterisk"; \
|
||||
if [ ! -f "$(DESTDIR)/etc/default/asterisk" ] ; then \
|
||||
$(INSTALL) -m 644 contrib/init.d/etc_default_asterisk "$(DESTDIR)/etc/default/asterisk" ; \
|
||||
fi ; \
|
||||
if [ -z "$(DESTDIR)" ] ; then \
|
||||
/usr/sbin/update-rc.d asterisk defaults 50 91 ; \
|
||||
fi ; \
|
||||
elif [ -f /etc/gentoo-release ] ; then \
|
||||
./build_tools/install_subst contrib/init.d/rc.gentoo.asterisk "$(DESTDIR)/etc/init.d/asterisk"; \
|
||||
if [ -z "$(DESTDIR)" ] ; then \
|
||||
/sbin/rc-update add asterisk default ; \
|
||||
fi ; \
|
||||
elif [ -f /etc/mandrake-release -o -f /etc/mandriva-release ] ; then \
|
||||
./build_tools/install_subst contrib/init.d/rc.mandriva.asterisk "$(DESTDIR)/etc/rc.d/init.d/asterisk"; \
|
||||
if [ ! -f /etc/sysconfig/asterisk ] ; then \
|
||||
$(INSTALL) -m 644 contrib/init.d/etc_default_asterisk "$(DESTDIR)/etc/sysconfig/asterisk" ; \
|
||||
fi ; \
|
||||
if [ -z "$(DESTDIR)" ] ; then \
|
||||
/sbin/chkconfig --add asterisk ; \
|
||||
fi ; \
|
||||
elif [ -f /etc/SuSE-release -o -f /etc/novell-release ] ; then \
|
||||
./build_tools/install_subst contrib/init.d/rc.suse.asterisk "$(DESTDIR)/etc/init.d/asterisk"; \
|
||||
if [ ! -f /etc/sysconfig/asterisk ] ; then \
|
||||
$(INSTALL) -m 644 contrib/init.d/etc_default_asterisk "$(DESTDIR)/etc/sysconfig/asterisk" ; \
|
||||
fi ; \
|
||||
if [ -z "$(DESTDIR)" ] ; then \
|
||||
/sbin/chkconfig --add asterisk ; \
|
||||
fi ; \
|
||||
elif [ -f /etc/arch-release -o -f /etc/arch-release ] ; then \
|
||||
./build_tools/install_subst contrib/init.d/rc.archlinux.asterisk "$(DESTDIR)/etc/init.d/asterisk"; \
|
||||
elif [ -d "$(DESTDIR)/Library/LaunchDaemons" ]; then \
|
||||
if [ ! -f "$(DESTDIR)/Library/LaunchDaemons/org.asterisk.asterisk.plist" ]; then \
|
||||
./build_tools/install_subst contrib/init.d/org.asterisk.asterisk.plist "$(DESTDIR)/Library/LaunchDaemons/org.asterisk.asterisk.plist"; \
|
||||
fi; \
|
||||
if [ ! -f "$(DESTDIR)/Library/LaunchDaemons/org.asterisk.muted.plist" ]; then \
|
||||
./build_tools/install_subst contrib/init.d/org.asterisk.muted.plist "$(DESTDIR)/Library/LaunchDaemons/org.asterisk.muted.plist"; \
|
||||
fi; \
|
||||
elif [ -f /etc/slackware-version ]; then \
|
||||
echo "Slackware is not currently supported, although an init script does exist for it."; \
|
||||
else \
|
||||
echo "We could not install init scripts for your distribution." ; \
|
||||
fi \
|
||||
@if [ -f /etc/redhat-release -o -f /etc/fedora-release ]; then \
|
||||
./build_tools/install_subst contrib/init.d/rc.redhat.asterisk "$(DESTDIR)/etc/rc.d/init.d/asterisk"; \
|
||||
if [ ! -f "$(DESTDIR)/etc/sysconfig/asterisk" ] ; then \
|
||||
$(INSTALL) -m 644 contrib/init.d/etc_default_asterisk "$(DESTDIR)/etc/sysconfig/asterisk" ; \
|
||||
fi ; \
|
||||
if [ -z "$(DESTDIR)" ] ; then \
|
||||
/sbin/chkconfig --add asterisk ; \
|
||||
fi ; \
|
||||
elif [ -f /etc/debian_version ] ; then \
|
||||
./build_tools/install_subst contrib/init.d/rc.debian.asterisk "$(DESTDIR)/etc/init.d/asterisk"; \
|
||||
if [ ! -f "$(DESTDIR)/etc/default/asterisk" ] ; then \
|
||||
$(INSTALL) -m 644 contrib/init.d/etc_default_asterisk "$(DESTDIR)/etc/default/asterisk" ; \
|
||||
fi ; \
|
||||
if [ -z "$(DESTDIR)" ] ; then \
|
||||
/usr/sbin/update-rc.d asterisk defaults 50 91 ; \
|
||||
fi ; \
|
||||
elif [ -f /etc/gentoo-release ] ; then \
|
||||
./build_tools/install_subst contrib/init.d/rc.gentoo.asterisk "$(DESTDIR)/etc/init.d/asterisk"; \
|
||||
if [ -z "$(DESTDIR)" ] ; then \
|
||||
/sbin/rc-update add asterisk default ; \
|
||||
fi ; \
|
||||
elif [ -f /etc/mandrake-release -o -f /etc/mandriva-release ] ; then \
|
||||
./build_tools/install_subst contrib/init.d/rc.mandriva.asterisk "$(DESTDIR)/etc/rc.d/init.d/asterisk"; \
|
||||
if [ ! -f /etc/sysconfig/asterisk ] ; then \
|
||||
$(INSTALL) -m 644 contrib/init.d/etc_default_asterisk "$(DESTDIR)/etc/sysconfig/asterisk" ; \
|
||||
fi ; \
|
||||
if [ -z "$(DESTDIR)" ] ; then \
|
||||
/sbin/chkconfig --add asterisk ; \
|
||||
fi ; \
|
||||
elif [ -f /etc/SuSE-release -o -f /etc/novell-release ] ; then \
|
||||
./build_tools/install_subst contrib/init.d/rc.suse.asterisk "$(DESTDIR)/etc/init.d/asterisk"; \
|
||||
if [ ! -f /etc/sysconfig/asterisk ] ; then \
|
||||
$(INSTALL) -m 644 contrib/init.d/etc_default_asterisk "$(DESTDIR)/etc/sysconfig/asterisk" ; \
|
||||
fi ; \
|
||||
if [ -z "$(DESTDIR)" ] ; then \
|
||||
/sbin/chkconfig --add asterisk ; \
|
||||
fi ; \
|
||||
elif [ -f /etc/os-release ] && [ "opensuse" = "$(shell . /etc/os-release 2>/dev/null && echo $$ID)" ] ; then \
|
||||
./build_tools/install_subst contrib/init.d/rc.suse.asterisk "$(DESTDIR)/etc/init.d/asterisk"; \
|
||||
if [ ! -f /etc/sysconfig/asterisk ] ; then \
|
||||
$(INSTALL) -m 644 contrib/init.d/etc_default_asterisk "$(DESTDIR)/etc/sysconfig/asterisk" ; \
|
||||
fi ; \
|
||||
if [ -z "$(DESTDIR)" ] ; then \
|
||||
/sbin/chkconfig --add asterisk ; \
|
||||
fi ; \
|
||||
elif [ -f /etc/arch-release -o -f /etc/arch-release ] ; then \
|
||||
./build_tools/install_subst contrib/init.d/rc.archlinux.asterisk "$(DESTDIR)/etc/init.d/asterisk"; \
|
||||
elif [ -f /etc/slackware-version ]; then \
|
||||
./build_tools/install_subst contrib/init.d/rc.slackware.asterisk "$(DESTDIR)/etc/rc.d/rc.asterisk"; \
|
||||
elif [ -f /etc/os-release ] && [ "slackware" = "$(shell . /etc/os-release 2>/dev/null && echo $$ID)" ] ; then \
|
||||
./build_tools/install_subst contrib/init.d/rc.slackware.asterisk "$(DESTDIR)/etc/rc.d/rc.asterisk"; \
|
||||
elif [ -d "$(DESTDIR)/Library/LaunchDaemons" ]; then \
|
||||
if [ ! -f "$(DESTDIR)/Library/LaunchDaemons/org.asterisk.asterisk.plist" ]; then \
|
||||
./build_tools/install_subst contrib/init.d/org.asterisk.asterisk.plist "$(DESTDIR)/Library/LaunchDaemons/org.asterisk.asterisk.plist"; \
|
||||
fi; \
|
||||
if [ ! -f "$(DESTDIR)/Library/LaunchDaemons/org.asterisk.muted.plist" ]; then \
|
||||
./build_tools/install_subst contrib/init.d/org.asterisk.muted.plist "$(DESTDIR)/Library/LaunchDaemons/org.asterisk.muted.plist"; \
|
||||
fi; \
|
||||
else \
|
||||
echo "We could not install init scripts for your operating system." ; \
|
||||
echo "We could not install init scripts for your distribution." ; \
|
||||
fi
|
||||
|
||||
sounds:
|
||||
|
@ -855,22 +994,34 @@ sounds:
|
|||
@[ -f "$(DESTDIR)$(ASTDBDIR)/astdb.sqlite3" ] || [ ! -f "$(DESTDIR)$(ASTDBDIR)/astdb" ] || [ ! -f menuselect.makeopts ] || grep -q MENUSELECT_UTILS=.*astdb2sqlite3 menuselect.makeopts || (sed -i.orig -e's/MENUSELECT_UTILS=\(.*\)/MENUSELECT_UTILS=\1 astdb2sqlite3/' menuselect.makeopts && echo "Updating menuselect.makeopts to include astdb2sqlite3" && echo "Original version backed up to menuselect.makeopts.orig")
|
||||
|
||||
$(SUBDIRS_UNINSTALL):
|
||||
+@$(SUBMAKE) -C $(@:-uninstall=) uninstall
|
||||
+@DESTDIR="$(DESTDIR)" ASTSBINDIR="$(ASTSBINDIR)" ASTDATADIR="$(ASTDATADIR)" $(SUBMAKE) -C $(@:-uninstall=) uninstall
|
||||
|
||||
main-binuninstall:
|
||||
+@DESTDIR="$(DESTDIR)" ASTSBINDIR="$(ASTSBINDIR)" ASTLIBDIR="$(ASTLIBDIR)" $(SUBMAKE) -C main binuninstall
|
||||
|
||||
_uninstall: $(SUBDIRS_UNINSTALL) main-binuninstall
|
||||
uninstall-headers:
|
||||
rm -rf "$(DESTDIR)$(ASTHEADERDIR)"
|
||||
rm -f "$(DESTDIR)$(includedir)/asterisk.h"
|
||||
|
||||
_uninstall: $(SUBDIRS_UNINSTALL) main-binuninstall uninstall-headers
|
||||
rm -f "$(DESTDIR)$(ASTMODDIR)/"*
|
||||
test -n "$(_oldmoddir)" -a -d "$(_oldmoddir)" && rm -f "$(_oldmoddir)/"* || :
|
||||
rm -f "$(DESTDIR)$(ASTSBINDIR)/astgenkey"
|
||||
rm -f "$(DESTDIR)$(ASTSBINDIR)/autosupport"
|
||||
rm -rf "$(DESTDIR)$(ASTHEADERDIR)"
|
||||
rm -rf "$(DESTDIR)$(ASTDATADIR)/firmware"
|
||||
rm -f "$(DESTDIR)$(ASTMANDIR)/man8/asterisk.8"
|
||||
rm -f "$(DESTDIR)$(ASTMANDIR)/man8/astgenkey.8"
|
||||
rm -f "$(DESTDIR)$(ASTMANDIR)/man8/autosupport.8"
|
||||
rm -f "$(DESTDIR)$(ASTMANDIR)/man8/safe_asterisk.8"
|
||||
ifeq ($(HAVE_DAHDI),1)
|
||||
rm -f $(DESTDIR)$(DAHDI_UDEV_HOOK_DIR)/40-asterisk
|
||||
endif
|
||||
$(MAKE) -C sounds uninstall
|
||||
ifeq ($(LDCONFIG),)
|
||||
else ifeq ($(LDCONFIG),:)
|
||||
else
|
||||
$(LDCONFIG) "$(ASTLIBDIR)/" || :
|
||||
endif
|
||||
|
||||
uninstall: _uninstall
|
||||
@echo " +--------- Asterisk Uninstall Complete -----+"
|
||||
|
@ -886,8 +1037,9 @@ uninstall: _uninstall
|
|||
@echo " + $(mK) uninstall-all +"
|
||||
@echo " +-------------------------------------------+"
|
||||
|
||||
uninstall-all: _uninstall
|
||||
uninstall-all: _uninstall uninstall-headers
|
||||
rm -rf "$(DESTDIR)$(ASTMODDIR)"
|
||||
test -n "$(_oldmoddir)" -a -d "$(_oldmoddir)" && rm -rf "$(_oldmoddir)" || :
|
||||
rm -rf "$(DESTDIR)$(ASTVARLIBDIR)"
|
||||
rm -rf "$(DESTDIR)$(ASTDATADIR)"
|
||||
rm -rf "$(DESTDIR)$(ASTSPOOLDIR)"
|
||||
|
@ -925,7 +1077,7 @@ nmenuselect: menuselect/nmenuselect menuselect-tree menuselect.makeopts
|
|||
-@menuselect/nmenuselect menuselect.makeopts && (echo "menuselect changes saved!"; rm -f channels/h323/Makefile.ast main/asterisk) || echo "menuselect changes NOT saved!"
|
||||
|
||||
# options for make in menuselect/
|
||||
MAKE_MENUSELECT=CC="$(BUILD_CC)" CXX="" LD="" AR="" RANLIB="" \
|
||||
MAKE_MENUSELECT=CC="$(BUILD_CC)" CXX="$(CXX)" LD="" AR="" RANLIB="" \
|
||||
CFLAGS="$(BUILD_CFLAGS)" LDFLAGS="$(BUILD_LDFLAGS)" \
|
||||
$(MAKE) -C menuselect CONFIGURE_SILENT="--silent"
|
||||
|
||||
|
@ -944,7 +1096,7 @@ menuselect/nmenuselect: menuselect/makeopts .lastclean
|
|||
menuselect/makeopts: makeopts .lastclean
|
||||
+$(MAKE_MENUSELECT) makeopts
|
||||
|
||||
menuselect-tree: $(foreach dir,$(filter-out main,$(MOD_SUBDIRS)),$(wildcard $(dir)/*.c) $(wildcard $(dir)/*.cc)) build_tools/cflags.xml build_tools/cflags-devmode.xml sounds/sounds.xml build_tools/embed_modules.xml utils/utils.xml agi/agi.xml configure makeopts
|
||||
menuselect-tree: $(foreach dir,$(filter-out main,$(MOD_SUBDIRS)),$(wildcard $(dir)/*.c) $(wildcard $(dir)/*.cc) $(wildcard $(dir)/*.xml)) build_tools/cflags.xml build_tools/cflags-devmode.xml sounds/sounds.xml utils/utils.xml agi/agi.xml configure makeopts
|
||||
@echo "Generating input for menuselect ..."
|
||||
@echo "<?xml version=\"1.0\"?>" > $@
|
||||
@echo >> $@
|
||||
|
@ -957,7 +1109,6 @@ menuselect-tree: $(foreach dir,$(filter-out main,$(MOD_SUBDIRS)),$(wildcard $(di
|
|||
fi
|
||||
@cat utils/utils.xml >> $@
|
||||
@cat agi/agi.xml >> $@
|
||||
@cat build_tools/embed_modules.xml >> $@
|
||||
@cat sounds/sounds.xml >> $@
|
||||
@echo "</menu>" >> $@
|
||||
|
||||
|
@ -970,10 +1121,17 @@ ifeq ($(PYTHON),:)
|
|||
@echo "--------------------------------------------------------------------------"
|
||||
@false
|
||||
else
|
||||
@$(INSTALL) -d doc/rest-api
|
||||
$(PYTHON) rest-api-templates/make_ari_stubs.py \
|
||||
rest-api/resources.json .
|
||||
endif
|
||||
|
||||
check-alembic: makeopts
|
||||
@find contrib/ast-db-manage/ -name '*.pyc' -delete
|
||||
@ALEMBIC=$(ALEMBIC) build_tools/make_check_alembic config cdr voicemail >&2
|
||||
|
||||
.PHONY: install-configs
|
||||
.PHONY: install-headers
|
||||
.PHONY: menuselect
|
||||
.PHONY: main
|
||||
.PHONY: sounds
|
||||
|
@ -984,24 +1142,26 @@ endif
|
|||
.PHONY: _all
|
||||
.PHONY: full
|
||||
.PHONY: _full
|
||||
.PHONY: prereqs
|
||||
.PHONY: uninstall
|
||||
.PHONY: _uninstall
|
||||
.PHONY: uninstall-all
|
||||
.PHONY: dont-optimize
|
||||
.PHONY: uninstall-headers
|
||||
.PHONY: badshell
|
||||
.PHONY: installdirs
|
||||
.PHONY: validate-docs
|
||||
.PHONY: _clean
|
||||
.PHONY: ari-stubs
|
||||
.PHONY: basic-pbx
|
||||
.PHONY: check-alembic
|
||||
.PHONY: ld-cache-update
|
||||
.PHONY: check-old-libdir
|
||||
.PHONY: $(SUBDIRS_INSTALL)
|
||||
.PHONY: $(SUBDIRS_DIST_CLEAN)
|
||||
.PHONY: $(SUBDIRS_CLEAN)
|
||||
.PHONY: $(SUBDIRS_UNINSTALL)
|
||||
.PHONY: $(SUBDIRS)
|
||||
.PHONY: $(MOD_SUBDIRS_EMBED_LDSCRIPT)
|
||||
.PHONY: $(MOD_SUBDIRS_EMBED_LDFLAGS)
|
||||
.PHONY: $(MOD_SUBDIRS_EMBED_LIBS)
|
||||
|
||||
FORCE:
|
||||
|
||||
# This only stops targets within the root Makefile from building in parallel.
|
||||
.NOTPARALLEL:
|
||||
|
|
|
@ -18,10 +18,6 @@
|
|||
# Also note that we can only set one variable per rule, so we have to
|
||||
# repeat the left hand side to set multiple variables.
|
||||
|
||||
ifeq ($(findstring LOADABLE_MODULES,$(MENUSELECT_CFLAGS)),)
|
||||
_ASTCFLAGS+=${GC_CFLAGS}
|
||||
endif
|
||||
|
||||
ifneq ($(findstring STATIC_BUILD,$(MENUSELECT_CFLAGS)),)
|
||||
STATIC_BUILD=-static
|
||||
endif
|
||||
|
@ -29,7 +25,7 @@ endif
|
|||
include $(ASTTOPDIR)/Makefile.rules
|
||||
|
||||
# If MODULE_PREFIX is defined, use it to run the standard functions to set
|
||||
# C_MODS, CC_MODS, LOADABLE_MODS and EMBEDDED_MODS.
|
||||
# C_MODS, CC_MODS and LOADABLE_MODS
|
||||
# Each word of MODULE_PREFIX is a prefix for filenames that we consider
|
||||
# valid C or CC modules (eg. app, func ...). Note that the underscore
|
||||
# is added here, and does not need to be in MODULE_PREFIX
|
||||
|
@ -42,15 +38,11 @@ ifneq ($(MODULE_PREFIX),)
|
|||
ALL_C_MODS+=$(foreach p,$(MODULE_PREFIX),$(patsubst %.c,%,$(wildcard $(p)_*.c)))
|
||||
ALL_CC_MODS+=$(foreach p,$(MODULE_PREFIX),$(patsubst %.cc,%,$(wildcard $(p)_*.cc)))
|
||||
endif
|
||||
|
||||
|
||||
C_MODS:=$(filter-out $(MENUSELECT_$(MENUSELECT_CATEGORY)),$(ALL_C_MODS))
|
||||
CC_MODS:=$(filter-out $(MENUSELECT_$(MENUSELECT_CATEGORY)),$(ALL_CC_MODS))
|
||||
|
||||
ifneq ($(findstring EMBED_$(MENUSELECT_CATEGORY),$(MENUSELECT_EMBED)),)
|
||||
EMBEDDED_MODS:=$(C_MODS) $(CC_MODS)
|
||||
else
|
||||
LOADABLE_MODS:=$(C_MODS) $(CC_MODS)
|
||||
endif
|
||||
LOADABLE_MODS:=$(C_MODS) $(CC_MODS)
|
||||
|
||||
# Both C++ and C++ sources need their module name in AST_MODULE
|
||||
# We also pass whatever _INCLUDE list is generated by menuselect
|
||||
|
@ -74,16 +66,11 @@ endif
|
|||
$(LOADABLE_MODS:%=%.so): LIBS+=$(foreach dep,$(MENUSELECT_DEPENDS_$*),$(value $(dep)_LIB))
|
||||
$(LOADABLE_MODS:%=%.so): _ASTLDFLAGS+=$(foreach dep,$(MENUSELECT_DEPENDS_$*),$(value $(dep)_LDFLAGS))
|
||||
|
||||
$(EMBEDDED_MODS:%=%.o): _ASTCFLAGS+=-DEMBEDDED_MODULE=$*
|
||||
|
||||
$(addsuffix .so,$(filter $(LOADABLE_MODS),$(C_MODS))): %.so: %.o
|
||||
$(addsuffix .so,$(filter $(LOADABLE_MODS),$(CC_MODS))): %.so: %.oo
|
||||
|
||||
modules.link: $(addsuffix .eo,$(filter $(EMBEDDED_MODS),$(C_MODS)))
|
||||
|
||||
.PHONY: clean uninstall _all moduleinfo makeopts
|
||||
|
||||
ifneq ($(LOADABLE_MODS),)
|
||||
_all: $(LOADABLE_MODS:%=%.so)
|
||||
ifneq ($(findstring $(OSARCH), mingw32 cygwin ),)
|
||||
# linker options and extra libraries for cygwin
|
||||
|
@ -91,38 +78,29 @@ ifneq ($(findstring $(OSARCH), mingw32 cygwin ),)
|
|||
LIBS+=-L$(ASTTOPDIR)/main -lasterisk -L$(ASTTOPDIR)/res $($@_LIBS)
|
||||
# additional libraries in res/
|
||||
endif
|
||||
endif
|
||||
|
||||
ifneq ($(EMBEDDED_MODS),)
|
||||
_all: modules.link
|
||||
__embed_ldscript:
|
||||
@echo "../$(SUBDIR)/modules.link"
|
||||
__embed_ldflags:
|
||||
@echo "$(foreach mod,$(filter $(EMBEDDED_MODS),$(C_MODS)),$(foreach dep,$(MENUSELECT_DEPENDS_$(mod)),$(dep)_LDFLAGS))"
|
||||
@echo "$(foreach mod,$(filter $(EMBEDDED_MODS),$(CC_MODS)),$(foreach dep,$(MENUSELECT_DEPENDS_$(mod)),$(dep)_LDFLAGS))"
|
||||
__embed_libs:
|
||||
@echo "$(foreach mod,$(filter $(EMBEDDED_MODS),$(C_MODS)),$(foreach dep,$(MENUSELECT_DEPENDS_$(mod)),$(dep)_LIB))"
|
||||
@echo "$(foreach mod,$(filter $(EMBEDDED_MODS),$(CC_MODS)),$(foreach dep,$(MENUSELECT_DEPENDS_$(mod)),$(dep)_LIB))"
|
||||
else
|
||||
__embed_ldscript:
|
||||
__embed_ldflags:
|
||||
__embed_libs:
|
||||
endif
|
||||
|
||||
modules.link:
|
||||
@rm -f $@
|
||||
@for file in $(patsubst %,$(SUBDIR)/%,$(filter %.eo,$^)); do echo "INPUT (../$${file})" >> $@; done
|
||||
@for file in $(patsubst %,$(SUBDIR)/%,$(filter-out %.eo,$^)); do echo "INPUT (../$${file})" >> $@; done
|
||||
|
||||
clean::
|
||||
rm -f *.so *.o *.oo *.eo *.i *.ii
|
||||
rm -f .*.d
|
||||
rm -f *.s *.i
|
||||
rm -f *.gcda *.gcno
|
||||
rm -f modules.link
|
||||
|
||||
install:: all
|
||||
@echo "Installing modules from `basename $(CURDIR)`..."
|
||||
@for x in $(LOADABLE_MODS:%=%.so); do $(INSTALL) -m 755 $$x "$(DESTDIR)$(ASTMODDIR)" ; done
|
||||
ifneq ($(findstring :,$(XMLSTARLET)$(BASH)),:)
|
||||
@if [ -f .moduleinfo ] ; then \
|
||||
declare -A DISABLED_MODS ;\
|
||||
for x in $(MENUSELECT_$(MENUSELECT_CATEGORY)) ; do DISABLED_MODS[$${x}]=1 ; done ;\
|
||||
EXTERNAL_MODS=$$($(XMLSTARLET) sel -t -m "/category/member[support_level = 'external']" -v "@name" -n .moduleinfo) ;\
|
||||
for x in $${EXTERNAL_MODS} ; do \
|
||||
if [ -z "$${DISABLED_MODS[$${x}]}" ] ; then \
|
||||
PJPROJECT_BUNDLED=${PJPROJECT_BUNDLED} $(ASTTOPDIR)/build_tools/download_externals $${x} ;\
|
||||
fi ;\
|
||||
done ;\
|
||||
fi
|
||||
endif
|
||||
|
||||
uninstall::
|
||||
|
||||
|
@ -133,16 +111,16 @@ dist-clean::
|
|||
|
||||
.%.moduleinfo: %.c
|
||||
@echo "<member name=\"$*\" displayname=\"$(shell $(GREP) -e AST_MODULE_INFO $< | head -n 1 | cut -d '"' -f 2)\" remove_on_change=\"$(SUBDIR)/$*.o $(SUBDIR)/$*.so\">" > $@
|
||||
$(AWK) -f $(ASTTOPDIR)/build_tools/get_moduleinfo $< >> $@
|
||||
$(AWK) -f $(ASTTOPDIR)/build_tools/get_moduleinfo $^ >> $@
|
||||
echo "</member>" >> $@
|
||||
|
||||
.%.moduleinfo: %.cc
|
||||
@echo "<member name=\"$*\" displayname=\"$(shell $(GREP) -e AST_MODULE_INFO $< | head -n 1 | cut -d '"' -f 2)\" remove_on_change=\"$(SUBDIR)/$*.oo $(SUBDIR)/$*.so\">" > $@
|
||||
$(AWK) -f $(ASTTOPDIR)/build_tools/get_moduleinfo $< >> $@
|
||||
$(AWK) -f $(ASTTOPDIR)/build_tools/get_moduleinfo $^ >> $@
|
||||
echo "</member>" >> $@
|
||||
|
||||
.moduleinfo:: $(addsuffix .moduleinfo,$(addprefix .,$(sort $(ALL_C_MODS) $(ALL_CC_MODS))))
|
||||
@echo "<category name=\"MENUSELECT_$(MENUSELECT_CATEGORY)\" displayname=\"$(MENUSELECT_DESCRIPTION)\" remove_on_change=\"$(SUBDIR)/modules.link\">" > $@
|
||||
.moduleinfo:: $(addsuffix .moduleinfo,$(addprefix .,$(sort $(ALL_C_MODS) $(ALL_CC_MODS)))) $(wildcard $(call tolower,$(MENUSELECT_CATEGORY)).xml)
|
||||
@echo "<category name=\"MENUSELECT_$(MENUSELECT_CATEGORY)\" displayname=\"$(MENUSELECT_DESCRIPTION)\">" > $@
|
||||
@cat $^ >> $@
|
||||
@echo "</category>" >> $@
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#
|
||||
# Asterisk -- An open source telephony toolkit.
|
||||
#
|
||||
#
|
||||
# Makefile rules
|
||||
#
|
||||
# Copyright (C) 2006-2010, Digium, Inc.
|
||||
|
@ -17,6 +17,10 @@
|
|||
|
||||
-include $(ASTTOPDIR)/makeopts
|
||||
|
||||
# Helpful functions
|
||||
# call with $(call function,...)
|
||||
tolower = $(shell echo $(1) | tr '[:upper:]' '[:lower:]')
|
||||
|
||||
.PHONY: dist-clean
|
||||
|
||||
# If 'make' decides to create intermediate files to satisfy a build requirement
|
||||
|
@ -27,11 +31,31 @@
|
|||
# extra cflags to build dependencies. Recursively expanded.
|
||||
MAKE_DEPS=-MD -MT $@ -MF .$(subst /,_,$@).d -MP
|
||||
|
||||
ifeq ($(findstring ADDRESS_SANITIZER,$(MENUSELECT_CFLAGS)),ADDRESS_SANITIZER)
|
||||
_ASTLDFLAGS+=-fsanitize=address
|
||||
_ASTCFLAGS+=-fno-omit-frame-pointer -fsanitize=address
|
||||
endif
|
||||
|
||||
ifeq ($(findstring THREAD_SANITIZER,$(MENUSELECT_CFLAGS)),THREAD_SANITIZER)
|
||||
_ASTLDFLAGS+=-fsanitize=thread -pie -fPIE
|
||||
_ASTCFLAGS+=-fno-omit-frame-pointer -pie -fPIE -fsanitize=thread
|
||||
endif
|
||||
|
||||
ifeq ($(findstring LEAK_SANITIZER,$(MENUSELECT_CFLAGS)),LEAK_SANITIZER)
|
||||
_ASTLDFLAGS+=-fsanitize=leak
|
||||
_ASTCFLAGS+=-fno-omit-frame-pointer -fsanitize=leak
|
||||
endif
|
||||
|
||||
ifeq ($(findstring UNDEFINED_SANITIZER,$(MENUSELECT_CFLAGS)),UNDEFINED_SANITIZER)
|
||||
_ASTLDFLAGS+=-fsanitize=undefined
|
||||
_ASTCFLAGS+=-fno-omit-frame-pointer -fsanitize=undefined
|
||||
endif
|
||||
|
||||
ifeq ($(NOISY_BUILD),)
|
||||
ECHO_PREFIX=@
|
||||
CMD_PREFIX=@
|
||||
else
|
||||
ECHO_PREFIX=@\#
|
||||
ECHO_PREFIX=@\#
|
||||
CMD_PREFIX=
|
||||
endif
|
||||
|
||||
|
@ -43,6 +67,17 @@ ifneq ($(findstring darwin,$(OSARCH)),)
|
|||
endif
|
||||
endif
|
||||
|
||||
# gcc version 8.2.1 and above must have partial-inlining disabled to avoid documented bug.
|
||||
# We must handle cross-compiling and clang so make sure the compiler version string has "gcc"
|
||||
# somewhere in it before testing the version.
|
||||
CC_VERS_STRING=$(shell $(CC) --version | grep -i gcc)
|
||||
ifneq ($(CC_VERS_STRING),)
|
||||
GCC_VER_GTE821:=$(shell expr `echo '$(CC_VERS_STRING)' | cut -d ' ' -f 3 | sed -e 's/\.\([0-9][0-9]\)/\1/g' -e 's/\.\([0-9]\)/0\1/g' -e 's/^[0-9]\{3,4\}$$/&00/'` \>= 80201)
|
||||
ifeq ($(GCC_VER_GTE821),1)
|
||||
OPTIMIZE+=-fno-partial-inlining
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(findstring DONT_OPTIMIZE,$(MENUSELECT_CFLAGS))$(AST_CODE_COVERAGE),no)
|
||||
_ASTCFLAGS+=$(OPTIMIZE)
|
||||
else
|
||||
|
@ -50,8 +85,10 @@ else
|
|||
endif
|
||||
|
||||
ifeq ($(AST_CODE_COVERAGE),yes)
|
||||
_ASTCFLAGS+=-ftest-coverage -fprofile-arcs
|
||||
_ASTCFLAGS_COVERAGE=-ftest-coverage -fprofile-arcs
|
||||
_ASTLDFLAGS+=-ftest-coverage -fprofile-arcs
|
||||
else
|
||||
_ASTCFLAGS_COVERAGE=
|
||||
endif
|
||||
|
||||
ifeq ($(findstring $(CONFIG_CFLAGS),$(_ASTCFLAGS)),)
|
||||
|
@ -63,6 +100,11 @@ endif
|
|||
CC_CFLAGS=$(PTHREAD_CFLAGS) $(_ASTCFLAGS) $(ASTCFLAGS)
|
||||
CXX_CFLAGS=$(PTHREAD_CFLAGS) $(filter-out -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations $(AST_DECLARATION_AFTER_STATEMENT),$(_ASTCFLAGS) $(ASTCFLAGS))
|
||||
|
||||
# Clang -Werror warning suppressions
|
||||
ifeq ($(C_COMPILER_FAMILY),clang)
|
||||
CC_CFLAGS+=-Wno-unused-value -Wno-parentheses-equality
|
||||
endif
|
||||
|
||||
ifeq ($(GNU_LD),1)
|
||||
SO_SUPPRESS_SYMBOLS=-Wl,--version-script,$(subst .so,.exports,$@),--warn-common
|
||||
ifneq ($(wildcard $(subst .so,.dynamics,$@)),)
|
||||
|
@ -76,13 +118,15 @@ CC_LIBS=$(PTHREAD_LIBS) $(LIBS)
|
|||
CXX_LIBS=$(PTHREAD_LIBS) $(LIBS)
|
||||
|
||||
# determine whether to double-compile so that the optimizer can report code path problems
|
||||
# this is only done when developer mode and DONT_OPTIMIZE are both enabled
|
||||
# in that case, we run the preprocessor to produce a .i or .ii file from the source
|
||||
# In this case, we run the preprocessor to produce a .i or .ii file from the source
|
||||
# code, then compile once with optimizer enabled (and the output to /dev/null),
|
||||
# and if that doesn't fail then compile again with optimizer disabled
|
||||
ifeq ($(findstring DONT_OPTIMIZE,$(MENUSELECT_CFLAGS))$(AST_DEVMODE),DONT_OPTIMIZEyes)
|
||||
|
||||
ifeq ($(findstring COMPILE_DOUBLE,$(MENUSELECT_CFLAGS)),COMPILE_DOUBLE)
|
||||
COMPILE_DOUBLE=yes
|
||||
else
|
||||
endif
|
||||
|
||||
ifeq ($(findstring DONT_OPTIMIZE,$(MENUSELECT_CFLAGS))$(AST_DEVMODE),)
|
||||
_ASTCFLAGS+=$(AST_FORTIFY_SOURCE)
|
||||
endif
|
||||
|
||||
|
@ -95,41 +139,48 @@ endif
|
|||
ifeq ($(COMPILE_DOUBLE),yes)
|
||||
$(CMD_PREFIX) $(CC) -o /dev/null -c $< $(CC_CFLAGS) $(OPTIMIZE)
|
||||
endif
|
||||
$(CMD_PREFIX) $(CC) -o $@ -c $< $(CC_CFLAGS)
|
||||
$(CMD_PREFIX) $(CC) -o $@ -c $< $(CC_CFLAGS) $(_ASTCFLAGS_COVERAGE)
|
||||
|
||||
%.o: %.i
|
||||
$(ECHO_PREFIX) echo " [CCi] $< -> $@"
|
||||
ifneq ($(AST_CLANG_BLOCKS),)
|
||||
ifeq ($(COMPILE_DOUBLE),yes)
|
||||
$(CMD_PREFIX) $(CC) -o /dev/null -c $< $(CC_CFLAGS) $(OPTIMIZE) -Wno-unused-command-line-argument
|
||||
endif
|
||||
$(CMD_PREFIX) $(CC) -o $@ -c $< $(CC_CFLAGS) $(_ASTCFLAGS_COVERAGE) -Wno-unused-command-line-argument
|
||||
else
|
||||
ifeq ($(COMPILE_DOUBLE),yes)
|
||||
$(CMD_PREFIX) $(CC) -o /dev/null -c $< $(CC_CFLAGS) $(OPTIMIZE)
|
||||
endif
|
||||
$(CMD_PREFIX) $(CC) -o $@ -c $< $(CC_CFLAGS)
|
||||
$(CMD_PREFIX) $(CC) -o $@ -c $< $(CC_CFLAGS) $(_ASTCFLAGS_COVERAGE)
|
||||
endif
|
||||
|
||||
ifneq ($(COMPILE_DOUBLE),yes)
|
||||
%.o: %.c
|
||||
$(ECHO_PREFIX) echo " [CC] $< -> $@"
|
||||
$(CMD_PREFIX) $(CC) -o $@ -c $< $(MAKE_DEPS) $(CC_CFLAGS)
|
||||
$(CMD_PREFIX) $(CC) -o $@ -c $< $(MAKE_DEPS) $(CC_CFLAGS) $(_ASTCFLAGS_COVERAGE)
|
||||
endif
|
||||
|
||||
%.i: %.c
|
||||
$(ECHO_PREFIX) echo " [CPP] $< -> $@"
|
||||
$(CMD_PREFIX) $(CC) -o $@ -E $< $(MAKE_DEPS) $(CC_CFLAGS)
|
||||
$(CMD_PREFIX) $(CC) -o $@ -E $< $(MAKE_DEPS) $(CC_CFLAGS) $(_ASTCFLAGS_COVERAGE)
|
||||
|
||||
%.oo: %.ii
|
||||
$(ECHO_PREFIX) echo " [CXXi] $< -> $@"
|
||||
ifeq ($(COMPILE_DOUBLE),yes)
|
||||
$(CMD_PREFIX) $(CXX) -o /dev/null -c $< $(CXX_CFLAGS) $(OPTIMIZE)
|
||||
endif
|
||||
$(CMD_PREFIX) $(CXX) -o $@ -c $< $(CXX_CFLAGS)
|
||||
$(CMD_PREFIX) $(CXX) -o $@ -c $< $(CXX_CFLAGS) $(_ASTCFLAGS_COVERAGE)
|
||||
|
||||
ifneq ($(COMPILE_DOUBLE),yes)
|
||||
%.oo: %.cc
|
||||
$(ECHO_PREFIX) echo " [CXX] $< -> $@"
|
||||
$(CMD_PREFIX) $(CXX) -o $@ -c $< $(MAKE_DEPS) $(CXX_CFLAGS)
|
||||
$(CMD_PREFIX) $(CXX) -o $@ -c $< $(MAKE_DEPS) $(CXX_CFLAGS) $(_ASTCFLAGS_COVERAGE)
|
||||
endif
|
||||
|
||||
%.ii: %.cc
|
||||
$(ECHO_PREFIX) echo " [CPP] $< -> $@"
|
||||
$(CMD_PREFIX) $(CXX) -o $@ -E $< $(MAKE_DEPS) $(CXX_CFLAGS)
|
||||
$(CMD_PREFIX) $(CXX) -o $@ -E $< $(MAKE_DEPS) $(CXX_CFLAGS) $(_ASTCFLAGS_COVERAGE)
|
||||
|
||||
%.so: %.o
|
||||
ifeq ($(GNU_LD),1)
|
||||
|
@ -145,18 +196,6 @@ endif
|
|||
$(ECHO_PREFIX) echo " [LDXX] $^ -> $@"
|
||||
$(CMD_PREFIX) $(CXX) $(STATIC_BUILD) -o $@ $(CXX_LDFLAGS_SO) $^ $(CXX_LIBS)
|
||||
|
||||
%.eo: %.o
|
||||
$(ECHO_PREFIX) echo " [EMBED] $< -> $@"
|
||||
$(CMD_PREFIX) $(ASTTOPDIR)/build_tools/make_linker_eo_script $* > .$@.ld
|
||||
$(CMD_PREFIX) $(LD) -r -T .$@.ld -o $@ $<
|
||||
$(CMD_PREFIX) rm -f .$@.ld
|
||||
|
||||
%.eo: %.oo
|
||||
$(ECHO_PREFIX) echo " [EMBED] $< -> $@"
|
||||
$(CMD_PREFIX) $(ASTTOPDIR)/build_tools/make_linker_eo_script $* > .$@.ld
|
||||
$(CMD_PREFIX) $(LD) -r -T .$@.ld -o $@ $<
|
||||
$(CMD_PREFIX) rm -f .$@.ld
|
||||
|
||||
%: %.o
|
||||
$(ECHO_PREFIX) echo " [LD] $^ -> $@"
|
||||
$(CMD_PREFIX) $(CXX) $(STATIC_BUILD) -o $@ $(PTHREAD_CFLAGS) $(_ASTLDFLAGS) $^ $(CXX_LIBS) $(ASTLDFLAGS)
|
||||
|
|
|
@ -1,55 +1,39 @@
|
|||
==================
|
||||
| Best Practices |
|
||||
==================
|
||||
# Best Practices
|
||||
|
||||
The purpose of this document is to define best practices when working with
|
||||
Asterisk in order to minimize possible security breaches and to provide tried
|
||||
examples in field deployments. This is a living document and is subject to
|
||||
examples in field deployments. This is a living document and is subject to
|
||||
change over time as best practices are defined.
|
||||
|
||||
--------
|
||||
Sections
|
||||
--------
|
||||
|
||||
* Filtering Data:
|
||||
* [Filtering Data]:
|
||||
How to protect yourself from redial attacks
|
||||
|
||||
* Proper Device Naming:
|
||||
* [Proper Device Naming]:
|
||||
Why to not use numbered extensions for devices
|
||||
|
||||
* Secure Passwords:
|
||||
* [Secure Passwords]:
|
||||
Secure passwords limit your risk to brute force attacks
|
||||
|
||||
* Reducing Pattern Match Typos:
|
||||
* [Reducing Pattern Match Typos]:
|
||||
Using the 'same' prefix, or using Goto()
|
||||
|
||||
* Manager Class Authorizations:
|
||||
* [Manager Class Authorizations]:
|
||||
Recognizing potential issues with certain classes of authorization
|
||||
|
||||
* Avoid Privilege Escalations:
|
||||
* [Avoid Privilege Escalations]:
|
||||
Disable the ability to execute functions that may escalate privileges
|
||||
* [Important Security Considerations]:
|
||||
More information on the Asterisk Wiki
|
||||
|
||||
----------------
|
||||
Additional Links
|
||||
----------------
|
||||
## Additional Links
|
||||
|
||||
Additional links that contain useful information about best practices or
|
||||
security are listed below.
|
||||
|
||||
* Seven Steps to Better SIP Security:
|
||||
http://blogs.digium.com/2009/03/28/sip-security/
|
||||
|
||||
* Asterisk VoIP Security (webinar):
|
||||
http://www.asterisk.org/security/webinar/
|
||||
* [Seven Steps to Better SIP Security][blog-sip-security]
|
||||
* [Asterisk VoIP Security (webinar)][voip-security-webinar]
|
||||
|
||||
|
||||
==============
|
||||
Filtering Data
|
||||
==============
|
||||
## Filtering Data
|
||||
|
||||
In the Asterisk dialplan, several channel variables contain data potentially
|
||||
supplied by outside sources. This could lead to a potential security concern
|
||||
where those outside sources may send cleverly crafted strings of data which
|
||||
In the Asterisk dialplan, several channel variables contain data potentially
|
||||
supplied by outside sources. This could lead to a potential security concern
|
||||
where those outside sources may send cleverly crafted strings of data which
|
||||
could be utilized, e.g. to place calls to unexpected locations.
|
||||
|
||||
An example of this can be found in the use of pattern matching and the ${EXTEN}
|
||||
|
@ -57,24 +41,25 @@ channel variable. Note that ${EXTEN} is not the only system created channel
|
|||
variable, so it is important to be aware of where the data you're using is
|
||||
coming from.
|
||||
|
||||
For example, this common dialplan takes 2 or more characters of data, starting
|
||||
For example, this common dialplan takes 2 or more characters of data, starting
|
||||
with a number 0-9, and then accepts any additional information supplied by the
|
||||
request.
|
||||
|
||||
[NOTE: We use SIP in this example, but is not limited to SIP only; protocols
|
||||
such as Jabber/XMPP or IAX2 are also susceptible to the same sort of
|
||||
injection problem.]
|
||||
|
||||
**NOTE**:
|
||||
> We use SIP in this example, but is not limited to SIP only; protocols such as
|
||||
> Jabber/XMPP or IAX2 are also susceptible to the same sort of injection problem.
|
||||
|
||||
```INI
|
||||
[incoming]
|
||||
exten => _X.,1,Verbose(2,Incoming call to extension ${EXTEN})
|
||||
exten => _X.,n,Dial(SIP/${EXTEN})
|
||||
exten => _X.,n,Hangup()
|
||||
```
|
||||
|
||||
This dialplan may be utilized to accept calls to extensions, which then dial a
|
||||
numbered device name configured in one of the channel configuration files (such
|
||||
as sip.conf, iax.conf, etc...) (see the section Proper Device Naming for more
|
||||
information on why this approach is flawed).
|
||||
as sip.conf, iax.conf, etc...) (see [Proper Device Naming] for more information
|
||||
on why this approach is flawed).
|
||||
|
||||
The example we've given above looks harmless enough until you take into
|
||||
consideration that several channel technologies accept characters that could
|
||||
|
@ -83,27 +68,38 @@ to dial extension 500 (which in our example above would create the string
|
|||
SIP/500 and is then used by the Dial() application to place a call), someone
|
||||
could potentially send a string like "500&SIP/itsp/14165551212".
|
||||
|
||||
The string "500&SIP/itsp/14165551212" would then be contained within the
|
||||
The string "500&SIP/itsp/14165551212" would then be contained within the
|
||||
${EXTEN} channel variable, which is then utilized by the Dial() application in
|
||||
our example, thereby giving you the dialplan line of:
|
||||
|
||||
```INI
|
||||
exten => _X.,n,Dial(SIP/500&SIP/itsp/14165551212)
|
||||
```
|
||||
|
||||
Our example above has now provided someone with a method to place calls out of
|
||||
your ITSP in a place where you didn't expect to allow it. There are a couple of
|
||||
ways in which you can mitigate this impact: stricter pattern matching, or using
|
||||
the FILTER() dialplan function.
|
||||
|
||||
Strict Pattern Matching
|
||||
-----------------------
|
||||
The CALLERID(num) and CALLERID(name) values are other commonly used values that
|
||||
are sources of data potentially supplied by outside sources. If you use these
|
||||
values as parameters to the System(), MixMonitor(), or Monitor() applications
|
||||
or the SHELL() dialplan function, you can allow injection of arbitrary operating
|
||||
system command execution. The FILTER() dialplan function is available to remove
|
||||
dangerous characters from untrusted strings to block the command injection.
|
||||
|
||||
|
||||
### Strict Pattern Matching
|
||||
|
||||
The simple way to mitigate this problem is with a strict pattern match that does
|
||||
not utilize the period (.) or bang (!) characters to match on one-or-more
|
||||
not utilize the period (.) or bang (!) characters to match on one-or-more
|
||||
characters or zero-or-more characters (respectively). To fine tune our example
|
||||
to only accept three digit extensions, we could change our pattern match to
|
||||
be:
|
||||
|
||||
```INI
|
||||
exten => _XXX,n,Dial(SIP/${EXTEN})
|
||||
```
|
||||
|
||||
In this way, we have minimized our impact because we're not allowing anything
|
||||
other than the numbers zero through nine. But in some cases we really do need to
|
||||
|
@ -111,8 +107,8 @@ handle variable pattern matches, such as when dialing international numbers
|
|||
or when we want to handle something like a SIP URI. In this case, we'll need to
|
||||
utilize the FILTER() dialplan function.
|
||||
|
||||
Using FILTER()
|
||||
--------------
|
||||
|
||||
### Using FILTER()
|
||||
|
||||
The FILTER() dialplan function is used to filter strings by only allowing
|
||||
characters that you have specified. This is a perfect candidate for controlling
|
||||
|
@ -121,14 +117,16 @@ application which will contain dynamic information passed to Asterisk from an
|
|||
external source. Lets take a look at how we can use FILTER() to control what
|
||||
data we allow.
|
||||
|
||||
Using our previous example to accept any string length of 2 or more characters,
|
||||
starting with a number of zero through nine, we can use FILTER() to limit what
|
||||
Using our previous example to accept any string length of 2 or more characters,
|
||||
starting with a number of zero through nine, we can use FILTER() to limit what
|
||||
we will accept to just numbers. Our example would then change to something like:
|
||||
|
||||
```INI
|
||||
[incoming]
|
||||
exten => _X.,1,Verbose(2,Incoming call to extension ${EXTEN})
|
||||
exten => _X.,n,Dial(SIP/${FILTER(0-9,${EXTEN})})
|
||||
exten => _X.,n,Hangup()
|
||||
```
|
||||
|
||||
Note how we've wrapped the ${EXTEN} channel variable with the FILTER() function
|
||||
which will then only pass back characters that fit into the numerical range that
|
||||
|
@ -139,17 +137,20 @@ Dial() application directly, we could save the value to a channel variable,
|
|||
which has a side effect of being usable in other locations of your dialplan if
|
||||
necessary, and to handle error checking in a separate location.
|
||||
|
||||
```INI
|
||||
[incoming]
|
||||
exten => _X.,1,Verbose(2,Incoming call to extension ${EXTEN})
|
||||
exten => _X.,n,Set(SAFE_EXTEN=${FILTER(0-9,${EXTEN})})
|
||||
exten => _X.,n,Dial(SIP/${SAFE_EXTEN})
|
||||
exten => _X.,n,Hangup()
|
||||
```
|
||||
|
||||
Now we can use the ${SAFE_EXTEN} channel variable anywhere throughout the rest
|
||||
of our dialplan, knowing we've already filtered it. We could also perform an
|
||||
error check to verify that what we've received in ${EXTEN} also matches the data
|
||||
passed back by FILTER(), and to fail the call if things do not match.
|
||||
|
||||
```INI
|
||||
[incoming]
|
||||
exten => _X.,1,Verbose(2,Incoming call to extension ${EXTEN})
|
||||
exten => _X.,n,Set(SAFE_EXTEN=${FILTER(0-9,${EXTEN})})
|
||||
|
@ -161,14 +162,17 @@ exten => error,1,Verbose(2,Values of EXTEN and SAFE_EXTEN did not match.)
|
|||
exten => error,n,Verbose(2,EXTEN: "${EXTEN}" -- SAFE_EXTEN: "${SAFE_EXTEN}")
|
||||
exten => error,n,Playback(silence/1&invalid)
|
||||
exten => error,n,Hangup()
|
||||
```
|
||||
|
||||
Another example would be using FILTER() to control the characters we accept when
|
||||
we're expecting to get a SIP URI for dialing.
|
||||
|
||||
```INI
|
||||
[incoming]
|
||||
exten => _[0-9a-zA-Z].,1,Verbose(2,Incoming call to extension ${EXTEN})
|
||||
exten => _[0-9a-zA-Z].,n,Dial(SIP/${FILTER(.@0-9a-zA-Z,${EXTEN})
|
||||
exten => _[0-9a-zA-Z].,n,Hangup()
|
||||
```
|
||||
|
||||
Of course the FILTER() function doesn't check the formatting of the incoming
|
||||
request. There is also the REGEX() dialplan function which can be used to
|
||||
|
@ -181,9 +185,7 @@ by typing "core show function FILTER" and "core show function REGEX" from your
|
|||
Asterisk console.
|
||||
|
||||
|
||||
====================
|
||||
Proper Device Naming
|
||||
====================
|
||||
## Proper Device Naming
|
||||
|
||||
In Asterisk, the concept of an extension number being tied to a specific device
|
||||
does not exist. Asterisk is aware of devices it can call or receive calls from,
|
||||
|
@ -201,10 +203,12 @@ device configurations which utilize a number, and even worse, a password that
|
|||
matches the devices name. For example, take a look at this poorly created device
|
||||
in sip.conf:
|
||||
|
||||
```INI
|
||||
[1000]
|
||||
type=friend
|
||||
context=international_dialing
|
||||
secret=1000
|
||||
```
|
||||
|
||||
As implied by the context, we've permitted a device named 1000 with a password
|
||||
of 1000 to place calls internationally. If your PBX system is accessible via
|
||||
|
@ -217,10 +221,12 @@ A more secure example for the device would be to use something like the MAC
|
|||
address of the device, along with a strong password (see the section Secure
|
||||
Passwords). The following example would be more secure:
|
||||
|
||||
```INI
|
||||
[0004f2040001]
|
||||
type=friend
|
||||
context=international_dialing
|
||||
secret=aE3%B8*$jk^G
|
||||
```
|
||||
|
||||
Then in your dialplan, you would reference the device via the MAC address of the
|
||||
device (or if using the softphone, a MAC address of a network interface on the
|
||||
|
@ -230,25 +236,25 @@ Also note that you should NOT use this password, as it will likely be one of the
|
|||
first ones added to the dictionary for brute force attacks.
|
||||
|
||||
|
||||
================
|
||||
Secure Passwords
|
||||
================
|
||||
## Secure Passwords
|
||||
|
||||
Secure passwords are necessary in many (if not all) environments, and Asterisk
|
||||
Secure passwords are necessary in many (if not all) environments, and Asterisk
|
||||
is certainly no exception, especially when it comes to expensive long distance
|
||||
calls that could potentially cost your company hundreds or thousands of dollars
|
||||
on an expensive monthly phone bill, with little to no recourse to fight the
|
||||
charges.
|
||||
|
||||
Whenever you are positioned to add a password to your system, whether that is
|
||||
for a device configuration, a database connection, or any other secure
|
||||
for a device configuration, a database connection, or any other secure
|
||||
connection, be sure to use a secure password. A good example of a secure
|
||||
password would be something like:
|
||||
|
||||
```
|
||||
aE3%B8*$jk^G
|
||||
```
|
||||
|
||||
Our password also contains 12 characters with a mixture of upper and
|
||||
lower case characters, numbers, and symbols. Because these passwords are likely
|
||||
lower case characters, numbers, and symbols. Because these passwords are likely
|
||||
to only be entered once, or loaded via a configuration file, there is
|
||||
no need to create simple passwords, even in testing. Some of the holes found in
|
||||
production systems used for exploitations involve finding the one test extension
|
||||
|
@ -256,19 +262,18 @@ that contains a weak password that was forgotten prior to putting a system into
|
|||
production.
|
||||
|
||||
Using a web search you can find several online password generators such as
|
||||
http://www.strongpasswordgenerator.com or there are several scripts that can be
|
||||
[Strong Password Generator] or there are several scripts that can be
|
||||
used to generate a strong password.
|
||||
|
||||
|
||||
============================
|
||||
Reducing Pattern Match Typos
|
||||
============================
|
||||
## Reducing Pattern Match Typos
|
||||
|
||||
As of Asterisk 1.6.2, a new method for reducing the number of complex pattern
|
||||
matches you need to enter, which can reduce typos in your dialplan, has been
|
||||
implemented. Traditionally, a dialplan with a complex pattern match would look
|
||||
something like:
|
||||
|
||||
```INI
|
||||
exten => _[3-5]XXX,1,Verbose(Incoming call to ${EXTEN})
|
||||
exten => _[3-5]XXX,n,Set(DEVICE=${DB(device/mac_address/${EXTEN})})
|
||||
exten => _[3-5]XXX,n,Set(TECHNOLOGY=${DB(device/technology/${EXTEN})})
|
||||
|
@ -281,12 +286,14 @@ exten => _[3-5]XXX,n,Hangup()
|
|||
exten => error,1,Verbose(2,Unable to lookup technology or device for extension)
|
||||
exten => error,n,Playback(silence/1&num-not-in-db)
|
||||
exten => error,n,Hangup()
|
||||
```
|
||||
|
||||
Of course there exists the possibility for a typo when retyping the pattern
|
||||
match _[3-5]XXX which will match on extensions 3000 through 5999. We can
|
||||
match _\[3-5\]XXX which will match on extensions 3000 through 5999. We can
|
||||
minimize this error by utilizing the same => prefix on all lines beyond the
|
||||
first one. Our same dialplan with using same => would look like the following:
|
||||
|
||||
```INI
|
||||
exten => _[3-5]XXX,1,Verbose(Incoming call to ${EXTEN})
|
||||
same => n,Set(DEVICE=${DB(device/mac_address/${EXTEN})})
|
||||
same => n,Set(TECHNOLOGY=${DB(device/technology/${EXTEN})})
|
||||
|
@ -299,11 +306,10 @@ same => n,Hangup()
|
|||
exten => error,1,Verbose(2,Unable to lookup technology or device for extension)
|
||||
same => n,Playback(silence/1&num-not-in-db)
|
||||
same => n,Hangup()
|
||||
```
|
||||
|
||||
|
||||
============================
|
||||
Manager Class Authorizations
|
||||
============================
|
||||
## Manager Class Authorizations
|
||||
|
||||
Manager accounts have associated class authorizations that define what actions
|
||||
and events that account can execute/receive. In order to run Asterisk commands
|
||||
|
@ -315,6 +321,7 @@ have the potential to alter or affect the system as well, even though the
|
|||
class authorization for origination commands is "originate". Take, for example,
|
||||
the Originate manager command:
|
||||
|
||||
```
|
||||
Action: Originate
|
||||
Channel: SIP/foo
|
||||
Exten: s
|
||||
|
@ -322,17 +329,20 @@ Context: default
|
|||
Priority: 1
|
||||
Application: System
|
||||
Data: echo hello world!
|
||||
```
|
||||
|
||||
This manager command will attempt to execute an Asterisk application, System,
|
||||
which is normally associated with the "system" class authorication. While some
|
||||
which is normally associated with the "system" class authorization. While some
|
||||
checks have been put into Asterisk to take this into account, certain dialplan
|
||||
configurations and/or clever manipulation of the Originate manager action can
|
||||
circumvent these checks. For example, take the following dialplan:
|
||||
|
||||
```INI
|
||||
exten => s,1,Verbose(Incoming call)
|
||||
same => n,MixMonitor(foo.wav,,${EXEC_COMMAND})
|
||||
same => n,Dial(SIP/bar)
|
||||
same => n,Hangup()
|
||||
```
|
||||
|
||||
Whatever has been defined in the variable EXEC_COMMAND will be executed after
|
||||
MixMonitor has finished recording the call. The dialplan writer may have
|
||||
|
@ -347,23 +357,34 @@ same as the class authorization "system". Good system configuration, such as
|
|||
not running Asterisk as root, can prevent serious problems from arising when
|
||||
allowing external connections to originate calls into Asterisk.
|
||||
|
||||
===========================
|
||||
Avoid Privilege Escalations
|
||||
===========================
|
||||
|
||||
## Avoid Privilege Escalations
|
||||
|
||||
External control protocols, such as Manager, often have the ability to get and
|
||||
set channel variables; which allows the execution of dialplan functions.
|
||||
|
||||
Dialplan functions within Asterisk are incredibly powerful, which is wonderful
|
||||
for building applications using Asterisk. But during the read or write
|
||||
execution, certain diaplan functions do much more. For example, reading the
|
||||
execution, certain dialplan functions do much more. For example, reading the
|
||||
SHELL() function can execute arbitrary commands on the system Asterisk is
|
||||
running on. Writing to the FILE() function can change any file that Asterisk has
|
||||
write access to.
|
||||
|
||||
When these functions are executed from an external protocol, that execution
|
||||
could result in a privilege escalation. Asterisk can inhibit the execution of
|
||||
these functions, if live_dangerously in the [options] section of asterisk.conf
|
||||
these functions, if live_dangerously in the \[options\] section of asterisk.conf
|
||||
is set to no.
|
||||
|
||||
In Asterisk 12 and later, live_dangerously defaults to no.
|
||||
|
||||
|
||||
[voip-security-webinar]: https://www.asterisk.org/security/webinar/
|
||||
[blog-sip-security]: http://blogs.digium.com/2009/03/28/sip-security/
|
||||
[Strong Password Generator]: https://www.strongpasswordgenerator.com
|
||||
[Filtering Data]: #filtering-data
|
||||
[Proper Device Naming]: #proper-device-naming
|
||||
[Secure Passwords]: #secure-passwords
|
||||
[Reducing Pattern Match Typos]: #reducing-pattern-match-typos
|
||||
[Manager Class Authorizations]: #manager-class-authorizations
|
||||
[Avoid Privilege Escalations]: #avoid-privilege-escalations
|
||||
[Important Security Considerations]: https://wiki.asterisk.org/wiki/display/AST/Important+Security+Considerations
|
|
@ -9,18 +9,18 @@ potential licensing and/or patent implications that has on your usage and
|
|||
distribution of Asterisk.
|
||||
|
||||
Even though Asterisk is released as open source under the terms of the
|
||||
GPLv2 (see LICENSE for details), no core functionality in Asterisk has any
|
||||
GPLv2 (see LICENSE for details), no core functionality in Asterisk has any
|
||||
dependencies on libraries that are licensed under the GPL. One reason a module
|
||||
may be in the add-ons category is that it may have a GPL dependency. Since
|
||||
these dependencies are not compatible with dual licensing of Asterisk, the
|
||||
dependant modules are set aside to make it clear that they may not be used
|
||||
with commercial versions of Asterisk, unless other licensing arrangements are
|
||||
dependant modules are set aside to make it clear that they may not be used
|
||||
with commercial versions of Asterisk, unless other licensing arrangements are
|
||||
made with the copyright holders of those dependencies.
|
||||
|
||||
Another reason that modules may be set aside is that there may be
|
||||
additional restrictions on the usage of the code imposed by the license or
|
||||
related patents. The MySQL and MP3 modules are examples of this.
|
||||
|
||||
|
||||
If you have any questions, contact your lawyer.
|
||||
|
||||
===============================================================================
|
||||
|
|
|
@ -1,98 +1,71 @@
|
|||
===============================================================================
|
||||
=== The Asterisk(R) Open Source PBX
|
||||
===
|
||||
=== by Mark Spencer <markster@digium.com>
|
||||
=== and the Asterisk.org developer community
|
||||
===
|
||||
=== Copyright (C) 2001-2009 Digium, Inc.
|
||||
=== and other copyright holders.
|
||||
===============================================================================
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
--- SECURITY ------------------------------------------------------------------
|
||||
# The Asterisk(R) Open Source PBX
|
||||
```text
|
||||
By Mark Spencer <markster@digium.com> and the Asterisk.org developer community.
|
||||
Copyright (C) 2001-2019 Digium, Inc. and other copyright holders.
|
||||
```
|
||||
## SECURITY
|
||||
|
||||
It is imperative that you read and fully understand the contents of
|
||||
the security information document before you attempt to configure and run
|
||||
an Asterisk server.
|
||||
|
||||
If you downloaded Asterisk as a tarball, see the security section in the PDF
|
||||
version of the documentation in doc/tex/asterisk.pdf. Alternatively, pull up
|
||||
the HTML version of the documentation in doc/tex/asterisk/index.html. The
|
||||
source for the security document is available in doc/tex/security.tex.
|
||||
-------------------------------------------------------------------------------
|
||||
See [Important Security Considerations] for more information.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
--- WHAT IS ASTERISK ? --------------------------------------------------------
|
||||
## WHAT IS ASTERISK ?
|
||||
|
||||
Asterisk is an Open Source PBX and telephony toolkit. It is, in a
|
||||
sense, middleware between Internet and telephony channels on the bottom,
|
||||
and Internet and telephony applications at the top. However, Asterisk supports
|
||||
more telephony interfaces than just Internet telephony. Asterisk also has a
|
||||
vast amount of support for traditional PSTN telephony, as well. For more
|
||||
information on the project itself, please visit the Asterisk home page at:
|
||||
vast amount of support for traditional PSTN telephony, as well.
|
||||
|
||||
http://www.asterisk.org
|
||||
|
||||
The official Asterisk wiki can be found at:
|
||||
|
||||
https://wiki.asterisk.org
|
||||
|
||||
In addition you'll find lots of information compiled by the Asterisk
|
||||
community on this Wiki:
|
||||
|
||||
http://www.voip-info.org/wiki-Asterisk
|
||||
For more information on the project itself, please visit the Asterisk
|
||||
[home page] and the official [wiki]. In addition you'll find lots
|
||||
of information compiled by the Asterisk community at [voip-info.org].
|
||||
|
||||
There is a book on Asterisk published by O'Reilly under the Creative Commons
|
||||
License. It is available in book stores as well as in a downloadable version on
|
||||
the http://www.asteriskdocs.org web site.
|
||||
-------------------------------------------------------------------------------
|
||||
the [asteriskdocs.org] web site.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
--- SUPPORTED OPERATING SYSTEMS -----------------------------------------------
|
||||
## SUPPORTED OPERATING SYSTEMS
|
||||
|
||||
### Linux
|
||||
|
||||
--- Linux
|
||||
The Asterisk Open Source PBX is developed and tested primarily on the
|
||||
GNU/Linux operating system, and is supported on every major GNU/Linux
|
||||
distribution.
|
||||
|
||||
--- Others
|
||||
### Others
|
||||
|
||||
Asterisk has also been 'ported' and reportedly runs properly on other
|
||||
operating systems as well, including Sun Solaris, Apple's Mac OS X, Cygwin,
|
||||
and the BSD variants.
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
--- GETTING STARTED -----------------------------------------------------------
|
||||
## GETTING STARTED
|
||||
|
||||
First, be sure you've got supported hardware (but note that you don't need
|
||||
ANY special hardware, not even a sound card) to install and run Asterisk.
|
||||
|
||||
Supported telephony hardware includes:
|
||||
Supported telephony hardware includes:
|
||||
* All Analog and Digital Interface cards from [Digium]
|
||||
* QuickNet Internet PhoneJack and LineJack (http://www.quicknet.net)
|
||||
* any full duplex sound card supported by ALSA, OSS, or PortAudio
|
||||
* any ISDN card supported by mISDN on Linux
|
||||
* The Xorcom Astribank channel bank
|
||||
* VoiceTronix OpenLine products
|
||||
|
||||
* All Analog and Digital Interface cards from Digium (www.digium.com)
|
||||
* QuickNet Internet PhoneJack and LineJack (http://www.quicknet.net)
|
||||
* any full duplex sound card supported by ALSA, OSS, or PortAudio
|
||||
* any ISDN card supported by mISDN on Linux
|
||||
* The Xorcom Astribank channel bank
|
||||
* VoiceTronix OpenLine products
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
--- UPGRADING FROM AN EARLIER VERSION -----------------------------------------
|
||||
### UPGRADING FROM AN EARLIER VERSION
|
||||
|
||||
If you are updating from a previous version of Asterisk, make sure you
|
||||
read the UPGRADE.txt file in the source directory. There are some files
|
||||
read the [UPGRADE.txt] file in the source directory. There are some files
|
||||
and configuration options that you will have to change, even though we
|
||||
made every effort possible to maintain backwards compatibility.
|
||||
|
||||
In order to discover new features to use, please check the configuration
|
||||
examples in the /configs directory of the source code distribution. For a
|
||||
list of new features in this version of Asterisk, see the CHANGES file.
|
||||
-------------------------------------------------------------------------------
|
||||
examples in the [configs] directory of the source code distribution. For a
|
||||
list of new features in this version of Asterisk, see the [CHANGES] file.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
--- NEW INSTALLATIONS ---------------------------------------------------------
|
||||
### NEW INSTALLATIONS
|
||||
|
||||
Ensure that your system contains a compatible compiler and development
|
||||
libraries. Asterisk requires either the GNU Compiler Collection (GCC) version
|
||||
|
@ -101,55 +74,54 @@ the gcc language extensions. In addition, your system needs to have the C
|
|||
library headers available, and the headers and libraries for ncurses.
|
||||
|
||||
There are many modules that have additional dependencies. To see what
|
||||
libraries are being looked for, see ./configure --help, or run
|
||||
"make menuselect" to view the dependencies for specific modules.
|
||||
libraries are being looked for, see `./configure --help`, or run
|
||||
`make menuselect` to view the dependencies for specific modules.
|
||||
|
||||
On many distributions, these dependencies are installed by packages with names
|
||||
like 'glibc-devel', 'ncurses-devel', 'openssl-devel' and 'zlib-devel'
|
||||
like 'glibc-devel', 'ncurses-devel', 'openssl-devel' and 'zlib-devel'
|
||||
or similar.
|
||||
|
||||
So, let's proceed:
|
||||
So, let's proceed:
|
||||
1. Read this file.
|
||||
|
||||
1) Read this README file.
|
||||
|
||||
There are more documents than this one in the doc/ directory. You may also
|
||||
There are more documents than this one in the [doc] directory. You may also
|
||||
want to check the configuration files that contain examples and reference
|
||||
guides. They are all in the configs/ directory.
|
||||
guides in the [configs] directory.
|
||||
|
||||
2) Run "./configure"
|
||||
2. Run `./configure`
|
||||
|
||||
Execute the configure script to guess values for system-dependent
|
||||
variables used during compilation.
|
||||
|
||||
3) Run "make menuselect" [optional]
|
||||
3. Run `make menuselect` _\[optional]_
|
||||
|
||||
This is needed if you want to select the modules that will be compiled and to
|
||||
check dependencies for various optional modules.
|
||||
|
||||
4) Run "make"
|
||||
4. Run `make`
|
||||
|
||||
Assuming the build completes successfully:
|
||||
Assuming the build completes successfully:
|
||||
|
||||
5) Run "make install"
|
||||
5. Run `make install`
|
||||
|
||||
If this is your first time working with Asterisk, you may wish to install
|
||||
the sample PBX, with demonstration extensions, etc. If so, run:
|
||||
|
||||
6) "make samples"
|
||||
6. Run `make samples`
|
||||
|
||||
Doing so will overwrite any existing configuration files you have installed.
|
||||
|
||||
Finally, you can launch Asterisk in the foreground mode (not a daemon) with:
|
||||
|
||||
# asterisk -vvvc
|
||||
|
||||
7. Finally, you can launch Asterisk in the foreground mode (not a daemon) with:
|
||||
```
|
||||
# asterisk -vvvc
|
||||
```
|
||||
You'll see a bunch of verbose messages fly by your screen as Asterisk
|
||||
initializes (that's the "very very verbose" mode). When it's ready, if
|
||||
you specified the "c" then you'll get a command line console, that looks
|
||||
like this:
|
||||
|
||||
*CLI>
|
||||
|
||||
```
|
||||
*CLI>
|
||||
```
|
||||
You can type "core show help" at any time to get help with the system. For help
|
||||
with a specific command, type "core show help <command>". To start the PBX using
|
||||
your sound card, you can type "console dial" to dial the PBX. Then you can use
|
||||
|
@ -162,56 +134,53 @@ then it won't work right (not yet).
|
|||
information on how to start and stop Asterisk, as well as all the command
|
||||
line options for starting Asterisk.
|
||||
|
||||
Feel free to look over the configuration files in /etc/asterisk, where you
|
||||
Feel free to look over the configuration files in `/etc/asterisk`, where you
|
||||
will find a lot of information about what you can do with Asterisk.
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
--- ABOUT CONFIGURATION FILES -------------------------------------------------
|
||||
### ABOUT CONFIGURATION FILES
|
||||
|
||||
All Asterisk configuration files share a common format. Comments are
|
||||
delimited by ';' (since '#' of course, being a DTMF digit, may occur in
|
||||
many places). A configuration file is divided into sections whose names
|
||||
appear in []'s. Each section typically contains two types of statements,
|
||||
those of the form 'variable = value', and those of the form 'object =>
|
||||
parameters'. Internally the use of '=' and '=>' is exactly the same, so
|
||||
parameters'. Internally the use of '=' and '=>' is exactly the same, so
|
||||
they're used only to help make the configuration file easier to
|
||||
understand, and do not affect how it is actually parsed.
|
||||
|
||||
Entries of the form 'variable=value' set the value of some parameter in
|
||||
asterisk. For example, in dahdi.conf, one might specify:
|
||||
|
||||
asterisk. For example, in [chan_dahdi.conf], one might specify:
|
||||
```
|
||||
switchtype=national
|
||||
|
||||
```
|
||||
In order to indicate to Asterisk that the switch they are connecting to is
|
||||
of the type "national". In general, the parameter will apply to
|
||||
instantiations which occur below its specification. For example, if the
|
||||
configuration file read:
|
||||
|
||||
```
|
||||
switchtype = national
|
||||
channel => 1-4
|
||||
channel => 10-12
|
||||
switchtype = dms100
|
||||
channel => 25-47
|
||||
```
|
||||
|
||||
The "national" switchtype would be applied to channels one through
|
||||
four and channels 10 through 12, whereas the "dms100" switchtype would
|
||||
apply to channels 25 through 47.
|
||||
|
||||
|
||||
The "object => parameters" instantiates an object with the given
|
||||
parameters. For example, the line "channel => 25-47" creates objects for
|
||||
the channels 25 through 47 of the card, obtaining the settings
|
||||
from the variables specified above.
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
--- SPECIAL NOTE ON TIME ------------------------------------------------------
|
||||
|
||||
### SPECIAL NOTE ON TIME
|
||||
|
||||
Those using SIP phones should be aware that Asterisk is sensitive to
|
||||
large jumps in time. Manually changing the system time using date(1)
|
||||
(or other similar commands) may cause SIP registrations and other
|
||||
internal processes to fail. If your system cannot keep accurate time
|
||||
by itself use NTP (http://www.ntp.org/) to keep the system clock
|
||||
by itself use [NTP] to keep the system clock
|
||||
synchronized to "real time". NTP is designed to keep the system clock
|
||||
synchronized by speeding up or slowing down the system clock until it
|
||||
is synchronized to "real time" rather than by jumping the time and
|
||||
|
@ -228,10 +197,8 @@ on UTC. UTC does not use daylight savings time.
|
|||
|
||||
Also note that this issue is separate from the clocking of TDM
|
||||
channels, and is known to at least affect SIP registrations.
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
--- FILE DESCRIPTORS ----------------------------------------------------------
|
||||
### FILE DESCRIPTORS
|
||||
|
||||
Depending on the size of your system and your configuration,
|
||||
Asterisk can consume a large number of file descriptors. In UNIX,
|
||||
|
@ -247,50 +214,56 @@ calls that your system can handle. For example, if the limit is set
|
|||
at 1024 (a common default value) Asterisk can handle approximately 150
|
||||
SIP calls simultaneously. To change the number of file descriptors
|
||||
follow the instructions for your system below:
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
--- PAM-based Linux System ----------------------------------------------------
|
||||
#### PAM-BASED LINUX SYSTEM
|
||||
|
||||
If your system uses PAM (Pluggable Authentication Modules) edit
|
||||
/etc/security/limits.conf. Add these lines to the bottom of the file:
|
||||
|
||||
`/etc/security/limits.conf`. Add these lines to the bottom of the file:
|
||||
```text
|
||||
root soft nofile 4096
|
||||
root hard nofile 8196
|
||||
asterisk soft nofile 4096
|
||||
asterisk hard nofile 8196
|
||||
```
|
||||
|
||||
(adjust the numbers to taste). You may need to reboot the system for
|
||||
these changes to take effect.
|
||||
|
||||
== Generic UNIX System ==
|
||||
#### GENERIC UNIX SYSTEM
|
||||
|
||||
If there are no instructions specifically adapted to your system
|
||||
above you can try adding the command "ulimit -n 8192" to the script
|
||||
above you can try adding the command `ulimit -n 8192` to the script
|
||||
that starts Asterisk.
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
--- MORE INFORMATION ----------------------------------------------------------
|
||||
## MORE INFORMATION
|
||||
|
||||
See the doc directory for more documentation on various features. Again,
|
||||
please read all the configuration samples that include documentation on
|
||||
the configuration options.
|
||||
See the [doc] directory for more documentation on various features.
|
||||
Again, please read all the configuration samples that include documentation
|
||||
on the configuration options.
|
||||
|
||||
If this release of Asterisk was downloaded from a tarball, then some
|
||||
additional documentation should have been included.
|
||||
* doc/tex/asterisk.pdf --- PDF version of the documentation
|
||||
* doc/tex/asterisk/index.html --- HTML version of the documentation
|
||||
Finally, you may wish to visit the [support] site and join the [mailing
|
||||
list] if you're interested in getting more information.
|
||||
|
||||
Finally, you may wish to visit the web site and join the mailing list if
|
||||
you're interested in getting more information.
|
||||
Welcome to the growing worldwide community of Asterisk users!
|
||||
```
|
||||
Mark Spencer, and the Asterisk.org development community
|
||||
```
|
||||
|
||||
http://www.asterisk.org/support
|
||||
---
|
||||
|
||||
Welcome to the growing worldwide community of Asterisk users!
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
--- Mark Spencer, and the Asterisk.org development community
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
Asterisk is a trademark of Digium, Inc.
|
||||
|
||||
[home page]: https://www.asterisk.org
|
||||
[support]: https://www.asterisk.org/support
|
||||
[wiki]: https://wiki.asterisk.org/
|
||||
[mailing list]: http://lists.digium.com/mailman/listinfo/asterisk-users
|
||||
[chan_dahdi.conf]: configs/samples/chan_dahdi.conf.sample
|
||||
[voip-info.org]: http://www.voip-info.org/wiki-Asterisk
|
||||
[asteriskdocs.org]: http://www.asteriskdocs.org
|
||||
[NTP]: http://www.ntp.org/
|
||||
[Digium]: https://www.digium.com/
|
||||
[UPGRADE.txt]: UPGRADE.txt
|
||||
[CHANGES]: CHANGES
|
||||
[configs]: configs
|
||||
[doc]: doc
|
||||
[Important Security Considerations]: https://wiki.asterisk.org/wiki/display/AST/Important+Security+Considerations
|
218
UPGRADE-1.2.txt
218
UPGRADE-1.2.txt
|
@ -1,218 +0,0 @@
|
|||
=========================================================
|
||||
===
|
||||
=== Information for upgrading from Asterisk 1.0 to 1.2
|
||||
===
|
||||
=== This file documents all the changes that MUST be taken
|
||||
=== into account when upgrading between the Asterisk
|
||||
=== versions listed below. These changes may require that
|
||||
=== you modify your configuration files, dialplan or (in
|
||||
=== some cases) source code if you have your own Asterisk
|
||||
=== modules or patches. These files also includes advance
|
||||
=== notice of any functionality that has been marked as
|
||||
=== 'deprecated' and may be removed in a future release,
|
||||
=== along with the suggested replacement functionality.
|
||||
===
|
||||
=========================================================
|
||||
|
||||
Compiling:
|
||||
|
||||
* The Asterisk 1.2 source code now uses C language features
|
||||
supported only by 'modern' C compilers. Generally, this means GCC
|
||||
version 3.0 or higher, although some GCC 2.96 releases will also
|
||||
work. Some non-GCC compilers that support C99 and the common GCC
|
||||
extensions (including anonymous structures and unions) will also
|
||||
work. All releases of GCC 2.95 do _not_ have the requisite feature
|
||||
support; systems using that compiler will need to be upgraded to
|
||||
a more recent compiler release.
|
||||
|
||||
Dialplan Expressions:
|
||||
|
||||
* The dialplan expression parser (which handles $[ ... ] constructs)
|
||||
has gone through a major upgrade, but has one incompatible change:
|
||||
spaces are no longer required around expression operators, including
|
||||
string comparisons. However, you can now use quoting to keep strings
|
||||
together for comparison. For more details, please read the
|
||||
doc/README.variables file, and check over your dialplan for possible
|
||||
problems.
|
||||
|
||||
Agents:
|
||||
|
||||
* The default for ackcall has been changed to "no" instead of "yes"
|
||||
because of a bug which caused the "yes" behavior to generally act like
|
||||
"no". You may need to adjust the value if your agents behave
|
||||
differently than you expect with respect to acknowledgement.
|
||||
|
||||
* The AgentCallBackLogin application now requires a second '|' before
|
||||
specifying an extension@context. This is to distinguish the options
|
||||
string from the extension, so that they do not conflict. See
|
||||
'show application AgentCallbackLogin' for more details.
|
||||
|
||||
Parking:
|
||||
|
||||
* Parking behavior has changed slightly; when a parked call times out,
|
||||
Asterisk will attempt to deliver the call back to the extension that
|
||||
parked it, rather than the 's' extension. If that extension is busy
|
||||
or unavailable, the parked call will be lost.
|
||||
|
||||
Dialing:
|
||||
|
||||
* The Caller*ID of the outbound leg is now the extension that was
|
||||
called, rather than the Caller*ID of the inbound leg of the call. The
|
||||
"o" flag for Dial can be used to restore the original behavior if
|
||||
desired. Note that if you are looking for the originating callerid
|
||||
from the manager event, there is a new manager event "Dial" which
|
||||
provides the source and destination channels and callerid.
|
||||
|
||||
IAX:
|
||||
|
||||
* The naming convention for IAX channels has changed in two ways:
|
||||
1. The call number follows a "-" rather than a "/" character.
|
||||
2. The name of the channel has been simplified to IAX2/peer-callno,
|
||||
rather than IAX2/peer@peer-callno or even IAX2/peer@peer/callno.
|
||||
|
||||
SIP:
|
||||
|
||||
* The global option "port" in 1.0.X that is used to set which port to
|
||||
bind to has been changed to "bindport" to be more consistent with
|
||||
the other channel drivers and to avoid confusion with the "port"
|
||||
option for users/peers.
|
||||
|
||||
* The "Registry" event now uses "Username" rather than "User" for
|
||||
consistency with IAX.
|
||||
|
||||
Applications:
|
||||
|
||||
* With the addition of dialplan functions (which operate similarly
|
||||
to variables), the SetVar application has been renamed to Set.
|
||||
|
||||
* The CallerPres application has been removed. Use SetCallerPres
|
||||
instead. It accepts both numeric and symbolic names.
|
||||
|
||||
* The applications GetGroupCount, GetGroupMatchCount, SetGroup, and
|
||||
CheckGroup have been deprecated in favor of functions. Here is a
|
||||
table of their replacements:
|
||||
|
||||
GetGroupCount([groupname][@category] GROUP_COUNT([groupname][@category]) Set(GROUPCOUNT=${GROUP_COUNT()})
|
||||
GroupMatchCount(groupmatch[@category]) GROUP_MATCH_COUNT(groupmatch[@category]) Set(GROUPCOUNT=${GROUP_MATCH_COUNT(SIP/.*)})
|
||||
SetGroup(groupname[@category]) GROUP([category])=groupname Set(GROUP()=test)
|
||||
CheckGroup(max[@category]) N/A GotoIf($[ ${GROUP_COUNT()} > 5 ]?103)
|
||||
|
||||
Note that CheckGroup does not have a direct replacement. There is
|
||||
also a new function called GROUP_LIST() which will return a space
|
||||
separated list of all of the groups set on a channel. The GROUP()
|
||||
function can also return the name of the group set on a channel when
|
||||
used in a read environment.
|
||||
|
||||
* The applications DBGet and DBPut have been deprecated in favor of
|
||||
functions. Here is a table of their replacements:
|
||||
|
||||
DBGet(foo=family/key) Set(foo=${DB(family/key)})
|
||||
DBPut(family/key=${foo}) Set(DB(family/key)=${foo})
|
||||
|
||||
* The application SetLanguage has been deprecated in favor of the
|
||||
function LANGUAGE().
|
||||
|
||||
SetLanguage(fr) Set(LANGUAGE()=fr)
|
||||
|
||||
The LANGUAGE function can also return the currently set language:
|
||||
|
||||
Set(MYLANG=${LANGUAGE()})
|
||||
|
||||
* The applications AbsoluteTimeout, DigitTimeout, and ResponseTimeout
|
||||
have been deprecated in favor of the function TIMEOUT(timeouttype):
|
||||
|
||||
AbsoluteTimeout(300) Set(TIMEOUT(absolute)=300)
|
||||
DigitTimeout(15) Set(TIMEOUT(digit)=15)
|
||||
ResponseTimeout(15) Set(TIMEOUT(response)=15)
|
||||
|
||||
The TIMEOUT() function can also return the currently set timeouts:
|
||||
|
||||
Set(DTIMEOUT=${TIMEOUT(digit)})
|
||||
|
||||
* The applications SetCIDName, SetCIDNum, and SetRDNIS have been
|
||||
deprecated in favor of the CALLERID(datatype) function:
|
||||
|
||||
SetCIDName(Joe Cool) Set(CALLERID(name)=Joe Cool)
|
||||
SetCIDNum(2025551212) Set(CALLERID(number)=2025551212)
|
||||
SetRDNIS(2024561414) Set(CALLERID(RDNIS)=2024561414)
|
||||
|
||||
* The application Record now uses the period to separate the filename
|
||||
from the format, rather than the colon.
|
||||
|
||||
* The application VoiceMail now supports a 'temporary' greeting for each
|
||||
mailbox. This greeting can be recorded by using option 4 in the
|
||||
'mailbox options' menu, and 'change your password' option has been
|
||||
moved to option 5.
|
||||
|
||||
* The application VoiceMailMain now only matches the 'default' context if
|
||||
none is specified in the arguments. (This was the previously
|
||||
documented behavior, however, we didn't follow that behavior.) The old
|
||||
behavior can be restored by setting searchcontexts=yes in voicemail.conf.
|
||||
|
||||
Queues:
|
||||
|
||||
* A queue is now considered empty not only if there are no members but if
|
||||
none of the members are available (e.g. agents not logged on). To
|
||||
restore the original behavior, use "leavewhenempty=strict" or
|
||||
"joinwhenempty=strict" instead of "=yes" for those options.
|
||||
|
||||
* It is now possible to use multi-digit extensions in the exit context
|
||||
for a queue (although you should not have overlapping extensions,
|
||||
as there is no digit timeout). This means that the EXITWITHKEY event
|
||||
in queue_log can now contain a key field with more than a single
|
||||
character in it.
|
||||
|
||||
Extensions:
|
||||
|
||||
* By default, there is a new option called "autofallthrough" in
|
||||
extensions.conf that is set to yes. Asterisk 1.0 (and earlier)
|
||||
behavior was to wait for an extension to be dialed after there were no
|
||||
more extensions to execute. "autofallthrough" changes this behavior
|
||||
so that the call will immediately be terminated with BUSY,
|
||||
CONGESTION, or HANGUP based on Asterisk's best guess. If you are
|
||||
writing an extension for IVR, you must use the WaitExten application
|
||||
if "autofallthrough" is set to yes.
|
||||
|
||||
AGI:
|
||||
|
||||
* AGI scripts did not always get SIGHUP at the end, previously. That
|
||||
behavior has been fixed. If you do not want your script to terminate
|
||||
at the end of AGI being called (e.g. on a hangup) then set SIGHUP to
|
||||
be ignored within your application.
|
||||
|
||||
* CallerID is reported with agi_callerid and agi_calleridname instead
|
||||
of a single parameter holding both.
|
||||
|
||||
Music On Hold:
|
||||
|
||||
* The preferred format for musiconhold.conf has changed; please see the
|
||||
sample configuration file for the new format. The existing format
|
||||
is still supported but will generate warnings when the module is loaded.
|
||||
|
||||
chan_modem:
|
||||
|
||||
* All the chan_modem channel drivers (aopen, bestdata and i4l) are deprecated
|
||||
in this release, and will be removed in the next major Asterisk release.
|
||||
Please migrate to chan_misdn for ISDN interfaces; there is no upgrade
|
||||
path for aopen and bestdata modem users.
|
||||
|
||||
MeetMe:
|
||||
|
||||
* The conference application now allows users to increase/decrease their
|
||||
speaking volume and listening volume (independently of each other and
|
||||
other users); the 'admin' and 'user' menus have changed, and new sound
|
||||
files are included with this release. However, if a user calling in
|
||||
over a Zaptel channel that does NOT have hardware DTMF detection
|
||||
increases their speaking volume, it is likely they will no longer be
|
||||
able to enter/exit the menu or make any further adjustments, as the
|
||||
software DTMF detector will not be able to recognize the DTMF coming
|
||||
from their device.
|
||||
|
||||
GetVar Manager Action:
|
||||
|
||||
* Previously, the behavior of the GetVar manager action reported the value
|
||||
of a variable in the following manner:
|
||||
> name: value
|
||||
This has been changed to a manner similar to the SetVar action and is now
|
||||
> Variable: name
|
||||
> Value: value
|
498
UPGRADE-1.4.txt
498
UPGRADE-1.4.txt
|
@ -1,498 +0,0 @@
|
|||
=========================================================
|
||||
===
|
||||
=== Information for upgrading from Asterisk 1.2 to 1.4
|
||||
===
|
||||
=== These files document all the changes that MUST be taken
|
||||
=== into account when upgrading between the Asterisk
|
||||
=== versions listed below. These changes may require that
|
||||
=== you modify your configuration files, dialplan or (in
|
||||
=== some cases) source code if you have your own Asterisk
|
||||
=== modules or patches. These files also includes advance
|
||||
=== notice of any functionality that has been marked as
|
||||
=== 'deprecated' and may be removed in a future release,
|
||||
=== along with the suggested replacement functionality.
|
||||
===
|
||||
=== UPGRADE-1.2.txt -- Upgrade info for 1.0 to 1.2
|
||||
===
|
||||
=========================================================
|
||||
|
||||
Build Process (configure script):
|
||||
|
||||
Asterisk now uses an autoconf-generated configuration script to learn how it
|
||||
should build itself for your system. As it is a standard script, running:
|
||||
|
||||
$ ./configure --help
|
||||
|
||||
will show you all the options available. This script can be used to tell the
|
||||
build process what libraries you have on your system (if it cannot find them
|
||||
automatically), which libraries you wish to have ignored even though they may
|
||||
be present, etc.
|
||||
|
||||
You must run the configure script before Asterisk will build, although it will
|
||||
attempt to automatically run it for you with no options specified; for most
|
||||
users, that will result in a similar build to what they would have had before
|
||||
the configure script was added to the build process (except for having to run
|
||||
'make' again after the configure script is run). Note that the configure script
|
||||
does NOT need to be re-run just to rebuild Asterisk; you only need to re-run it
|
||||
when your system configuration changes or you wish to build Asterisk with
|
||||
different options.
|
||||
|
||||
Build Process (module selection):
|
||||
|
||||
The Asterisk source tree now includes a basic module selection and build option
|
||||
selection tool called 'menuselect'. Run 'make menuselect' to make your choices.
|
||||
In this tool, you can disable building of modules that you don't care about,
|
||||
turn on/off global options for the build and see which modules will not
|
||||
(and cannot) be built because your system does not have the required external
|
||||
dependencies installed.
|
||||
|
||||
The resulting file from menuselect is called 'menuselect.makeopts'. Note that
|
||||
the resulting menuselect.makeopts file generally contains which modules *not*
|
||||
to build. The modules listed in this file indicate which modules have unmet
|
||||
dependencies, a present conflict, or have been disabled by the user in the
|
||||
menuselect interface. Compiler Flags can also be set in the menuselect
|
||||
interface. In this case, the resulting file contains which CFLAGS are in use,
|
||||
not which ones are not in use.
|
||||
|
||||
If you would like to save your choices and have them applied against all
|
||||
builds, the file can be copied to '~/.asterisk.makeopts' or
|
||||
'/etc/asterisk.makeopts'.
|
||||
|
||||
Build Process (Makefile targets):
|
||||
|
||||
The 'valgrind' and 'dont-optimize' targets have been removed; their functionality
|
||||
is available by enabling the DONT_OPTIMIZE setting in the 'Compiler Flags' menu
|
||||
in the menuselect tool.
|
||||
|
||||
It is now possible to run most make targets against a single subdirectory; from
|
||||
the top level directory, for example, 'make channels' will run 'make all' in the
|
||||
'channels' subdirectory. This also is true for 'clean', 'distclean' and 'depend'.
|
||||
|
||||
Sound (prompt) and Music On Hold files:
|
||||
|
||||
Beginning with Asterisk 1.4, the sound files and music on hold files supplied for
|
||||
use with Asterisk have been replaced with new versions produced from high quality
|
||||
master recordings, and are available in three languages (English, French and
|
||||
Spanish) and in five formats (WAV (uncompressed), mu-Law, a-Law, GSM and G.729).
|
||||
In addition, the music on hold files provided by opsound.org Music are now available
|
||||
in the same five formats, but no longer available in MP3 format.
|
||||
|
||||
The Asterisk 1.4 tarball packages will only include English prompts in GSM format,
|
||||
(as were supplied with previous releases) and the opsound.org MOH files in WAV format.
|
||||
All of the other variations can be installed by running 'make menuselect' and
|
||||
selecting the packages you wish to install; when you run 'make install', those
|
||||
packages will be downloaded and installed along with the standard files included
|
||||
in the tarball.
|
||||
|
||||
If for some reason you expect to not have Internet access at the time you will be
|
||||
running 'make install', you can make your package selections using menuselect and
|
||||
then run 'make sounds' to download (only) the sound packages; this will leave the
|
||||
sound packages in the 'sounds' subdirectory to be used later during installation.
|
||||
|
||||
WARNING: Asterisk 1.4 supports a new layout for sound files in multiple languages;
|
||||
instead of the alternate-language files being stored in subdirectories underneath
|
||||
the existing files (for French, that would be digits/fr, letters/fr, phonetic/fr,
|
||||
etc.) the new layout creates one directory under /var/lib/asterisk/sounds for the
|
||||
language itself, then places all the sound files for that language under that
|
||||
directory and its subdirectories. This is the layout that will be created if you
|
||||
select non-English languages to be installed via menuselect, HOWEVER Asterisk does
|
||||
not default to this layout and will not find the files in the places it expects them
|
||||
to be. If you wish to use this layout, make sure you put 'languageprefix=yes' in your
|
||||
/etc/asterisk/asterisk.conf file, so that Asterisk will know how the files were
|
||||
installed.
|
||||
|
||||
PBX Core:
|
||||
|
||||
* The (very old and undocumented) ability to use BYEXTENSION for dialing
|
||||
instead of ${EXTEN} has been removed.
|
||||
|
||||
* Builtin (res_features) transfer functionality attempts to use the context
|
||||
defined in TRANSFER_CONTEXT variable of the transferer channel first. If
|
||||
not set, it uses the transferee variable. If not set in any channel, it will
|
||||
attempt to use the last non macro context. If not possible, it will default
|
||||
to the current context.
|
||||
|
||||
* The autofallthrough setting introduced in Asterisk 1.2 now defaults to 'yes';
|
||||
if your dialplan relies on the ability to 'run off the end' of an extension
|
||||
and wait for a new extension without using WaitExten() to accomplish that,
|
||||
you will need set autofallthrough to 'no' in your extensions.conf file.
|
||||
|
||||
Command Line Interface:
|
||||
|
||||
* 'show channels concise', designed to be used by applications that will parse
|
||||
its output, previously used ':' characters to separate fields. However, some
|
||||
of those fields can easily contain that character, making the output not
|
||||
parseable. The delimiter has been changed to '!'.
|
||||
|
||||
Applications:
|
||||
|
||||
* In previous Asterisk releases, many applications would jump to priority n+101
|
||||
to indicate some kind of status or error condition. This functionality was
|
||||
marked deprecated in Asterisk 1.2. An option to disable it was provided with
|
||||
the default value set to 'on'. The default value for the global priority
|
||||
jumping option is now 'off'.
|
||||
|
||||
* The applications Cut, Sort, DBGet, DBPut, SetCIDNum, SetCIDName, SetRDNIS,
|
||||
AbsoluteTimeout, DigitTimeout, ResponseTimeout, SetLanguage, GetGroupCount,
|
||||
and GetGroupMatchCount were all deprecated in version 1.2, and therefore have
|
||||
been removed in this version. You should use the equivalent dialplan
|
||||
function in places where you have previously used one of these applications.
|
||||
|
||||
* The application SetGlobalVar has been deprecated. You should replace uses
|
||||
of this application with the following combination of Set and GLOBAL():
|
||||
Set(GLOBAL(name)=value). You may also access global variables exclusively by
|
||||
using the GLOBAL() dialplan function, instead of relying on variable
|
||||
interpolation falling back to globals when no channel variable is set.
|
||||
|
||||
* The application SetVar has been renamed to Set. The syntax SetVar was marked
|
||||
deprecated in version 1.2 and is no longer recognized in this version. The
|
||||
use of Set with multiple argument pairs has also been deprecated. Please
|
||||
separate each name/value pair into its own dialplan line.
|
||||
|
||||
* app_read has been updated to use the newer options codes, using "skip" or
|
||||
"noanswer" will not work. Use s or n. Also there is a new feature i, for
|
||||
using indication tones, so typing in skip would give you unexpected results.
|
||||
|
||||
* OSPAuth is added to authenticate OSP tokens in in_bound call setup messages.
|
||||
|
||||
* The CONNECT event in the queue_log from app_queue now has a second field
|
||||
in addition to the holdtime field. It contains the unique ID of the
|
||||
queue member channel that is taking the call. This is useful when trying
|
||||
to link recording filenames back to a particular call from the queue.
|
||||
|
||||
* The old/current behavior of app_queue has a serial type behavior
|
||||
in that the queue will make all waiting callers wait in the queue
|
||||
even if there is more than one available member ready to take
|
||||
calls until the head caller is connected with the member they
|
||||
were trying to get to. The next waiting caller in line then
|
||||
becomes the head caller, and they are then connected with the
|
||||
next available member and all available members and waiting callers
|
||||
waits while this happens. This cycle continues until there are
|
||||
no more available members or waiting callers, whichever comes first.
|
||||
The new behavior, enabled by setting autofill=yes in queues.conf
|
||||
either at the [general] level to default for all queues or
|
||||
to set on a per-queue level, makes sure that when the waiting
|
||||
callers are connecting with available members in a parallel fashion
|
||||
until there are no more available members or no more waiting callers,
|
||||
whichever comes first. This is probably more along the lines of how
|
||||
one would expect a queue should work and in most cases, you will want
|
||||
to enable this new behavior. If you do not specify or comment out this
|
||||
option, it will default to "no" to keep backward compatability with the old
|
||||
behavior.
|
||||
|
||||
* Queues depend on the channel driver reporting the proper state
|
||||
for each member of the queue. To get proper signalling on
|
||||
queue members that use the SIP channel driver, you need to
|
||||
enable a call limit (could be set to a high value so it
|
||||
is not put into action) and also make sure that both inbound
|
||||
and outbound calls are accounted for.
|
||||
|
||||
Example:
|
||||
|
||||
[general]
|
||||
limitonpeer = yes
|
||||
|
||||
[peername]
|
||||
type=friend
|
||||
call-limit=10
|
||||
|
||||
|
||||
* The app_queue application now has the ability to use MixMonitor to
|
||||
record conversations queue members are having with queue callers. Please
|
||||
see configs/queues.conf.sample for more information on this option.
|
||||
|
||||
* The app_queue application strategy called 'roundrobin' has been deprecated
|
||||
for this release. Users are encouraged to use 'rrmemory' instead, since it
|
||||
provides more 'true' round-robin call delivery. For the Asterisk 1.6 release,
|
||||
'rrmemory' will be renamed 'roundrobin'.
|
||||
|
||||
* The app_queue application option called 'monitor-join' has been deprecated
|
||||
for this release. Users are encouraged to use 'monitor-type=mixmonitor' instead,
|
||||
since it provides the same functionality but is not dependent on soxmix or some
|
||||
other external program in order to mix the audio.
|
||||
|
||||
* app_meetme: The 'm' option (monitor) is renamed to 'l' (listen only), and
|
||||
the 'm' option now provides the functionality of "initially muted".
|
||||
In practice, most existing dialplans using the 'm' flag should not notice
|
||||
any difference, unless the keypad menu is enabled, allowing the user
|
||||
to unmute themsleves.
|
||||
|
||||
* ast_play_and_record would attempt to cancel the recording if a DTMF
|
||||
'0' was received. This behavior was not documented in most of the
|
||||
applications that used ast_play_and_record and the return codes from
|
||||
ast_play_and_record weren't checked for properly.
|
||||
ast_play_and_record has been changed so that '0' no longer cancels a
|
||||
recording. If you want to allow DTMF digits to cancel an
|
||||
in-progress recording use ast_play_and_record_full which allows you
|
||||
to specify which DTMF digits can be used to accept a recording and
|
||||
which digits can be used to cancel a recording.
|
||||
|
||||
* ast_app_messagecount has been renamed to ast_app_inboxcount. There is now a
|
||||
new ast_app_messagecount function which takes a single context/mailbox/folder
|
||||
mailbox specification and returns the message count for that folder only.
|
||||
This addresses the deficiency of not being able to count the number of
|
||||
messages in folders other than INBOX and Old.
|
||||
|
||||
* The exit behavior of the AGI applications has changed. Previously, when
|
||||
a connection to an AGI server failed, the application would cause the channel
|
||||
to immediately stop dialplan execution and hangup. Now, the only time that
|
||||
the AGI applications will cause the channel to stop dialplan execution is
|
||||
when the channel itself requests hangup. The AGI applications now set an
|
||||
AGISTATUS variable which will allow you to find out whether running the AGI
|
||||
was successful or not.
|
||||
|
||||
Previously, there was no way to handle the case where Asterisk was unable to
|
||||
locally execute an AGI script for some reason. In this case, dialplan
|
||||
execution will continue as it did before, but the AGISTATUS variable will be
|
||||
set to "FAILURE".
|
||||
|
||||
A locally executed AGI script can now exit with a non-zero exit code and this
|
||||
failure will be detected by Asterisk. If an AGI script exits with a non-zero
|
||||
exit code, the AGISTATUS variable will be set to "FAILURE" as opposed to
|
||||
"SUCCESS".
|
||||
|
||||
* app_voicemail: The ODBC_STORAGE capability now requires the extended table format
|
||||
previously used only by EXTENDED_ODBC_STORAGE. This means that you will need to update
|
||||
your table format using the schema provided in doc/odbcstorage.txt
|
||||
|
||||
* app_waitforsilence: Fixes have been made to this application which changes the
|
||||
default behavior with how quickly it returns. You can maintain "old-style" behavior
|
||||
with the addition/use of a third "timeout" parameter.
|
||||
Please consult the application documentation and make changes to your dialplan
|
||||
if appropriate.
|
||||
|
||||
Manager:
|
||||
|
||||
* After executing the 'status' manager action, the "Status" manager events
|
||||
included the header "CallerID:" which was actually only the CallerID number,
|
||||
and not the full CallerID string. This header has been renamed to
|
||||
"CallerIDNum". For compatibility purposes, the CallerID parameter will remain
|
||||
until after the release of 1.4, when it will be removed. Please use the time
|
||||
during the 1.4 release to make this transition.
|
||||
|
||||
* The AgentConnect event now has an additional field called "BridgedChannel"
|
||||
which contains the unique ID of the queue member channel that is taking the
|
||||
call. This is useful when trying to link recording filenames back to
|
||||
a particular call from the queue.
|
||||
|
||||
* app_userevent has been modified to always send Event: UserEvent with the
|
||||
additional header UserEvent: <userspec>. Also, the Channel and UniqueID
|
||||
headers are not automatically sent, unless you specify them as separate
|
||||
arguments. Please see the application help for the new syntax.
|
||||
|
||||
* app_meetme: Mute and Unmute events are now reported via the Manager API.
|
||||
Native Manager API commands MeetMeMute and MeetMeUnmute are provided, which
|
||||
are easier to use than "Action Command:". The MeetMeStopTalking event has
|
||||
also been deprecated in favor of the already existing MeetmeTalking event
|
||||
with a "Status" of "on" or "off" added.
|
||||
|
||||
* OriginateFailure and OriginateSuccess events were replaced by event
|
||||
OriginateResponse with a header named "Response" to indicate success or
|
||||
failure
|
||||
|
||||
Variables:
|
||||
|
||||
* The builtin variables ${CALLERID}, ${CALLERIDNAME}, ${CALLERIDNUM},
|
||||
${CALLERANI}, ${DNID}, ${RDNIS}, ${DATETIME}, ${TIMESTAMP}, ${ACCOUNTCODE},
|
||||
and ${LANGUAGE} have all been deprecated in favor of their related dialplan
|
||||
functions. You are encouraged to move towards the associated dialplan
|
||||
function, as these variables will be removed in a future release.
|
||||
|
||||
* The CDR-CSV variables uniqueid, userfield, and basing time on GMT are now
|
||||
adjustable from cdr.conf, instead of recompiling.
|
||||
|
||||
* OSP applications exports several new variables, ${OSPINHANDLE},
|
||||
${OSPOUTHANDLE}, ${OSPINTOKEN}, ${OSPOUTTOKEN}, ${OSPCALLING},
|
||||
${OSPINTIMELIMIT}, and ${OSPOUTTIMELIMIT}
|
||||
|
||||
* Builtin transfer functionality sets the variable ${TRANSFERERNAME} in the new
|
||||
created channel. This variables holds the channel name of the transferer.
|
||||
|
||||
* The dial plan variable PRI_CAUSE will be removed from future versions
|
||||
of Asterisk.
|
||||
It is replaced by adding a cause value to the hangup() application.
|
||||
|
||||
Functions:
|
||||
|
||||
* The function ${CHECK_MD5()} has been deprecated in favor of using an
|
||||
expression: $[${MD5(<string>)} = ${saved_md5}].
|
||||
|
||||
* The 'builtin' functions that used to be combined in pbx_functions.so are
|
||||
now built as separate modules. If you are not using 'autoload=yes' in your
|
||||
modules.conf file then you will need to explicitly load the modules that
|
||||
contain the functions you want to use.
|
||||
|
||||
* The ENUMLOOKUP() function with the 'c' option (for counting the number of
|
||||
records), but the lookup fails to match any records, the returned value will
|
||||
now be "0" instead of blank.
|
||||
|
||||
* The REALTIME() function is now available in version 1.4 and app_realtime has
|
||||
been deprecated in favor of the new function. app_realtime will be removed
|
||||
completely with the version 1.6 release so please take the time between
|
||||
releases to make any necessary changes
|
||||
|
||||
* The QUEUEAGENTCOUNT() function has been deprecated in favor of
|
||||
QUEUE_MEMBER_COUNT().
|
||||
|
||||
The IAX2 channel:
|
||||
|
||||
* It is possible that previous configurations depended on the order in which
|
||||
peers and users were specified in iax.conf for forcing the order in which
|
||||
chan_iax2 matched against them. This behavior is going away and is considered
|
||||
deprecated in this version. Avoid having ambiguous peer and user entries and
|
||||
to make things easy on yourself, always set the "username" option for users
|
||||
so that the remote end can match on that exactly instead of trying to infer
|
||||
which user you want based on host.
|
||||
|
||||
If you would like to go ahead and use the new behavior which doesn't use the
|
||||
order in the config file to influence matching order, then change the
|
||||
MAX_PEER_BUCKETS define in chan_iax2.c to a value greater than one. An
|
||||
example is provided there. By changing this, you will get *much* better
|
||||
performance on systems that do a lot of peer and user lookups as they will be
|
||||
stored in memory in a much more efficient manner.
|
||||
|
||||
* The "mailboxdetail" option has been deprecated. Previously, if this option
|
||||
was not enabled, the 2 byte MSGCOUNT information element would be set to all
|
||||
1's to indicate there there is some number of messages waiting. With this
|
||||
option enabled, the number of new messages were placed in one byte and the
|
||||
number of old messages are placed in the other. This is now the default
|
||||
(and the only) behavior.
|
||||
|
||||
The SIP channel:
|
||||
|
||||
* The "incominglimit" setting is replaced by the "call-limit" setting in
|
||||
sip.conf.
|
||||
|
||||
* OSP support code is removed from SIP channel to OSP applications. ospauth
|
||||
option in sip.conf is removed to osp.conf as authpolicy. allowguest option
|
||||
in sip.conf cannot be set as osp anymore.
|
||||
|
||||
* The Asterisk RTP stack has been changed in regards to RFC2833 reception
|
||||
and transmission. Packets will now be sent with proper duration instead of all
|
||||
at once. If you are receiving calls from a pre-1.4 Asterisk installation you
|
||||
will want to turn on the rfc2833compensate option. Without this option your
|
||||
DTMF reception may act poorly.
|
||||
|
||||
* The $SIPUSERAGENT dialplan variable is deprecated and will be removed
|
||||
in coming versions of Asterisk. Please use the dialplan function
|
||||
SIPCHANINFO(useragent) instead.
|
||||
|
||||
* The ALERT_INFO dialplan variable is deprecated and will be removed
|
||||
in coming versions of Asterisk. Please use the dialplan application
|
||||
sipaddheader() to add the "Alert-Info" header to the outbound invite.
|
||||
|
||||
* The "canreinvite" option has changed. canreinvite=yes used to disable
|
||||
re-invites if you had NAT=yes. In 1.4, you need to set canreinvite=nonat
|
||||
to disable re-invites when NAT=yes. This is propably what you want.
|
||||
The settings are now: "yes", "no", "nonat", "update". Please consult
|
||||
sip.conf.sample for detailed information.
|
||||
|
||||
The Zap channel:
|
||||
|
||||
* Support for MFC/R2 has been removed, as it has not been functional for some
|
||||
time and it has no maintainer.
|
||||
|
||||
The Agent channel:
|
||||
|
||||
* Callback mode (AgentCallbackLogin) is now deprecated, since the entire function
|
||||
it provided can be done using dialplan logic, without requiring additional
|
||||
channel and module locks (which frequently caused deadlocks). An example of
|
||||
how to do this using AEL dialplan is in doc/queues-with-callback-members.txt.
|
||||
|
||||
The G726-32 codec:
|
||||
|
||||
* It has been determined that previous versions of Asterisk used the wrong codeword
|
||||
packing order for G726-32 data. This version supports both available packing orders,
|
||||
and can transcode between them. It also now selects the proper order when
|
||||
negotiating with a SIP peer based on the codec name supplied in the SDP. However,
|
||||
there are existing devices that improperly request one order and then use another;
|
||||
Sipura and Grandstream ATAs are known to do this, and there may be others. To
|
||||
be able to continue to use these devices with this version of Asterisk and the
|
||||
G726-32 codec, a configuration parameter called 'g726nonstandard' has been added
|
||||
to sip.conf, so that Asterisk can use the packing order expected by the device (even
|
||||
though it requested a different order). In addition, the internal format number for
|
||||
G726-32 has been changed, and the old number is now assigned to AAL2-G726-32. The
|
||||
result of this is that this version of Asterisk will be able to interoperate over
|
||||
IAX2 with older versions of Asterisk, as long as this version is told to allow
|
||||
'g726aal2' instead of 'g726' as the codec for the call.
|
||||
|
||||
Installation:
|
||||
|
||||
* On BSD systems, the installation directories have changed to more "FreeBSDish"
|
||||
directories. On startup, Asterisk will look for the main configuration in
|
||||
/usr/local/etc/asterisk/asterisk.conf
|
||||
If you have an old installation, you might want to remove the binaries and
|
||||
move the configuration files to the new locations. The following directories
|
||||
are now default:
|
||||
ASTLIBDIR /usr/local/lib/asterisk
|
||||
ASTVARLIBDIR /usr/local/share/asterisk
|
||||
ASTETCDIR /usr/local/etc/asterisk
|
||||
ASTBINDIR /usr/local/bin/asterisk
|
||||
ASTSBINDIR /usr/local/sbin/asterisk
|
||||
|
||||
Music on Hold:
|
||||
|
||||
* The music on hold handling has been changed in some significant ways in hopes
|
||||
to make it work in a way that is much less confusing to users. Behavior will
|
||||
not change if the same configuration is used from older versions of Asterisk.
|
||||
However, there are some new configuration options that will make things work
|
||||
in a way that makes more sense.
|
||||
|
||||
Previously, many of the channel drivers had an option called "musicclass" or
|
||||
something similar. This option set what music on hold class this channel
|
||||
would *hear* when put on hold. Some people expected (with good reason) that
|
||||
this option was to configure what music on hold class to play when putting
|
||||
the bridged channel on hold. This option has now been deprecated.
|
||||
|
||||
Two new music on hold related configuration options for channel drivers have
|
||||
been introduced. Some channel drivers support both options, some just one,
|
||||
and some support neither of them. Check the sample configuration files to see
|
||||
which options apply to which channel driver.
|
||||
|
||||
The "mohsuggest" option specifies which music on hold class to suggest to the
|
||||
bridged channel when putting them on hold. The only way that this class can
|
||||
be overridden is if the bridged channel has a specific music class set that
|
||||
was done in the dialplan using Set(CHANNEL(musicclass)=something).
|
||||
|
||||
The "mohinterpret" option is similar to the old "musicclass" option. It
|
||||
specifies which music on hold class this channel would like to listen to when
|
||||
put on hold. This music class is only effective if this channel has no music
|
||||
class set on it from the dialplan and the bridged channel putting this one on
|
||||
hold had no "mohsuggest" setting.
|
||||
|
||||
The IAX2 and Zap channel drivers have an additional feature for the
|
||||
"mohinterpret" option. If this option is set to "passthrough", then these
|
||||
channel drivers will pass through the HOLD message in signalling instead of
|
||||
starting music on hold on the channel. An example for how this would be
|
||||
useful is in an enterprise network of Asterisk servers. When one phone on one
|
||||
server puts a phone on a different server on hold, the remote server will be
|
||||
responsible for playing the hold music to its local phone that was put on
|
||||
hold instead of the far end server across the network playing the music.
|
||||
|
||||
CDR Records:
|
||||
|
||||
* The behavior of the "clid" field of the CDR has always been that it will
|
||||
contain the callerid ANI if it is set, or the callerid number if ANI was not
|
||||
set. When using the "callerid" option for various channel drivers, some
|
||||
would set ANI and some would not. This has been cleared up so that all
|
||||
channel drivers set ANI. If you would like to change the callerid number
|
||||
on the channel from the dialplan and have that change also show up in the
|
||||
CDR, then you *must* set CALLERID(ANI) as well as CALLERID(num).
|
||||
|
||||
API:
|
||||
|
||||
* There are some API functions that were not previously prefixed with the 'ast_'
|
||||
prefix but now are; these include the ADSI, ODBC and AGI interfaces. If you
|
||||
have a module that uses the services provided by res_adsi, res_odbc, or
|
||||
res_agi, you will need to add ast_ prefixes to the functions that you call
|
||||
from those modules.
|
||||
|
||||
Formats:
|
||||
|
||||
* format_wav: The GAIN preprocessor definition has been changed from 2 to 0
|
||||
in Asterisk 1.4. This change was made in response to user complaints of
|
||||
choppiness or the clipping of loud signal peaks. The GAIN preprocessor
|
||||
definition will be retained in Asterisk 1.4, but will be removed in a
|
||||
future release. The use of GAIN for the increasing of voicemail message
|
||||
volume should use the 'volgain' option in voicemail.conf
|
||||
|
277
UPGRADE-1.6.txt
277
UPGRADE-1.6.txt
|
@ -1,277 +0,0 @@
|
|||
=========================================================
|
||||
===
|
||||
=== Information for upgrading from Asterisk 1.4 to 1.6
|
||||
===
|
||||
=== These files document all the changes that MUST be taken
|
||||
=== into account when upgrading between the Asterisk
|
||||
=== versions listed below. These changes may require that
|
||||
=== you modify your configuration files, dialplan or (in
|
||||
=== some cases) source code if you have your own Asterisk
|
||||
=== modules or patches. These files also includes advance
|
||||
=== notice of any functionality that has been marked as
|
||||
=== 'deprecated' and may be removed in a future release,
|
||||
=== along with the suggested replacement functionality.
|
||||
===
|
||||
=== UPGRADE-1.2.txt -- Upgrade info for 1.0 to 1.2
|
||||
=== UPGRADE-1.4.txt -- Upgrade info for 1.2 to 1.4
|
||||
===
|
||||
=========================================================
|
||||
|
||||
AEL:
|
||||
|
||||
* Macros are now implemented underneath with the Gosub() application.
|
||||
Heaven Help You if you wrote code depending on any aspect of this!
|
||||
Previous to 1.6, macros were implemented with the Macro() app, which
|
||||
provided a nice feature of auto-returning. The compiler will do its
|
||||
best to insert a Return() app call at the end of your macro if you did
|
||||
not include it, but really, you should make sure that all execution
|
||||
paths within your macros end in "return;".
|
||||
|
||||
* The conf2ael program is 'introduced' in this release; it is in a rather
|
||||
crude state, but deemed useful for making a first pass at converting
|
||||
extensions.conf code into AEL. More intelligence will come with time.
|
||||
|
||||
Core:
|
||||
|
||||
* The 'languageprefix' option in asterisk.conf is now deprecated, and
|
||||
the default sound file layout for non-English sounds is the 'new
|
||||
style' layout introduced in Asterisk 1.4 (and used by the automatic
|
||||
sound file installer in the Makefile).
|
||||
|
||||
* The ast_expr2 stuff has been modified to handle floating-point numbers.
|
||||
Numbers of the format D.D are now acceptable input for the expr parser,
|
||||
Where D is a string of base-10 digits. All math is now done in "long double",
|
||||
if it is available on your compiler/architecture. This was half-way between
|
||||
a bug-fix (because the MATH func returns fp by default), and an enhancement.
|
||||
Also, for those counting on, or needing, integer operations, a series of
|
||||
'functions' were also added to the expr language, to allow several styles
|
||||
of rounding/truncation, along with a set of common floating point operations,
|
||||
like sin, cos, tan, log, pow, etc. The ability to call external functions
|
||||
like CDR(), etc. was also added, without having to use the ${...} notation.
|
||||
|
||||
* The delimiter passed to applications has been changed to the comma (','), as
|
||||
that is what people are used to using within extensions.conf. If you are
|
||||
using realtime extensions, you will need to translate your existing dialplan
|
||||
to use this separator. To use a literal comma, you need merely to escape it
|
||||
with a backslash ('\'). Another possible side effect is that you may need to
|
||||
remove the obscene level of backslashing that was necessary for the dialplan
|
||||
to work correctly in 1.4 and previous versions. This should make writing
|
||||
dialplans less painful in the future, albeit with the pain of a one-time
|
||||
conversion. If you would like to avoid this conversion immediately, set
|
||||
pbx_realtime=1.4 in the [compat] section of asterisk.conf. After
|
||||
transitioning, set pbx_realtime=1.6 in the same section.
|
||||
|
||||
* For the same purpose as above, you may set res_agi=1.4 in the [compat]
|
||||
section of asterisk.conf to continue to use the '|' delimiter in the EXEC
|
||||
arguments of AGI applications. After converting to use the ',' delimiter,
|
||||
change this option to res_agi=1.6.
|
||||
|
||||
* As a side effect of the application delimiter change, many places that used
|
||||
to need quotes in order to get the proper meaning are no longer required.
|
||||
You now only need to quote strings in configuration files if you literally
|
||||
want quotation marks within a string.
|
||||
|
||||
* Any applications run that contain the pipe symbol but not a comma symbol will
|
||||
get a warning printed to the effect that the application delimiter has changed.
|
||||
However, there are legitimate reasons why this might be useful in certain
|
||||
situations, so this warning can be turned off with the dontwarn option in
|
||||
asterisk.conf.
|
||||
|
||||
* The logger.conf option 'rotatetimestamp' has been deprecated in favor of
|
||||
'rotatestrategy'. This new option supports a 'rotate' strategy that more
|
||||
closely mimics the system logger in terms of file rotation.
|
||||
|
||||
* The concise versions of various CLI commands are now deprecated. We recommend
|
||||
using the manager interface (AMI) for application integration with Asterisk.
|
||||
|
||||
Voicemail:
|
||||
|
||||
* The voicemail configuration values 'maxmessage' and 'minmessage' have
|
||||
been changed to 'maxsecs' and 'minsecs' to clarify their purpose and
|
||||
to make them more distinguishable from 'maxmsgs', which sets folder
|
||||
size. The old variables will continue to work in this version, albeit
|
||||
with a deprecation warning.
|
||||
|
||||
* If you use any interface for modifying voicemail aside from the built in
|
||||
dialplan applications, then the option "pollmailboxes" *must* be set in
|
||||
voicemail.conf for message waiting indication (MWI) to work properly. This
|
||||
is because Voicemail notification is now event based instead of polling
|
||||
based. The channel drivers are no longer responsible for constantly manually
|
||||
checking mailboxes for changes so that they can send MWI information to users.
|
||||
Examples of situations that would require this option are web interfaces to
|
||||
voicemail or an email client in the case of using IMAP storage.
|
||||
|
||||
Applications:
|
||||
|
||||
|
||||
* ChanIsAvail() now has a 't' option, which allows the specified device
|
||||
to be queried for state without consulting the channel drivers. This
|
||||
performs mostly a 'ChanExists' sort of function.
|
||||
|
||||
* ChannelRedirect() will not terminate the channel that fails to do a
|
||||
channelredirect as it has done previously. Instead CHANNELREDIRECT_STATUS
|
||||
will reflect if the attempt was successful of not.
|
||||
|
||||
* SetCallerPres() has been replaced with the CALLERPRES() dialplan function
|
||||
and is now deprecated.
|
||||
|
||||
* DISA()'s fifth argument is now an options argument. If you have previously
|
||||
used 'NOANSWER' in this argument, you'll need to convert that to the new
|
||||
option 'n'.
|
||||
|
||||
* Macro() is now deprecated. If you need subroutines, you should use the
|
||||
Gosub()/Return() applications. To replace MacroExclusive(), we have
|
||||
introduced dialplan functions LOCK(), TRYLOCK(), and UNLOCK(). You may use
|
||||
these functions in any location where you desire to ensure that only one
|
||||
channel is executing that path at any one time. The Macro() applications
|
||||
are deprecated for performance reasons. However, since Macro() has been
|
||||
around for a long time and so many dialplans depend heavily on it, for the
|
||||
sake of backwards compatibility it will not be removed . It is also worth
|
||||
noting that using both Macro() and GoSub() at the same time is _heavily_
|
||||
discouraged.
|
||||
|
||||
* Read() now sets a READSTATUS variable on exit. It does NOT automatically
|
||||
return -1 (and hangup) anymore on error. If you want to hangup on error,
|
||||
you need to do so explicitly in your dialplan.
|
||||
|
||||
* Privacy() no longer uses privacy.conf, so any options must be specified
|
||||
directly in the application arguments.
|
||||
|
||||
* MusicOnHold application now has duration parameter which allows specifying
|
||||
timeout in seconds.
|
||||
|
||||
* WaitMusicOnHold application is now deprecated in favor of extended MusicOnHold.
|
||||
|
||||
* SetMusicOnHold is now deprecated. You should use Set(CHANNEL(musicclass)=...)
|
||||
instead.
|
||||
|
||||
* The arguments in ExecIf changed a bit, to be more like other applications.
|
||||
The syntax is now ExecIf(<cond>?appiftrue(args):appiffalse(args)).
|
||||
|
||||
* The behavior of the Set application now depends upon a compatibility option,
|
||||
set in asterisk.conf. To use the old 1.4 behavior, which allowed Set to take
|
||||
multiple key/value pairs, set app_set=1.4 in [compat] in asterisk.conf. To
|
||||
use the new behavior, which permits variables to be set with embedded commas,
|
||||
set app_set=1.6 in [compat] in asterisk.conf. Note that you can have both
|
||||
behaviors at the same time, if you switch to using MSet if you want the old
|
||||
behavior.
|
||||
|
||||
Dialplan Functions:
|
||||
|
||||
* QUEUE_MEMBER_COUNT() has been deprecated in favor of the QUEUE_MEMBER() function. For
|
||||
more information, issue a "show function QUEUE_MEMBER" from the CLI.
|
||||
|
||||
CDR:
|
||||
|
||||
* The cdr_sqlite module has been marked as deprecated in favor of
|
||||
cdr_sqlite3_custom. It will potentially be removed from the tree
|
||||
after Asterisk 1.6 is released.
|
||||
|
||||
* The cdr_odbc module now uses res_odbc to manage its connections. The
|
||||
username and password parameters in cdr_odbc.conf, therefore, are no
|
||||
longer used. The dsn parameter now points to an entry in res_odbc.conf.
|
||||
|
||||
* The uniqueid field in the core Asterisk structure has been changed from a
|
||||
maximum 31 character field to a 149 character field, to account for all
|
||||
possible values the systemname prefix could be. In the past, if the
|
||||
systemname was too long, the uniqueid would have been truncated.
|
||||
|
||||
* The cdr_tds module now supports all versions of FreeTDS that contain
|
||||
the db-lib frontend. It will also now log the userfield variable if
|
||||
the target database table contains a column for it.
|
||||
|
||||
Formats:
|
||||
|
||||
* format_wav: The GAIN preprocessor definition and source code that used it
|
||||
is removed. This change was made in response to user complaints of
|
||||
choppiness or the clipping of loud signal peaks. To increase the volume
|
||||
of voicemail messages, use the 'volgain' option in voicemail.conf
|
||||
|
||||
Channel Drivers:
|
||||
|
||||
* SIP: a small upgrade to support the "Record" button on the SNOM360,
|
||||
which sends a sip INFO message with a "Record: on" or "Record: off"
|
||||
header. If Asterisk is set up (via features.conf) to accept "One Touch Monitor"
|
||||
requests (by default, via '*1'), then the user-configured dialpad sequence
|
||||
is generated, and recording can be started and stopped via this button. The
|
||||
file names and formats are all controlled via the normal mechanisms. If the
|
||||
user has not configured the automon feature, the normal "415 Unsupported media type"
|
||||
is returned, and nothing is done.
|
||||
|
||||
* SIP: The "call-limit" option is marked as deprecated. It still works in this version of
|
||||
Asterisk, but will be removed in the following version. Please use the groupcount functions
|
||||
in the dialplan to enforce call limits. The "limitonpeer" configuration option is
|
||||
now renamed to "counteronpeer".
|
||||
|
||||
* SIP: The "username" option is now renamed to "defaultuser" to match "defaultip".
|
||||
These are used only before registration to call a peer with the uri
|
||||
sip:defaultuser@defaultip
|
||||
The "username" setting still work, but is deprecated and will not work in
|
||||
the next version of Asterisk.
|
||||
|
||||
* SIP: The old "insecure" options, deprecated in 1.4, have been removed.
|
||||
"insecure=very" should be changed to "insecure=port,invite"
|
||||
"insecure=yes" should be changed to "insecure=port"
|
||||
Be aware that some telephony providers show the invalid syntax in their
|
||||
sample configurations.
|
||||
|
||||
* chan_local.c: the comma delimiter inside the channel name has been changed to a
|
||||
semicolon, in order to make the Local channel driver compatible with the comma
|
||||
delimiter change in applications.
|
||||
|
||||
* H323: The "tos" setting has changed name to "tos_audio" and "cos" to "cos_audio"
|
||||
to be compatible with settings in sip.conf. The "tos" and "cos" configuration
|
||||
is deprecated and will stop working in the next release of Asterisk.
|
||||
|
||||
* Console: A new console channel driver, chan_console, has been added to Asterisk.
|
||||
This new module can not be loaded at the same time as chan_alsa or chan_oss. The
|
||||
default modules.conf only loads one of them (chan_oss by default). So, unless you
|
||||
have modified your modules.conf to not use the autoload option, then you will need
|
||||
to modify modules.conf to add another "noload" line to ensure that only one of
|
||||
these three modules gets loaded.
|
||||
|
||||
* DAHDI: The chan_zap module that supported PSTN interfaces using
|
||||
Zaptel has been renamed to chan_dahdi, and only supports the DAHDI
|
||||
telephony driver package for PSTN interfaces. See the
|
||||
Zaptel-to-DAHDI.txt file for more details on this transition.
|
||||
|
||||
* DAHDI: The "msdstrip" option has been deprecated, as it provides no value over
|
||||
the method of stripping digits in the dialplan using variable substring syntax.
|
||||
|
||||
Configuration:
|
||||
|
||||
* pbx_dundi.c: tos parameter changed to use new values. Old values like lowdelay,
|
||||
lowcost and other is not acceptable now. Look into qos.tex for description of
|
||||
this parameter.
|
||||
|
||||
* queues.conf: the queue-lessthan sound file option is no longer available, and the
|
||||
queue-round-seconds option no longer takes '1' as a valid parameter.
|
||||
|
||||
Manager:
|
||||
|
||||
* Manager has been upgraded to version 1.1 with a lot of changes.
|
||||
Please check doc/manager_1_1.txt for information
|
||||
|
||||
* The IAXpeers command output has been changed to more closely resemble the
|
||||
output of the SIPpeers command.
|
||||
|
||||
* cdr_manager now reports at the "cdr" level, not at "call" You may need to
|
||||
change your manager.conf to add the level to existing AMI users, if they
|
||||
want to see the CDR events generated.
|
||||
|
||||
* The Originate command now requires the Originate write permission. For
|
||||
Originate with the Application parameter, you need the additional System
|
||||
privilege if you want to do anything that calls out to a subshell.
|
||||
|
||||
iLBC Codec:
|
||||
|
||||
* Previously, the Asterisk source code distribution included the iLBC
|
||||
encoder/decoder source code, from Global IP Solutions
|
||||
(http://www.gipscorp.com). This code is not licensed for
|
||||
distribution, and thus has been removed from the Asterisk source
|
||||
code distribution. If you wish to use codec_ilbc to support iLBC
|
||||
channels in Asterisk, you can run the contrib/scripts/get_ilbc_source.sh
|
||||
script to download the source and put it in the proper place in
|
||||
the Asterisk build tree. Once that is done you can follow your normal
|
||||
steps of building Asterisk. You will need to run 'menuselect' and enable
|
||||
the iLBC codec in the 'Codec Translators' category.
|
344
UPGRADE-1.8.txt
344
UPGRADE-1.8.txt
|
@ -1,344 +0,0 @@
|
|||
===========================================================
|
||||
===
|
||||
=== Information for upgrading between Asterisk versions
|
||||
===
|
||||
=== These files document all the changes that MUST be taken
|
||||
=== into account when upgrading between the Asterisk
|
||||
=== versions listed below. These changes may require that
|
||||
=== you modify your configuration files, dialplan or (in
|
||||
=== some cases) source code if you have your own Asterisk
|
||||
=== modules or patches. These files also includes advance
|
||||
=== notice of any functionality that has been marked as
|
||||
=== 'deprecated' and may be removed in a future release,
|
||||
=== along with the suggested replacement functionality.
|
||||
===
|
||||
=== UPGRADE-1.2.txt -- Upgrade info for 1.0 to 1.2
|
||||
=== UPGRADE-1.4.txt -- Upgrade info for 1.2 to 1.4
|
||||
=== UPGRADE-1.6.txt -- Upgrade info for 1.4 to 1.6
|
||||
===
|
||||
===========================================================
|
||||
|
||||
From 1.8.13 to 1.8.14:
|
||||
* permitdirectmedia/denydirectmedia now controls whether peers can be
|
||||
bridged via directmedia by comparing the ACL to the bridging peer's
|
||||
address rather than its own address.
|
||||
|
||||
From 1.8.12 to 1.8.13:
|
||||
* The complex processor detection and optimization has been removed from
|
||||
the makefile in favor of using native optimization suppport when available.
|
||||
BUILD_NATIVE can be disabled via menuselect under "Compiler Flags".
|
||||
|
||||
From 1.8.10 to 1.8.11:
|
||||
|
||||
* If no transport is specified in sip.conf, transport will default to UDP.
|
||||
Also, if multiple transport= lines are used, only the last will be used.
|
||||
|
||||
From 1.6.2 to 1.8:
|
||||
|
||||
* chan_sip no longer sets HASH(SIP_CAUSE,<chan name>) on channels by default.
|
||||
This must now be enabled by setting 'sipstorecause' to 'yes' in sip.conf.
|
||||
This carries a performance penalty.
|
||||
|
||||
* Asterisk now requires libpri 1.4.11+ for PRI support.
|
||||
|
||||
* A couple of CLI commands in res_ais were changed back to their original form:
|
||||
"ais show clm members" --> "ais clm show members"
|
||||
"ais show evt event channels" --> "ais evt show event channels"
|
||||
|
||||
* The default value for 'autofill' and 'shared_lastcall' in queues.conf has
|
||||
been changed to 'yes'.
|
||||
|
||||
* The default value for the alwaysauthreject option in sip.conf has been changed
|
||||
from "no" to "yes".
|
||||
|
||||
* The behavior of the 'parkedcallstimeout' has changed slightly. The formulation
|
||||
of the extension name that a timed out parked call is delivered to when this
|
||||
option is set to 'no' was modified such that instead of converting '/' to '0',
|
||||
the '/' is converted to an underscore '_'. See the updated documentation in
|
||||
features.conf.sample for more information on the behavior of the
|
||||
'parkedcallstimeout' option.
|
||||
|
||||
* Asterisk-addons no longer exists as an independent package. Those modules
|
||||
now live in the addons directory of the main Asterisk source tree. They
|
||||
are not enabled by default. For more information about why modules live in
|
||||
addons, see README-addons.txt.
|
||||
|
||||
* The rarely used 'event_log' and LOG_EVENT channel have been removed; the few
|
||||
users of this channel in the tree have been converted to LOG_NOTICE or removed
|
||||
(in cases where the same message was already generated to another channel).
|
||||
|
||||
* The usage of RTP inside of Asterisk has now become modularized. This means
|
||||
the Asterisk RTP stack now exists as a loadable module, res_rtp_asterisk.
|
||||
If you are not using autoload=yes in modules.conf you will need to ensure
|
||||
it is set to load. If not, then any module which uses RTP (such as chan_sip)
|
||||
will not be able to send or receive calls.
|
||||
|
||||
* The app_dahdiscan.c file has been removed, but the dialplan app DAHDIScan still
|
||||
remains. It now exists within app_chanspy.c and retains the exact same
|
||||
functionality as before.
|
||||
|
||||
* The default behavior for Set, AGI, and pbx_realtime has been changed to implement
|
||||
1.6 behavior by default, if there is no [compat] section in asterisk.conf. In
|
||||
prior versions, the behavior defaulted to 1.4 behavior, to assist in upgrades.
|
||||
Specifically, that means that pbx_realtime and res_agi expect you to use commas
|
||||
to separate arguments in applications, and Set only takes a single pair of
|
||||
a variable name/value. The old 1.4 behavior may still be obtained by setting
|
||||
app_set, pbx_realtime, and res_agi each to 1.4 in the [compat] section of
|
||||
asterisk.conf.
|
||||
|
||||
* The PRI channels in chan_dahdi can no longer change the channel name if a
|
||||
different B channel is selected during call negotiation. To prevent using
|
||||
the channel name to infer what B channel a call is using and to avoid name
|
||||
collisions, the channel name format is changed.
|
||||
The new channel naming for PRI channels is:
|
||||
DAHDI/i<span>/<number>[:<subaddress>]-<sequence-number>
|
||||
|
||||
* Added CHANNEL(dahdi_span), CHANNEL(dahdi_channel), and CHANNEL(dahdi_type)
|
||||
so the dialplan can determine the B channel currently in use by the channel.
|
||||
Use CHANNEL(no_media_path) to determine if the channel even has a B channel.
|
||||
|
||||
* Added AMI event DAHDIChannel to associate a DAHDI channel with an Asterisk
|
||||
channel so AMI applications can passively determine the B channel currently
|
||||
in use. Calls with "no-media" as the DAHDIChannel do not have an associated
|
||||
B channel. No-media calls are either on hold or call-waiting.
|
||||
|
||||
* The ChanIsAvail application has been changed so the AVAILSTATUS variable
|
||||
no longer contains both the device state and cause code. The cause code
|
||||
is now available in the AVAILCAUSECODE variable. If existing dialplan logic
|
||||
is written to expect AVAILSTATUS to contain the cause code it needs to be
|
||||
changed to use AVAILCAUSECODE.
|
||||
|
||||
* ExternalIVR will now send Z events for invalid or missing files, T events
|
||||
now include the interrupted file and bugs in argument parsing have been
|
||||
fixed so there may be arguments specified in incorrect ways that were
|
||||
working that will no longer work. Please see
|
||||
https://wiki.asterisk.org/wiki/display/AST/External+IVR+Interface for details.
|
||||
|
||||
* OSP lookup application changes following variable names:
|
||||
OSPPEERIP to OSPINPEERIP
|
||||
OSPTECH to OSPOUTTECH
|
||||
OSPDEST to OSPDESTINATION
|
||||
OSPCALLING to OSPOUTCALLING
|
||||
OSPCALLED to OSPOUTCALLED
|
||||
OSPRESULTS to OSPDESTREMAILS
|
||||
|
||||
* The Manager event 'iax2 show peers' output has been updated. It now has a
|
||||
similar output of 'sip show peers'.
|
||||
|
||||
* VoiceMailMain and VMAuthenticate, if a '*' is entered in the first position
|
||||
of a Mailbox or Password, will, if it exists, jump to the 'a' extension in
|
||||
the current dialplan context.
|
||||
|
||||
* The CALLERPRES() dialplan function is deprecated in favor of
|
||||
CALLERID(num-pres) and CALLERID(name-pres).
|
||||
|
||||
* Environment variables that start with "AST_" are reserved to the system and
|
||||
may no longer be set from the dialplan.
|
||||
|
||||
* When a call is redirected inside of a Dial, the app and appdata fields of the
|
||||
CDR will now be set to "AppDial" and "(Outgoing Line)" instead of being blank.
|
||||
|
||||
* The CDR handling of billsec and duration field has changed. If your table
|
||||
definition specifies those fields as float,double or similar they will now
|
||||
be logged with microsecond accuracy instead of a whole integer.
|
||||
|
||||
* chan_sip will no longer set up a local call forward when receiving a
|
||||
482 Loop Detected response. The dialplan will just continue from where it
|
||||
left off.
|
||||
|
||||
* The 'stunaddr' option has been removed from chan_sip. This feature did not
|
||||
behave as expected, had no correct use case, and was not RFC compliant. The
|
||||
removal of this feature will hopefully be followed by a correct RFC compliant
|
||||
STUN implementation in chan_sip in the future.
|
||||
|
||||
* The default value for the pedantic option in sip.conf has been changed
|
||||
from "no" to "yes".
|
||||
|
||||
* The ConnectedLineNum and ConnectedLineName headers were added to many AMI
|
||||
events/responses if the CallerIDNum/CallerIDName headers were also present.
|
||||
The addition of connected line support changes the behavior of the channel
|
||||
caller ID somewhat. The channel caller ID value no longer time shares with
|
||||
the connected line ID on outgoing call legs. The timing of some AMI
|
||||
events/responses output the connected line ID as caller ID. These party ID's
|
||||
are now separate.
|
||||
|
||||
* The Dial application d and H options do not automatically answer the call
|
||||
anymore. It broke DTMF attended transfers. Since many SIP and ISDN phones
|
||||
cannot send DTMF before a call is connected, you need to answer the call
|
||||
leg to those phones before using Dial with these options for them to have
|
||||
any effect before the dialed party answers.
|
||||
|
||||
* The outgoing directory (where .call files are read) now uses inotify to
|
||||
detect file changes instead of polling the directory on a regular basis.
|
||||
If your outgoing folder is on a NFS mount or another network file system,
|
||||
changes to the files will not be detected. You can revert to polling the
|
||||
directory by specifying --without-inotify to configure before compiling.
|
||||
|
||||
* The 'sipusers' realtime table has been removed completely. Use the 'sippeers'
|
||||
table with type 'user' for user type objects.
|
||||
|
||||
* The sip.conf allowoverlap option now accepts 'dtmf' as a value. If you
|
||||
are using the early media DTMF overlap dialing method you now need to set
|
||||
allowoverlap=dtmf.
|
||||
|
||||
From 1.6.1 to 1.6.2:
|
||||
|
||||
* SIP no longer sends the 183 progress message for early media by
|
||||
default. Applications requiring early media should use the
|
||||
progress() dialplan app to generate the progress message.
|
||||
|
||||
* The firmware for the IAXy has been removed from Asterisk. It can be
|
||||
downloaded from http://downloads.digium.com/pub/iaxy/. To have Asterisk
|
||||
install the firmware into its proper location, place the firmware in the
|
||||
contrib/firmware/iax/ directory in the Asterisk source tree before running
|
||||
"make install".
|
||||
|
||||
* T.38 FAX error correction mode can no longer be configured in udptl.conf;
|
||||
instead, it is configured on a per-peer (or global) basis in sip.conf, with
|
||||
the same default as was present in udptl.conf.sample.
|
||||
|
||||
* T.38 FAX maximum datagram size can no longer be configured in updtl.conf;
|
||||
instead, it is either supplied by the application servicing the T.38 channel
|
||||
(for a FAX send or receive) or calculated from the bridged endpoint's
|
||||
maximum datagram size (for a T.38 FAX passthrough call). In addition, sip.conf
|
||||
allows for overriding the value supplied by a remote endpoint, which is useful
|
||||
when T.38 connections are made to gateways that supply incorrectly-calculated
|
||||
maximum datagram sizes.
|
||||
|
||||
* There have been some changes to the IAX2 protocol to address the security
|
||||
concerns documented in the security advisory AST-2009-006. Please see the
|
||||
IAX2 security document, doc/IAX2-security.pdf, for information regarding
|
||||
backwards compatibility with versions of Asterisk that do not contain these
|
||||
changes to IAX2.
|
||||
|
||||
* The 'canreinvite' option support by the SIP, MGCP and Skinny channel drivers
|
||||
has been renamed to 'directmedia', to better reflect what it actually does.
|
||||
In the case of SIP, there are still re-INVITEs issued for T.38 negotiation,
|
||||
starting and stopping music-on-hold, and other reasons, and the 'canreinvite'
|
||||
option never had any effect on these cases, it only affected the re-INVITEs
|
||||
used for direct media path setup. For MGCP and Skinny, the option was poorly
|
||||
named because those protocols don't even use INVITE messages at all. For
|
||||
backwards compatibility, the old option is still supported in both normal
|
||||
and Realtime configuration files, but all of the sample configuration files,
|
||||
Realtime/LDAP schemas, and other documentation refer to it using the new name.
|
||||
|
||||
* The default console now will use colors according to the default background
|
||||
color, instead of forcing the background color to black. If you are using a
|
||||
light colored background for your console, you may wish to use the option
|
||||
flag '-W' to present better color choices for the various messages. However,
|
||||
if you'd prefer the old method of forcing colors to white text on a black
|
||||
background, the compatibility option -B is provided for this purpose.
|
||||
|
||||
* SendImage() no longer hangs up the channel on transmission error or on
|
||||
any other error; in those cases, a FAILURE status is stored in
|
||||
SENDIMAGESTATUS and dialplan execution continues. The possible
|
||||
return values stored in SENDIMAGESTATUS are: SUCCESS, FAILURE, and
|
||||
UNSUPPORTED. ('OK' has been replaced with 'SUCCESS', and 'NOSUPPORT'
|
||||
has been replaced with 'UNSUPPORTED'). This change makes the
|
||||
SendImage application more consistent with other applications.
|
||||
|
||||
* skinny.conf now has separate sections for lines and devices.
|
||||
Please have a look at configs/skinny.conf.sample and update
|
||||
your skinny.conf.
|
||||
|
||||
* Queue names previously were treated in a case-sensitive manner,
|
||||
meaning that queues with names like "sales" and "sALeS" would be
|
||||
seen as unique queues. The parsing logic has changed to use
|
||||
case-insensitive comparisons now when originally hashing based on
|
||||
queue names, meaning that now the two queues mentioned as examples
|
||||
earlier will be seen as having the same name.
|
||||
|
||||
* The SPRINTF() dialplan function has been moved into its own module,
|
||||
func_sprintf, and is no longer included in func_strings. If you use this
|
||||
function and do not use 'autoload=yes' in modules.conf, you will need
|
||||
to explicitly load func_sprintf for it to be available.
|
||||
|
||||
* The res_indications module has been removed. Its functionality was important
|
||||
enough that most of it has been moved into the Asterisk core.
|
||||
Two applications previously provided by res_indications, PlayTones and
|
||||
StopPlayTones, have been moved into a new module, app_playtones.
|
||||
|
||||
* Support for Taiwanese was incorrectly supported with the "tw" language code.
|
||||
In reality, the "tw" language code is reserved for the Twi language, native
|
||||
to Ghana. If you were previously using the "tw" language code, you should
|
||||
switch to using either "zh" (for Mandarin Chinese) or "zh_TW" for Taiwan
|
||||
specific localizations. Additionally, "mx" should be changed to "es_MX",
|
||||
Georgian was incorrectly specified as "ge" but should be "ka", and Czech is
|
||||
"cs", not "cz".
|
||||
|
||||
* DAHDISendCallreroutingFacility() parameters are now comma-separated,
|
||||
instead of the old pipe.
|
||||
|
||||
* res_jabber: autoprune has been disabled by default, to avoid misconfiguration
|
||||
that would end up being interpreted as a bug once Asterisk started removing
|
||||
the contacts from a user list.
|
||||
|
||||
* The cdr.conf file must exist and be configured correctly in order for CDR
|
||||
records to be written.
|
||||
|
||||
* cdr_pgsql now assumes the encoding of strings it is handed are in LATIN9,
|
||||
which should cover most uses of the extended ASCII set. If your strings
|
||||
use a different encoding in Asterisk, the "encoding" parameter may be set
|
||||
to specify the correct character set.
|
||||
|
||||
From 1.6.0.1 to 1.6.1:
|
||||
|
||||
* The ast_agi_register_multiple() and ast_agi_unregister_multiple()
|
||||
API calls were added in 1.6.0, so that modules that provide multiple
|
||||
AGI commands could register/unregister them all with a single
|
||||
step. However, these API calls were not implemented properly, and did
|
||||
not allow the caller to know whether registration or unregistration
|
||||
succeeded or failed. They have been redefined to now return success
|
||||
or failure, but this means any code using these functions will need
|
||||
be recompiled after upgrading to a version of Asterisk containing
|
||||
these changes. In addition, the source code using these functions
|
||||
should be reviewed to ensure it can properly react to failure
|
||||
of registration or unregistration of its API commands.
|
||||
|
||||
* The ast_agi_fdprintf() API call has been renamed to ast_agi_send()
|
||||
to better match what it really does, and the argument order has been
|
||||
changed to be consistent with other API calls that perform similar
|
||||
operations.
|
||||
|
||||
From 1.6.0.x to 1.6.1:
|
||||
|
||||
* In previous versions of Asterisk, due to the way objects were arranged in
|
||||
memory by chan_sip, the order of entries in sip.conf could be adjusted to
|
||||
control the behavior of matching against peers and users. The way objects
|
||||
are managed has been significantly changed for reasons involving performance
|
||||
and stability. A side effect of these changes is that the order of entries
|
||||
in sip.conf can no longer be relied upon to control behavior.
|
||||
|
||||
* The following core commands dealing with dialplan have been deprecated: 'core
|
||||
show globals', 'core set global' and 'core set chanvar'. Use the equivalent
|
||||
'dialplan show globals', 'dialplan set global' and 'dialplan set chanvar'
|
||||
instead.
|
||||
|
||||
* In the dialplan expression parser, the logical value of spaces
|
||||
immediately preceding a standalone 0 previously evaluated to
|
||||
true. It now evaluates to false. This has confused a good many
|
||||
people in the past (typically because they failed to realize the
|
||||
space had any significance). Since this violates the Principle of
|
||||
Least Surprise, it has been changed.
|
||||
|
||||
* While app_directory has always relied on having a voicemail.conf or users.conf file
|
||||
correctly set up, it now is dependent on app_voicemail being compiled as well.
|
||||
|
||||
* SIP: All of the functionality in SIPCHANINFO() has been implemented in CHANNEL(),
|
||||
and you should start using that function instead for retrieving information about
|
||||
the channel in a technology-agnostic way.
|
||||
|
||||
* If you have any third party modules which use a config file variable whose
|
||||
name ends in a '+', please note that the append capability added to this
|
||||
version may now conflict with that variable naming scheme. An easy
|
||||
workaround is to ensure that a space occurs between the '+' and the '=',
|
||||
to differentiate your variable from the append operator. This potential
|
||||
conflict is unlikely, but is documented here to be thorough.
|
||||
|
||||
* The "Join" event from app_queue now uses the CallerIDNum header instead of
|
||||
the CallerID header to indicate the CallerID number.
|
||||
|
||||
* If you use ODBC storage for voicemail, there is a new field called "flag"
|
||||
which should be a char(8) or larger. This field specifies whether or not a
|
||||
message has been designated to be "Urgent", "PRIORITY", or not.
|
||||
|
|
@ -1,92 +0,0 @@
|
|||
===========================================================
|
||||
===
|
||||
=== Information for upgrading between Asterisk versions
|
||||
===
|
||||
=== These files document all the changes that MUST be taken
|
||||
=== into account when upgrading between the Asterisk
|
||||
=== versions listed below. These changes may require that
|
||||
=== you modify your configuration files, dialplan or (in
|
||||
=== some cases) source code if you have your own Asterisk
|
||||
=== modules or patches. These files also include advance
|
||||
=== notice of any functionality that has been marked as
|
||||
=== 'deprecated' and may be removed in a future release,
|
||||
=== along with the suggested replacement functionality.
|
||||
===
|
||||
=== UPGRADE-1.2.txt -- Upgrade info for 1.0 to 1.2
|
||||
=== UPGRADE-1.4.txt -- Upgrade info for 1.2 to 1.4
|
||||
=== UPGRADE-1.6.txt -- Upgrade info for 1.4 to 1.6
|
||||
=== UPGRADE-1.8.txt -- Upgrade info for 1.6 to 1.8
|
||||
===
|
||||
===========================================================
|
||||
|
||||
From 10.4 to 10.5:
|
||||
|
||||
* The complex processor detection and optimization has been removed from
|
||||
the makefile in favor of using native optimization suppport when available.
|
||||
BUILD_NATIVE can be disabled via menuselect under "Compiler Flags".
|
||||
|
||||
From 10.2 to 10.3:
|
||||
|
||||
* If no transport is specified in sip.conf, transport will default to UDP.
|
||||
Also, if multiple transport= lines are used, only the last will be used.
|
||||
|
||||
From 1.8 to 10:
|
||||
|
||||
cel_pgsql:
|
||||
- This module now expects an 'extra' column in the database for data added
|
||||
using the CELGenUserEvent() application.
|
||||
|
||||
ConfBridge
|
||||
- ConfBridge's dialplan arguments have changed and are not
|
||||
backwards compatible.
|
||||
|
||||
File Interpreters
|
||||
- The format interpreter formats/format_sln16.c for the file extension
|
||||
'.sln16' has been removed. The '.sln16' file interpreter now exists
|
||||
in the formats/format_sln.c module along with new support for sln12,
|
||||
sln24, sln32, sln44, sln48, sln96, and sln192 file extensions.
|
||||
|
||||
HTTP:
|
||||
- A bindaddr must be specified in order for the HTTP server
|
||||
to run. Previous versions would default to 0.0.0.0 if no
|
||||
bindaddr was specified.
|
||||
|
||||
Gtalk:
|
||||
- The default value for 'context' and 'parkinglots' in gtalk.conf has
|
||||
been changed to 'default', previously they were empty.
|
||||
|
||||
chan_dahdi:
|
||||
- The mohinterpret=passthrough setting is deprecated in favor of
|
||||
moh_signaling=notify.
|
||||
|
||||
pbx_lua:
|
||||
- Execution no longer continues after applications that do dialplan jumps
|
||||
(such as app.goto). Now when an application such as app.goto() is called,
|
||||
control is returned back to the pbx engine and the current extension
|
||||
function stops executing.
|
||||
- the autoservice now defaults to being on by default
|
||||
- autoservice_start() and autoservice_start() no longer return a value.
|
||||
|
||||
Queue:
|
||||
- Mark QUEUE_MEMBER_PENALTY Deprecated it never worked for realtime members
|
||||
- QUEUE_MEMBER is now R/W supporting setting paused, ignorebusy and penalty.
|
||||
|
||||
Asterisk Database:
|
||||
- The internal Asterisk database has been switched from Berkeley DB 1.86 to
|
||||
SQLite 3. An existing Berkeley astdb file can be converted with the astdb2sqlite3
|
||||
utility in the UTILS section of menuselect. If an existing astdb is found and no
|
||||
astdb.sqlite3 exists, astdb2sqlite3 will be compiled automatically. Asterisk will
|
||||
convert an existing astdb to the SQLite3 version automatically at runtime.
|
||||
|
||||
Module Support Level
|
||||
- All modules in the addons, apps, bridge, cdr, cel, channels, codecs,
|
||||
formats, funcs, pbx, and res have been updated to include MODULEINFO data
|
||||
that includes <support_level> tags with a value of core, extended, or deprecated.
|
||||
More information is available on the Asterisk wiki at
|
||||
https://wiki.asterisk.org/wiki/display/AST/Asterisk+Module+Support+States
|
||||
|
||||
Deprecated modules are now marked to not build by default and must be explicitly
|
||||
enabled in menuselect.
|
||||
|
||||
===========================================================
|
||||
===========================================================
|
280
UPGRADE-11.txt
280
UPGRADE-11.txt
|
@ -1,280 +0,0 @@
|
|||
===========================================================
|
||||
===
|
||||
=== Information for upgrading between Asterisk versions
|
||||
===
|
||||
=== These files document all the changes that MUST be taken
|
||||
=== into account when upgrading between the Asterisk
|
||||
=== versions listed below. These changes may require that
|
||||
=== you modify your configuration files, dialplan or (in
|
||||
=== some cases) source code if you have your own Asterisk
|
||||
=== modules or patches. These files also include advance
|
||||
=== notice of any functionality that has been marked as
|
||||
=== 'deprecated' and may be removed in a future release,
|
||||
=== along with the suggested replacement functionality.
|
||||
===
|
||||
=== UPGRADE-1.2.txt -- Upgrade info for 1.0 to 1.2
|
||||
=== UPGRADE-1.4.txt -- Upgrade info for 1.2 to 1.4
|
||||
=== UPGRADE-1.6.txt -- Upgrade info for 1.4 to 1.6
|
||||
=== UPGRADE-1.8.txt -- Upgrade info for 1.6 to 1.8
|
||||
=== UPGRADE-10.txt -- Upgrade info for 1.8 to 10
|
||||
===
|
||||
===========================================================
|
||||
|
||||
From 11.6 to 11.7:
|
||||
ConfBridge
|
||||
- ConfBridge now has the ability to set the language of announcements to the
|
||||
conference. The language can be set on a bridge profile in confbridge.conf
|
||||
or by the dialplan function CONFBRIDGE(bridge,language)=en.
|
||||
chan_sip - Clarify The "sip show peers" Forcerport Column And Add Comedia
|
||||
- Under the "Forcerport" column, the "N" used to mean NAT (i.e. Yes). With
|
||||
the additon of auto_* NAT settings, the meaning changed and there was a
|
||||
certain combination of letters added to indicate the current setting. The
|
||||
combination of using "Y", "N", "A" or "a", can be confusing. Therefore, we
|
||||
now display clearly what the current Forcerport setting is: "Yes", "No",
|
||||
"Auto (Yes)", "Auto (No)".
|
||||
- Since we are clarifying the Forcerport column, we have added a column to
|
||||
display the Comedia setting since this is useful information as well. We
|
||||
no longer have a simple "NAT" setting like other versions before 11.
|
||||
|
||||
From 11.5 to 11.6:
|
||||
* res_agi will now properly indicate if there was an error in streaming an
|
||||
audio file. The result code will be -1 and the result returned from the
|
||||
the function will be RESULT_FAILURE instead of the prior behavior of always
|
||||
returning RESULT_SUCCESS even if there was an error.
|
||||
|
||||
From 11.4 to 11.5:
|
||||
* The default settings for chan_sip are now overriden properly by the general
|
||||
settings in sip.conf. Please look over your settings upon upgrading.
|
||||
|
||||
From 11.3 to 11.4:
|
||||
* Added the 'n' option to MeetMe to prevent application of the DENOISE function
|
||||
to a channel joining a conference. Some channel drivers that vary the number
|
||||
of audio samples in a voice frame will experience significant quality problems
|
||||
if a denoiser is attached to the channel; this option gives them the ability
|
||||
to remove the denoiser without having to unload func_speex.
|
||||
|
||||
* The Registry AMI event for SIP registrations will now always include the
|
||||
Username field. A previous bug fix missed an instance where it was not
|
||||
included; that has been corrected in this release.
|
||||
|
||||
From 11.2.0 to 11.2.1:
|
||||
* Asterisk would previously not output certain error messages when a remote
|
||||
console attempted to connect to Asterisk and no instance of Asterisk was
|
||||
running. This error message is displayed on stderr; as a result, some
|
||||
initialization scripts that used remote consoles to test for the presence
|
||||
of a running Asterisk instance started to display erroneous error messages.
|
||||
The init.d scripts and the safe_asterisk have been updated in the contrib
|
||||
folder to account for this.
|
||||
|
||||
From 11.2 to 11.3:
|
||||
|
||||
* Now by default, when Asterisk is installed in a path other than /usr, the
|
||||
Asterisk binary will search for shared libraries in ${libdir} in addition to
|
||||
searching system libraries. This allows Asterisk to find its shared
|
||||
libraries without having to specify LD_LIBRARY_PATH. This can be disabled by
|
||||
passing --disable-rpath to configure.
|
||||
|
||||
From 10 to 11:
|
||||
|
||||
Voicemail:
|
||||
- All voicemails now have a "msg_id" which uniquely identifies a message. For
|
||||
users of filesystem and IMAP storage of voicemail, this should be transparent.
|
||||
For users of ODBC, you will need to add a "msg_id" column to your voice mail
|
||||
messages table. This should be a string capable of holding at least 32 characters.
|
||||
All messages created in old Asterisk installations will have a msg_id added to
|
||||
them when required. This operation should be transparent as well.
|
||||
|
||||
Parking:
|
||||
- The comebacktoorigin setting must now be set per parking lot. The setting in
|
||||
the general section will not be applied automatically to each parking lot.
|
||||
- The BLINDTRANSFER channel variable is deleted from a channel when it is
|
||||
bridged to prevent subtle bugs in the parking feature. The channel
|
||||
variable is used by Asterisk internally for the Park application to work
|
||||
properly. If you were using it for your own purposes, copy it to your
|
||||
own channel variable before the channel is bridged.
|
||||
|
||||
res_ais:
|
||||
- Users of res_ais in versions of Asterisk prior to Asterisk 11 must change
|
||||
to use the res_corosync module, instead. OpenAIS is deprecated, but
|
||||
Corosync is still actively developed and maintained. Corosync came out of
|
||||
the OpenAIS project.
|
||||
|
||||
Dialplan Functions:
|
||||
- MAILBOX_EXISTS has been deprecated. Use VM_INFO with the 'exists' parameter
|
||||
instead.
|
||||
- Macro has been deprecated in favor of GoSub. For redirecting and connected
|
||||
line purposes use the following variables instead of their macro equivalents:
|
||||
REDIRECTING_SEND_SUB, REDIRECTING_SEND_SUB_ARGS,
|
||||
CONNECTED_LINE_SEND_SUB, CONNECTED_LINE_SEND_SUB_ARGS.
|
||||
- The REDIRECTING function now supports the redirecting original party id
|
||||
and reason.
|
||||
- The HANGUPCAUSE and HANGUPCAUSE_KEYS functions have been introduced to
|
||||
provide a replacement for the SIP_CAUSE hash. The HangupCauseClear
|
||||
application has also been introduced to remove this data from the channel
|
||||
when necessary.
|
||||
|
||||
|
||||
func_enum:
|
||||
- ENUM query functions now return a count of -1 on lookup error to
|
||||
differentiate between a failed query and a successful query with 0 results
|
||||
matching the specified type.
|
||||
|
||||
CDR:
|
||||
- cdr_adaptive_odbc now supports specifying a schema so that Asterisk can
|
||||
connect to databases that use schemas.
|
||||
|
||||
Configuration Files:
|
||||
- Files listed below have been updated to be more consistent with how Asterisk
|
||||
parses configuration files. This makes configuration files more consistent
|
||||
with what is expected across modules.
|
||||
|
||||
- cdr.conf: [general] and [csv] sections
|
||||
- dnsmgr.conf
|
||||
- dsp.conf
|
||||
|
||||
- The 'verbose' setting in logger.conf now takes an optional argument,
|
||||
specifying the verbosity level for each logging destination. The default,
|
||||
if not otherwise specified, is a verbosity of 3.
|
||||
|
||||
AMI:
|
||||
- DBDelTree now correctly returns an error when 0 rows are deleted just as
|
||||
the DBDel action does.
|
||||
- The IAX2 PeerStatus event now sends a 'Port' header. In Asterisk 10, this was
|
||||
erroneously being sent as a 'Post' header.
|
||||
|
||||
CCSS:
|
||||
- Macro is deprecated. Use cc_callback_sub instead of cc_callback_macro
|
||||
in channel configurations.
|
||||
|
||||
app_meetme:
|
||||
- The 'c' option (announce user count) will now work even if the 'q' (quiet)
|
||||
option is enabled.
|
||||
|
||||
app_followme:
|
||||
- Answered outgoing calls no longer get cut off when the next step is started.
|
||||
You now have until the last step times out to decide if you want to accept
|
||||
the call or not before being disconnected.
|
||||
|
||||
chan_gtalk:
|
||||
- chan_gtalk has been deprecated in favor of the chan_motif channel driver. It is recommended
|
||||
that users switch to using it as it is a core supported module.
|
||||
|
||||
chan_jingle:
|
||||
- chan_jingle has been deprecated in favor of the chan_motif channel driver. It is recommended
|
||||
that users switch to using it as it is a core supported module.
|
||||
|
||||
SIP
|
||||
===
|
||||
- A new option "tonezone" for setting default tonezone for the channel driver
|
||||
or individual devices
|
||||
- A new manager event, "SessionTimeout" has been added and is triggered when
|
||||
a call is terminated due to RTP stream inactivity or SIP session timer
|
||||
expiration.
|
||||
- SIP_CAUSE is now deprecated. It has been modified to use the same
|
||||
mechanism as the HANGUPCAUSE function. Behavior should not change, but
|
||||
performance should be vastly improved. The HANGUPCAUSE function should now
|
||||
be used instead of SIP_CAUSE. Because of this, the storesipcause option in
|
||||
sip.conf is also deprecated.
|
||||
- The sip paramater for Originating Line Information (oli, isup-oli, and
|
||||
ss7-oli) is now parsed out of the From header and copied into the channel's
|
||||
ANI2 information field. This is readable from the CALLERID(ani2) dialplan
|
||||
function.
|
||||
- ICE support has been added and is enabled by default. Some endpoints may have
|
||||
problems with the ICE candidates within the SDP. If this is the case ICE support
|
||||
can be disabled globally or on a per-endpoint basis using the icesupport
|
||||
configuration option. Symptoms of this include one way media or no media flow.
|
||||
|
||||
chan_unistim
|
||||
- Due to massive update in chan_unistim phone keys functions and on-screen
|
||||
information changed.
|
||||
|
||||
users.conf:
|
||||
- A defined user with hasvoicemail=yes now finally uses a Gosub to stdexten
|
||||
as documented in extensions.conf.sample since v1.6.0 instead of a Macro as
|
||||
documented in v1.4. Set the asterisk.conf stdexten=macro parameter to
|
||||
invoke the stdexten the old way.
|
||||
|
||||
res_jabber
|
||||
- This module has been deprecated in favor of the res_xmpp module. The res_xmpp
|
||||
module is backwards compatible with the res_jabber configuration file, dialplan
|
||||
functions, and AMI actions. The old CLI commands can also be made available using
|
||||
the res_clialiases template for Asterisk 11.
|
||||
|
||||
From 1.8 to 10:
|
||||
|
||||
cel_pgsql:
|
||||
- This module now expects an 'extra' column in the database for data added
|
||||
using the CELGenUserEvent() application.
|
||||
|
||||
ConfBridge
|
||||
- ConfBridge's dialplan arguments have changed and are not
|
||||
backwards compatible.
|
||||
|
||||
File Interpreters
|
||||
- The format interpreter formats/format_sln16.c for the file extension
|
||||
'.sln16' has been removed. The '.sln16' file interpreter now exists
|
||||
in the formats/format_sln.c module along with new support for sln12,
|
||||
sln24, sln32, sln44, sln48, sln96, and sln192 file extensions.
|
||||
|
||||
HTTP:
|
||||
- A bindaddr must be specified in order for the HTTP server
|
||||
to run. Previous versions would default to 0.0.0.0 if no
|
||||
bindaddr was specified.
|
||||
|
||||
Gtalk:
|
||||
- The default value for 'context' and 'parkinglots' in gtalk.conf has
|
||||
been changed to 'default', previously they were empty.
|
||||
|
||||
chan_dahdi:
|
||||
- The mohinterpret=passthrough setting is deprecated in favor of
|
||||
moh_signaling=notify.
|
||||
|
||||
pbx_lua:
|
||||
- Execution no longer continues after applications that do dialplan jumps
|
||||
(such as app.goto). Now when an application such as app.goto() is called,
|
||||
control is returned back to the pbx engine and the current extension
|
||||
function stops executing.
|
||||
- the autoservice now defaults to being on by default
|
||||
- autoservice_start() and autoservice_start() no longer return a value.
|
||||
|
||||
Queue:
|
||||
- Mark QUEUE_MEMBER_PENALTY Deprecated it never worked for realtime members
|
||||
- QUEUE_MEMBER is now R/W supporting setting paused, ignorebusy and penalty.
|
||||
|
||||
Asterisk Database:
|
||||
- The internal Asterisk database has been switched from Berkeley DB 1.86 to
|
||||
SQLite 3. An existing Berkeley astdb file can be converted with the astdb2sqlite3
|
||||
utility in the UTILS section of menuselect. If an existing astdb is found and no
|
||||
astdb.sqlite3 exists, astdb2sqlite3 will be compiled automatically. Asterisk will
|
||||
convert an existing astdb to the SQLite3 version automatically at runtime. If
|
||||
moving back from Asterisk 10 to Asterisk 1.8, the astdb2bdb utility can be used
|
||||
to create a Berkeley DB copy of the SQLite3 astdb that Asterisk 10 uses.
|
||||
|
||||
Manager:
|
||||
- The AMI protocol version was incremented to 1.2 as a result of changing two
|
||||
instances of the Unlink event to Bridge events. This change was documented
|
||||
as part of the AMI 1.1 update, but two Unlink events were inadvertently left
|
||||
unchanged.
|
||||
|
||||
Module Support Level
|
||||
- All modules in the addons, apps, bridge, cdr, cel, channels, codecs,
|
||||
formats, funcs, pbx, and res have been updated to include MODULEINFO data
|
||||
that includes <support_level> tags with a value of core, extended, or deprecated.
|
||||
More information is available on the Asterisk wiki at
|
||||
https://wiki.asterisk.org/wiki/display/AST/Asterisk+Module+Support+States
|
||||
|
||||
Deprecated modules are now marked to not build by default and must be explicitly
|
||||
enabled in menuselect.
|
||||
|
||||
chan_sip:
|
||||
- Setting of HASH(SIP_CAUSE,<slave-channel-name>) on channels is now disabled
|
||||
by default. It can be enabled using the 'storesipcause' option. This feature
|
||||
has a significant performance penalty.
|
||||
|
||||
UDPTL:
|
||||
- The default UDPTL port range in udptl.conf.sample differed from the defaults
|
||||
in the source. If you didn't have a config file, you got 4500 to 4599. Now the
|
||||
default is 4000 to 4999.
|
||||
|
||||
===========================================================
|
||||
===========================================================
|
478
UPGRADE-12.txt
478
UPGRADE-12.txt
|
@ -1,478 +0,0 @@
|
|||
===========================================================
|
||||
===
|
||||
=== Information for upgrading between Asterisk versions
|
||||
===
|
||||
=== These files document all the changes that MUST be taken
|
||||
=== into account when upgrading between the Asterisk
|
||||
=== versions listed below. These changes may require that
|
||||
=== you modify your configuration files, dialplan or (in
|
||||
=== some cases) source code if you have your own Asterisk
|
||||
=== modules or patches. These files also include advance
|
||||
=== notice of any functionality that has been marked as
|
||||
=== 'deprecated' and may be removed in a future release,
|
||||
=== along with the suggested replacement functionality.
|
||||
===
|
||||
=== UPGRADE-1.2.txt -- Upgrade info for 1.0 to 1.2
|
||||
=== UPGRADE-1.4.txt -- Upgrade info for 1.2 to 1.4
|
||||
=== UPGRADE-1.6.txt -- Upgrade info for 1.4 to 1.6
|
||||
=== UPGRADE-1.8.txt -- Upgrade info for 1.6 to 1.8
|
||||
=== UPGRADE-10.txt -- Upgrade info for 1.8 to 10
|
||||
=== UPGRADE-11.txt -- Upgrade info for 10 to 11
|
||||
===
|
||||
===========================================================
|
||||
|
||||
There are many significant architectural changes in Asterisk 12. It is
|
||||
recommended that you not only read through this document for important
|
||||
changes that affect an upgrade, but that you also read through the CHANGES
|
||||
document in depth to better understand the new options available to you.
|
||||
|
||||
Additional information on the architectural changes made in Asterisk can be
|
||||
found on the Asterisk wiki (https://wiki.asterisk.org)
|
||||
|
||||
Of particular note, the following systems in Asterisk underwent significant
|
||||
changes. Documentation for the changes and a specification for their
|
||||
behavior in Asterisk 12 is also available on the Asterisk wiki.
|
||||
- AMI: Many events were changed, and the semantics of channels and bridges
|
||||
were defined. In particular, how channels and bridges behave under
|
||||
transfer scenarios and situations involving multiple parties has
|
||||
changed significantly. See https://wiki.asterisk.org/wiki/x/dAFRAQ
|
||||
for more information.
|
||||
- CDR: CDR logic was extracted from the many locations it existed in across
|
||||
Asterisk and implemented as a consumer of Stasis message bus events.
|
||||
As a result, consistency of records has improved significantly and the
|
||||
behavior of CDRs in transfer scenarios has been defined in the CDR
|
||||
specification. However, significant behavioral changes in CDRs resulted
|
||||
from the transition. The most significant change is the addition of
|
||||
CDR entries when a channel who is the Party A in a CDR leaves a bridge.
|
||||
See https://wiki.asterisk.org/wiki/x/pwpRAQ for more information.
|
||||
- CEL: Much like CDRs, CEL was removed from the many locations it existed in
|
||||
across Asterisk and implemented as a consumer of Stasis message bus
|
||||
events. It now closely follows the Bridging API model of channels and
|
||||
bridges, and has a much closer consistency of conveyed events as AMI.
|
||||
For the changes in events, see https://wiki.asterisk.org/wiki/x/4ICLAQ.
|
||||
|
||||
Build System:
|
||||
- Removed the CHANNEL_TRACE development mode build option. Certain aspects of
|
||||
the CHANNEL_TRACE build option were incompatible with the new bridging
|
||||
architecture.
|
||||
|
||||
- Asterisk now depends on libjansson, libuuid and optionally (but recommended)
|
||||
libxslt and uriparser.
|
||||
|
||||
- The new SIP stack and channel driver uses a particular version of PJSIP.
|
||||
Please see https://wiki.asterisk.org/wiki/x/J4GLAQ for more information on
|
||||
configuring and installing PJSIP for use with Asterisk.
|
||||
|
||||
AgentLogin and chan_agent:
|
||||
- Along with AgentRequest, this application has been modified to be a
|
||||
replacement for chan_agent. The chan_agent module and the Agent channel
|
||||
driver have been removed from Asterisk, as the concept of a channel driver
|
||||
proxying in front of another channel driver was incompatible with the new
|
||||
architecture (and has had numerous problems through past versions of
|
||||
Asterisk). The act of a channel calling the AgentLogin application places the
|
||||
channel into a pool of agents that can be requested by the AgentRequest
|
||||
application. Note that this application, as well as all other agent related
|
||||
functionality, is now provided by the app_agent_pool module.
|
||||
|
||||
- This application no longer performs agent authentication. If authentication
|
||||
is desired, the dialplan needs to perform this function using the
|
||||
Authenticate or VMAuthenticate application or through an AGI script before
|
||||
running AgentLogin.
|
||||
|
||||
- The agents.conf schema has changed. Rather than specifying agents on a
|
||||
single line in comma delineated fashion, each agent is defined in a separate
|
||||
context. This allows agents to use the power of context templates in their
|
||||
definition.
|
||||
|
||||
- A number of parameters from agents.conf have been removed. This includes
|
||||
maxloginretries, autologoffunavail, updatecdr, goodbye, group, recordformat,
|
||||
urlprefix, and savecallsin. These options were obsoleted by the move from
|
||||
a channel driver model to the bridging/application model provided by
|
||||
app_agent_pool.
|
||||
|
||||
- The AGENTUPDATECDR channel variable has also been removed, for the same
|
||||
reason as the updatecdr option.
|
||||
|
||||
- The endcall and enddtmf configuration options are removed. Use the
|
||||
dialplan function CHANNEL(dtmf-features) to set DTMF features on the agent
|
||||
channel before calling AgentLogin.
|
||||
|
||||
AgentMonitorOutgoing
|
||||
- This application has been removed. It was a holdover from when
|
||||
AgentCallbackLogin was removed.
|
||||
|
||||
Answer
|
||||
- It is no longer possible to bypass updating the CDR when answering a
|
||||
channel. CDRs are based on the channel state and will be updated when
|
||||
the channel is Answered.
|
||||
|
||||
ControlPlayback
|
||||
- The channel variable CPLAYBACKSTATUS may now return the value
|
||||
'REMOTESTOPPED' when playback is stopped by an external entity.
|
||||
|
||||
DISA
|
||||
- This application now has a dependency on the app_cdr module. It uses this
|
||||
module to hide the CDR created prior to execution of the DISA application.
|
||||
|
||||
DumpChan:
|
||||
- The output of DumpChan no longer includes the DirectBridge or IndirectBridge
|
||||
fields. Instead, if a channel is in a bridge, it includes a BridgeID field
|
||||
containing the unique ID of the bridge that the channel happens to be in.
|
||||
|
||||
ForkCDR:
|
||||
- Nearly every parameter in ForkCDR has been updated and changed to reflect
|
||||
the changes in CDRs. Please see the documentation for the ForkCDR
|
||||
application, as well as the CDR specification on the Asterisk wiki.
|
||||
|
||||
NoCDR:
|
||||
- The NoCDR application has been deprecated. Please use the CDR_PROP function
|
||||
to disable CDRs on a channel.
|
||||
|
||||
ParkAndAnnounce:
|
||||
- The app_parkandannounce module has been removed. The application
|
||||
ParkAndAnnounce is now provided by the res_parking module. See the
|
||||
Parking changes for more information.
|
||||
|
||||
ResetCDR:
|
||||
- The 'w' and 'a' options have been removed. Dispatching CDRs to registered
|
||||
backends occurs on an as-needed basis in order to preserve linkedid
|
||||
propagation and other needed behavior.
|
||||
- The 'e' option is deprecated. Please use the CDR_PROP function to enable
|
||||
CDRs on a channel that they were previously disabled on.
|
||||
- The ResetCDR application is no longer a part of core Asterisk, and instead
|
||||
is now delivered as part of app_cdr.
|
||||
|
||||
Queues:
|
||||
- Queue strategy rrmemory now has a predictable order similar to strategy
|
||||
rrordered. Members will be called in the order that they are added to the
|
||||
queue.
|
||||
|
||||
- Removed the queues.conf check_state_unknown option. It is no longer
|
||||
necessary.
|
||||
|
||||
- It is now possible to play the Queue prompts to the first user waiting in a
|
||||
call queue. Note that this may impact the ability for agents to talk with
|
||||
users, as a prompt may still be playing when an agent connects to the user.
|
||||
This ability is disabled by default but can be enabled on an individual
|
||||
queue using the 'announce-to-first-user' option.
|
||||
|
||||
- The configuration options eventwhencalled and eventmemberstatus have been
|
||||
removed. As a result, the AMI events QueueMemberStatus, AgentCalled,
|
||||
AgentConnect, AgentComplete, AgentDump, and AgentRingNoAnswer will always be
|
||||
sent. The "Variable" fields will also no longer exist on the Agent* events.
|
||||
These events can be filtered out from a connected AMI client using the
|
||||
eventfilter setting in manager.conf.
|
||||
|
||||
- The queue log now differentiates between blind and attended transfers. A
|
||||
blind transfer will result in a BLINDTRANSFER message with the destination
|
||||
context and extension. An attended transfer will result in an
|
||||
ATTENDEDTRANSFER message. This message will indicate the method by which
|
||||
the attended transfer was completed: "BRIDGE" for a bridge merge, "APP"
|
||||
for running an application on a bridge or channel, or "LINK" for linking
|
||||
two bridges together with local channels. The queue log will also now detect
|
||||
externally initiated blind and attended transfers and record the transfer
|
||||
status accordingly.
|
||||
|
||||
- When performing queue pause/unpause on an interface without specifying an
|
||||
individual queue, the PAUSEALL/UNPAUSEALL event will only be logged if at
|
||||
least one member of any queue exists for that interface.
|
||||
|
||||
SetAMAFlags
|
||||
- This application is deprecated in favor of CHANNEL(amaflags).
|
||||
|
||||
VoiceMail:
|
||||
- Mailboxes defined by app_voicemail MUST be referenced by the rest of the
|
||||
system as mailbox@context. The rest of the system cannot add @default
|
||||
to mailbox identifiers for app_voicemail that do not specify a context
|
||||
any longer. It is a mailbox identifier format that should only be
|
||||
interpreted by app_voicemail.
|
||||
|
||||
- The voicemail.conf configuration file now has an 'alias' configuration
|
||||
parameter for use with the Directory application. The voicemail realtime
|
||||
database table schema has also been updated with an 'alias' column. Systems
|
||||
using voicemail with realtime should update their schemas accordingly.
|
||||
|
||||
Channel Drivers:
|
||||
- When a channel driver is configured to enable jiterbuffers, they are now
|
||||
applied unconditionally when a channel joins a bridge. If a jitterbuffer
|
||||
is already set for that channel when it enters, such as by the JITTERBUFFER
|
||||
function, then the existing jitterbuffer will be used and the one set by
|
||||
the channel driver will not be applied.
|
||||
|
||||
chan_bridge
|
||||
- chan_bridge is removed and its functionality is incorporated into ConfBridge
|
||||
itself.
|
||||
|
||||
chan_dahdi:
|
||||
- Analog port dialing and deferred DTMF dialing for PRI now distinguishes
|
||||
between 'w' and 'W'. The 'w' pauses dialing for half a second. The 'W'
|
||||
pauses dialing for one second.
|
||||
|
||||
- The default for inband_on_proceeding has changed to no.
|
||||
|
||||
- The CLI command 'dahdi destroy channel' is now 'dahdi destroy channels'.
|
||||
A range of channels can be specified to be destroyed. Note that this command
|
||||
should only be used if you understand the risks it entails.
|
||||
|
||||
- The script specified by the chan_dahdi.conf mwimonitornotify option now gets
|
||||
the exact configured mailbox name. For app_voicemail mailboxes this is
|
||||
mailbox@context.
|
||||
|
||||
- Added mwi_vm_boxes that also must be configured for ISDN MWI to be enabled.
|
||||
|
||||
- ignore_failed_channels now defaults to True: the channel will continue to
|
||||
be configured even if configuring it has failed. This is generally a
|
||||
better setup for systems with not more than one DAHDI device or with DAHDI
|
||||
>= 2.8.0 .
|
||||
|
||||
chan_local:
|
||||
- The /b option has been removed.
|
||||
|
||||
- chan_local moved into the system core and is no longer a loadable module.
|
||||
|
||||
chan_sip:
|
||||
- The 'callevents' parameter has been removed. Hold AMI events are now raised
|
||||
in the core, and can be filtered out using the 'eventfilter' parameter
|
||||
in manager.conf.
|
||||
|
||||
- Dynamic realtime tables for SIP Users can now include a 'path' field. This
|
||||
will store the path information for that peer when it registers. Realtime
|
||||
tables can also use the 'supportpath' field to enable Path header support.
|
||||
|
||||
- LDAP realtime configurations for SIP Users now have the AstAccountPathSupport
|
||||
objectIdentifier. This maps to the supportpath option in sip.conf.
|
||||
|
||||
Core:
|
||||
- Masquerades as an operation inside Asterisk have been effectively hidden
|
||||
by the migration to the Bridging API. As such, many 'quirks' of Asterisk
|
||||
no longer occur. This includes renaming of channels, "<ZOMBIE>" channels,
|
||||
dropping of frame/audio hooks, and other internal implementation details
|
||||
that users had to deal with. This fundamental change has large implications
|
||||
throughout the changes documented for this version. For more information
|
||||
about the new core architecture of Asterisk, please see the Asterisk wiki.
|
||||
|
||||
- The following channel variables have changed behavior which is described in
|
||||
the CHANGES file: TRANSFER_CONTEXT, BRIDGEPEER, BRIDGEPVTCALLID,
|
||||
ATTENDED_TRANSFER_COMPLETE_SOUND, DYNAMIC_FEATURENAME, and DYNAMIC_PEERNAME.
|
||||
|
||||
AMI (Asterisk Manager Interface):
|
||||
- Version 1.4 - The details of what happens to a channel when a masquerade
|
||||
happens (transfers, parking, etc) have changed.
|
||||
- The Masquerade event now includes the Uniqueid's of the clone and original
|
||||
channels.
|
||||
- Channels no longer swap Uniqueid's as a result of the masquerade.
|
||||
- Instead of a shell game of renames, there's now a single rename, appending
|
||||
<ZOMBIE> to the name of the original channel.
|
||||
|
||||
- *Major* changes were made to both the syntax as well as the semantics of the
|
||||
AMI protocol. In particular, AMI events have been substantially modified
|
||||
and improved in this version of Asterisk. The major event changes are listed
|
||||
below.
|
||||
- NewPeerAccount has been removed. NewAccountCode is raised instead.
|
||||
- Reload events have been consolidated and standardized.
|
||||
- ModuleLoadReport has been removed.
|
||||
- FaxSent is now SendFAX; FaxReceived is now ReceiveFAX. This standardizes
|
||||
app_fax and res_fax events.
|
||||
- MusicOnHold has been replaced with MusicOnHoldStart and MusicOnHoldStop.
|
||||
- JabberEvent has been removed.
|
||||
- Hold is now in the core and will now raise Hold and Unhold events.
|
||||
- Join is now QueueCallerJoin.
|
||||
- Leave is now QueueCallerLeave.
|
||||
- Agentlogin/Agentlogoff is now AgentLogin/AgentLogoff, respectively.
|
||||
- ChannelUpdate has been removed.
|
||||
- Local channel optimization is now conveyed via LocalOptimizationBegin and
|
||||
LocalOptimizationEnd.
|
||||
- BridgeAction and BridgeExec have been removed.
|
||||
- BlindTransfer and AttendedTransfer events were added.
|
||||
- Dial is now DialBegin and DialEnd.
|
||||
- DTMF is now DTMFBegin and DTMFEnd.
|
||||
- Bridge has been replaced with BridgeCreate, BridgeEnter, BridgeLeave, and
|
||||
BridgeDestroy
|
||||
- MusicOnHold has been replaced with MusicOnHoldStart and MusicOnHoldStop
|
||||
- AGIExec is now AGIExecStart and AGIExecEnd
|
||||
- AsyncAGI is now AsyncAGIStart, AsyncAGIExec, and AsyncAGIEnd
|
||||
|
||||
- The 'MCID' AMI event now publishes a channel snapshot when available and
|
||||
its non-channel-snapshot parameters now use either the "MCallerID" or
|
||||
'MConnectedID' prefixes with Subaddr*, Name*, and Num* suffixes instead
|
||||
of 'CallerID' and 'ConnectedID' to avoid confusion with similarly named
|
||||
parameters in the channel snapshot.
|
||||
|
||||
- The 'Channel' key used in the 'AlarmClear', 'Alarm', and 'DNDState' has been
|
||||
renamed "DAHDIChannel" since it does not convey an Asterisk channel name.
|
||||
|
||||
- All AMI events now contain a 'SystemName' field, if available.
|
||||
|
||||
- Local channel information in events is now prefixed with 'LocalOne' and
|
||||
'LocalTwo'. This replaces the suffix of '1' and '2' for the two halves of
|
||||
the Local channel. This affects the 'LocalBridge', 'LocalOptimizationBegin',
|
||||
and 'LocalOptimizationEnd' events.
|
||||
|
||||
- The 'RTCPSent'/'RTCPReceived' events have been significantly modified from
|
||||
previous versions. They now report all SR/RR packets sent/received, and
|
||||
have been restructured to better reflect the data sent in a SR/RR. In
|
||||
particular, the event structure now supports multiple report blocks.
|
||||
|
||||
- The deprecated use of | (pipe) as a separator in the channelvars setting in
|
||||
manager.conf has been removed.
|
||||
|
||||
- The SIP SIPqualifypeer action now sends a response indicating it will qualify
|
||||
a peer once a peer has been found to qualify. Once the qualify has been
|
||||
completed it will now issue a SIPqualifypeerdone event.
|
||||
|
||||
- The AMI event 'Newexten' field 'Extension' is deprecated, and may be removed
|
||||
in a future release. Please use the common 'Exten' field instead.
|
||||
|
||||
- The AMI events 'ParkedCall', 'ParkedCallTimeOut', 'ParkedCallGiveUp', and
|
||||
'UnParkedCall' have changed significantly in the new res_parking module.
|
||||
- The 'Channel' and 'From' headers are gone. For the channel that was parked
|
||||
or is coming out of parking, a 'Parkee' channel snapshot is issued and it
|
||||
has a number of fields associated with it. The old 'Channel' header relayed
|
||||
the same data as the new 'ParkeeChannel' header.
|
||||
- The 'From' field was ambiguous and changed meaning depending on the event.
|
||||
for most of these, it was the name of the channel that parked the call
|
||||
(the 'Parker'). There is no longer a header that provides this channel name,
|
||||
however the 'ParkerDialString' will contain a dialstring to redial the
|
||||
device that parked the call.
|
||||
- On UnParkedCall events, the 'From' header would instead represent the
|
||||
channel responsible for retrieving the parkee. It receives a channel
|
||||
snapshot labeled 'Retriever'. The 'from' field is is replaced with
|
||||
'RetrieverChannel'.
|
||||
- Lastly, the 'Exten' field has been replaced with 'ParkingSpace'.
|
||||
|
||||
- The AMI event 'Parkinglot' (response to 'Parkinglots' command) in a similar
|
||||
fashion has changed the field names 'StartExten' and 'StopExten' to
|
||||
'StartSpace' and 'StopSpace' respectively.
|
||||
|
||||
- The AMI 'Status' response event to the AMI Status action replaces the
|
||||
'BridgedChannel' and 'BridgedUniqueid' headers with the 'BridgeID' header to
|
||||
indicate what bridge the channel is currently in.
|
||||
|
||||
CDR (Call Detail Records)
|
||||
- Significant changes have been made to the behavior of CDRs. The CDR engine
|
||||
was effectively rewritten and built on the Stasis message bus. For a full
|
||||
definition of CDR behavior in Asterisk 12, please read the specification
|
||||
on the Asterisk wiki (wiki.asterisk.org).
|
||||
|
||||
- CDRs will now be created between all participants in a bridge. For each
|
||||
pair of channels in a bridge, a CDR is created to represent the path of
|
||||
communication between those two endpoints. This lets an end user choose who
|
||||
to bill for what during bridge operations with multiple parties.
|
||||
|
||||
- The duration, billsec, start, answer, and end times now reflect the times
|
||||
associated with the current CDR for the channel, as opposed to a cumulative
|
||||
measurement of all CDRs for that channel.
|
||||
|
||||
CEL:
|
||||
- The Uniqueid field for a channel is now a stable identifier, and will not
|
||||
change due to transfers, parking, etc.
|
||||
|
||||
- CEL has undergone significant rework in Asterisk 12, and is now built on the
|
||||
Stasis message bus. Please see the specification for CEL on the Asterisk
|
||||
wiki at https://wiki.asterisk.org/wiki/x/4ICLAQ for more detailed
|
||||
information. A summary of the affected events is below:
|
||||
- BRIDGE_START, BRIDGE_END, BRIDGE_UPDATE, 3WAY_START, 3WAY_END, CONF_ENTER,
|
||||
CONF_EXIT, CONF_START, and CONF_END events have all been removed. These
|
||||
events have been replaced by BRIDGE_ENTER/BRIDGE_EXIT.
|
||||
- BLINDTRANSFER/ATTENDEDTRANSFER events now report the peer as NULL and
|
||||
additional information in the extra string field.
|
||||
|
||||
Dialplan Functions:
|
||||
|
||||
- Certain dialplan functions have been marked as 'dangerous', and may only be
|
||||
executed from the dialplan. Execution from extenal sources (AMI's GetVar and
|
||||
SetVar actions; etc.) may be inhibited by setting live_dangerously in the
|
||||
[options] section of asterisk.conf to no. SHELL(), channel locking, and
|
||||
direct file read/write functions are marked as dangerous. DB_DELETE() and
|
||||
REALTIME_DESTROY() are marked as dangerous for reads, but can now safely
|
||||
accept writes (which ignore the provided value).
|
||||
- The default value for live_dangerously was changed from yes (in Asterisk 11
|
||||
and earlier) to no (in Asterisk 12 and greater).
|
||||
|
||||
Dialplan:
|
||||
- All channel and global variable names are evaluated in a case-sensitive
|
||||
manner. In previous versions of Asterisk, variables created and evaluated in
|
||||
the dialplan were evaluated case-insensitively, but built-in variables and
|
||||
variable evaluation done internally within Asterisk was done
|
||||
case-sensitively.
|
||||
|
||||
- Asterisk has always had code to ignore dash '-' characters that are not
|
||||
part of a character set in the dialplan extensions. The code now
|
||||
consistently ignores these characters when matching dialplan extensions.
|
||||
|
||||
- BRIDGE_FEATURES channel variable is now casesensitive for feature letter
|
||||
codes. Uppercase variants apply them to the calling party while lowercase
|
||||
variants apply them to the called party.
|
||||
|
||||
Features:
|
||||
- The features.conf [applicationmap] <FeatureName> ActivatedBy option is
|
||||
no longer honored. The feature is always activated by the channel that has
|
||||
DYNAMIC_FEATURES defined on it when it enters the bridge. Use predial to set
|
||||
different values of DYNAMIC_FEATURES on the channels
|
||||
|
||||
- Executing a dynamic feature on the bridge peer in a multi-party bridge will
|
||||
execute it on all peers of the activating channel.
|
||||
|
||||
- There is no longer an explicit 'features reload' CLI command. Features can
|
||||
still be reloaded using 'module reload features'.
|
||||
|
||||
- It is no longer necessary (or possible) to define the ATXFER_NULL_TECH in
|
||||
features.c for atxferdropcall=no to work properly. This option now just
|
||||
works.
|
||||
|
||||
Parking:
|
||||
- Parking has been extracted from the Asterisk core as a loadable module,
|
||||
res_parking.
|
||||
|
||||
- Configuration is found in res_parking.conf. It is no longer supported in
|
||||
features.conf
|
||||
|
||||
- The arguments for the Park, ParkedCall, and ParkAndAnnounce applications
|
||||
have been modified significantly. See the application documents for
|
||||
specific details.
|
||||
|
||||
- Numerous changes to Parking related applications, AMI and CLI commands and
|
||||
internal inter-workings have been made. Please read the CHANGES file for
|
||||
the detailed list.
|
||||
|
||||
Security Events Framework:
|
||||
- Security Event timestamps now use ISO 8601 formatted date/time instead of
|
||||
the "seconds-microseconds" format that it was using previously.
|
||||
|
||||
AGENT:
|
||||
- The password option has been disabled, as the AgentLogin application no
|
||||
longer provides authentication.
|
||||
|
||||
AUDIOHOOK_INHERIT:
|
||||
- Due to changes in the Asterisk core, this function is no longer needed to
|
||||
preserve a MixMonitor on a channel during transfer operations and dialplan
|
||||
execution. It is effectively obsolete.
|
||||
|
||||
CDR: (function)
|
||||
- The 'amaflags' and 'accountcode' attributes for the CDR function are
|
||||
deprecated. Use the CHANNEL function instead to access these attributes.
|
||||
|
||||
- The 'l' option has been removed. When reading a CDR attribute, the most
|
||||
recent record is always used. When writing a CDR attribute, all non-finalized
|
||||
CDRs are updated.
|
||||
|
||||
- The 'r' option has been removed, for the same reason as the 'l' option.
|
||||
|
||||
- The 's' option has been removed, as LOCKED semantics no longer exist in the
|
||||
CDR engine.
|
||||
|
||||
VMCOUNT:
|
||||
- Mailboxes defined by app_voicemail MUST be referenced by the rest of the
|
||||
system as mailbox@context. The rest of the system cannot add @default
|
||||
to mailbox identifiers for app_voicemail that do not specify a context
|
||||
any longer. It is a mailbox identifier format that should only be
|
||||
interpreted by app_voicemail.
|
||||
|
||||
res_rtp_asterisk:
|
||||
- ICE/STUN/TURN support in res_rtp_asterisk has been made optional. To enable
|
||||
them, an Asterisk-specific version of PJSIP needs to be installed.
|
||||
Tarballs are available from https://github.com/asterisk/pjproject/tags/.
|
||||
|
||||
|
||||
===========================================================
|
||||
===========================================================
|
2677
UPGRADE.txt
2677
UPGRADE.txt
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1 @@
|
|||
mp3
|
|
@ -41,10 +41,10 @@ ifeq ($(filter format_mp3,$(MENUSELECT_ADDONS)),)
|
|||
echo ; \
|
||||
echo "**************************************************************" ; \
|
||||
echo "*** ***" ; \
|
||||
echo "*** ---> READ THIS OR YOUR BUILD WILL FAIL <--- ***" ; \
|
||||
echo "*** ---> IMPORTANT INFORMATION ABOUT format_mp3 <--- ***" ; \
|
||||
echo "*** ***" ; \
|
||||
echo "*** format_mp3 has been selected to be installed, but the ***" ; \
|
||||
echo "*** mp3 decoder library has not yet been downloaded into ***" ; \
|
||||
echo "*** MP3 decoder library has not yet been downloaded into ***" ; \
|
||||
echo "*** the source tree. To do so, please run the following ***" ; \
|
||||
echo "*** command: ***" ; \
|
||||
echo "*** ***" ; \
|
||||
|
@ -61,12 +61,18 @@ clean::
|
|||
if [ -f mp3/Makefile ] ; then $(MAKE) -C mp3 clean ; fi
|
||||
rm -f $(addprefix ooh323c/src/,$(H323OBJS))
|
||||
|
||||
$(if $(filter format_mp3,$(EMBEDDED_MODS)),modules.link,format_mp3.so): mp3/common.o mp3/dct64_i386.o mp3/decode_ntom.o mp3/layer3.o mp3/tabinit.o mp3/interface.o
|
||||
ifneq ($(wildcard mp3/Makefile),)
|
||||
format_mp3.so: mp3/common.o mp3/dct64_i386.o mp3/decode_ntom.o mp3/layer3.o mp3/tabinit.o mp3/interface.o
|
||||
endif
|
||||
|
||||
chan_mobile.o: _ASTCFLAGS+=$(AST_NO_FORMAT_TRUNCATION)
|
||||
chan_ooh323.o: _ASTCFLAGS+=$(H323CFLAGS)
|
||||
|
||||
$(if $(filter chan_ooh323,$(EMBEDDED_MODS)),modules.link,chan_ooh323.so): _ASTCFLAGS+=$(H323CFLAGS)
|
||||
$(if $(filter chan_ooh323,$(EMBEDDED_MODS)),modules.link,chan_ooh323.so): $(addprefix ooh323c/src/,$(H323OBJS)) chan_ooh323.o ooh323cDriver.o
|
||||
chan_ooh323.so: _ASTCFLAGS+=$(H323CFLAGS)
|
||||
chan_ooh323.so: $(addprefix ooh323c/src/,$(H323OBJS)) chan_ooh323.o ooh323cDriver.o
|
||||
$(addprefix ooh323c/src/,$(H323OBJS)) chan_ooh323.o ooh323cDriver.o: _ASTCFLAGS+=$(call MOD_ASTCFLAGS,chan_ooh323)
|
||||
|
||||
.PHONY: check_mp3
|
||||
|
||||
ifeq ($(wildcard mp3/Makefile),)
|
||||
.PHONY: format_mp3.o format_mp3.so
|
||||
endif
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
* \addtogroup configuration_file Configuration Files
|
||||
*/
|
||||
|
||||
/*!
|
||||
/*!
|
||||
* \page app_mysql.conf app_mysql.conf
|
||||
* \verbinclude app_mysql.conf.sample
|
||||
*/
|
||||
|
@ -335,7 +335,7 @@ static int aMYSQL_connect(struct ast_channel *chan, const char *data)
|
|||
unsigned int port = 0;
|
||||
char *port_str;
|
||||
char *parse = ast_strdupa(data);
|
||||
|
||||
|
||||
AST_NONSTANDARD_APP_ARGS(args, parse, ' ');
|
||||
|
||||
if (args.argc < 6) {
|
||||
|
@ -626,8 +626,8 @@ static int unload_module(void)
|
|||
* Module loading including tests for configuration or dependencies.
|
||||
* This function can return AST_MODULE_LOAD_FAILURE, AST_MODULE_LOAD_DECLINE,
|
||||
* or AST_MODULE_LOAD_SUCCESS. If a dependency or environment variable fails
|
||||
* tests return AST_MODULE_LOAD_FAILURE. If the module can not load the
|
||||
* configuration file or other non-critical problem return
|
||||
* tests return AST_MODULE_LOAD_FAILURE. If the module can not load the
|
||||
* configuration file or other non-critical problem return
|
||||
* AST_MODULE_LOAD_DECLINE. On success return AST_MODULE_LOAD_SUCCESS.
|
||||
*/
|
||||
static int load_module(void)
|
||||
|
@ -665,4 +665,3 @@ static int load_module(void)
|
|||
}
|
||||
|
||||
AST_MODULE_INFO_STANDARD_DEPRECATED(ASTERISK_GPL_KEY, "Simple Mysql Interface");
|
||||
|
||||
|
|
|
@ -60,6 +60,14 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
|||
|
||||
#define DATE_FORMAT "%Y-%m-%d %T"
|
||||
|
||||
#ifndef MYSQL_PORT
|
||||
# ifdef MARIADB_PORT
|
||||
# define MYSQL_PORT MARIADB_PORT
|
||||
# else
|
||||
# define MYSQL_PORT 3306
|
||||
# endif
|
||||
#endif
|
||||
|
||||
AST_THREADSTORAGE(sql1_buf);
|
||||
AST_THREADSTORAGE(sql2_buf);
|
||||
AST_THREADSTORAGE(escape_buf);
|
||||
|
@ -128,7 +136,7 @@ static char *handle_cli_cdr_mysql_status(struct ast_cli_entry *e, int cmd, struc
|
|||
else
|
||||
snprintf(status, 255, "Connected to %s@%s", ast_str_buffer(dbname), ast_str_buffer(hostname));
|
||||
|
||||
if (!ast_strlen_zero(ast_str_buffer(dbuser)))
|
||||
if (ast_str_strlen(dbuser))
|
||||
snprintf(status2, 99, " with username %s", ast_str_buffer(dbuser));
|
||||
if (ast_str_strlen(dbtable))
|
||||
snprintf(status2, 99, " using table %s", ast_str_buffer(dbtable));
|
||||
|
@ -158,11 +166,23 @@ static struct ast_cli_entry cdr_mysql_status_cli[] = {
|
|||
AST_CLI_DEFINE(handle_cli_cdr_mysql_status, "Show connection status of cdr_mysql"),
|
||||
};
|
||||
|
||||
static void configure_connection_charset(void)
|
||||
{
|
||||
if (ast_str_strlen(dbcharset)) {
|
||||
const char *charset = ast_str_buffer(dbcharset);
|
||||
if (mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, charset)) {
|
||||
ast_log(LOG_WARNING, "Failed to set connection charset. Data inserted might be invalid.\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static int mysql_log(struct ast_cdr *cdr)
|
||||
{
|
||||
struct ast_str *sql1 = ast_str_thread_get(&sql1_buf, 1024), *sql2 = ast_str_thread_get(&sql2_buf, 1024);
|
||||
int retries = 5;
|
||||
#if MYSQL_VERSION_ID >= 50013
|
||||
#ifdef HAVE_MYSQLCLIENT_BOOL
|
||||
bool my_bool_true = 1;
|
||||
#elif HAVE_MYSQLCLIENT_MY_BOOL
|
||||
my_bool my_bool_true = 1;
|
||||
#endif
|
||||
|
||||
|
@ -190,15 +210,13 @@ db_reconnect:
|
|||
if (ssl_ca || ssl_cert || ssl_key) {
|
||||
mysql_ssl_set(&mysql, ssl_key ? ast_str_buffer(ssl_key) : NULL, ssl_cert ? ast_str_buffer(ssl_cert) : NULL, ssl_ca ? ast_str_buffer(ssl_ca) : NULL, NULL, NULL);
|
||||
}
|
||||
|
||||
configure_connection_charset();
|
||||
|
||||
if (mysql_real_connect(&mysql, ast_str_buffer(hostname), ast_str_buffer(dbuser), ast_str_buffer(password), ast_str_buffer(dbname), dbport, dbsock && ast_str_strlen(dbsock) ? ast_str_buffer(dbsock) : NULL, ssl_ca ? CLIENT_SSL : 0)) {
|
||||
connected = 1;
|
||||
connect_time = time(NULL);
|
||||
records = 0;
|
||||
if (dbcharset) {
|
||||
ast_str_set(&sql1, 0, "SET NAMES '%s'", ast_str_buffer(dbcharset));
|
||||
mysql_real_query(&mysql, ast_str_buffer(sql1), ast_str_strlen(sql1));
|
||||
ast_debug(1, "SQL command as follows: %s\n", ast_str_buffer(sql1));
|
||||
}
|
||||
} else {
|
||||
ast_log(LOG_ERROR, "Cannot connect to database server %s: (%d) %s\n", ast_str_buffer(hostname), mysql_errno(&mysql), mysql_error(&mysql));
|
||||
connected = 0;
|
||||
|
@ -250,7 +268,7 @@ db_reconnect:
|
|||
struct ast_tm tm;
|
||||
char timestr[128];
|
||||
ast_localtime(&tv, &tm, ast_str_strlen(cdrzone) ? ast_str_buffer(cdrzone) : NULL);
|
||||
ast_strftime(timestr, sizeof(timestr), "%Y-%m-%d %T", &tm);
|
||||
ast_strftime(timestr, sizeof(timestr), DATE_FORMAT, &tm);
|
||||
value = ast_strdupa(timestr);
|
||||
cdrname = "calldate";
|
||||
} else {
|
||||
|
@ -265,10 +283,7 @@ db_reconnect:
|
|||
/* Need the type and value to determine if we want the raw value or not */
|
||||
if (entry->staticvalue) {
|
||||
value = ast_strdupa(entry->staticvalue);
|
||||
} else if ((!strcmp(cdrname, "start") ||
|
||||
!strcmp(cdrname, "answer") ||
|
||||
!strcmp(cdrname, "end") ||
|
||||
!strcmp(cdrname, "disposition") ||
|
||||
} else if ((!strcmp(cdrname, "disposition") ||
|
||||
!strcmp(cdrname, "amaflags")) &&
|
||||
(strstr(entry->type, "int") ||
|
||||
strstr(entry->type, "dec") ||
|
||||
|
@ -278,6 +293,13 @@ db_reconnect:
|
|||
strstr(entry->type, "numeric") ||
|
||||
strstr(entry->type, "fixed"))) {
|
||||
ast_cdr_format_var(cdr, cdrname, &value, workspace, sizeof(workspace), 1);
|
||||
} else if (!strcmp(cdrname, "start") || !strcmp(cdrname, "answer") ||
|
||||
!strcmp(cdrname, "end")) {
|
||||
struct ast_tm tm;
|
||||
char timestr[128];
|
||||
ast_localtime(&cdr->start, &tm, ast_str_strlen(cdrzone) ? ast_str_buffer(cdrzone) : NULL);
|
||||
ast_strftime(timestr, sizeof(timestr), DATE_FORMAT, &tm);
|
||||
value = ast_strdupa(timestr);
|
||||
} else if (!strcmp(cdrname, "calldate")) {
|
||||
/* Skip calldate - the value has already been dup'd */
|
||||
} else {
|
||||
|
@ -353,11 +375,29 @@ db_reconnect:
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int my_unload_module(int reload)
|
||||
{
|
||||
static void free_strings(void)
|
||||
{
|
||||
struct unload_string *us;
|
||||
|
||||
AST_LIST_LOCK(&unload_strings);
|
||||
while ((us = AST_LIST_REMOVE_HEAD(&unload_strings, entry))) {
|
||||
ast_free(us->str);
|
||||
ast_free(us);
|
||||
}
|
||||
AST_LIST_UNLOCK(&unload_strings);
|
||||
}
|
||||
|
||||
static int my_unload_module(int reload)
|
||||
{
|
||||
struct column *entry;
|
||||
|
||||
if (!reload) {
|
||||
if (ast_cdr_unregister(name)) {
|
||||
/* If we can't unregister the backend, we can't unload the module */
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
ast_cli_unregister_multiple(cdr_mysql_status_cli, sizeof(cdr_mysql_status_cli) / sizeof(struct ast_cli_entry));
|
||||
|
||||
if (connected) {
|
||||
|
@ -366,12 +406,7 @@ static int my_unload_module(int reload)
|
|||
records = 0;
|
||||
}
|
||||
|
||||
AST_LIST_LOCK(&unload_strings);
|
||||
while ((us = AST_LIST_REMOVE_HEAD(&unload_strings, entry))) {
|
||||
ast_free(us->str);
|
||||
ast_free(us);
|
||||
}
|
||||
AST_LIST_UNLOCK(&unload_strings);
|
||||
free_strings();
|
||||
|
||||
if (!reload) {
|
||||
AST_RWLIST_WRLOCK(&columns);
|
||||
|
@ -387,7 +422,8 @@ static int my_unload_module(int reload)
|
|||
if (reload) {
|
||||
return ast_cdr_backend_suspend(name);
|
||||
} else {
|
||||
return ast_cdr_unregister(name);
|
||||
/* We unregistered earlier */
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -444,7 +480,9 @@ static int my_load_module(int reload)
|
|||
MYSQL_ROW row;
|
||||
MYSQL_RES *result;
|
||||
char sqldesc[128];
|
||||
#if MYSQL_VERSION_ID >= 50013
|
||||
#ifdef HAVE_MYSQLCLIENT_BOOL
|
||||
bool my_bool_true = 1;
|
||||
#elif HAVE_MYSQLCLIENT_MY_BOOL
|
||||
my_bool my_bool_true = 1;
|
||||
#endif
|
||||
|
||||
|
@ -490,7 +528,7 @@ static int my_load_module(int reload)
|
|||
res |= my_load_config_string(cfg, "global", "ssl_cert", &ssl_cert, "");
|
||||
res |= my_load_config_string(cfg, "global", "ssl_key", &ssl_key, "");
|
||||
|
||||
res |= my_load_config_number(cfg, "global", "port", &dbport, 0);
|
||||
res |= my_load_config_number(cfg, "global", "port", &dbport, MYSQL_PORT);
|
||||
res |= my_load_config_number(cfg, "global", "timeout", &timeout, 0);
|
||||
res |= my_load_config_string(cfg, "global", "compat", &compat, "no");
|
||||
res |= my_load_config_string(cfg, "global", "cdrzone", &cdrzone, "");
|
||||
|
@ -513,7 +551,9 @@ static int my_load_module(int reload)
|
|||
AST_RWLIST_UNLOCK(&columns);
|
||||
}
|
||||
ast_config_destroy(cfg);
|
||||
return AST_MODULE_LOAD_FAILURE;
|
||||
free_strings();
|
||||
|
||||
return AST_MODULE_LOAD_DECLINE;
|
||||
}
|
||||
|
||||
/* Check for any aliases */
|
||||
|
@ -528,15 +568,16 @@ static int my_load_module(int reload)
|
|||
ast_debug(1, "Got hostname of %s\n", ast_str_buffer(hostname));
|
||||
ast_debug(1, "Got port of %d\n", dbport);
|
||||
ast_debug(1, "Got a timeout of %d\n", timeout);
|
||||
if (dbsock)
|
||||
if (ast_str_strlen(dbsock)) {
|
||||
ast_debug(1, "Got sock file of %s\n", ast_str_buffer(dbsock));
|
||||
}
|
||||
ast_debug(1, "Got user of %s\n", ast_str_buffer(dbuser));
|
||||
ast_debug(1, "Got dbname of %s\n", ast_str_buffer(dbname));
|
||||
ast_debug(1, "Got password of %s\n", ast_str_buffer(password));
|
||||
ast_debug(1, "%sunning in calldate compatibility mode\n", calldate_compat ? "R" : "Not r");
|
||||
ast_debug(1, "Dates and times are localized to %s\n", S_OR(ast_str_buffer(cdrzone), "local timezone"));
|
||||
|
||||
if (dbcharset) {
|
||||
if (ast_str_strlen(dbcharset)) {
|
||||
ast_debug(1, "Got DB charset of %s\n", ast_str_buffer(dbcharset));
|
||||
}
|
||||
|
||||
|
@ -561,6 +602,9 @@ static int my_load_module(int reload)
|
|||
NULL, NULL);
|
||||
}
|
||||
temp = dbsock && ast_str_strlen(dbsock) ? ast_str_buffer(dbsock) : NULL;
|
||||
|
||||
configure_connection_charset();
|
||||
|
||||
if (!mysql_real_connect(&mysql, ast_str_buffer(hostname), ast_str_buffer(dbuser), ast_str_buffer(password), ast_str_buffer(dbname), dbport, temp, ssl_ca && ast_str_strlen(ssl_ca) ? CLIENT_SSL : 0)) {
|
||||
ast_log(LOG_ERROR, "Failed to connect to mysql database %s on %s.\n", ast_str_buffer(dbname), ast_str_buffer(hostname));
|
||||
connected = 0;
|
||||
|
@ -570,11 +614,6 @@ static int my_load_module(int reload)
|
|||
connected = 1;
|
||||
records = 0;
|
||||
connect_time = time(NULL);
|
||||
if (dbcharset) {
|
||||
snprintf(sqldesc, sizeof(sqldesc), "SET NAMES '%s'", ast_str_buffer(dbcharset));
|
||||
mysql_real_query(&mysql, sqldesc, strlen(sqldesc));
|
||||
ast_debug(1, "SQL command as follows: %s\n", sqldesc);
|
||||
}
|
||||
|
||||
/* Get table description */
|
||||
snprintf(sqldesc, sizeof(sqldesc), "DESC %s", dbtable ? ast_str_buffer(dbtable) : "cdr");
|
||||
|
@ -584,7 +623,9 @@ static int my_load_module(int reload)
|
|||
connected = 0;
|
||||
AST_RWLIST_UNLOCK(&columns);
|
||||
ast_config_destroy(cfg);
|
||||
return AST_MODULE_LOAD_FAILURE;
|
||||
free_strings();
|
||||
|
||||
return AST_MODULE_LOAD_DECLINE;
|
||||
}
|
||||
|
||||
if (!(result = mysql_store_result(&mysql))) {
|
||||
|
@ -593,7 +634,9 @@ static int my_load_module(int reload)
|
|||
connected = 0;
|
||||
AST_RWLIST_UNLOCK(&columns);
|
||||
ast_config_destroy(cfg);
|
||||
return AST_MODULE_LOAD_FAILURE;
|
||||
free_strings();
|
||||
|
||||
return AST_MODULE_LOAD_DECLINE;
|
||||
}
|
||||
|
||||
while ((row = mysql_fetch_row(result))) {
|
||||
|
@ -659,7 +702,8 @@ static int my_load_module(int reload)
|
|||
AST_RWLIST_UNLOCK(&columns);
|
||||
ast_config_destroy(cfg);
|
||||
if (res < 0) {
|
||||
return AST_MODULE_LOAD_FAILURE;
|
||||
my_unload_module(0);
|
||||
return AST_MODULE_LOAD_DECLINE;
|
||||
}
|
||||
|
||||
if (!reload) {
|
||||
|
@ -673,7 +717,12 @@ static int my_load_module(int reload)
|
|||
res = ast_cli_register_multiple(cdr_mysql_status_cli, sizeof(cdr_mysql_status_cli) / sizeof(struct ast_cli_entry));
|
||||
}
|
||||
|
||||
return res;
|
||||
if (res) {
|
||||
my_unload_module(0);
|
||||
return AST_MODULE_LOAD_DECLINE;
|
||||
}
|
||||
|
||||
return AST_MODULE_LOAD_SUCCESS;
|
||||
}
|
||||
|
||||
static int load_module(void)
|
||||
|
@ -703,4 +752,3 @@ AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "MySQL CDR Backend",
|
|||
.unload = unload_module,
|
||||
.reload = reload,
|
||||
);
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
* at the top of the source tree.
|
||||
*/
|
||||
|
||||
/*!
|
||||
/*!
|
||||
* \file
|
||||
* \brief Bluetooth Mobile Device channel driver
|
||||
*
|
||||
|
@ -58,6 +58,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
|||
|
||||
#include "asterisk/compat.h"
|
||||
#include "asterisk/lock.h"
|
||||
#include "asterisk/callerid.h"
|
||||
#include "asterisk/channel.h"
|
||||
#include "asterisk/config.h"
|
||||
#include "asterisk/logger.h"
|
||||
|
@ -133,7 +134,8 @@ struct mbl_pvt {
|
|||
int rfcomm_socket; /* rfcomm socket descriptor */
|
||||
char rfcomm_buf[256];
|
||||
char io_buf[CHANNEL_FRAME_SIZE + AST_FRIENDLY_OFFSET];
|
||||
struct ast_smoother *smoother; /* our smoother, for making 48 byte frames */
|
||||
struct ast_smoother *bt_out_smoother; /* our bt_out_smoother, for making 48 byte frames */
|
||||
struct ast_smoother *bt_in_smoother; /* our smoother, for making "normal" CHANNEL_FRAME_SIZEed byte frames */
|
||||
int sco_socket; /* sco socket descriptor */
|
||||
pthread_t monitor_thread; /* monitor thread handle */
|
||||
int timeout; /*!< used to set the timeout for rfcomm data (may be used in the future) */
|
||||
|
@ -163,6 +165,12 @@ struct mbl_pvt {
|
|||
AST_LIST_ENTRY(mbl_pvt) entry;
|
||||
};
|
||||
|
||||
/*! Structure used by hfp_parse_clip to return two items */
|
||||
struct cidinfo {
|
||||
char *cnum;
|
||||
char *cnam;
|
||||
};
|
||||
|
||||
static AST_RWLIST_HEAD_STATIC(devices, mbl_pvt);
|
||||
|
||||
static int handle_response_ok(struct mbl_pvt *pvt, char *buf);
|
||||
|
@ -208,7 +216,7 @@ static char *mblsendsms_desc =
|
|||
" Dest - destination\n"
|
||||
" Message - text of the message\n";
|
||||
|
||||
static struct ast_channel *mbl_new(int state, struct mbl_pvt *pvt, char *cid_num,
|
||||
static struct ast_channel *mbl_new(int state, struct mbl_pvt *pvt, struct cidinfo *cidinfo,
|
||||
const struct ast_assigned_ids *assignedids, const struct ast_channel *requestor);
|
||||
static struct ast_channel *mbl_request(const char *type, struct ast_format_cap *cap,
|
||||
const struct ast_assigned_ids *assignedids, const struct ast_channel *requestor, const char *data, int *cause);
|
||||
|
@ -364,7 +372,8 @@ static struct hfp_hf hfp_our_brsf = {
|
|||
|
||||
|
||||
static int hfp_parse_ciev(struct hfp_pvt *hfp, char *buf, int *value);
|
||||
static char *hfp_parse_clip(struct hfp_pvt *hfp, char *buf);
|
||||
static struct cidinfo hfp_parse_clip(struct hfp_pvt *hfp, char *buf);
|
||||
static int parse_next_token(char string[], const int start, const char delim);
|
||||
static int hfp_parse_cmti(struct hfp_pvt *hfp, char *buf);
|
||||
static int hfp_parse_cmgr(struct hfp_pvt *hfp, char *buf, char **from_number, char **text);
|
||||
static int hfp_parse_brsf(struct hfp_pvt *hfp, const char *buf);
|
||||
|
@ -837,7 +846,7 @@ e_return:
|
|||
|
||||
*/
|
||||
|
||||
static struct ast_channel *mbl_new(int state, struct mbl_pvt *pvt, char *cid_num,
|
||||
static struct ast_channel *mbl_new(int state, struct mbl_pvt *pvt, struct cidinfo *cidinfo,
|
||||
const struct ast_assigned_ids *assignedids, const struct ast_channel *requestor)
|
||||
{
|
||||
struct ast_channel *chn;
|
||||
|
@ -850,12 +859,15 @@ static struct ast_channel *mbl_new(int state, struct mbl_pvt *pvt, char *cid_num
|
|||
else
|
||||
pvt->do_alignment_detection = 0;
|
||||
|
||||
ast_smoother_reset(pvt->smoother, DEVICE_FRAME_SIZE);
|
||||
ast_smoother_reset(pvt->bt_out_smoother, DEVICE_FRAME_SIZE);
|
||||
ast_smoother_reset(pvt->bt_in_smoother, CHANNEL_FRAME_SIZE);
|
||||
ast_dsp_digitreset(pvt->dsp);
|
||||
|
||||
chn = ast_channel_alloc(1, state, cid_num, pvt->id, 0, 0, pvt->context,
|
||||
assignedids, requestor, 0,
|
||||
"Mobile/%s-%04lx", pvt->id, ast_random() & 0xffff);
|
||||
chn = ast_channel_alloc(1, state,
|
||||
cidinfo ? cidinfo->cnum : NULL,
|
||||
cidinfo ? cidinfo->cnam : NULL,
|
||||
0, 0, pvt->context, assignedids, requestor, 0,
|
||||
"Mobile/%s-%04lx", pvt->id, ast_random() & 0xffff);
|
||||
if (!chn) {
|
||||
goto e_return;
|
||||
}
|
||||
|
@ -902,7 +914,7 @@ static struct ast_channel *mbl_request(const char *type, struct ast_format_cap *
|
|||
}
|
||||
|
||||
if (ast_format_cap_iscompatible_format(cap, DEVICE_FRAME_FORMAT) == AST_FORMAT_CMP_NOT_EQUAL) {
|
||||
struct ast_str *codec_buf = ast_str_alloca(64);
|
||||
struct ast_str *codec_buf = ast_str_alloca(AST_FORMAT_CAP_NAMES_LEN);
|
||||
ast_log(LOG_WARNING, "Asked to get a channel of unsupported format '%s'\n", ast_format_cap_get_names(cap, &codec_buf));
|
||||
*cause = AST_CAUSE_FACILITY_NOT_IMPLEMENTED;
|
||||
return NULL;
|
||||
|
@ -1123,23 +1135,27 @@ static struct ast_frame *mbl_read(struct ast_channel *ast)
|
|||
pvt->fr.delivery.tv_usec = 0;
|
||||
pvt->fr.data.ptr = pvt->io_buf + AST_FRIENDLY_OFFSET;
|
||||
|
||||
if ((r = read(pvt->sco_socket, pvt->fr.data.ptr, DEVICE_FRAME_SIZE)) == -1) {
|
||||
if (errno != EAGAIN && errno != EINTR) {
|
||||
ast_debug(1, "[%s] read error %d, going to wait for new connection\n", pvt->id, errno);
|
||||
close(pvt->sco_socket);
|
||||
pvt->sco_socket = -1;
|
||||
ast_channel_set_fd(ast, 0, -1);
|
||||
do {
|
||||
if ((r = read(pvt->sco_socket, pvt->fr.data.ptr, DEVICE_FRAME_SIZE)) == -1) {
|
||||
if (errno != EAGAIN && errno != EINTR) {
|
||||
ast_debug(1, "[%s] read error %d, going to wait for new connection\n", pvt->id, errno);
|
||||
close(pvt->sco_socket);
|
||||
pvt->sco_socket = -1;
|
||||
ast_channel_set_fd(ast, 0, -1);
|
||||
}
|
||||
goto e_return;
|
||||
}
|
||||
goto e_return;
|
||||
}
|
||||
|
||||
pvt->fr.datalen = r;
|
||||
pvt->fr.samples = r / 2;
|
||||
pvt->fr.datalen = r;
|
||||
pvt->fr.samples = r / 2;
|
||||
|
||||
if (pvt->do_alignment_detection)
|
||||
do_alignment_detection(pvt, pvt->fr.data.ptr, r);
|
||||
if (pvt->do_alignment_detection)
|
||||
do_alignment_detection(pvt, pvt->fr.data.ptr, r);
|
||||
|
||||
fr = ast_dsp_process(ast, pvt->dsp, &pvt->fr);
|
||||
ast_smoother_feed(pvt->bt_in_smoother, &pvt->fr);
|
||||
fr = ast_smoother_read(pvt->bt_in_smoother);
|
||||
} while (fr == NULL);
|
||||
fr = ast_dsp_process(ast, pvt->dsp, fr);
|
||||
|
||||
ast_mutex_unlock(&pvt->lock);
|
||||
|
||||
|
@ -1166,9 +1182,9 @@ static int mbl_write(struct ast_channel *ast, struct ast_frame *frame)
|
|||
CHANNEL_DEADLOCK_AVOIDANCE(ast);
|
||||
}
|
||||
|
||||
ast_smoother_feed(pvt->smoother, frame);
|
||||
ast_smoother_feed(pvt->bt_out_smoother, frame);
|
||||
|
||||
while ((f = ast_smoother_read(pvt->smoother))) {
|
||||
while ((f = ast_smoother_read(pvt->bt_out_smoother))) {
|
||||
sco_write(pvt->sco_socket, f->data.ptr, f->datalen);
|
||||
}
|
||||
|
||||
|
@ -1774,7 +1790,7 @@ static int rfcomm_read_command(int rsock, char **buf, size_t count, size_t *in_c
|
|||
* \verbatim
|
||||
* \r\n<result code>\r\n
|
||||
* <at command>\r
|
||||
* \r\n>
|
||||
* \r\n>
|
||||
* \endverbatim
|
||||
*
|
||||
* These formats correspond to AT result codes, AT commands, and the AT SMS
|
||||
|
@ -2203,45 +2219,103 @@ static int hfp_parse_ciev(struct hfp_pvt *hfp, char *buf, int *value)
|
|||
* \param hfp an hfp_pvt struct
|
||||
* \param buf the buffer to parse (null terminated)
|
||||
* \note buf will be modified when the CID string is parsed
|
||||
* \return NULL on error (parse error) or a pointer to the caller id
|
||||
* information in buf
|
||||
* \return a cidinfo structure pointing to the cnam and cnum
|
||||
* data in buf. On parse errors, either or both pointers
|
||||
* will point to null strings
|
||||
*/
|
||||
static char *hfp_parse_clip(struct hfp_pvt *hfp, char *buf)
|
||||
static struct cidinfo hfp_parse_clip(struct hfp_pvt *hfp, char *buf)
|
||||
{
|
||||
int i, state;
|
||||
char *clip = NULL;
|
||||
size_t s;
|
||||
int i;
|
||||
int tokens[6];
|
||||
char *cnamtmp;
|
||||
char delim = ' '; /* First token terminates with space */
|
||||
int invalid = 0; /* Number of invalid chars in cnam */
|
||||
struct cidinfo cidinfo = { NULL, NULL };
|
||||
|
||||
/* parse clip info in the following format:
|
||||
* +CLIP: "123456789",128,...
|
||||
*/
|
||||
state = 0;
|
||||
s = strlen(buf);
|
||||
for (i = 0; i < s && state != 3; i++) {
|
||||
switch (state) {
|
||||
case 0: /* search for start of the number (") */
|
||||
if (buf[i] == '"') {
|
||||
state++;
|
||||
}
|
||||
break;
|
||||
case 1: /* mark the number */
|
||||
clip = &buf[i];
|
||||
state++;
|
||||
/* fall through */
|
||||
case 2: /* search for the end of the number (") */
|
||||
if (buf[i] == '"') {
|
||||
buf[i] = '\0';
|
||||
state++;
|
||||
}
|
||||
break;
|
||||
ast_debug(3, "[%s] hfp_parse_clip is processing \"%s\"\n", hfp->owner->id, buf);
|
||||
tokens[0] = 0; /* First token starts in position 0 */
|
||||
for (i = 1; i < ARRAY_LEN(tokens); i++) {
|
||||
tokens[i] = parse_next_token(buf, tokens[i - 1], delim);
|
||||
delim = ','; /* Subsequent tokens terminate with comma */
|
||||
}
|
||||
ast_debug(3, "[%s] hfp_parse_clip found tokens: 0=%s, 1=%s, 2=%s, 3=%s, 4=%s, 5=%s\n",
|
||||
hfp->owner->id, &buf[tokens[0]], &buf[tokens[1]], &buf[tokens[2]],
|
||||
&buf[tokens[3]], &buf[tokens[4]], &buf[tokens[5]]);
|
||||
|
||||
/* Clean up cnum, and make sure it is legitimate since it is untrusted. */
|
||||
cidinfo.cnum = ast_strip_quoted(&buf[tokens[1]], "\"", "\"");
|
||||
if (!ast_isphonenumber(cidinfo.cnum)) {
|
||||
ast_debug(1, "[%s] hfp_parse_clip invalid cidinfo.cnum data \"%s\" - deleting\n",
|
||||
hfp->owner->id, cidinfo.cnum);
|
||||
cidinfo.cnum = "";
|
||||
}
|
||||
|
||||
/*
|
||||
* Some docs say tokens 2 and 3 including the commas are optional.
|
||||
* If absent, that would move CNAM back to token 3.
|
||||
*/
|
||||
cidinfo.cnam = &buf[tokens[5]]; /* Assume it's in token 5 */
|
||||
if (buf[tokens[5]] == '\0' && buf[tokens[4]] == '\0') {
|
||||
/* Tokens 4 and 5 are empty. See if token 3 looks like CNAM (starts with ") */
|
||||
i = tokens[3];
|
||||
while (buf[i] == ' ') { /* Find the first non-blank */
|
||||
i++;
|
||||
}
|
||||
if (buf[i] == '"') {
|
||||
/* Starts with quote. Use this for CNAM. */
|
||||
cidinfo.cnam = &buf[i];
|
||||
}
|
||||
}
|
||||
|
||||
if (state != 3) {
|
||||
return NULL;
|
||||
/* Clean up CNAM. */
|
||||
cidinfo.cnam = ast_strip_quoted(cidinfo.cnam, "\"", "\"");
|
||||
for (cnamtmp = cidinfo.cnam; *cnamtmp != '\0'; cnamtmp++) {
|
||||
if (!strchr("ABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789-,abcdefghijklmnopqrstuvwxyz_", *cnamtmp)) {
|
||||
*cnamtmp = '_'; /* Invalid. Replace with underscore. */
|
||||
invalid++;
|
||||
}
|
||||
}
|
||||
if (invalid) {
|
||||
ast_debug(2, "[%s] hfp_parse_clip replaced %d invalid byte(s) in cnam data\n",
|
||||
hfp->owner->id, invalid);
|
||||
}
|
||||
ast_debug(2, "[%s] hfp_parse_clip returns cnum=%s and cnam=%s\n",
|
||||
hfp->owner->id, cidinfo.cnum, cidinfo.cnam);
|
||||
|
||||
return clip;
|
||||
return cidinfo;
|
||||
}
|
||||
|
||||
/*!
|
||||
* \brief Terminate current token and return an index to start of the next token.
|
||||
* \param string the null-terminated string being parsed (will be altered!)
|
||||
* \param start where the current token starts
|
||||
* \param delim the token termination delimiter. \0 is also considered a terminator.
|
||||
* \return index of the next token. May be the same as this token if the string is
|
||||
* exhausted.
|
||||
*/
|
||||
static int parse_next_token(char string[], const int start, const char delim)
|
||||
{
|
||||
int index;
|
||||
int quoting = 0;
|
||||
|
||||
for (index = start; string[index] != 0; index++) {
|
||||
if ((string[index] == delim) && !quoting ) {
|
||||
/* Found the delimiter, outside of quotes. This is the end of the token. */
|
||||
string[index] = '\0'; /* Terminate this token. */
|
||||
index++; /* Point the index to the start of the next token. */
|
||||
break; /* We're done. */
|
||||
} else if (string[index] == '"' && !quoting) {
|
||||
/* Found a beginning quote mark. Remember it. */
|
||||
quoting = 1;
|
||||
} else if (string[index] == '"' ) {
|
||||
/* Found the end quote mark. */
|
||||
quoting = 0;
|
||||
}
|
||||
}
|
||||
return index;
|
||||
}
|
||||
|
||||
/*!
|
||||
|
@ -2256,7 +2330,7 @@ static int hfp_parse_cmti(struct hfp_pvt *hfp, char *buf)
|
|||
int index = -1;
|
||||
|
||||
/* parse cmti info in the following format:
|
||||
* +CMTI: <mem>,<index>
|
||||
* +CMTI: <mem>,<index>
|
||||
*/
|
||||
if (!sscanf(buf, "+CMTI: %*[^,],%d", &index)) {
|
||||
ast_debug(2, "[%s] error parsing CMTI event '%s'\n", hfp->owner->id, buf);
|
||||
|
@ -3578,19 +3652,17 @@ static int handle_response_ciev(struct mbl_pvt *pvt, char *buf)
|
|||
*/
|
||||
static int handle_response_clip(struct mbl_pvt *pvt, char *buf)
|
||||
{
|
||||
char *clip;
|
||||
struct msg_queue_entry *msg;
|
||||
struct ast_channel *chan;
|
||||
struct cidinfo cidinfo;
|
||||
|
||||
if ((msg = msg_queue_head(pvt)) && msg->expected == AT_CLIP) {
|
||||
msg_queue_free_and_pop(pvt);
|
||||
|
||||
pvt->needcallerid = 0;
|
||||
if (!(clip = hfp_parse_clip(pvt->hfp, buf))) {
|
||||
ast_debug(1, "[%s] error parsing CLIP: %s\n", pvt->id, buf);
|
||||
}
|
||||
cidinfo = hfp_parse_clip(pvt->hfp, buf);
|
||||
|
||||
if (!(chan = mbl_new(AST_STATE_RING, pvt, clip, NULL, NULL))) {
|
||||
if (!(chan = mbl_new(AST_STATE_RING, pvt, &cidinfo, NULL, NULL))) {
|
||||
ast_log(LOG_ERROR, "[%s] unable to allocate channel for incoming call\n", pvt->id);
|
||||
hfp_send_chup(pvt->hfp);
|
||||
msg_queue_push(pvt, AT_OK, AT_CHUP);
|
||||
|
@ -3801,7 +3873,7 @@ static void *do_monitor_phone(void *data)
|
|||
{
|
||||
struct mbl_pvt *pvt = (struct mbl_pvt *)data;
|
||||
struct hfp_pvt *hfp = pvt->hfp;
|
||||
char buf[256];
|
||||
char buf[350];
|
||||
int t;
|
||||
at_message_t at_msg;
|
||||
struct msg_queue_entry *entry;
|
||||
|
@ -3855,14 +3927,11 @@ static void *do_monitor_phone(void *data)
|
|||
}
|
||||
|
||||
if ((at_msg = at_read_full(hfp->rsock, buf, sizeof(buf))) < 0) {
|
||||
/* XXX gnu specific strerror_r is assummed here, this
|
||||
* is not really safe. See the strerror(3) man page
|
||||
* for more info. */
|
||||
ast_debug(1, "[%s] error reading from device: %s (%d)\n", pvt->id, strerror_r(errno, buf, sizeof(buf)), errno);
|
||||
ast_debug(1, "[%s] error reading from device: %s (%d)\n", pvt->id, strerror(errno), errno);
|
||||
break;
|
||||
}
|
||||
|
||||
ast_debug(1, "[%s] %s\n", pvt->id, buf);
|
||||
ast_debug(1, "[%s] read %s\n", pvt->id, buf);
|
||||
|
||||
switch (at_msg) {
|
||||
case AT_BRSF:
|
||||
|
@ -3995,7 +4064,7 @@ static void *do_monitor_phone(void *data)
|
|||
ast_debug(1, "[%s] error parsing message\n", pvt->id);
|
||||
goto e_cleanup;
|
||||
case AT_READ_ERROR:
|
||||
ast_debug(1, "[%s] error reading from device: %s (%d)\n", pvt->id, strerror_r(errno, buf, sizeof(buf)), errno);
|
||||
ast_debug(1, "[%s] error reading from device: %s (%d)\n", pvt->id, strerror(errno), errno);
|
||||
goto e_cleanup;
|
||||
default:
|
||||
break;
|
||||
|
@ -4073,11 +4142,7 @@ static void *do_monitor_headset(void *data)
|
|||
continue;
|
||||
|
||||
if ((at_msg = at_read_full(pvt->rfcomm_socket, buf, sizeof(buf))) < 0) {
|
||||
if (strerror_r(errno, buf, sizeof(buf)))
|
||||
ast_debug(1, "[%s] error reading from device\n", pvt->id);
|
||||
else
|
||||
ast_debug(1, "[%s] error reading from device: %s (%d)\n", pvt->id, buf, errno);
|
||||
|
||||
ast_debug(1, "[%s] error reading from device: %s (%d)\n", pvt->id, strerror(errno), errno);
|
||||
goto e_cleanup;
|
||||
}
|
||||
ast_debug(1, "[%s] %s\n", pvt->id, buf);
|
||||
|
@ -4473,16 +4538,22 @@ static struct mbl_pvt *mbl_load_device(struct ast_config *cfg, const char *cat)
|
|||
pvt->ring_sched_id = -1;
|
||||
pvt->has_sms = 1;
|
||||
|
||||
/* setup the smoother */
|
||||
if (!(pvt->smoother = ast_smoother_new(DEVICE_FRAME_SIZE))) {
|
||||
ast_log(LOG_ERROR, "Skipping device %s. Error setting up frame smoother.\n", cat);
|
||||
/* setup the bt_out_smoother */
|
||||
if (!(pvt->bt_out_smoother = ast_smoother_new(DEVICE_FRAME_SIZE))) {
|
||||
ast_log(LOG_ERROR, "Skipping device %s. Error setting up frame bt_out_smoother.\n", cat);
|
||||
goto e_free_pvt;
|
||||
}
|
||||
|
||||
/* setup the bt_in_smoother */
|
||||
if (!(pvt->bt_in_smoother = ast_smoother_new(CHANNEL_FRAME_SIZE))) {
|
||||
ast_log(LOG_ERROR, "Skipping device %s. Error setting up frame bt_in_smoother.\n", cat);
|
||||
goto e_free_bt_out_smoother;
|
||||
}
|
||||
|
||||
/* setup the dsp */
|
||||
if (!(pvt->dsp = ast_dsp_new())) {
|
||||
ast_log(LOG_ERROR, "Skipping device %s. Error setting up dsp for dtmf detection.\n", cat);
|
||||
goto e_free_smoother;
|
||||
goto e_free_bt_in_smoother;
|
||||
}
|
||||
|
||||
/* setup the scheduler */
|
||||
|
@ -4542,8 +4613,10 @@ e_free_sched:
|
|||
ast_sched_context_destroy(pvt->sched);
|
||||
e_free_dsp:
|
||||
ast_dsp_free(pvt->dsp);
|
||||
e_free_smoother:
|
||||
ast_smoother_free(pvt->smoother);
|
||||
e_free_bt_in_smoother:
|
||||
ast_smoother_free(pvt->bt_in_smoother);
|
||||
e_free_bt_out_smoother:
|
||||
ast_smoother_free(pvt->bt_out_smoother);
|
||||
e_free_pvt:
|
||||
ast_free(pvt);
|
||||
e_return:
|
||||
|
@ -4675,7 +4748,8 @@ static int unload_module(void)
|
|||
ast_free(pvt->hfp);
|
||||
}
|
||||
|
||||
ast_smoother_free(pvt->smoother);
|
||||
ast_smoother_free(pvt->bt_out_smoother);
|
||||
ast_smoother_free(pvt->bt_in_smoother);
|
||||
ast_dsp_free(pvt->dsp);
|
||||
ast_sched_context_destroy(pvt->sched);
|
||||
ast_free(pvt);
|
||||
|
@ -4713,9 +4787,13 @@ static int load_module(void)
|
|||
ast_format_cap_append(mbl_tech.capabilities, DEVICE_FRAME_FORMAT, 0);
|
||||
/* Check if we have Bluetooth, no point loading otherwise... */
|
||||
dev_id = hci_get_route(NULL);
|
||||
|
||||
s = hci_open_dev(dev_id);
|
||||
if (dev_id < 0 || s < 0) {
|
||||
ast_log(LOG_ERROR, "No Bluetooth devices found. Not loading module.\n");
|
||||
ao2_ref(mbl_tech.capabilities, -1);
|
||||
mbl_tech.capabilities = NULL;
|
||||
hci_close_dev(s);
|
||||
return AST_MODULE_LOAD_DECLINE;
|
||||
}
|
||||
|
||||
|
@ -4723,6 +4801,8 @@ static int load_module(void)
|
|||
|
||||
if (mbl_load_config()) {
|
||||
ast_log(LOG_ERROR, "Errors reading config file %s. Not loading module.\n", MBL_CONFIG);
|
||||
ao2_ref(mbl_tech.capabilities, -1);
|
||||
mbl_tech.capabilities = NULL;
|
||||
return AST_MODULE_LOAD_DECLINE;
|
||||
}
|
||||
|
||||
|
@ -4747,10 +4827,9 @@ static int load_module(void)
|
|||
return AST_MODULE_LOAD_SUCCESS;
|
||||
|
||||
e_cleanup:
|
||||
if (sdp_session)
|
||||
sdp_close(sdp_session);
|
||||
unload_module();
|
||||
|
||||
return AST_MODULE_LOAD_FAILURE;
|
||||
return AST_MODULE_LOAD_DECLINE;
|
||||
}
|
||||
|
||||
AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Bluetooth Mobile Device Channel Driver",
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,15 +1,15 @@
|
|||
/*
|
||||
* Copyright (C) 2004-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
@ -66,6 +66,7 @@
|
|||
#include "asterisk/udptl.h"
|
||||
#include "asterisk/stasis_channels.h"
|
||||
#include "asterisk/format_cache.h"
|
||||
#include "asterisk/paths.h"
|
||||
|
||||
#include "ootypes.h"
|
||||
#include "ooUtils.h"
|
||||
|
@ -86,7 +87,7 @@ struct ooh323_peer;
|
|||
/* Helper functions */
|
||||
struct ooh323_user *find_user(const char * name, const char *ip);
|
||||
struct ooh323_peer *find_peer(const char * name, int port);
|
||||
void ooh323_delete_peer(struct ooh323_peer *peer);
|
||||
void ooh323_delete_peer(struct ooh323_peer *peer);
|
||||
|
||||
int delete_users(void);
|
||||
int delete_peers(void);
|
||||
|
@ -96,7 +97,7 @@ int reload_config(int reload);
|
|||
int restart_monitor(void);
|
||||
|
||||
int configure_local_rtp(struct ooh323_pvt *p, ooCallData* call);
|
||||
void setup_rtp_connection(ooCallData *call, const char *remoteIp,
|
||||
void setup_rtp_connection(ooCallData *call, const char *remoteIp,
|
||||
int remotePort);
|
||||
void close_rtp_connection(ooCallData *call);
|
||||
struct ast_frame *ooh323_rtp_read
|
||||
|
|
|
@ -120,9 +120,11 @@ static int mp3_squeue(struct ast_filestream *s)
|
|||
|
||||
res = ftell(s->f);
|
||||
p->sbuflen = fread(p->sbuf, 1, MP3_SCACHE, s->f);
|
||||
if(p->sbuflen < 0) {
|
||||
ast_log(LOG_WARNING, "Short read (%d) (%s)!\n", p->sbuflen, strerror(errno));
|
||||
return -1;
|
||||
if (p->sbuflen < MP3_SCACHE) {
|
||||
if (ferror(s->f)) {
|
||||
ast_log(LOG_WARNING, "Error while reading MP3 file: %s\n", strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
res = decodeMP3(&p->mp,p->sbuf,p->sbuflen,p->dbuf,MP3_DCACHE,&p->dbuflen);
|
||||
if(res != MP3_OK)
|
||||
|
@ -327,4 +329,3 @@ static int unload_module(void)
|
|||
}
|
||||
|
||||
AST_MODULE_INFO_STANDARD_EXTENDED(ASTERISK_GPL_KEY, "MP3 format [Any rate but 8000hz mono is optimal]");
|
||||
|
||||
|
|
|
@ -6,22 +6,22 @@ Introduction
|
|||
Objective Open H.323 stack is a simple H.323 implementation in C. This
|
||||
package contains the core stack code. For complete H.323 stack package with
|
||||
examples or for more information visit www.obj-sys.com/open
|
||||
The ASN.1 messaging code was developed using the Objective Systems ASN1C
|
||||
compiler to implement the core H.323 specifications (H.225, H.235,
|
||||
and H.245). Additional code was then developed which makes use of
|
||||
the compiler generated code for presenting a comparatively high level
|
||||
The ASN.1 messaging code was developed using the Objective Systems ASN1C
|
||||
compiler to implement the core H.323 specifications (H.225, H.235,
|
||||
and H.245). Additional code was then developed which makes use of
|
||||
the compiler generated code for presenting a comparatively high level
|
||||
stack API.
|
||||
|
||||
Features
|
||||
|
||||
Features supported in this package include the following:
|
||||
|
||||
* H.225/Q.931 - the following message types are supported (including
|
||||
support for FastStart and H.245 tunneling):
|
||||
- Setup
|
||||
* H.225/Q.931 - the following message types are supported (including
|
||||
support for FastStart and H.245 tunneling):
|
||||
- Setup
|
||||
- Connect
|
||||
- Call Proceeding
|
||||
- Alerting
|
||||
- Alerting
|
||||
- Facility
|
||||
- ReleaseComplete
|
||||
|
||||
|
@ -54,8 +54,8 @@ Features supported in this package include the following:
|
|||
To run the stack test application chansetup
|
||||
chansetup - This is a sample program developed for testing multiple calls.
|
||||
This program allows stack testing by placing multiple calls. The number of
|
||||
calls, duration of each call and interval between successive calls are
|
||||
configurable.
|
||||
calls, duration of each call and interval between successive calls are
|
||||
configurable.
|
||||
|
||||
1. Two instances of this program have to be run. Can be run on same machine or
|
||||
different machines.
|
||||
|
@ -64,19 +64,19 @@ To run the stack test application chansetup
|
|||
|
||||
cd tests/chansetup
|
||||
|
||||
2. For running listener instance,
|
||||
2. For running listener instance,
|
||||
|
||||
./h323peer [--use-ip ip] [--use-port port]
|
||||
|
||||
where local ip address and port can be specified for listening to incoming
|
||||
where local ip address and port can be specified for listening to incoming
|
||||
calls. By default, application determines ip address and uses default H323
|
||||
port number 1720.
|
||||
|
||||
3. For running calling instance
|
||||
|
||||
|
||||
./h323peer [--use-ip ip] -n <number of calls> -duration <call duration>
|
||||
-interval <inetrval between successive calls> destination
|
||||
|
||||
|
||||
where all times are in seconds. Interval of 0 means next call will be placed
|
||||
after current call finishes. "destination" is the dotted ip address of the
|
||||
endpoint running listener instance.
|
||||
|
@ -86,10 +86,9 @@ To run the stack test application chansetup
|
|||
|
||||
Reporting Problems:
|
||||
|
||||
Report problems you encounter by sending E-mail to support@obj-sys.com.
|
||||
Report problems you encounter by sending E-mail to support@obj-sys.com.
|
||||
|
||||
If you have any further questions or comments on what you would like to
|
||||
see in the product or what is difficult to use or understand, please
|
||||
see in the product or what is difficult to use or understand, please
|
||||
communicate them to us. Your feedback is important to us. Please let us
|
||||
know how it works out for you - either good or bad.
|
||||
|
||||
know how it works out for you - either good or bad.
|
||||
|
|
|
@ -96,7 +96,7 @@ libooh323c_a_SOURCES = ooLogChan.h ooLogChan.c ooUtils.c ooUtils.h ooGkClient.h
|
|||
INCLUDES = -Ih323
|
||||
|
||||
|
||||
#include_HEADERS = ooUtils.h memheap.h ooCommon.h ooDateTime.h ooGkClient.h ooasn1.h oochannels.h ootrace.h ooh245.h ooports.h ooq931.h oohdr.h ooper.h ooSocket.h ooTimer.h ootypes.h eventHandler.h ooCapability.h ooCalls.h ooStackCmds.h ooh323.h ooh323ep.h printHandler.h rtctype.h h323/H235-SECURITY-MESSAGES.h h323/H323-MESSAGES.h h323/MULTIMEDIA-SYSTEM-CONTROL.h
|
||||
#include_HEADERS = ooUtils.h memheap.h ooCommon.h ooDateTime.h ooGkClient.h ooasn1.h oochannels.h ootrace.h ooh245.h ooports.h ooq931.h oohdr.h ooper.h ooSocket.h ooTimer.h ootypes.h eventHandler.h ooCapability.h ooCalls.h ooStackCmds.h ooh323.h ooh323ep.h printHandler.h rtctype.h h323/H235-SECURITY-MESSAGES.h h323/H323-MESSAGES.h h323/MULTIMEDIA-SYSTEM-CONTROL.h
|
||||
EXTRA_DIST = oostk.dsp
|
||||
subdir = ooh323c/src
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
|
||||
|
@ -104,7 +104,7 @@ CONFIG_HEADER = $(top_builddir)/config.h
|
|||
CONFIG_CLEAN_FILES =
|
||||
LIBRARIES = $(noinst_LIBRARIES)
|
||||
|
||||
libooh323c_a_AR = $(AR) cru
|
||||
libooh323c_a_AR = $(AR) cr
|
||||
libooh323c_a_LIBADD =
|
||||
am_libooh323c_a_OBJECTS = ooLogChan.$(OBJEXT) ooUtils.$(OBJEXT) \
|
||||
ooGkClient.$(OBJEXT) context.$(OBJEXT) ooDateTime.$(OBJEXT) \
|
||||
|
@ -187,7 +187,7 @@ MULTIMEDIA-SYSTEM-CONTROLDec.$(OBJEXT): \
|
|||
h323/MULTIMEDIA-SYSTEM-CONTROLDec.c
|
||||
MULTIMEDIA-SYSTEM-CONTROLEnc.$(OBJEXT): \
|
||||
h323/MULTIMEDIA-SYSTEM-CONTROLEnc.c
|
||||
libooh323c.a: $(libooh323c_a_OBJECTS) $(libooh323c_a_DEPENDENCIES)
|
||||
libooh323c.a: $(libooh323c_a_OBJECTS) $(libooh323c_a_DEPENDENCIES)
|
||||
-rm -f libooh323c.a
|
||||
$(libooh323c_a_AR) libooh323c.a $(libooh323c_a_OBJECTS) $(libooh323c_a_LIBADD)
|
||||
$(RANLIB) libooh323c.a
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
/*
|
||||
* Copyright (C) 1997-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
@ -34,13 +34,13 @@ int initContext (OOCTXT* pctxt)
|
|||
return ASN_OK;
|
||||
}
|
||||
|
||||
int initContextBuffer
|
||||
int initContextBuffer
|
||||
(OOCTXT* pctxt, const ASN1OCTET* bufaddr, ASN1UINT bufsiz)
|
||||
{
|
||||
if (bufaddr == 0) {
|
||||
/* dynamic buffer */
|
||||
if (bufsiz == 0) bufsiz = ASN_K_ENCBUFSIZ;
|
||||
pctxt->buffer.data = (ASN1OCTET*)
|
||||
pctxt->buffer.data = (ASN1OCTET*)
|
||||
memHeapAlloc (&pctxt->pMsgMemHeap, bufsiz);
|
||||
if (!pctxt->buffer.data) return ASN_E_NOMEM;
|
||||
pctxt->buffer.size = bufsiz;
|
||||
|
@ -59,7 +59,7 @@ int initContextBuffer
|
|||
return ASN_OK;
|
||||
}
|
||||
|
||||
int initSubContext (OOCTXT* pctxt, OOCTXT* psrc)
|
||||
int initSubContext (OOCTXT* pctxt, OOCTXT* psrc)
|
||||
{
|
||||
/* ast_mutex_lock(&pctxt->pLock); */
|
||||
int stat = ASN_OK;
|
||||
|
@ -84,7 +84,7 @@ void freeContext (OOCTXT* pctxt)
|
|||
ASN1BOOL saveBuf;
|
||||
ast_mutex_lock(&pctxt->pLock);
|
||||
saveBuf = (pctxt->flags & ASN1SAVEBUF) != 0;
|
||||
|
||||
|
||||
if (pctxt->buffer.dynamic && pctxt->buffer.data) {
|
||||
if (saveBuf) {
|
||||
memHeapMarkSaved (&pctxt->pMsgMemHeap, pctxt->buffer.data, TRUE);
|
||||
|
@ -129,7 +129,7 @@ int setPERBufferUsingCtxt (OOCTXT* pTarget, OOCTXT* pSource)
|
|||
{
|
||||
int stat;
|
||||
ast_mutex_lock(&pTarget->pLock); ast_mutex_lock(&pSource->pLock);
|
||||
stat = initContextBuffer
|
||||
stat = initContextBuffer
|
||||
(pTarget, pSource->buffer.data, pSource->buffer.size);
|
||||
|
||||
if (ASN_OK == stat) {
|
||||
|
@ -150,11 +150,11 @@ int setPERBuffer (OOCTXT* pctxt,
|
|||
ast_mutex_unlock(&pctxt->pLock);
|
||||
if(stat != ASN_OK) return stat;
|
||||
|
||||
|
||||
|
||||
return ASN_OK;
|
||||
}
|
||||
|
||||
OOCTXT* newContext ()
|
||||
OOCTXT* newContext ()
|
||||
{
|
||||
/* OOCTXT* pctxt = (OOCTXT*) ASN1CRTMALLOC0 (sizeof(OOCTXT)); */
|
||||
OOCTXT* pctxt = (OOCTXT*) malloc (sizeof(OOCTXT));
|
||||
|
@ -163,6 +163,7 @@ OOCTXT* newContext ()
|
|||
/* ASN1CRTFREE0 (pctxt); */
|
||||
free(pctxt);
|
||||
pctxt = 0;
|
||||
return (pctxt);
|
||||
}
|
||||
pctxt->flags |= ASN1DYNCTXT;
|
||||
}
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
/*
|
||||
* Copyright (C) 1997-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
@ -19,16 +19,16 @@
|
|||
|
||||
#include "ooasn1.h"
|
||||
|
||||
static int decode16BitConstrainedString
|
||||
static int decode16BitConstrainedString
|
||||
(OOCTXT* pctxt, Asn116BitCharString* pString, Asn116BitCharSet* pCharSet);
|
||||
|
||||
static int decodeOctets
|
||||
static int decodeOctets
|
||||
(OOCTXT* pctxt, ASN1OCTET* pbuffer, ASN1UINT bufsiz, ASN1UINT nbits);
|
||||
|
||||
static int getComponentLength (OOCTXT* pctxt, ASN1UINT itemBits);
|
||||
|
||||
int decodeBits (OOCTXT* pctxt, ASN1UINT* pvalue, ASN1UINT nbits)
|
||||
{
|
||||
{
|
||||
unsigned char mask;
|
||||
|
||||
if (nbits == 0) {
|
||||
|
@ -47,7 +47,7 @@ int decodeBits (OOCTXT* pctxt, ASN1UINT* pvalue, ASN1UINT nbits)
|
|||
|
||||
pctxt->buffer.bitOffset -= nbits;
|
||||
|
||||
*pvalue = ((pctxt->buffer.data[pctxt->buffer.byteIndex]) >>
|
||||
*pvalue = ((pctxt->buffer.data[pctxt->buffer.byteIndex]) >>
|
||||
pctxt->buffer.bitOffset) & ((1 << nbits) - 1);
|
||||
|
||||
return ASN_OK;
|
||||
|
@ -62,7 +62,7 @@ int decodeBits (OOCTXT* pctxt, ASN1UINT* pvalue, ASN1UINT nbits)
|
|||
/* Check if buffer contains number of bits requested */
|
||||
|
||||
int nbytes = (((nbits - pctxt->buffer.bitOffset) + 7) / 8);
|
||||
|
||||
|
||||
if ((pctxt->buffer.byteIndex + nbytes) >= pctxt->buffer.size) {
|
||||
return LOG_ASN1ERR (pctxt, ASN_E_ENDOFBUF);
|
||||
}
|
||||
|
@ -78,7 +78,7 @@ int decodeBits (OOCTXT* pctxt, ASN1UINT* pvalue, ASN1UINT nbits)
|
|||
|
||||
/* second read bytes from next byteIndex */
|
||||
while (nbits >= 8) {
|
||||
*pvalue = (*pvalue << 8) |
|
||||
*pvalue = (*pvalue << 8) |
|
||||
(pctxt->buffer.data[pctxt->buffer.byteIndex]);
|
||||
pctxt->buffer.byteIndex++;
|
||||
nbits -= 8;
|
||||
|
@ -87,8 +87,8 @@ int decodeBits (OOCTXT* pctxt, ASN1UINT* pvalue, ASN1UINT nbits)
|
|||
/* third read bits & set bitoffset of the byteIndex */
|
||||
if (nbits > 0) {
|
||||
pctxt->buffer.bitOffset = 8 - nbits;
|
||||
*pvalue = (*pvalue << nbits) |
|
||||
((pctxt->buffer.data[pctxt->buffer.byteIndex]) >>
|
||||
*pvalue = (*pvalue << nbits) |
|
||||
((pctxt->buffer.data[pctxt->buffer.byteIndex]) >>
|
||||
pctxt->buffer.bitOffset);
|
||||
}
|
||||
|
||||
|
@ -96,7 +96,7 @@ int decodeBits (OOCTXT* pctxt, ASN1UINT* pvalue, ASN1UINT nbits)
|
|||
}
|
||||
}
|
||||
|
||||
int decodeBitString
|
||||
int decodeBitString
|
||||
(OOCTXT* pctxt, ASN1UINT* numbits_p, ASN1OCTET* buffer, ASN1UINT bufsiz)
|
||||
{
|
||||
ASN1UINT bitcnt;
|
||||
|
@ -111,7 +111,7 @@ int decodeBitString
|
|||
if (bitcnt > 0) {
|
||||
*numbits_p += bitcnt;
|
||||
|
||||
stat = bitAndOctetStringAlignmentTest
|
||||
stat = bitAndOctetStringAlignmentTest
|
||||
(pSizeList, bitcnt, TRUE, &doAlign);
|
||||
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
|
||||
|
||||
|
@ -133,7 +133,7 @@ int decodeBitString
|
|||
return ASN_OK;
|
||||
}
|
||||
|
||||
int decodeBMPString
|
||||
int decodeBMPString
|
||||
(OOCTXT* pctxt, ASN1BMPString* pvalue, Asn116BitCharSet* permCharSet)
|
||||
{
|
||||
Asn116BitCharSet charSet;
|
||||
|
@ -164,7 +164,7 @@ int decodeByteAlign (OOCTXT* pctxt)
|
|||
return ASN_OK;
|
||||
}
|
||||
|
||||
int decodeConstrainedStringEx
|
||||
int decodeConstrainedStringEx
|
||||
(OOCTXT* pctxt, const char** string, const char* charSet,
|
||||
ASN1UINT abits, ASN1UINT ubits, ASN1UINT canSetBits)
|
||||
{
|
||||
|
@ -227,9 +227,9 @@ int decodeConstrainedStringEx
|
|||
return ASN_OK;
|
||||
}
|
||||
|
||||
int decodeConsInteger
|
||||
int decodeConsInteger
|
||||
(OOCTXT* pctxt, ASN1INT* pvalue, ASN1INT lower, ASN1INT upper)
|
||||
{
|
||||
{
|
||||
ASN1UINT range_value = upper - lower;
|
||||
ASN1UINT adjusted_value;
|
||||
int stat = ASN_OK;
|
||||
|
@ -254,9 +254,9 @@ int decodeConsInteger
|
|||
return stat;
|
||||
}
|
||||
|
||||
int decodeConsUInt8
|
||||
int decodeConsUInt8
|
||||
(OOCTXT* pctxt, ASN1UINT8* pvalue, ASN1UINT lower, ASN1UINT upper)
|
||||
{
|
||||
{
|
||||
ASN1UINT range_value, value;
|
||||
ASN1UINT adjusted_value;
|
||||
int stat = ASN_OK;
|
||||
|
@ -299,9 +299,9 @@ int decodeConsUInt8
|
|||
return stat;
|
||||
}
|
||||
|
||||
int decodeConsUInt16
|
||||
int decodeConsUInt16
|
||||
(OOCTXT* pctxt, ASN1USINT* pvalue, ASN1UINT lower, ASN1UINT upper)
|
||||
{
|
||||
{
|
||||
ASN1UINT range_value, value;
|
||||
ASN1UINT adjusted_value;
|
||||
int stat = ASN_OK;
|
||||
|
@ -328,9 +328,9 @@ int decodeConsUInt16
|
|||
return stat;
|
||||
}
|
||||
|
||||
int decodeConsUnsigned
|
||||
int decodeConsUnsigned
|
||||
(OOCTXT* pctxt, ASN1UINT* pvalue, ASN1UINT lower, ASN1UINT upper)
|
||||
{
|
||||
{
|
||||
ASN1UINT range_value;
|
||||
ASN1UINT adjusted_value;
|
||||
int stat = ASN_OK;
|
||||
|
@ -354,9 +354,9 @@ int decodeConsUnsigned
|
|||
return stat;
|
||||
}
|
||||
|
||||
int decodeConsWholeNumber
|
||||
int decodeConsWholeNumber
|
||||
(OOCTXT* pctxt, ASN1UINT* padjusted_value, ASN1UINT range_value)
|
||||
{
|
||||
{
|
||||
ASN1UINT nocts, range_bitcnt;
|
||||
int stat;
|
||||
|
||||
|
@ -419,9 +419,9 @@ int decodeDynBitString (OOCTXT* pctxt, ASN1DynBitStr* pBitStr)
|
|||
|
||||
/* If "fast copy" option is not set (ASN1FATSCOPY) or if constructed,
|
||||
* copy the bit string value into a dynamic memory buffer;
|
||||
* otherwise, store the pointer to the value in the decode
|
||||
* otherwise, store the pointer to the value in the decode
|
||||
* buffer in the data pointer argument. */
|
||||
|
||||
|
||||
if (pctxt->flags & ASN1FASTCOPY) {
|
||||
/* check is it possible to do optimized decoding */
|
||||
|
||||
|
@ -433,7 +433,7 @@ int decodeDynBitString (OOCTXT* pctxt, ASN1DynBitStr* pBitStr)
|
|||
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
|
||||
|
||||
stat = DECODEBIT (pctxt, &bit); /* read first bit of length determinant */
|
||||
if (bit == 1 && stat == ASN_OK)
|
||||
if (bit == 1 && stat == ASN_OK)
|
||||
stat = DECODEBIT (pctxt, &bit); /* read second bit */
|
||||
|
||||
pctxt->buffer.byteIndex = byteIndex; /* restore byte index */
|
||||
|
@ -441,9 +441,9 @@ int decodeDynBitString (OOCTXT* pctxt, ASN1DynBitStr* pBitStr)
|
|||
|
||||
/* if either first or second bit != 0 - not fragmented */
|
||||
|
||||
if (bit == 0 && stat == ASN_OK) {
|
||||
if (bit == 0 && stat == ASN_OK) {
|
||||
ASN1UINT bitcnt;
|
||||
|
||||
|
||||
stat = decodeLength (pctxt, &bitcnt);
|
||||
if (stat != 0) return LOG_ASN1ERR (pctxt, stat);
|
||||
|
||||
|
@ -454,9 +454,9 @@ int decodeDynBitString (OOCTXT* pctxt, ASN1DynBitStr* pBitStr)
|
|||
stat = moveBitCursor (pctxt, bitcnt);
|
||||
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
|
||||
}
|
||||
else
|
||||
else
|
||||
pBitStr->data = 0;
|
||||
|
||||
|
||||
return stat;
|
||||
}
|
||||
}
|
||||
|
@ -470,13 +470,13 @@ int decodeDynBitString (OOCTXT* pctxt, ASN1DynBitStr* pBitStr)
|
|||
}
|
||||
|
||||
nocts = (nbits + 7) / 8;
|
||||
|
||||
|
||||
/* Allocate memory for the target string */
|
||||
|
||||
if (nocts > 0) {
|
||||
ptmp = (ASN1OCTET*) ASN1MALLOC (pctxt, nocts);
|
||||
if (0 == ptmp) return LOG_ASN1ERR (pctxt, ASN_E_NOMEM);
|
||||
|
||||
|
||||
/* Call static bit string decode function */
|
||||
|
||||
stat = decodeBitString (pctxt, &pBitStr->numbits, ptmp, nocts);
|
||||
|
@ -493,7 +493,7 @@ int decodeDynOctetString (OOCTXT* pctxt, ASN1DynOctStr* pOctStr)
|
|||
|
||||
/* If "fast copy" option is not set (ASN1FASTCOPY) or if constructed,
|
||||
* copy the octet string value into a dynamic memory buffer;
|
||||
* otherwise, store the pointer to the value in the decode
|
||||
* otherwise, store the pointer to the value in the decode
|
||||
* buffer in the data pointer argument. */
|
||||
|
||||
if (pctxt->flags & ASN1FASTCOPY) {
|
||||
|
@ -507,7 +507,7 @@ int decodeDynOctetString (OOCTXT* pctxt, ASN1DynOctStr* pOctStr)
|
|||
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
|
||||
|
||||
stat = DECODEBIT (pctxt, &bit); /* read first bit of length determinant */
|
||||
if (bit == 1 && stat == ASN_OK)
|
||||
if (bit == 1 && stat == ASN_OK)
|
||||
stat = DECODEBIT (pctxt, &bit); /* read second bit */
|
||||
|
||||
pctxt->buffer.byteIndex = byteIndex; /* restore byte index */
|
||||
|
@ -515,9 +515,9 @@ int decodeDynOctetString (OOCTXT* pctxt, ASN1DynOctStr* pOctStr)
|
|||
|
||||
/* if either first or second bit != 0 - not fragmented */
|
||||
|
||||
if (bit == 0 && stat == ASN_OK) {
|
||||
if (bit == 0 && stat == ASN_OK) {
|
||||
ASN1UINT octcnt;
|
||||
|
||||
|
||||
stat = decodeLength (pctxt, &octcnt);
|
||||
if (stat != 0) return LOG_ASN1ERR (pctxt, stat);
|
||||
|
||||
|
@ -528,13 +528,13 @@ int decodeDynOctetString (OOCTXT* pctxt, ASN1DynOctStr* pOctStr)
|
|||
stat = moveBitCursor (pctxt, octcnt * 8);
|
||||
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
|
||||
}
|
||||
else
|
||||
else
|
||||
pOctStr->data = 0;
|
||||
|
||||
|
||||
return stat;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
nocts = getComponentLength (pctxt, 8);
|
||||
|
||||
if (nocts < 0) return LOG_ASN1ERR (pctxt, nocts);
|
||||
|
@ -671,14 +671,14 @@ int decodeObjectIdentifier (OOCTXT* pctxt, ASN1OBJID* pvalue)
|
|||
if (j == 0) {
|
||||
subid = pvalue->subid[0];
|
||||
pvalue->subid[0] = ((subid / 40) >= 2) ? 2 : subid / 40;
|
||||
pvalue->subid[1] = (pvalue->subid[0] == 2) ?
|
||||
pvalue->subid[1] = (pvalue->subid[0] == 2) ?
|
||||
subid - 80 : subid % 40;
|
||||
j = 2;
|
||||
}
|
||||
else j++;
|
||||
}
|
||||
else
|
||||
stat = ASN_E_INVOBJID;
|
||||
stat = ASN_E_INVOBJID;
|
||||
}
|
||||
|
||||
pvalue->numids = j;
|
||||
|
@ -687,9 +687,9 @@ int decodeObjectIdentifier (OOCTXT* pctxt, ASN1OBJID* pvalue)
|
|||
return (stat);
|
||||
}
|
||||
|
||||
static int decodeOctets
|
||||
static int decodeOctets
|
||||
(OOCTXT* pctxt, ASN1OCTET* pbuffer, ASN1UINT bufsiz, ASN1UINT nbits)
|
||||
{
|
||||
{
|
||||
ASN1UINT nbytes = (nbits + 7) / 8 ;
|
||||
ASN1UINT i = 0, j;
|
||||
ASN1UINT rshift = pctxt->buffer.bitOffset;
|
||||
|
@ -740,20 +740,20 @@ static int decodeOctets
|
|||
/* Copy last partial byte */
|
||||
|
||||
if (nbits >= rshift) {
|
||||
pbuffer[i] =
|
||||
pbuffer[i] =
|
||||
pctxt->buffer.data[pctxt->buffer.byteIndex++] << lshift;
|
||||
|
||||
nbitsInLastOctet = nbits - rshift;
|
||||
|
||||
if (nbitsInLastOctet > 0) {
|
||||
pbuffer[i] |=
|
||||
pbuffer[i] |=
|
||||
pctxt->buffer.data[pctxt->buffer.byteIndex] >> rshift;
|
||||
}
|
||||
|
||||
pctxt->buffer.bitOffset = 8 - nbitsInLastOctet;
|
||||
}
|
||||
else if (nbits > 0) { /* nbits < rshift */
|
||||
pbuffer[i] =
|
||||
pbuffer[i] =
|
||||
pctxt->buffer.data[pctxt->buffer.byteIndex] << lshift;
|
||||
pctxt->buffer.bitOffset = rshift - nbits;
|
||||
}
|
||||
|
@ -773,7 +773,7 @@ static int decodeOctets
|
|||
return ASN_OK;
|
||||
}
|
||||
|
||||
int decodeOctetString
|
||||
int decodeOctetString
|
||||
(OOCTXT* pctxt, ASN1UINT* numocts_p, ASN1OCTET* buffer, ASN1UINT bufsiz)
|
||||
{
|
||||
ASN1UINT octcnt;
|
||||
|
@ -790,7 +790,7 @@ int decodeOctetString
|
|||
if (TRUE) {
|
||||
ASN1BOOL doAlign;
|
||||
|
||||
stat = bitAndOctetStringAlignmentTest
|
||||
stat = bitAndOctetStringAlignmentTest
|
||||
(pSizeList, octcnt, FALSE, &doAlign);
|
||||
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
|
||||
|
||||
|
@ -800,7 +800,7 @@ int decodeOctetString
|
|||
}
|
||||
}
|
||||
|
||||
stat = decodeOctets (pctxt, &buffer[octidx],
|
||||
stat = decodeOctets (pctxt, &buffer[octidx],
|
||||
bufsiz - octidx, (octcnt * 8));
|
||||
|
||||
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
|
||||
|
@ -815,7 +815,7 @@ int decodeOctetString
|
|||
return ASN_OK;
|
||||
}
|
||||
|
||||
int decodeOpenType
|
||||
int decodeOpenType
|
||||
(OOCTXT* pctxt, const ASN1OCTET** object_p2, ASN1UINT* numocts_p)
|
||||
{
|
||||
ASN1DynOctStr octStr;
|
||||
|
@ -883,7 +883,7 @@ int decodeSemiConsUnsigned (OOCTXT* pctxt, ASN1UINT* pvalue, ASN1UINT lower)
|
|||
stat = decodeLength (pctxt, &nbytes);
|
||||
if (stat < 0) return LOG_ASN1ERR (pctxt, stat);
|
||||
|
||||
|
||||
|
||||
if (nbytes > 0) {
|
||||
stat = decodeByteAlign (pctxt);
|
||||
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
|
||||
|
@ -898,7 +898,7 @@ int decodeSemiConsUnsigned (OOCTXT* pctxt, ASN1UINT* pvalue, ASN1UINT lower)
|
|||
}
|
||||
|
||||
int decodeSmallNonNegWholeNumber (OOCTXT* pctxt, ASN1UINT* pvalue)
|
||||
{
|
||||
{
|
||||
ASN1BOOL bitValue;
|
||||
ASN1UINT len;
|
||||
int ret;
|
||||
|
@ -959,7 +959,7 @@ int decodeVarWidthCharString (OOCTXT* pctxt, const char** pvalue)
|
|||
return ASN_OK;
|
||||
}
|
||||
|
||||
static int decode16BitConstrainedString
|
||||
static int decode16BitConstrainedString
|
||||
(OOCTXT* pctxt, Asn116BitCharString* pString, Asn116BitCharSet* pCharSet)
|
||||
{
|
||||
ASN1UINT i, idx, nbits = pCharSet->alignedBits;
|
||||
|
@ -985,7 +985,7 @@ static int decode16BitConstrainedString
|
|||
stat = decodeBits (pctxt, &idx, nbits);
|
||||
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
|
||||
|
||||
pString->data[i] = (pCharSet->charSet.data == 0) ?
|
||||
pString->data[i] = (pCharSet->charSet.data == 0) ?
|
||||
idx + pCharSet->firstChar : pCharSet->charSet.data[idx];
|
||||
}
|
||||
}
|
||||
|
@ -1048,6 +1048,6 @@ int moveBitCursor (OOCTXT* pctxt, int bitOffset)
|
|||
if (pctxt->buffer.byteIndex > pctxt->buffer.size) {
|
||||
return (ASN_E_ENDOFBUF);
|
||||
}
|
||||
|
||||
|
||||
return ASN_OK;
|
||||
}
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
/*
|
||||
* Copyright (C) 1997-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
@ -30,7 +30,7 @@ void dListInit (DList* pList)
|
|||
|
||||
DListNode* dListAppend (OOCTXT* pctxt, DList* pList, void* pData)
|
||||
{
|
||||
DListNode* pListNode = (DListNode*)
|
||||
DListNode* pListNode = (DListNode*)
|
||||
memAlloc (pctxt, sizeof(DListNode));
|
||||
|
||||
if (0 != pListNode) {
|
||||
|
@ -53,7 +53,7 @@ DListNode* dListAppend (OOCTXT* pctxt, DList* pList, void* pData)
|
|||
|
||||
DListNode* dListAppendNode (OOCTXT* pctxt, DList* pList, void* pData)
|
||||
{
|
||||
DListNode* pListNode =
|
||||
DListNode* pListNode =
|
||||
(DListNode*) (((char*)pData) - sizeof(DListNode));
|
||||
|
||||
if (0 != pListNode) {
|
||||
|
@ -109,7 +109,7 @@ void dListFreeAll (OOCTXT* pctxt, DList* pList)
|
|||
|
||||
for (pNode = pList->head; pNode != 0; pNode = pNextNode) {
|
||||
pNextNode = pNode->next;
|
||||
|
||||
|
||||
memFreePtr (pctxt, pNode->data);
|
||||
memFreePtr (pctxt, pNode);
|
||||
}
|
||||
|
@ -148,8 +148,8 @@ void dListFindAndRemove(struct OOCTXT* pctxt, DList* pList, void *data)
|
|||
memFreePtr(pctxt, pNode);
|
||||
}
|
||||
}
|
||||
|
||||
DListNode* dListFindByIndex (DList* pList, int index)
|
||||
|
||||
DListNode* dListFindByIndex (DList* pList, int index)
|
||||
{
|
||||
DListNode* curNode;
|
||||
int i;
|
||||
|
@ -163,11 +163,11 @@ DListNode* dListFindByIndex (DList* pList, int index)
|
|||
|
||||
/* Insert item before given node */
|
||||
|
||||
DListNode* dListInsertBefore
|
||||
DListNode* dListInsertBefore
|
||||
(OOCTXT* pctxt, DList* pList, DListNode* node, const void* pData)
|
||||
{
|
||||
DListNode* pListNode = (DListNode*) memAlloc (pctxt, sizeof(DListNode));
|
||||
|
||||
|
||||
if (0 != pListNode) {
|
||||
pListNode->data = (void*)pData;
|
||||
|
||||
|
@ -212,7 +212,7 @@ DListNode* dListInsertBefore
|
|||
|
||||
/* Insert item after given node */
|
||||
|
||||
DListNode* dListInsertAfter
|
||||
DListNode* dListInsertAfter
|
||||
(OOCTXT* pctxt, DList* pList, DListNode* node, const void* pData)
|
||||
{
|
||||
DListNode* pListNode = (DListNode*) memAlloc (pctxt, sizeof(DListNode));
|
||||
|
@ -258,4 +258,3 @@ DListNode* dListInsertAfter
|
|||
|
||||
return pListNode;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,20 +1,20 @@
|
|||
/*
|
||||
* Copyright (C) 1997-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
/**
|
||||
* @file dlist.h
|
||||
/**
|
||||
* @file dlist.h
|
||||
* Doubly-linked list structures and utility functions.
|
||||
*/
|
||||
#ifndef _OODLIST_H_
|
||||
|
@ -74,26 +74,26 @@ extern "C" {
|
|||
* @param pData A pointer to a data item to be appended to the list.
|
||||
* @return A pointer to an allocated node structure used to link
|
||||
* the given data value into the list.
|
||||
*/
|
||||
EXTERN DListNode* dListAppend
|
||||
*/
|
||||
EXTERN DListNode* dListAppend
|
||||
(struct OOCTXT* pctxt, DList* pList, void* pData);
|
||||
|
||||
EXTERN DListNode* dListAppendNode
|
||||
EXTERN DListNode* dListAppendNode
|
||||
(struct OOCTXT* pctxt, DList* pList, void* pData);
|
||||
|
||||
/**
|
||||
* This function delete the head item from the list and returns a pointer
|
||||
* the data item stored in that node. The memory for the node structure
|
||||
* This function delete the head item from the list and returns a pointer
|
||||
* the data item stored in that node. The memory for the node structure
|
||||
* is released.
|
||||
*
|
||||
* @param pctxt A pointer to a context structure. This provides a
|
||||
* storage area for the function to store all working
|
||||
* variables that must be maintained between function
|
||||
* calls.
|
||||
* @param pList A pointer to the linked list structure from which
|
||||
* @param pList A pointer to the linked list structure from which
|
||||
* the node will be deleted.
|
||||
* @return A pointer to the data item stored in the deleted node.
|
||||
*/
|
||||
*/
|
||||
EXTERN void* dListDeleteHead (struct OOCTXT* pctxt, DList* pList);
|
||||
|
||||
EXTERN DListNode* dListFindByIndex (DList* pList, int index);
|
||||
|
@ -101,7 +101,7 @@ EXTERN DListNode* dListFindByIndex (DList* pList, int index);
|
|||
/**
|
||||
* This function initializes a doubly linked list structure. It sets the number
|
||||
* of elements to zero and sets all internal pointer values to NULL. A doubly
|
||||
* linked-list structure is described by the DList type. Nodes of the list
|
||||
* linked-list structure is described by the DList type. Nodes of the list
|
||||
* are of type DListNode.
|
||||
*
|
||||
* Memory for the structures is allocated using the memAlloc run-time
|
||||
|
@ -130,7 +130,7 @@ EXTERN void dListInit (DList* pList);
|
|||
*/
|
||||
EXTERN void dListFreeNodes (struct OOCTXT* pctxt, DList* pList);
|
||||
|
||||
/**
|
||||
/**
|
||||
* This function removes all nodes from the linked list structure and releases
|
||||
* the memory that was allocated for storing the node structures
|
||||
* (DListNode) and for data. The memory for data in each node must have
|
||||
|
@ -146,37 +146,37 @@ EXTERN void dListFreeNodes (struct OOCTXT* pctxt, DList* pList);
|
|||
EXTERN void dListFreeAll (struct OOCTXT* pctxt, DList* pList);
|
||||
|
||||
/**
|
||||
* This function inserts an item into the linked list structure before the
|
||||
* This function inserts an item into the linked list structure before the
|
||||
* specified element.
|
||||
*
|
||||
*
|
||||
* @param pctxt Pointer to a context structure.
|
||||
* @param pList A pointer to a linked list structure into which the
|
||||
* @param pList A pointer to a linked list structure into which the
|
||||
* data item is to be inserted.
|
||||
* @param node The position in the list where the item is to be
|
||||
* inserted. The item will be inserted before this
|
||||
* @param node The position in the list where the item is to be
|
||||
* inserted. The item will be inserted before this
|
||||
* node or appended to the list if node is null.
|
||||
* @param pData A pointer to the data item to be inserted to the list.
|
||||
* @return A pointer to an allocated node structure used to
|
||||
* @return A pointer to an allocated node structure used to
|
||||
* link the given data value into the list.
|
||||
*/
|
||||
EXTERN DListNode* dListInsertBefore
|
||||
EXTERN DListNode* dListInsertBefore
|
||||
(struct OOCTXT* pctxt, DList* pList, DListNode* node, const void* pData);
|
||||
|
||||
/**
|
||||
* This function inserts an item into the linked list structure after the
|
||||
* This function inserts an item into the linked list structure after the
|
||||
* specified element.
|
||||
*
|
||||
*
|
||||
* @param pctxt Pointer to a context structure.
|
||||
* @param pList A pointer to a linked list structure into which the
|
||||
* @param pList A pointer to a linked list structure into which the
|
||||
* data item is to be inserted.
|
||||
* @param node The position in the list where the item is to be
|
||||
* inserted. The item will be inserted after this
|
||||
* @param node The position in the list where the item is to be
|
||||
* inserted. The item will be inserted after this
|
||||
* node or added as the head element if node is null.
|
||||
* @param pData A pointer to the data item to be inserted to the list.
|
||||
* @return A pointer to an allocated node structure used to
|
||||
* @return A pointer to an allocated node structure used to
|
||||
* link the given data value into the list.
|
||||
*/
|
||||
EXTERN DListNode* dListInsertAfter
|
||||
EXTERN DListNode* dListInsertAfter
|
||||
(struct OOCTXT* pctxt, DList* pList, DListNode* node, const void* pData);
|
||||
|
||||
/**
|
||||
|
@ -194,7 +194,7 @@ EXTERN DListNode* dListInsertAfter
|
|||
EXTERN void dListRemove (DList* pList, DListNode* node);
|
||||
EXTERN void dListFindAndRemove(struct OOCTXT* pctxt, DList* pList, void* data);
|
||||
|
||||
/**
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
#ifdef __cplusplus
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
/*
|
||||
* Copyright (C) 1997-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
@ -20,7 +20,7 @@
|
|||
|
||||
#include "ooasn1.h"
|
||||
|
||||
static int encode16BitConstrainedString
|
||||
static int encode16BitConstrainedString
|
||||
(OOCTXT* pctxt, Asn116BitCharString value, Asn116BitCharSet* pCharSet);
|
||||
|
||||
static int encode2sCompBinInt (OOCTXT* pctxt, ASN1INT value);
|
||||
|
@ -34,7 +34,7 @@ int encodeIdent (OOCTXT* pctxt, ASN1UINT ident);
|
|||
|
||||
|
||||
int encodeBit (OOCTXT* pctxt, ASN1BOOL value)
|
||||
{
|
||||
{
|
||||
int stat = ASN_OK;
|
||||
|
||||
/* If start of new byte, init to zero */
|
||||
|
@ -58,7 +58,7 @@ int encodeBit (OOCTXT* pctxt, ASN1BOOL value)
|
|||
/* Set single-bit value */
|
||||
|
||||
if (value) {
|
||||
pctxt->buffer.data[pctxt->buffer.byteIndex] |=
|
||||
pctxt->buffer.data[pctxt->buffer.byteIndex] |=
|
||||
( 1 << pctxt->buffer.bitOffset );
|
||||
}
|
||||
|
||||
|
@ -74,7 +74,7 @@ int encodeBit (OOCTXT* pctxt, ASN1BOOL value)
|
|||
}
|
||||
|
||||
int encodeBits (OOCTXT* pctxt, ASN1UINT value, ASN1UINT nbits)
|
||||
{
|
||||
{
|
||||
int nbytes = (nbits + 7)/ 8, stat = ASN_OK;
|
||||
|
||||
if (nbits == 0) return stat;
|
||||
|
@ -94,7 +94,7 @@ int encodeBits (OOCTXT* pctxt, ASN1UINT value, ASN1UINT nbits)
|
|||
|
||||
if (nbits < (unsigned)pctxt->buffer.bitOffset) {
|
||||
pctxt->buffer.bitOffset -= nbits;
|
||||
pctxt->buffer.data[pctxt->buffer.byteIndex] |=
|
||||
pctxt->buffer.data[pctxt->buffer.byteIndex] |=
|
||||
( value << pctxt->buffer.bitOffset );
|
||||
return stat;
|
||||
}
|
||||
|
@ -108,22 +108,22 @@ int encodeBits (OOCTXT* pctxt, ASN1UINT value, ASN1UINT nbits)
|
|||
/* to set bits in subsequent bytes.. */
|
||||
|
||||
nbits -= pctxt->buffer.bitOffset;
|
||||
pctxt->buffer.data[pctxt->buffer.byteIndex++] |=
|
||||
pctxt->buffer.data[pctxt->buffer.byteIndex++] |=
|
||||
(ASN1OCTET)( value >> nbits );
|
||||
pctxt->buffer.data[pctxt->buffer.byteIndex] = 0;
|
||||
pctxt->buffer.data[pctxt->buffer.byteIndex] = 0;
|
||||
|
||||
while (nbits >= 8) {
|
||||
nbits -= 8;
|
||||
pctxt->buffer.data[pctxt->buffer.byteIndex++] =
|
||||
pctxt->buffer.data[pctxt->buffer.byteIndex++] =
|
||||
(ASN1OCTET)( value >> nbits );
|
||||
pctxt->buffer.data[pctxt->buffer.byteIndex] = 0;
|
||||
pctxt->buffer.data[pctxt->buffer.byteIndex] = 0;
|
||||
}
|
||||
|
||||
/* copy final partial byte */
|
||||
|
||||
pctxt->buffer.bitOffset = 8 - nbits;
|
||||
if (nbits > 0) {
|
||||
pctxt->buffer.data[pctxt->buffer.byteIndex] =
|
||||
pctxt->buffer.data[pctxt->buffer.byteIndex] =
|
||||
(ASN1OCTET)((value & ((1 << nbits)-1)) << pctxt->buffer.bitOffset);
|
||||
}
|
||||
else
|
||||
|
@ -133,11 +133,11 @@ int encodeBits (OOCTXT* pctxt, ASN1UINT value, ASN1UINT nbits)
|
|||
}
|
||||
|
||||
int encodeBitsFromOctet (OOCTXT* pctxt, ASN1OCTET value, ASN1UINT nbits)
|
||||
{
|
||||
{
|
||||
int lshift = pctxt->buffer.bitOffset;
|
||||
int rshift = 8 - pctxt->buffer.bitOffset;
|
||||
int stat = ASN_OK;
|
||||
ASN1OCTET mask = 0x0;
|
||||
ASN1OCTET mask = 0x0;
|
||||
|
||||
if (nbits == 0) return ASN_OK;
|
||||
|
||||
|
@ -173,14 +173,14 @@ int encodeBitsFromOctet (OOCTXT* pctxt, ASN1OCTET value, ASN1UINT nbits)
|
|||
/* possibly some bits in the following octet.. */
|
||||
|
||||
else {
|
||||
pctxt->buffer.data[pctxt->buffer.byteIndex] |=
|
||||
pctxt->buffer.data[pctxt->buffer.byteIndex] |=
|
||||
(ASN1OCTET)(value >> rshift);
|
||||
|
||||
pctxt->buffer.bitOffset -= nbits;
|
||||
|
||||
if (pctxt->buffer.bitOffset < 0) {
|
||||
pctxt->buffer.byteIndex++;
|
||||
pctxt->buffer.data[pctxt->buffer.byteIndex] =
|
||||
pctxt->buffer.data[pctxt->buffer.byteIndex] =
|
||||
(ASN1OCTET)(value << lshift);
|
||||
pctxt->buffer.bitOffset += 8;
|
||||
}
|
||||
|
@ -202,7 +202,7 @@ int encodeBitString (OOCTXT* pctxt, ASN1UINT numbits, const ASN1OCTET* data)
|
|||
if (enclen > 0) {
|
||||
ASN1BOOL doAlign;
|
||||
|
||||
stat = bitAndOctetStringAlignmentTest
|
||||
stat = bitAndOctetStringAlignmentTest
|
||||
(pSizeList, numbits, TRUE, &doAlign);
|
||||
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
|
||||
|
||||
|
@ -225,7 +225,7 @@ int encodeBitString (OOCTXT* pctxt, ASN1UINT numbits, const ASN1OCTET* data)
|
|||
return ASN_OK;
|
||||
}
|
||||
|
||||
int encodeBMPString
|
||||
int encodeBMPString
|
||||
(OOCTXT* pctxt, ASN1BMPString value, Asn116BitCharSet* permCharSet)
|
||||
{
|
||||
Asn116BitCharSet charSet;
|
||||
|
@ -278,9 +278,9 @@ int encodeCheckBuffer (OOCTXT* pctxt, ASN1UINT nbytes)
|
|||
return (stat);
|
||||
}
|
||||
|
||||
int encodeConsInteger
|
||||
int encodeConsInteger
|
||||
(OOCTXT* pctxt, ASN1INT value, ASN1INT lower, ASN1INT upper)
|
||||
{
|
||||
{
|
||||
ASN1UINT range_value;
|
||||
ASN1UINT adjusted_value;
|
||||
int stat;
|
||||
|
@ -301,7 +301,7 @@ int encodeConsInteger
|
|||
else {
|
||||
range_value = upper + abs(lower);
|
||||
adjusted_value = value + abs(lower);
|
||||
}
|
||||
}
|
||||
|
||||
if (range_value != ASN1UINT_MAX) { range_value += 1; }
|
||||
|
||||
|
@ -316,9 +316,9 @@ int encodeConsInteger
|
|||
return stat;
|
||||
}
|
||||
|
||||
int encodeConsUnsigned
|
||||
int encodeConsUnsigned
|
||||
(OOCTXT* pctxt, ASN1UINT value, ASN1UINT lower, ASN1UINT upper)
|
||||
{
|
||||
{
|
||||
ASN1UINT range_value;
|
||||
ASN1UINT adjusted_value;
|
||||
int stat;
|
||||
|
@ -340,9 +340,9 @@ int encodeConsUnsigned
|
|||
return stat;
|
||||
}
|
||||
|
||||
int encodeConsWholeNumber
|
||||
int encodeConsWholeNumber
|
||||
(OOCTXT* pctxt, ASN1UINT adjusted_value, ASN1UINT range_value)
|
||||
{
|
||||
{
|
||||
ASN1UINT nocts, range_bitcnt = getUIntBitCount (range_value - 1);
|
||||
int stat;
|
||||
|
||||
|
@ -396,8 +396,8 @@ int encodeConsWholeNumber
|
|||
}
|
||||
}
|
||||
|
||||
int encodeConstrainedStringEx (OOCTXT* pctxt,
|
||||
const char* string,
|
||||
int encodeConstrainedStringEx (OOCTXT* pctxt,
|
||||
const char* string,
|
||||
const char* charSet,
|
||||
ASN1UINT abits, /* aligned char bits */
|
||||
ASN1UINT ubits, /* unaligned char bits */
|
||||
|
@ -460,7 +460,7 @@ int encodeExpandBuffer (OOCTXT* pctxt, ASN1UINT nbytes)
|
|||
|
||||
pctxt->buffer.data = (ASN1OCTET*) memHeapRealloc
|
||||
(&pctxt->pMsgMemHeap, pctxt->buffer.data, pctxt->buffer.size);
|
||||
|
||||
|
||||
if (!pctxt->buffer.data) return (ASN_E_NOMEM);
|
||||
|
||||
return (ASN_OK);
|
||||
|
@ -481,7 +481,7 @@ ASN1OCTET* encodeGetMsgPtr (OOCTXT* pctxt, int* pLength)
|
|||
return pctxt->buffer.data;
|
||||
}
|
||||
|
||||
int encodeIdent (OOCTXT* pctxt, ASN1UINT ident)
|
||||
int encodeIdent (OOCTXT* pctxt, ASN1UINT ident)
|
||||
{
|
||||
ASN1UINT mask;
|
||||
int nshifts = 0, stat;
|
||||
|
@ -508,9 +508,9 @@ int encodeIdent (OOCTXT* pctxt, ASN1UINT ident)
|
|||
}
|
||||
|
||||
int encodeLength (OOCTXT* pctxt, ASN1UINT value)
|
||||
{
|
||||
{
|
||||
ASN1BOOL extendable;
|
||||
Asn1SizeCnst* pSize =
|
||||
Asn1SizeCnst* pSize =
|
||||
checkSize (pctxt->pSizeConstraint, value, &extendable);
|
||||
ASN1UINT lower = (pSize) ? pSize->lower : 0;
|
||||
ASN1UINT upper = (pSize) ? pSize->upper : ASN1UINT_MAX;
|
||||
|
@ -520,7 +520,7 @@ int encodeLength (OOCTXT* pctxt, ASN1UINT value)
|
|||
/* within the range of any of them, signal constraint violation */
|
||||
/* error.. */
|
||||
|
||||
if (pctxt->pSizeConstraint && !pSize)
|
||||
if (pctxt->pSizeConstraint && !pSize)
|
||||
return LOG_ASN1ERR (pctxt, ASN_E_CONSVIO);
|
||||
|
||||
/* Reset the size constraint in the context block structure */
|
||||
|
@ -578,11 +578,11 @@ int encodeObjectIdentifier (OOCTXT* pctxt, ASN1OBJID* pvalue)
|
|||
if (0 == pvalue) return LOG_ASN1ERR (pctxt, ASN_E_INVOBJID);
|
||||
if (numids < 2) return LOG_ASN1ERR (pctxt, ASN_E_INVOBJID);
|
||||
if (pvalue->subid[0] > 2) return LOG_ASN1ERR (pctxt, ASN_E_INVOBJID);
|
||||
if (pvalue->subid[0] != 2 && pvalue->subid[1] > 39)
|
||||
if (pvalue->subid[0] != 2 && pvalue->subid[1] > 39)
|
||||
return LOG_ASN1ERR (pctxt, ASN_E_INVOBJID);
|
||||
|
||||
/* Passed checks, encode object identifier */
|
||||
|
||||
|
||||
/* Munge first two sub ID's and encode */
|
||||
|
||||
temp = ((pvalue->subid[0] * 40) + pvalue->subid[1]);
|
||||
|
@ -600,7 +600,7 @@ int encodeObjectIdentifier (OOCTXT* pctxt, ASN1OBJID* pvalue)
|
|||
}
|
||||
|
||||
int encodebitsFromOctet (OOCTXT* pctxt, ASN1OCTET value, ASN1UINT nbits)
|
||||
{
|
||||
{
|
||||
int lshift = pctxt->buffer.bitOffset;
|
||||
int rshift = 8 - pctxt->buffer.bitOffset;
|
||||
int stat = ASN_OK;
|
||||
|
@ -640,14 +640,14 @@ int encodebitsFromOctet (OOCTXT* pctxt, ASN1OCTET value, ASN1UINT nbits)
|
|||
/* possibly some bits in the following octet.. */
|
||||
|
||||
else {
|
||||
pctxt->buffer.data[pctxt->buffer.byteIndex] |=
|
||||
pctxt->buffer.data[pctxt->buffer.byteIndex] |=
|
||||
(ASN1OCTET)(value >> rshift);
|
||||
|
||||
pctxt->buffer.bitOffset -= nbits;
|
||||
|
||||
if (pctxt->buffer.bitOffset < 0) {
|
||||
pctxt->buffer.byteIndex++;
|
||||
pctxt->buffer.data[pctxt->buffer.byteIndex] =
|
||||
pctxt->buffer.data[pctxt->buffer.byteIndex] =
|
||||
(ASN1OCTET)(value << lshift);
|
||||
pctxt->buffer.bitOffset += 8;
|
||||
}
|
||||
|
@ -657,7 +657,7 @@ int encodebitsFromOctet (OOCTXT* pctxt, ASN1OCTET value, ASN1UINT nbits)
|
|||
}
|
||||
|
||||
int encodeOctets (OOCTXT* pctxt, const ASN1OCTET* pvalue, ASN1UINT nbits)
|
||||
{
|
||||
{
|
||||
int i = 0, stat;
|
||||
int numFullOcts = nbits / 8;
|
||||
|
||||
|
@ -675,7 +675,7 @@ int encodeOctets (OOCTXT* pctxt, const ASN1OCTET* pvalue, ASN1UINT nbits)
|
|||
/* encode buffer.. */
|
||||
|
||||
if (pctxt->buffer.bitOffset == 8) {
|
||||
memcpy (&pctxt->buffer.data[pctxt->buffer.byteIndex], pvalue,
|
||||
memcpy (&pctxt->buffer.data[pctxt->buffer.byteIndex], pvalue,
|
||||
numFullOcts);
|
||||
pctxt->buffer.byteIndex += numFullOcts;
|
||||
pctxt->buffer.data[pctxt->buffer.byteIndex] = 0;
|
||||
|
@ -714,7 +714,7 @@ int encodeOctetString (OOCTXT* pctxt, ASN1UINT numocts, const ASN1OCTET* data)
|
|||
if (enclen > 0) {
|
||||
ASN1BOOL doAlign;
|
||||
|
||||
stat = bitAndOctetStringAlignmentTest
|
||||
stat = bitAndOctetStringAlignmentTest
|
||||
(pSizeList, numocts, FALSE, &doAlign);
|
||||
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
|
||||
|
||||
|
@ -793,7 +793,7 @@ int encodeOpenTypeExt (OOCTXT* pctxt, DList* pElemList)
|
|||
stat = encodeByteAlign (pctxt);
|
||||
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
|
||||
|
||||
stat = encodeOpenType
|
||||
stat = encodeOpenType
|
||||
(pctxt, pOpenType->numocts, pOpenType->data);
|
||||
|
||||
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
|
||||
|
@ -833,7 +833,7 @@ int encodeSemiConsInteger (OOCTXT* pctxt, ASN1INT value, ASN1INT lower)
|
|||
|
||||
if (lower > ASN1INT_MIN)
|
||||
value -= lower;
|
||||
|
||||
|
||||
/* Calculate signed number value length */
|
||||
|
||||
for ( ; shift > 0; shift -= 8) {
|
||||
|
@ -889,10 +889,10 @@ int encodeSemiConsUnsigned (OOCTXT* pctxt, ASN1UINT value, ASN1UINT lower)
|
|||
if ((stat = encodeLength (pctxt, nbytes)) < 0) {
|
||||
return stat;
|
||||
}
|
||||
|
||||
|
||||
if ((stat = encodeByteAlign (pctxt)) != ASN_OK)
|
||||
return stat;
|
||||
|
||||
|
||||
/* Encode additional zero byte if necessary */
|
||||
|
||||
if (nbytes > sizeof(value)) {
|
||||
|
@ -908,7 +908,7 @@ int encodeSemiConsUnsigned (OOCTXT* pctxt, ASN1UINT value, ASN1UINT lower)
|
|||
}
|
||||
|
||||
int encodeSmallNonNegWholeNumber (OOCTXT* pctxt, ASN1UINT value)
|
||||
{
|
||||
{
|
||||
int stat;
|
||||
|
||||
if (value < 64) {
|
||||
|
@ -964,7 +964,7 @@ int encodeVarWidthCharString (OOCTXT* pctxt, const char* value)
|
|||
return ASN_OK;
|
||||
}
|
||||
|
||||
static int encode16BitConstrainedString
|
||||
static int encode16BitConstrainedString
|
||||
(OOCTXT* pctxt, Asn116BitCharString value, Asn116BitCharSet* pCharSet)
|
||||
{
|
||||
ASN1UINT i, pos;
|
||||
|
@ -985,7 +985,7 @@ static int encode16BitConstrainedString
|
|||
|
||||
for (i = 0; i < value.nchars; i++) {
|
||||
if (pCharSet->charSet.data == 0) {
|
||||
stat = encodeBits
|
||||
stat = encodeBits
|
||||
(pctxt, value.data[i] - pCharSet->firstChar, nbits);
|
||||
if (stat != ASN_OK) return LOG_ASN1ERR (pctxt, stat);
|
||||
}
|
||||
|
@ -1051,7 +1051,7 @@ static int encodeNonNegBinInt (OOCTXT* pctxt, ASN1UINT value)
|
|||
/* multiple of 8 bits and also satisifies the condition that the */
|
||||
/* leading eight bits of the field shall not be zero unless the */
|
||||
/* field is precisely 8 bits long. */
|
||||
|
||||
|
||||
ASN1UINT bitcnt = (value == 0) ? 1 : getUIntBitCount (value);
|
||||
|
||||
/* round-up to nearest 8-bit boundary */
|
||||
|
@ -1093,7 +1093,7 @@ static int encodeUnconsLength (OOCTXT* pctxt, ASN1UINT value)
|
|||
return enclen;
|
||||
}
|
||||
|
||||
static int getIdentByteCount (ASN1UINT ident)
|
||||
static int getIdentByteCount (ASN1UINT ident)
|
||||
{
|
||||
if (ident < (1u << 7)) { /* 7 */
|
||||
return 1;
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
/*
|
||||
* Copyright (C) 1997-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
@ -48,21 +48,21 @@ static const char* g_status_text[] = {
|
|||
"Value constraint violation: field %s, value %s",
|
||||
"Value range error: lower bound is greater than upper",
|
||||
"Unexpected end of file detected",
|
||||
"Invalid UTF-8 character at index %d",
|
||||
"List error: concurrent modification attempt while iterating",
|
||||
"Invalid UTF-8 character at index %d",
|
||||
"List error: concurrent modification attempt while iterating",
|
||||
"List error: illegal state for attempted operation",
|
||||
"Array index out of bounds",
|
||||
"Invalid parameter passed to function or method",
|
||||
"Invalid time string format",
|
||||
"Context is not initialized",
|
||||
"ASN.1 value will not fit in target variable",
|
||||
"Character is not within the defined character set",
|
||||
"Invalid XML state for attempted operation",
|
||||
"Error condition returned from XML parser:\n%s",
|
||||
"Context is not initialized",
|
||||
"ASN.1 value will not fit in target variable",
|
||||
"Character is not within the defined character set",
|
||||
"Invalid XML state for attempted operation",
|
||||
"Error condition returned from XML parser:\n%s",
|
||||
"SEQUENCE elements not in correct order",
|
||||
"Invalid index for table constraint identifier",
|
||||
"Invalid value for relational table constraint fixed type field",
|
||||
"File not found",
|
||||
"Invalid value for relational table constraint fixed type field",
|
||||
"File not found",
|
||||
"File read error",
|
||||
"File write error",
|
||||
"Invalid Base64 string",
|
||||
|
@ -152,7 +152,7 @@ char* errFmtMsg (ASN1ErrInfo* pErrInfo, char* bufp)
|
|||
j = pcnt = 0;
|
||||
tp = g_status_text[i];
|
||||
|
||||
while (*tp)
|
||||
while (*tp)
|
||||
{
|
||||
if (*tp == '%' && *(tp+1) == 's')
|
||||
{
|
||||
|
@ -176,14 +176,14 @@ char* errFmtMsg (ASN1ErrInfo* pErrInfo, char* bufp)
|
|||
}
|
||||
else
|
||||
strcpy (bufp, "unrecognized completion status");
|
||||
}
|
||||
}
|
||||
else strcpy (bufp, "normal completion status");
|
||||
|
||||
return (bufp);
|
||||
}
|
||||
|
||||
/* Get error text in a dynamic memory buffer. This allocates memory */
|
||||
/* using the 'memAlloc' function. This memory is automatically freed */
|
||||
/* using the 'memAlloc' function. This memory is automatically freed */
|
||||
/* at the time the 'memFree' function is called. */
|
||||
|
||||
char* errGetText (OOCTXT* pctxt)
|
||||
|
@ -198,7 +198,7 @@ char* errGetText (OOCTXT* pctxt)
|
|||
|
||||
while (pctxt->errInfo.stkx > 0) {
|
||||
pctxt->errInfo.stkx--;
|
||||
sprintf (lbuf, " Module: %s, Line %d\n",
|
||||
sprintf (lbuf, " Module: %s, Line %d\n",
|
||||
pctxt->errInfo.stack[pctxt->errInfo.stkx].module,
|
||||
pctxt->errInfo.stack[pctxt->errInfo.stkx].lineno);
|
||||
strcat(pBuf, lbuf);
|
||||
|
@ -219,7 +219,7 @@ void errPrint (ASN1ErrInfo* pErrInfo)
|
|||
printf ("Stack trace:");
|
||||
while (pErrInfo->stkx > 0) {
|
||||
pErrInfo->stkx--;
|
||||
printf (" Module: %s, Line %d\n",
|
||||
printf (" Module: %s, Line %d\n",
|
||||
pErrInfo->stack[pErrInfo->stkx].module,
|
||||
pErrInfo->stack[pErrInfo->stkx].lineno);
|
||||
}
|
||||
|
@ -243,9 +243,9 @@ int errCopyData (ASN1ErrInfo* pSrcErrInfo, ASN1ErrInfo* pDestErrInfo)
|
|||
|
||||
for (i = 0; i < pSrcErrInfo->stkx; i++) {
|
||||
if (pDestErrInfo->stkx < ASN_K_MAXERRSTK) {
|
||||
pDestErrInfo->stack[pDestErrInfo->stkx].module =
|
||||
pDestErrInfo->stack[pDestErrInfo->stkx].module =
|
||||
pSrcErrInfo->stack[i].module;
|
||||
pDestErrInfo->stack[pDestErrInfo->stkx++].lineno =
|
||||
pDestErrInfo->stack[pDestErrInfo->stkx++].lineno =
|
||||
pSrcErrInfo->stack[i].lineno;
|
||||
}
|
||||
}
|
||||
|
@ -254,12 +254,12 @@ int errCopyData (ASN1ErrInfo* pSrcErrInfo, ASN1ErrInfo* pDestErrInfo)
|
|||
}
|
||||
|
||||
|
||||
int errSetData (ASN1ErrInfo* pErrInfo, int status,
|
||||
const char* module, int lno)
|
||||
{
|
||||
int errSetData (ASN1ErrInfo* pErrInfo, int status,
|
||||
const char* module, int lno)
|
||||
{
|
||||
if (pErrInfo->status == 0) {
|
||||
pErrInfo->status = status;
|
||||
}
|
||||
ooLogAsn1Error(status, module, lno);
|
||||
return status;
|
||||
return status;
|
||||
}
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
/*
|
||||
* Copyright (C) 2004-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
@ -64,7 +64,7 @@ void invokeUIntValue (OOCTXT* pctxt, ASN1UINT value)
|
|||
}
|
||||
}
|
||||
|
||||
void invokeBitStrValue (OOCTXT* pctxt, ASN1UINT numbits,
|
||||
void invokeBitStrValue (OOCTXT* pctxt, ASN1UINT numbits,
|
||||
const ASN1OCTET* data)
|
||||
{
|
||||
if (0 != pctxt->pEventHandler) {
|
||||
|
@ -72,7 +72,7 @@ void invokeBitStrValue (OOCTXT* pctxt, ASN1UINT numbits,
|
|||
}
|
||||
}
|
||||
|
||||
void invokeOctStrValue (OOCTXT* pctxt, ASN1UINT numocts,
|
||||
void invokeOctStrValue (OOCTXT* pctxt, ASN1UINT numocts,
|
||||
const ASN1OCTET* data)
|
||||
{
|
||||
if (0 != pctxt->pEventHandler) {
|
||||
|
@ -87,7 +87,7 @@ void invokeCharStrValue (OOCTXT* pctxt, const char* value)
|
|||
}
|
||||
}
|
||||
|
||||
void invokeCharStr16BitValue (OOCTXT* pctxt, ASN1UINT nchars,
|
||||
void invokeCharStr16BitValue (OOCTXT* pctxt, ASN1UINT nchars,
|
||||
ASN116BITCHAR* data)
|
||||
{
|
||||
if (0 != pctxt->pEventHandler) {
|
||||
|
@ -116,7 +116,7 @@ void invokeEnumValue (OOCTXT* pctxt, ASN1UINT value)
|
|||
}
|
||||
}
|
||||
|
||||
void invokeOpenTypeValue (OOCTXT* pctxt, ASN1UINT numocts,
|
||||
void invokeOpenTypeValue (OOCTXT* pctxt, ASN1UINT numocts,
|
||||
const ASN1OCTET* data)
|
||||
{
|
||||
if (0 != pctxt->pEventHandler) {
|
||||
|
|
|
@ -1,21 +1,21 @@
|
|||
/*
|
||||
* Copyright (C) 2004-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
/**
|
||||
* @file eventHandler.h
|
||||
* C event handler structure. This structure holds event handler function
|
||||
* @file eventHandler.h
|
||||
* C event handler structure. This structure holds event handler function
|
||||
* callbacks for use by the generated code.
|
||||
*/
|
||||
/**
|
||||
|
@ -44,8 +44,8 @@ extern "C" {
|
|||
|
||||
|
||||
/**
|
||||
* This is a function pointer for a callback function which is invoked
|
||||
* from within a decode function when an element of a SEQUENCE, SET,
|
||||
* This is a function pointer for a callback function which is invoked
|
||||
* from within a decode function when an element of a SEQUENCE, SET,
|
||||
* SEQUENCE OF, SET OF, or CHOICE construct is parsed.
|
||||
*
|
||||
* @param name For SEQUENCE, SET, or CHOICE, this is the name of the
|
||||
|
@ -63,8 +63,8 @@ typedef void (*StartElement) (const char* name, int index) ;
|
|||
|
||||
|
||||
/**
|
||||
* This is a function pointer for a callback function which is invoked from
|
||||
* within a decode function when parsing is complete on an element of a
|
||||
* This is a function pointer for a callback function which is invoked from
|
||||
* within a decode function when parsing is complete on an element of a
|
||||
* SEQUENCE, SET, SEQUENCE OF, SET OF, or CHOICE construct.
|
||||
*
|
||||
* @param name For SEQUENCE, SET, or CHOICE, this is the name of the
|
||||
|
@ -82,7 +82,7 @@ typedef void (*EndElement) (const char* name, int index) ;
|
|||
|
||||
|
||||
/**
|
||||
* This is a function pointer for a callback function which is invoked from
|
||||
* This is a function pointer for a callback function which is invoked from
|
||||
* within a decode function when a value of the BOOLEAN ASN.1 type is parsed.
|
||||
*
|
||||
* @param value Parsed value.
|
||||
|
@ -91,7 +91,7 @@ typedef void (*EndElement) (const char* name, int index) ;
|
|||
typedef void (*BoolValue) (ASN1BOOL value);
|
||||
|
||||
/**
|
||||
* This is a function pointer for a callback function which is invoked from
|
||||
* This is a function pointer for a callback function which is invoked from
|
||||
* within a decode function when a value of the INTERGER ASN.1 type is parsed.
|
||||
*
|
||||
* @param value Parsed value.
|
||||
|
@ -100,9 +100,9 @@ typedef void (*BoolValue) (ASN1BOOL value);
|
|||
typedef void (*IntValue) (ASN1INT value);
|
||||
|
||||
/**
|
||||
* This is a function pointer for a callback function which is invoked
|
||||
* from within a decode function when a value of the INTEGER ASN.1 type
|
||||
* is parsed. In this case, constraints on the integer value forced the
|
||||
* This is a function pointer for a callback function which is invoked
|
||||
* from within a decode function when a value of the INTEGER ASN.1 type
|
||||
* is parsed. In this case, constraints on the integer value forced the
|
||||
* use of unsigned integer C type to represent the value.
|
||||
*
|
||||
* @param value Parsed value.
|
||||
|
@ -111,19 +111,19 @@ typedef void (*IntValue) (ASN1INT value);
|
|||
typedef void (*UIntValue) (ASN1UINT value);
|
||||
|
||||
/**
|
||||
* This is a function pointer for a callback function which is invoked from
|
||||
* within a decode function when a value of the BIT STRING ASN.1 type is
|
||||
* This is a function pointer for a callback function which is invoked from
|
||||
* within a decode function when a value of the BIT STRING ASN.1 type is
|
||||
* parsed.
|
||||
*
|
||||
* @param numbits - Number of bits in the parsed value.
|
||||
* @param data - Pointer to a byte array that contains the bit
|
||||
* @param numbits - Number of bits in the parsed value.
|
||||
* @param data - Pointer to a byte array that contains the bit
|
||||
* string data.
|
||||
* @return - none
|
||||
*/
|
||||
*/
|
||||
typedef void (*BitStrValue) (ASN1UINT numbits, const ASN1OCTET* data);
|
||||
|
||||
/**
|
||||
* This is a function pointer for a callback function which is invoked from
|
||||
* This is a function pointer for a callback function which is invoked from
|
||||
* within a decode function when a value of one of the OCTET STRING ASN.1 type
|
||||
* is parsed.
|
||||
*
|
||||
|
@ -135,8 +135,8 @@ typedef void (*BitStrValue) (ASN1UINT numbits, const ASN1OCTET* data);
|
|||
typedef void (*OctStrValue) (ASN1UINT numocts, const ASN1OCTET* data) ;
|
||||
|
||||
/**
|
||||
* This is a function pointer for a callback function which is invoked from
|
||||
* within a decode function when a value of one of the 8-bit ASN.1 character
|
||||
* This is a function pointer for a callback function which is invoked from
|
||||
* within a decode function when a value of one of the 8-bit ASN.1 character
|
||||
* string types is parsed.
|
||||
*
|
||||
* @param value Null terminated character string value.
|
||||
|
@ -145,8 +145,8 @@ typedef void (*OctStrValue) (ASN1UINT numocts, const ASN1OCTET* data) ;
|
|||
typedef void (*CharStrValue) (const char* value) ;
|
||||
|
||||
/**
|
||||
* This is a function pointer for a callback function which is invoked from
|
||||
* within a decode function when a value of one of the 16-bit ASN.1 character
|
||||
* This is a function pointer for a callback function which is invoked from
|
||||
* within a decode function when a value of one of the 16-bit ASN.1 character
|
||||
* string types is parsed.
|
||||
*
|
||||
* This is used for the ASN.1 BmpString type.
|
||||
|
@ -160,7 +160,7 @@ typedef void (*CharStrValue) (const char* value) ;
|
|||
typedef void (*CharStrValue16Bit) (ASN1UINT nchars, ASN116BITCHAR* data) ;
|
||||
|
||||
/**
|
||||
* This is a function pointer for a callback function which is invoked from
|
||||
* This is a function pointer for a callback function which is invoked from
|
||||
* within a decode function when a value of the NULL ASN.1 type is parsed.
|
||||
*
|
||||
* @param - none
|
||||
|
@ -169,8 +169,8 @@ typedef void (*CharStrValue16Bit) (ASN1UINT nchars, ASN116BITCHAR* data) ;
|
|||
typedef void (*NullValue) (void) ;
|
||||
|
||||
/**
|
||||
* This is a function pointer for a callback function which is invoked from
|
||||
* within a decode function whn a value the OBJECT IDENTIFIER ASN.1 type is
|
||||
* This is a function pointer for a callback function which is invoked from
|
||||
* within a decode function whn a value the OBJECT IDENTIFIER ASN.1 type is
|
||||
* parsed.
|
||||
*
|
||||
* @param numSubIds Number of subidentifiers in the object identifier.
|
||||
|
@ -180,8 +180,8 @@ typedef void (*NullValue) (void) ;
|
|||
typedef void (*OidValue) (ASN1UINT numSubIds, ASN1UINT* pSubIds) ;
|
||||
|
||||
/**
|
||||
* This is a function pointer for a callback function which is invoked from
|
||||
* within a decode function when a value of the ENUMERATED ASN.1 type is
|
||||
* This is a function pointer for a callback function which is invoked from
|
||||
* within a decode function when a value of the ENUMERATED ASN.1 type is
|
||||
* parsed.
|
||||
*
|
||||
* @param value - Parsed enumerated value
|
||||
|
@ -190,7 +190,7 @@ typedef void (*OidValue) (ASN1UINT numSubIds, ASN1UINT* pSubIds) ;
|
|||
typedef void (*EnumValue) (ASN1UINT value) ;
|
||||
|
||||
/**
|
||||
* This is a function pointer for a callback function which is invoked from
|
||||
* This is a function pointer for a callback function which is invoked from
|
||||
* within a decode function when an ASN.1 open type is parsed.
|
||||
*
|
||||
* @param numocts Number of octets in the parsed value.
|
||||
|
@ -223,7 +223,7 @@ typedef struct EventHandler {
|
|||
|
||||
|
||||
/**
|
||||
* This function sets the event handler object within the context. It
|
||||
* This function sets the event handler object within the context. It
|
||||
* will overwrite the definition of any handler that was set previously.
|
||||
*
|
||||
* @param pctxt Context to which event handler has to be added.
|
||||
|
@ -233,8 +233,8 @@ typedef struct EventHandler {
|
|||
EXTERN void setEventHandler (OOCTXT* pctxt, EventHandler* pHandler);
|
||||
|
||||
/**
|
||||
* This function is called to remove the event handler current defined
|
||||
* in the context. This is done by setting the event handler object
|
||||
* This function is called to remove the event handler current defined
|
||||
* in the context. This is done by setting the event handler object
|
||||
* pointer to NULL.
|
||||
*
|
||||
* @param pctxt Context from which event handler has to be removed.
|
||||
|
@ -243,7 +243,7 @@ EXTERN void setEventHandler (OOCTXT* pctxt, EventHandler* pHandler);
|
|||
EXTERN void removeEventHandler (OOCTXT* pctxt);
|
||||
|
||||
/**
|
||||
* The following functions are invoked from within the generated
|
||||
* The following functions are invoked from within the generated
|
||||
* code to call the various user-defined event handler methods ..
|
||||
*/
|
||||
EXTERN void invokeStartElement (OOCTXT* pctxt, const char* name, int index);
|
||||
|
@ -252,33 +252,33 @@ EXTERN void invokeBoolValue (OOCTXT* pctxt, ASN1BOOL value);
|
|||
EXTERN void invokeIntValue (OOCTXT* pctxt, ASN1INT value);
|
||||
EXTERN void invokeUIntValue (OOCTXT* pctxt, ASN1UINT value);
|
||||
|
||||
EXTERN void invokeBitStrValue
|
||||
EXTERN void invokeBitStrValue
|
||||
(OOCTXT* pctxt, ASN1UINT numbits, const ASN1OCTET* data);
|
||||
|
||||
EXTERN void invokeOctStrValue
|
||||
EXTERN void invokeOctStrValue
|
||||
(OOCTXT* pctxt, ASN1UINT numocts, const ASN1OCTET* data);
|
||||
|
||||
EXTERN void invokeCharStrValue (OOCTXT* pctxt, const char* value);
|
||||
|
||||
EXTERN void invokeCharStr16BitValue
|
||||
EXTERN void invokeCharStr16BitValue
|
||||
(OOCTXT* pctxt, ASN1UINT nchars, ASN116BITCHAR* data);
|
||||
|
||||
EXTERN void invokeNullValue (OOCTXT* pctxt);
|
||||
|
||||
EXTERN void invokeOidValue
|
||||
EXTERN void invokeOidValue
|
||||
(OOCTXT* pctxt, ASN1UINT numSubIds, ASN1UINT* pSubIds);
|
||||
|
||||
EXTERN void invokeEnumValue (OOCTXT* pctxt, ASN1UINT value);
|
||||
|
||||
EXTERN void invokeOpenTypeValue
|
||||
EXTERN void invokeOpenTypeValue
|
||||
(OOCTXT* pctxt, ASN1UINT numocts, const ASN1OCTET* data);
|
||||
|
||||
/**
|
||||
* @}
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
/*
|
||||
* Copyright (C) 2004-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
/*
|
||||
* Copyright (C) 2004-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
@ -1797,4 +1797,3 @@ EXTERN int asn1PD_H235CryptoToken (OOCTXT* pctxt, H235CryptoToken* pvalue)
|
|||
|
||||
return (stat);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
/*
|
||||
* Copyright (C) 2004-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
@ -1266,4 +1266,3 @@ EXTERN int asn1PE_H235CryptoToken (OOCTXT* pctxt, H235CryptoToken* pvalue)
|
|||
|
||||
return (stat);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
/*
|
||||
* Copyright (C) 2004-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
@ -109,4 +109,3 @@ EXTERN const char* gs_H323_MESSAGES_GSM_UIM_vplmn_CharSet =
|
|||
|
||||
EXTERN const char* gs_H323_MESSAGES_AliasAddress_dialedDigits_CharSet =
|
||||
"#*,0123456789";
|
||||
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
/*
|
||||
* Copyright (C) 2004-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
/*
|
||||
* Copyright (C) 2004-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
@ -27197,4 +27197,3 @@ EXTERN int asn1PD_H225RasMessage (OOCTXT* pctxt, H225RasMessage* pvalue)
|
|||
|
||||
return (stat);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
/*
|
||||
* Copyright (C) 2004-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
@ -22593,4 +22593,3 @@ EXTERN int asn1PE_H225RasMessage (OOCTXT* pctxt, H225RasMessage* pvalue)
|
|||
|
||||
return (stat);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
/*
|
||||
* Copyright (C) 2004-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
@ -37,4 +37,3 @@ EXTERN const char* gs_MULTIMEDIA_SYSTEM_CONTROL_NetworkAccessParameters_networkA
|
|||
|
||||
EXTERN const char* gs_MULTIMEDIA_SYSTEM_CONTROL_UserInputIndication_signal_signalType_CharSet =
|
||||
"!#*0123456789ABCD";
|
||||
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
/*
|
||||
* Copyright (C) 2004-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
/*
|
||||
* Copyright (C) 2004-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
@ -42167,4 +42167,3 @@ EXTERN int asn1PD_H245MultimediaSystemControlMessage (OOCTXT* pctxt, H245Multime
|
|||
|
||||
return (stat);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
/*
|
||||
* Copyright (C) 2004-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
@ -26596,4 +26596,3 @@ EXTERN int asn1PE_H245MultimediaSystemControlMessage (OOCTXT* pctxt, H245Multime
|
|||
|
||||
return (stat);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
/*
|
||||
* Copyright (C) 1997-2004 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the LICENSE.txt file. It
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the LICENSE.txt file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
@ -20,7 +20,7 @@
|
|||
|
||||
ASN1UINT g_defBlkSize = XM_K_MEMBLKSIZ;
|
||||
|
||||
static OSMemLink* memHeapAddBlock (OSMemLink** ppMemLink,
|
||||
static OSMemLink* memHeapAddBlock (OSMemLink** ppMemLink,
|
||||
void* pMemBlk, int blockType);
|
||||
|
||||
typedef void OSMemElemDescr;
|
||||
|
@ -109,39 +109,39 @@ pMemBlk->freeElemOff = (ASN1USINT)(QOFFSETOF (pElem, pMemBlk->data) + 1); \
|
|||
#define SET_FREE_ELEM(pMemBlk, pElem) setLastElem (pMemBlk, pElem)
|
||||
|
||||
/* Memory debugging macros */
|
||||
#define RTMEMDIAG1(msg)
|
||||
#define RTMEMDIAG2(msg,a)
|
||||
#define RTMEMDIAG1(msg)
|
||||
#define RTMEMDIAG2(msg,a)
|
||||
#define RTMEMDIAG3(msg,a,b)
|
||||
#define RTMEMDIAG4(msg,a,b,c)
|
||||
#define FILLFREEMEM(mem,size)
|
||||
#define FILLNEWMEM(mem,size)
|
||||
#define FILLNEWMEM(mem,size)
|
||||
|
||||
#define CHECKMEMELEM(memblk,elem)
|
||||
#define CHECKMEMBLOCK(memheap,memblk)
|
||||
#define CHECKMEMHEAP(memheap)
|
||||
#define CHECKMEMHEAP(memheap)
|
||||
#define TRACEMEMELEM(memblk, elem, name)
|
||||
#define TRACEFREE(memlink,name)
|
||||
|
||||
|
||||
static void setLastElem (OSMemBlk* pMemBlk, OSMemElemDescr* pElem)
|
||||
static void setLastElem (OSMemBlk* pMemBlk, OSMemElemDescr* pElem)
|
||||
{
|
||||
if (pElem == 0) {
|
||||
pMemBlk->freeElemOff = 0;
|
||||
return;
|
||||
if (pElem == 0) {
|
||||
pMemBlk->freeElemOff = 0;
|
||||
return;
|
||||
}
|
||||
else if (ISLAST (pElem))
|
||||
return;
|
||||
else if (ISLAST (pElem))
|
||||
return;
|
||||
else if (pMemBlk->freeElemOff > QOFFSETOF (pElem, pMemBlk->data) + 1) {
|
||||
pElem_nextFreeOff (pElem) = QOFFSETOF (GET_FREE_ELEM (pMemBlk), pElem);
|
||||
FORCE_SET_FREE_ELEM (pMemBlk, pElem);
|
||||
}
|
||||
else if (pMemBlk->freeElemOff == 0) {
|
||||
pElem_nextFreeOff (pElem) = 0;
|
||||
FORCE_SET_FREE_ELEM (pMemBlk, pElem);
|
||||
}
|
||||
else {
|
||||
SET_FREE (pElem);
|
||||
pElem_nextFreeOff (pElem) = 0;
|
||||
pElem_nextFreeOff (pElem) = QOFFSETOF (GET_FREE_ELEM (pMemBlk), pElem);
|
||||
FORCE_SET_FREE_ELEM (pMemBlk, pElem);
|
||||
}
|
||||
else if (pMemBlk->freeElemOff == 0) {
|
||||
pElem_nextFreeOff (pElem) = 0;
|
||||
FORCE_SET_FREE_ELEM (pMemBlk, pElem);
|
||||
}
|
||||
else {
|
||||
SET_FREE (pElem);
|
||||
pElem_nextFreeOff (pElem) = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -170,7 +170,7 @@ void* memHeapAlloc (void** ppvMemHeap, int nbytes)
|
|||
ppMemLink = &pMemHeap->phead;
|
||||
|
||||
/* if size is greater than 2**19, then allocate as RAW block */
|
||||
|
||||
|
||||
if (nunits > (1<<16) - 2) {
|
||||
void *data;
|
||||
|
||||
|
@ -188,9 +188,9 @@ void* memHeapAlloc (void** ppvMemHeap, int nbytes)
|
|||
/* save size of the RAW memory block behind the pMemLink */
|
||||
*(int*)(((char*)pMemLink) + sizeof (OSMemLink)) = nbytes;
|
||||
ast_mutex_unlock(&pMemHeap->pLock);
|
||||
return data;
|
||||
return data;
|
||||
}
|
||||
|
||||
|
||||
RTMEMDIAG2 ("memHeapAlloc: adjusted nbytes = %d\n", nbytes);
|
||||
|
||||
/* Try to allocate a slot from an existing block on the list */
|
||||
|
@ -216,26 +216,26 @@ void* memHeapAlloc (void** ppvMemHeap, int nbytes)
|
|||
|
||||
pElem_flags (pElem) = 0;
|
||||
if (pMemBlk->lastElemOff != 0)
|
||||
pElem_prevOff (pElem) =
|
||||
pElem_prevOff (pElem) =
|
||||
(ASN1USINT)(pMemBlk->free_x - pMemBlk->lastElemOff + 1);
|
||||
else
|
||||
else
|
||||
pElem_prevOff (pElem) = 0;
|
||||
|
||||
|
||||
pPrevElem = GET_LAST_ELEM (pMemBlk);
|
||||
if (pPrevElem != 0)
|
||||
CLEAR_LAST (pPrevElem);
|
||||
|
||||
pElem_nunits (pElem) = (ASN1USINT)nunits;
|
||||
|
||||
pElem_nunits (pElem) = (ASN1USINT)nunits;
|
||||
pElem_beginOff (pElem) = QOFFSETOF (pElem, pMemBlk->data);
|
||||
pMemBlk->lastElemOff = (ASN1USINT)(pMemBlk->free_x + 1);
|
||||
|
||||
mem_p = (void*) (pElem_data (pElem));
|
||||
|
||||
|
||||
/* sizeof (OSMemElemDescr) == 1 unit */
|
||||
pMemBlk->free_x += nunits + 1;
|
||||
|
||||
pMemBlk->free_x += nunits + 1;
|
||||
|
||||
SET_LAST_ELEM (pMemBlk, pElem);
|
||||
|
||||
|
||||
FILLNEWMEM (mem_p, nunits * 8u);
|
||||
TRACEMEMELEM(pMemBlk, pElem, "Allocated");
|
||||
CHECKMEMELEM (pMemBlk, pElem);
|
||||
|
@ -249,54 +249,54 @@ void* memHeapAlloc (void** ppvMemHeap, int nbytes)
|
|||
if (0 == mem_p) {
|
||||
for (pMemLink = *ppMemLink; pMemLink != 0; pMemLink = pMemLink->pnext) {
|
||||
if (pMemLink->blockType & RTMEMRAW) continue;
|
||||
|
||||
|
||||
pMemBlk = (OSMemBlk*) pMemLink->pMemBlk;
|
||||
|
||||
if (nunits <= (ASN1UINT)pMemBlk->freeMem) {
|
||||
OSMemElemDescr* pElem = GET_FREE_ELEM(pMemBlk), *pPrevFree = 0;
|
||||
|
||||
RTMEMDIAG2
|
||||
("memHeapAlloc: try to reuse empty elems in pMemBlk = 0x%x...\n",
|
||||
RTMEMDIAG2
|
||||
("memHeapAlloc: try to reuse empty elems in pMemBlk = 0x%x...\n",
|
||||
pMemBlk);
|
||||
|
||||
while (pElem != 0) {
|
||||
if (ISFREE (pElem)) {
|
||||
if (ISFREE (pElem)) {
|
||||
if (nunits <= (ASN1UINT)pElem_nunits (pElem)) {
|
||||
RTMEMDIAG3
|
||||
RTMEMDIAG3
|
||||
("memHeapAlloc: "
|
||||
"found an exisiting free element 0x%x, size %d\n",
|
||||
"found an exisiting free element 0x%x, size %d\n",
|
||||
pElem, (pElem_nunits (pElem) * 8u));
|
||||
|
||||
if (pMemBlk->freeElemOff ==
|
||||
QOFFSETOF (pElem, pMemBlk->data) + 1)
|
||||
|
||||
if (pMemBlk->freeElemOff ==
|
||||
QOFFSETOF (pElem, pMemBlk->data) + 1)
|
||||
{
|
||||
|
||||
|
||||
/* modify the pMemBlk->freeElemOff value if necsry */
|
||||
|
||||
OSMemElemDescr* nextFree = GET_NEXT_FREE (pElem);
|
||||
FORCE_SET_FREE_ELEM (pMemBlk, nextFree);
|
||||
FORCE_SET_FREE_ELEM (pMemBlk, nextFree);
|
||||
}
|
||||
else if (pPrevFree != 0) {
|
||||
OSMemElemDescr* pNextFree = GET_NEXT_FREE (pElem);
|
||||
if (pNextFree != 0)
|
||||
pElem_nextFreeOff (pPrevFree) = QOFFSETOF (pNextFree,
|
||||
pElem_nextFreeOff (pPrevFree) = QOFFSETOF (pNextFree,
|
||||
pPrevFree);
|
||||
else
|
||||
pElem_nextFreeOff (pPrevFree) = 0;
|
||||
}
|
||||
}
|
||||
|
||||
CLEAR_FREE (pElem);
|
||||
|
||||
/* set beginOff value */
|
||||
|
||||
pElem_beginOff (pElem) = QOFFSETOF (pElem, pMemBlk->data);
|
||||
|
||||
|
||||
pMemBlk->freeMem -= pElem_nunits (pElem);
|
||||
|
||||
CHECKMEMELEM (pMemBlk, pElem);
|
||||
CHECKMEMBLOCK (pMemHeap, pMemBlk);
|
||||
|
||||
mem_p = memHeapRealloc
|
||||
|
||||
mem_p = memHeapRealloc
|
||||
(ppvMemHeap, pElem_data (pElem), nunits * 8u);
|
||||
if (mem_p != 0) {
|
||||
FILLNEWMEM (mem_p, nunits * 8u);
|
||||
|
@ -310,7 +310,7 @@ void* memHeapAlloc (void** ppvMemHeap, int nbytes)
|
|||
}
|
||||
if (mem_p != 0) break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* If not successful, malloc a new block and alloc from it */
|
||||
|
@ -322,16 +322,16 @@ void* memHeapAlloc (void** ppvMemHeap, int nbytes)
|
|||
|
||||
RTMEMDIAG1 ("memHeapAlloc: alloc block..\n");
|
||||
|
||||
allocSize = (ASN1UINT) ((((ASN1UINT)nunits) * 8u) +
|
||||
allocSize = (ASN1UINT) ((((ASN1UINT)nunits) * 8u) +
|
||||
sizeof (OSMemBlk) + sizeof_OSMemElemDescr);
|
||||
allocSize = (ASN1UINT) (allocSize < defBlkSize) ? defBlkSize :
|
||||
allocSize = (ASN1UINT) (allocSize < defBlkSize) ? defBlkSize :
|
||||
((allocSize + defBlkSize - 1) / defBlkSize * defBlkSize);
|
||||
dataUnits = (ASN1UINT)((allocSize - sizeof (OSMemBlk)) >> 3u);
|
||||
if (dataUnits >= (1u<<16)) {
|
||||
dataUnits = (ASN1UINT)((1u<<16) - 1);
|
||||
allocSize = (ASN1UINT)
|
||||
((((ASN1UINT)dataUnits) * 8u) + sizeof (OSMemBlk));
|
||||
}
|
||||
}
|
||||
|
||||
pmem = (ASN1OCTET*) malloc (allocSize + sizeof (OSMemLink));
|
||||
if (0 != pmem) {
|
||||
|
@ -347,7 +347,7 @@ void* memHeapAlloc (void** ppvMemHeap, int nbytes)
|
|||
pElem_beginOff (pElem) = QOFFSETOF (pElem, pMemBlk->data);
|
||||
|
||||
/* sizeof (OSMemElemDescr) == 1 unit */
|
||||
pMemBlk->free_x = (ASN1USINT)(nunits + 1);
|
||||
pMemBlk->free_x = (ASN1USINT)(nunits + 1);
|
||||
|
||||
pMemBlk->freeMem = 0;
|
||||
pMemBlk->nunits = (ASN1USINT)dataUnits;
|
||||
|
@ -355,7 +355,7 @@ void* memHeapAlloc (void** ppvMemHeap, int nbytes)
|
|||
pMemBlk->freeElemOff = 0;
|
||||
pMemBlk->nsaved = 0;
|
||||
|
||||
if (memHeapAddBlock (ppMemLink, pMemBlk, RTMEMSTD | RTMEMLINK) == 0)
|
||||
if (memHeapAddBlock (ppMemLink, pMemBlk, RTMEMSTD | RTMEMLINK) == 0)
|
||||
{
|
||||
free (pmem);
|
||||
ast_mutex_unlock(&pMemHeap->pLock);
|
||||
|
@ -378,7 +378,7 @@ void* memHeapAlloc (void** ppvMemHeap, int nbytes)
|
|||
}
|
||||
RTMEMDIAG2 ("memHeapAlloc: pMemBlk = 0x%x\n", pMemBlk);
|
||||
RTMEMDIAG2 ("memHeapAlloc: pMemBlk->free_x = %d\n", pMemBlk->free_x);
|
||||
RTMEMDIAG2 ("memHeapAlloc: pMemBlk->size = %d\n",
|
||||
RTMEMDIAG2 ("memHeapAlloc: pMemBlk->size = %d\n",
|
||||
pMemBlk->nunits * 8u);
|
||||
RTMEMDIAG2 ("memHeapAlloc: mem_p = 0x%x\n", mem_p);
|
||||
RTMEMDIAG2 ("memHeapAlloc: sizeof (short) = %d\n", sizeof(short));
|
||||
|
@ -394,7 +394,7 @@ void* memHeapAllocZ (void** ppvMemHeap, int nbytes)
|
|||
return ptr;
|
||||
}
|
||||
|
||||
void memHeapFreePtr (void** ppvMemHeap, void* mem_p)
|
||||
void memHeapFreePtr (void** ppvMemHeap, void* mem_p)
|
||||
{
|
||||
OSMemHeap* pMemHeap;
|
||||
OSMemLink** ppMemLink;
|
||||
|
@ -416,7 +416,7 @@ void memHeapFreePtr (void** ppvMemHeap, void* mem_p)
|
|||
|
||||
for (pMemLink = *ppMemLink; pMemLink != 0; pMemLink = pMemLink->pnextRaw) {
|
||||
if ((pMemLink->blockType & RTMEMRAW) &&
|
||||
pMemLink->pMemBlk == mem_p)
|
||||
pMemLink->pMemBlk == mem_p)
|
||||
{
|
||||
if(pMemLink->pnext != 0) {
|
||||
pMemLink->pnext->pprev = pMemLink->pprev;
|
||||
|
@ -429,12 +429,12 @@ void memHeapFreePtr (void** ppvMemHeap, void* mem_p)
|
|||
}
|
||||
if (pPrevMemLink != 0)
|
||||
pPrevMemLink->pnextRaw = pMemLink->pnextRaw;
|
||||
else if (*ppMemLink != 0 && (*ppMemLink)->pnextRaw == 0 &&
|
||||
else if (*ppMemLink != 0 && (*ppMemLink)->pnextRaw == 0 &&
|
||||
*ppMemLink != pMemLink->pnextRaw)
|
||||
{
|
||||
(*ppMemLink)->pnextRaw = pMemLink->pnextRaw;
|
||||
}
|
||||
if ((pMemLink->blockType & RTMEMLINK) &&
|
||||
if ((pMemLink->blockType & RTMEMLINK) &&
|
||||
(pMemLink->blockType & RTMEMMALLOC))
|
||||
{
|
||||
free (pMemLink);
|
||||
|
@ -460,7 +460,7 @@ void memHeapFreePtr (void** ppvMemHeap, void* mem_p)
|
|||
RTMEMDIAG2 ("memHeapFreePtr: "
|
||||
"the element 0x%x is already freed!\n", pElem);
|
||||
ast_mutex_unlock(&pMemHeap->pLock);
|
||||
return;
|
||||
return;
|
||||
}
|
||||
|
||||
if (ISSAVED (pElem)) {
|
||||
|
@ -474,17 +474,17 @@ void memHeapFreePtr (void** ppvMemHeap, void* mem_p)
|
|||
CHECKMEMBLOCK(pMemHeap, pMemBlk);
|
||||
|
||||
RTMEMDIAG2 ("memHeapFreePtr: pMemBlk = 0x%x\n", pMemBlk);
|
||||
RTMEMDIAG2 ("memHeapFreePtr: pMemBlk->size = %d\n",
|
||||
RTMEMDIAG2 ("memHeapFreePtr: pMemBlk->size = %d\n",
|
||||
pMemBlk->nunits * 8u);
|
||||
|
||||
if (ISLAST (pElem)) { /* is it the last? */
|
||||
OSMemElemDescr* pPrevElem = GETPREV (pElem);
|
||||
|
||||
|
||||
CHECKMEMELEM (pMemBlk, pPrevElem);
|
||||
|
||||
pMemBlk->free_x -= (pElem_nunits (pElem) + 1);
|
||||
|
||||
FILLFREEMEM (&pMemBlk->data [pMemBlk->free_x * 8u],
|
||||
FILLFREEMEM (&pMemBlk->data [pMemBlk->free_x * 8u],
|
||||
(pElem_nunits (pElem) + 1) * 8u);
|
||||
|
||||
if (pPrevElem != 0 && ISFREE (pPrevElem)) {
|
||||
|
@ -493,10 +493,10 @@ void memHeapFreePtr (void** ppvMemHeap, void* mem_p)
|
|||
pMemBlk->free_x -= (pElem_nunits (pPrevElem) + 1);
|
||||
pMemBlk->freeMem -= pElem_nunits (pPrevElem);
|
||||
SET_LAST_ELEM (pMemBlk, GETPREV (pPrevElem));
|
||||
|
||||
|
||||
/* wasn't it the last elem in block? */
|
||||
if (pMemBlk->lastElemOff != 0) {
|
||||
|
||||
if (pMemBlk->lastElemOff != 0) {
|
||||
|
||||
/* correct nextFreeOff for previous free element */
|
||||
|
||||
pFreeElem = GET_FREE_ELEM (pMemBlk);
|
||||
|
@ -505,7 +505,7 @@ void memHeapFreePtr (void** ppvMemHeap, void* mem_p)
|
|||
}
|
||||
else {
|
||||
OSMemElemDescr* pNextFree = 0;
|
||||
|
||||
|
||||
while (pFreeElem < pPrevElem) {
|
||||
pNextFree = pFreeElem;
|
||||
pFreeElem = GET_NEXT_FREE (pFreeElem);
|
||||
|
@ -518,15 +518,15 @@ void memHeapFreePtr (void** ppvMemHeap, void* mem_p)
|
|||
SET_LAST_ELEM (pMemBlk, pPrevElem);
|
||||
}
|
||||
|
||||
RTMEMDIAG2 ("memHeapFreePtr: pMemBlk->free_x = %d\n",
|
||||
RTMEMDIAG2 ("memHeapFreePtr: pMemBlk->free_x = %d\n",
|
||||
pMemBlk->free_x);
|
||||
|
||||
/* The question is: do we really want to get rid of the */
|
||||
/* block or should we keep it around for reuse? */
|
||||
if (pMemBlk->lastElemOff == 0) { /* was it the last elem in block? */
|
||||
|
||||
|
||||
if ((pMemHeap->flags & RT_MH_DONTKEEPFREE) ||
|
||||
(pMemHeap->keepFreeUnits > 0 &&
|
||||
(pMemHeap->keepFreeUnits > 0 &&
|
||||
pMemHeap->freeUnits + pMemBlk->nunits > pMemHeap->keepFreeUnits))
|
||||
{
|
||||
ASN1OCTET blockType = pMemBlk->plink->blockType;
|
||||
|
@ -543,7 +543,7 @@ void memHeapFreePtr (void** ppvMemHeap, void* mem_p)
|
|||
pMemBlk->plink->pprev->pnext = pMemBlk->plink->pnext;
|
||||
}
|
||||
else { /* head */
|
||||
if (pMemBlk->plink->pnext != 0 &&
|
||||
if (pMemBlk->plink->pnext != 0 &&
|
||||
!(pMemBlk->plink->pnext->blockType & RTMEMRAW))
|
||||
{
|
||||
pMemBlk->plink->pnext->pnextRaw = (*ppMemLink)->pnextRaw;
|
||||
|
@ -552,14 +552,14 @@ void memHeapFreePtr (void** ppvMemHeap, void* mem_p)
|
|||
}
|
||||
FILLFREEMEM (pMemBlk->plink, sizeof (*pMemBlk->plink));
|
||||
FILLFREEMEM (pMemBlk->data, (pMemBlk->nunits * 8u));
|
||||
|
||||
|
||||
free (pMemBlk->plink);
|
||||
|
||||
|
||||
if (!(blockType & RTMEMLINK)) {
|
||||
FILLFREEMEM (pMemBlk, sizeof (*pMemBlk));
|
||||
free (pMemBlk);
|
||||
}
|
||||
RTMEMDIAG2 ("memHeapFreePtr: pMemBlk = 0x%x was freed\n",
|
||||
RTMEMDIAG2 ("memHeapFreePtr: pMemBlk = 0x%x was freed\n",
|
||||
pMemBlk);
|
||||
}
|
||||
else {
|
||||
|
@ -575,7 +575,7 @@ void memHeapFreePtr (void** ppvMemHeap, void* mem_p)
|
|||
}
|
||||
else {
|
||||
SET_LAST (GET_LAST_ELEM (pMemBlk));
|
||||
FILLFREEMEM (((char*) &pMemBlk->data[0]) + (pMemBlk->free_x * 8u),
|
||||
FILLFREEMEM (((char*) &pMemBlk->data[0]) + (pMemBlk->free_x * 8u),
|
||||
(pMemBlk->nunits - pMemBlk->free_x) * 8u);
|
||||
CHECKMEMBLOCK (pMemHeap, pMemBlk);
|
||||
}
|
||||
|
@ -586,25 +586,25 @@ void memHeapFreePtr (void** ppvMemHeap, void* mem_p)
|
|||
SET_FREE_ELEM(pMemBlk, pElem);
|
||||
|
||||
pMemBlk->freeMem += pElem_nunits (pElem);
|
||||
RTMEMDIAG2 ("memHeapFreePtr: element 0x%x marked as free.\n",
|
||||
RTMEMDIAG2 ("memHeapFreePtr: element 0x%x marked as free.\n",
|
||||
pElem);
|
||||
|
||||
/* try to unite free blocks, if possible */
|
||||
if (!ISFIRST (pElem)) {
|
||||
if (ISFREE (GETPREV (pElem))) {
|
||||
OSMemElemDescr* prevelem_p = GETPREV (pElem);
|
||||
|
||||
|
||||
/* +1 because the OSMemElemDescr has size ONE unit (8 bytes) */
|
||||
pElem_nunits (prevelem_p) += pElem_nunits (pElem) + 1;
|
||||
pElem_nunits (prevelem_p) += pElem_nunits (pElem) + 1;
|
||||
|
||||
pElem = prevelem_p;
|
||||
pMemBlk->freeMem ++; /* sizeof (OSMemElemDescr) == 1 unit */
|
||||
}
|
||||
else {
|
||||
/* look for nearest previous free block to correct nextFreeOff */
|
||||
|
||||
|
||||
OSMemElemDescr* prevelem_p = pElem;
|
||||
|
||||
|
||||
do {
|
||||
prevelem_p = GETPREV (prevelem_p);
|
||||
}
|
||||
|
@ -612,32 +612,32 @@ void memHeapFreePtr (void** ppvMemHeap, void* mem_p)
|
|||
|
||||
if (prevelem_p != 0) {
|
||||
OSMemElemDescr* pNextFree = GET_NEXT_FREE (prevelem_p);
|
||||
if (pNextFree != 0)
|
||||
if (pNextFree != 0)
|
||||
pElem_nextFreeOff (pElem) = QOFFSETOF (pNextFree, pElem);
|
||||
else
|
||||
pElem_nextFreeOff (pElem) = 0;
|
||||
pElem_nextFreeOff (prevelem_p) = QOFFSETOF (pElem, prevelem_p);
|
||||
|
||||
|
||||
CHECKMEMELEM (pMemBlk, prevelem_p);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!ISLAST (pElem) && ISFREE (GETNEXT (pElem))) {
|
||||
if (pElem && !ISLAST (pElem) && ISFREE (GETNEXT (pElem))) {
|
||||
OSMemElemDescr* nextelem_p = GETNEXT (pElem);
|
||||
|
||||
|
||||
/* +1 because the OSMemElemDescr has size ONE unit (8 bytes) */
|
||||
pElem_nunits (pElem) += pElem_nunits (nextelem_p) + 1;
|
||||
pElem_nunits (pElem) += pElem_nunits (nextelem_p) + 1;
|
||||
|
||||
if (pElem_nextFreeOff (nextelem_p) == 0)
|
||||
pElem_nextFreeOff (pElem) = 0;
|
||||
else
|
||||
pElem_nextFreeOff (pElem) =
|
||||
pElem_nextFreeOff (pElem) =
|
||||
QOFFSETOF (GET_NEXT_FREE (nextelem_p), pElem);
|
||||
pMemBlk->freeMem ++;
|
||||
}
|
||||
|
||||
/* correct the prevOff field of next element */
|
||||
if (!ISLAST (pElem)) {
|
||||
if (pElem && !ISLAST (pElem)) {
|
||||
OSMemElemDescr* nextelem_p = GETNEXT (pElem);
|
||||
pElem_prevOff (nextelem_p) = QOFFSETOF (nextelem_p, pElem);
|
||||
}
|
||||
|
@ -648,10 +648,10 @@ void memHeapFreePtr (void** ppvMemHeap, void* mem_p)
|
|||
CHECKMEMBLOCK (pMemHeap, pMemBlk);
|
||||
}
|
||||
ast_mutex_unlock(&pMemHeap->pLock);
|
||||
}
|
||||
}
|
||||
|
||||
static void initNewFreeElement (OSMemBlk* pMemBlk,
|
||||
OSMemElemDescr* pNewElem, OSMemElemDescr* pElem)
|
||||
static void initNewFreeElement (OSMemBlk* pMemBlk,
|
||||
OSMemElemDescr* pNewElem, OSMemElemDescr* pElem)
|
||||
{
|
||||
OSMemElemDescr *pNextElem, *pPrevElem = 0;
|
||||
|
||||
|
@ -662,11 +662,11 @@ static void initNewFreeElement (OSMemBlk* pMemBlk,
|
|||
|
||||
pElem_prevOff (pNewElem) = QOFFSETOF (pNewElem, pElem);
|
||||
|
||||
if (pMemBlk->freeElemOff != 0 &&
|
||||
if (pMemBlk->freeElemOff != 0 &&
|
||||
pMemBlk->freeElemOff < QOFFSETOF (pElem, pMemBlk->data) + 1)
|
||||
{
|
||||
/* look for nearest previous free block to correct its nextFreeOff */
|
||||
|
||||
|
||||
pPrevElem = pElem;
|
||||
|
||||
do {
|
||||
|
@ -677,21 +677,21 @@ static void initNewFreeElement (OSMemBlk* pMemBlk,
|
|||
if (pPrevElem != 0) { /* if it is not first free element... */
|
||||
|
||||
/* correct nextFreeOff for prev free element */
|
||||
|
||||
|
||||
pElem_nextFreeOff (pPrevElem) = QOFFSETOF (pNewElem, pPrevElem);
|
||||
}
|
||||
else { /* if it is first free element in the block */
|
||||
FORCE_SET_FREE_ELEM (pMemBlk, pNewElem);
|
||||
}
|
||||
|
||||
|
||||
pNextElem = GETNEXT (pNewElem);
|
||||
if (ISFREE (pNextElem)) {
|
||||
|
||||
if (pNextElem && ISFREE (pNextElem)) {
|
||||
|
||||
/* if the next elem is free, then unite them together */
|
||||
|
||||
pElem_nunits (pNewElem) += pElem_nunits (pNextElem) + 1;
|
||||
if (pElem_nextFreeOff (pNextElem) != 0)
|
||||
pElem_nextFreeOff (pNewElem) = QOFFSETOF (GET_NEXT_FREE (pNextElem),
|
||||
pElem_nextFreeOff (pNewElem) = QOFFSETOF (GET_NEXT_FREE (pNextElem),
|
||||
pNewElem);
|
||||
else
|
||||
pElem_nextFreeOff (pNewElem) = 0;
|
||||
|
@ -709,7 +709,7 @@ static void initNewFreeElement (OSMemBlk* pMemBlk,
|
|||
pNextElem = GETNEXT (pNextElem);
|
||||
|
||||
/* set nextFreeOff for new element */
|
||||
|
||||
|
||||
if (pNextElem != 0)
|
||||
pElem_nextFreeOff (pNewElem) = QOFFSETOF (pNextElem, pNewElem);
|
||||
else
|
||||
|
@ -745,15 +745,15 @@ void* memHeapRealloc (void** ppvMemHeap, void* mem_p, int nbytes_)
|
|||
|
||||
for (pMemLink = *ppMemLink; pMemLink != 0; pMemLink = pMemLink->pnextRaw) {
|
||||
if ((pMemLink->blockType & RTMEMRAW) &&
|
||||
pMemLink->pMemBlk == mem_p)
|
||||
pMemLink->pMemBlk == mem_p)
|
||||
{
|
||||
if (pMemLink->blockType & RTMEMMALLOC) {
|
||||
void *newMemBlk = realloc (pMemLink->pMemBlk, nbytes_);
|
||||
if (newMemBlk == 0)
|
||||
if (newMemBlk == 0)
|
||||
return 0;
|
||||
pMemLink->pMemBlk = newMemBlk;
|
||||
}
|
||||
else
|
||||
else
|
||||
return 0;
|
||||
*(int*)(((char*)pMemLink) + sizeof (OSMemLink)) = nbytes_;
|
||||
return pMemLink->pMemBlk;
|
||||
|
@ -767,7 +767,7 @@ void* memHeapRealloc (void** ppvMemHeap, void* mem_p, int nbytes_)
|
|||
|
||||
pElem = (OSMemElemDescr*) (((char*)mem_p) - sizeof_OSMemElemDescr);
|
||||
|
||||
RTMEMDIAG3 ("memHeapRealloc: mem_p = 0x%x, old size = %d,", mem_p,
|
||||
RTMEMDIAG3 ("memHeapRealloc: mem_p = 0x%x, old size = %d,", mem_p,
|
||||
pElem_nunits (pElem) * 8u);
|
||||
RTMEMDIAG2 (" new nbytes = %d\n", nbytes);
|
||||
|
||||
|
@ -780,51 +780,51 @@ void* memHeapRealloc (void** ppvMemHeap, void* mem_p, int nbytes_)
|
|||
CHECKMEMBLOCK(pMemHeap, pMemBlk);
|
||||
|
||||
if ((unsigned)pElem_nunits (pElem) < nunits) { /* expanding */
|
||||
|
||||
|
||||
if (nunits - pElem_nunits (pElem) <= (unsigned)pMemBlk->nunits) {
|
||||
|
||||
/* Try to expand the existing element in the existing block */
|
||||
|
||||
if (ISLAST (pElem)) { /* if the last element in the block */
|
||||
|
||||
|
||||
/* if the free space in the block is enough */
|
||||
|
||||
if ((int)(nunits - pElem_nunits (pElem)) <=
|
||||
(int)(pMemBlk->nunits - pMemBlk->free_x))
|
||||
{
|
||||
|
||||
if ((int)(nunits - pElem_nunits (pElem)) <=
|
||||
(int)(pMemBlk->nunits - pMemBlk->free_x))
|
||||
{
|
||||
pMemBlk->free_x += nunits - pElem_nunits (pElem);
|
||||
pElem_nunits (pElem) = (ASN1USINT)nunits;
|
||||
|
||||
RTMEMDIAG1 ("memHeapRealloc: "
|
||||
"memory element is expanded.\n");
|
||||
|
||||
FILLNEWMEM (&pMemBlk->data [(pMemBlk->free_x -
|
||||
(nunits - pElem_nunits (pElem))) * 8u],
|
||||
|
||||
FILLNEWMEM (&pMemBlk->data [(pMemBlk->free_x -
|
||||
(nunits - pElem_nunits (pElem))) * 8u],
|
||||
(nunits - pElem_nunits (pElem)) * 8u);
|
||||
|
||||
|
||||
TRACEMEMELEM (pMemBlk, pElem, "Reallocated");
|
||||
CHECKMEMELEM (pMemBlk, pElem);
|
||||
CHECKMEMBLOCK (pMemHeap, pMemBlk);
|
||||
|
||||
return (mem_p);
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
OSMemElemDescr* pNextElem, *pFreeElem;
|
||||
OSMemElemDescr* pNextElem, *pFreeElem;
|
||||
unsigned sumSize = pElem_nunits (pElem), freeMem = 0;
|
||||
|
||||
|
||||
RTMEMDIAG1 ("memHeapRealloc: look for free element after "
|
||||
"current block.\n");
|
||||
|
||||
/* look for free element after pElem */
|
||||
|
||||
pNextElem = GETNEXT (pElem);
|
||||
if (ISFREE (pNextElem)) {
|
||||
if (pNextElem && ISFREE (pNextElem)) {
|
||||
/* +1 'cos sizeof (OSMemElemDescr) == 1 unit */
|
||||
sumSize += pElem_nunits (pNextElem) + 1;
|
||||
sumSize += pElem_nunits (pNextElem) + 1;
|
||||
freeMem++;
|
||||
}
|
||||
|
||||
|
||||
if (sumSize >= nunits) {
|
||||
|
||||
RTMEMDIAG1 ("memHeapRealloc: reuse free element.\n");
|
||||
|
@ -835,15 +835,15 @@ void* memHeapRealloc (void** ppvMemHeap, void* mem_p, int nbytes_)
|
|||
FORCE_SET_FREE_ELEM (pMemBlk, GET_NEXT_FREE (pNextElem));
|
||||
}
|
||||
else if (pFreeElem < pElem) {
|
||||
|
||||
|
||||
/* look for previous free elem to correct nextFreeOff */
|
||||
|
||||
for (; pFreeElem != 0 && pFreeElem < pNextElem;) {
|
||||
OSMemElemDescr* pNextFreeElem =
|
||||
OSMemElemDescr* pNextFreeElem =
|
||||
GET_NEXT_FREE (pFreeElem);
|
||||
if (pNextFreeElem == pNextElem) {
|
||||
if (pElem_nextFreeOff (pNextElem) != 0)
|
||||
pElem_nextFreeOff (pFreeElem) = QOFFSETOF
|
||||
pElem_nextFreeOff (pFreeElem) = QOFFSETOF
|
||||
(GET_NEXT_FREE (pNextElem), pFreeElem);
|
||||
else
|
||||
pElem_nextFreeOff (pFreeElem) = 0;
|
||||
|
@ -856,15 +856,15 @@ void* memHeapRealloc (void** ppvMemHeap, void* mem_p, int nbytes_)
|
|||
}
|
||||
|
||||
/* reuse empty elements after the pElem */
|
||||
|
||||
|
||||
pMemBlk->freeMem += freeMem;
|
||||
|
||||
|
||||
if (sumSize - nunits > 1) {
|
||||
OSMemElemDescr* pNewElem;
|
||||
|
||||
|
||||
/* if sumSize is too large, then create new empty element */
|
||||
|
||||
pNewElem = (OSMemElemDescr*)
|
||||
pNewElem = (OSMemElemDescr*)
|
||||
(pElem_data (pElem) + nbytes);
|
||||
pElem_nunits (pNewElem) = (ASN1USINT)(sumSize - nunits - 1);
|
||||
|
||||
|
@ -884,7 +884,7 @@ void* memHeapRealloc (void** ppvMemHeap, void* mem_p, int nbytes_)
|
|||
if (pNextElem != 0)
|
||||
pElem_prevOff (pNextElem) = QOFFSETOF (pNextElem, pElem);
|
||||
}
|
||||
|
||||
|
||||
TRACEMEMELEM (pMemBlk, pElem, "Reallocated");
|
||||
CHECKMEMELEM (pMemBlk, pElem);
|
||||
CHECKMEMELEM (pMemBlk, (!ISLAST (pElem)) ? GETNEXT (pElem) : 0);
|
||||
|
@ -901,14 +901,14 @@ void* memHeapRealloc (void** ppvMemHeap, void* mem_p, int nbytes_)
|
|||
CHECKMEMHEAP (pMemHeap);
|
||||
|
||||
newMem_p = memHeapAlloc (ppvMemHeap, nbytes);
|
||||
|
||||
|
||||
if (newMem_p == 0)
|
||||
return 0;
|
||||
|
||||
/* if the old memory block is marked as saved then mark the new block
|
||||
as saved as well. */
|
||||
|
||||
if (ISSAVED (pElem))
|
||||
if (ISSAVED (pElem))
|
||||
memHeapMarkSaved (ppvMemHeap, newMem_p, TRUE);
|
||||
|
||||
CHECKMEMHEAP (pMemHeap);
|
||||
|
@ -927,7 +927,7 @@ void* memHeapRealloc (void** ppvMemHeap, void* mem_p, int nbytes_)
|
|||
}
|
||||
else { /* shrinking */
|
||||
RTMEMDIAG1 ("memHeapRealloc: shrinking ...\n");
|
||||
|
||||
|
||||
/* just free the pointer, if nbytes == 0 */
|
||||
|
||||
if (nbytes == 0) {
|
||||
|
@ -939,15 +939,15 @@ void* memHeapRealloc (void** ppvMemHeap, void* mem_p, int nbytes_)
|
|||
/* do not shrink, if size diff is too small */
|
||||
|
||||
/* sizeof (OSMemElemDescr) == 1 unit */
|
||||
if (pElem_nunits (pElem) - nunits > 1) {
|
||||
|
||||
/* if it is the last element in the block, then just change the size
|
||||
if (pElem_nunits (pElem) - nunits > 1) {
|
||||
|
||||
/* if it is the last element in the block, then just change the size
|
||||
and free_x. */
|
||||
|
||||
if (ISLAST (pElem)) {
|
||||
pMemBlk->free_x -= (pElem_nunits (pElem) - nunits);
|
||||
|
||||
FILLFREEMEM (&pMemBlk->data [pMemBlk->free_x * 8u],
|
||||
FILLFREEMEM (&pMemBlk->data [pMemBlk->free_x * 8u],
|
||||
(pElem_nunits (pElem) - nunits) * 8u);
|
||||
}
|
||||
else {
|
||||
|
@ -958,14 +958,14 @@ void* memHeapRealloc (void** ppvMemHeap, void* mem_p, int nbytes_)
|
|||
pNewElem = (OSMemElemDescr*) (pElem_data (pElem) + nbytes);
|
||||
|
||||
/* sizeof (OSMemElemDescr) == 1 unit */
|
||||
pElem_nunits (pNewElem) = (ASN1USINT)(pElem_nunits (pElem) - nunits - 1);
|
||||
|
||||
pElem_nunits (pNewElem) = (ASN1USINT)(pElem_nunits (pElem) - nunits - 1);
|
||||
|
||||
initNewFreeElement (pMemBlk, pNewElem, pElem);
|
||||
|
||||
|
||||
pMemBlk->freeMem += (pElem_nunits (pElem) - nunits) - 1;
|
||||
}
|
||||
pElem_nunits (pElem) = (ASN1USINT)nunits;
|
||||
|
||||
|
||||
TRACEMEMELEM (pMemBlk, pElem, "Reallocated");
|
||||
CHECKMEMELEM (pMemBlk, pElem);
|
||||
CHECKMEMELEM (pMemBlk, (!ISLAST (pElem)) ? GETNEXT (pElem) : pElem);
|
||||
|
@ -999,9 +999,9 @@ void memHeapFreeAll (void** ppvMemHeap)
|
|||
pMemLink2 = pMemLink;
|
||||
pMemLink = pMemLink2->pnext;
|
||||
|
||||
RTMEMDIAG3 ("memHeapFreeAll: pMemLink2 = 0x%x, pMemLink = 0x%x\n",
|
||||
RTMEMDIAG3 ("memHeapFreeAll: pMemLink2 = 0x%x, pMemLink = 0x%x\n",
|
||||
pMemLink2, pMemLink);
|
||||
|
||||
|
||||
#ifdef _MEMDEBUG
|
||||
if (pMemLink2->blockType & RTMEMSTD) {
|
||||
OSMemBlk* pMemBlk = (OSMemBlk*) pMemLink2->pMemBlk;
|
||||
|
@ -1035,9 +1035,9 @@ void memHeapFreeAll (void** ppvMemHeap)
|
|||
|
||||
/* free link and block */
|
||||
|
||||
if (((pMemLink2->blockType & RTMEMSTD) ||
|
||||
if (((pMemLink2->blockType & RTMEMSTD) ||
|
||||
(pMemLink2->blockType & RTMEMMALLOC)) &&
|
||||
!(pMemLink2->blockType & RTMEMLINK))
|
||||
!(pMemLink2->blockType & RTMEMLINK))
|
||||
free (pMemLink2->pMemBlk);
|
||||
free (pMemLink2);
|
||||
}
|
||||
|
@ -1061,7 +1061,7 @@ void memHeapAddRef (void** ppvMemHeap)
|
|||
void memHeapRelease (void** ppvMemHeap)
|
||||
{
|
||||
OSMemHeap** ppMemHeap = (OSMemHeap**)ppvMemHeap;
|
||||
OSMemHeap* pMemHeap = *ppMemHeap;
|
||||
OSMemHeap* pMemHeap;
|
||||
|
||||
if (ppMemHeap != 0 && *ppMemHeap != 0 && --(*ppMemHeap)->refCnt == 0) {
|
||||
OSMemLink* pMemLink, *pMemLink2;
|
||||
|
@ -1079,6 +1079,7 @@ void memHeapRelease (void** ppvMemHeap)
|
|||
}
|
||||
|
||||
if ((*ppMemHeap)->flags & RT_MH_FREEHEAPDESC) {
|
||||
pMemHeap = *ppMemHeap;
|
||||
ast_mutex_destroy(&pMemHeap->pLock);
|
||||
free (*ppMemHeap);
|
||||
}
|
||||
|
@ -1088,11 +1089,11 @@ void memHeapRelease (void** ppvMemHeap)
|
|||
|
||||
/* This function is used for marking memory block as "saved". It means
|
||||
* that the memory block containing the specified memory pointer won't be
|
||||
* freed after calls to memHeapFreeAll/memHeapReset. User is responsible
|
||||
* freed after calls to memHeapFreeAll/memHeapReset. User is responsible
|
||||
* for freeing the marked memory block by call to memFreeBlock */
|
||||
|
||||
void* memHeapMarkSaved (void** ppvMemHeap, const void* mem_p,
|
||||
ASN1BOOL saved)
|
||||
void* memHeapMarkSaved (void** ppvMemHeap, const void* mem_p,
|
||||
ASN1BOOL saved)
|
||||
{
|
||||
OSMemHeap* pMemHeap;
|
||||
OSMemLink* pMemLink;
|
||||
|
@ -1100,7 +1101,7 @@ void* memHeapMarkSaved (void** ppvMemHeap, const void* mem_p,
|
|||
|
||||
RTMEMDIAG2 ("memHeapMarkSaved: for mem_p = 0x%x\n", mem_p);
|
||||
|
||||
if (ppvMemHeap == 0 || *ppvMemHeap == 0 || mem_p == 0)
|
||||
if (ppvMemHeap == 0 || *ppvMemHeap == 0 || mem_p == 0)
|
||||
return 0;
|
||||
|
||||
pMemHeap = *(OSMemHeap**)ppvMemHeap;
|
||||
|
@ -1113,7 +1114,7 @@ void* memHeapMarkSaved (void** ppvMemHeap, const void* mem_p,
|
|||
|
||||
for (; pMemLink != 0; pMemLink = pMemLink->pnextRaw) {
|
||||
if ((pMemLink->blockType & RTMEMRAW) &&
|
||||
pMemLink->pMemBlk == mem_p)
|
||||
pMemLink->pMemBlk == mem_p)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
@ -1131,7 +1132,7 @@ void* memHeapMarkSaved (void** ppvMemHeap, const void* mem_p,
|
|||
"already free!\n", pElem);
|
||||
|
||||
ast_mutex_unlock(&pMemHeap->pLock);
|
||||
return 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if ((ISSAVED (pElem) && !saved) || (!ISSAVED (pElem) && saved)) {
|
||||
|
@ -1143,7 +1144,7 @@ void* memHeapMarkSaved (void** ppvMemHeap, const void* mem_p,
|
|||
|
||||
pMemLink = pMemBlk->plink;
|
||||
|
||||
if (saved)
|
||||
if (saved)
|
||||
SET_SAVED (pMemBlk, pElem);
|
||||
else
|
||||
CLEAR_SAVED (pMemBlk, pElem);
|
||||
|
@ -1153,7 +1154,7 @@ void* memHeapMarkSaved (void** ppvMemHeap, const void* mem_p,
|
|||
ast_mutex_unlock(&pMemHeap->pLock);
|
||||
return 0;
|
||||
}
|
||||
if (saved && nsaved > 0)
|
||||
if (saved && nsaved > 0)
|
||||
pMemLink->blockType |= RTMEMSAVED;
|
||||
else if (nsaved == 0)
|
||||
pMemLink->blockType &= (~RTMEMSAVED);
|
||||
|
@ -1203,16 +1204,16 @@ void memHeapReset (void** ppvMemHeap)
|
|||
|
||||
/* add memory block to list */
|
||||
|
||||
static OSMemLink* memHeapAddBlock (OSMemLink** ppMemLink,
|
||||
static OSMemLink* memHeapAddBlock (OSMemLink** ppMemLink,
|
||||
void* pMemBlk, int blockType)
|
||||
{
|
||||
OSMemLink* pMemLink;
|
||||
|
||||
/* if pMemBlk has RTMEMLINK flags it means that it is allocated
|
||||
/* if pMemBlk has RTMEMLINK flags it means that it is allocated
|
||||
* cooperatively with OSMemLink, and we don't need to do additional
|
||||
* allocations for it. Just use pointer's arithemtic. */
|
||||
|
||||
if (blockType & RTMEMLINK)
|
||||
if (blockType & RTMEMLINK)
|
||||
pMemLink = (OSMemLink*) (((ASN1OCTET*)pMemBlk) - sizeof (OSMemLink));
|
||||
else {
|
||||
pMemLink = (OSMemLink*) malloc (
|
||||
|
@ -1222,7 +1223,7 @@ static OSMemLink* memHeapAddBlock (OSMemLink** ppMemLink,
|
|||
to perform rtMemRealloc through malloc/memcpy/free */
|
||||
*(int*)(((char*)pMemLink) + sizeof (OSMemLink)) = (int)-1;
|
||||
}
|
||||
if (pMemLink == NULL)
|
||||
if (pMemLink == NULL)
|
||||
return NULL;
|
||||
pMemLink->blockType = (ASN1OCTET)blockType;
|
||||
pMemLink->pMemBlk = pMemBlk;
|
||||
|
@ -1241,15 +1242,15 @@ static OSMemLink* memHeapAddBlock (OSMemLink** ppMemLink,
|
|||
pMemLink->pnextRaw = 0;
|
||||
}
|
||||
|
||||
*ppMemLink = pMemLink;
|
||||
*ppMemLink = pMemLink;
|
||||
if (pMemLink->pnext != 0)
|
||||
pMemLink->pnext->pprev = pMemLink;
|
||||
((OSMemBlk*)pMemBlk)->plink = pMemLink; /*!AB */
|
||||
|
||||
RTMEMDIAG2 ("memHeapAddBlock: pMemLink = 0x%x\n", pMemLink);
|
||||
RTMEMDIAG2 ("memHeapAddBlock: pMemLink->pnext = 0x%x\n",
|
||||
RTMEMDIAG2 ("memHeapAddBlock: pMemLink->pnext = 0x%x\n",
|
||||
pMemLink->pnext);
|
||||
RTMEMDIAG2 ("memHeapAddBlock: pMemLink->pprev = 0x%x\n",
|
||||
RTMEMDIAG2 ("memHeapAddBlock: pMemLink->pprev = 0x%x\n",
|
||||
pMemLink->pprev);
|
||||
|
||||
return pMemLink;
|
||||
|
@ -1262,7 +1263,7 @@ int memHeapCheckPtr (void** ppvMemHeap, void* mem_p)
|
|||
|
||||
RTMEMDIAG2 ("memHeapCheckPtr: for mem_p = 0x%x\n", mem_p);
|
||||
|
||||
if (ppvMemHeap == 0 || *ppvMemHeap == 0 || mem_p == 0)
|
||||
if (ppvMemHeap == 0 || *ppvMemHeap == 0 || mem_p == 0)
|
||||
return 0;
|
||||
pMemHeap = *(OSMemHeap**)ppvMemHeap;
|
||||
|
||||
|
@ -1272,7 +1273,7 @@ int memHeapCheckPtr (void** ppvMemHeap, void* mem_p)
|
|||
|
||||
for (; pMemLink != 0; pMemLink = pMemLink->pnext) {
|
||||
if (pMemLink->blockType & RTMEMRAW) {
|
||||
|
||||
|
||||
/* if RAW block, the pointer should be stored in pMemBlk */
|
||||
|
||||
if (pMemLink->pMemBlk == mem_p) {
|
||||
|
@ -1282,17 +1283,17 @@ int memHeapCheckPtr (void** ppvMemHeap, void* mem_p)
|
|||
}
|
||||
else {
|
||||
OSMemBlk* pMemBlk = (OSMemBlk*)pMemLink->pMemBlk;
|
||||
|
||||
|
||||
/* Check, is the pointer inside this memory page */
|
||||
|
||||
if (mem_p > pMemLink->pMemBlk &&
|
||||
if (mem_p > pMemLink->pMemBlk &&
|
||||
mem_p < (void*)(((ASN1OCTET*)pMemLink->pMemBlk) + pMemBlk->nunits * 8u))
|
||||
{
|
||||
/* Check, is the pointer a correct element of the mem page */
|
||||
|
||||
OSMemElemDescr* pElem = (OSMemElemDescr*) pMemBlk->data;
|
||||
for (; pElem != 0; pElem = GETNEXT (pElem)) {
|
||||
|
||||
|
||||
void* curMem_p = (void*) pElem_data (pElem);
|
||||
if (curMem_p == mem_p && !ISFREE (pElem)) {
|
||||
ast_mutex_unlock(&pMemHeap->pLock);
|
||||
|
@ -1311,7 +1312,7 @@ void memHeapSetProperty (void** ppvMemHeap, ASN1UINT propId, void* pProp)
|
|||
{
|
||||
OSMemHeap* pMemHeap;
|
||||
|
||||
if (ppvMemHeap == 0)
|
||||
if (ppvMemHeap == 0)
|
||||
return;
|
||||
|
||||
if (*ppvMemHeap == 0)
|
||||
|
@ -1332,9 +1333,9 @@ void memHeapSetProperty (void** ppvMemHeap, ASN1UINT propId, void* pProp)
|
|||
break;
|
||||
}
|
||||
ast_mutex_unlock(&pMemHeap->pLock);
|
||||
}
|
||||
}
|
||||
|
||||
int memHeapCreate (void** ppvMemHeap)
|
||||
int memHeapCreate (void** ppvMemHeap)
|
||||
{
|
||||
OSMemHeap* pMemHeap;
|
||||
if (ppvMemHeap == 0) return ASN_E_INVPARAM;
|
||||
|
@ -1349,4 +1350,3 @@ int memHeapCreate (void** ppvMemHeap)
|
|||
*ppvMemHeap = (void*)pMemHeap;
|
||||
return ASN_OK;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
/*
|
||||
* Copyright (C) 2004-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
/*
|
||||
* Copyright (C) 2004-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
@ -28,6 +28,7 @@
|
|||
#include "ooGkClient.h"
|
||||
#include "ooh323ep.h"
|
||||
#include "ooCalls.h"
|
||||
#include "ooCmdChannel.h"
|
||||
|
||||
/** Global endpoint structure */
|
||||
extern OOH323EndPoint gH323ep;
|
||||
|
@ -60,7 +61,7 @@ OOH323CallData* ooCreateCall(char* type, char*callToken)
|
|||
{
|
||||
OOTRACEERR1("ERROR:Memory - ooCreateCall - call\n");
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
memset(call, 0, sizeof(OOH323CallData));
|
||||
ast_cond_init(&call->gkWait, NULL);
|
||||
ast_mutex_init(&call->GkLock);
|
||||
|
@ -78,7 +79,7 @@ OOH323CallData* ooCreateCall(char* type, char*callToken)
|
|||
else {
|
||||
call->ourCallerId[0] = '\0';
|
||||
}
|
||||
|
||||
|
||||
memset(&call->callIdentifier, 0, sizeof(H225CallIdentifier));
|
||||
memset(&call->confIdentifier, 0, sizeof(H225ConferenceIdentifier));
|
||||
|
||||
|
@ -105,7 +106,7 @@ OOH323CallData* ooCreateCall(char* type, char*callToken)
|
|||
// May 20090713. Fix it for Video session
|
||||
|
||||
OO_SETFLAG(call->flags, OO_M_AUDIOSESSION);
|
||||
|
||||
|
||||
call->callState = OO_CALL_CREATED;
|
||||
call->callEndReason = OO_REASON_UNKNOWN;
|
||||
call->pCallFwdData = NULL;
|
||||
|
@ -114,13 +115,13 @@ OOH323CallData* ooCreateCall(char* type, char*callToken)
|
|||
{
|
||||
call->callingPartyNumber = NULL;
|
||||
}
|
||||
else{
|
||||
else{
|
||||
if(ooUtilsIsStrEmpty(gH323ep.callingPartyNumber))
|
||||
{
|
||||
call->callingPartyNumber = NULL;
|
||||
}
|
||||
else{
|
||||
call->callingPartyNumber = (char*) memAlloc(call->pctxt,
|
||||
call->callingPartyNumber = (char*) memAlloc(call->pctxt,
|
||||
strlen(gH323ep.callingPartyNumber)+1);
|
||||
if(call->callingPartyNumber)
|
||||
{
|
||||
|
@ -154,14 +155,14 @@ OOH323CallData* ooCreateCall(char* type, char*callToken)
|
|||
call->masterSlaveState = OO_MasterSlave_Idle;
|
||||
call->statusDeterminationNumber = 0;
|
||||
call->localTermCapState = OO_LocalTermCapExchange_Idle;
|
||||
call->remoteTermCapState = OO_RemoteTermCapExchange_Idle;
|
||||
call->remoteTermCapState = OO_RemoteTermCapExchange_Idle;
|
||||
call->ourCaps = NULL;
|
||||
call->remoteCaps = NULL;
|
||||
call->jointCaps = NULL;
|
||||
dListInit(&call->remoteFastStartOLCs);
|
||||
call->remoteTermCapSeqNo =0;
|
||||
call->localTermCapSeqNo = 0;
|
||||
memcpy(&call->capPrefs, &gH323ep.capPrefs, sizeof(OOCapPrefs));
|
||||
memcpy(&call->capPrefs, &gH323ep.capPrefs, sizeof(OOCapPrefs));
|
||||
call->logicalChans = NULL;
|
||||
call->noOfLogicalChannels = 0;
|
||||
call->logicalChanNoBase = 1001;
|
||||
|
@ -172,7 +173,8 @@ OOH323CallData* ooCreateCall(char* type, char*callToken)
|
|||
call->msdRetries = 0;
|
||||
call->pFastStartRes = NULL;
|
||||
call->usrData = NULL;
|
||||
OOTRACEINFO3("Created a new call (%s, %s)\n", call->callType,
|
||||
ooCreateCallCmdConnection(call);
|
||||
OOTRACEINFO3("Created a new call (%s, %s)\n", call->callType,
|
||||
call->callToken);
|
||||
/* Add new call to calllist */
|
||||
ooAddCallToList (call);
|
||||
|
@ -206,8 +208,8 @@ int ooAddCallToList(OOH323CallData *call)
|
|||
|
||||
int ooEndCall(OOH323CallData *call)
|
||||
{
|
||||
OOTRACEDBGA4("In ooEndCall call state is - %s (%s, %s)\n",
|
||||
ooGetCallStateText(call->callState), call->callType,
|
||||
OOTRACEDBGA4("In ooEndCall call state is - %s (%s, %s)\n",
|
||||
ooGetCallStateText(call->callState), call->callType,
|
||||
call->callToken);
|
||||
|
||||
if(call->callState == OO_CALL_REMOVED) {
|
||||
|
@ -223,9 +225,10 @@ int ooEndCall(OOH323CallData *call)
|
|||
call->callState = OO_CALL_CLEARED;
|
||||
}
|
||||
|
||||
if(call->callState == OO_CALL_CLEARED || call->callState == OO_CALL_CLEAR_RELEASESENT)
|
||||
if(call->callState == OO_CALL_CLEARED || ((strcmp(call->callType, "incoming")) &&
|
||||
call->callState == OO_CALL_CLEAR_RELEASESENT))
|
||||
{
|
||||
ooCleanCall(call);
|
||||
ooCleanCall(call);
|
||||
call->callState = OO_CALL_REMOVED;
|
||||
return OO_OK;
|
||||
}
|
||||
|
@ -248,16 +251,16 @@ int ooEndCall(OOH323CallData *call)
|
|||
}
|
||||
|
||||
|
||||
if(!OO_TESTFLAG(call->flags, OO_M_RELEASE_BUILT))
|
||||
if(!OO_TESTFLAG(call->flags, OO_M_RELEASE_BUILT))
|
||||
{
|
||||
if(call->callState == OO_CALL_CLEAR ||
|
||||
if(call->callState == OO_CALL_CLEAR ||
|
||||
call->callState == OO_CALL_CLEAR_RELEASERECVD)
|
||||
{
|
||||
ooSendReleaseComplete(call);
|
||||
OO_SETFLAG(call->flags, OO_M_RELEASE_BUILT);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return OO_OK;
|
||||
}
|
||||
|
||||
|
@ -296,8 +299,8 @@ int ooCleanCall(OOH323CallData *call)
|
|||
{
|
||||
OOCTXT *pctxt;
|
||||
|
||||
OOTRACEWARN4 ("Cleaning Call (%s, %s)- reason:%s\n",
|
||||
call->callType, call->callToken,
|
||||
OOTRACEWARN4 ("Cleaning Call (%s, %s)- reason:%s\n",
|
||||
call->callType, call->callToken,
|
||||
ooGetReasonCodeText (call->callEndReason));
|
||||
|
||||
/* First clean all the logical channels, if not already cleaned. */
|
||||
|
@ -320,7 +323,7 @@ int ooCleanCall(OOH323CallData *call)
|
|||
{
|
||||
ooCloseH245Listener(call);
|
||||
}
|
||||
|
||||
|
||||
/* Close H225 connection, if not already closed. */
|
||||
if (0 != call->pH225Channel && 0 != call->pH225Channel->sock)
|
||||
{
|
||||
|
@ -339,7 +342,7 @@ int ooCleanCall(OOH323CallData *call)
|
|||
}
|
||||
|
||||
ooRemoveCallFromList (call);
|
||||
OOTRACEINFO3("Removed call (%s, %s) from list\n", call->callType,
|
||||
OOTRACEINFO3("Removed call (%s, %s) from list\n", call->callType,
|
||||
call->callToken);
|
||||
|
||||
if(call->pCallFwdData && call->pCallFwdData->fwdedByRemote)
|
||||
|
@ -392,7 +395,7 @@ int ooCallSetCallerId(OOH323CallData* call, const char* callerid)
|
|||
|
||||
int ooCallSetCallingPartyNumber(OOH323CallData *call, const char *number)
|
||||
{
|
||||
if(call->callingPartyNumber)
|
||||
if(call->callingPartyNumber)
|
||||
memFreePtr(call->pctxt, call->callingPartyNumber);
|
||||
|
||||
call->callingPartyNumber = (char*) memAlloc(call->pctxt, strlen(number)+1);
|
||||
|
@ -402,7 +405,7 @@ int ooCallSetCallingPartyNumber(OOH323CallData *call, const char *number)
|
|||
}
|
||||
else{
|
||||
OOTRACEERR3("Error:Memory - ooCallSetCallingPartyNumber - "
|
||||
"callingPartyNumber.(%s, %s)\n", call->callType,
|
||||
"callingPartyNumber.(%s, %s)\n", call->callType,
|
||||
call->callToken);
|
||||
return OO_FAILED;
|
||||
}
|
||||
|
@ -424,14 +427,14 @@ int ooCallGetCallingPartyNumber(OOH323CallData *call, char *buffer, int len)
|
|||
return OO_OK;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return OO_FAILED;
|
||||
}
|
||||
|
||||
|
||||
int ooCallSetCalledPartyNumber(OOH323CallData *call, const char *number)
|
||||
{
|
||||
if(call->calledPartyNumber)
|
||||
if(call->calledPartyNumber)
|
||||
memFreePtr(call->pctxt, call->calledPartyNumber);
|
||||
|
||||
call->calledPartyNumber = (char*) memAlloc(call->pctxt, strlen(number)+1);
|
||||
|
@ -441,7 +444,7 @@ int ooCallSetCalledPartyNumber(OOH323CallData *call, const char *number)
|
|||
}
|
||||
else{
|
||||
OOTRACEERR3("Error:Memory - ooCallSetCalledPartyNumber - "
|
||||
"calledPartyNumber.(%s, %s)\n", call->callType,
|
||||
"calledPartyNumber.(%s, %s)\n", call->callType,
|
||||
call->callToken);
|
||||
return OO_FAILED;
|
||||
}
|
||||
|
@ -458,7 +461,7 @@ int ooCallGetCalledPartyNumber(OOH323CallData *call, char *buffer, int len)
|
|||
return OO_OK;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return OO_FAILED;
|
||||
}
|
||||
|
||||
|
@ -503,7 +506,7 @@ int ooCallAddAlias
|
|||
call->remoteAliases = psNewAlias;
|
||||
}
|
||||
|
||||
OOTRACEDBGC5("Added %s alias %s to call. (%s, %s)\n",
|
||||
OOTRACEDBGC5("Added %s alias %s to call. (%s, %s)\n",
|
||||
local?"local":"remote", value, call->callType, call->callToken);
|
||||
return OO_OK;
|
||||
}
|
||||
|
@ -530,8 +533,8 @@ int ooCallAddAliasEmailID(OOH323CallData *call, const char* email)
|
|||
int ooCallAddAliasURLID(OOH323CallData *call, const char* url)
|
||||
{
|
||||
return ooCallAddAlias(call, T_H225AliasAddress_url_ID, url, TRUE);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
int ooCallAddRemoteAliasH323ID(OOH323CallData *call, const char* h323id)
|
||||
{
|
||||
|
@ -547,63 +550,63 @@ int ooCallAddRemoteAliasDialedDigits
|
|||
|
||||
|
||||
|
||||
/* Used to override global end point capabilities and add call specific
|
||||
/* Used to override global end point capabilities and add call specific
|
||||
capabilities */
|
||||
|
||||
int ooCallAddG726Capability(OOH323CallData *call, int cap, int txframes,
|
||||
int ooCallAddG726Capability(OOH323CallData *call, int cap, int txframes,
|
||||
int rxframes, OOBOOL silenceSuppression, int dir,
|
||||
cb_StartReceiveChannel startReceiveChannel,
|
||||
cb_StartTransmitChannel startTransmitChannel,
|
||||
cb_StopReceiveChannel stopReceiveChannel,
|
||||
cb_StopTransmitChannel stopTransmitChannel)
|
||||
{
|
||||
return ooCapabilityAddSimpleCapability(call, cap, txframes, rxframes,
|
||||
silenceSuppression, dir, startReceiveChannel,
|
||||
startTransmitChannel, stopReceiveChannel,
|
||||
return ooCapabilityAddSimpleCapability(call, cap, txframes, rxframes,
|
||||
silenceSuppression, dir, startReceiveChannel,
|
||||
startTransmitChannel, stopReceiveChannel,
|
||||
stopTransmitChannel, FALSE);
|
||||
}
|
||||
int ooCallAddAMRNBCapability(OOH323CallData *call, int cap, int txframes,
|
||||
int ooCallAddAMRNBCapability(OOH323CallData *call, int cap, int txframes,
|
||||
int rxframes, OOBOOL silenceSuppression, int dir,
|
||||
cb_StartReceiveChannel startReceiveChannel,
|
||||
cb_StartTransmitChannel startTransmitChannel,
|
||||
cb_StopReceiveChannel stopReceiveChannel,
|
||||
cb_StopTransmitChannel stopTransmitChannel)
|
||||
{
|
||||
return ooCapabilityAddSimpleCapability(call, cap, txframes, rxframes,
|
||||
silenceSuppression, dir, startReceiveChannel,
|
||||
startTransmitChannel, stopReceiveChannel,
|
||||
return ooCapabilityAddSimpleCapability(call, cap, txframes, rxframes,
|
||||
silenceSuppression, dir, startReceiveChannel,
|
||||
startTransmitChannel, stopReceiveChannel,
|
||||
stopTransmitChannel, FALSE);
|
||||
}
|
||||
|
||||
int ooCallAddSpeexCapability(OOH323CallData *call, int cap, int txframes,
|
||||
int ooCallAddSpeexCapability(OOH323CallData *call, int cap, int txframes,
|
||||
int rxframes, OOBOOL silenceSuppression, int dir,
|
||||
cb_StartReceiveChannel startReceiveChannel,
|
||||
cb_StartTransmitChannel startTransmitChannel,
|
||||
cb_StopReceiveChannel stopReceiveChannel,
|
||||
cb_StopTransmitChannel stopTransmitChannel)
|
||||
{
|
||||
return ooCapabilityAddSimpleCapability(call, cap, txframes, rxframes,
|
||||
silenceSuppression, dir, startReceiveChannel,
|
||||
startTransmitChannel, stopReceiveChannel,
|
||||
return ooCapabilityAddSimpleCapability(call, cap, txframes, rxframes,
|
||||
silenceSuppression, dir, startReceiveChannel,
|
||||
startTransmitChannel, stopReceiveChannel,
|
||||
stopTransmitChannel, FALSE);
|
||||
}
|
||||
|
||||
int ooCallAddG7231Capability(OOH323CallData *call, int cap, int txframes,
|
||||
int ooCallAddG7231Capability(OOH323CallData *call, int cap, int txframes,
|
||||
int rxframes, OOBOOL silenceSuppression, int dir,
|
||||
cb_StartReceiveChannel startReceiveChannel,
|
||||
cb_StartTransmitChannel startTransmitChannel,
|
||||
cb_StopReceiveChannel stopReceiveChannel,
|
||||
cb_StopTransmitChannel stopTransmitChannel)
|
||||
{
|
||||
return ooCapabilityAddSimpleCapability(call, cap, txframes, rxframes,
|
||||
silenceSuppression, dir, startReceiveChannel,
|
||||
startTransmitChannel, stopReceiveChannel,
|
||||
return ooCapabilityAddSimpleCapability(call, cap, txframes, rxframes,
|
||||
silenceSuppression, dir, startReceiveChannel,
|
||||
startTransmitChannel, stopReceiveChannel,
|
||||
stopTransmitChannel, FALSE);
|
||||
}
|
||||
|
||||
|
||||
|
||||
int ooCallAddG729Capability(OOH323CallData *call, int cap, int txframes,
|
||||
int ooCallAddG729Capability(OOH323CallData *call, int cap, int txframes,
|
||||
int rxframes, int dir,
|
||||
cb_StartReceiveChannel startReceiveChannel,
|
||||
cb_StartTransmitChannel startTransmitChannel,
|
||||
|
@ -611,12 +614,12 @@ int ooCallAddG729Capability(OOH323CallData *call, int cap, int txframes,
|
|||
cb_StopTransmitChannel stopTransmitChannel)
|
||||
{
|
||||
return ooCapabilityAddSimpleCapability(call, cap, txframes, rxframes, FALSE,
|
||||
dir, startReceiveChannel, startTransmitChannel,
|
||||
dir, startReceiveChannel, startTransmitChannel,
|
||||
stopReceiveChannel, stopTransmitChannel, FALSE);
|
||||
}
|
||||
|
||||
/*
|
||||
int ooCallAddG726Capability(OOH323CallData *call, int cap, int txframes,
|
||||
int ooCallAddG726Capability(OOH323CallData *call, int cap, int txframes,
|
||||
int rxframes, int dir,
|
||||
cb_StartReceiveChannel startReceiveChannel,
|
||||
cb_StartTransmitChannel startTransmitChannel,
|
||||
|
@ -624,12 +627,12 @@ int ooCallAddG726Capability(OOH323CallData *call, int cap, int txframes,
|
|||
cb_StopTransmitChannel stopTransmitChannel)
|
||||
{
|
||||
return ooCapabilityAddSimpleCapability(call, cap, txframes, rxframes, FALSE,
|
||||
dir, startReceiveChannel, startTransmitChannel,
|
||||
dir, startReceiveChannel, startTransmitChannel,
|
||||
stopReceiveChannel, stopTransmitChannel, FALSE);
|
||||
}
|
||||
*/
|
||||
|
||||
int ooCallAddG728Capability(OOH323CallData *call, int cap, int txframes,
|
||||
int ooCallAddG728Capability(OOH323CallData *call, int cap, int txframes,
|
||||
int rxframes, int dir,
|
||||
cb_StartReceiveChannel startReceiveChannel,
|
||||
cb_StartTransmitChannel startTransmitChannel,
|
||||
|
@ -637,11 +640,11 @@ int ooCallAddG728Capability(OOH323CallData *call, int cap, int txframes,
|
|||
cb_StopTransmitChannel stopTransmitChannel)
|
||||
{
|
||||
return ooCapabilityAddSimpleCapability(call, cap, txframes, rxframes, FALSE,
|
||||
dir, startReceiveChannel, startTransmitChannel,
|
||||
dir, startReceiveChannel, startTransmitChannel,
|
||||
stopReceiveChannel, stopTransmitChannel, FALSE);
|
||||
}
|
||||
|
||||
int ooCallAddG711Capability(OOH323CallData *call, int cap, int txframes,
|
||||
int ooCallAddG711Capability(OOH323CallData *call, int cap, int txframes,
|
||||
int rxframes, int dir,
|
||||
cb_StartReceiveChannel startReceiveChannel,
|
||||
cb_StartTransmitChannel startTransmitChannel,
|
||||
|
@ -649,28 +652,28 @@ int ooCallAddG711Capability(OOH323CallData *call, int cap, int txframes,
|
|||
cb_StopTransmitChannel stopTransmitChannel)
|
||||
{
|
||||
return ooCapabilityAddSimpleCapability(call, cap, txframes, rxframes, FALSE,
|
||||
dir, startReceiveChannel, startTransmitChannel,
|
||||
dir, startReceiveChannel, startTransmitChannel,
|
||||
stopReceiveChannel, stopTransmitChannel, FALSE);
|
||||
}
|
||||
|
||||
int ooCallAddGSMCapability
|
||||
(OOH323CallData* call, int cap, ASN1USINT framesPerPkt,
|
||||
(OOH323CallData* call, int cap, ASN1USINT framesPerPkt,
|
||||
OOBOOL comfortNoise, OOBOOL scrambled, int dir,
|
||||
cb_StartReceiveChannel startReceiveChannel,
|
||||
cb_StartTransmitChannel startTransmitChannel,
|
||||
cb_StopReceiveChannel stopReceiveChannel,
|
||||
cb_StopTransmitChannel stopTransmitChannel)
|
||||
{
|
||||
return ooCapabilityAddGSMCapability(call, cap, framesPerPkt, comfortNoise,
|
||||
scrambled, dir, startReceiveChannel,
|
||||
return ooCapabilityAddGSMCapability(call, cap, framesPerPkt, comfortNoise,
|
||||
scrambled, dir, startReceiveChannel,
|
||||
startTransmitChannel, stopReceiveChannel,
|
||||
stopTransmitChannel, FALSE);
|
||||
}
|
||||
|
||||
|
||||
int ooCallAddH263VideoCapability
|
||||
(OOH323CallData *call, int cap, unsigned sqcifMPI, unsigned qcifMPI,
|
||||
unsigned cifMPI, unsigned cif4MPI, unsigned cif16MPI, unsigned maxBitRate,
|
||||
(OOH323CallData *call, int cap, unsigned sqcifMPI, unsigned qcifMPI,
|
||||
unsigned cifMPI, unsigned cif4MPI, unsigned cif16MPI, unsigned maxBitRate,
|
||||
int dir, cb_StartReceiveChannel startReceiveChannel,
|
||||
cb_StartTransmitChannel startTransmitChannel,
|
||||
cb_StopReceiveChannel stopReceiveChannel,
|
||||
|
@ -680,7 +683,7 @@ int ooCallAddH263VideoCapability
|
|||
return ooCapabilityAddH263VideoCapability(call, sqcifMPI, qcifMPI, cifMPI,
|
||||
cif4MPI, cif16MPI, maxBitRate,dir,
|
||||
startReceiveChannel, startTransmitChannel,
|
||||
stopReceiveChannel, stopTransmitChannel,
|
||||
stopReceiveChannel, stopTransmitChannel,
|
||||
FALSE);
|
||||
|
||||
}
|
||||
|
@ -762,7 +765,7 @@ OOH323CallData* ooFindCallByToken(const char *callToken)
|
|||
else
|
||||
call = call->next;
|
||||
}
|
||||
|
||||
|
||||
if(!call)
|
||||
{
|
||||
OOTRACEERR2("ERROR:Call with token %s not found\n", callToken);
|
||||
|
@ -787,7 +790,7 @@ ASN1BOOL ooIsSessionEstablished(OOH323CallData *call, int sessionID, char* dir)
|
|||
while(temp)
|
||||
{
|
||||
if(temp->sessionID == sessionID &&
|
||||
temp->state == OO_LOGICALCHAN_ESTABLISHED &&
|
||||
temp->state == OO_LOGICALCHAN_ESTABLISHED &&
|
||||
!strcmp(temp->dir, dir) )
|
||||
return TRUE;
|
||||
temp = temp->next;
|
||||
|
@ -801,8 +804,7 @@ int ooAddMediaInfo(OOH323CallData *call, OOMediaInfo mediaInfo)
|
|||
|
||||
if(!call)
|
||||
{
|
||||
OOTRACEERR3("Error:Invalid 'call' param for ooAddMediaInfo.(%s, %s)\n",
|
||||
call->callType, call->callToken);
|
||||
OOTRACEERR1("Error:Invalid 'call' param for ooAddMediaInfo.\n");
|
||||
return OO_FAILED;
|
||||
}
|
||||
newMediaInfo = (OOMediaInfo*) memAlloc(call->pctxt, sizeof(OOMediaInfo));
|
||||
|
@ -815,7 +817,7 @@ int ooAddMediaInfo(OOH323CallData *call, OOMediaInfo mediaInfo)
|
|||
|
||||
memcpy (newMediaInfo, &mediaInfo, sizeof(OOMediaInfo));
|
||||
|
||||
OOTRACEDBGC4("Configured mediainfo for cap %s (%s, %s)\n",
|
||||
OOTRACEDBGC4("Configured mediainfo for cap %s (%s, %s)\n",
|
||||
ooGetCapTypeText(mediaInfo.cap),
|
||||
call->callType, call->callToken);
|
||||
if(!call->mediaInfo) {
|
||||
|
@ -845,7 +847,7 @@ unsigned ooCallGenerateSessionID
|
|||
sessionID = call->nextSessionID++;
|
||||
else{
|
||||
OOTRACEDBGC4("Session id for %s channel of type audio has to be "
|
||||
"provided by remote.(%s, %s)\n", dir, call->callType,
|
||||
"provided by remote.(%s, %s)\n", dir, call->callType,
|
||||
call->callToken);
|
||||
sessionID = 0; /* Will be assigned by remote */
|
||||
}
|
||||
|
@ -864,7 +866,7 @@ unsigned ooCallGenerateSessionID
|
|||
else{
|
||||
sessionID = 0; /* Will be assigned by remote */
|
||||
OOTRACEDBGC4("Session id for %s channel of type video has to be "
|
||||
"provided by remote.(%s, %s)\n", dir, call->callType,
|
||||
"provided by remote.(%s, %s)\n", dir, call->callType,
|
||||
call->callToken);
|
||||
}
|
||||
}
|
||||
|
@ -881,7 +883,7 @@ unsigned ooCallGenerateSessionID
|
|||
else{
|
||||
sessionID = 0; /* Will be assigned by remote */
|
||||
OOTRACEDBGC4("Session id for %s channel of type data has to be "
|
||||
"provided by remote.(%s, %s)\n", dir, call->callType,
|
||||
"provided by remote.(%s, %s)\n", dir, call->callType,
|
||||
call->callToken);
|
||||
}
|
||||
}
|
||||
|
@ -896,8 +898,8 @@ int ooCallH245ConnectionRetryTimerExpired(void *data)
|
|||
ooTimerCallback *cbData = (ooTimerCallback*) data;
|
||||
OOH323CallData *call = cbData->call;
|
||||
|
||||
OOTRACEINFO3("H245 connection retry timer expired. (%s, %s)\n",
|
||||
call->callType, call->callToken);
|
||||
OOTRACEINFO3("H245 connection retry timer expired. (%s, %s)\n",
|
||||
call->callType, call->callToken);
|
||||
memFreePtr(call->pctxt, cbData);
|
||||
|
||||
call->h245ConnectionAttempts++;
|
||||
|
@ -910,9 +912,9 @@ int ooCallH245ConnectionRetryTimerExpired(void *data)
|
|||
const char* ooGetReasonCodeText (OOUINT32 code)
|
||||
{
|
||||
static const char* reasonCodeText[] = {
|
||||
"OO_REASON_UNKNOWN",
|
||||
"OO_REASON_UNKNOWN",
|
||||
"OO_REASON_INVALIDMESSAGE",
|
||||
"OO_REASON_TRANSPORTFAILURE",
|
||||
"OO_REASON_TRANSPORTFAILURE",
|
||||
"OO_REASON_NOROUTE",
|
||||
"OO_REASON_NOUSER",
|
||||
"OO_REASON_NOBW",
|
||||
|
@ -922,10 +924,10 @@ const char* ooGetReasonCodeText (OOUINT32 code)
|
|||
"OO_REASON_GK_UNREACHABLE",
|
||||
"OO_REASON_GK_CLEARED",
|
||||
"OO_REASON_NOCOMMON_CAPABILITIES",
|
||||
"OO_REASON_REMOTE_FWDED",
|
||||
"OO_REASON_REMOTE_FWDED",
|
||||
"OO_REASON_LOCAL_FWDED",
|
||||
"OO_REASON_REMOTE_CLEARED",
|
||||
"OO_REASON_LOCAL_CLEARED",
|
||||
"OO_REASON_REMOTE_CLEARED",
|
||||
"OO_REASON_LOCAL_CLEARED",
|
||||
"OO_REASON_REMOTE_BUSY",
|
||||
"OO_REASON_LOCAL_BUSY",
|
||||
"OO_REASON_REMOTE_NOANSWER",
|
||||
|
@ -953,4 +955,3 @@ const char* ooGetCallStateText (OOCallState callState)
|
|||
};
|
||||
return ooUtilsGetText (callState, callStateText, OONUMBEROF(callStateText));
|
||||
}
|
||||
|
||||
|
|
|
@ -1,21 +1,21 @@
|
|||
/*
|
||||
* Copyright (C) 2004-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
/**
|
||||
* @file ooCalls.h
|
||||
* This file contains call management functions.
|
||||
* @file ooCalls.h
|
||||
* This file contains call management functions.
|
||||
*/
|
||||
#ifndef _OOCALLS_H_
|
||||
#define _OOCALLS_H_
|
||||
|
@ -29,7 +29,7 @@ extern "C" {
|
|||
#endif
|
||||
|
||||
|
||||
/**
|
||||
/**
|
||||
* @defgroup callmgmt Call Management
|
||||
* @{
|
||||
*/
|
||||
|
@ -60,7 +60,7 @@ extern "C" {
|
|||
#define OO_M_DATASESSION ASN1UINTCNT(0x00000200)
|
||||
#define OO_M_T38SUPPORTED ASN1UINTCNT(0x00000400)
|
||||
|
||||
/**
|
||||
/**
|
||||
* Call states.
|
||||
*/
|
||||
typedef enum {
|
||||
|
@ -76,20 +76,20 @@ typedef enum {
|
|||
OO_CALL_REMOVED /* call removed */
|
||||
} OOCallState;
|
||||
|
||||
/**
|
||||
/**
|
||||
* H.245 session states.
|
||||
*/
|
||||
typedef enum {
|
||||
OO_H245SESSION_IDLE,
|
||||
OO_H245SESSION_PAUSED,
|
||||
OO_H245SESSION_ACTIVE,
|
||||
OO_H245SESSION_ENDSENT,
|
||||
OO_H245SESSION_ENDSENT,
|
||||
OO_H245SESSION_ENDRECVD,
|
||||
OO_H245SESSION_CLOSED
|
||||
} OOH245SessionState;
|
||||
|
||||
/**
|
||||
* Structure to store local and remote media endpoint info for a
|
||||
* Structure to store local and remote media endpoint info for a
|
||||
* given media type.
|
||||
*/
|
||||
typedef struct OOMediaInfo{
|
||||
|
@ -115,10 +115,10 @@ typedef struct OOCallFwdData {
|
|||
int port;
|
||||
struct OOAliases *aliases;
|
||||
OOBOOL fwdedByRemote; /*Set when we are being fwded by remote*/
|
||||
} OOCallFwdData;
|
||||
} OOCallFwdData;
|
||||
|
||||
/**
|
||||
* Structure to store information on an H.323 channel (H.225 or H.245) for
|
||||
* Structure to store information on an H.323 channel (H.225 or H.245) for
|
||||
* a particular call.
|
||||
*/
|
||||
typedef struct OOH323Channel {
|
||||
|
@ -128,7 +128,7 @@ typedef struct OOH323Channel {
|
|||
} OOH323Channel;
|
||||
|
||||
/**
|
||||
* Structure to store information on fast start response (H.225) to
|
||||
* Structure to store information on fast start response (H.225) to
|
||||
* reply same answer in CALL PROCEEDING, ALERTING & CONNECT.
|
||||
*/
|
||||
typedef struct EXTERN FastStartResponse {
|
||||
|
@ -144,8 +144,8 @@ typedef struct OOH323Regex {
|
|||
|
||||
|
||||
/**
|
||||
* This structure is used to maintain all information on an active call.
|
||||
* A list of these structures is maintained within the global endpoint
|
||||
* This structure is used to maintain all information on an active call.
|
||||
* A list of these structures is maintained within the global endpoint
|
||||
* structure.
|
||||
*/
|
||||
typedef struct OOH323CallData {
|
||||
|
@ -166,10 +166,10 @@ typedef struct OOH323CallData {
|
|||
int transfercap;
|
||||
ASN1USINT callReference;
|
||||
char ourCallerId[256];
|
||||
H225CallIdentifier callIdentifier;/* The call identifier for the active
|
||||
H225CallIdentifier callIdentifier;/* The call identifier for the active
|
||||
call. */
|
||||
char *callingPartyNumber;
|
||||
char *calledPartyNumber;
|
||||
char *calledPartyNumber;
|
||||
H225ConferenceIdentifier confIdentifier;
|
||||
ASN1UINT flags;
|
||||
OOCallState callState;
|
||||
|
@ -207,8 +207,8 @@ typedef struct OOH323CallData {
|
|||
DList remoteFastStartOLCs;
|
||||
ASN1UINT8 remoteTermCapSeqNo;
|
||||
ASN1UINT8 localTermCapSeqNo;
|
||||
OOCapPrefs capPrefs;
|
||||
OOLogicalChannel* logicalChans;
|
||||
OOCapPrefs capPrefs;
|
||||
OOLogicalChannel* logicalChans;
|
||||
int noOfLogicalChannels;
|
||||
int logicalChanNoBase;
|
||||
int logicalChanNoMax;
|
||||
|
@ -237,7 +237,7 @@ typedef struct OOH323CallData {
|
|||
#define ooCallData OOH323CallData
|
||||
|
||||
/**
|
||||
* This callback function is triggered when a new call structure is
|
||||
* This callback function is triggered when a new call structure is
|
||||
* created inside the stack for an incoming or outgoing call.
|
||||
*
|
||||
* @param call H.323 call data structure
|
||||
|
@ -246,8 +246,8 @@ typedef struct OOH323CallData {
|
|||
typedef int (*cb_OnNewCallCreated)(OOH323CallData* call);
|
||||
|
||||
/**
|
||||
* This callback function is triggered when a Q.931 alerting message is
|
||||
* received for an outgoing call or when a Q.931 alerting message is sent
|
||||
* This callback function is triggered when a Q.931 alerting message is
|
||||
* received for an outgoing call or when a Q.931 alerting message is sent
|
||||
* for an incoming call.
|
||||
*
|
||||
* @param call H.323 call data structure
|
||||
|
@ -256,8 +256,8 @@ typedef int (*cb_OnNewCallCreated)(OOH323CallData* call);
|
|||
typedef int (*cb_OnAlerting)(OOH323CallData * call);
|
||||
|
||||
/**
|
||||
* This callback function is triggered when there is an incoming call.
|
||||
* In the case where a gatekeeper is in use, the call must first be
|
||||
* This callback function is triggered when there is an incoming call.
|
||||
* In the case where a gatekeeper is in use, the call must first be
|
||||
* admitted by the gatekeeper before this callback is triggered.
|
||||
*
|
||||
* @param call H.323 call data structure
|
||||
|
@ -266,7 +266,7 @@ typedef int (*cb_OnAlerting)(OOH323CallData * call);
|
|||
typedef int (*cb_OnIncomingCall)(OOH323CallData* call );
|
||||
|
||||
/**
|
||||
* This callback function is triggered after a Q.931 setup message
|
||||
* This callback function is triggered after a Q.931 setup message
|
||||
* is sent for an outgoing call.
|
||||
*
|
||||
* @param call H.323 call data structure
|
||||
|
@ -275,10 +275,10 @@ typedef int (*cb_OnIncomingCall)(OOH323CallData* call );
|
|||
typedef int (*cb_OnOutgoingCall)(OOH323CallData* call );
|
||||
|
||||
/**
|
||||
* This callback function is triggered when a Q.931 connect message is
|
||||
* sent in case of incoming call. In case of outgoing call, this is invoked
|
||||
* when a Q.931 connect message is received. It is not invoked until after
|
||||
* fast start and H.245 tunneling messages within the connect message are
|
||||
* This callback function is triggered when a Q.931 connect message is
|
||||
* sent in case of incoming call. In case of outgoing call, this is invoked
|
||||
* when a Q.931 connect message is received. It is not invoked until after
|
||||
* fast start and H.245 tunneling messages within the connect message are
|
||||
* processed.
|
||||
*
|
||||
* @param call H.323 call data structure
|
||||
|
@ -295,8 +295,8 @@ typedef int (*cb_OnCallEstablished)(struct OOH323CallData* call);
|
|||
typedef int (*cb_OnCallCleared)(struct OOH323CallData* call);
|
||||
|
||||
/**
|
||||
* This callback function is triggered when master-slave determination
|
||||
* and capabilities negotiation procedures are successfully completed
|
||||
* This callback function is triggered when master-slave determination
|
||||
* and capabilities negotiation procedures are successfully completed
|
||||
* for a call.
|
||||
*
|
||||
* @param call H.323 call data structure
|
||||
|
@ -332,7 +332,7 @@ typedef void (*cb_OnMediaChanged)
|
|||
(struct OOH323CallData *call, char* remoteIP, int remotePort);
|
||||
|
||||
/**
|
||||
* This structure holds all of the H.323 signaling callback function
|
||||
* This structure holds all of the H.323 signaling callback function
|
||||
* addresses.
|
||||
* @see ooH323EpSetH323Callbacks
|
||||
*/
|
||||
|
@ -428,7 +428,7 @@ EXTERN int ooCallSetCalledPartyNumber
|
|||
EXTERN int ooCallClearAliases(OOH323CallData *call);
|
||||
|
||||
/**
|
||||
* This function is used to add an H323ID alias to be used by local endpoint
|
||||
* This function is used to add an H323ID alias to be used by local endpoint
|
||||
* for a particular call.
|
||||
* @param call Handle to the call
|
||||
* @param h323id H323ID to add for the local endpoint for the call.
|
||||
|
@ -438,7 +438,7 @@ EXTERN int ooCallClearAliases(OOH323CallData *call);
|
|||
EXTERN int ooCallAddAliasH323ID(OOH323CallData *call, const char* h323id);
|
||||
|
||||
/**
|
||||
* This function is used to add an dialedDigits alias to be used by local
|
||||
* This function is used to add an dialedDigits alias to be used by local
|
||||
* endpoint for a particular call.
|
||||
* @param call Handle to the call
|
||||
* @param dialedDigits DialedDigits to add for the local endpoint for call.
|
||||
|
@ -449,7 +449,7 @@ EXTERN int ooCallAddAliasDialedDigits
|
|||
(OOH323CallData *call, const char* dialedDigits);
|
||||
|
||||
/**
|
||||
* This function is used to add an email-id alias to be used by local
|
||||
* This function is used to add an email-id alias to be used by local
|
||||
* endpoint for a particular call.
|
||||
* @param call Handle to the call
|
||||
* @param email Email-id to add for the local endpoint for call.
|
||||
|
@ -460,7 +460,7 @@ EXTERN int ooCallAddAliasEmailID(OOH323CallData *call, const char* email);
|
|||
|
||||
|
||||
/**
|
||||
* This function is used to add an email-id alias to be used by local
|
||||
* This function is used to add an email-id alias to be used by local
|
||||
* endpoint for a particular call.
|
||||
* @param call Handle to the call
|
||||
* @param url URL-id to add for the local endpoint for call.
|
||||
|
@ -471,8 +471,8 @@ EXTERN int ooCallAddAliasURLID(OOH323CallData *call, const char* url);
|
|||
|
||||
|
||||
/**
|
||||
* This is a helper function used by other call related add aliases functions
|
||||
* to add a particular alias. This function is not supposed to be called
|
||||
* This is a helper function used by other call related add aliases functions
|
||||
* to add a particular alias. This function is not supposed to be called
|
||||
* directly.
|
||||
* @param call Handle to the call
|
||||
* @param aliasType Type of alias being added
|
||||
|
@ -486,7 +486,7 @@ int ooCallAddAlias
|
|||
|
||||
|
||||
/**
|
||||
* This function is used to add an dialed digits alias for the remote endpoint
|
||||
* This function is used to add an dialed digits alias for the remote endpoint
|
||||
* involved in a particular call.
|
||||
* @param call Handle to the call
|
||||
* @param dialedDigits dialedDigits alias to add for the remote endpoint.
|
||||
|
@ -497,7 +497,7 @@ EXTERN int ooCallAddRemoteAliasDialedDigits
|
|||
(OOH323CallData *call, const char* dialedDigits);
|
||||
|
||||
/**
|
||||
* This function is used to add an H323ID alias for the remote endpoint
|
||||
* This function is used to add an H323ID alias for the remote endpoint
|
||||
* involved in a particular call.
|
||||
* @param call Handle to the call
|
||||
* @param h323id H323ID to add for the remote endpoint.
|
||||
|
@ -508,12 +508,12 @@ EXTERN int ooCallAddRemoteAliasH323ID(OOH323CallData *call, const char* h323id);
|
|||
|
||||
|
||||
/**
|
||||
* This function is used to add G7231 capability for the call. The
|
||||
* "ooCallAdd...Capability" functions allow to override the global endpoint
|
||||
* This function is used to add G7231 capability for the call. The
|
||||
* "ooCallAdd...Capability" functions allow to override the global endpoint
|
||||
* capabilities and use specific capabilities for specific calls.
|
||||
* @param call Call for which capability has to be added.
|
||||
* @param cap Capability to be added.
|
||||
* @param txframes Number of frames per packet for transmission.
|
||||
* @param txframes Number of frames per packet for transmission.
|
||||
* @param rxframes Number of frames per packet for reception.
|
||||
* @param silenceSuppression Indicates support for silenceSuppression.
|
||||
* @param dir Direction of capability.OORX, OOTX, OORXANDTX
|
||||
|
@ -522,9 +522,9 @@ EXTERN int ooCallAddRemoteAliasH323ID(OOH323CallData *call, const char* h323id);
|
|||
* @param stopReceiveChannel Callback function to stop receive channel.
|
||||
* @param stopTransmitChannel Callback function to stop transmit channel.
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
*/
|
||||
EXTERN int ooCallAddG7231Capability(OOH323CallData *call, int cap, int txframes,
|
||||
EXTERN int ooCallAddG7231Capability(OOH323CallData *call, int cap, int txframes,
|
||||
int rxframes, OOBOOL silenceSuppression, int dir,
|
||||
cb_StartReceiveChannel startReceiveChannel,
|
||||
cb_StartTransmitChannel startTransmitChannel,
|
||||
|
@ -532,12 +532,12 @@ EXTERN int ooCallAddG7231Capability(OOH323CallData *call, int cap, int txframes,
|
|||
cb_StopTransmitChannel stopTransmitChannel);
|
||||
|
||||
/**
|
||||
* This function is used to add G728 capability for the call. The
|
||||
* "ooCallAdd...Capability" functions allow to override the global endpoint
|
||||
* This function is used to add G728 capability for the call. The
|
||||
* "ooCallAdd...Capability" functions allow to override the global endpoint
|
||||
* capabilities and use specific capabilities for specific calls.
|
||||
* @param call Call for which capability has to be added.
|
||||
* @param cap Capability to be added.
|
||||
* @param txframes Number of frames per packet for transmission.
|
||||
* @param txframes Number of frames per packet for transmission.
|
||||
* @param rxframes Number of frames per packet for reception.
|
||||
* @param dir Direction of capability.OORX, OOTX, OORXANDTX
|
||||
* @param startReceiveChannel Callback function to start receive channel.
|
||||
|
@ -545,9 +545,9 @@ EXTERN int ooCallAddG7231Capability(OOH323CallData *call, int cap, int txframes,
|
|||
* @param stopReceiveChannel Callback function to stop receive channel.
|
||||
* @param stopTransmitChannel Callback function to stop transmit channel.
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
*/
|
||||
EXTERN int ooCallAddG728Capability(OOH323CallData *call, int cap, int txframes,
|
||||
EXTERN int ooCallAddG728Capability(OOH323CallData *call, int cap, int txframes,
|
||||
int rxframes, int dir,
|
||||
cb_StartReceiveChannel startReceiveChannel,
|
||||
cb_StartTransmitChannel startTransmitChannel,
|
||||
|
@ -555,12 +555,12 @@ EXTERN int ooCallAddG728Capability(OOH323CallData *call, int cap, int txframes,
|
|||
cb_StopTransmitChannel stopTransmitChannel);
|
||||
|
||||
/**
|
||||
* This function is used to add G729 capability for the call. The
|
||||
* "ooCallAdd...Capability" functions allow to override the global endpoint
|
||||
* This function is used to add G729 capability for the call. The
|
||||
* "ooCallAdd...Capability" functions allow to override the global endpoint
|
||||
* capabilities and use specific capabilities for specific calls.
|
||||
* @param call Call for which capability has to be added.
|
||||
* @param cap Capability to be added.
|
||||
* @param txframes Number of frames per packet for transmission.
|
||||
* @param txframes Number of frames per packet for transmission.
|
||||
* @param rxframes Number of frames per packet for reception.
|
||||
* @param dir Direction of capability.OORX, OOTX, OORXANDTX
|
||||
* @param startReceiveChannel Callback function to start receive channel.
|
||||
|
@ -568,9 +568,9 @@ EXTERN int ooCallAddG728Capability(OOH323CallData *call, int cap, int txframes,
|
|||
* @param stopReceiveChannel Callback function to stop receive channel.
|
||||
* @param stopTransmitChannel Callback function to stop transmit channel.
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
*/
|
||||
EXTERN int ooCallAddG729Capability(OOH323CallData *call, int cap, int txframes,
|
||||
EXTERN int ooCallAddG729Capability(OOH323CallData *call, int cap, int txframes,
|
||||
int rxframes, int dir,
|
||||
cb_StartReceiveChannel startReceiveChannel,
|
||||
cb_StartTransmitChannel startTransmitChannel,
|
||||
|
@ -578,12 +578,12 @@ EXTERN int ooCallAddG729Capability(OOH323CallData *call, int cap, int txframes,
|
|||
cb_StopTransmitChannel stopTransmitChannel);
|
||||
|
||||
/**
|
||||
* This function is used to add G711 capability for the call. The
|
||||
* "ooCallAdd...Capability" functions allow to override the global endpoint
|
||||
* This function is used to add G711 capability for the call. The
|
||||
* "ooCallAdd...Capability" functions allow to override the global endpoint
|
||||
* capabilities and use specific capabilities for specific calls.
|
||||
* @param call Call for which capability has to be added.
|
||||
* @param cap Capability to be added.
|
||||
* @param txframes Number of frames per packet for transmission.
|
||||
* @param txframes Number of frames per packet for transmission.
|
||||
* @param rxframes Number of frames per packet for reception.
|
||||
* @param dir Direction of capability.OORX, OOTX, OORXANDTX
|
||||
* @param startReceiveChannel Callback function to start receive channel.
|
||||
|
@ -591,9 +591,9 @@ EXTERN int ooCallAddG729Capability(OOH323CallData *call, int cap, int txframes,
|
|||
* @param stopReceiveChannel Callback function to stop receive channel.
|
||||
* @param stopTransmitChannel Callback function to stop transmit channel.
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
*/
|
||||
EXTERN int ooCallAddG711Capability(OOH323CallData *call, int cap, int txframes,
|
||||
EXTERN int ooCallAddG711Capability(OOH323CallData *call, int cap, int txframes,
|
||||
int rxframes, int dir,
|
||||
cb_StartReceiveChannel startReceiveChannel,
|
||||
cb_StartTransmitChannel startTransmitChannel,
|
||||
|
@ -602,13 +602,13 @@ EXTERN int ooCallAddG711Capability(OOH323CallData *call, int cap, int txframes,
|
|||
|
||||
|
||||
/**
|
||||
* This function is used to add GSM capability for the call. The
|
||||
* "ooCallAdd...Capability" functions allow to override the global endpoint
|
||||
* This function is used to add GSM capability for the call. The
|
||||
* "ooCallAdd...Capability" functions allow to override the global endpoint
|
||||
* capabilities and use specific capabilities for specific calls.
|
||||
* @param call Call for which capability has to be added.
|
||||
* @param cap Type of GSM capability to be added.
|
||||
* @param framesPerPkt Number of GSM frames pre packet.
|
||||
* @param comfortNoise Comfort noise spec for the capability.
|
||||
* @param framesPerPkt Number of GSM frames pre packet.
|
||||
* @param comfortNoise Comfort noise spec for the capability.
|
||||
* @param scrambled Scrambled enabled/disabled for the capability.
|
||||
* @param dir Direction of capability.OORX, OOTX, OORXANDTX
|
||||
* @param startReceiveChannel Callback function to start receive channel.
|
||||
|
@ -616,10 +616,10 @@ EXTERN int ooCallAddG711Capability(OOH323CallData *call, int cap, int txframes,
|
|||
* @param stopReceiveChannel Callback function to stop receive channel.
|
||||
* @param stopTransmitChannel Callback function to stop transmit channel.
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
*/
|
||||
EXTERN int ooCallAddGSMCapability(OOH323CallData* call, int cap,
|
||||
ASN1USINT framesPerPkt, OOBOOL comfortNoise,
|
||||
EXTERN int ooCallAddGSMCapability(OOH323CallData* call, int cap,
|
||||
ASN1USINT framesPerPkt, OOBOOL comfortNoise,
|
||||
OOBOOL scrambled, int dir,
|
||||
cb_StartReceiveChannel startReceiveChannel,
|
||||
cb_StartTransmitChannel startTransmitChannel,
|
||||
|
@ -630,23 +630,23 @@ EXTERN int ooCallAddGSMCapability(OOH323CallData* call, int cap,
|
|||
|
||||
|
||||
/**
|
||||
* This function is used to add H263 video capability for the call. The
|
||||
* "ooCallAdd...Capability" functions allow to override the global endpoint
|
||||
* This function is used to add H263 video capability for the call. The
|
||||
* "ooCallAdd...Capability" functions allow to override the global endpoint
|
||||
* capabilities and use specific capabilities for specific calls.
|
||||
* @param call Call for which capability has to be added.
|
||||
* @param cap Capability type - OO_H263VIDEO
|
||||
* @param sqcifMPI Minimum picture interval for encoding/decoding
|
||||
* @param sqcifMPI Minimum picture interval for encoding/decoding
|
||||
* of SQCIF pictures.
|
||||
* @param qcifMPI Minimum picture interval for encoding/decoding
|
||||
* @param qcifMPI Minimum picture interval for encoding/decoding
|
||||
* of QCIF pictures.
|
||||
* @param cifMPI Minimum picture interval for encoding/decoding
|
||||
* @param cifMPI Minimum picture interval for encoding/decoding
|
||||
* of CIF pictures.
|
||||
* @param cif4MPI Minimum picture interval for encoding/decoding
|
||||
* @param cif4MPI Minimum picture interval for encoding/decoding
|
||||
* of CIF4 pictures.
|
||||
* @param cif16MPI Minimum picture interval for encoding/decoding
|
||||
* @param cif16MPI Minimum picture interval for encoding/decoding
|
||||
* of CIF16 pictures.
|
||||
* @param maxBitRate Maximum bit rate in units of 100 bits/s at
|
||||
* which a transmitter can transmit video or a
|
||||
* which a transmitter can transmit video or a
|
||||
* receiver can receive video.
|
||||
* @param dir Direction of capability.OORX, OOTX, OORXANDTX
|
||||
* @param startReceiveChannel Callback function to start receive channel.
|
||||
|
@ -654,13 +654,13 @@ EXTERN int ooCallAddGSMCapability(OOH323CallData* call, int cap,
|
|||
* @param stopReceiveChannel Callback function to stop receive channel.
|
||||
* @param stopTransmitChannel Callback function to stop transmit channel.
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
*/
|
||||
EXTERN int ooCallAddH263VideoCapability(OOH323CallData *call, int cap,
|
||||
unsigned sqcifMPI, unsigned qcifMPI,
|
||||
unsigned cifMPI, unsigned cif4MPI,
|
||||
unsigned cif16MPI, unsigned maxBitRate,
|
||||
int dir,
|
||||
EXTERN int ooCallAddH263VideoCapability(OOH323CallData *call, int cap,
|
||||
unsigned sqcifMPI, unsigned qcifMPI,
|
||||
unsigned cifMPI, unsigned cif4MPI,
|
||||
unsigned cif16MPI, unsigned maxBitRate,
|
||||
int dir,
|
||||
cb_StartReceiveChannel startReceiveChannel,
|
||||
cb_StartTransmitChannel startTransmitChannel,
|
||||
cb_StopReceiveChannel stopReceiveChannel,
|
||||
|
@ -682,9 +682,9 @@ EXTERN int ooCallEnableDTMFRFC2833
|
|||
|
||||
|
||||
/**
|
||||
* This function is used to disable rfc 2833 capability for the call.
|
||||
* By default the stack uses the dtmf settings for the endpoint. But if you
|
||||
* want to enable/disable dtmf for a specific call, then you can override
|
||||
* This function is used to disable rfc 2833 capability for the call.
|
||||
* By default the stack uses the dtmf settings for the endpoint. But if you
|
||||
* want to enable/disable dtmf for a specific call, then you can override
|
||||
* end-point settings using this function
|
||||
* @param call Call for which rfc2833 has to be disabled.
|
||||
*
|
||||
|
@ -694,9 +694,9 @@ EXTERN int ooCallDisableDTMFRFC2833(OOH323CallData *call);
|
|||
|
||||
|
||||
/**
|
||||
* This function is used to enable H.245(alphanumeric) dtmf support for the
|
||||
* call. By default the stack uses the dtmf settings for the endpoint. But if
|
||||
* you want to enable H.245(alphanumeric) dtmf for a specific call, then you
|
||||
* This function is used to enable H.245(alphanumeric) dtmf support for the
|
||||
* call. By default the stack uses the dtmf settings for the endpoint. But if
|
||||
* you want to enable H.245(alphanumeric) dtmf for a specific call, then you
|
||||
* can override end-point settings using this function
|
||||
* @param call Call for which H.245(alphanumeric) dtmf support
|
||||
* has to be enabled.
|
||||
|
@ -706,9 +706,9 @@ EXTERN int ooCallDisableDTMFRFC2833(OOH323CallData *call);
|
|||
EXTERN int ooCallEnableDTMFH245Alphanumeric(OOH323CallData *call);
|
||||
|
||||
/**
|
||||
* This function is used to disable H.245(alphanumeric) dtmf support for the
|
||||
* call. By default the stack uses the dtmf settings for the endpoint. But if
|
||||
* you want to disable H.245(alphanumeric) dtmf for a specific call, then you
|
||||
* This function is used to disable H.245(alphanumeric) dtmf support for the
|
||||
* call. By default the stack uses the dtmf settings for the endpoint. But if
|
||||
* you want to disable H.245(alphanumeric) dtmf for a specific call, then you
|
||||
* can override end-point settings using this function
|
||||
* @param call Call for which H.245(alphanumeric) dtmf support
|
||||
* has to be disabled.
|
||||
|
@ -718,8 +718,8 @@ EXTERN int ooCallEnableDTMFH245Alphanumeric(OOH323CallData *call);
|
|||
EXTERN int ooCallDisableDTMFH245Alphanumeric(OOH323CallData *call);
|
||||
|
||||
/**
|
||||
* This function is used to enable H.245(signal) dtmf support for the call.
|
||||
* By default the stack uses the dtmf settings for the endpoint. But if you
|
||||
* This function is used to enable H.245(signal) dtmf support for the call.
|
||||
* By default the stack uses the dtmf settings for the endpoint. But if you
|
||||
* want to enable H.245(signal) dtmf for a specific call, then you can override
|
||||
* end-point settings using this function
|
||||
* @param call Call for which H.245(signal) dtmf support
|
||||
|
@ -731,9 +731,9 @@ EXTERN int ooCallEnableDTMFH245Signal(OOH323CallData *call);
|
|||
|
||||
|
||||
/**
|
||||
* This function is used to disable H.245(signal) dtmf support for the call.
|
||||
* By default the stack uses the dtmf settings for the endpoint. But if you
|
||||
* want to disable H.245(signal) dtmf for a specific call, then you can
|
||||
* This function is used to disable H.245(signal) dtmf support for the call.
|
||||
* By default the stack uses the dtmf settings for the endpoint. But if you
|
||||
* want to disable H.245(signal) dtmf for a specific call, then you can
|
||||
* override end-point settings using this function
|
||||
* @param call Call for which H.245(signal) dtmf support
|
||||
* has to be disabled.
|
||||
|
@ -745,7 +745,7 @@ EXTERN int ooCallDisableDTMFH245Signal(OOH323CallData *call);
|
|||
|
||||
/**
|
||||
* This function is used to enable Q.931(keypad) dtmf support for the call.
|
||||
* By default the stack uses the dtmf settings for the endpoint. But if you
|
||||
* By default the stack uses the dtmf settings for the endpoint. But if you
|
||||
* want to enable Q.931(keypad) dtmf support for a specific call, then you can
|
||||
* override end-point settings using this function
|
||||
* @param call Call for which Q.931(keypad) dtmf support
|
||||
|
@ -757,7 +757,7 @@ EXTERN int ooCallEnableDTMFQ931Keypad(OOH323CallData *call);
|
|||
|
||||
/**
|
||||
* This function is used to disable Q.931(keypad) dtmf support for the call.
|
||||
* By default the stack uses the dtmf settings for the endpoint. But if you
|
||||
* By default the stack uses the dtmf settings for the endpoint. But if you
|
||||
* want to disable Q.931(keypad) dtmf support for a specific call, then you can
|
||||
* override end-point settings using this function
|
||||
* @param call Call for which Q.931(keypad) dtmf support
|
||||
|
@ -787,14 +787,14 @@ EXTERN int ooEndCall(OOH323CallData *call);
|
|||
|
||||
/**
|
||||
* This function is used to remove a call from the list of existing calls.
|
||||
*
|
||||
*
|
||||
* @param call Pointer to the call to be removed.
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
*/
|
||||
EXTERN int ooRemoveCallFromList (OOH323CallData *call);
|
||||
|
||||
/**
|
||||
* This function is used to clean up a call. It closes all associated sockets,
|
||||
* This function is used to clean up a call. It closes all associated sockets,
|
||||
* removes the call from the global list and frees up associated memory.
|
||||
*
|
||||
* @param call Pointer to the call to be cleared.
|
||||
|
@ -803,25 +803,25 @@ EXTERN int ooRemoveCallFromList (OOH323CallData *call);
|
|||
EXTERN int ooCleanCall(OOH323CallData *call);
|
||||
|
||||
/**
|
||||
* This function is used to check whether a specified session in specified
|
||||
* This function is used to check whether a specified session in specified
|
||||
* direction is active for the call.
|
||||
* @param call Handle to call for which session has to be queried.
|
||||
* @param sessionID Session id to identify the type of session(1 for audio,
|
||||
* @param sessionID Session id to identify the type of session(1 for audio,
|
||||
* 2 for voice and 3 for data)
|
||||
* @param dir Direction of the session(transmit/receive)
|
||||
*
|
||||
* @return 1, if session active. 0, otherwise.
|
||||
* @return 1, if session active. 0, otherwise.
|
||||
*/
|
||||
EXTERN ASN1BOOL ooIsSessionEstablished
|
||||
(OOH323CallData *call, int sessionID, char* dir);
|
||||
|
||||
/**
|
||||
* This function can be used by an application to specify media endpoint
|
||||
* This function can be used by an application to specify media endpoint
|
||||
* information for different types of media. The stack by default uses local IP
|
||||
* and port for media. An application can provide mediainfo if it wants to
|
||||
* and port for media. An application can provide mediainfo if it wants to
|
||||
* override default.
|
||||
* @param call Handle to the call
|
||||
* @param mediaInfo Structure which defines the media endpoint to be
|
||||
* @param mediaInfo Structure which defines the media endpoint to be
|
||||
* used.
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
|
@ -829,7 +829,7 @@ EXTERN ASN1BOOL ooIsSessionEstablished
|
|||
EXTERN int ooAddMediaInfo(OOH323CallData *call, OOMediaInfo mediaInfo);
|
||||
|
||||
/**
|
||||
* This function is used to generate a media session id for the new media
|
||||
* This function is used to generate a media session id for the new media
|
||||
* session for the call.
|
||||
* @param call Handle to the call.
|
||||
* @param type Type of media session.
|
||||
|
@ -841,7 +841,7 @@ EXTERN unsigned ooCallGenerateSessionID
|
|||
(OOH323CallData *call, OOCapType type, char *dir);
|
||||
|
||||
/**
|
||||
* This is an handler for H245 connection retry timer. When remote end is not
|
||||
* This is an handler for H245 connection retry timer. When remote end is not
|
||||
* yet listening for H245 connections, this timer provides a wait and retry
|
||||
* mechanism to establish H245 connection.
|
||||
* @param data Timer callback data.
|
||||
|
@ -868,8 +868,8 @@ EXTERN const char* ooGetReasonCodeText (OOUINT32 code);
|
|||
*/
|
||||
EXTERN const char* ooGetCallStateText (OOCallState callState);
|
||||
|
||||
/**
|
||||
* @}
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
int isRunning(char *callToken);
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,21 +1,21 @@
|
|||
/*
|
||||
* Copyright (C) 2004-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
/**
|
||||
* @file ooCapability.h
|
||||
* This file contains Capability management functions.
|
||||
* @file ooCapability.h
|
||||
* This file contains Capability management functions.
|
||||
*/
|
||||
#ifndef OO_CAPABILITY_H_
|
||||
#define OO_CAPABILITY_H_
|
||||
|
@ -29,7 +29,7 @@
|
|||
#define OOTX (1<<1)
|
||||
#define OORXANDTX (1<<2)
|
||||
#define OORXTX (1<<3) /* For symmetric capabilities */
|
||||
/* Various types of caps. Note that not all
|
||||
/* Various types of caps. Note that not all
|
||||
supported */
|
||||
typedef enum OOCapabilities{
|
||||
OO_CAP_AUDIO_BASE = 0,
|
||||
|
@ -89,7 +89,7 @@ typedef enum OOCapabilities{
|
|||
|
||||
/**
|
||||
* This structure defines the preference order for capabilities.
|
||||
*
|
||||
*
|
||||
*/
|
||||
typedef struct OOCapPrefs {
|
||||
int order[20];
|
||||
|
@ -99,11 +99,11 @@ typedef struct OOCapPrefs {
|
|||
typedef struct OOCapParams {
|
||||
int txframes; /*!< Number of frames per packet for transmission */
|
||||
int rxframes; /*!< Number of frames per packet for reception */
|
||||
OOBOOL silenceSuppression;
|
||||
OOBOOL silenceSuppression;
|
||||
} OOCapParams;
|
||||
|
||||
typedef struct OOGSMCapParams {
|
||||
unsigned txframes;
|
||||
unsigned txframes;
|
||||
unsigned rxframes;
|
||||
OOBOOL scrambled;
|
||||
OOBOOL comfortNoise;
|
||||
|
@ -130,7 +130,7 @@ struct OOLogicalChannel;
|
|||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
/**
|
||||
* This callback is used for starting media receive channel. This callback
|
||||
* function is triggered when receive media channel has to be started.
|
||||
* @param call Call for which receive media channel has to be started.
|
||||
|
@ -143,7 +143,7 @@ typedef int (*cb_StartReceiveChannel)
|
|||
(struct OOH323CallData *call, struct OOLogicalChannel *pChannel);
|
||||
|
||||
|
||||
/**
|
||||
/**
|
||||
* This callback is used for starting media transmit channel. This callback
|
||||
* function is triggered when transmit media channel has to be started.
|
||||
* @param call Call for which transmit media channel has to be started.
|
||||
|
@ -155,7 +155,7 @@ typedef int (*cb_StartReceiveChannel)
|
|||
typedef int (*cb_StartTransmitChannel)
|
||||
(struct OOH323CallData *call, struct OOLogicalChannel *pChannel);
|
||||
|
||||
/**
|
||||
/**
|
||||
* This callback is used for stopping media receive channel. This callback
|
||||
* function is triggered when receive media channel has to be stopped.
|
||||
* @param call Call for which receive media channel has to be stopped.
|
||||
|
@ -167,7 +167,7 @@ typedef int (*cb_StartTransmitChannel)
|
|||
typedef int (*cb_StopReceiveChannel)
|
||||
(struct OOH323CallData *call, struct OOLogicalChannel *pChannel);
|
||||
|
||||
/**
|
||||
/**
|
||||
* This callback is used for stopping media transmit channel. This callback
|
||||
* function is triggered when transmit media channel has to be stopped.
|
||||
* @param call Call for which transmit media channel has to be stopped.
|
||||
|
@ -190,7 +190,7 @@ typedef enum OOCapType {
|
|||
* capability
|
||||
*/
|
||||
typedef struct ooH323EpCapability {
|
||||
int dir;
|
||||
int dir;
|
||||
int cap;
|
||||
OOCapType capType;
|
||||
void *params;
|
||||
|
@ -212,14 +212,14 @@ typedef struct ooH323EpCapability {
|
|||
#endif /* MAKE_DLL */
|
||||
#endif /* EXTERN */
|
||||
|
||||
/**
|
||||
/**
|
||||
* @defgroup capmgmt Capability Management
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* This function is used to add rfc2833 based dtmf detection capability
|
||||
* @param call Call if enabling for call, else null for
|
||||
* @param call Call if enabling for call, else null for
|
||||
* endpoint.
|
||||
* @param dynamicRTPPayloadType dynamicRTPPayloadType to be used.
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
|
@ -237,7 +237,7 @@ EXTERN int ooCapabilityDisableDTMFRFC2833(struct OOH323CallData *call);
|
|||
|
||||
|
||||
/**
|
||||
* This function is used to enable support for H.245 based alphanumeric dtmf
|
||||
* This function is used to enable support for H.245 based alphanumeric dtmf
|
||||
* capability.
|
||||
* @param call Handle to call, if enabling for the call, else NULL
|
||||
* for end-point.
|
||||
|
@ -246,7 +246,7 @@ EXTERN int ooCapabilityDisableDTMFRFC2833(struct OOH323CallData *call);
|
|||
EXTERN int ooCapabilityEnableDTMFH245Alphanumeric(struct OOH323CallData *call);
|
||||
|
||||
/**
|
||||
* This function is used to disable support for H.245 based alphanumeric dtmf
|
||||
* This function is used to disable support for H.245 based alphanumeric dtmf
|
||||
* capability.
|
||||
* @param call Handle to call, if disabling for the call, else NULL
|
||||
* for end-point.
|
||||
|
@ -256,7 +256,7 @@ EXTERN int ooCapabilityDisableDTMFH245Alphanumeric
|
|||
(struct OOH323CallData *call);
|
||||
|
||||
/**
|
||||
* This function is used to enable support for H.245 based signal dtmf
|
||||
* This function is used to enable support for H.245 based signal dtmf
|
||||
* capability.
|
||||
* @param call Handle to call, if enabling for the call, else NULL
|
||||
* for end-point.
|
||||
|
@ -265,7 +265,7 @@ EXTERN int ooCapabilityDisableDTMFH245Alphanumeric
|
|||
EXTERN int ooCapabilityEnableDTMFH245Signal(struct OOH323CallData *call);
|
||||
|
||||
/**
|
||||
* This function is used to disable support for H.245 based signal dtmf
|
||||
* This function is used to disable support for H.245 based signal dtmf
|
||||
* capability.
|
||||
* @param call Handle to call, if disabling for the call, else NULL
|
||||
* for end-point.
|
||||
|
@ -291,14 +291,14 @@ EXTERN int ooCapabilityDisableDTMFQ931Keypad(struct OOH323CallData *call);
|
|||
|
||||
/**
|
||||
* This function is used to add simple capabilities which have only rxframes
|
||||
* and txframes parameters to the endpoint or call.(ex. G711, G728, G723.1,
|
||||
* and txframes parameters to the endpoint or call.(ex. G711, G728, G723.1,
|
||||
* G729)
|
||||
* @param call Handle to a call. If this is not Null, then
|
||||
* capability is added to call's remote enpoint
|
||||
* capability list, else it is added to local H323
|
||||
* @param call Handle to a call. If this is not Null, then
|
||||
* capability is added to call's remote enpoint
|
||||
* capability list, else it is added to local H323
|
||||
* endpoint list.
|
||||
* @param cap Type of G711 capability to be added.
|
||||
* @param txframes Number of frames per packet for transmission.
|
||||
* @param txframes Number of frames per packet for transmission.
|
||||
* @param rxframes Number of frames per packet for reception.
|
||||
* @param silenceSuppression Indicates support for silence suppression.
|
||||
* Used only in case of g7231, otherwise ignored.
|
||||
|
@ -312,8 +312,8 @@ EXTERN int ooCapabilityDisableDTMFQ931Keypad(struct OOH323CallData *call);
|
|||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
*/
|
||||
EXTERN int ooCapabilityAddSimpleCapability
|
||||
(struct OOH323CallData *call, int cap, int txframes, int rxframes,
|
||||
OOBOOL silenceSuppression, int dir,
|
||||
(struct OOH323CallData *call, int cap, int txframes, int rxframes,
|
||||
OOBOOL silenceSuppression, int dir,
|
||||
cb_StartReceiveChannel startReceiveChannel,
|
||||
cb_StartTransmitChannel startTransmitChannel,
|
||||
cb_StopReceiveChannel stopReceiveChannel,
|
||||
|
@ -325,13 +325,13 @@ EXTERN int ooCapabilityAddSimpleCapability
|
|||
* This is an internal helper function which is used to add a GSM capability
|
||||
* to local endpoints capability list or to remote endpoints capability list or
|
||||
* to a call's capability list.
|
||||
* @param call Handle to a call. If this is not Null, then
|
||||
* capability is added to call's remote enpoint
|
||||
* capability list, else it is added to local H323
|
||||
* @param call Handle to a call. If this is not Null, then
|
||||
* capability is added to call's remote enpoint
|
||||
* capability list, else it is added to local H323
|
||||
* endpoint list.
|
||||
* @param cap Type of GSM capability to be added.
|
||||
* @param framesPerPkt Number of GSM frames per packet.
|
||||
* @param comfortNoise Comfort noise spec for the capability.
|
||||
* @param framesPerPkt Number of GSM frames per packet.
|
||||
* @param comfortNoise Comfort noise spec for the capability.
|
||||
* @param scrambled Scrambled enabled/disabled for the capability.
|
||||
* @param dir Direction of capability.OORX, OOTX, OORXANDTX
|
||||
* @param startReceiveChannel Callback function to start receive channel.
|
||||
|
@ -340,38 +340,38 @@ EXTERN int ooCapabilityAddSimpleCapability
|
|||
* @param stopTransmitChannel Callback function to stop transmit channel.
|
||||
* @param remote TRUE, if adding call's remote capabilities.
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
*/
|
||||
int ooCapabilityAddGSMCapability(struct OOH323CallData *call, int cap,
|
||||
int ooCapabilityAddGSMCapability(struct OOH323CallData *call, int cap,
|
||||
unsigned framesPerPkt, OOBOOL comfortNoise,
|
||||
OOBOOL scrambled, int dir,
|
||||
OOBOOL scrambled, int dir,
|
||||
cb_StartReceiveChannel startReceiveChannel,
|
||||
cb_StartTransmitChannel startTransmitChannel,
|
||||
cb_StopReceiveChannel stopReceiveChannel,
|
||||
cb_StopTransmitChannel stopTransmitChannel,
|
||||
cb_StopTransmitChannel stopTransmitChannel,
|
||||
OOBOOL remote);
|
||||
|
||||
|
||||
/**
|
||||
* This function is used to add H263 video capability to local endpoints
|
||||
* capability list or to remote endpoints capability list or to a call's
|
||||
* This function is used to add H263 video capability to local endpoints
|
||||
* capability list or to remote endpoints capability list or to a call's
|
||||
* capability list.
|
||||
* @param call Handle to a call. If this is not Null, then
|
||||
* capability is added to call's remote enpoint
|
||||
* capability list, else it is added to local H323
|
||||
* @param call Handle to a call. If this is not Null, then
|
||||
* capability is added to call's remote enpoint
|
||||
* capability list, else it is added to local H323
|
||||
* endpoint list.
|
||||
* @param sqcifMPI Minimum picture interval for encoding/decoding
|
||||
* @param sqcifMPI Minimum picture interval for encoding/decoding
|
||||
* of SQCIF pictures.
|
||||
* @param qcifMPI Minimum picture interval for encoding/decoding
|
||||
* @param qcifMPI Minimum picture interval for encoding/decoding
|
||||
* of QCIF pictures.
|
||||
* @param cifMPI Minimum picture interval for encoding/decoding
|
||||
* @param cifMPI Minimum picture interval for encoding/decoding
|
||||
* of CIF pictures.
|
||||
* @param cif4MPI Minimum picture interval for encoding/decoding
|
||||
* @param cif4MPI Minimum picture interval for encoding/decoding
|
||||
* of CIF4 pictures.
|
||||
* @param cif16MPI Minimum picture interval for encoding/decoding
|
||||
* @param cif16MPI Minimum picture interval for encoding/decoding
|
||||
* of CIF16 pictures.
|
||||
* @param maxBitRate Maximum bit rate in units of 100 bits/s at
|
||||
* which a transmitter can transmit video or a
|
||||
* which a transmitter can transmit video or a
|
||||
* receiver can receive video.
|
||||
* @param dir Direction of capability.OORX, OOTX, OORXANDTX
|
||||
* @param startReceiveChannel Callback function to start receive channel.
|
||||
|
@ -380,37 +380,37 @@ int ooCapabilityAddGSMCapability(struct OOH323CallData *call, int cap,
|
|||
* @param stopTransmitChannel Callback function to stop transmit channel.
|
||||
* @param remote TRUE, if adding call's remote capabilities.
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
*/
|
||||
EXTERN int ooCapabilityAddH263VideoCapability(struct OOH323CallData *call,
|
||||
unsigned sqcifMPI, unsigned qcifMPI,
|
||||
unsigned cifMPI, unsigned cif4MPI,
|
||||
EXTERN int ooCapabilityAddH263VideoCapability(struct OOH323CallData *call,
|
||||
unsigned sqcifMPI, unsigned qcifMPI,
|
||||
unsigned cifMPI, unsigned cif4MPI,
|
||||
unsigned cif16MPI, unsigned maxBitRate, int dir,
|
||||
cb_StartReceiveChannel startReceiveChannel,
|
||||
cb_StartTransmitChannel startTransmitChannel,
|
||||
cb_StopReceiveChannel stopReceiveChannel,
|
||||
cb_StopTransmitChannel stopTransmitChannel,
|
||||
cb_StopTransmitChannel stopTransmitChannel,
|
||||
OOBOOL remote);
|
||||
|
||||
|
||||
/**
|
||||
* This function is an helper function to ooCapabilityAddH263VideoCapability.
|
||||
* @param call Handle to a call. If this is not Null, then
|
||||
* capability is added to call's remote enpoint
|
||||
* capability list, else it is added to local H323
|
||||
* @param call Handle to a call. If this is not Null, then
|
||||
* capability is added to call's remote enpoint
|
||||
* capability list, else it is added to local H323
|
||||
* endpoint list.
|
||||
* @param sqcifMPI Minimum picture interval for encoding/decoding
|
||||
* @param sqcifMPI Minimum picture interval for encoding/decoding
|
||||
* of SQCIF pictures.
|
||||
* @param qcifMPI Minimum picture interval for encoding/decoding
|
||||
* @param qcifMPI Minimum picture interval for encoding/decoding
|
||||
* of QCIF pictures.
|
||||
* @param cifMPI Minimum picture interval for encoding/decoding
|
||||
* @param cifMPI Minimum picture interval for encoding/decoding
|
||||
* of CIF pictures.
|
||||
* @param cif4MPI Minimum picture interval for encoding/decoding
|
||||
* @param cif4MPI Minimum picture interval for encoding/decoding
|
||||
* of CIF4 pictures.
|
||||
* @param cif16MPI Minimum picture interval for encoding/decoding
|
||||
* @param cif16MPI Minimum picture interval for encoding/decoding
|
||||
* of CIF16 pictures.
|
||||
* @param maxBitRate Maximum bit rate in units of 100 bits/s at
|
||||
* which a transmitter can transmit video or a
|
||||
* which a transmitter can transmit video or a
|
||||
* receiver can receive video.
|
||||
* @param dir Direction of capability.OORX, OOTX, OORXANDTX
|
||||
* @param startReceiveChannel Callback function to start receive channel.
|
||||
|
@ -419,24 +419,24 @@ EXTERN int ooCapabilityAddH263VideoCapability(struct OOH323CallData *call,
|
|||
* @param stopTransmitChannel Callback function to stop transmit channel.
|
||||
* @param remote TRUE, if adding call's remote capabilities.
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
*/
|
||||
int ooCapabilityAddH263VideoCapability_helper(struct OOH323CallData *call,
|
||||
unsigned sqcifMPI, unsigned qcifMPI,
|
||||
unsigned cifMPI, unsigned cif4MPI,
|
||||
unsigned cif16MPI, unsigned maxBitRate, int dir,
|
||||
int ooCapabilityAddH263VideoCapability_helper(struct OOH323CallData *call,
|
||||
unsigned sqcifMPI, unsigned qcifMPI,
|
||||
unsigned cifMPI, unsigned cif4MPI,
|
||||
unsigned cif16MPI, unsigned maxBitRate, int dir,
|
||||
cb_StartReceiveChannel startReceiveChannel,
|
||||
cb_StartTransmitChannel startTransmitChannel,
|
||||
cb_StopReceiveChannel stopReceiveChannel,
|
||||
cb_StopTransmitChannel stopTransmitChannel,
|
||||
cb_StopTransmitChannel stopTransmitChannel,
|
||||
OOBOOL remote);
|
||||
|
||||
/**
|
||||
* This function is used to add a audio capability to calls remote
|
||||
* This function is used to add a audio capability to calls remote
|
||||
* capability list.
|
||||
* @param call Handle to the call.
|
||||
* @param audioCap Handle to the remote endpoint's audio capability.
|
||||
* @param dir Direction in which capability is supported by
|
||||
* @param dir Direction in which capability is supported by
|
||||
* remote endpoint.
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, otherwise.
|
||||
|
@ -458,12 +458,12 @@ int ooAddRemoteCapability(struct OOH323CallData *call, H245Capability *cap);
|
|||
/**
|
||||
* This function is used to update joint capabilities for call. It checks
|
||||
* whether remote capability can be supported by local capabilities for the
|
||||
* call and if supported makes entry into the joint capability list for the
|
||||
* call and if supported makes entry into the joint capability list for the
|
||||
* call.
|
||||
* @param call Handle to the call
|
||||
* @param cap Remote cap which will be tested for compatibility.
|
||||
*
|
||||
* @return returns OO_OK, if updated else OO_FAILED;
|
||||
* @return returns OO_OK, if updated else OO_FAILED;
|
||||
*/
|
||||
EXTERN int ooCapabilityUpdateJointCapabilities
|
||||
(struct OOH323CallData* call, H245Capability *cap);
|
||||
|
@ -472,50 +472,50 @@ EXTERN int ooCapabilityUpdateJointCapabilities
|
|||
/**
|
||||
* This function is used to update joint video capabilities for call. It checks
|
||||
* whether remote capability can be supported by local capabilities for the
|
||||
* call and if supported makes entry into the joint capability list for the
|
||||
* call and if supported makes entry into the joint capability list for the
|
||||
* call.
|
||||
* @param call Handle to the call
|
||||
* @param videoCap Remote video capability which will be tested for
|
||||
* @param videoCap Remote video capability which will be tested for
|
||||
* compatibility.
|
||||
* @param dir Direction of the capability
|
||||
*
|
||||
* @return returns OO_OK, if updated else OO_FAILED;
|
||||
* @return returns OO_OK, if updated else OO_FAILED;
|
||||
*/
|
||||
EXTERN int ooCapabilityUpdateJointCapabilitiesVideo
|
||||
(struct OOH323CallData *call, H245VideoCapability *videoCap, int dir);
|
||||
|
||||
|
||||
/**
|
||||
* This function is used to update joint video H263 capabilities for call. It
|
||||
* checks whether remote capability can be supported by local capabilities for
|
||||
* This function is used to update joint video H263 capabilities for call. It
|
||||
* checks whether remote capability can be supported by local capabilities for
|
||||
* the call and if supported makes entry into the joint capability list for the
|
||||
* call.
|
||||
* @param call Handle to the call
|
||||
* @param pH263Cap Remote H263 video capability which will be tested for
|
||||
* @param pH263Cap Remote H263 video capability which will be tested for
|
||||
* compatibility.
|
||||
* @param dir Direction of the H263 capability
|
||||
*
|
||||
* @return returns OO_OK, if updated else OO_FAILED;
|
||||
* @return returns OO_OK, if updated else OO_FAILED;
|
||||
*/
|
||||
EXTERN int ooCapabilityUpdateJointCapabilitiesVideoH263
|
||||
(struct OOH323CallData *call, H245H263VideoCapability *pH263Cap, int dir);
|
||||
|
||||
|
||||
/**
|
||||
* This function is used to test whether the endpoint capability in the
|
||||
* This function is used to test whether the endpoint capability in the
|
||||
* specified direction can be supported by the audio capability.
|
||||
* @param call Handle to the call.
|
||||
* @param epCap Endpoint capability.
|
||||
* @param dataType Data type with which compatibility has to
|
||||
* @param dataType Data type with which compatibility has to
|
||||
* be tested.
|
||||
* @param dir Direction indicating whether endpoint capability
|
||||
* will be used for transmission or reception.
|
||||
*
|
||||
* @return TRUE, if compatible. FALSE, otherwise.
|
||||
* @return TRUE, if compatible. FALSE, otherwise.
|
||||
*/
|
||||
|
||||
ASN1BOOL ooCapabilityCheckCompatibility(struct OOH323CallData *call,
|
||||
ooH323EpCapability *epCap,
|
||||
ASN1BOOL ooCapabilityCheckCompatibility(struct OOH323CallData *call,
|
||||
ooH323EpCapability *epCap,
|
||||
H245DataType *dataType, int dir);
|
||||
|
||||
|
||||
|
@ -523,27 +523,27 @@ ASN1BOOL ooCapabilityCheckCompatibility(struct OOH323CallData *call,
|
|||
* This function is used to create a audio capability structure using the
|
||||
* capability type.
|
||||
* @param epCap Capability.
|
||||
* @param pctxt Handle to OOCTXT which will be used to allocate memory
|
||||
* @param pctxt Handle to OOCTXT which will be used to allocate memory
|
||||
* for new audio capability.
|
||||
* @param dir Direction in which the newly created capability will be
|
||||
* @param dir Direction in which the newly created capability will be
|
||||
* used.
|
||||
*
|
||||
* @return Newly created audio capability on success, NULL on
|
||||
* @return Newly created audio capability on success, NULL on
|
||||
* failure.
|
||||
*/
|
||||
struct H245AudioCapability* ooCapabilityCreateAudioCapability
|
||||
struct H245AudioCapability* ooCapabilityCreateAudioCapability
|
||||
(ooH323EpCapability* epCap, OOCTXT *pctxt, int dir);
|
||||
|
||||
/**
|
||||
* This function is used to create a video capability structure using the
|
||||
* capability type.
|
||||
* @param epCap Capability.
|
||||
* @param pctxt Handle to OOCTXT which will be used to allocate memory
|
||||
* @param pctxt Handle to OOCTXT which will be used to allocate memory
|
||||
* for new video capability.
|
||||
* @param dir Direction in which the newly created capability will be
|
||||
* @param dir Direction in which the newly created capability will be
|
||||
* used.
|
||||
*
|
||||
* @return Newly created video capability on success, NULL on
|
||||
* @return Newly created video capability on success, NULL on
|
||||
* failure.
|
||||
*/
|
||||
struct H245VideoCapability* ooCapabilityCreateVideoCapability
|
||||
|
@ -554,7 +554,7 @@ struct H245VideoCapability* ooCapabilityCreateVideoCapability
|
|||
* This function is used to create a dtmf capability which can be added to
|
||||
* a TCS message.
|
||||
* @param cap Type of dtmf capability to be created.
|
||||
* @param pctxt Pointer to OOCTXT structure to be used for memory
|
||||
* @param pctxt Pointer to OOCTXT structure to be used for memory
|
||||
* allocation.
|
||||
*
|
||||
* @return Pointer to the created DTMF capability, NULL in case of
|
||||
|
@ -570,23 +570,23 @@ void * ooCapabilityCreateDTMFCapability(int cap, int dtmfcodec, OOCTXT *pctxt);
|
|||
* for new audio capability.
|
||||
* @param dir Direction for the newly created capability.
|
||||
*
|
||||
* @return Newly created audio capability on success, NULL on
|
||||
* @return Newly created audio capability on success, NULL on
|
||||
* failure.
|
||||
*/
|
||||
struct H245AudioCapability* ooCapabilityCreateGSMFullRateCapability
|
||||
(ooH323EpCapability *epCap, OOCTXT* pctxt, int dir);
|
||||
|
||||
/**
|
||||
* This function is used to create a simple(g711, g728, g723.1, g729) audio
|
||||
* This function is used to create a simple(g711, g728, g723.1, g729) audio
|
||||
* capability structure.
|
||||
*
|
||||
* @param epCap Handle to the endpoint capability
|
||||
* @param pctxt Handle to OOCTXT which will be used to allocate memory
|
||||
* @param pctxt Handle to OOCTXT which will be used to allocate memory
|
||||
* for new audio capability.
|
||||
* @param dir Direction in which the newly created capability will be
|
||||
* @param dir Direction in which the newly created capability will be
|
||||
* used.
|
||||
*
|
||||
* @return Newly created audio capability on success, NULL on
|
||||
* @return Newly created audio capability on success, NULL on
|
||||
* failure.
|
||||
*/
|
||||
struct H245AudioCapability* ooCapabilityCreateSimpleCapability
|
||||
|
@ -596,15 +596,15 @@ struct H245AudioCapability* ooCapabilityCreateNonStandardCapability
|
|||
|
||||
|
||||
/**
|
||||
* This function is used to create a H263 video capability
|
||||
* This function is used to create a H263 video capability
|
||||
* structure.
|
||||
* @param epCap Handle to the endpoint capability
|
||||
* @param pctxt Handle to OOCTXT which will be used to allocate memory
|
||||
* @param pctxt Handle to OOCTXT which will be used to allocate memory
|
||||
* for new video capability.
|
||||
* @param dir Direction in which the newly created capability will be
|
||||
* @param dir Direction in which the newly created capability will be
|
||||
* used.
|
||||
*
|
||||
* @return Newly created video capability on success, NULL on
|
||||
* @return Newly created video capability on success, NULL on
|
||||
* failure.
|
||||
*/
|
||||
struct H245VideoCapability* ooCapabilityCreateH263VideoCapability
|
||||
|
@ -616,9 +616,9 @@ struct H245VideoCapability* ooCapabilityCreateH263VideoCapability
|
|||
* can be supported by the endpoint.
|
||||
* @param call Handle to the call.
|
||||
* @param audioCap Handle to the audio capability.
|
||||
* @param dir Direction in which support is desired.
|
||||
* @param dir Direction in which support is desired.
|
||||
*
|
||||
* @return Handle to the copyof capability which supports audioCap,
|
||||
* @return Handle to the copyof capability which supports audioCap,
|
||||
* Null if none found
|
||||
*/
|
||||
ooH323EpCapability* ooIsAudioDataTypeSupported
|
||||
|
@ -629,9 +629,9 @@ ooH323EpCapability* ooIsAudioDataTypeSupported
|
|||
* can be supported by the endpoint.
|
||||
* @param call Handle to the call.
|
||||
* @param pVideoCap Handle to the video capability.
|
||||
* @param dir Direction in which support is desired.
|
||||
* @param dir Direction in which support is desired.
|
||||
*
|
||||
* @return Handle to the copy of capability which supports video
|
||||
* @return Handle to the copy of capability which supports video
|
||||
* capability, Null if none found
|
||||
*/
|
||||
ooH323EpCapability* ooIsVideoDataTypeSupported
|
||||
|
@ -642,14 +642,14 @@ ooH323EpCapability* ooIsVideoDataTypeSupported
|
|||
* can be supported by the endpoint.
|
||||
* @param call Handle to the call.
|
||||
* @param pH263Cap Handle to the H263 video capability.
|
||||
* @param dir Direction in which support is desired.
|
||||
* @param dir Direction in which support is desired.
|
||||
* @param picFormat Picture type(cif, qcif etc.)
|
||||
*
|
||||
* @return Handle to the copy of capability which supports H263
|
||||
* @return Handle to the copy of capability which supports H263
|
||||
* capability, Null if none found
|
||||
*/
|
||||
ooH323EpCapability* ooIsVideoDataTypeH263Supported
|
||||
(struct OOH323CallData *call, H245H263VideoCapability* pH263Cap, int dir,
|
||||
(struct OOH323CallData *call, H245H263VideoCapability* pH263Cap, int dir,
|
||||
OOPictureFormat picFormat);
|
||||
|
||||
/**
|
||||
|
@ -657,9 +657,9 @@ ooH323EpCapability* ooIsVideoDataTypeH263Supported
|
|||
* can be supported by the endpoint.
|
||||
* @param call Handle to the call.
|
||||
* @param data Handle to the capability type.
|
||||
* @param dir Direction in which support is desired.
|
||||
* @param dir Direction in which support is desired.
|
||||
*
|
||||
* @return Handle to the copy of capability which supports specified
|
||||
* @return Handle to the copy of capability which supports specified
|
||||
* capability type, Null if none found
|
||||
*/
|
||||
ooH323EpCapability* ooIsDataTypeSupported
|
||||
|
@ -705,7 +705,7 @@ EXTERN int ooRemoveCapFromCapPrefs(struct OOH323CallData *call, int cap);
|
|||
EXTERN int ooAppendCapToCapPrefs(struct OOH323CallData *call, int cap);
|
||||
|
||||
/**
|
||||
* This function is used to change preference order of a particular capability
|
||||
* This function is used to change preference order of a particular capability
|
||||
* in the preference list.
|
||||
* @param call Handle to call, if call's preference list has to be modified
|
||||
* else NULL, to modify endpoint's preference list.
|
||||
|
@ -786,13 +786,11 @@ int ooCapabilityAddT38Capability
|
|||
/**/
|
||||
|
||||
|
||||
/**
|
||||
* @}
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
/*
|
||||
* Copyright (C) 2004-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
@ -109,7 +109,7 @@ int ooWriteStackCommand(OOStackCommand *cmd)
|
|||
return OO_FAILED;
|
||||
}
|
||||
ast_mutex_unlock(&gCmdChanLock);
|
||||
|
||||
|
||||
return OO_OK;
|
||||
}
|
||||
int ooWriteCallStackCommand(OOH323CallData* call, OOStackCommand *cmd)
|
||||
|
@ -144,14 +144,14 @@ int ooWriteCallStackCommand(OOH323CallData* call, OOStackCommand *cmd)
|
|||
return OO_FAILED;
|
||||
}
|
||||
ast_mutex_unlock(call->CmdChanLock);
|
||||
|
||||
|
||||
return OO_OK;
|
||||
}
|
||||
|
||||
|
||||
int ooReadAndProcessStackCommand()
|
||||
{
|
||||
OOH323CallData *pCall = NULL;
|
||||
OOH323CallData *pCall = NULL;
|
||||
unsigned char buffer[MAXMSGLEN];
|
||||
int i, recvLen = 0;
|
||||
OOStackCommand cmd;
|
||||
|
@ -174,10 +174,10 @@ int ooReadAndProcessStackCommand()
|
|||
|
||||
else {
|
||||
switch(cmd.type) {
|
||||
case OO_CMD_MAKECALL:
|
||||
OOTRACEINFO2("Processing MakeCall command %s\n",
|
||||
case OO_CMD_MAKECALL:
|
||||
OOTRACEINFO2("Processing MakeCall command %s\n",
|
||||
(char*)cmd.param2);
|
||||
|
||||
|
||||
ooH323NewCall ((char*)cmd.param2);
|
||||
break;
|
||||
|
||||
|
@ -210,7 +210,7 @@ int ooReadAndProcessStackCommand()
|
|||
}
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case OO_CMD_ANSCALL:
|
||||
pCall = ooFindCallByToken((char*)cmd.param1);
|
||||
if(!pCall) {
|
||||
|
@ -231,13 +231,13 @@ int ooReadAndProcessStackCommand()
|
|||
ooH323ForwardCall((char*)cmd.param1, (char*)cmd.param2);
|
||||
break;
|
||||
|
||||
case OO_CMD_HANGCALL:
|
||||
OOTRACEINFO3("Processing Hang call command %s with q931 cause %d\n",
|
||||
case OO_CMD_HANGCALL:
|
||||
OOTRACEINFO3("Processing Hang call command %s with q931 cause %d\n",
|
||||
(char*)cmd.param1, *(int *) cmd.param3);
|
||||
ooH323HangCall((char*)cmd.param1,
|
||||
ooH323HangCall((char*)cmd.param1,
|
||||
*(OOCallClearReason*)cmd.param2, *(int *) cmd.param3);
|
||||
break;
|
||||
|
||||
|
||||
case OO_CMD_SENDDIGIT:
|
||||
pCall = ooFindCallByToken((char*)cmd.param1);
|
||||
if(!pCall) {
|
||||
|
@ -259,7 +259,7 @@ int ooReadAndProcessStackCommand()
|
|||
|
||||
break;
|
||||
|
||||
case OO_CMD_STOPMONITOR:
|
||||
case OO_CMD_STOPMONITOR:
|
||||
OOTRACEINFO1("Processing StopMonitor command\n");
|
||||
ooStopMonitorCalls();
|
||||
break;
|
||||
|
@ -303,7 +303,7 @@ int ooReadAndProcessCallStackCommand(OOH323CallData* call)
|
|||
|
||||
if (cmd.plen1 > 0) {
|
||||
cmd.param1 = malloc(cmd.plen1 + 1);
|
||||
if (!cmd.param1)
|
||||
if (!cmd.param1)
|
||||
return OO_FAILED;
|
||||
memset(cmd.param1, 0, cmd.plen1 + 1);
|
||||
memcpy(cmd.param1, bPoint, cmd.plen1);
|
||||
|
@ -312,7 +312,7 @@ int ooReadAndProcessCallStackCommand(OOH323CallData* call)
|
|||
|
||||
if (cmd.plen2 > 0) {
|
||||
cmd.param2 = malloc(cmd.plen2 + 1);
|
||||
if (!cmd.param2)
|
||||
if (!cmd.param2)
|
||||
return OO_FAILED;
|
||||
memset(cmd.param2, 0, cmd.plen2 + 1);
|
||||
memcpy(cmd.param2, bPoint, cmd.plen2);
|
||||
|
@ -321,7 +321,7 @@ int ooReadAndProcessCallStackCommand(OOH323CallData* call)
|
|||
|
||||
if (cmd.plen3 > 0) {
|
||||
cmd.param3 = malloc(cmd.plen3 + 1);
|
||||
if (!cmd.param3)
|
||||
if (!cmd.param3)
|
||||
return OO_FAILED;
|
||||
memset(cmd.param3, 0, cmd.plen3 + 1);
|
||||
memcpy(cmd.param3, bPoint, cmd.plen3);
|
||||
|
@ -333,11 +333,11 @@ int ooReadAndProcessCallStackCommand(OOH323CallData* call)
|
|||
|
||||
else {
|
||||
switch(cmd.type) {
|
||||
case OO_CMD_MAKECALL:
|
||||
OOTRACEINFO2("Processing MakeCall command %s\n",
|
||||
case OO_CMD_MAKECALL:
|
||||
OOTRACEINFO2("Processing MakeCall command %s\n",
|
||||
(char*)cmd.param2);
|
||||
|
||||
ooH323MakeCall ((char*)cmd.param1, (char*)cmd.param2,
|
||||
|
||||
ooH323MakeCall ((char*)cmd.param1, (char*)cmd.param2,
|
||||
(ooCallOptions*)cmd.param3);
|
||||
break;
|
||||
|
||||
|
@ -354,7 +354,7 @@ int ooReadAndProcessCallStackCommand(OOH323CallData* call)
|
|||
}
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case OO_CMD_ANSCALL:
|
||||
ooSendConnect(call);
|
||||
break;
|
||||
|
@ -365,13 +365,13 @@ int ooReadAndProcessCallStackCommand(OOH323CallData* call)
|
|||
ooH323ForwardCall((char*)cmd.param1, (char*)cmd.param2);
|
||||
break;
|
||||
|
||||
case OO_CMD_HANGCALL:
|
||||
OOTRACEINFO2("Processing Hang call command %s with q931 cause %d\n",
|
||||
case OO_CMD_HANGCALL:
|
||||
OOTRACEINFO2("Processing Hang call command %s with q931 cause %d\n",
|
||||
(char*)cmd.param1);
|
||||
ooH323HangCall((char*)cmd.param1,
|
||||
ooH323HangCall((char*)cmd.param1,
|
||||
*(OOCallClearReason*)cmd.param2, *(int *) cmd.param3);
|
||||
break;
|
||||
|
||||
|
||||
case OO_CMD_SENDDIGIT:
|
||||
if(call->jointDtmfMode & OO_CAP_DTMF_H245_alphanumeric) {
|
||||
ooSendH245UserInputIndication_alphanumeric(
|
||||
|
@ -427,4 +427,3 @@ int ooReadAndProcessCallStackCommand(OOH323CallData* call)
|
|||
|
||||
return OO_OK;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,22 +1,22 @@
|
|||
/*
|
||||
* Copyright (C) 2004-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
/**
|
||||
* @file ooCmdChannel.h
|
||||
* @file ooCmdChannel.h
|
||||
* This file contains stack commands which an user application can use to make
|
||||
* call, hang call etc.
|
||||
* call, hang call etc.
|
||||
*/
|
||||
|
||||
#ifndef OO_CMDCHANNEL_H
|
||||
|
@ -40,13 +40,13 @@ extern "C" {
|
|||
#define OO_DEFAULT_CMDLISTENER_PORT 7575
|
||||
|
||||
/**
|
||||
* @addtogroup channels
|
||||
* @addtogroup channels
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* This function is used to setup a command connection with the main stack
|
||||
* thread. The application commands are sent over this connection to stack
|
||||
* This function is used to setup a command connection with the main stack
|
||||
* thread. The application commands are sent over this connection to stack
|
||||
* thread.
|
||||
*
|
||||
* @return OO_OK, on success; OO_FAILED, on failure
|
||||
|
@ -55,7 +55,7 @@ EXTERN int ooCreateCmdConnection(void);
|
|||
EXTERN int ooCreateCallCmdConnection(OOH323CallData*);
|
||||
|
||||
/**
|
||||
* This function is used to close a command channel setup with the stack
|
||||
* This function is used to close a command channel setup with the stack
|
||||
* thread.
|
||||
*
|
||||
* @return OO_OK, on success; OO_FAILED, on failure
|
||||
|
@ -65,7 +65,7 @@ EXTERN int ooCloseCallCmdConnection(OOH323CallData*);
|
|||
|
||||
|
||||
/**
|
||||
* This function is used by stack api to write stack commands to command
|
||||
* This function is used by stack api to write stack commands to command
|
||||
* channel.
|
||||
*
|
||||
* @return OO_OK, on success; OO_FAILED, on failure
|
||||
|
@ -74,7 +74,7 @@ EXTERN int ooWriteStackCommand(OOStackCommand *cmd);
|
|||
EXTERN int ooWriteCallStackCommand(OOH323CallData* call, OOStackCommand *cmd);
|
||||
|
||||
/**
|
||||
* This function is used by stack thread to read and process stack commands
|
||||
* This function is used by stack thread to read and process stack commands
|
||||
* received over command channel.
|
||||
*
|
||||
* @return OO_OK, on success; OO_FAILED, on failure
|
||||
|
@ -83,8 +83,8 @@ EXTERN int ooReadAndProcessStackCommand(void);
|
|||
EXTERN int ooReadAndProcessCallStackCommand(OOH323CallData*);
|
||||
|
||||
|
||||
/**
|
||||
* @}
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
|
|
@ -1,20 +1,20 @@
|
|||
/*
|
||||
* Copyright (C) 2004-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the LICENSE.txt file. It
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the LICENSE.txt file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
/**
|
||||
* @file ooCommon.h
|
||||
/**
|
||||
* @file ooCommon.h
|
||||
* Common runtime constant and type definitions.
|
||||
*/
|
||||
#ifndef _OOCOMMON_H_
|
||||
|
@ -43,7 +43,7 @@
|
|||
#endif
|
||||
#include <semaphore.h>
|
||||
|
||||
/**
|
||||
/**
|
||||
* @ingroup cruntime C Runtime Common Constant and Type Definitions.
|
||||
* @{
|
||||
*/
|
||||
|
@ -119,7 +119,7 @@ typedef struct _OOMsgBuf {
|
|||
#endif /* _DLL */
|
||||
#endif /* EXTERN */
|
||||
|
||||
/**
|
||||
* @}
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
#endif /* _OOCOMMON_H_ */
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
/*
|
||||
* Copyright (C) 2004-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the LICENSE.txt file. It
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the LICENSE.txt file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
@ -69,7 +69,7 @@ static uint64 calcEpocOffset() {
|
|||
|
||||
// Gets high resolution by spinning up to 15ms. Don't call this often!!!
|
||||
static uint64 getRawCurMsSpin() {
|
||||
FILETIME tm;
|
||||
FILETIME tm;
|
||||
uint64 t_now;
|
||||
|
||||
static uint64 epocOffset = 0;
|
||||
|
@ -121,7 +121,7 @@ int gettimeofday(struct timeval* tv, void* null) {
|
|||
baselineMs = getRawCurMsSpin();
|
||||
tickBaseline = timeGetTime();
|
||||
}
|
||||
|
||||
|
||||
uint64 now_ms = (baselineMs + (curTicks - tickBaseline));
|
||||
*tv = oo_ms_to_tv(now_ms);
|
||||
return 0;
|
||||
|
@ -170,7 +170,6 @@ int ooGetTimeOfDay (struct timeval *tv, struct timezone *tz)
|
|||
|
||||
long ooGetTimeDiff(struct timeval *tv1, struct timeval *tv2)
|
||||
{
|
||||
return ( ((tv2->tv_sec-tv1->tv_sec)*1000) +
|
||||
return ( ((tv2->tv_sec-tv1->tv_sec)*1000) +
|
||||
((tv2->tv_usec-tv1->tv_usec)/1000) );
|
||||
}
|
||||
|
||||
|
|
|
@ -1,20 +1,20 @@
|
|||
/*
|
||||
* Copyright (C) 2004-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the LICENSE.txt file. It
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the LICENSE.txt file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
/**
|
||||
* @file ooDateTime.h
|
||||
/**
|
||||
* @file ooDateTime.h
|
||||
* Time functions that reconcile differences between Windows and UNIX.
|
||||
*/
|
||||
#ifndef _OOTIME_H_
|
||||
|
@ -28,10 +28,10 @@ extern "C" {
|
|||
#endif
|
||||
|
||||
/**
|
||||
* This function provides an abstraction for the UNIX 'gettimeofday'
|
||||
* This function provides an abstraction for the UNIX 'gettimeofday'
|
||||
* function which is not available on Windows.
|
||||
*
|
||||
* @param tv Pointer to time value structure to receive
|
||||
* @param tv Pointer to time value structure to receive
|
||||
* current time value.
|
||||
* @param tz Point to time zone information.
|
||||
* @return Completion status of operation: 0 = success,
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -2,22 +2,22 @@
|
|||
* Copyright (C) 2005 by Page Iberica, S.A.
|
||||
* Copyright (C) 2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
/**
|
||||
* @file ooGkClient.h
|
||||
* This file contains functions to support RAS protocol.
|
||||
* @file ooGkClient.h
|
||||
* This file contains functions to support RAS protocol.
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
@ -73,7 +73,7 @@ extern "C" {
|
|||
#define OO_ARQ_TIMER (1<<3)
|
||||
#define OO_DRQ_TIMER (1<<4)
|
||||
|
||||
/**
|
||||
/**
|
||||
* @defgroup gkclient Gatekeeper client
|
||||
* @{
|
||||
*/
|
||||
|
@ -111,7 +111,7 @@ enum OOGkClientState {
|
|||
GkClientFailed,
|
||||
GkClientStopped
|
||||
};
|
||||
|
||||
|
||||
|
||||
typedef struct RasGatekeeperInfo
|
||||
{
|
||||
|
@ -136,9 +136,9 @@ struct OOAliases;
|
|||
|
||||
/**
|
||||
* NOTE- This functionality is not yet fully completed.
|
||||
* This is a callback function which is triggered when registration confirm
|
||||
* This is a callback function which is triggered when registration confirm
|
||||
* message is received from the gatekeeper. The first parameter is the message
|
||||
* received. The second parameter provides updated list of aliases after the
|
||||
* received. The second parameter provides updated list of aliases after the
|
||||
* message was processed by the stack.
|
||||
* @param rcf Handle to the received registration confirm message
|
||||
*/
|
||||
|
@ -148,9 +148,9 @@ typedef int (*cb_OnReceivedRegistrationConfirm)
|
|||
|
||||
/**
|
||||
* NOTE- This functionality is not yet fully completed.
|
||||
* This is a callback function which is triggered when unregistration confirm
|
||||
* This is a callback function which is triggered when unregistration confirm
|
||||
* message is received. The first parameter is the message received. The second
|
||||
* parameter provides updated list of aliases after the message was processed
|
||||
* parameter provides updated list of aliases after the message was processed
|
||||
* by the stack.
|
||||
*/
|
||||
typedef int (*cb_OnReceivedUnregistrationConfirm)
|
||||
|
@ -158,7 +158,7 @@ typedef int (*cb_OnReceivedUnregistrationConfirm)
|
|||
|
||||
/**
|
||||
* NOTE- This functionality is not yet fully completed.
|
||||
* This is a callback function which is triggered when unregistration request
|
||||
* This is a callback function which is triggered when unregistration request
|
||||
* message is received. The first parameter is the message received. The second
|
||||
* parameter provides the list of aliases requested to be unregistered.
|
||||
*/
|
||||
|
@ -220,20 +220,20 @@ struct OOH323CallData;
|
|||
* @param iGkPort Gk port.
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
*
|
||||
*
|
||||
*/
|
||||
EXTERN int ooGkClientInit
|
||||
(enum RasGatekeeperMode eGkMode, char *szGkAddr, int iGkPort );
|
||||
|
||||
/**
|
||||
* This function is used to print the gatekeeper client configuration
|
||||
* This function is used to print the gatekeeper client configuration
|
||||
* information to log.
|
||||
* @param pGkClient Handle to gatekeeper client.
|
||||
*/
|
||||
EXTERN void ooGkClientPrintConfig(ooGkClient *pGkClient);
|
||||
|
||||
/**
|
||||
* This function is used to destroy Gatekeeper client. It releases all the
|
||||
* This function is used to destroy Gatekeeper client. It releases all the
|
||||
* associated memory.
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
|
@ -243,17 +243,17 @@ EXTERN int ooGkClientDestroy(void);
|
|||
/**
|
||||
* This function is used to start the Gatekeeper client functionality.
|
||||
* @param pGkClient Pointer to the Gatekeeper Client.
|
||||
*
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
*/
|
||||
EXTERN int ooGkClientStart(ooGkClient *pGkClient);
|
||||
|
||||
/**
|
||||
* This function is invoked to set a gatekeeper mode.
|
||||
* @param pGkClient Handle to gatekeeper client.
|
||||
* @param eGkMode Gatekeeper mode selected. One of the following:
|
||||
* - RasNoGatekeeper (DEFAULT), No Gatekeeper.
|
||||
* - RasDiscoverGatekeeper, to discover a gatekeeper
|
||||
* This function is invoked to set a gatekeeper mode.
|
||||
* @param pGkClient Handle to gatekeeper client.
|
||||
* @param eGkMode Gatekeeper mode selected. One of the following:
|
||||
* - RasNoGatekeeper (DEFAULT), No Gatekeeper.
|
||||
* - RasDiscoverGatekeeper, to discover a gatekeeper
|
||||
* automatically.
|
||||
* - RasUseSpecificGatekeeper, to use a specific gatekeeper.
|
||||
* @param szGkAddr Gatekeeper address (only when using specific gatekeeper).
|
||||
|
@ -261,8 +261,8 @@ EXTERN int ooGkClientStart(ooGkClient *pGkClient);
|
|||
*
|
||||
* @return Completion status - OO_OK on success, OO_FAILED on failure
|
||||
*/
|
||||
EXTERN int ooGkClientSetGkMode(ooGkClient *pGkClient,
|
||||
enum RasGatekeeperMode eGkMode, char *szGkAddr,
|
||||
EXTERN int ooGkClientSetGkMode(ooGkClient *pGkClient,
|
||||
enum RasGatekeeperMode eGkMode, char *szGkAddr,
|
||||
int iGkPort );
|
||||
|
||||
/**
|
||||
|
@ -288,7 +288,7 @@ EXTERN int ooGkClientCloseChannel(ooGkClient *pGkClient);
|
|||
* identifier.
|
||||
* @param pGkClient Pointer to gatekeeper client.
|
||||
* @param psVendor Pointer to vendor identifier to be filled.
|
||||
*
|
||||
*
|
||||
*/
|
||||
EXTERN void ooGkClientRasFillVendor
|
||||
(ooGkClient *pGkClient, H225VendorIdentifier *psVendor);
|
||||
|
@ -299,14 +299,14 @@ EXTERN void ooGkClientRasFillVendor
|
|||
* @param pGkClient Handle to Gatekeeper client for which message has to be
|
||||
* received.
|
||||
*
|
||||
* @return Completion status - OO_OK on success, OO_FAILED on
|
||||
* @return Completion status - OO_OK on success, OO_FAILED on
|
||||
* failure
|
||||
*/
|
||||
EXTERN int ooGkClientReceive(ooGkClient *pGkClient);
|
||||
|
||||
|
||||
/**
|
||||
* This function is used to handle a received RAS message by a gatekeeper
|
||||
* This function is used to handle a received RAS message by a gatekeeper
|
||||
* client.
|
||||
* @param pGkClient Handle to gatekeeper client.
|
||||
* @param pRasMsg Handle to received Ras message.
|
||||
|
@ -322,14 +322,14 @@ EXTERN int ooGkClientHandleRASMessage
|
|||
* @param pGkClient Handle to the gatekeeper client.
|
||||
* @param pRasMsg Handle to Ras message to be sent.
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, otherwise.
|
||||
* @return OO_OK, on success. OO_FAILED, otherwise.
|
||||
*/
|
||||
EXTERN int ooGkClientSendMsg(ooGkClient *pGkClient, H225RasMessage *pRasMsg);
|
||||
|
||||
|
||||
/**
|
||||
* This function is used to send Gatekeeper request message.
|
||||
* @param pGkClient Handle to gatekeeper client for which GRQ message has to
|
||||
* @param pGkClient Handle to gatekeeper client for which GRQ message has to
|
||||
* be sent.
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, otherwise.
|
||||
|
@ -360,9 +360,9 @@ EXTERN int ooGkClientHandleGatekeeperConfirm
|
|||
|
||||
/**
|
||||
* This function is used to send Registration request message.
|
||||
* @param pGkClient Handle to gatekeeper client for which RRQ message has to
|
||||
* @param pGkClient Handle to gatekeeper client for which RRQ message has to
|
||||
* be sent.
|
||||
* @param keepAlive Indicates whether keepalive lightweight registration has
|
||||
* @param keepAlive Indicates whether keepalive lightweight registration has
|
||||
* to be sent.
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, otherwise.
|
||||
|
@ -392,9 +392,9 @@ EXTERN int ooGkClientHandleRegistrationReject
|
|||
|
||||
/**
|
||||
* This function is used to send UnRegistration request message.
|
||||
* @param pGkClient Handle to gatekeeper client for which URQ message has to
|
||||
* @param pGkClient Handle to gatekeeper client for which URQ message has to
|
||||
* be sent.
|
||||
* @param aliases List of aliases to be unregistered. NULL, if all the
|
||||
* @param aliases List of aliases to be unregistered. NULL, if all the
|
||||
* aliases have to be unregistered.
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, otherwise.
|
||||
|
@ -413,21 +413,21 @@ EXTERN int ooGkClientHandleUnregistrationRequest
|
|||
|
||||
|
||||
/**
|
||||
* This function is used to send an unregistration confirm message to
|
||||
* This function is used to send an unregistration confirm message to
|
||||
* gatekeeper.
|
||||
* @param pGkClient Handle to gatekeeper client.
|
||||
* @param reqNo Request Sequence number for the confirm message.
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
*/
|
||||
EXTERN int ooGkClientSendUnregistrationConfirm(ooGkClient *pGkClient,
|
||||
EXTERN int ooGkClientSendUnregistrationConfirm(ooGkClient *pGkClient,
|
||||
unsigned reqNo);
|
||||
|
||||
/**
|
||||
* This function is invoked to request bandwith admission for a call.
|
||||
* This function is invoked to request bandwith admission for a call.
|
||||
* @param pGkClient Gatekeeper client to be used
|
||||
* @param call Handle to the call.
|
||||
* @param retransmit Indicates whether new call or retransmitting for
|
||||
* @param retransmit Indicates whether new call or retransmitting for
|
||||
* existing call.
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
|
@ -447,8 +447,8 @@ EXTERN int ooGkClientHandleAdmissionConfirm
|
|||
|
||||
|
||||
/**
|
||||
* This function is used to handle a received Admission Reject message. It
|
||||
* finds the associated call and marks it for cleaning with appropriate
|
||||
* This function is used to handle a received Admission Reject message. It
|
||||
* finds the associated call and marks it for cleaning with appropriate
|
||||
* call end reason code.
|
||||
* @param pGkClient Handle to Gatekeeper client.
|
||||
* @param pAdmissionReject Handle to received admission reject message.
|
||||
|
@ -459,7 +459,7 @@ EXTERN int ooGkClientHandleAdmissionReject
|
|||
(ooGkClient *pGkClient, H225AdmissionReject *pAdmissionReject);
|
||||
|
||||
/**
|
||||
* This function is invoked to request call disengage to gatekeeper.
|
||||
* This function is invoked to request call disengage to gatekeeper.
|
||||
* @param pGkClient Gatekeeper client to be used.
|
||||
* @param call Call Handle
|
||||
*
|
||||
|
@ -520,7 +520,7 @@ EXTERN int ooGkClientARQTimerExpired(void* pdata);
|
|||
EXTERN int ooGkClientCleanCall(ooGkClient *pGkClient, struct OOH323CallData *call);
|
||||
|
||||
/**
|
||||
* This function is used to handle gatekeeper client failure or gatekeeper
|
||||
* This function is used to handle gatekeeper client failure or gatekeeper
|
||||
* failure which can be detected by unresponsiveness of gk.
|
||||
* @param pGkClient Handle to gatekeeper client.
|
||||
*
|
||||
|
@ -538,7 +538,7 @@ EXTERN int ooGkClientHandleClientOrGkFailure(ooGkClient *pGkClient);
|
|||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
*/
|
||||
EXTERN int ooGkClientUpdateRegisteredAliases
|
||||
(ooGkClient *pGkClient, H225_SeqOfH225AliasAddress *pAddresses,
|
||||
(ooGkClient *pGkClient, H225_SeqOfH225AliasAddress *pAddresses,
|
||||
OOBOOL registered);
|
||||
|
||||
/**
|
||||
|
@ -551,8 +551,8 @@ EXTERN int ooGkClientUpdateRegisteredAliases
|
|||
*/
|
||||
int ooGkClientSetCallbacks
|
||||
(ooGkClient *pGkClient, OOGKCLIENTCALLBACKS callbacks);
|
||||
/**
|
||||
* @}
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
int ooGkClientReInit(ooGkClient *pGkClient);
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
/*
|
||||
* Copyright (C) 2004-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
@ -23,8 +23,8 @@
|
|||
/** Global endpoint structure */
|
||||
extern OOH323EndPoint gH323ep;
|
||||
|
||||
OOLogicalChannel* ooAddNewLogicalChannel(OOH323CallData *call, int channelNo,
|
||||
int sessionID, char *dir,
|
||||
OOLogicalChannel* ooAddNewLogicalChannel(OOH323CallData *call, int channelNo,
|
||||
int sessionID, char *dir,
|
||||
ooH323EpCapability *epCap)
|
||||
{
|
||||
OOLogicalChannel *pNewChannel=NULL, *pChannel=NULL;
|
||||
|
@ -32,7 +32,7 @@ OOLogicalChannel* ooAddNewLogicalChannel(OOH323CallData *call, int channelNo,
|
|||
OOTRACEDBGC5("Adding new media channel for cap %d dir %s (%s, %s)\n",
|
||||
epCap->cap, dir, call->callType, call->callToken);
|
||||
/* Create a new logical channel entry */
|
||||
pNewChannel = (OOLogicalChannel*)memAlloc(call->pctxt,
|
||||
pNewChannel = (OOLogicalChannel*)memAlloc(call->pctxt,
|
||||
sizeof(OOLogicalChannel));
|
||||
if(!pNewChannel)
|
||||
{
|
||||
|
@ -40,7 +40,7 @@ OOLogicalChannel* ooAddNewLogicalChannel(OOH323CallData *call, int channelNo,
|
|||
"(%s, %s)\n", call->callType, call->callToken);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
memset(pNewChannel, 0, sizeof(OOLogicalChannel));
|
||||
pNewChannel->channelNo = channelNo;
|
||||
pNewChannel->sessionID = sessionID;
|
||||
|
@ -51,12 +51,12 @@ OOLogicalChannel* ooAddNewLogicalChannel(OOH323CallData *call, int channelNo,
|
|||
|
||||
pNewChannel->chanCap = epCap;
|
||||
OOTRACEDBGC4("Adding new channel with cap %d (%s, %s)\n", epCap->cap,
|
||||
call->callType, call->callToken);
|
||||
/* As per standards, media control port should be same for all
|
||||
call->callType, call->callToken);
|
||||
/* As per standards, media control port should be same for all
|
||||
proposed channels with same session ID. However, most applications
|
||||
use same media port for transmit and receive of audio streams. Infact,
|
||||
testing of OpenH323 based asterisk assumed that same ports are used.
|
||||
Hence we first search for existing media ports for same session and use
|
||||
testing of OpenH323 based asterisk assumed that same ports are used.
|
||||
Hence we first search for existing media ports for same session and use
|
||||
them. This should take care of all cases.
|
||||
*/
|
||||
if(call->mediaInfo)
|
||||
|
@ -72,7 +72,7 @@ OOLogicalChannel* ooAddNewLogicalChannel(OOH323CallData *call, int channelNo,
|
|||
pMediaInfo = pMediaInfo->next;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(pMediaInfo)
|
||||
{
|
||||
OOTRACEDBGC3("Using configured media info (%s, %s)\n", call->callType,
|
||||
|
@ -80,7 +80,7 @@ OOLogicalChannel* ooAddNewLogicalChannel(OOH323CallData *call, int channelNo,
|
|||
pNewChannel->localRtpPort = pMediaInfo->lMediaRedirPort ? pMediaInfo->lMediaRedirPort : pMediaInfo->lMediaPort;
|
||||
/* check MediaRedirPort here because RedirCPort is ReditPort + 1 and can't be 0 ;) */
|
||||
pNewChannel->localRtcpPort = pMediaInfo->lMediaRedirPort ? pMediaInfo->lMediaRedirCPort : pMediaInfo->lMediaCntrlPort;
|
||||
/* If user application has not specified a specific ip and is using
|
||||
/* If user application has not specified a specific ip and is using
|
||||
multihomed mode, substitute appropriate ip.
|
||||
*/
|
||||
if(!strcmp(pMediaInfo->lMediaIP, "0.0.0.0") || !strcmp(pMediaInfo->lMediaIP, "::"))
|
||||
|
@ -102,7 +102,7 @@ OOLogicalChannel* ooAddNewLogicalChannel(OOH323CallData *call, int channelNo,
|
|||
pNewChannel->localRtcpPort = ooGetNextPort (OORTP);
|
||||
strcpy(pNewChannel->localIP, call->localIP);
|
||||
}
|
||||
|
||||
|
||||
/* Add new channel to the list */
|
||||
pNewChannel->next = NULL;
|
||||
if(!call->logicalChans) {
|
||||
|
@ -113,7 +113,7 @@ OOLogicalChannel* ooAddNewLogicalChannel(OOH323CallData *call, int channelNo,
|
|||
while(pChannel->next) pChannel = pChannel->next;
|
||||
pChannel->next = pNewChannel;
|
||||
}
|
||||
|
||||
|
||||
/* increment logical channels */
|
||||
call->noOfLogicalChannels++;
|
||||
OOTRACEINFO3("Created new logical channel entry (%s, %s)\n", call->callType,
|
||||
|
@ -144,22 +144,22 @@ OOLogicalChannel* ooFindLogicalChannelByLogicalChannelNo(OOH323CallData *call,
|
|||
return pLogicalChannel;
|
||||
}
|
||||
|
||||
OOLogicalChannel * ooFindLogicalChannelByOLC(OOH323CallData *call,
|
||||
OOLogicalChannel * ooFindLogicalChannelByOLC(OOH323CallData *call,
|
||||
H245OpenLogicalChannel *olc)
|
||||
{
|
||||
H245DataType * psDataType=NULL;
|
||||
H245H2250LogicalChannelParameters * pslcp=NULL;
|
||||
OOTRACEDBGC4("ooFindLogicalChannel by olc %d (%s, %s)\n",
|
||||
OOTRACEDBGC4("ooFindLogicalChannel by olc %d (%s, %s)\n",
|
||||
olc->forwardLogicalChannelNumber, call->callType, call->callToken);
|
||||
if(olc->m.reverseLogicalChannelParametersPresent)
|
||||
{
|
||||
OOTRACEDBGC3("Finding receive channel (%s,%s)\n", call->callType,
|
||||
OOTRACEDBGC3("Finding receive channel (%s,%s)\n", call->callType,
|
||||
call->callToken);
|
||||
psDataType = &olc->reverseLogicalChannelParameters.dataType;
|
||||
/* Only H2250LogicalChannelParameters are supported */
|
||||
if(olc->reverseLogicalChannelParameters.multiplexParameters.t !=
|
||||
T_H245OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters_h2250LogicalChannelParameters){
|
||||
OOTRACEERR4("Error:Invalid olc %d received (%s, %s)\n",
|
||||
OOTRACEERR4("Error:Invalid olc %d received (%s, %s)\n",
|
||||
olc->forwardLogicalChannelNumber, call->callType, call->callToken);
|
||||
return NULL;
|
||||
}
|
||||
|
@ -168,14 +168,14 @@ OOLogicalChannel * ooFindLogicalChannelByOLC(OOH323CallData *call,
|
|||
return ooFindLogicalChannel(call, pslcp->sessionID, "receive", psDataType);
|
||||
}
|
||||
else{
|
||||
OOTRACEDBGC3("Finding transmit channel (%s, %s)\n", call->callType,
|
||||
OOTRACEDBGC3("Finding transmit channel (%s, %s)\n", call->callType,
|
||||
call->callToken);
|
||||
psDataType = &olc->forwardLogicalChannelParameters.dataType;
|
||||
/* Only H2250LogicalChannelParameters are supported */
|
||||
if(olc->forwardLogicalChannelParameters.multiplexParameters.t !=
|
||||
if(olc->forwardLogicalChannelParameters.multiplexParameters.t !=
|
||||
T_H245OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters_h2250LogicalChannelParameters)
|
||||
{
|
||||
OOTRACEERR4("Error:Invalid olc %d received (%s, %s)\n",
|
||||
OOTRACEERR4("Error:Invalid olc %d received (%s, %s)\n",
|
||||
olc->forwardLogicalChannelNumber, call->callType, call->callToken);
|
||||
return NULL;
|
||||
}
|
||||
|
@ -184,7 +184,7 @@ OOLogicalChannel * ooFindLogicalChannelByOLC(OOH323CallData *call,
|
|||
}
|
||||
}
|
||||
|
||||
OOLogicalChannel * ooFindLogicalChannel(OOH323CallData *call, int sessionID,
|
||||
OOLogicalChannel * ooFindLogicalChannel(OOH323CallData *call, int sessionID,
|
||||
char *dir, H245DataType * dataType)
|
||||
{
|
||||
OOLogicalChannel * pChannel = NULL;
|
||||
|
@ -246,7 +246,7 @@ OOLogicalChannel* ooGetTransmitLogicalChannel
|
|||
while(pChannel)
|
||||
{
|
||||
OOTRACEINFO6("Listing logical channel %d cap %d state %d for (%s, %s)\n",
|
||||
pChannel->channelNo, pChannel->chanCap->cap, pChannel->state,
|
||||
pChannel->channelNo, pChannel->chanCap->cap, pChannel->state,
|
||||
call->callType, call->callToken);
|
||||
if(!strcmp(pChannel->dir, "transmit") && pChannel->state != OO_LOGICALCHAN_IDLE &&
|
||||
pChannel->state != OO_LOGICALCHAN_PROPOSEDFS)
|
||||
|
@ -283,14 +283,14 @@ int ooClearAllLogicalChannels(OOH323CallData *call)
|
|||
|
||||
OOTRACEINFO3("Clearing all logical channels (%s, %s)\n", call->callType,
|
||||
call->callToken);
|
||||
|
||||
|
||||
temp = call->logicalChans;
|
||||
while(temp)
|
||||
{
|
||||
prev = temp;
|
||||
temp = temp->next;
|
||||
ooClearLogicalChannel(call, prev->channelNo);/* TODO: efficiency - This causes re-search
|
||||
of of logical channel in the list. Can be
|
||||
ooClearLogicalChannel(call, prev->channelNo);/* TODO: efficiency - This causes re-search
|
||||
of logical channel in the list. Can be
|
||||
easily improved.*/
|
||||
}
|
||||
call->logicalChans = NULL;
|
||||
|
@ -321,7 +321,7 @@ int ooClearLogicalChannel(OOH323CallData *call, int channelNo)
|
|||
if(epCap->stopReceiveChannel)
|
||||
{
|
||||
epCap->stopReceiveChannel(call, pLogicalChannel);
|
||||
OOTRACEINFO4("Stopped Receive channel %d (%s, %s)\n",
|
||||
OOTRACEINFO4("Stopped Receive channel %d (%s, %s)\n",
|
||||
channelNo, call->callType, call->callToken);
|
||||
}
|
||||
else{
|
||||
|
@ -336,12 +336,12 @@ int ooClearLogicalChannel(OOH323CallData *call, int channelNo)
|
|||
if(epCap->stopTransmitChannel)
|
||||
{
|
||||
epCap->stopTransmitChannel(call, pLogicalChannel);
|
||||
OOTRACEINFO4("Stopped Transmit channel %d (%s, %s)\n",
|
||||
OOTRACEINFO4("Stopped Transmit channel %d (%s, %s)\n",
|
||||
channelNo, call->callType, call->callToken);
|
||||
}
|
||||
else{
|
||||
OOTRACEERR4("ERROR:No callback registered for stopTransmitChannel"
|
||||
" %d (%s, %s)\n", channelNo, call->callType,
|
||||
" %d (%s, %s)\n", channelNo, call->callType,
|
||||
call->callToken);
|
||||
}
|
||||
}
|
||||
|
@ -355,11 +355,11 @@ int ooClearLogicalChannel(OOH323CallData *call, int channelNo)
|
|||
|
||||
int ooRemoveLogicalChannel(OOH323CallData *call, int ChannelNo)
|
||||
{
|
||||
OOLogicalChannel * temp = NULL, *prev=NULL;
|
||||
OOLogicalChannel * temp = NULL, *prev=NULL;
|
||||
if(!call->logicalChans)
|
||||
{
|
||||
OOTRACEERR4("ERROR:Remove Logical Channel - Channel %d not found "
|
||||
"Empty channel List(%s, %s)\n", ChannelNo, call->callType,
|
||||
"Empty channel List(%s, %s)\n", ChannelNo, call->callType,
|
||||
call->callToken);
|
||||
return OO_FAILED;
|
||||
}
|
||||
|
@ -381,23 +381,23 @@ int ooRemoveLogicalChannel(OOH323CallData *call, int ChannelNo)
|
|||
prev = temp;
|
||||
temp = temp->next;
|
||||
}
|
||||
|
||||
|
||||
OOTRACEERR4("ERROR:Remove Logical Channel - Channel %d not found "
|
||||
"(%s, %s)\n", ChannelNo, call->callType, call->callToken);
|
||||
return OO_FAILED;
|
||||
}
|
||||
|
||||
/*
|
||||
Change the state of the channel as established and close all other
|
||||
channels with same session IDs. This is useful for handling fastStart,
|
||||
/*
|
||||
Change the state of the channel as established and close all other
|
||||
channels with same session IDs. This is useful for handling fastStart,
|
||||
as the endpoint can open multiple logical channels for same sessionID.
|
||||
Once the remote endpoint confirms it's selection, all other channels for
|
||||
Once the remote endpoint confirms it's selection, all other channels for
|
||||
the same sessionID must be closed.
|
||||
*/
|
||||
int ooOnLogicalChannelEstablished
|
||||
(OOH323CallData *call, OOLogicalChannel * pChannel)
|
||||
{
|
||||
OOLogicalChannel * temp = NULL, *prev=NULL;
|
||||
OOLogicalChannel * temp = NULL, *prev=NULL;
|
||||
OOTRACEDBGC3("In ooOnLogicalChannelEstablished (%s, %s)\n",
|
||||
call->callType, call->callToken);
|
||||
pChannel->state = OO_LOGICALCHAN_ESTABLISHED;
|
||||
|
@ -417,4 +417,3 @@ int ooOnLogicalChannelEstablished
|
|||
}
|
||||
return OO_OK;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,20 +1,20 @@
|
|||
/*
|
||||
* Copyright (C) 2004-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
/**
|
||||
* @file ooLogChan.h
|
||||
* @file ooLogChan.h
|
||||
* This file contains structures and functions for maintaining information
|
||||
* on logical channels within the stack.
|
||||
*/
|
||||
|
@ -34,13 +34,13 @@ extern "C" {
|
|||
struct ooH323EpCapability;
|
||||
struct OOH323CallData;
|
||||
|
||||
/**
|
||||
/**
|
||||
* Logical channel states.
|
||||
*/
|
||||
typedef enum {
|
||||
OO_LOGICAL_CHAN_UNKNOWN,
|
||||
OO_LOGICALCHAN_IDLE,
|
||||
OO_LOGICALCHAN_PROPOSED,
|
||||
OO_LOGICAL_CHAN_UNKNOWN,
|
||||
OO_LOGICALCHAN_IDLE,
|
||||
OO_LOGICALCHAN_PROPOSED,
|
||||
OO_LOGICALCHAN_ESTABLISHED,
|
||||
OO_LOGICALCHAN_PROPOSEDFS,
|
||||
OO_LOGICALCHAN_CLOSEPENDING
|
||||
|
@ -60,7 +60,7 @@ typedef struct OOLogicalChannel {
|
|||
int localRtpPort;
|
||||
int localRtcpPort;
|
||||
char localIP[2+8*4+7];
|
||||
OOLogicalChannelState state;
|
||||
OOLogicalChannelState state;
|
||||
struct ooH323EpCapability *chanCap;
|
||||
struct OOLogicalChannel *next;
|
||||
} OOLogicalChannel;
|
||||
|
@ -70,7 +70,7 @@ typedef struct OOLogicalChannel {
|
|||
/**
|
||||
* This function is used to add a new logical channel entry into the list
|
||||
* of currently active logical channels.
|
||||
* @param call Pointer to the call for which new logical channel
|
||||
* @param call Pointer to the call for which new logical channel
|
||||
* entry has to be created.
|
||||
* @param channelNo Channel number for the new channel entry.
|
||||
* @param sessionID Session identifier for the new channel.
|
||||
|
@ -80,26 +80,26 @@ typedef struct OOLogicalChannel {
|
|||
* @return Pointer to logical channel, on success. NULL, on failure
|
||||
*/
|
||||
EXTERN ooLogicalChannel* ooAddNewLogicalChannel
|
||||
(struct OOH323CallData *call, int channelNo, int sessionID,
|
||||
(struct OOH323CallData *call, int channelNo, int sessionID,
|
||||
char *dir, ooH323EpCapability *epCap);
|
||||
|
||||
/**
|
||||
* This function is used to find a logical channel using the logical
|
||||
* This function is used to find a logical channel using the logical
|
||||
* channel number as a key.
|
||||
* @param call Pointer to the call for which logical channel is
|
||||
* @param call Pointer to the call for which logical channel is
|
||||
* required.
|
||||
* @param channelNo Forward Logical Channel number for the logical channel
|
||||
*
|
||||
* @return Pointer to the logical channel if found, NULL
|
||||
* otherwise.
|
||||
* @return Pointer to the logical channel if found, NULL
|
||||
* otherwise.
|
||||
*/
|
||||
EXTERN ooLogicalChannel* ooFindLogicalChannelByLogicalChannelNo
|
||||
(struct OOH323CallData *call, int channelNo);
|
||||
|
||||
/**
|
||||
* This function is called when a new logical channel is established. It is
|
||||
* particularly useful in case of faststart. When the remote endpoint selects
|
||||
* one of the proposed alternatives, other channels for the same session type
|
||||
* This function is called when a new logical channel is established. It is
|
||||
* particularly useful in case of faststart. When the remote endpoint selects
|
||||
* one of the proposed alternatives, other channels for the same session type
|
||||
* need to be closed. This function is used for that.
|
||||
*
|
||||
* @param call Handle to the call which owns the logical channel.
|
||||
|
@ -110,24 +110,24 @@ EXTERN int ooOnLogicalChannelEstablished
|
|||
(struct OOH323CallData *call, OOLogicalChannel * pChannel);
|
||||
|
||||
/**
|
||||
* This function is used to retrieve a logical channel with a particular
|
||||
* sessionID. Note that there can be two entries of logical channel, one in
|
||||
* each direction. This function will return the first channel which has the
|
||||
* This function is used to retrieve a logical channel with a particular
|
||||
* sessionID. Note that there can be two entries of logical channel, one in
|
||||
* each direction. This function will return the first channel which has the
|
||||
* same session ID.
|
||||
* @param call Handle to the call which owns the channels to be searched.
|
||||
* @param sessionID Session id of the session which is to be searched for.
|
||||
* @param dir Direction of the channel.(transmit/receive)
|
||||
*
|
||||
* @return Returns a pointer to the logical channel if found, NULL
|
||||
* @return Returns a pointer to the logical channel if found, NULL
|
||||
* otherwise.
|
||||
*/
|
||||
EXTERN ooLogicalChannel* ooGetLogicalChannel
|
||||
(struct OOH323CallData *call, int sessionID, char *dir);
|
||||
|
||||
/**
|
||||
* This function is used to remove a logical channel from the list of
|
||||
* This function is used to remove a logical channel from the list of
|
||||
* channels within the call structure.
|
||||
* @param call Pointer to the call from which logical channel has
|
||||
* @param call Pointer to the call from which logical channel has
|
||||
* to be removed.
|
||||
* @param ChannelNo Forward logical channel number of the channel to be
|
||||
* removed.
|
||||
|
@ -137,7 +137,7 @@ EXTERN int ooRemoveLogicalChannel (struct OOH323CallData *call, int ChannelNo);
|
|||
|
||||
/**
|
||||
* This function is used to cleanup a logical channel. It first stops media if
|
||||
* it is still active and then removes the channel from the list, freeing up
|
||||
* it is still active and then removes the channel from the list, freeing up
|
||||
* all the associated memory.
|
||||
* @param call Handle to the call which owns the logical channel.
|
||||
* @param channelNo Channel number identifying the channel.
|
||||
|
@ -147,7 +147,7 @@ EXTERN int ooRemoveLogicalChannel (struct OOH323CallData *call, int ChannelNo);
|
|||
EXTERN int ooClearLogicalChannel (struct OOH323CallData *call, int channelNo);
|
||||
|
||||
/**
|
||||
* This function is used to cleanup all the logical channels associated with
|
||||
* This function is used to cleanup all the logical channels associated with
|
||||
* the call.
|
||||
* @param call Handle to the call which owns the channels.
|
||||
*
|
||||
|
@ -184,8 +184,8 @@ EXTERN OOLogicalChannel * ooFindLogicalChannel
|
|||
EXTERN OOLogicalChannel* ooGetTransmitLogicalChannel(struct OOH323CallData *call);
|
||||
EXTERN OOLogicalChannel* ooGetReceiveLogicalChannel(struct OOH323CallData *call);
|
||||
|
||||
/**
|
||||
* @}
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
/*
|
||||
* Copyright (C) 1997-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
@ -17,6 +17,10 @@
|
|||
|
||||
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
||||
|
||||
#ifdef SOLARIS
|
||||
#include <sys/sockio.h>
|
||||
#endif
|
||||
|
||||
#include "asterisk/io.h"
|
||||
#include "asterisk/lock.h"
|
||||
#include "asterisk/utils.h"
|
||||
|
@ -81,10 +85,10 @@ int ooSocketsInit ()
|
|||
WSADATA wsaData;
|
||||
int err;
|
||||
|
||||
if (inited) return ASN_OK;
|
||||
if (inited) return ASN_OK;
|
||||
|
||||
wVersionRequested = MAKEWORD( 1, 1 );
|
||||
|
||||
|
||||
err = WSAStartup (wVersionRequested, &wsaData);
|
||||
if ( err != 0 ) {
|
||||
/* Tell the user that we could not find a usable */
|
||||
|
@ -102,58 +106,58 @@ int ooSocketsInit ()
|
|||
// ws32 = LoadLibrary ("WSOCK32.DLL");
|
||||
ws32 = LoadLibrary ("WS2_32.DLL");
|
||||
if (ws32 == NULL) return ASN_E_NOTINIT;
|
||||
|
||||
|
||||
wsaStartup = (LPFN_WSASTARTUP) GetProcAddress (ws32, "WSAStartup");
|
||||
if (wsaStartup == NULL) return ASN_E_NOTINIT;
|
||||
|
||||
|
||||
send = (LPFN_SEND) GetProcAddress (ws32, "send");
|
||||
if (send == NULL) return ASN_E_NOTINIT;
|
||||
|
||||
|
||||
socket = (LPFN_SOCKET) GetProcAddress (ws32, "socket");
|
||||
if (socket == NULL) return ASN_E_NOTINIT;
|
||||
|
||||
|
||||
setsockopt = (LPFN_SETSOCKOPT) GetProcAddress (ws32, "setsockopt");
|
||||
if (setsockopt == NULL) return ASN_E_NOTINIT;
|
||||
|
||||
|
||||
bind = (LPFN_BIND) GetProcAddress (ws32, "bind");
|
||||
if (bind == NULL) return ASN_E_NOTINIT;
|
||||
|
||||
|
||||
htonl = (LPFN_HTONL) GetProcAddress (ws32, "htonl");
|
||||
if (htonl == NULL) return ASN_E_NOTINIT;
|
||||
|
||||
|
||||
htons = (LPFN_HTONS) GetProcAddress (ws32, "htons");
|
||||
if (htons == NULL) return ASN_E_NOTINIT;
|
||||
|
||||
|
||||
connect = (LPFN_CONNECT) GetProcAddress (ws32, "connect");
|
||||
if (connect == NULL) return ASN_E_NOTINIT;
|
||||
|
||||
|
||||
listen = (LPFN_LISTEN) GetProcAddress (ws32, "listen");
|
||||
if (listen == NULL) return ASN_E_NOTINIT;
|
||||
|
||||
|
||||
accept = (LPFN_ACCEPT) GetProcAddress (ws32, "accept");
|
||||
if (accept == NULL) return ASN_E_NOTINIT;
|
||||
|
||||
|
||||
inet_addr = (LPFN_INET_ADDR) GetProcAddress (ws32, "inet_addr");
|
||||
if (inet_addr == NULL) return ASN_E_NOTINIT;
|
||||
|
||||
|
||||
ntohl = (LPFN_NTOHL) GetProcAddress (ws32, "ntohl");
|
||||
if (ntohl == NULL) return ASN_E_NOTINIT;
|
||||
|
||||
|
||||
ntohs = (LPFN_NTOHS) GetProcAddress (ws32, "ntohs");
|
||||
if (ntohs == NULL) return ASN_E_NOTINIT;
|
||||
|
||||
|
||||
recv = (LPFN_RECV) GetProcAddress (ws32, "recv");
|
||||
if (recv == NULL) return ASN_E_NOTINIT;
|
||||
|
||||
|
||||
shutdown = (LPFN_SHUTDOWN) GetProcAddress (ws32, "shutdown");
|
||||
if (shutdown == NULL) return ASN_E_NOTINIT;
|
||||
|
||||
|
||||
closesocket = (LPFN_CLOSESOCKET) GetProcAddress (ws32, "closesocket");
|
||||
if (closesocket == NULL) return ASN_E_NOTINIT;
|
||||
|
||||
getsockname = (LPFN_GETSOCKNAME) GetProcAddress (ws32, "getsockname");
|
||||
if (getsockname == NULL) return ASN_E_NOTINIT;
|
||||
|
||||
|
||||
ioctlsocket = (LPFN_IOCTLSOCKET) GetProcAddress(ws32, "ioctlsocket");
|
||||
if(ioctlsocket == NULL) return ASN_E_NOTINIT;
|
||||
|
||||
|
@ -174,15 +178,15 @@ int ooSocketsInit ()
|
|||
|
||||
gethostbyname = (LPFN_GETHOSTBYNAME) GetProcAddress (ws32, "gethostbyname");
|
||||
if (gethostbyname == NULL) return ASN_E_NOTINIT;
|
||||
|
||||
WSAGetLastError = (LPFN_WSAGETLASTERROR) GetProcAddress (ws32,
|
||||
|
||||
WSAGetLastError = (LPFN_WSAGETLASTERROR) GetProcAddress (ws32,
|
||||
"WSAGetLastError");
|
||||
if (WSAGetLastError == NULL) return ASN_E_NOTINIT;
|
||||
|
||||
WSACleanup = (LPFN_WSACLEANUP) GetProcAddress (ws32, "WSACleanup");
|
||||
if (WSACleanup == NULL) return ASN_E_NOTINIT;
|
||||
|
||||
|
||||
|
||||
|
||||
if (wsaStartup (MAKEWORD(1, 1), &wsaData) == -1) return ASN_E_NOTINIT;
|
||||
#endif
|
||||
return ASN_OK;
|
||||
|
@ -195,7 +199,7 @@ typedef int OOSOCKLEN;
|
|||
typedef socklen_t OOSOCKLEN;
|
||||
#endif
|
||||
|
||||
int ooSocketCreate (OOSOCKET* psocket, int family)
|
||||
int ooSocketCreate (OOSOCKET* psocket, int family)
|
||||
{
|
||||
int on;
|
||||
OOSOCKET sock;
|
||||
|
@ -214,14 +218,14 @@ int ooSocketCreate (OOSOCKET* psocket, int family)
|
|||
SOCK_STREAM,
|
||||
0);
|
||||
}
|
||||
|
||||
|
||||
if (sock == OOSOCKET_INVALID){
|
||||
OOTRACEERR1("Error:Failed to create TCP socket\n");
|
||||
return ASN_E_INVSOCKET;
|
||||
}
|
||||
|
||||
on = 1;
|
||||
if (setsockopt (sock, SOL_SOCKET, SO_REUSEADDR,
|
||||
if (setsockopt (sock, SOL_SOCKET, SO_REUSEADDR,
|
||||
(const char* ) &on, sizeof (on)) == -1)
|
||||
{
|
||||
OOTRACEERR1("Error:Failed to set socket option SO_REUSEADDR\n");
|
||||
|
@ -229,7 +233,7 @@ int ooSocketCreate (OOSOCKET* psocket, int family)
|
|||
}
|
||||
linger.l_onoff = 1;
|
||||
linger.l_linger = 0;
|
||||
if (setsockopt (sock, SOL_SOCKET, SO_LINGER,
|
||||
if (setsockopt (sock, SOL_SOCKET, SO_LINGER,
|
||||
(const char* ) &linger, sizeof (linger)) == -1)
|
||||
{
|
||||
OOTRACEERR1("Error:Failed to set socket option linger\n");
|
||||
|
@ -246,7 +250,7 @@ int ooSocketCreate (OOSOCKET* psocket, int family)
|
|||
return ASN_OK;
|
||||
}
|
||||
|
||||
int ooSocketCreateUDP (OOSOCKET* psocket, int family)
|
||||
int ooSocketCreateUDP (OOSOCKET* psocket, int family)
|
||||
{
|
||||
int on;
|
||||
OOSOCKET sock;
|
||||
|
@ -266,7 +270,7 @@ int ooSocketCreateUDP (OOSOCKET* psocket, int family)
|
|||
}
|
||||
|
||||
on = 1;
|
||||
if (setsockopt (sock, SOL_SOCKET, SO_REUSEADDR,
|
||||
if (setsockopt (sock, SOL_SOCKET, SO_REUSEADDR,
|
||||
(const char* ) &on, sizeof (on)) == -1)
|
||||
{
|
||||
OOTRACEERR1("Error:Failed to set socket option SO_REUSEADDR\n");
|
||||
|
@ -276,7 +280,7 @@ int ooSocketCreateUDP (OOSOCKET* psocket, int family)
|
|||
/*
|
||||
linger.l_onoff = 1;
|
||||
linger.l_linger = 0;
|
||||
if (setsockopt (sock, SOL_SOCKET, SO_LINGER,
|
||||
if (setsockopt (sock, SOL_SOCKET, SO_LINGER,
|
||||
(const char* ) &linger, sizeof (linger)) == -1)
|
||||
return ASN_E_INVSOCKET;
|
||||
*/
|
||||
|
@ -292,7 +296,7 @@ int ooSocketClose (OOSOCKET socket)
|
|||
return ASN_OK;
|
||||
}
|
||||
|
||||
int ooSocketBind (OOSOCKET socket, OOIPADDR addr, int port)
|
||||
int ooSocketBind (OOSOCKET socket, OOIPADDR addr, int port)
|
||||
{
|
||||
struct ast_sockaddr m_addr;
|
||||
|
||||
|
@ -300,7 +304,7 @@ int ooSocketBind (OOSOCKET socket, OOIPADDR addr, int port)
|
|||
|
||||
|
||||
if (socket == OOSOCKET_INVALID)
|
||||
{
|
||||
{
|
||||
OOTRACEERR1("Error:Invalid socket passed to bind\n");
|
||||
return ASN_E_INVSOCKET;
|
||||
}
|
||||
|
@ -345,7 +349,7 @@ int ooSocketGetIpAndPort(OOSOCKET socket, char *ip, int len, int *port, int *fam
|
|||
host = ast_sockaddr_stringify_addr(&addr);
|
||||
|
||||
if(host && strlen(host) < (unsigned)len)
|
||||
strcpy(ip, host);
|
||||
strcpy(ip, host);
|
||||
else{
|
||||
OOTRACEERR1("Error:Insufficient buffer for ip address - "
|
||||
"ooSocketGetIpAndPort\n");
|
||||
|
@ -363,7 +367,7 @@ int ooSocketGetIpAndPort(OOSOCKET socket, char *ip, int len, int *port, int *fam
|
|||
return ASN_OK;
|
||||
}
|
||||
|
||||
int ooSocketListen (OOSOCKET socket, int maxConnection)
|
||||
int ooSocketListen (OOSOCKET socket, int maxConnection)
|
||||
{
|
||||
if (socket == OOSOCKET_INVALID) return ASN_E_INVSOCKET;
|
||||
|
||||
|
@ -373,8 +377,8 @@ int ooSocketListen (OOSOCKET socket, int maxConnection)
|
|||
return ASN_OK;
|
||||
}
|
||||
|
||||
int ooSocketAccept (OOSOCKET socket, OOSOCKET *pNewSocket,
|
||||
char* destAddr, int* destPort)
|
||||
int ooSocketAccept (OOSOCKET socket, OOSOCKET *pNewSocket,
|
||||
char* destAddr, int* destPort)
|
||||
{
|
||||
struct ast_sockaddr addr;
|
||||
char* host = NULL;
|
||||
|
@ -386,7 +390,7 @@ int ooSocketAccept (OOSOCKET socket, OOSOCKET *pNewSocket,
|
|||
if (*pNewSocket <= 0) return ASN_E_INVSOCKET;
|
||||
|
||||
if (destAddr != 0) {
|
||||
if ((host = ast_sockaddr_stringify_addr(&addr)) != NULL);
|
||||
if ((host = ast_sockaddr_stringify_addr(&addr)) != NULL)
|
||||
strncpy(destAddr, host, strlen(host));
|
||||
}
|
||||
if (destPort != 0)
|
||||
|
@ -395,15 +399,15 @@ int ooSocketAccept (OOSOCKET socket, OOSOCKET *pNewSocket,
|
|||
return ASN_OK;
|
||||
}
|
||||
|
||||
int ooSocketConnect (OOSOCKET socket, const char* host, int port)
|
||||
int ooSocketConnect (OOSOCKET socket, const char* host, int port)
|
||||
{
|
||||
struct ast_sockaddr m_addr;
|
||||
|
||||
if (socket == OOSOCKET_INVALID)
|
||||
{
|
||||
{
|
||||
return ASN_E_INVSOCKET;
|
||||
}
|
||||
|
||||
|
||||
memset (&m_addr, 0, sizeof (m_addr));
|
||||
ast_parse_arg(host, PARSE_ADDR, &m_addr);
|
||||
ast_sockaddr_set_port(&m_addr, port);
|
||||
|
@ -416,13 +420,13 @@ int ooSocketConnect (OOSOCKET socket, const char* host, int port)
|
|||
}
|
||||
/*
|
||||
// **Need to add check whether complete data was sent by checking the return
|
||||
// **value of send and if complete data is not sent then add mechanism to
|
||||
// **value of send and if complete data is not sent then add mechanism to
|
||||
// **send remaining bytes. This will make ooSocketSend call atomic.
|
||||
*/
|
||||
int ooSocketSend (OOSOCKET socket, const ASN1OCTET* pdata, ASN1UINT size)
|
||||
{
|
||||
if (socket == OOSOCKET_INVALID) return ASN_E_INVSOCKET;
|
||||
|
||||
|
||||
if (send (socket, (const char*) pdata, size, SEND_FLAGS) == -1)
|
||||
return ASN_E_INVSOCKET;
|
||||
return ASN_OK;
|
||||
|
@ -433,14 +437,14 @@ int ooSocketSendTo(OOSOCKET socket, const ASN1OCTET* pdata, ASN1UINT size,
|
|||
{
|
||||
struct sockaddr_in m_addr;
|
||||
if (socket == OOSOCKET_INVALID) return ASN_E_INVSOCKET;
|
||||
|
||||
|
||||
memset (&m_addr, 0, sizeof (m_addr));
|
||||
|
||||
m_addr.sin_family = AF_INET;
|
||||
m_addr.sin_port = htons ((unsigned short)port);
|
||||
m_addr.sin_addr.s_addr = inet_addr (host);
|
||||
if (sendto (socket, (const char*) pdata, size, SEND_FLAGS,
|
||||
(const struct sockaddr*)&m_addr,
|
||||
if (sendto (socket, (const char*) pdata, size, SEND_FLAGS,
|
||||
(const struct sockaddr*)&m_addr,
|
||||
sizeof(m_addr)) == -1)
|
||||
return ASN_E_INVSOCKET;
|
||||
return ASN_OK;
|
||||
|
@ -478,8 +482,8 @@ int ooSocketRecvFrom (OOSOCKET socket, ASN1OCTET* pbuf, ASN1UINT bufsize,
|
|||
addrlen = sizeof(m_addr);
|
||||
|
||||
memset (&m_addr, 0, sizeof (m_addr));
|
||||
|
||||
if ((len = recvfrom (socket, (char*) pbuf, bufsize, 0,
|
||||
|
||||
if ((len = recvfrom (socket, (char*) pbuf, bufsize, 0,
|
||||
(struct sockaddr*)&m_addr, (socklen_t *) &addrlen)) == -1)
|
||||
return ASN_E_INVSOCKET;
|
||||
|
||||
|
@ -496,12 +500,12 @@ int ooSocketRecvFrom (OOSOCKET socket, ASN1OCTET* pbuf, ASN1UINT bufsize,
|
|||
return len;
|
||||
}
|
||||
|
||||
int ooSocketSelect(int nfds, fd_set *readfds, fd_set *writefds,
|
||||
int ooSocketSelect(int nfds, fd_set *readfds, fd_set *writefds,
|
||||
fd_set *exceptfds, struct timeval * timeout)
|
||||
{
|
||||
int ret;
|
||||
int ret;
|
||||
#if defined (_WIN32)
|
||||
ret = select(nfds, readfds, writefds, exceptfds,
|
||||
ret = select(nfds, readfds, writefds, exceptfds,
|
||||
(const struct timeval *) timeout);
|
||||
#else
|
||||
ret = select(nfds, readfds, writefds, exceptfds, timeout);
|
||||
|
@ -517,7 +521,7 @@ int ooSocketPoll(struct pollfd *pfds, int nfds, int timeout)
|
|||
int ooPDRead(struct pollfd *pfds, int nfds, int fd)
|
||||
{
|
||||
int i;
|
||||
for (i=0;i<nfds;i++)
|
||||
for (i=0;i<nfds;i++)
|
||||
if (pfds[i].fd == fd && (pfds[i].revents & POLLIN))
|
||||
return 1;
|
||||
return 0;
|
||||
|
@ -548,8 +552,8 @@ int ooGetLocalIPAddress(char * pIPAddrs)
|
|||
if (hp->h_addrtype == AF_INET6) {
|
||||
struct in6_addr i;
|
||||
memcpy(&i, hp->h_addr, sizeof(i));
|
||||
strcpy(pIPAddrs, (inet_ntop(AF_INET6, &i,
|
||||
hostname, sizeof(hostname))) == NULL ? "::1" :
|
||||
strcpy(pIPAddrs, (inet_ntop(AF_INET6, &i,
|
||||
hostname, sizeof(hostname))) == NULL ? "::1" :
|
||||
inet_ntop(AF_INET6, &i, hostname, sizeof(hostname)));
|
||||
} else {
|
||||
struct in_addr i;
|
||||
|
@ -566,7 +570,7 @@ int ooGetLocalIPAddress(char * pIPAddrs)
|
|||
return ASN_OK;
|
||||
}
|
||||
|
||||
/* int ooSocketStrToAddr (const char* pIPAddrStr, OOIPADDR* pIPAddr)
|
||||
/* int ooSocketStrToAddr (const char* pIPAddrStr, OOIPADDR* pIPAddr)
|
||||
{
|
||||
int b1, b2, b3, b4;
|
||||
int rv = sscanf (pIPAddrStr, "%d.%d.%d.%d", &b1, &b2, &b3, &b4);
|
||||
|
@ -574,7 +578,7 @@ int ooGetLocalIPAddress(char * pIPAddrs)
|
|||
(b1 < 0 || b1 > 256) || (b2 < 0 || b2 > 256) ||
|
||||
(b3 < 0 || b3 > 256) || (b4 < 0 || b4 > 256))
|
||||
return ASN_E_INVPARAM;
|
||||
*pIPAddr = ((b1 & 0xFF) << 24) | ((b2 & 0xFF) << 16) |
|
||||
*pIPAddr = ((b1 & 0xFF) << 24) | ((b2 & 0xFF) << 16) |
|
||||
((b3 & 0xFF) << 8) | (b4 & 0xFF);
|
||||
return ASN_OK;
|
||||
}
|
||||
|
@ -596,9 +600,9 @@ int ooSocketConvertIpToNwAddr(char *inetIp, unsigned char *netIp)
|
|||
OOTRACEERR1("Error:Failed to convert address\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
memcpy(netIp, (char*)&sin.sin_addr.s_addr, sizeof(unsigned long));
|
||||
return ASN_OK;
|
||||
}
|
||||
|
@ -608,7 +612,7 @@ int ooSocketAddrToStr (OOIPADDR ipAddr, char* pbuf, int bufsize)
|
|||
char buf1[5], buf2[5], buf3[5], buf4[5];
|
||||
int cnt = 0;
|
||||
|
||||
if (bufsize < 8)
|
||||
if (bufsize < 8)
|
||||
return ASN_E_BUFOVFLW;
|
||||
|
||||
cnt += sprintf (buf1, "%lu", (ipAddr >> 24) & 0xFF);
|
||||
|
@ -656,7 +660,7 @@ int ooSocketGetInterfaceList(OOCTXT *pctxt, OOInterface **ifList)
|
|||
if(ooSocketCreateUDP(&sock, 4)!= ASN_OK)
|
||||
{
|
||||
OOTRACEERR1("Error:Failed to create udp socket - "
|
||||
"ooSocketGetInterfaceList\n");
|
||||
"ooSocketGetInterfaceList\n");
|
||||
return -1;
|
||||
}
|
||||
#ifdef SIOCGIFNUM
|
||||
|
@ -668,7 +672,7 @@ int ooSocketGetInterfaceList(OOCTXT *pctxt, OOInterface **ifList)
|
|||
#else
|
||||
ifNum = 50;
|
||||
#endif
|
||||
|
||||
|
||||
ifc.ifc_len = ifNum * sizeof(struct ifreq);
|
||||
ifc.ifc_req = (struct ifreq *)memAlloc(pctxt, ifNum *sizeof(struct ifreq));
|
||||
if(!ifc.ifc_req)
|
||||
|
@ -688,7 +692,7 @@ int ooSocketGetInterfaceList(OOCTXT *pctxt, OOInterface **ifList)
|
|||
#ifdef ifr_netmask
|
||||
char mask[50];
|
||||
#endif
|
||||
|
||||
|
||||
pIf = (struct OOInterface*)memAlloc(pctxt, sizeof(struct OOInterface));
|
||||
pName = (char*)memAlloc(pctxt, strlen(ifName->ifr_name)+1);
|
||||
if(!pIf)
|
||||
|
@ -698,15 +702,15 @@ int ooSocketGetInterfaceList(OOCTXT *pctxt, OOInterface **ifList)
|
|||
return -1;
|
||||
}
|
||||
OOTRACEDBGA2("\tInterface name: %s\n", ifName->ifr_name);
|
||||
|
||||
|
||||
|
||||
|
||||
strcpy(ifReq.ifr_name, ifName->ifr_name);
|
||||
strcpy(pName, ifName->ifr_name);
|
||||
pIf->name = pName;
|
||||
|
||||
/* Check whether the interface is up*/
|
||||
if (ioctl(sock, SIOCGIFFLAGS, &ifReq) < 0) {
|
||||
OOTRACEERR2("Error:Unable to determine status of interface %s\n",
|
||||
OOTRACEERR2("Error:Unable to determine status of interface %s\n",
|
||||
pName);
|
||||
memFreePtr(pctxt, pIf->name);
|
||||
memFreePtr(pctxt, pIf);
|
||||
|
@ -721,9 +725,9 @@ int ooSocketGetInterfaceList(OOCTXT *pctxt, OOInterface **ifList)
|
|||
}
|
||||
|
||||
/* Retrieve interface address */
|
||||
if (ioctl(sock, SIOCGIFADDR, &ifReq) < 0)
|
||||
if (ioctl(sock, SIOCGIFADDR, &ifReq) < 0)
|
||||
{
|
||||
OOTRACEWARN2("Warn:Unable to determine address of interface %s\n",
|
||||
OOTRACEWARN2("Warn:Unable to determine address of interface %s\n",
|
||||
pName);
|
||||
memFreePtr(pctxt, pIf->name);
|
||||
memFreePtr(pctxt, pIf);
|
||||
|
@ -742,11 +746,11 @@ int ooSocketGetInterfaceList(OOCTXT *pctxt, OOInterface **ifList)
|
|||
return -1;
|
||||
}
|
||||
strcpy(pIf->addr, addr);
|
||||
|
||||
|
||||
#ifdef ifr_netmask
|
||||
if (ioctl(sock, SIOCGIFNETMASK, &ifReq) < 0)
|
||||
if (ioctl(sock, SIOCGIFNETMASK, &ifReq) < 0)
|
||||
{
|
||||
OOTRACEWARN2("Warn:Unable to determine mask for interface %s\n",
|
||||
OOTRACEWARN2("Warn:Unable to determine mask for interface %s\n",
|
||||
pName);
|
||||
memFreePtr(pctxt, pIf->name);
|
||||
memFreePtr(pctxt, pIf->addr);
|
||||
|
@ -795,7 +799,7 @@ int ooSocketGetInterfaceList(OOCTXT *pctxt, OOInterface **ifList)
|
|||
*/
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
return ASN_OK;
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -1,21 +1,21 @@
|
|||
/*
|
||||
* Copyright (C) 1997-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
/**
|
||||
* @file ooSocket.h
|
||||
/**
|
||||
* @file ooSocket.h
|
||||
* Common runtime constants, data structure definitions, and run-time functions
|
||||
* to support the sockets' operations.
|
||||
*/
|
||||
|
@ -60,7 +60,7 @@ extern "C" {
|
|||
#endif /* MAKE_DLL */
|
||||
#endif /* EXTERN */
|
||||
|
||||
/**
|
||||
/**
|
||||
* @defgroup sockets Socket Layer
|
||||
* @{
|
||||
*/
|
||||
|
@ -75,7 +75,7 @@ typedef int OOSOCKET; /**< Socket's handle */
|
|||
#define OOSOCKET_INVALID ((OOSOCKET)-1)
|
||||
|
||||
|
||||
/**
|
||||
/**
|
||||
* The IP address represented as unsigned long value. The most significant 8
|
||||
* bits in this unsigned long value represent the first number of the IP
|
||||
* address. The least significant 8 bits represent the last number of the IP
|
||||
|
@ -115,7 +115,7 @@ typedef struct OOInterface{
|
|||
* @return Completion status of operation: 0 (ASN_OK) = success,
|
||||
* negative return value is error.
|
||||
*/
|
||||
EXTERN int ooSocketAccept (OOSOCKET socket, OOSOCKET *pNewSocket,
|
||||
EXTERN int ooSocketAccept (OOSOCKET socket, OOSOCKET *pNewSocket,
|
||||
char* destAddr, int* destPort);
|
||||
|
||||
/**
|
||||
|
@ -185,7 +185,7 @@ EXTERN int ooSocketConnect (OOSOCKET socket, const char* host, int port);
|
|||
EXTERN int ooSocketCreate (OOSOCKET* psocket, int family);
|
||||
|
||||
/**
|
||||
* This function creates a UDP datagram socket.
|
||||
* This function creates a UDP datagram socket.
|
||||
*
|
||||
* @param psocket The pointer to the socket's handle variable to receive
|
||||
* the handle of new socket.
|
||||
|
@ -204,7 +204,7 @@ EXTERN int ooSocketCreateUDP (OOSOCKET* psocket, int family);
|
|||
EXTERN int ooSocketsInit (void);
|
||||
|
||||
/**
|
||||
* This function terminates use of sockets by an application. This function
|
||||
* This function terminates use of sockets by an application. This function
|
||||
* must be called after done with sockets.
|
||||
*
|
||||
* @return Completion status of operation: 0 (ASN_OK) = success,
|
||||
|
@ -256,17 +256,17 @@ EXTERN int ooSocketRecvPeek
|
|||
* @return If no error occurs, returns the number of bytes
|
||||
* received. Otherwise, the negative value is error code.
|
||||
*/
|
||||
EXTERN int ooSocketRecv (OOSOCKET socket, ASN1OCTET* pbuf,
|
||||
EXTERN int ooSocketRecv (OOSOCKET socket, ASN1OCTET* pbuf,
|
||||
ASN1UINT bufsize);
|
||||
|
||||
/**
|
||||
* This function receives data from a connected/unconnected socket. It is used
|
||||
* to read incoming data on sockets. It populates the remotehost and
|
||||
* remoteport parameters with information of remote host. See description of
|
||||
* to read incoming data on sockets. It populates the remotehost and
|
||||
* remoteport parameters with information of remote host. See description of
|
||||
* 'recvfrom' socket function for further details.
|
||||
*
|
||||
* @param socket The socket's handle created by call to ooSocketCreate
|
||||
*
|
||||
*
|
||||
* @param pbuf Pointer to the buffer for the incoming data.
|
||||
* @param bufsize Length of the buffer.
|
||||
* @param remotehost Pointer to a buffer in which remote ip address
|
||||
|
@ -279,7 +279,7 @@ EXTERN int ooSocketRecv (OOSOCKET socket, ASN1OCTET* pbuf,
|
|||
* received. Otherwise, negative value.
|
||||
*/
|
||||
EXTERN int ooSocketRecvFrom (OOSOCKET socket, ASN1OCTET* pbuf,
|
||||
ASN1UINT bufsize, char * remotehost,
|
||||
ASN1UINT bufsize, char * remotehost,
|
||||
ASN1UINT hostBufLen, int * remoteport);
|
||||
/**
|
||||
* This function sends data on a connected socket. It is used to write outgoing
|
||||
|
@ -293,47 +293,47 @@ EXTERN int ooSocketRecvFrom (OOSOCKET socket, ASN1OCTET* pbuf,
|
|||
* @return Completion status of operation: 0 (ASN_OK) = success,
|
||||
* negative return value is error.
|
||||
*/
|
||||
EXTERN int ooSocketSend (OOSOCKET socket, const ASN1OCTET* pdata,
|
||||
EXTERN int ooSocketSend (OOSOCKET socket, const ASN1OCTET* pdata,
|
||||
ASN1UINT size);
|
||||
|
||||
/**
|
||||
* This function sends data on a connected or unconnected socket. See
|
||||
* This function sends data on a connected or unconnected socket. See
|
||||
* description of 'sendto' socket function for further details.
|
||||
*
|
||||
* @param socket The socket's handle created by call to ::rtSocketCreate
|
||||
* or ::rtSocketAccept function.
|
||||
* @param pdata Buffer containing the data to be transmitted.
|
||||
* @param size Length of the data in pdata.
|
||||
* @param remotehost Remote host ip address to which data has to
|
||||
* @param remotehost Remote host ip address to which data has to
|
||||
* be sent.
|
||||
* @param remoteport Remote port ip address to which data has to
|
||||
* @param remoteport Remote port ip address to which data has to
|
||||
* be sent.
|
||||
*
|
||||
* @return Completion status of operation: 0 (ASN_OK) = success,
|
||||
* negative return value is error.
|
||||
*/
|
||||
EXTERN int ooSocketSendTo(OOSOCKET socket, const ASN1OCTET* pdata,
|
||||
EXTERN int ooSocketSendTo(OOSOCKET socket, const ASN1OCTET* pdata,
|
||||
ASN1UINT size, const char* remotehost,
|
||||
int remoteport);
|
||||
|
||||
/**
|
||||
* This function is used for synchronous monitoring of multiple sockets.
|
||||
* For more information refer to documnetation of "select" system call.
|
||||
* For more information refer to documnetation of "select" system call.
|
||||
*
|
||||
* @param nfds The highest numbered descriptor to be monitored
|
||||
* @param nfds The highest numbered descriptor to be monitored
|
||||
* plus one.
|
||||
* @param readfds The descriptors listed in readfds will be watched for
|
||||
* @param readfds The descriptors listed in readfds will be watched for
|
||||
* whether read would block on them.
|
||||
* @param writefds The descriptors listed in writefds will be watched for
|
||||
* whether write would block on them.
|
||||
* @param exceptfds The descriptors listed in exceptfds will be watched for
|
||||
* exceptions.
|
||||
* @param timeout Upper bound on amout of time elapsed before select
|
||||
* returns.
|
||||
* @param timeout Upper bound on amout of time elapsed before select
|
||||
* returns.
|
||||
* @return Completion status of operation: 0 (ASN_OK) = success,
|
||||
* negative return value is error.
|
||||
*/
|
||||
EXTERN int ooSocketSelect(int nfds, fd_set *readfds, fd_set *writefds,
|
||||
EXTERN int ooSocketSelect(int nfds, fd_set *readfds, fd_set *writefds,
|
||||
fd_set *exceptfds, struct timeval * timeout) attribute_deprecated;
|
||||
|
||||
EXTERN int ooSocketPoll(struct pollfd *pfds, int nfds, int timeout);
|
||||
|
@ -379,7 +379,7 @@ EXTERN int ooPDWrite(struct pollfd *pfds, int nfds, int fd);
|
|||
EXTERN int ooGetLocalIPAddress(char * pIPAddrs);
|
||||
|
||||
|
||||
EXTERN int ooSocketGetSockName(OOSOCKET socket, struct sockaddr_in *name,
|
||||
EXTERN int ooSocketGetSockName(OOSOCKET socket, struct sockaddr_in *name,
|
||||
socklen_t *size);
|
||||
|
||||
|
||||
|
@ -389,7 +389,7 @@ EXTERN short ooSocketHTONS(short val);
|
|||
|
||||
/**
|
||||
* This function is used to retrieve the ip and port number used by the socket
|
||||
* passed as parameter. It internally uses getsockname system call for this
|
||||
* passed as parameter. It internally uses getsockname system call for this
|
||||
* purpose.
|
||||
* @param socket Socket for which ip and port has to be determined.
|
||||
* @param ip Buffer in which ip address will be returned.
|
||||
|
@ -403,12 +403,11 @@ EXTERN int ooSocketGetIpAndPort(OOSOCKET socket, char *ip, int len, int *port, i
|
|||
|
||||
|
||||
EXTERN int ooSocketGetInterfaceList(OOCTXT *pctxt, OOInterface **ifList);
|
||||
/**
|
||||
* @}
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _OOSOCKET_H_ */
|
||||
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
/*
|
||||
* Copyright (C) 2004-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
@ -57,14 +57,14 @@ int isRunning(char *callToken) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
OOStkCmdStat ooMakeCall
|
||||
OOStkCmdStat ooMakeCall
|
||||
(const char* dest, char* callToken, size_t bufsiz, ooCallOptions *opts)
|
||||
{
|
||||
OOStackCommand cmd;
|
||||
|
||||
if(!callToken)
|
||||
return OO_STKCMD_INVALIDPARAM;
|
||||
|
||||
|
||||
|
||||
/* Generate call token*/
|
||||
if (ooGenerateOutgoingCallToken (callToken, bufsiz) != OO_OK){
|
||||
|
@ -86,14 +86,14 @@ OOStkCmdStat ooMakeCall
|
|||
}
|
||||
strcpy((char*)cmd.param1, dest);
|
||||
|
||||
|
||||
|
||||
cmd.param2 = (void*) malloc(strlen(callToken)+1);
|
||||
if(!cmd.param2)
|
||||
{
|
||||
free(cmd.param1);
|
||||
return OO_STKCMD_MEMERR;
|
||||
}
|
||||
|
||||
|
||||
strcpy((char*)cmd.param2, callToken);
|
||||
|
||||
if(!opts)
|
||||
|
@ -122,7 +122,7 @@ OOStkCmdStat ooMakeCall
|
|||
return OO_STKCMD_SUCCESS;
|
||||
}
|
||||
|
||||
OOStkCmdStat ooRunCall
|
||||
OOStkCmdStat ooRunCall
|
||||
(const char* dest, char* callToken, size_t bufsiz, ooCallOptions *opts)
|
||||
{
|
||||
OOStackCommand cmd;
|
||||
|
@ -145,7 +145,7 @@ OOStkCmdStat ooRunCall
|
|||
|
||||
if(!callToken)
|
||||
return OO_STKCMD_INVALIDPARAM;
|
||||
|
||||
|
||||
|
||||
memset(&cmd, 0, sizeof(OOStackCommand));
|
||||
cmd.type = OO_CMD_MAKECALL;
|
||||
|
@ -157,14 +157,14 @@ OOStkCmdStat ooRunCall
|
|||
strcpy((char*)cmd.param1, dest);
|
||||
cmd.plen1 = strlen(dest);
|
||||
|
||||
|
||||
|
||||
cmd.param2 = (void*) malloc(strlen(callToken)+1);
|
||||
if(!cmd.param2)
|
||||
{
|
||||
free(cmd.param1);
|
||||
return OO_STKCMD_MEMERR;
|
||||
}
|
||||
|
||||
|
||||
strcpy((char*)cmd.param2, callToken);
|
||||
cmd.plen2 = strlen(callToken);
|
||||
|
||||
|
@ -230,7 +230,7 @@ OOStkCmdStat ooManualRingback(const char *callToken)
|
|||
}
|
||||
strcpy((char*)cmd.param1, callToken);
|
||||
cmd.plen1 = strlen(callToken);
|
||||
|
||||
|
||||
if(ooWriteCallStackCommand(call,&cmd) != OO_OK)
|
||||
{
|
||||
free(cmd.param1);
|
||||
|
@ -274,7 +274,7 @@ OOStkCmdStat ooManualProgress(const char *callToken)
|
|||
}
|
||||
strcpy((char*)cmd.param1, callToken);
|
||||
cmd.plen1 = strlen(callToken);
|
||||
|
||||
|
||||
if(ooWriteCallStackCommand(call, &cmd) != OO_OK)
|
||||
{
|
||||
free(cmd.param1);
|
||||
|
@ -315,7 +315,7 @@ OOStkCmdStat ooAnswerCall(const char *callToken)
|
|||
return OO_STKCMD_MEMERR;
|
||||
}
|
||||
strcpy((char*)cmd.param1, callToken);
|
||||
cmd.plen1 = strlen(callToken);
|
||||
cmd.plen1 = strlen(callToken);
|
||||
|
||||
if(ooWriteCallStackCommand(call, &cmd) != OO_OK)
|
||||
{
|
||||
|
@ -426,7 +426,7 @@ OOStkCmdStat ooHangCall(const char* callToken, OOCallClearReason reason, int q93
|
|||
free(cmd.param1);
|
||||
free(cmd.param2);
|
||||
free(cmd.param3);
|
||||
|
||||
|
||||
return OO_STKCMD_SUCCESS;
|
||||
}
|
||||
|
||||
|
@ -443,7 +443,7 @@ OOStkCmdStat ooStopMonitor()
|
|||
|
||||
memset(&cmd, 0, sizeof(OOStackCommand));
|
||||
cmd.type = OO_CMD_STOPMONITOR;
|
||||
|
||||
|
||||
if(ooWriteStackCommand(&cmd) != OO_OK)
|
||||
return OO_STKCMD_WRITEERR;
|
||||
|
||||
|
@ -485,7 +485,7 @@ OOStkCmdStat ooSendDTMFDigit(const char *callToken, const char* dtmf)
|
|||
cmd.plen1 = strlen(callToken);
|
||||
strcpy((char*)cmd.param2, dtmf);
|
||||
cmd.plen2 = strlen(dtmf);
|
||||
|
||||
|
||||
if(ooWriteCallStackCommand(call,&cmd) != OO_OK)
|
||||
{
|
||||
free(cmd.param1);
|
||||
|
@ -533,7 +533,7 @@ OOStkCmdStat ooSetANI(const char *callToken, const char* ani)
|
|||
cmd.plen1 = strlen(callToken);
|
||||
strcpy((char*)cmd.param2, ani);
|
||||
cmd.plen2 = strlen(ani);
|
||||
|
||||
|
||||
if(ooWriteCallStackCommand(call,&cmd) != OO_OK)
|
||||
{
|
||||
free(cmd.param1);
|
||||
|
@ -643,7 +643,7 @@ OOStkCmdStat ooRequestChangeMode(const char *callToken, int isT38Mode)
|
|||
cmd.plen1 = strlen(callToken);
|
||||
*((int *) cmd.param2) = isT38Mode;
|
||||
cmd.plen2 = sizeof(int);
|
||||
|
||||
|
||||
if(ooWriteCallStackCommand(call,&cmd) != OO_OK)
|
||||
{
|
||||
free(cmd.param1);
|
||||
|
@ -672,11 +672,10 @@ const char* ooGetStkCmdStatusCodeTxt(OOStkCmdStat stat)
|
|||
case OO_STKCMD_WRITEERR:
|
||||
return "Stack command - write error";
|
||||
|
||||
case OO_STKCMD_CONNECTIONERR:
|
||||
case OO_STKCMD_CONNECTIONERR:
|
||||
return "Stack command - Failed to create command channel";
|
||||
|
||||
default:
|
||||
return "Invalid status code";
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,22 +1,22 @@
|
|||
/*
|
||||
* Copyright (C) 2004-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
/**
|
||||
* @file ooStackCmds.h
|
||||
* @file ooStackCmds.h
|
||||
* This file contains stack commands which an user application can use to make
|
||||
* call, hang call etc.
|
||||
* call, hang call etc.
|
||||
*/
|
||||
|
||||
#ifndef OO_STACKCMDS_H
|
||||
|
@ -38,7 +38,7 @@ extern "C" {
|
|||
|
||||
|
||||
|
||||
/**
|
||||
/**
|
||||
* @defgroup stackcmds Stack Control Commands
|
||||
* @{
|
||||
*/
|
||||
|
@ -70,11 +70,11 @@ typedef enum OOStackCmdID {
|
|||
OO_CMD_REQMODE, /*!< Request new mode */
|
||||
OO_CMD_SETANI, /*! <Set conncted info */
|
||||
OO_CMD_UPDLC /*! <Update Logical channels */
|
||||
|
||||
|
||||
} OOStackCmdID;
|
||||
|
||||
/**
|
||||
* This structure is used to queue a stack command for processing in
|
||||
* This structure is used to queue a stack command for processing in
|
||||
* the event handler loop.
|
||||
*/
|
||||
typedef struct OOStackCommand {
|
||||
|
@ -99,7 +99,7 @@ typedef struct OOStackCommand {
|
|||
*
|
||||
* @return Returns OOStkCmdStat value indication success or failure.
|
||||
*/
|
||||
EXTERN OOStkCmdStat ooMakeCall
|
||||
EXTERN OOStkCmdStat ooMakeCall
|
||||
(const char* dest, char *callToken, size_t bufsiz, ooCallOptions *opts);
|
||||
|
||||
|
||||
|
@ -108,7 +108,7 @@ EXTERN OOStkCmdStat ooMakeCall
|
|||
* This function is used to send a manual ringback message (alerting message)
|
||||
* for a call. Effective only when manual-ringback is enabled.
|
||||
* @param callToken Unique token for the call.
|
||||
*
|
||||
*
|
||||
* @return Returns OOStkCmdStat value indication success or failure.
|
||||
*/
|
||||
EXTERN OOStkCmdStat ooManualRingback(const char *callToken);
|
||||
|
@ -117,7 +117,7 @@ EXTERN OOStkCmdStat ooManualProgress(const char *callToken);
|
|||
/**
|
||||
* This function is used to answer a call
|
||||
* @param callToken Unique token for the call
|
||||
*
|
||||
*
|
||||
* @return Returns OOStkCmdStat value indication success or failure.
|
||||
*/
|
||||
EXTERN OOStkCmdStat ooAnswerCall(const char *callToken);
|
||||
|
@ -142,7 +142,7 @@ EXTERN OOStkCmdStat ooForwardCall(const char* callToken, char *dest);
|
|||
EXTERN OOStkCmdStat ooHangCall(const char* callToken, OOCallClearReason reason, int q931cause);
|
||||
|
||||
/**
|
||||
* This command function can be used by an user application to send a DTMF
|
||||
* This command function can be used by an user application to send a DTMF
|
||||
* sequence using H.245 UserInputIndication message.
|
||||
* @param callToken Unique token for the call
|
||||
* @param alpha Alphanumeric string reperesenting dtmf sequence
|
||||
|
@ -168,8 +168,8 @@ EXTERN OOStkCmdStat ooStopMonitor(void);
|
|||
* @return Text description corresponding to the code.
|
||||
*/
|
||||
EXTERN const char* ooGetStkCmdStatusCodeTxt(OOStkCmdStat stat);
|
||||
/**
|
||||
* @}
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
EXTERN OOStkCmdStat ooRequestChangeMode(const char *callToken, int isT38Mode);
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
/*
|
||||
* Copyright (C) 2004-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the LICENSE.txt file. It
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the LICENSE.txt file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
@ -29,13 +29,13 @@
|
|||
#endif
|
||||
|
||||
/**
|
||||
* This is a timer list used by test application chansetup only.
|
||||
* This is a timer list used by test application chansetup only.
|
||||
*/
|
||||
|
||||
DList g_TimerList;
|
||||
|
||||
OOTimer* ooTimerCreate
|
||||
(OOCTXT* pctxt, DList *pList, OOTimerCbFunc cb, OOUINT32 deltaSecs, void *data,
|
||||
OOTimer* ooTimerCreate
|
||||
(OOCTXT* pctxt, DList *pList, OOTimerCbFunc cb, OOUINT32 deltaSecs, void *data,
|
||||
OOBOOL reRegister)
|
||||
{
|
||||
OOTimer* pTimer = (OOTimer*) memAlloc (pctxt, sizeof(OOTimer));
|
||||
|
@ -108,7 +108,7 @@ void ooTimerFireExpired (OOCTXT* pctxt, DList *pList)
|
|||
if (ooTimerExpired (pTimer)) {
|
||||
/*
|
||||
* Re-register before calling callback function in case it is
|
||||
* a long duration callback.
|
||||
* a long duration callback.
|
||||
*/
|
||||
if (pTimer->reRegister) ooTimerReset (pctxt, pList, pTimer);
|
||||
|
||||
|
@ -150,8 +150,8 @@ struct timeval* ooTimerNextTimeout (DList *pList, struct timeval* ptimeout)
|
|||
|
||||
ooGetTimeOfDay (&tvstr, 0);
|
||||
|
||||
ptimeout->tv_sec =
|
||||
OOMAX ((int) 0, (int) (ptimer->expireTime.tv_sec - tvstr.tv_sec));
|
||||
ptimeout->tv_sec =
|
||||
OOMAX ((int) 0, (int) (ptimer->expireTime.tv_sec - tvstr.tv_sec));
|
||||
|
||||
ptimeout->tv_usec = ptimer->expireTime.tv_usec - tvstr.tv_usec;
|
||||
|
||||
|
@ -166,7 +166,7 @@ struct timeval* ooTimerNextTimeout (DList *pList, struct timeval* ptimeout)
|
|||
return (ptimeout);
|
||||
}
|
||||
|
||||
/*
|
||||
/*
|
||||
* Reregister a timer entry. This function is responsible for moving
|
||||
* the current pointer in the timer list to the next element to be
|
||||
* processed..
|
||||
|
|
|
@ -1,20 +1,20 @@
|
|||
/*
|
||||
* Copyright (C) 2004-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the LICENSE.txt file. It
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the LICENSE.txt file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
/**
|
||||
* @file ooTimer.h
|
||||
/**
|
||||
* @file ooTimer.h
|
||||
* Timer structures and functions.
|
||||
*/
|
||||
#ifndef _OOTIMER_H_
|
||||
|
@ -41,7 +41,7 @@ extern "C" {
|
|||
#endif
|
||||
|
||||
/**
|
||||
* This function computes the relative expiration time from the current
|
||||
* This function computes the relative expiration time from the current
|
||||
* time for the given timer object.
|
||||
*
|
||||
* @param pTimer Pointer to timer object.
|
||||
|
@ -59,7 +59,7 @@ EXTERN void ooTimerComputeExpireTime (OOTimer* pTimer);
|
|||
* @param reRegister Should timer be re-registered after it expires?
|
||||
* @return Pointer to created timer object.
|
||||
*/
|
||||
EXTERN OOTimer* ooTimerCreate
|
||||
EXTERN OOTimer* ooTimerCreate
|
||||
(OOCTXT* pctxt, DList *pList, OOTimerCbFunc cb, OOUINT32 deltaSecs, void *data,
|
||||
OOBOOL reRegister);
|
||||
|
||||
|
@ -80,13 +80,13 @@ EXTERN void ooTimerDelete (OOCTXT* pctxt, DList* pList, OOTimer* pTimer);
|
|||
EXTERN OOBOOL ooTimerExpired (OOTimer* pTimer);
|
||||
|
||||
/**
|
||||
* This function loops through the global timer list and fires all
|
||||
* This function loops through the global timer list and fires all
|
||||
* expired timers by calling the registered callback functions.
|
||||
*/
|
||||
EXTERN void ooTimerFireExpired (OOCTXT* pctxt, DList* pList);
|
||||
|
||||
/**
|
||||
* This function inserts the given timer object into the correct
|
||||
* This function inserts the given timer object into the correct
|
||||
* chronological position in the global timer list.
|
||||
* @param pctxt Pointer to OOCTXT structure used for memory allocation.
|
||||
* @param pList List in which timer has to be inserted.
|
||||
|
@ -96,7 +96,7 @@ EXTERN void ooTimerFireExpired (OOCTXT* pctxt, DList* pList);
|
|||
EXTERN int ooTimerInsertEntry (OOCTXT* pctxt, DList* pList, OOTimer* pTimer);
|
||||
|
||||
/**
|
||||
* This function calculates the relative time from the current time
|
||||
* This function calculates the relative time from the current time
|
||||
* that the first timer in global timer list will expire.
|
||||
* @param pList Handle to timer list
|
||||
* @param ptimeout timeval structure to receive timeout value.
|
||||
|
@ -105,7 +105,7 @@ EXTERN int ooTimerInsertEntry (OOCTXT* pctxt, DList* pList, OOTimer* pTimer);
|
|||
EXTERN struct timeval* ooTimerNextTimeout (DList* pList, struct timeval* ptimeout);
|
||||
|
||||
/**
|
||||
* This function resets the given timer object if its reregister flag
|
||||
* This function resets the given timer object if its reregister flag
|
||||
* is set. Otherwise, it is deleted.
|
||||
* @param pctxt Pointer to OOCTXT structre used for memory allocation.
|
||||
* @param pList Pointer to timer list.
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
/*
|
||||
* Copyright (C) 2004-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
@ -30,7 +30,7 @@ OOBOOL ooUtilsIsStrEmpty (const char* str)
|
|||
}
|
||||
|
||||
|
||||
OOBOOL ooIsDailedDigit(const char* str)
|
||||
OOBOOL ooIsDailedDigit(const char* str)
|
||||
{
|
||||
if(str == NULL || *str =='\0') { return FALSE; }
|
||||
while(*str != '\0')
|
||||
|
|
|
@ -1,21 +1,21 @@
|
|||
/*
|
||||
* Copyright (C) 2004-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
/**
|
||||
* @file ooUtils.h
|
||||
* This file contains general utility functions.
|
||||
* @file ooUtils.h
|
||||
* This file contains general utility functions.
|
||||
*/
|
||||
#ifndef _OOUTILS_H_
|
||||
#define _OOUTILS_H_
|
||||
|
@ -29,11 +29,11 @@
|
|||
* @param tabsiz Number of items in the table
|
||||
* @return Text for item or '?' if idx outside bounds of table
|
||||
*/
|
||||
EXTERN const char* ooUtilsGetText
|
||||
EXTERN const char* ooUtilsGetText
|
||||
(OOUINT32 idx, const char** table, size_t tabsiz);
|
||||
|
||||
/**
|
||||
* Test if given string value is empty. String is considered to empty
|
||||
* Test if given string value is empty. String is considered to empty
|
||||
* if value is NULL or there are no characters in string (strlen == 0).
|
||||
*
|
||||
* @param str String to test
|
||||
|
@ -43,7 +43,7 @@ EXTERN OOBOOL ooUtilsIsStrEmpty (const char * str);
|
|||
|
||||
|
||||
/**
|
||||
* Test if given string value is digit string.
|
||||
* Test if given string value is digit string.
|
||||
*
|
||||
* @param str String to test
|
||||
* @return TRUE if string contains all digits; FALSE otherwise
|
||||
|
|
|
@ -1,22 +1,22 @@
|
|||
/*
|
||||
* Copyright (C) 1997-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
/**
|
||||
* @file ooasn1.h
|
||||
/**
|
||||
* @file ooasn1.h
|
||||
* Common ASN.1 runtime constants, data structure definitions, and run-time
|
||||
* functions to support ASN.1 PER encoding/decoding as defined in the
|
||||
* functions to support ASN.1 PER encoding/decoding as defined in the
|
||||
* ITU-T standards.
|
||||
*/
|
||||
#ifndef _OOASN1_H_
|
||||
|
@ -31,8 +31,8 @@
|
|||
#include <stddef.h>
|
||||
#include "dlist.h"
|
||||
#include "ootrace.h"
|
||||
/**
|
||||
* @defgroup cruntime C Runtime Common Functions
|
||||
/**
|
||||
* @defgroup cruntime C Runtime Common Functions
|
||||
* @{
|
||||
*/
|
||||
|
||||
|
@ -237,7 +237,7 @@ defined(_WIN32)
|
|||
|
||||
#elif defined(__IBMC__) || defined(__GNUC__) || defined(__SUNPRO_C) || \
|
||||
defined(__SUNPRO_CC) || defined(__CC_ARM) || \
|
||||
defined(__HPUX_CC__) || defined(__HP_aCC)
|
||||
defined(__HPUX_CC__) || defined(__HP_aCC)
|
||||
#define ASN1INT64 long long
|
||||
|
||||
#else /* !MSC_VER && !__IBMC__ etc */
|
||||
|
@ -423,7 +423,7 @@ typedef struct OOCTXT { /* context block */
|
|||
#endif
|
||||
|
||||
/**
|
||||
* @defgroup mem Memory Allocation Macros and Functions
|
||||
* @defgroup mem Memory Allocation Macros and Functions
|
||||
* @ingroup cruntime
|
||||
*
|
||||
* Memory allocation functions and macros handle memory management for the
|
||||
|
@ -570,7 +570,7 @@ decodeConstrainedStringEx (pctxt, pvalue, permCharSet, 8, 7, 7)
|
|||
/* Context management functions */
|
||||
|
||||
/**
|
||||
* @defgroup cmfun Context Management Functions
|
||||
* @defgroup cmfun Context Management Functions
|
||||
* @{
|
||||
*
|
||||
* Context initialization functions handle the allocation, initialization, and
|
||||
|
@ -601,7 +601,7 @@ decodeConstrainedStringEx (pctxt, pvalue, permCharSet, 8, 7, 7)
|
|||
* - 0 (ASN_OK) = success,
|
||||
* - negative return value is error.
|
||||
*/
|
||||
EXTERN int initContextBuffer
|
||||
EXTERN int initContextBuffer
|
||||
(OOCTXT* pctxt, const ASN1OCTET* bufaddr, ASN1UINT bufsiz);
|
||||
|
||||
/**
|
||||
|
@ -643,17 +643,17 @@ EXTERN int initSubContext (OOCTXT* pctxt, OOCTXT* psrc);
|
|||
EXTERN void setCtxtFlag (OOCTXT* pctxt, ASN1USINT mask);
|
||||
EXTERN void clearCtxtFlag (OOCTXT* pctxt, ASN1USINT mask);
|
||||
|
||||
EXTERN int setPERBuffer
|
||||
EXTERN int setPERBuffer
|
||||
(OOCTXT* pctxt, ASN1OCTET* bufaddr, ASN1UINT bufsiz, ASN1BOOL aligned);
|
||||
|
||||
EXTERN int setPERBufferUsingCtxt (OOCTXT* pTarget, OOCTXT* pSource);
|
||||
|
||||
#define ZEROCONTEXT(pctxt) memset(pctxt,0,sizeof(OOCTXT))
|
||||
/**
|
||||
/**
|
||||
* @} cmfun
|
||||
*/
|
||||
/**
|
||||
* @defgroup errfp Error Formatting and Print Functions
|
||||
* @defgroup errfp Error Formatting and Print Functions
|
||||
* @{
|
||||
*
|
||||
* Error formatting and print functions allow information about the
|
||||
|
@ -664,7 +664,7 @@ EXTERN int setPERBufferUsingCtxt (OOCTXT* pTarget, OOCTXT* pSource);
|
|||
/**
|
||||
* This function adds an integer parameter to an error information structure.
|
||||
* Parameter substitution is done in much the same way as it is done in C
|
||||
* printf statments. The base error message specification that goes along with
|
||||
* printf statements. The base error message specification that goes along with
|
||||
* a particular status code may have variable fields built in using '%'
|
||||
* modifiers. These would be replaced with actual parameter data.
|
||||
*
|
||||
|
@ -680,7 +680,7 @@ EXTERN int errAddIntParm (ASN1ErrInfo* pErrInfo, int errParm);
|
|||
/**
|
||||
* This function adds an string parameter to an error information structure.
|
||||
* Parameter substitution is done in much the same way as it is done in C
|
||||
* printf statments. The base error message specification that goes along with
|
||||
* printf statements. The base error message specification that goes along with
|
||||
* a particular status code may have variable fields built in using '%'
|
||||
* modifiers. These would be replaced with actual parameter data.
|
||||
*
|
||||
|
@ -691,13 +691,13 @@ EXTERN int errAddIntParm (ASN1ErrInfo* pErrInfo, int errParm);
|
|||
* @param errprm_p The typed error parameter.
|
||||
* @return The status of the operation.
|
||||
*/
|
||||
EXTERN int errAddStrParm (ASN1ErrInfo* pErrInfo,
|
||||
EXTERN int errAddStrParm (ASN1ErrInfo* pErrInfo,
|
||||
const char* errprm_p);
|
||||
|
||||
/**
|
||||
* This function adds an unsigned integer parameter to an error information
|
||||
* structure. Parameter substitution is done in much the same way as it is done
|
||||
* in C printf statments. The base error message specification that goes along
|
||||
* in C printf statements. The base error message specification that goes along
|
||||
* with a particular status code may have variable fields built in using '%'
|
||||
* modifiers. These would be replaced with actual parameter data.
|
||||
*
|
||||
|
@ -711,7 +711,7 @@ EXTERN int errAddStrParm (ASN1ErrInfo* pErrInfo,
|
|||
EXTERN int errAddUIntParm (ASN1ErrInfo* pErrInfo, unsigned int errParm);
|
||||
|
||||
|
||||
EXTERN int errCopyData (ASN1ErrInfo* pSrcErrInfo,
|
||||
EXTERN int errCopyData (ASN1ErrInfo* pSrcErrInfo,
|
||||
ASN1ErrInfo* pDestErrInfo);
|
||||
|
||||
/**
|
||||
|
@ -719,8 +719,8 @@ EXTERN int errCopyData (ASN1ErrInfo* pSrcErrInfo,
|
|||
* associated with an error message. These parameters are maintained on an
|
||||
* internal linked list maintained within the error information structure. The
|
||||
* list memory must be freed when error processing is complete. This function
|
||||
* is called from within errPrint after teh error has been printed out. It is
|
||||
* also called in teh freeContext function.
|
||||
* is called from within errPrint after the error has been printed out. It is
|
||||
* also called in the freeContext function.
|
||||
*
|
||||
* @param pErrInfo A pointer to a structure containing information on the
|
||||
* error to be printed. Typically, the error info
|
||||
|
@ -764,7 +764,7 @@ EXTERN void errPrint (ASN1ErrInfo* pErrInfo);
|
|||
*/
|
||||
EXTERN int errReset (ASN1ErrInfo* pErrInfo);
|
||||
|
||||
/**
|
||||
/**
|
||||
* This function sets error information in an error information structure. The
|
||||
* information set includes status code, module name, and line number. Location
|
||||
* information (i.e. module name and line number) is pushed onto a stack within
|
||||
|
@ -787,7 +787,7 @@ EXTERN int errReset (ASN1ErrInfo* pErrInfo);
|
|||
* information and return the status value in one line of
|
||||
* code.
|
||||
*/
|
||||
EXTERN int errSetData (ASN1ErrInfo* pErrInfo, int status,
|
||||
EXTERN int errSetData (ASN1ErrInfo* pErrInfo, int status,
|
||||
const char* module, int lno);
|
||||
|
||||
#ifndef _COMPACT
|
||||
|
@ -802,8 +802,8 @@ errSetData(&(ctxt)->errInfo,stat,__FILE__,__LINE__)
|
|||
|
||||
#define LOG_ASN1ERR_AND_FREE(pctxt,stat,lctxt) \
|
||||
freeContext ((lctxt)), LOG_ASN1ERR(pctxt, stat)
|
||||
/**
|
||||
* @}
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#define RT_MH_DONTKEEPFREE 0x1
|
||||
|
@ -819,12 +819,12 @@ freeContext ((lctxt)), LOG_ASN1ERR(pctxt, stat)
|
|||
* @{
|
||||
*/
|
||||
/**
|
||||
* Allocate memory. This macro allocates the given number of bytes. It is
|
||||
* Allocate memory. This macro allocates the given number of bytes. It is
|
||||
* similar to the C \c malloc run-time function.
|
||||
*
|
||||
*
|
||||
* @param pctxt - Pointer to a context block
|
||||
* @param nbytes - Number of bytes of memory to allocate
|
||||
* @return - Void pointer to allocated memory or NULL if insufficient memory
|
||||
* @return - Void pointer to allocated memory or NULL if insufficient memory
|
||||
* was available to fulfill the request.
|
||||
*/
|
||||
#define memAlloc(pctxt,nbytes) \
|
||||
|
@ -833,41 +833,41 @@ memHeapAlloc(&(pctxt)->pTypeMemHeap,nbytes)
|
|||
/**
|
||||
* Allocate and zero memory. This macro allocates the given number of bytes
|
||||
* and then initializes the memory block to zero.
|
||||
*
|
||||
*
|
||||
* @param pctxt - Pointer to a context block
|
||||
* @param nbytes - Number of bytes of memory to allocate
|
||||
* @return - Void pointer to allocated memory or NULL if insufficient memory
|
||||
* @return - Void pointer to allocated memory or NULL if insufficient memory
|
||||
* was available to fulfill the request.
|
||||
*/
|
||||
#define memAllocZ(pctxt,nbytes) \
|
||||
memHeapAllocZ(&(pctxt)->pTypeMemHeap,nbytes)
|
||||
|
||||
/**
|
||||
* Reallocate memory. This macro reallocates a memory block (either
|
||||
* expands or contracts) to the given number of bytes. It is
|
||||
* Reallocate memory. This macro reallocates a memory block (either
|
||||
* expands or contracts) to the given number of bytes. It is
|
||||
* similar to the C \c realloc run-time function.
|
||||
*
|
||||
*
|
||||
* @param pctxt - Pointer to a context block
|
||||
* @param mem_p - Pointer to memory block to reallocate. This must have been
|
||||
* @param mem_p - Pointer to memory block to reallocate. This must have been
|
||||
* allocated using the memHeapAlloc macro or the memHeapAlloc function.
|
||||
* @param nbytes - Number of bytes of memory to which the block is to be
|
||||
* @param nbytes - Number of bytes of memory to which the block is to be
|
||||
* resized.
|
||||
* @return - Void pointer to allocated memory or NULL if insufficient memory
|
||||
* was available to fulfill the request. This may be the same as the pmem
|
||||
* @return - Void pointer to allocated memory or NULL if insufficient memory
|
||||
* was available to fulfill the request. This may be the same as the pmem
|
||||
* pointer that was passed in if the block did not need to be relocated.
|
||||
*/
|
||||
#define memRealloc(pctxt,mem_p,nbytes) \
|
||||
memHeapRealloc(&(pctxt)->pTypeMemHeap, (void*)mem_p, nbytes)
|
||||
|
||||
/**
|
||||
* Free memory pointer. This macro frees memory at the given pointer.
|
||||
* The memory must have been allocated using the memHeapAlloc (or similar)
|
||||
* macros or the mem memory allocation macros. This macro is
|
||||
* Free memory pointer. This macro frees memory at the given pointer.
|
||||
* The memory must have been allocated using the memHeapAlloc (or similar)
|
||||
* macros or the mem memory allocation macros. This macro is
|
||||
* similar to the C \c free function.
|
||||
*
|
||||
*
|
||||
* @param pctxt - Pointer to a context block
|
||||
* @param mem_p - Pointer to memory block to free. This must have
|
||||
* been allocated using the memHeapAlloc or memAlloc macro or the
|
||||
* @param mem_p - Pointer to memory block to free. This must have
|
||||
* been allocated using the memHeapAlloc or memAlloc macro or the
|
||||
* memHeapAlloc function.
|
||||
*/
|
||||
#define memFreePtr(pctxt,mem_p) \
|
||||
|
@ -875,34 +875,34 @@ if (memHeapCheckPtr (&(pctxt)->pTypeMemHeap, (void*)mem_p)) \
|
|||
memHeapFreePtr(&(pctxt)->pTypeMemHeap, (void*)mem_p)
|
||||
|
||||
/**
|
||||
* Free memory associated with a context. This macro frees all memory
|
||||
* held within a context. This is all memory allocated using the
|
||||
* memHeapAlloc (and similar macros) and the mem memory allocation
|
||||
* Free memory associated with a context. This macro frees all memory
|
||||
* held within a context. This is all memory allocated using the
|
||||
* memHeapAlloc (and similar macros) and the mem memory allocation
|
||||
* functions using the given context variable.
|
||||
*
|
||||
*
|
||||
* @param pctxt - Pointer to a context block
|
||||
*/
|
||||
#define memFree(pctxt) \
|
||||
memHeapFreeAll(&(pctxt)->pTypeMemHeap)
|
||||
|
||||
/**
|
||||
* Reset memory associated with a context. This macro resets all memory
|
||||
* held within a context. This is all memory allocated using the memHeapAlloc
|
||||
* (and similar macros) and the mem memory allocation functions using the
|
||||
* Reset memory associated with a context. This macro resets all memory
|
||||
* held within a context. This is all memory allocated using the memHeapAlloc
|
||||
* (and similar macros) and the mem memory allocation functions using the
|
||||
* given context variable.
|
||||
*
|
||||
* <p>The difference between this and the ASN1MEMFREE macro is that the
|
||||
* memory blocks held within the context are not actually freed. Internal
|
||||
* pointers are reset so the existing blocks can be reused. This can
|
||||
* provide a performace improvement for repetitive tasks such as decoding
|
||||
* <p>The difference between this and the ASN1MEMFREE macro is that the
|
||||
* memory blocks held within the context are not actually freed. Internal
|
||||
* pointers are reset so the existing blocks can be reused. This can
|
||||
* provide a performace improvement for repetitive tasks such as decoding
|
||||
* messages in a loop.
|
||||
*
|
||||
*
|
||||
* @param pctxt - Pointer to a context block
|
||||
*/
|
||||
#define memReset(pctxt) \
|
||||
memHeapReset(&(pctxt)->pTypeMemHeap)
|
||||
|
||||
/* Alias for __cdecl modifier; if __cdecl keyword is not supported,
|
||||
/* Alias for __cdecl modifier; if __cdecl keyword is not supported,
|
||||
* redefine it as empty macro. */
|
||||
|
||||
#if !defined(OSCDECL)
|
||||
|
@ -931,10 +931,10 @@ EXTERN void* memHeapRealloc (void** ppvMemHeap, void* mem_p, int nbytes_);
|
|||
EXTERN void memHeapRelease (void** ppvMemHeap);
|
||||
EXTERN void memHeapReset (void** ppvMemHeap);
|
||||
|
||||
EXTERN void* memHeapMarkSaved
|
||||
EXTERN void* memHeapMarkSaved
|
||||
(void** ppvMemHeap, const void* mem_p, ASN1BOOL saved);
|
||||
|
||||
EXTERN void memHeapSetProperty
|
||||
EXTERN void memHeapSetProperty
|
||||
(void** ppvMemHeap, ASN1UINT propId, void* pProp);
|
||||
|
||||
|
||||
|
@ -1049,7 +1049,7 @@ csetvar.charSetAlignedBits = abits;
|
|||
* - 0 (ASN_OK) = success,
|
||||
* - negative return value is error.
|
||||
*/
|
||||
EXTERN int decodeBits
|
||||
EXTERN int decodeBits
|
||||
(OOCTXT* pctxt, ASN1UINT* pvalue, ASN1UINT nbits);
|
||||
|
||||
/**
|
||||
|
@ -1072,7 +1072,7 @@ EXTERN int decodeBits
|
|||
* - 0 (ASN_OK) = success,
|
||||
* - negative return value is error.
|
||||
*/
|
||||
EXTERN int decodeBitString
|
||||
EXTERN int decodeBitString
|
||||
(OOCTXT* pctxt, ASN1UINT* numbits_p, ASN1OCTET* buffer,
|
||||
ASN1UINT bufsiz);
|
||||
|
||||
|
@ -1100,7 +1100,7 @@ EXTERN int decodeBitString
|
|||
* - 0 (ASN_OK) = success,
|
||||
* - negative return value is error.
|
||||
*/
|
||||
EXTERN int decodeBMPString
|
||||
EXTERN int decodeBMPString
|
||||
(OOCTXT* pctxt, ASN1BMPString* pvalue, Asn116BitCharSet* permCharSet);
|
||||
|
||||
/**
|
||||
|
@ -1128,7 +1128,7 @@ EXTERN int decodeByteAlign (OOCTXT* pctxt);
|
|||
* - 0 (ASN_OK) = success,
|
||||
* - negative return value is error.
|
||||
*/
|
||||
EXTERN int decodeConsInteger
|
||||
EXTERN int decodeConsInteger
|
||||
(OOCTXT* pctxt, ASN1INT* pvalue, ASN1INT lower, ASN1INT upper);
|
||||
|
||||
/**
|
||||
|
@ -1144,7 +1144,7 @@ EXTERN int decodeConsInteger
|
|||
* - 0 (ASN_OK) = success,
|
||||
* - negative return value is error.
|
||||
*/
|
||||
EXTERN int decodeConsUnsigned
|
||||
EXTERN int decodeConsUnsigned
|
||||
(OOCTXT* pctxt, ASN1UINT* pvalue, ASN1UINT lower, ASN1UINT upper);
|
||||
|
||||
/**
|
||||
|
@ -1160,7 +1160,7 @@ EXTERN int decodeConsUnsigned
|
|||
* - 0 (ASN_OK) = success,
|
||||
* - negative return value is error.
|
||||
*/
|
||||
EXTERN int decodeConsUInt8 (OOCTXT* pctxt,
|
||||
EXTERN int decodeConsUInt8 (OOCTXT* pctxt,
|
||||
ASN1UINT8* pvalue, ASN1UINT lower, ASN1UINT upper);
|
||||
|
||||
/**
|
||||
|
@ -1176,7 +1176,7 @@ EXTERN int decodeConsUInt8 (OOCTXT* pctxt,
|
|||
* - 0 (ASN_OK) = success,
|
||||
* - negative return value is error.
|
||||
*/
|
||||
EXTERN int decodeConsUInt16
|
||||
EXTERN int decodeConsUInt16
|
||||
(OOCTXT* pctxt, ASN1USINT* pvalue, ASN1UINT lower, ASN1UINT upper);
|
||||
|
||||
/**
|
||||
|
@ -1196,7 +1196,7 @@ EXTERN int decodeConsUInt16
|
|||
* - 0 (ASN_OK) = success,
|
||||
* - negative return value is error.
|
||||
*/
|
||||
EXTERN int decodeConsWholeNumber
|
||||
EXTERN int decodeConsWholeNumber
|
||||
(OOCTXT* pctxt, ASN1UINT* padjusted_value, ASN1UINT range_value);
|
||||
|
||||
/**
|
||||
|
@ -1218,7 +1218,7 @@ EXTERN int decodeConsWholeNumber
|
|||
* - 0 (ASN_OK) = success,
|
||||
* - negative return value is error.
|
||||
*/
|
||||
EXTERN int decodeConstrainedStringEx
|
||||
EXTERN int decodeConstrainedStringEx
|
||||
(OOCTXT* pctxt, const char** string, const char* charSet,
|
||||
ASN1UINT abits, ASN1UINT ubits, ASN1UINT canSetBits);
|
||||
|
||||
|
@ -1262,7 +1262,7 @@ EXTERN int decodeDynBitString (OOCTXT* pctxt, ASN1DynBitStr* pBitStr);
|
|||
* - 0 (ASN_OK) = success,
|
||||
* - negative return value is error.
|
||||
*/
|
||||
EXTERN int decodeDynOctetString
|
||||
EXTERN int decodeDynOctetString
|
||||
(OOCTXT* pctxt, ASN1DynOctStr* pOctStr);
|
||||
|
||||
/**
|
||||
|
@ -1321,14 +1321,14 @@ EXTERN int decodeObjectIdentifier (OOCTXT* pctxt, ASN1OBJID* pvalue);
|
|||
* - 0 (ASN_OK) = success,
|
||||
* - negative return value is error.
|
||||
*/
|
||||
EXTERN int decodeOctetString
|
||||
EXTERN int decodeOctetString
|
||||
(OOCTXT* pctxt, ASN1UINT* numocts_p, ASN1OCTET* buffer,
|
||||
ASN1UINT bufsiz);
|
||||
|
||||
/**
|
||||
* This function will decode an ASN.1 open type. This used to be the ASN.1 ANY
|
||||
* type, but now is used in a variety of applications requiring an encoding
|
||||
* that can be interpreted by a decoder without prior knowledge of the type
|
||||
* type, but now is used in a variety of applications requiring an encoding
|
||||
* that can be interpreted by a decoder without prior knowledge of the type
|
||||
* of the variable.
|
||||
*
|
||||
* @param pctxt Pointer to a context structure. This provides a storage
|
||||
|
@ -1342,7 +1342,7 @@ EXTERN int decodeOctetString
|
|||
* - 0 (ASN_OK) = success,
|
||||
* - negative return value is error.
|
||||
*/
|
||||
EXTERN int decodeOpenType
|
||||
EXTERN int decodeOpenType
|
||||
(OOCTXT* pctxt, const ASN1OCTET** object_p2, ASN1UINT* numocts_p);
|
||||
|
||||
/**
|
||||
|
@ -1360,7 +1360,7 @@ EXTERN int decodeOpenType
|
|||
* - 0 (ASN_OK) = success,
|
||||
* - negative return value is error.
|
||||
*/
|
||||
EXTERN int decodeSmallNonNegWholeNumber
|
||||
EXTERN int decodeSmallNonNegWholeNumber
|
||||
(OOCTXT* pctxt, ASN1UINT* pvalue);
|
||||
|
||||
/**
|
||||
|
@ -1374,7 +1374,7 @@ EXTERN int decodeSmallNonNegWholeNumber
|
|||
* - 0 (ASN_OK) = success,
|
||||
* - negative return value is error.
|
||||
*/
|
||||
EXTERN int decodeSemiConsInteger
|
||||
EXTERN int decodeSemiConsInteger
|
||||
(OOCTXT* pctxt, ASN1INT* pvalue, ASN1INT lower);
|
||||
|
||||
/**
|
||||
|
@ -1389,7 +1389,7 @@ EXTERN int decodeSemiConsInteger
|
|||
* - 0 (ASN_OK) = success,
|
||||
* - negative return value is error.
|
||||
*/
|
||||
EXTERN int decodeSemiConsUnsigned
|
||||
EXTERN int decodeSemiConsUnsigned
|
||||
(OOCTXT* pctxt, ASN1UINT* pvalue, ASN1UINT lower);
|
||||
|
||||
/**
|
||||
|
@ -1420,7 +1420,7 @@ decodeSemiConsUnsigned(pctxt, pvalue, 0U)
|
|||
EXTERN int decodeVarWidthCharString (OOCTXT* pctxt, const char** pvalue);
|
||||
|
||||
/**
|
||||
* This function will encode a variable of the ASN.1 BOOLEAN type in
|
||||
* This function will encode a variable of the ASN.1 BOOLEAN type in
|
||||
* a single bit.
|
||||
*
|
||||
* @param pctxt Pointer to a context structure. This provides a storage
|
||||
|
@ -1440,7 +1440,7 @@ EXTERN int encodeBit (OOCTXT* pctxt, ASN1BOOL value);
|
|||
* - 0 (ASN_OK) = success,
|
||||
* - negative return value is error.
|
||||
*/
|
||||
EXTERN int encodeBits
|
||||
EXTERN int encodeBits
|
||||
(OOCTXT* pctxt, ASN1UINT value, ASN1UINT nbits);
|
||||
|
||||
/**
|
||||
|
@ -1456,7 +1456,7 @@ EXTERN int encodeBits
|
|||
* - 0 (ASN_OK) = success,
|
||||
* - negative return value is error.
|
||||
*/
|
||||
EXTERN int encodeBitString
|
||||
EXTERN int encodeBitString
|
||||
(OOCTXT* pctxt, ASN1UINT numocts, const ASN1OCTET* data);
|
||||
|
||||
/**
|
||||
|
@ -1482,7 +1482,7 @@ EXTERN int encodeBitString
|
|||
* - 0 (ASN_OK) = success,
|
||||
* - negative return value is error.
|
||||
*/
|
||||
EXTERN int encodeBMPString
|
||||
EXTERN int encodeBMPString
|
||||
(OOCTXT* pctxt, ASN1BMPString value, Asn116BitCharSet* permCharSet);
|
||||
|
||||
/**
|
||||
|
@ -1532,7 +1532,7 @@ EXTERN int encodeCheckBuffer (OOCTXT* pctxt, ASN1UINT nbytes);
|
|||
* - 0 (ASN_OK) = success,
|
||||
* - negative return value is error.
|
||||
*/
|
||||
EXTERN int encodeConstrainedStringEx
|
||||
EXTERN int encodeConstrainedStringEx
|
||||
(OOCTXT* pctxt, const char* string, const char* charSet,
|
||||
ASN1UINT abits, ASN1UINT ubits, ASN1UINT canSetBits);
|
||||
|
||||
|
@ -1548,7 +1548,7 @@ EXTERN int encodeConstrainedStringEx
|
|||
* - 0 (ASN_OK) = success,
|
||||
* - negative return value is error.
|
||||
*/
|
||||
EXTERN int encodeConsInteger
|
||||
EXTERN int encodeConsInteger
|
||||
(OOCTXT* pctxt, ASN1INT value, ASN1INT lower, ASN1INT upper);
|
||||
|
||||
/**
|
||||
|
@ -1566,7 +1566,7 @@ EXTERN int encodeConsInteger
|
|||
* - 0 (ASN_OK) = success,
|
||||
* - negative return value is error.
|
||||
*/
|
||||
EXTERN int encodeConsUnsigned
|
||||
EXTERN int encodeConsUnsigned
|
||||
(OOCTXT* pctxt, ASN1UINT value, ASN1UINT lower, ASN1UINT upper);
|
||||
|
||||
/**
|
||||
|
@ -1584,7 +1584,7 @@ EXTERN int encodeConsUnsigned
|
|||
* - 0 (ASN_OK) = success,
|
||||
* - negative return value is error.
|
||||
*/
|
||||
EXTERN int encodeConsWholeNumber
|
||||
EXTERN int encodeConsWholeNumber
|
||||
(OOCTXT* pctxt, ASN1UINT adjusted_value, ASN1UINT range_value);
|
||||
|
||||
/**
|
||||
|
@ -1608,7 +1608,7 @@ EXTERN int encodeExpandBuffer (OOCTXT* pctxt, ASN1UINT nbytes);
|
|||
* to get the pointer and length of the message. It is normally used when
|
||||
* dynamic encoding is specified because the message pointer is not known until
|
||||
* encoding is complete. If static encoding is used, the message starts at the
|
||||
* beginning of the specified buffer adn the encodeGetMsgLen function can be
|
||||
* beginning of the specified buffer adn the encodeGetMsgLen function can be
|
||||
* used to obtain the lenght of the message.
|
||||
*
|
||||
* @param pctxt Pointer to a context structure. This provides a storage
|
||||
|
@ -1675,7 +1675,7 @@ EXTERN int encodebitsFromOctet (OOCTXT* pctxt, ASN1OCTET value, ASN1UINT nbits);
|
|||
* - 0 (ASN_OK) = success,
|
||||
* - negative return value is error.
|
||||
*/
|
||||
EXTERN int encodeOctets
|
||||
EXTERN int encodeOctets
|
||||
(OOCTXT* pctxt, const ASN1OCTET* pvalue, ASN1UINT nbits);
|
||||
|
||||
/**
|
||||
|
@ -1690,7 +1690,7 @@ EXTERN int encodeOctets
|
|||
* - 0 (ASN_OK) = success,
|
||||
* - negative return value is error.
|
||||
*/
|
||||
EXTERN int encodeOctetString
|
||||
EXTERN int encodeOctetString
|
||||
(OOCTXT* pctxt, ASN1UINT numocts, const ASN1OCTET* data);
|
||||
|
||||
/**
|
||||
|
@ -1708,7 +1708,7 @@ EXTERN int encodeOctetString
|
|||
* - 0 (ASN_OK) = success,
|
||||
* - negative return value is error.
|
||||
*/
|
||||
EXTERN int encodeOpenType
|
||||
EXTERN int encodeOpenType
|
||||
(OOCTXT* pctxt, ASN1UINT numocts, const ASN1OCTET* data);
|
||||
|
||||
/**
|
||||
|
@ -1729,15 +1729,15 @@ EXTERN int encodeOpenType
|
|||
* - 0 (ASN_OK) = success,
|
||||
* - negative return value is error.
|
||||
*/
|
||||
EXTERN int encodeOpenTypeExt
|
||||
EXTERN int encodeOpenTypeExt
|
||||
(OOCTXT* pctxt, DList* pElemList);
|
||||
|
||||
EXTERN int encodeOpenTypeExtBits
|
||||
EXTERN int encodeOpenTypeExtBits
|
||||
(OOCTXT* pctxt, DList* pElemList);
|
||||
|
||||
/**
|
||||
* This function will endcode a small, non-negative whole number as specified
|
||||
* in Section 10.6 of teh X.691 standard. This is a number that is expected to
|
||||
* in Section 10.6 of the X.691 standard. This is a number that is expected to
|
||||
* be small, but whose size is potentially unlimited due to the presence of an
|
||||
* extension marker.
|
||||
*
|
||||
|
@ -1762,7 +1762,7 @@ EXTERN int encodeSmallNonNegWholeNumber (OOCTXT* pctxt, ASN1UINT value);
|
|||
* - 0 (ASN_OK) = success,
|
||||
* - negative return value is error.
|
||||
*/
|
||||
EXTERN int encodeSemiConsInteger
|
||||
EXTERN int encodeSemiConsInteger
|
||||
(OOCTXT* pctxt, ASN1INT value, ASN1INT lower);
|
||||
|
||||
/**
|
||||
|
@ -1776,7 +1776,7 @@ EXTERN int encodeSemiConsInteger
|
|||
* - 0 (ASN_OK) = success,
|
||||
* - negative return value is error.
|
||||
*/
|
||||
EXTERN int encodeSemiConsUnsigned
|
||||
EXTERN int encodeSemiConsUnsigned
|
||||
(OOCTXT* pctxt, ASN1UINT value, ASN1UINT lower);
|
||||
|
||||
/**
|
||||
|
@ -1791,15 +1791,15 @@ EXTERN int encodeSemiConsUnsigned
|
|||
#define encodeUnconsInteger(pctxt,value) \
|
||||
encodeSemiConsInteger(pctxt,value,ASN1INT_MIN)
|
||||
|
||||
EXTERN int encodeVarWidthCharString (OOCTXT* pctxt, const char* value);
|
||||
EXTERN int encodeVarWidthCharString (OOCTXT* pctxt, const char* value);
|
||||
|
||||
EXTERN int addSizeConstraint (OOCTXT* pctxt, Asn1SizeCnst* pSize);
|
||||
|
||||
EXTERN ASN1BOOL alignCharStr
|
||||
EXTERN ASN1BOOL alignCharStr
|
||||
(OOCTXT* pctxt, ASN1UINT len, ASN1UINT nbits, Asn1SizeCnst* pSize);
|
||||
|
||||
EXTERN int bitAndOctetStringAlignmentTest
|
||||
(Asn1SizeCnst* pSizeList, ASN1UINT itemCount,
|
||||
EXTERN int bitAndOctetStringAlignmentTest
|
||||
(Asn1SizeCnst* pSizeList, ASN1UINT itemCount,
|
||||
ASN1BOOL bitStrFlag, ASN1BOOL* pAlignFlag);
|
||||
|
||||
EXTERN int getPERMsgLen (OOCTXT* pctxt);
|
||||
|
@ -1811,20 +1811,20 @@ EXTERN Asn1SizeCnst* getSizeConstraint (OOCTXT* pctxt, ASN1BOOL extbit);
|
|||
EXTERN int checkSizeConstraint(OOCTXT* pctxt, int size);
|
||||
EXTERN ASN1UINT getUIntBitCount (ASN1UINT value);
|
||||
|
||||
EXTERN Asn1SizeCnst* checkSize
|
||||
EXTERN Asn1SizeCnst* checkSize
|
||||
(Asn1SizeCnst* pSizeList, ASN1UINT value, ASN1BOOL* pExtendable);
|
||||
|
||||
EXTERN void init16BitCharSet
|
||||
EXTERN void init16BitCharSet
|
||||
(Asn116BitCharSet* pCharSet, ASN116BITCHAR first,
|
||||
ASN116BITCHAR last, ASN1UINT abits, ASN1UINT ubits);
|
||||
|
||||
EXTERN ASN1BOOL isExtendableSize (Asn1SizeCnst* pSizeList);
|
||||
|
||||
EXTERN void set16BitCharSet
|
||||
EXTERN void set16BitCharSet
|
||||
(OOCTXT* pctxt, Asn116BitCharSet* pCharSet, Asn116BitCharSet* pAlphabet);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,22 +1,22 @@
|
|||
/*
|
||||
* Copyright (C) 2004-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
/**
|
||||
* @file oochannels.h
|
||||
* This file contains functions to create and use channels.
|
||||
* @file oochannels.h
|
||||
* This file contains functions to create and use channels.
|
||||
*/
|
||||
#ifndef _OOCHANNELS_H_
|
||||
#define _OOCHANNELS_H_
|
||||
|
@ -46,7 +46,7 @@ extern "C" {
|
|||
struct OOH323CallData;
|
||||
struct Q931Message;
|
||||
|
||||
/**
|
||||
/**
|
||||
* @defgroup channels Channel Management
|
||||
* @{
|
||||
*/
|
||||
|
@ -60,7 +60,7 @@ EXTERN int ooCreateH323Listener(void);
|
|||
/**
|
||||
* This function is used to create a listener for incoming H.245 connections.
|
||||
* @param call Pointer to call for which H.245 listener has to be created
|
||||
*
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
*/
|
||||
EXTERN int ooCreateH245Listener(struct OOH323CallData *call);
|
||||
|
@ -75,7 +75,7 @@ EXTERN int ooCloseH245Listener(struct OOH323CallData *call);
|
|||
|
||||
/**
|
||||
* This function is used to accept incoming H.225 connections.
|
||||
*
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
*/
|
||||
EXTERN int ooAcceptH225Connection(void);
|
||||
|
@ -84,16 +84,16 @@ EXTERN int ooAcceptH225Connection(void);
|
|||
* This function is used to accept an incoming H.245 connection.
|
||||
* @param call Pointer to a call for which H.245 connection request has
|
||||
* arrived.
|
||||
*
|
||||
*
|
||||
* @return OO_OK, on succes. OO_FAILED, on failure.
|
||||
*/
|
||||
EXTERN int ooAcceptH245Connection(struct OOH323CallData *call);
|
||||
|
||||
/**
|
||||
* This function is used to create an H.225 connection to the remote end point.
|
||||
* @param call Pointer to the call for which H.225 connection has to be
|
||||
* @param call Pointer to the call for which H.225 connection has to be
|
||||
* setup.
|
||||
* @return OO_OK, on succes. OO_FAILED, on failure.
|
||||
* @return OO_OK, on succes. OO_FAILED, on failure.
|
||||
*/
|
||||
EXTERN int ooCreateH225Connection(struct OOH323CallData *call);
|
||||
|
||||
|
@ -108,17 +108,17 @@ EXTERN int ooCreateH245Connection(struct OOH323CallData *call);
|
|||
|
||||
/**
|
||||
* This function is used to close an H.225 connection
|
||||
* @param call Pointer to the call for which H.225 connection has to be
|
||||
* @param call Pointer to the call for which H.225 connection has to be
|
||||
* closed.
|
||||
*
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
*/
|
||||
EXTERN int ooCloseH225Connection(struct OOH323CallData *call);
|
||||
|
||||
/**
|
||||
* This function is used to close an H.245 connection for a call.
|
||||
* This function is used to close an H.245 connection for a call.
|
||||
*
|
||||
* @param call Pointer to call for which H.245 connection has
|
||||
* @param call Pointer to call for which H.245 connection has
|
||||
* to be closed.
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
*/
|
||||
|
@ -127,7 +127,7 @@ EXTERN int ooCloseH245Connection(struct OOH323CallData *call);
|
|||
/**
|
||||
* This function is used to start monitoring channels for the calls. It has
|
||||
* an infinite loop which uses select to monitor various channels.
|
||||
*
|
||||
*
|
||||
*/
|
||||
EXTERN int ooMonitorChannels(void);
|
||||
EXTERN int ooMonitorCmdChannels(void);
|
||||
|
@ -144,22 +144,22 @@ EXTERN void ooStopMonitorCallChannels(OOH323CallData *);
|
|||
|
||||
/**
|
||||
* This function is used to receive an H.2250 message received on a calls
|
||||
* H.225 channel. It receives the message, decodes it and calls
|
||||
* H.225 channel. It receives the message, decodes it and calls
|
||||
* 'ooHandleH2250Message' to process the message.
|
||||
* @param call Pointer to the call for which the message has to be
|
||||
* @param call Pointer to the call for which the message has to be
|
||||
* received.
|
||||
*
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
*/
|
||||
EXTERN int ooH2250Receive(struct OOH323CallData *call);
|
||||
|
||||
/**
|
||||
* This function is used to receive an H.245 message received on a calls
|
||||
* H.245 channel. It receives the message, decodes it and calls
|
||||
* H.245 channel. It receives the message, decodes it and calls
|
||||
* 'ooHandleH245Message' to process it.
|
||||
* @param call Pointer to the call for which the message has to be
|
||||
* @param call Pointer to the call for which the message has to be
|
||||
* received.
|
||||
*
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
*/
|
||||
EXTERN int ooH245Receive(struct OOH323CallData *call);
|
||||
|
@ -175,7 +175,7 @@ EXTERN int ooH245Receive(struct OOH323CallData *call);
|
|||
EXTERN int ooSendH225Msg(struct OOH323CallData *call, struct Q931Message *msg);
|
||||
|
||||
/**
|
||||
* This function is used to Send a message on the channel, when channel is
|
||||
* This function is used to Send a message on the channel, when channel is
|
||||
* available for write.
|
||||
* @param call Pointer to call for which message has to be sent.
|
||||
* @param type Type of the message.
|
||||
|
@ -197,11 +197,11 @@ EXTERN int ooSendMsg(struct OOH323CallData *call, int type);
|
|||
* @return OO_OK, on success. OO_FAILED, on failure
|
||||
*/
|
||||
EXTERN int ooOnSendMsg
|
||||
(struct OOH323CallData *call, int msgType, int tunneledMsgType,
|
||||
(struct OOH323CallData *call, int msgType, int tunneledMsgType,
|
||||
int associatedChan);
|
||||
|
||||
/**
|
||||
* This function is used to check the status of tcp connection.
|
||||
* This function is used to check the status of tcp connection.
|
||||
* @param call Handle to the call to which connection belongs.
|
||||
* @param sock Connected socket.
|
||||
*
|
||||
|
@ -209,11 +209,10 @@ EXTERN int ooOnSendMsg
|
|||
*/
|
||||
EXTERN OOBOOL ooChannelsIsConnectionOK(OOH323CallData *call, OOSOCKET sock);
|
||||
|
||||
/**
|
||||
* @}
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,22 +1,22 @@
|
|||
/*
|
||||
* Copyright (C) 2004-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
/**
|
||||
* @file ooh245.h
|
||||
* This file contains functions to support H245 negotiations.
|
||||
* @file ooh245.h
|
||||
* This file contains functions to support H245 negotiations.
|
||||
*/
|
||||
#ifndef _OOH245HDR_H_
|
||||
#define _OOH245HDR_H_
|
||||
|
@ -43,7 +43,7 @@ extern "C" {
|
|||
|
||||
struct OOH323CallData;
|
||||
|
||||
/**
|
||||
/**
|
||||
* @defgroup h245 H.245 Message Handling
|
||||
* @{
|
||||
*/
|
||||
|
@ -59,15 +59,15 @@ typedef struct H245Message {
|
|||
|
||||
/**
|
||||
* Creates an outgoing H245 message of the type specified by the type
|
||||
* argument for the Application context.
|
||||
* argument for the Application context.
|
||||
*
|
||||
* @param msg A pointer to pointer to message which will be assigned to
|
||||
* @param msg A pointer to pointer to message which will be assigned to
|
||||
* allocated memory.
|
||||
* @param type Type of the message to be created.
|
||||
* (Request/Response/Command/Indication)
|
||||
*
|
||||
* @return Completion status of operation: 0 (OO_OK) = success,
|
||||
* negative return value is error.
|
||||
* negative return value is error.
|
||||
*/
|
||||
EXTERN int ooCreateH245Message(OOH323CallData* call, H245Message **msg, int type);
|
||||
|
||||
|
@ -77,7 +77,7 @@ EXTERN int ooCreateH245Message(OOH323CallData* call, H245Message **msg, int type
|
|||
* @param call Handle to the call
|
||||
* @param pmsg Pointer to an H245 message structure.
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, on failure
|
||||
* @return OO_OK, on success. OO_FAILED, on failure
|
||||
*/
|
||||
EXTERN int ooFreeH245Message(struct OOH323CallData *call, H245Message *pmsg);
|
||||
|
||||
|
@ -92,8 +92,8 @@ EXTERN int ooFreeH245Message(struct OOH323CallData *call, H245Message *pmsg);
|
|||
EXTERN int ooSendH245Msg(struct OOH323CallData *call, H245Message *msg);
|
||||
|
||||
/**
|
||||
* This function is used to retrieve an H.245 message enqueued in the outgoing
|
||||
* queue.
|
||||
* This function is used to retrieve an H.245 message enqueued in the outgoing
|
||||
* queue.
|
||||
* @param call Pointer to the call for which message has to be retrieved.
|
||||
* @param msgbuf Pointer to a buffer in which the message will be returned.
|
||||
* @param len Pointer to an int variable which will contain length of
|
||||
|
@ -103,17 +103,17 @@ EXTERN int ooSendH245Msg(struct OOH323CallData *call, H245Message *msg);
|
|||
*
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
*/
|
||||
EXTERN int ooGetOutgoingH245Msgbuf(struct OOH323CallData *call,
|
||||
ASN1OCTET *msgbuf,
|
||||
EXTERN int ooGetOutgoingH245Msgbuf(struct OOH323CallData *call,
|
||||
ASN1OCTET *msgbuf,
|
||||
int *len, int *msgType);
|
||||
|
||||
/**
|
||||
* This function is used to send out a terminal capability set message.
|
||||
* This function is used to send out a terminal capability set message.
|
||||
*
|
||||
* @param call Pointer to a call for which TerminalCapabilitySet message
|
||||
* will be sent.
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
*/
|
||||
EXTERN int ooSendTermCapMsg(struct OOH323CallData *call);
|
||||
EXTERN int ooSendEmptyTermCapMsg(struct OOH323CallData *call);
|
||||
|
@ -128,10 +128,10 @@ EXTERN ASN1UINT ooGenerateStatusDeterminationNumber(void);
|
|||
|
||||
/**
|
||||
* This fuction is used to handle received MasterSlaveDetermination procedure
|
||||
* messages.
|
||||
* messages.
|
||||
* @param call Pointer to the call for which a message is received.
|
||||
* @param pmsg Pointer to MSD message
|
||||
* @param msgType Message type indicating whether received message is MSD,
|
||||
* @param msgType Message type indicating whether received message is MSD,
|
||||
* MSDAck, MSDReject etc...
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
|
@ -152,11 +152,11 @@ EXTERN int ooSendMasterSlaveDetermination(struct OOH323CallData *call);
|
|||
* This function is used to send a MasterSlaveDeterminationAck message.
|
||||
* @param call Pointer to call for which MasterSlaveDeterminationAck has
|
||||
* to be sent.
|
||||
* @param status Result of the determination process(Master/Slave as it
|
||||
* @param status Result of the determination process(Master/Slave as it
|
||||
* applies to remote endpoint)
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
*/
|
||||
*/
|
||||
EXTERN int ooSendMasterSlaveDeterminationAck
|
||||
(struct OOH323CallData* call, char * status);
|
||||
|
||||
|
@ -164,19 +164,19 @@ EXTERN int ooSendMasterSlaveDeterminationAck
|
|||
* This function is used to send a MasterSlaveDeterminationReject message.
|
||||
* @param call Pointer to call for which message is to be sent.
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
*/
|
||||
*/
|
||||
EXTERN int ooSendMasterSlaveDeterminationReject (struct OOH323CallData* call);
|
||||
|
||||
|
||||
/**
|
||||
* This function is used to handle MasterSlaveReject message. If number of
|
||||
* retries is less than max allowed, then it restarts the
|
||||
* retries is less than max allowed, then it restarts the
|
||||
* MasterSlaveDetermination procedure.
|
||||
* @param call Handle to the call for which MasterSlaveReject is
|
||||
* @param call Handle to the call for which MasterSlaveReject is
|
||||
* received.
|
||||
* @param reject Poinetr to the received reject message.
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
*/
|
||||
EXTERN int ooHandleMasterSlaveReject
|
||||
(struct OOH323CallData *call, H245MasterSlaveDeterminationReject* reject);
|
||||
|
@ -193,13 +193,13 @@ EXTERN int ooHandleOpenLogicalChannel
|
|||
(struct OOH323CallData* call, H245OpenLogicalChannel *olc);
|
||||
|
||||
/**
|
||||
* This is a helper function used to handle a received OpenLogicalChannel
|
||||
* This is a helper function used to handle a received OpenLogicalChannel
|
||||
* message. It builds an OpenLogicalChannelAck message and sends it.
|
||||
*
|
||||
* @param call Pointer to cll for which OLC was received.
|
||||
* @param olc The received OpenLogicalChannel message.
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
*/
|
||||
EXTERN int ooHandleOpenLogicalChannel_helper
|
||||
(struct OOH323CallData *call, H245OpenLogicalChannel*olc);
|
||||
|
@ -222,22 +222,22 @@ int ooSendOpenLogicalChannelReject
|
|||
*
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
*/
|
||||
EXTERN int ooOnReceivedOpenLogicalChannelAck(struct OOH323CallData *call,
|
||||
EXTERN int ooOnReceivedOpenLogicalChannelAck(struct OOH323CallData *call,
|
||||
H245OpenLogicalChannelAck *olcAck);
|
||||
|
||||
|
||||
/**
|
||||
* This function is used to handle the received OpenLogicalChannelReject
|
||||
* This function is used to handle the received OpenLogicalChannelReject
|
||||
* message.
|
||||
* @param call Handle to the call for which the message is received.
|
||||
* @param olcRejected Pointer to received OpenLogicalChannelReject message.
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
*/
|
||||
int ooOnReceivedOpenLogicalChannelRejected(struct OOH323CallData *call,
|
||||
int ooOnReceivedOpenLogicalChannelRejected(struct OOH323CallData *call,
|
||||
H245OpenLogicalChannelReject *olcRejected);
|
||||
/**
|
||||
* This message is used to send an EndSession command. It builds a EndSession
|
||||
* This message is used to send an EndSession command. It builds a EndSession
|
||||
* command message and queues it into the calls outgoing queue.
|
||||
* @param call Pointer to call for which EndSession command has to be
|
||||
* sent.
|
||||
|
@ -246,7 +246,7 @@ int ooOnReceivedOpenLogicalChannelRejected(struct OOH323CallData *call,
|
|||
EXTERN int ooSendEndSessionCommand(struct OOH323CallData *call);
|
||||
|
||||
/**
|
||||
* This function is used to handle a received H245Command message.
|
||||
* This function is used to handle a received H245Command message.
|
||||
* @param call Pointer to call for which an H245Command is received.
|
||||
* @param command Pointer to a command message.
|
||||
*
|
||||
|
@ -259,7 +259,7 @@ EXTERN int ooHandleH245Command
|
|||
/**
|
||||
* This function is used to handle a received UserInput Indication message.
|
||||
* It extracts the dtmf received through user-input message and calls endpoints
|
||||
* onReceivedDTMF callback function, if such a function is registered by the
|
||||
* onReceivedDTMF callback function, if such a function is registered by the
|
||||
* endpoint.
|
||||
* @param call Handle to the call for which user-input indication
|
||||
* message is received.
|
||||
|
@ -272,7 +272,7 @@ EXTERN int ooOnReceivedUserInputIndication
|
|||
|
||||
/**
|
||||
* This function is called on receiving a TreminalCapabilitySetAck message.
|
||||
* If the MasterSlaveDetermination process is also over, this function
|
||||
* If the MasterSlaveDetermination process is also over, this function
|
||||
* initiates the process of opening logical channels.
|
||||
* @param call Pointer to call for which TCSAck is received.
|
||||
*
|
||||
|
@ -282,9 +282,9 @@ EXTERN int ooOnReceivedTerminalCapabilitySetAck(struct OOH323CallData* call);
|
|||
|
||||
/**
|
||||
* This function is called to close all the open logical channels. It sends
|
||||
* CloseLogicalChannel message for all the forward channels and sends
|
||||
* CloseLogicalChannel message for all the forward channels and sends
|
||||
* RequestCloseLogicalChannel message for all the reverse channels.
|
||||
* @param call Pointer to call for which logical channels have to be
|
||||
* @param call Pointer to call for which logical channels have to be
|
||||
* closed.
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
|
@ -311,10 +311,10 @@ EXTERN int ooSendCloseLogicalChannel
|
|||
* closeLogicalChannelAck message to the remote endpoint.
|
||||
* @param call Pointer to call for which CloseLogicalChannel message is received.
|
||||
* @param clc Pointer to received CloseLogicalChannel message.
|
||||
*
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
*/
|
||||
EXTERN int ooOnReceivedCloseLogicalChannel(struct OOH323CallData *call,
|
||||
EXTERN int ooOnReceivedCloseLogicalChannel(struct OOH323CallData *call,
|
||||
H245CloseLogicalChannel* clc);
|
||||
|
||||
/**
|
||||
|
@ -322,10 +322,10 @@ EXTERN int ooOnReceivedCloseLogicalChannel(struct OOH323CallData *call,
|
|||
* channel and removes it from the list of active logical channels.
|
||||
* @param call Pointer to call for which CLCAck message is received.
|
||||
* @param clcAck Pointer to the received CloseLogicalChannelAck message.
|
||||
*
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, on failure
|
||||
*/
|
||||
EXTERN int ooOnReceivedCloseChannelAck(struct OOH323CallData* call,
|
||||
EXTERN int ooOnReceivedCloseChannelAck(struct OOH323CallData* call,
|
||||
H245CloseLogicalChannelAck* clcAck);
|
||||
|
||||
/**
|
||||
|
@ -365,27 +365,27 @@ EXTERN int ooH245AcknowledgeTerminalCapabilitySet(struct OOH323CallData *call);
|
|||
* @param call Pointer to call for which logical channels have to be opened.
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
*/
|
||||
*/
|
||||
EXTERN int ooOpenLogicalChannels(struct OOH323CallData *call);
|
||||
|
||||
/**
|
||||
* This function is used to send OpenLogicalChannel message for audio/video
|
||||
* This function is used to send OpenLogicalChannel message for audio/video
|
||||
* channel.
|
||||
* @param call Pointer to call for which channel has to be opened.
|
||||
* @param capType Type of media channel.
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
*/
|
||||
EXTERN int ooOpenLogicalChannel(struct OOH323CallData *call,
|
||||
EXTERN int ooOpenLogicalChannel(struct OOH323CallData *call,
|
||||
enum OOCapType capType);
|
||||
|
||||
/**
|
||||
* This function is used to build and send OpenLogicalChannel message using
|
||||
* capability passed as parameter.
|
||||
* @param call Pointer to call for which OpenLogicalChannel message
|
||||
* @param call Pointer to call for which OpenLogicalChannel message
|
||||
* has to be built.
|
||||
* @param epCap Pointer to capability
|
||||
*
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
*/
|
||||
EXTERN int ooOpenChannel
|
||||
|
@ -415,7 +415,7 @@ EXTERN int ooSendH245UserInputIndication_signal
|
|||
|
||||
/**
|
||||
* This function is used to request a remote end point to close a logical
|
||||
* channel.
|
||||
* channel.
|
||||
* @param call Pointer to call for which the logical channel has to
|
||||
* be closed.
|
||||
* @param logicalChan Pointer to the logical channel structure which needs
|
||||
|
@ -423,7 +423,7 @@ EXTERN int ooSendH245UserInputIndication_signal
|
|||
*
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
*/
|
||||
EXTERN int ooSendRequestCloseLogicalChannel(struct OOH323CallData *call,
|
||||
EXTERN int ooSendRequestCloseLogicalChannel(struct OOH323CallData *call,
|
||||
ooLogicalChannel *logicalChan);
|
||||
|
||||
/**
|
||||
|
@ -447,11 +447,11 @@ int ooSendRequestChannelCloseRelease
|
|||
*
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
*/
|
||||
EXTERN int ooOnReceivedRequestChannelClose(struct OOH323CallData *call,
|
||||
EXTERN int ooOnReceivedRequestChannelClose(struct OOH323CallData *call,
|
||||
H245RequestChannelClose *rclc);
|
||||
|
||||
/**
|
||||
* This function is used to handle a received RequestChannelCloseReject
|
||||
* This function is used to handle a received RequestChannelCloseReject
|
||||
* response message.
|
||||
* @param call Handle to the call.
|
||||
* @param rccReject Pointer to the received reject response message.
|
||||
|
@ -462,7 +462,7 @@ int ooOnReceivedRequestChannelCloseReject
|
|||
(struct OOH323CallData *call, H245RequestChannelCloseReject *rccReject);
|
||||
|
||||
/**
|
||||
* This function is used to handle a received RequestChannelCloseAck
|
||||
* This function is used to handle a received RequestChannelCloseAck
|
||||
* response message.
|
||||
* @param call Handle to the call.
|
||||
* @param rccAck Pointer to the received ack response message.
|
||||
|
@ -473,21 +473,21 @@ int ooOnReceivedRequestChannelCloseAck
|
|||
(struct OOH323CallData *call, H245RequestChannelCloseAck *rccAck);
|
||||
|
||||
/**
|
||||
* Builds an OLC for faststart with an audio/video capability passed as
|
||||
* Builds an OLC for faststart with an audio/video capability passed as
|
||||
* parameter.
|
||||
* @param call Handle to call for which OLC has to be built.
|
||||
* @param olc Pointer to an OLC structure which will be populated.
|
||||
* @param epCap Pointer to the capability which will be used to
|
||||
* @param epCap Pointer to the capability which will be used to
|
||||
* build OLC.
|
||||
* @param pctxt Pointer to an OOCTXT structure which will be used
|
||||
* @param pctxt Pointer to an OOCTXT structure which will be used
|
||||
* to allocate additional memory for OLC.
|
||||
* @param dir Direction of OLC
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
*/
|
||||
EXTERN int ooBuildFastStartOLC(struct OOH323CallData *call,
|
||||
H245OpenLogicalChannel *olc,
|
||||
ooH323EpCapability *epCap,
|
||||
EXTERN int ooBuildFastStartOLC(struct OOH323CallData *call,
|
||||
H245OpenLogicalChannel *olc,
|
||||
ooH323EpCapability *epCap,
|
||||
OOCTXT*pctxt, int dir);
|
||||
|
||||
/**
|
||||
|
@ -496,16 +496,16 @@ EXTERN int ooBuildFastStartOLC(struct OOH323CallData *call,
|
|||
* of the olc received in SETUP.
|
||||
* @param call Handle to call for which OLC has to be built.
|
||||
* @param olc Pointer to an received OLC structure.
|
||||
* @param epCap Pointer to the capability which will be used for
|
||||
* @param epCap Pointer to the capability which will be used for
|
||||
* this channel.
|
||||
* @param pctxt Pointer to an OOCTXT structure which will be used
|
||||
* @param pctxt Pointer to an OOCTXT structure which will be used
|
||||
* to allocate additional memory for OLC.
|
||||
* @param dir Direction of channel OORX, OOTX etc.
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
*/
|
||||
EXTERN int ooPrepareFastStartResponseOLC
|
||||
(OOH323CallData *call, H245OpenLogicalChannel *olc,
|
||||
(OOH323CallData *call, H245OpenLogicalChannel *olc,
|
||||
ooH323EpCapability *epCap, OOCTXT*pctxt, int dir);
|
||||
|
||||
/**
|
||||
|
@ -533,7 +533,7 @@ int ooSendMasterSlaveDeterminationRelease(struct OOH323CallData * call);
|
|||
/**
|
||||
* This function is used to send a terminal capability set reject message
|
||||
* to the remote endpoint.
|
||||
* @param call Handle to the call for which reject message has to
|
||||
* @param call Handle to the call for which reject message has to
|
||||
* be sent.
|
||||
* @param seqNo Sequence number of the TCS message to be rejected.
|
||||
* @param cause Cause for rejecting a TCS message.
|
||||
|
@ -546,7 +546,7 @@ int ooSendTerminalCapabilitySetReject
|
|||
/**
|
||||
* This function is used to send a TerminalCapabilitySetRelease message after
|
||||
* capability exchange timer has expired.
|
||||
* @param call Handle to call for which release message has to be
|
||||
* @param call Handle to call for which release message has to be
|
||||
* sent.
|
||||
*
|
||||
* @return OO_OK, on success; OO_FAILED, on failure.
|
||||
|
@ -557,26 +557,26 @@ int ooSendRequestMode(OOH323CallData* call, int isT38Mode);
|
|||
|
||||
|
||||
/**
|
||||
* This is an helper function used to extract ip address and port info from
|
||||
* This is an helper function used to extract ip address and port info from
|
||||
* H245TransportAddress structure.
|
||||
* @param call Handle to associated call.
|
||||
* @param h245Address Handle to H245TransportAddress structure from which
|
||||
* @param h245Address Handle to H245TransportAddress structure from which
|
||||
* information has to be extracted.
|
||||
* @param ip Pointer to buffer in which ip address will be
|
||||
* @param ip Pointer to buffer in which ip address will be
|
||||
* returned. Make sure that buffer has sufficient length.
|
||||
* @param port Pointer to integer in which port number will be
|
||||
* @param port Pointer to integer in which port number will be
|
||||
* returned.
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
*/
|
||||
int ooGetIpPortFromH245TransportAddress
|
||||
(OOH323CallData *call, H245TransportAddress *h245Address, char *ip,
|
||||
(OOH323CallData *call, H245TransportAddress *h245Address, char *ip,
|
||||
int *port);
|
||||
|
||||
/**
|
||||
* This is a callback function for handling an expired master-slave
|
||||
* This is a callback function for handling an expired master-slave
|
||||
* determination timer.
|
||||
* @param data Callback data registered at the time of creation of
|
||||
* @param data Callback data registered at the time of creation of
|
||||
* the timer.
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, otherwise.
|
||||
|
@ -584,9 +584,9 @@ int ooGetIpPortFromH245TransportAddress
|
|||
int ooMSDTimerExpired(void *data);
|
||||
|
||||
/**
|
||||
* This is a callback function for handling an expired capability exchange
|
||||
* This is a callback function for handling an expired capability exchange
|
||||
* timer.
|
||||
* @param data Callback data registered at the time of creation of
|
||||
* @param data Callback data registered at the time of creation of
|
||||
* the timer.
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, otherwise.
|
||||
|
@ -594,9 +594,9 @@ int ooMSDTimerExpired(void *data);
|
|||
int ooTCSTimerExpired(void *data);
|
||||
|
||||
/**
|
||||
* This is a callback function for handling an expired OpenLogicalChannel
|
||||
* This is a callback function for handling an expired OpenLogicalChannel
|
||||
* timer.
|
||||
* @param pdata Callback data registered at the time of creation of
|
||||
* @param pdata Callback data registered at the time of creation of
|
||||
* the timer.
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, otherwise.
|
||||
|
@ -604,9 +604,9 @@ int ooTCSTimerExpired(void *data);
|
|||
int ooOpenLogicalChannelTimerExpired(void *pdata);
|
||||
|
||||
/**
|
||||
* This is a callback function for handling an expired CloseLogicalChannel
|
||||
* This is a callback function for handling an expired CloseLogicalChannel
|
||||
* timer.
|
||||
* @param pdata Callback data registered at the time of creation of
|
||||
* @param pdata Callback data registered at the time of creation of
|
||||
* the timer.
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, otherwise.
|
||||
|
@ -614,9 +614,9 @@ int ooOpenLogicalChannelTimerExpired(void *pdata);
|
|||
int ooCloseLogicalChannelTimerExpired(void *pdata);
|
||||
|
||||
/**
|
||||
* This is a callback function for handling an expired RequestChannelClose
|
||||
* This is a callback function for handling an expired RequestChannelClose
|
||||
* timer.
|
||||
* @param pdata Callback data registered at the time of creation of
|
||||
* @param pdata Callback data registered at the time of creation of
|
||||
* the timer.
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, otherwise.
|
||||
|
@ -625,14 +625,14 @@ int ooRequestChannelCloseTimerExpired(void *pdata);
|
|||
|
||||
/**
|
||||
* This is a callback function for handling an expired EndSession timer.
|
||||
* @param pdata Callback data registered at the time of creation of
|
||||
* @param pdata Callback data registered at the time of creation of
|
||||
* the timer.
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, otherwise.
|
||||
*/
|
||||
int ooSessionTimerExpired(void *pdata);
|
||||
/**
|
||||
* @}
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
int ooRTDTimerExpired(void *pdata);
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,22 +1,22 @@
|
|||
/*
|
||||
* Copyright (C) 2004-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
/**
|
||||
* @file ooh323.h
|
||||
* This file contains functions to support H.225 messages.
|
||||
* @file ooh323.h
|
||||
* This file contains functions to support H.225 messages.
|
||||
*/
|
||||
#ifndef _OOH323HDR_H_
|
||||
#define _OOH323HDR_H_
|
||||
|
@ -81,7 +81,7 @@ EXTERN int ooHandleH2250Message
|
|||
/**
|
||||
* This function is used to process a received Facility message.
|
||||
* @param call Handle to the call for which message has been received.
|
||||
* @param pQ931Msg Pointer the the received Facility message.
|
||||
* @param pQ931Msg Pointer the received Facility message.
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
*/
|
||||
|
@ -95,7 +95,7 @@ EXTERN int ooOnReceivedFacility
|
|||
*
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
*/
|
||||
EXTERN int ooHandleTunneledH245Messages(struct OOH323CallData *call,
|
||||
EXTERN int ooHandleTunneledH245Messages(struct OOH323CallData *call,
|
||||
H225H323_UU_PDU * pH323UUPdu);
|
||||
|
||||
/**
|
||||
|
@ -103,7 +103,7 @@ EXTERN int ooHandleTunneledH245Messages(struct OOH323CallData *call,
|
|||
* @param call Handle to the call
|
||||
* @param facility Pointer to the facility message.
|
||||
*/
|
||||
EXTERN int ooHandleStartH245FacilityMessage(struct OOH323CallData *call,
|
||||
EXTERN int ooHandleStartH245FacilityMessage(struct OOH323CallData *call,
|
||||
H225Facility_UUIE *facility);
|
||||
|
||||
/**
|
||||
|
@ -112,13 +112,13 @@ EXTERN int ooHandleStartH245FacilityMessage(struct OOH323CallData *call,
|
|||
* @param call Handle to the call.Null when retrieving registered
|
||||
* aliases.
|
||||
* @param pAddresses Pointer to the sequence of alias addresses.
|
||||
* @param aliasList Handle to alias list to be populated with retrieved
|
||||
* @param aliasList Handle to alias list to be populated with retrieved
|
||||
* aliases.
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
*/
|
||||
EXTERN int ooH323RetrieveAliases
|
||||
(struct OOH323CallData *call, H225_SeqOfH225AliasAddress *pAddresses,
|
||||
(struct OOH323CallData *call, H225_SeqOfH225AliasAddress *pAddresses,
|
||||
OOAliases **aliasList);
|
||||
|
||||
/**
|
||||
|
@ -133,16 +133,16 @@ EXTERN int ooPopulatePrefixList(OOCTXT *pctxt, OOAliases *pAliases,
|
|||
* @param pAliases Pointer to aliases to be used for populating list.
|
||||
* @param pAliasList Pointer to alias list to be populated.
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, otherwise.
|
||||
* @return OO_OK, on success. OO_FAILED, otherwise.
|
||||
*/
|
||||
EXTERN int ooPopulateAliasList(OOCTXT *pctxt, OOAliases *pAliases,
|
||||
H225_SeqOfH225AliasAddress *pAliasList, int pAliasType);
|
||||
H225_SeqOfH225AliasAddress *pAliasList, int pAliasType);
|
||||
|
||||
/**
|
||||
* This function is used to search a particular alias in the alias list. The
|
||||
* search can be on the basis of alias type or value or both.
|
||||
* @param aliasList Handle to the alias list to be searched.
|
||||
* @param type Type of the alias, if search has to consider type as
|
||||
* @param type Type of the alias, if search has to consider type as
|
||||
* criterion, otherwise 0.
|
||||
* @param value Value of the alias, if the search has to consider value as
|
||||
* criterion, NULL otherwise.
|
||||
|
@ -153,7 +153,7 @@ EXTERN OOAliases* ooH323GetAliasFromList
|
|||
/**
|
||||
* This function is used to add a new alias to alias list.
|
||||
* @param pAliasList Pointer to Alias list.
|
||||
* @param pctxt Pointer to OOCTXT structure to be used for memory
|
||||
* @param pctxt Pointer to OOCTXT structure to be used for memory
|
||||
* allocation.
|
||||
* @param pAliasAddress New alias address to be added.
|
||||
*
|
||||
|
@ -169,12 +169,12 @@ EXTERN OOAliases* ooH323AddAliasToList
|
|||
* @param h225Address Pointer to H225TransportAddress structure
|
||||
* @param ip Pointer to the buffer in which dotted ip address will
|
||||
* be returned.
|
||||
* @param port Pointer to the integer in which port value will be
|
||||
* @param port Pointer to the integer in which port value will be
|
||||
* returned.
|
||||
*
|
||||
* @return OO_OK, on success; OO_FAILED, on failure.
|
||||
*/
|
||||
int ooH323GetIpPortFromH225TransportAddress(struct OOH323CallData *call,
|
||||
int ooH323GetIpPortFromH225TransportAddress(struct OOH323CallData *call,
|
||||
H225TransportAddress *h225Address, char *ip, int *port);
|
||||
/**
|
||||
* @}
|
||||
|
@ -184,4 +184,3 @@ int ooH323GetIpPortFromH225TransportAddress(struct OOH323CallData *call,
|
|||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
/*
|
||||
* Copyright (C) 2004-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
@ -34,9 +34,9 @@ ast_mutex_t bindPortLock;
|
|||
extern DList g_TimerList;
|
||||
|
||||
int ooH323EpInitialize
|
||||
(enum OOCallMode callMode, const char* tracefile)
|
||||
(enum OOCallMode callMode, const char* tracefile, char* errstr, int errstr_max)
|
||||
{
|
||||
|
||||
|
||||
memset(&gH323ep, 0, sizeof(ooEndPoint));
|
||||
|
||||
initContext(&(gH323ep.ctxt));
|
||||
|
@ -46,25 +46,25 @@ int ooH323EpInitialize
|
|||
{
|
||||
if(strlen(tracefile)>= MAXFILENAME)
|
||||
{
|
||||
printf("Error:File name longer than allowed maximum %d\n",
|
||||
snprintf(errstr, errstr_max, "Error:File name longer than allowed maximum %d\n",
|
||||
MAXFILENAME-1);
|
||||
return OO_FAILED;
|
||||
}
|
||||
strcpy(gH323ep.traceFile, tracefile);
|
||||
}
|
||||
else{
|
||||
strcpy(gH323ep.traceFile, DEFAULT_TRACEFILE);
|
||||
strcpy(gH323ep.traceFile, DEFAULT_TRACEFILE);
|
||||
}
|
||||
|
||||
gH323ep.fptraceFile = fopen(gH323ep.traceFile, "a");
|
||||
if(gH323ep.fptraceFile == NULL)
|
||||
{
|
||||
printf("Error:Failed to open trace file %s for write.\n",
|
||||
snprintf(errstr, errstr_max, "Error:Failed to open trace file %s for write.\n",
|
||||
gH323ep.traceFile);
|
||||
return OO_FAILED;
|
||||
}
|
||||
|
||||
/* Initialize default port ranges that will be used by stack.
|
||||
/* Initialize default port ranges that will be used by stack.
|
||||
Apps can override these by explicitely setting port ranges
|
||||
*/
|
||||
|
||||
|
@ -79,12 +79,12 @@ int ooH323EpInitialize
|
|||
gH323ep.rtpPorts.start = RTPPORTSSTART;
|
||||
gH323ep.rtpPorts.max = RTPPORTSEND;
|
||||
gH323ep.rtpPorts.current = RTPPORTSSTART;
|
||||
|
||||
|
||||
OO_SETFLAG(gH323ep.flags, OO_M_FASTSTART);
|
||||
OO_SETFLAG(gH323ep.flags, OO_M_TUNNELING);
|
||||
OO_SETFLAG(gH323ep.flags, OO_M_AUTOANSWER);
|
||||
OO_CLRFLAG(gH323ep.flags, OO_M_GKROUTED);
|
||||
|
||||
|
||||
gH323ep.aliases = NULL;
|
||||
|
||||
gH323ep.termType = DEFAULT_TERMTYPE;
|
||||
|
@ -107,7 +107,7 @@ int ooH323EpInitialize
|
|||
|
||||
ooH323EpSetCallerID(DEFAULT_CALLERID);
|
||||
|
||||
|
||||
|
||||
gH323ep.myCaps = NULL;
|
||||
gH323ep.noOfCaps = 0;
|
||||
gH323ep.callList = NULL;
|
||||
|
@ -116,7 +116,7 @@ int ooH323EpInitialize
|
|||
ast_mutex_init(&newCallLock);
|
||||
ast_mutex_init(&bindPortLock);
|
||||
gH323ep.dtmfmode = 0;
|
||||
gH323ep.callingPartyNumber[0]='\0';
|
||||
gH323ep.callingPartyNumber[0]='\0';
|
||||
gH323ep.callMode = callMode;
|
||||
gH323ep.isGateway = FALSE;
|
||||
|
||||
|
@ -164,7 +164,7 @@ int ooH323EpSetLocalAddress(const char* localip, int listenport)
|
|||
strcpy(gH323ep.signallingIP, localip);
|
||||
OOTRACEINFO2("Signalling IP address is set to %s\n", localip);
|
||||
}
|
||||
|
||||
|
||||
if(listenport)
|
||||
{
|
||||
gH323ep.listenPort = listenport;
|
||||
|
@ -332,7 +332,7 @@ int ooH323EpSetH225MsgCallbacks(OOH225MsgCallbacks h225Callbacks)
|
|||
|
||||
return OO_OK;
|
||||
}
|
||||
|
||||
|
||||
int ooH323EpSetH323Callbacks(OOH323CALLBACKS h323Callbacks)
|
||||
{
|
||||
gH323ep.h323Callbacks.onNewCallCreated = h323Callbacks.onNewCallCreated;
|
||||
|
@ -376,10 +376,10 @@ int ooH323EpDestroy(void)
|
|||
if(gH323ep.listener)
|
||||
{
|
||||
ooSocketClose(*(gH323ep.listener));
|
||||
gH323ep.listener = NULL;
|
||||
gH323ep.listener = NULL;
|
||||
}
|
||||
|
||||
ooGkClientDestroy();
|
||||
ooGkClientDestroy();
|
||||
|
||||
if(gH323ep.fptraceFile)
|
||||
{
|
||||
|
@ -461,7 +461,7 @@ int ooH323EpEnableH245Tunneling(void)
|
|||
OO_SETFLAG(gH323ep.flags, OO_M_TUNNELING);
|
||||
return OO_OK;
|
||||
}
|
||||
|
||||
|
||||
int ooH323EpDisableH245Tunneling(void)
|
||||
{
|
||||
OO_CLRFLAG(gH323ep.flags, OO_M_TUNNELING);
|
||||
|
@ -527,7 +527,7 @@ int ooH323EpSetCallingPartyNumber(const char* number)
|
|||
int ret=OO_OK;
|
||||
if(number)
|
||||
{
|
||||
strncpy(gH323ep.callingPartyNumber, number,
|
||||
strncpy(gH323ep.callingPartyNumber, number,
|
||||
sizeof(gH323ep.callingPartyNumber)-1);
|
||||
ret = ooH323EpAddAliasDialedDigits((char*)number);
|
||||
return ret;
|
||||
|
@ -544,7 +544,7 @@ int ooH323EpSetTraceLevel(int traceLevel)
|
|||
void ooH323EpPrintConfig(void)
|
||||
{
|
||||
OOTRACEINFO1("H.323 Endpoint Configuration is as follows:\n");
|
||||
|
||||
|
||||
OOTRACEINFO2("\tTrace File: %s\n", gH323ep.traceFile);
|
||||
|
||||
if(!OO_TESTFLAG(gH323ep.flags, OO_M_FASTSTART))
|
||||
|
@ -575,7 +575,7 @@ void ooH323EpPrintConfig(void)
|
|||
OOTRACEINFO1("\tAutoAnswer - enabled\n");
|
||||
else
|
||||
OOTRACEINFO1("\tAutoAnswer - disabled\n");
|
||||
|
||||
|
||||
OOTRACEINFO2("\tTerminal Type - %d\n", gH323ep.termType);
|
||||
|
||||
OOTRACEINFO2("\tT35 CountryCode - %d\n", gH323ep.t35CountryCode);
|
||||
|
@ -585,7 +585,7 @@ void ooH323EpPrintConfig(void)
|
|||
OOTRACEINFO2("\tManufacturer Code - %d\n", gH323ep.manufacturerCode);
|
||||
|
||||
OOTRACEINFO2("\tProductID - %s\n", gH323ep.productID);
|
||||
|
||||
|
||||
OOTRACEINFO2("\tVersionID - %s\n", gH323ep.versionID);
|
||||
|
||||
OOTRACEINFO2("\tLocal signalling IP address - %s\n", gH323ep.signallingIP);
|
||||
|
@ -595,8 +595,8 @@ void ooH323EpPrintConfig(void)
|
|||
OOTRACEINFO2("\tCallerID - %s\n", gH323ep.callerid);
|
||||
|
||||
|
||||
OOTRACEINFO2("\tCall Establishment Timeout - %d seconds\n",
|
||||
gH323ep.callEstablishmentTimeout);
|
||||
OOTRACEINFO2("\tCall Establishment Timeout - %d seconds\n",
|
||||
gH323ep.callEstablishmentTimeout);
|
||||
|
||||
OOTRACEINFO2("\tMasterSlaveDetermination Timeout - %d seconds\n",
|
||||
gH323ep.msdTimeout);
|
||||
|
@ -609,7 +609,7 @@ void ooH323EpPrintConfig(void)
|
|||
|
||||
OOTRACEINFO2("\tSession Timeout - %d seconds\n", gH323ep.sessionTimeout);
|
||||
|
||||
return;
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
@ -620,7 +620,7 @@ int ooH323EpAddG711Capability(int cap, int txframes, int rxframes, int dir,
|
|||
cb_StopTransmitChannel stopTransmitChannel)
|
||||
{
|
||||
return ooCapabilityAddSimpleCapability(NULL, cap, txframes, rxframes, FALSE,
|
||||
dir, startReceiveChannel, startTransmitChannel,
|
||||
dir, startReceiveChannel, startTransmitChannel,
|
||||
stopReceiveChannel, stopTransmitChannel, FALSE);
|
||||
}
|
||||
|
||||
|
@ -631,7 +631,7 @@ int ooH323EpAddG728Capability(int cap, int txframes, int rxframes, int dir,
|
|||
cb_StopTransmitChannel stopTransmitChannel)
|
||||
{
|
||||
return ooCapabilityAddSimpleCapability(NULL, cap, txframes, rxframes, FALSE,
|
||||
dir, startReceiveChannel, startTransmitChannel,
|
||||
dir, startReceiveChannel, startTransmitChannel,
|
||||
stopReceiveChannel, stopTransmitChannel, FALSE);
|
||||
}
|
||||
|
||||
|
@ -642,89 +642,89 @@ int ooH323EpAddG729Capability(int cap, int txframes, int rxframes, int dir,
|
|||
cb_StopTransmitChannel stopTransmitChannel)
|
||||
{
|
||||
return ooCapabilityAddSimpleCapability(NULL, cap, txframes, rxframes, FALSE,
|
||||
dir, startReceiveChannel, startTransmitChannel,
|
||||
dir, startReceiveChannel, startTransmitChannel,
|
||||
stopReceiveChannel, stopTransmitChannel, FALSE);
|
||||
}
|
||||
|
||||
|
||||
int ooH323EpAddG7231Capability(int cap, int txframes, int rxframes,
|
||||
int ooH323EpAddG7231Capability(int cap, int txframes, int rxframes,
|
||||
OOBOOL silenceSuppression, int dir,
|
||||
cb_StartReceiveChannel startReceiveChannel,
|
||||
cb_StartTransmitChannel startTransmitChannel,
|
||||
cb_StopReceiveChannel stopReceiveChannel,
|
||||
cb_StopTransmitChannel stopTransmitChannel)
|
||||
{
|
||||
return ooCapabilityAddSimpleCapability(NULL, cap, txframes, rxframes,
|
||||
silenceSuppression, dir, startReceiveChannel,
|
||||
startTransmitChannel, stopReceiveChannel,
|
||||
return ooCapabilityAddSimpleCapability(NULL, cap, txframes, rxframes,
|
||||
silenceSuppression, dir, startReceiveChannel,
|
||||
startTransmitChannel, stopReceiveChannel,
|
||||
stopTransmitChannel, FALSE);
|
||||
}
|
||||
|
||||
int ooH323EpAddG726Capability(int cap, int txframes, int rxframes,
|
||||
int ooH323EpAddG726Capability(int cap, int txframes, int rxframes,
|
||||
OOBOOL silenceSuppression, int dir,
|
||||
cb_StartReceiveChannel startReceiveChannel,
|
||||
cb_StartTransmitChannel startTransmitChannel,
|
||||
cb_StopReceiveChannel stopReceiveChannel,
|
||||
cb_StopTransmitChannel stopTransmitChannel)
|
||||
{
|
||||
return ooCapabilityAddSimpleCapability(NULL, cap, txframes, rxframes,
|
||||
silenceSuppression, dir, startReceiveChannel,
|
||||
startTransmitChannel, stopReceiveChannel,
|
||||
return ooCapabilityAddSimpleCapability(NULL, cap, txframes, rxframes,
|
||||
silenceSuppression, dir, startReceiveChannel,
|
||||
startTransmitChannel, stopReceiveChannel,
|
||||
stopTransmitChannel, FALSE);
|
||||
}
|
||||
int ooH323EpAddAMRNBCapability(int cap, int txframes, int rxframes,
|
||||
int ooH323EpAddAMRNBCapability(int cap, int txframes, int rxframes,
|
||||
OOBOOL silenceSuppression, int dir,
|
||||
cb_StartReceiveChannel startReceiveChannel,
|
||||
cb_StartTransmitChannel startTransmitChannel,
|
||||
cb_StopReceiveChannel stopReceiveChannel,
|
||||
cb_StopTransmitChannel stopTransmitChannel)
|
||||
{
|
||||
return ooCapabilityAddSimpleCapability(NULL, cap, txframes, rxframes,
|
||||
silenceSuppression, dir, startReceiveChannel,
|
||||
startTransmitChannel, stopReceiveChannel,
|
||||
return ooCapabilityAddSimpleCapability(NULL, cap, txframes, rxframes,
|
||||
silenceSuppression, dir, startReceiveChannel,
|
||||
startTransmitChannel, stopReceiveChannel,
|
||||
stopTransmitChannel, FALSE);
|
||||
}
|
||||
int ooH323EpAddSpeexCapability(int cap, int txframes, int rxframes,
|
||||
int ooH323EpAddSpeexCapability(int cap, int txframes, int rxframes,
|
||||
OOBOOL silenceSuppression, int dir,
|
||||
cb_StartReceiveChannel startReceiveChannel,
|
||||
cb_StartTransmitChannel startTransmitChannel,
|
||||
cb_StopReceiveChannel stopReceiveChannel,
|
||||
cb_StopTransmitChannel stopTransmitChannel)
|
||||
{
|
||||
return ooCapabilityAddSimpleCapability(NULL, cap, txframes, rxframes,
|
||||
silenceSuppression, dir, startReceiveChannel,
|
||||
startTransmitChannel, stopReceiveChannel,
|
||||
return ooCapabilityAddSimpleCapability(NULL, cap, txframes, rxframes,
|
||||
silenceSuppression, dir, startReceiveChannel,
|
||||
startTransmitChannel, stopReceiveChannel,
|
||||
stopTransmitChannel, FALSE);
|
||||
}
|
||||
|
||||
int ooH323EpAddGSMCapability(int cap, ASN1USINT framesPerPkt,
|
||||
int ooH323EpAddGSMCapability(int cap, ASN1USINT framesPerPkt,
|
||||
OOBOOL comfortNoise, OOBOOL scrambled, int dir,
|
||||
cb_StartReceiveChannel startReceiveChannel,
|
||||
cb_StartTransmitChannel startTransmitChannel,
|
||||
cb_StopReceiveChannel stopReceiveChannel,
|
||||
cb_StopTransmitChannel stopTransmitChannel)
|
||||
{
|
||||
return ooCapabilityAddGSMCapability(NULL, cap, framesPerPkt, comfortNoise,
|
||||
scrambled, dir, startReceiveChannel,
|
||||
return ooCapabilityAddGSMCapability(NULL, cap, framesPerPkt, comfortNoise,
|
||||
scrambled, dir, startReceiveChannel,
|
||||
startTransmitChannel, stopReceiveChannel,
|
||||
stopTransmitChannel, FALSE);
|
||||
}
|
||||
|
||||
|
||||
int ooH323EpAddH263VideoCapability(int cap, unsigned sqcifMPI,
|
||||
unsigned qcifMPI, unsigned cifMPI,
|
||||
unsigned cif4MPI, unsigned cif16MPI,
|
||||
unsigned maxBitRate, int dir,
|
||||
int ooH323EpAddH263VideoCapability(int cap, unsigned sqcifMPI,
|
||||
unsigned qcifMPI, unsigned cifMPI,
|
||||
unsigned cif4MPI, unsigned cif16MPI,
|
||||
unsigned maxBitRate, int dir,
|
||||
cb_StartReceiveChannel startReceiveChannel,
|
||||
cb_StartTransmitChannel startTransmitChannel,
|
||||
cb_StopReceiveChannel stopReceiveChannel,
|
||||
cb_StopTransmitChannel stopTransmitChannel)
|
||||
{
|
||||
|
||||
return ooCapabilityAddH263VideoCapability(NULL, sqcifMPI, qcifMPI, cifMPI,
|
||||
return ooCapabilityAddH263VideoCapability(NULL, sqcifMPI, qcifMPI, cifMPI,
|
||||
cif4MPI, cif16MPI, maxBitRate,dir,
|
||||
startReceiveChannel, startTransmitChannel,
|
||||
stopReceiveChannel, stopTransmitChannel,
|
||||
stopReceiveChannel, stopTransmitChannel,
|
||||
FALSE);
|
||||
|
||||
}
|
||||
|
@ -805,7 +805,7 @@ int ooH323EpSetTCPPortRange(int base, int max)
|
|||
gH323ep.tcpPorts.start = base;
|
||||
if(max > 65500)
|
||||
gH323ep.tcpPorts.max = 65500;
|
||||
else
|
||||
else
|
||||
gH323ep.tcpPorts.max = max;
|
||||
|
||||
if(gH323ep.tcpPorts.max<gH323ep.tcpPorts.start)
|
||||
|
@ -815,7 +815,7 @@ int ooH323EpSetTCPPortRange(int base, int max)
|
|||
return OO_FAILED;
|
||||
}
|
||||
gH323ep.tcpPorts.current = gH323ep.tcpPorts.start;
|
||||
|
||||
|
||||
OOTRACEINFO1("TCP port range initialize - successful\n");
|
||||
return OO_OK;
|
||||
}
|
||||
|
@ -828,18 +828,18 @@ int ooH323EpSetUDPPortRange(int base, int max)
|
|||
gH323ep.udpPorts.start = base;
|
||||
if(max > 65500)
|
||||
gH323ep.udpPorts.max = 65500;
|
||||
else
|
||||
else
|
||||
gH323ep.udpPorts.max = max;
|
||||
|
||||
|
||||
if(gH323ep.udpPorts.max<gH323ep.udpPorts.start)
|
||||
{
|
||||
OOTRACEERR1("Error: Failed to set udp ports- Max port number"
|
||||
" less than Start port number\n");
|
||||
return OO_FAILED;
|
||||
}
|
||||
|
||||
|
||||
gH323ep.udpPorts.current = gH323ep.udpPorts.start;
|
||||
|
||||
|
||||
OOTRACEINFO1("UDP port range initialize - successful\n");
|
||||
|
||||
return OO_OK;
|
||||
|
@ -853,18 +853,17 @@ int ooH323EpSetRTPPortRange(int base, int max)
|
|||
gH323ep.rtpPorts.start = base;
|
||||
if(max > 65500)
|
||||
gH323ep.rtpPorts.max = 65500;
|
||||
else
|
||||
else
|
||||
gH323ep.rtpPorts.max = max;
|
||||
|
||||
|
||||
if(gH323ep.rtpPorts.max<gH323ep.rtpPorts.start)
|
||||
{
|
||||
OOTRACEERR1("Error: Failed to set rtp ports- Max port number"
|
||||
" less than Start port number\n");
|
||||
return OO_FAILED;
|
||||
}
|
||||
|
||||
|
||||
gH323ep.rtpPorts.current = gH323ep.rtpPorts.start;
|
||||
OOTRACEINFO1("RTP port range initialize - successful\n");
|
||||
return OO_OK;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,21 +1,21 @@
|
|||
/*
|
||||
* Copyright (C) 2004-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
/**
|
||||
* @file ooh323ep.h
|
||||
* This file contains H323 endpoint related functions.
|
||||
* @file ooh323ep.h
|
||||
* This file contains H323 endpoint related functions.
|
||||
*/
|
||||
#ifndef OO_H323EP_H_
|
||||
#define OO_H323EP_H_
|
||||
|
@ -53,7 +53,7 @@ extern "C" {
|
|||
#endif /* EXTERN */
|
||||
|
||||
struct OOCapPrefs;
|
||||
/**
|
||||
/**
|
||||
* @defgroup h323ep H323 Endpoint management functions
|
||||
* @{
|
||||
*/
|
||||
|
@ -67,7 +67,7 @@ struct OOCapPrefs;
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* This structure is used to define the port ranges to be used
|
||||
* by the application.
|
||||
|
@ -78,19 +78,19 @@ typedef struct OOH323Ports {
|
|||
int current; /*!< Current port number. */
|
||||
} OOH323Ports;
|
||||
|
||||
/**
|
||||
/**
|
||||
* Structure to store all configuration information related to the
|
||||
* endpoint created by an application
|
||||
* endpoint created by an application
|
||||
*/
|
||||
typedef struct OOH323EndPoint {
|
||||
|
||||
/**
|
||||
|
||||
/**
|
||||
* This context should be used for allocation of memory for
|
||||
* items within the endpoint structure.
|
||||
*/
|
||||
OOCTXT ctxt;
|
||||
|
||||
/**
|
||||
/**
|
||||
* This context should be used for allocation of memory for
|
||||
* message structures.
|
||||
*/
|
||||
|
@ -107,11 +107,11 @@ typedef struct OOH323EndPoint {
|
|||
|
||||
/** Range of port numbers to be used for RTP connections */
|
||||
OOH323Ports rtpPorts;
|
||||
|
||||
|
||||
ASN1UINT flags;
|
||||
|
||||
int termType; /* 50 - Terminal entity with No MC,
|
||||
60 - Gateway entity with no MC,
|
||||
int termType; /* 50 - Terminal entity with No MC,
|
||||
60 - Gateway entity with no MC,
|
||||
70 - Terminal Entity with MC, but no MP etc.*/
|
||||
int t35CountryCode;
|
||||
int t35Extension;
|
||||
|
@ -163,17 +163,17 @@ typedef struct OOH323EndPoint {
|
|||
* @return OO_OK, on success. OO_FAILED, on failure
|
||||
*/
|
||||
EXTERN int ooH323EpInitialize
|
||||
(enum OOCallMode callMode, const char* tracefile);
|
||||
(enum OOCallMode callMode, const char* tracefile, char* errstr, int errstr_max);
|
||||
|
||||
/**
|
||||
* This function is used to represent the H.323 application endpoint as
|
||||
* This function is used to represent the H.323 application endpoint as
|
||||
* gateway, instead of an H.323 phone endpoint.
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
*/
|
||||
EXTERN int ooH323EpSetAsGateway(void);
|
||||
|
||||
EXTERN void ooH323EpSetVersionInfo(int t35countrycode, int t35extensions, int manufacturer,
|
||||
EXTERN void ooH323EpSetVersionInfo(int t35countrycode, int t35extensions, int manufacturer,
|
||||
char* vendor, char* version);
|
||||
|
||||
/**
|
||||
|
@ -183,7 +183,7 @@ EXTERN void ooH323EpSetVersionInfo(int t35countrycode, int t35extensions, int ma
|
|||
* @param listenport Port to be used for listening for incoming calls.
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
*/
|
||||
*/
|
||||
EXTERN int ooH323EpSetLocalAddress(const char* localip, int listenport);
|
||||
|
||||
/**
|
||||
|
@ -192,7 +192,7 @@ EXTERN int ooH323EpSetLocalAddress(const char* localip, int listenport);
|
|||
* @param base Starting port number for the range
|
||||
* @param max Ending port number for the range.
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
*/
|
||||
EXTERN int ooH323EpSetTCPPortRange(int base, int max);
|
||||
|
||||
|
@ -202,7 +202,7 @@ EXTERN int ooH323EpSetTCPPortRange(int base, int max);
|
|||
* @param base Starting port number for the range
|
||||
* @param max Ending port number for the range.
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
*/
|
||||
EXTERN int ooH323EpSetUDPPortRange(int base, int max);
|
||||
|
||||
|
@ -212,7 +212,7 @@ EXTERN int ooH323EpSetUDPPortRange(int base, int max);
|
|||
* @param base Starting port number for the range
|
||||
* @param max Ending port number for the range.
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
*/
|
||||
EXTERN int ooH323EpSetRTPPortRange(int base, int max);
|
||||
|
||||
|
@ -252,7 +252,7 @@ EXTERN int ooH323EpAddAliasURLID(const char* url);
|
|||
/**
|
||||
* This function is used to add an email id as an alias for the endpoint.
|
||||
* @param email Email id to be set as an alias.
|
||||
*
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
*/
|
||||
EXTERN int ooH323EpAddAliasEmailID(const char* email);
|
||||
|
@ -266,7 +266,7 @@ EXTERN int ooH323EpAddAliasEmailID(const char* email);
|
|||
EXTERN int ooH323EpAddAliasTransportID(const char* ipaddress);
|
||||
|
||||
/**
|
||||
* This function is used to clear all the aliases used by the
|
||||
* This function is used to clear all the aliases used by the
|
||||
* H323 endpoint.
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
|
@ -284,9 +284,9 @@ EXTERN int ooH323EpSetH225MsgCallbacks(OOH225MsgCallbacks h225Callbacks);
|
|||
|
||||
/**
|
||||
* This function is used to set high level H.323 callbacks for the endpoint.
|
||||
* Make sure all unused callbacks in the structure are set to NULL before
|
||||
* Make sure all unused callbacks in the structure are set to NULL before
|
||||
* calling this function.
|
||||
* @param h323Callbacks Callback structure containing various high level
|
||||
* @param h323Callbacks Callback structure containing various high level
|
||||
* callbacks.
|
||||
* @return OO_OK, on success. OO_FAILED, on failure
|
||||
*/
|
||||
|
@ -294,8 +294,8 @@ EXTERN int ooH323EpSetH323Callbacks(OOH323CALLBACKS h323Callbacks);
|
|||
|
||||
|
||||
/**
|
||||
* This function is the last function to be invoked after done using the
|
||||
* stack. It closes the H323 Endpoint for an application, releasing all
|
||||
* This function is the last function to be invoked after done using the
|
||||
* stack. It closes the H323 Endpoint for an application, releasing all
|
||||
* the associated memory.
|
||||
*
|
||||
* @return OO_OK on success
|
||||
|
@ -321,8 +321,8 @@ EXTERN int ooH323EpEnableAutoAnswer(void);
|
|||
EXTERN int ooH323EpDisableAutoAnswer(void);
|
||||
|
||||
/**
|
||||
* This function is used to enable manual ringback. By default the stack sends
|
||||
* alerting message automatically on behalf of the endpoint application.
|
||||
* This function is used to enable manual ringback. By default the stack sends
|
||||
* alerting message automatically on behalf of the endpoint application.
|
||||
* However, if endpoint application wants to do alerting user part first before
|
||||
* sending out alerting message, it can enable this feature.
|
||||
*
|
||||
|
@ -331,7 +331,7 @@ EXTERN int ooH323EpDisableAutoAnswer(void);
|
|||
EXTERN int ooH323EpEnableManualRingback(void);
|
||||
|
||||
/**
|
||||
* This function is used to disable manual ringback. By default the
|
||||
* This function is used to disable manual ringback. By default the
|
||||
* manual ringback feature is disabled, i.e, the stack sends alerting on behalf
|
||||
* of the application automatically.
|
||||
*
|
||||
|
@ -407,7 +407,7 @@ EXTERN int ooH323EpDisableGkRouted(void);
|
|||
* @param productID New value for the product id.
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
*/
|
||||
*/
|
||||
EXTERN int ooH323EpSetProductID (const char * productID);
|
||||
|
||||
/**
|
||||
|
@ -429,7 +429,7 @@ EXTERN int ooH323EpSetCallerID (const char * callerID);
|
|||
|
||||
/**
|
||||
* This function is used to set calling party number to be used for outbound
|
||||
* calls.Note, you can override it for a specific call by using
|
||||
* calls.Note, you can override it for a specific call by using
|
||||
* ooCallSetCallingPartyNumber function.
|
||||
* @param number e164 number to be used as calling party number.
|
||||
*
|
||||
|
@ -438,7 +438,7 @@ EXTERN int ooH323EpSetCallerID (const char * callerID);
|
|||
EXTERN int ooH323EpSetCallingPartyNumber(const char * number);
|
||||
|
||||
/**
|
||||
* This function is used to print the current configuration information of
|
||||
* This function is used to print the current configuration information of
|
||||
* the H323 endpoint to log file.
|
||||
*/
|
||||
void ooH323EpPrintConfig(void);
|
||||
|
@ -447,7 +447,7 @@ void ooH323EpPrintConfig(void);
|
|||
/**
|
||||
* This function is used to add G728 capability to the H323 endpoint.
|
||||
* @param cap Type of G728 capability to be added.
|
||||
* @param txframes Number of frames per packet for transmission.
|
||||
* @param txframes Number of frames per packet for transmission.
|
||||
* @param rxframes Number of frames per packet for reception.
|
||||
* @param dir Direction of capability.OORX, OOTX, OORXANDTX
|
||||
* @param startReceiveChannel Callback function to start receive channel.
|
||||
|
@ -455,10 +455,10 @@ void ooH323EpPrintConfig(void);
|
|||
* @param stopReceiveChannel Callback function to stop receive channel.
|
||||
* @param stopTransmitChannel Callback function to stop transmit channel.
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
*/
|
||||
EXTERN int ooH323EpAddG728Capability
|
||||
(int cap, int txframes, int rxframes, int dir,
|
||||
(int cap, int txframes, int rxframes, int dir,
|
||||
cb_StartReceiveChannel startReceiveChannel,
|
||||
cb_StartTransmitChannel startTransmitChannel,
|
||||
cb_StopReceiveChannel stopReceiveChannel,
|
||||
|
@ -467,7 +467,7 @@ EXTERN int ooH323EpAddG728Capability
|
|||
/**
|
||||
* This function is used to add G729 capability to the H323 endpoint.
|
||||
* @param cap Type of G729 capability to be added.
|
||||
* @param txframes Number of frames per packet for transmission.
|
||||
* @param txframes Number of frames per packet for transmission.
|
||||
* @param rxframes Number of frames per packet for reception.
|
||||
* @param dir Direction of capability.OORX, OOTX, OORXANDTX
|
||||
* @param startReceiveChannel Callback function to start receive channel.
|
||||
|
@ -475,10 +475,10 @@ EXTERN int ooH323EpAddG728Capability
|
|||
* @param stopReceiveChannel Callback function to stop receive channel.
|
||||
* @param stopTransmitChannel Callback function to stop transmit channel.
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
*/
|
||||
EXTERN int ooH323EpAddG729Capability
|
||||
(int cap, int txframes, int rxframes, int dir,
|
||||
(int cap, int txframes, int rxframes, int dir,
|
||||
cb_StartReceiveChannel startReceiveChannel,
|
||||
cb_StartTransmitChannel startTransmitChannel,
|
||||
cb_StopReceiveChannel stopReceiveChannel,
|
||||
|
@ -488,7 +488,7 @@ EXTERN int ooH323EpAddG729Capability
|
|||
/**
|
||||
* This function is used to add G7231 capability to the H323 endpoint.
|
||||
* @param cap Type of G7231 capability to be added.
|
||||
* @param txframes Number of frames per packet for transmission.
|
||||
* @param txframes Number of frames per packet for transmission.
|
||||
* @param rxframes Number of frames per packet for reception.
|
||||
* @param silenceSuppression Silence Suppression support
|
||||
* @param dir Direction of capability.OORX, OOTX, OORXANDTX
|
||||
|
@ -497,9 +497,9 @@ EXTERN int ooH323EpAddG729Capability
|
|||
* @param stopReceiveChannel Callback function to stop receive channel.
|
||||
* @param stopTransmitChannel Callback function to stop transmit channel.
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
*/
|
||||
EXTERN int ooH323EpAddG7231Capability(int cap, int txframes, int rxframes,
|
||||
EXTERN int ooH323EpAddG7231Capability(int cap, int txframes, int rxframes,
|
||||
OOBOOL silenceSuppression, int dir,
|
||||
cb_StartReceiveChannel startReceiveChannel,
|
||||
cb_StartTransmitChannel startTransmitChannel,
|
||||
|
@ -509,7 +509,7 @@ EXTERN int ooH323EpAddG7231Capability(int cap, int txframes, int rxframes,
|
|||
/**
|
||||
* This function is used to add G711 capability to the H323 endpoint.
|
||||
* @param cap Type of G711 capability to be added.
|
||||
* @param txframes Number of frames per packet for transmission.
|
||||
* @param txframes Number of frames per packet for transmission.
|
||||
* @param rxframes Number of frames per packet for reception.
|
||||
* @param dir Direction of capability.OORX, OOTX, OORXANDTX
|
||||
* @param startReceiveChannel Callback function to start receive channel.
|
||||
|
@ -517,10 +517,10 @@ EXTERN int ooH323EpAddG7231Capability(int cap, int txframes, int rxframes,
|
|||
* @param stopReceiveChannel Callback function to stop receive channel.
|
||||
* @param stopTransmitChannel Callback function to stop transmit channel.
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
*/
|
||||
EXTERN int ooH323EpAddG711Capability
|
||||
(int cap, int txframes, int rxframes, int dir,
|
||||
(int cap, int txframes, int rxframes, int dir,
|
||||
cb_StartReceiveChannel startReceiveChannel,
|
||||
cb_StartTransmitChannel startTransmitChannel,
|
||||
cb_StopReceiveChannel stopReceiveChannel,
|
||||
|
@ -530,8 +530,8 @@ EXTERN int ooH323EpAddG711Capability
|
|||
/**
|
||||
* This function is used to add a new GSM capability to the endpoint.
|
||||
* @param cap Type of GSM capability to be added.
|
||||
* @param framesPerPkt Number of GSM frames pre packet.
|
||||
* @param comfortNoise Comfort noise spec for the capability.
|
||||
* @param framesPerPkt Number of GSM frames pre packet.
|
||||
* @param comfortNoise Comfort noise spec for the capability.
|
||||
* @param scrambled Scrambled enabled/disabled for the capability.
|
||||
* @param dir Direction of capability.OORX, OOTX, OORXANDTX
|
||||
* @param startReceiveChannel Callback function to start receive channel.
|
||||
|
@ -539,10 +539,10 @@ EXTERN int ooH323EpAddG711Capability
|
|||
* @param stopReceiveChannel Callback function to stop receive channel.
|
||||
* @param stopTransmitChannel Callback function to stop transmit channel.
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
*/
|
||||
EXTERN int ooH323EpAddGSMCapability(int cap, ASN1USINT framesPerPkt,
|
||||
OOBOOL comfortNoise,OOBOOL scrambled,int dir,
|
||||
EXTERN int ooH323EpAddGSMCapability(int cap, ASN1USINT framesPerPkt,
|
||||
OOBOOL comfortNoise,OOBOOL scrambled,int dir,
|
||||
cb_StartReceiveChannel startReceiveChannel,
|
||||
cb_StartTransmitChannel startTransmitChannel,
|
||||
cb_StopReceiveChannel stopReceiveChannel,
|
||||
|
@ -550,18 +550,18 @@ EXTERN int ooH323EpAddGSMCapability(int cap, ASN1USINT framesPerPkt,
|
|||
/**
|
||||
* This function is used to add H263 video capability to the H323 endpoint.
|
||||
* @param cap Capability type - OO_H263VIDEO
|
||||
* @param sqcifMPI Minimum picture interval for encoding/decoding
|
||||
* @param sqcifMPI Minimum picture interval for encoding/decoding
|
||||
* of SQCIF pictures.
|
||||
* @param qcifMPI Minimum picture interval for encoding/decoding
|
||||
* @param qcifMPI Minimum picture interval for encoding/decoding
|
||||
* of QCIF pictures.
|
||||
* @param cifMPI Minimum picture interval for encoding/decoding
|
||||
* @param cifMPI Minimum picture interval for encoding/decoding
|
||||
* of CIF pictures.
|
||||
* @param cif4MPI Minimum picture interval for encoding/decoding
|
||||
* @param cif4MPI Minimum picture interval for encoding/decoding
|
||||
* of CIF4 pictures.
|
||||
* @param cif16MPI Minimum picture interval for encoding/decoding
|
||||
* @param cif16MPI Minimum picture interval for encoding/decoding
|
||||
* of CIF16 pictures.
|
||||
* @param maxBitRate Maximum bit rate in units of 100 bits/s at
|
||||
* which a transmitter can transmit video or a
|
||||
* which a transmitter can transmit video or a
|
||||
* receiver can receive video.
|
||||
* @param dir Direction of capability.OORX, OOTX, OORXANDTX
|
||||
* @param startReceiveChannel Callback function to start receive channel.
|
||||
|
@ -569,12 +569,12 @@ EXTERN int ooH323EpAddGSMCapability(int cap, ASN1USINT framesPerPkt,
|
|||
* @param stopReceiveChannel Callback function to stop receive channel.
|
||||
* @param stopTransmitChannel Callback function to stop transmit channel.
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
*/
|
||||
EXTERN int ooH323EpAddH263VideoCapability(int cap, unsigned sqcifMPI,
|
||||
unsigned qcifMPI, unsigned cifMPI,
|
||||
unsigned cif4MPI, unsigned cif16MPI,
|
||||
unsigned maxBitRate, int dir,
|
||||
EXTERN int ooH323EpAddH263VideoCapability(int cap, unsigned sqcifMPI,
|
||||
unsigned qcifMPI, unsigned cifMPI,
|
||||
unsigned cif4MPI, unsigned cif16MPI,
|
||||
unsigned maxBitRate, int dir,
|
||||
cb_StartReceiveChannel startReceiveChannel,
|
||||
cb_StartTransmitChannel startTransmitChannel,
|
||||
cb_StopReceiveChannel stopReceiveChannel,
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
/*
|
||||
* Copyright (C) 1997-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
/*
|
||||
* Copyright (C) 1997-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
@ -19,4 +19,3 @@
|
|||
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
/*
|
||||
* Copyright (C) 2004-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
@ -90,7 +90,7 @@ int ooBindPort (OOH323PortType type, OOSOCKET socket, char *ip)
|
|||
}
|
||||
}
|
||||
|
||||
#ifdef _WIN32
|
||||
#ifdef _WIN32
|
||||
int ooBindOSAllocatedPort(OOSOCKET socket, char *ip)
|
||||
{
|
||||
OOIPADDR ipAddrs;
|
||||
|
@ -98,14 +98,14 @@ int ooBindOSAllocatedPort(OOSOCKET socket, char *ip)
|
|||
struct sockaddr_in name;
|
||||
size = sizeof(struct sockaddr_in);
|
||||
ret= ooSocketStrToAddr (ip, &ipAddrs);
|
||||
if((ret=ooSocketBind(socket, ipAddrs,
|
||||
if((ret=ooSocketBind(socket, ipAddrs,
|
||||
0))==ASN_OK)
|
||||
{
|
||||
ret = ooSocketGetSockName(socket, &name, &size);
|
||||
if(ret == ASN_OK)
|
||||
{
|
||||
return name.sin_port;
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,22 +1,22 @@
|
|||
/*
|
||||
* Copyright (C) 2004-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
/**
|
||||
* @file ooports.h
|
||||
* This file contains functions to manage ports used by the stack.
|
||||
* @file ooports.h
|
||||
* This file contains functions to manage ports used by the stack.
|
||||
*/
|
||||
|
||||
#ifndef _OOPORTS_H_
|
||||
|
@ -43,7 +43,7 @@ extern "C" {
|
|||
|
||||
/**
|
||||
* Get the next port of type TCP/UDP/RTP from the corresponding range.
|
||||
* When max value for the range is reached, it starts again from the
|
||||
* When max value for the range is reached, it starts again from the
|
||||
* first port number of the range.
|
||||
*
|
||||
* @param ep Reference to the H323 Endpoint structure.
|
||||
|
@ -69,7 +69,7 @@ EXTERN int ooGetNextPort (OOH323PortType type);
|
|||
EXTERN int ooBindPort (OOH323PortType type, OOSOCKET socket, char *ip);
|
||||
|
||||
/**
|
||||
* This function is supported for windows version only.
|
||||
* This function is supported for windows version only.
|
||||
* Windows sockets have problem in reusing the addresses even after
|
||||
* setting SO_REUSEADDR, hence in windows we just allow os to bind
|
||||
* to any random port.
|
||||
|
@ -80,7 +80,7 @@ EXTERN int ooBindPort (OOH323PortType type, OOSOCKET socket, char *ip);
|
|||
* socket is bound and in case of failure just returns
|
||||
* a negative value.
|
||||
*/
|
||||
#ifdef _WIN32
|
||||
#ifdef _WIN32
|
||||
EXTERN int ooBindOSAllocatedPort(OOSOCKET socket, char *ip);
|
||||
#endif
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,21 +1,21 @@
|
|||
/*
|
||||
* Copyright (C) 2004-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
/**
|
||||
* @file ooq931.h
|
||||
* This file contains functions to support call signalling.
|
||||
* @file ooq931.h
|
||||
* This file contains functions to support call signalling.
|
||||
*/
|
||||
|
||||
#ifndef _OOQ931HDR_H_
|
||||
|
@ -37,7 +37,7 @@ extern "C" {
|
|||
#endif /* MAKE_DLL */
|
||||
#endif /* EXTERN */
|
||||
|
||||
/**
|
||||
/**
|
||||
* @defgroup q931 Q.931/H.2250 Message Handling
|
||||
* @{
|
||||
*/
|
||||
|
@ -48,11 +48,11 @@ extern "C" {
|
|||
#define OO_MAX_CALL_TOKEN 999999
|
||||
|
||||
/* Q.931 packet must be at least 5 bytes long */
|
||||
#define Q931_E_TOOSHORT (-1001)
|
||||
#define Q931_E_TOOSHORT (-1001)
|
||||
/* callReference field must be 2 bytes long */
|
||||
#define Q931_E_INVCALLREF (-1002)
|
||||
#define Q931_E_INVCALLREF (-1002)
|
||||
/* invalid length of message */
|
||||
#define Q931_E_INVLENGTH (-1003)
|
||||
#define Q931_E_INVLENGTH (-1003)
|
||||
|
||||
enum Q931MsgTypes {
|
||||
Q931NationalEscapeMsg = 0x00,
|
||||
|
@ -217,8 +217,8 @@ enum Q931UserInfoLayer1Protocol{
|
|||
|
||||
/*
|
||||
Structure to build store outgoing encoded UUIE
|
||||
The different fields in the structure have octet lengths
|
||||
as specified in the spec.
|
||||
The different fields in the structure have octet lengths
|
||||
as specified in the spec.
|
||||
*/
|
||||
typedef struct Q931InformationElement {
|
||||
int discriminator;
|
||||
|
@ -228,8 +228,8 @@ typedef struct Q931InformationElement {
|
|||
} Q931InformationElement;
|
||||
|
||||
/**
|
||||
* Q.931 message structure. Contains context for memory allocation,
|
||||
* protocol discriminator, call reference, meesage type and list of
|
||||
* Q.931 message structure. Contains context for memory allocation,
|
||||
* protocol discriminator, call reference, meesage type and list of
|
||||
* user-user information elements (IEs).
|
||||
*/
|
||||
typedef struct Q931Message {
|
||||
|
@ -240,7 +240,7 @@ typedef struct Q931Message {
|
|||
ASN1UINT tunneledMsgType; /* The H245 message this message is tunneling*/
|
||||
ASN1INT logicalChannelNo; /* channel number associated with tunneled */
|
||||
/* message, 0 if no channel */
|
||||
DList ies;
|
||||
DList ies;
|
||||
Q931InformationElement *bearerCapabilityIE;
|
||||
Q931InformationElement *callingPartyNumberIE;
|
||||
Q931InformationElement *calledPartyNumberIE;
|
||||
|
@ -266,13 +266,13 @@ struct OOH323CallData;
|
|||
|
||||
/*
|
||||
* These are message callbacks which can be used by user applications
|
||||
* to perform application specific things on receiving a particular
|
||||
* to perform application specific things on receiving a particular
|
||||
* message or before sending a particular message. For ex. user application
|
||||
* can change values of some parameters of setup message before it is actually
|
||||
* sent out.
|
||||
*/
|
||||
/**
|
||||
* This callback is triggered when an H.225 SETUP message is received by
|
||||
* This callback is triggered when an H.225 SETUP message is received by
|
||||
* the application.
|
||||
* @param call The call the message is associated with.
|
||||
* @param pmsg Q.931 message structure.
|
||||
|
@ -282,7 +282,7 @@ typedef int (*cb_OnReceivedSetup)
|
|||
(struct OOH323CallData *call, struct Q931Message *pmsg);
|
||||
|
||||
/**
|
||||
* This callback is triggered when an H.225 CONNECT message is received by
|
||||
* This callback is triggered when an H.225 CONNECT message is received by
|
||||
* the application.
|
||||
* @param call The call the message is associated with.
|
||||
* @param pmsg Q.931 message structure.
|
||||
|
@ -292,8 +292,8 @@ typedef int (*cb_OnReceivedConnect)
|
|||
(struct OOH323CallData *call, struct Q931Message *pmsg);
|
||||
|
||||
/**
|
||||
* This callback is triggered after an H.225 SETUP message has been
|
||||
* constructed and is ready to be sent out. It provides the application
|
||||
* This callback is triggered after an H.225 SETUP message has been
|
||||
* constructed and is ready to be sent out. It provides the application
|
||||
* with an opportunity to add additional non-standard information.
|
||||
* @param call The call the message is associated with.
|
||||
* @param pmsg Q.931 message structure.
|
||||
|
@ -303,8 +303,8 @@ typedef int (*cb_OnBuiltSetup)
|
|||
(struct OOH323CallData *call, struct Q931Message *pmsg);
|
||||
|
||||
/**
|
||||
* This callback is triggered after an H.225 CONNECT message has been
|
||||
* constructed and is ready to be sent out. It provides the application
|
||||
* This callback is triggered after an H.225 CONNECT message has been
|
||||
* constructed and is ready to be sent out. It provides the application
|
||||
* with an opportunity to add additional non-standard information.
|
||||
* @param call The call the message is associated with.
|
||||
* @param pmsg Q.931 message structure.
|
||||
|
@ -314,7 +314,7 @@ typedef int (*cb_OnBuiltConnect)
|
|||
(struct OOH323CallData *call, struct Q931Message *pmsg);
|
||||
|
||||
/**
|
||||
* This structure holds the various callback functions that are
|
||||
* This structure holds the various callback functions that are
|
||||
* triggered when H.225 messages are received or constructed.
|
||||
* @see ooH323EpSetH225MsgCallbacks
|
||||
*/
|
||||
|
@ -326,8 +326,8 @@ typedef struct OOH225MsgCallbacks {
|
|||
} OOH225MsgCallbacks;
|
||||
|
||||
/**
|
||||
* This function is invoked to decode a Q931 message.
|
||||
*
|
||||
* This function is invoked to decode a Q931 message.
|
||||
*
|
||||
* @param call Handle to call which owns the message.
|
||||
* @param msg Pointer to the Q931 message
|
||||
* @param length Length of the encoded data
|
||||
|
@ -335,18 +335,18 @@ typedef struct OOH225MsgCallbacks {
|
|||
*
|
||||
* @return Completion status - 0 on success, -1 on failure
|
||||
*/
|
||||
EXTERN int ooQ931Decode
|
||||
EXTERN int ooQ931Decode
|
||||
(struct OOH323CallData *call, Q931Message* msg, int length, ASN1OCTET *data, int docallbacks);
|
||||
|
||||
/**
|
||||
* This function is used to decode the UUIE of the message from the list of
|
||||
* ies. It decodes the User-User ie and populates the userInfo field of the
|
||||
* message.
|
||||
* @param q931Msg Pointer to the message whose User-User ie has to be
|
||||
* decoded.
|
||||
* @param q931Msg Pointer to the message whose User-User ie has to be
|
||||
* decoded.
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
*/
|
||||
*/
|
||||
EXTERN int ooDecodeUUIE(OOCTXT* pctxt, Q931Message *q931Msg);
|
||||
|
||||
/**
|
||||
|
@ -360,20 +360,20 @@ EXTERN int ooDecodeUUIE(OOCTXT* pctxt, Q931Message *q931Msg);
|
|||
EXTERN int ooEncodeUUIE(OOCTXT* pctxt, Q931Message *q931msg);
|
||||
|
||||
/**
|
||||
* This function is invoked to retrieve an IE element from a Q931 message.
|
||||
*
|
||||
* This function is invoked to retrieve an IE element from a Q931 message.
|
||||
*
|
||||
* @param q931msg Pointer to the Q931 message
|
||||
* @param ieCode IE code for the IE element to be retrieved
|
||||
*
|
||||
* @return Pointer to a Q931InformationElement contating
|
||||
* @return Pointer to a Q931InformationElement contating
|
||||
* the IE element.
|
||||
*/
|
||||
EXTERN Q931InformationElement* ooQ931GetIE (const Q931Message* q931msg,
|
||||
EXTERN Q931InformationElement* ooQ931GetIE (const Q931Message* q931msg,
|
||||
int ieCode);
|
||||
|
||||
/**
|
||||
* This function is invoked to print a Q931 message.
|
||||
*
|
||||
* This function is invoked to print a Q931 message.
|
||||
*
|
||||
* @param q931msg Pointer to the Q931 message
|
||||
*
|
||||
* @return - none
|
||||
|
@ -382,8 +382,8 @@ EXTERN void ooQ931Print (const Q931Message* q931msg);
|
|||
|
||||
|
||||
/**
|
||||
* This function is invoked to create an outgoing Q931 message.
|
||||
*
|
||||
* This function is invoked to create an outgoing Q931 message.
|
||||
*
|
||||
* @param msg Reference to the pointer of type Q931 message.
|
||||
* @param msgType Type of Q931 message to be created
|
||||
*
|
||||
|
@ -392,7 +392,7 @@ EXTERN void ooQ931Print (const Q931Message* q931msg);
|
|||
EXTERN int ooCreateQ931Message(OOCTXT* pctxt, Q931Message **msg, int msgType);
|
||||
|
||||
/**
|
||||
* This function is invoked to generate a unique call reference number.
|
||||
* This function is invoked to generate a unique call reference number.
|
||||
*
|
||||
* @return - call reference number
|
||||
*/
|
||||
|
@ -409,8 +409,8 @@ EXTERN ASN1USINT ooGenerateCallReference(void);
|
|||
EXTERN int ooGenerateCallIdentifier(H225CallIdentifier *callid);
|
||||
|
||||
/**
|
||||
* This function is invoked to release the memory used up by a Q931 message
|
||||
*
|
||||
* This function is invoked to release the memory used up by a Q931 message
|
||||
*
|
||||
* @param q931Msg Pointer to a Q931 message which has to be freed.
|
||||
*
|
||||
* @return Completion status - 0 on success, -1 on failure
|
||||
|
@ -418,10 +418,10 @@ EXTERN int ooGenerateCallIdentifier(H225CallIdentifier *callid);
|
|||
EXTERN int ooFreeQ931Message(OOCTXT* pctxt, Q931Message *q931Msg);
|
||||
|
||||
/**
|
||||
* This function is invoked to retrive the outgoing message buffer for
|
||||
* This function is invoked to retrive the outgoing message buffer for
|
||||
* Q931 message
|
||||
*
|
||||
* @param call Pointer to call for which outgoing Q931 message has to be
|
||||
* @param call Pointer to call for which outgoing Q931 message has to be
|
||||
* retrieved.
|
||||
* @param msgbuf Pointer to a buffer in which retrieved message will
|
||||
* be returned.
|
||||
|
@ -436,11 +436,11 @@ EXTERN int ooGetOutgoingQ931Msgbuf
|
|||
(struct OOH323CallData *call, ASN1OCTET * msgbuf, int* len, int *msgType);
|
||||
|
||||
/**
|
||||
* This function is invoked to send a ReleaseComplete message for
|
||||
* This function is invoked to send a ReleaseComplete message for
|
||||
* the currently active call.
|
||||
*
|
||||
* @param call Pointer to the call for which ReleaseComplete message have
|
||||
* to be sent.
|
||||
* @param call Pointer to the call for which ReleaseComplete message have
|
||||
* to be sent.
|
||||
*
|
||||
* @return Completion status - 0 on success, -1 on failure
|
||||
*/
|
||||
|
@ -451,18 +451,18 @@ EXTERN int ooSendReleaseComplete(struct OOH323CallData *call);
|
|||
* received setup message.
|
||||
*
|
||||
* @param call Pointer to the call for which CallProceeding message have to
|
||||
* be sent.
|
||||
* be sent.
|
||||
*
|
||||
* @return Completion status - 0 on success, -1 on failure
|
||||
*/
|
||||
EXTERN int ooSendCallProceeding(struct OOH323CallData *call);
|
||||
|
||||
/**
|
||||
* This function is invoked to send alerting message in response to received
|
||||
* setup message.
|
||||
* This function is invoked to send alerting message in response to received
|
||||
* setup message.
|
||||
*
|
||||
* @param call Pointer to the call for which Alerting message have to be
|
||||
* sent.
|
||||
* @param call Pointer to the call for which Alerting message have to be
|
||||
* sent.
|
||||
*
|
||||
* @return Completion status - 0 on success, -1 on failure
|
||||
*/
|
||||
|
@ -477,8 +477,8 @@ EXTERN int ooSendStatusInquiry(struct OOH323CallData *call);
|
|||
/**
|
||||
* This function is invoked to send Facility message.
|
||||
*
|
||||
* @param call Pointer to the call for which Facility message have to be
|
||||
* sent.
|
||||
* @param call Pointer to the call for which Facility message have to be
|
||||
* sent.
|
||||
*
|
||||
* @return Completion status - 0 on success, -1 on failure
|
||||
*/
|
||||
|
@ -497,11 +497,11 @@ EXTERN int ooQ931SendDTMFAsKeyPadIE
|
|||
(struct OOH323CallData *call, const char* data);
|
||||
|
||||
/**
|
||||
* This function is invoked to send a Connect message in response to received
|
||||
* setup message.
|
||||
* This function is invoked to send a Connect message in response to received
|
||||
* setup message.
|
||||
*
|
||||
* @param call Pointer to the call for which connect message has to be
|
||||
* sent.
|
||||
* @param call Pointer to the call for which connect message has to be
|
||||
* sent.
|
||||
*
|
||||
* @return Completion status - 0 on success, -1 on failure
|
||||
*/
|
||||
|
@ -509,7 +509,7 @@ EXTERN int ooSendConnect(struct OOH323CallData *call);
|
|||
|
||||
/**
|
||||
* This function is used to send a SETUP message for outgoing call. It first
|
||||
* creates an H.225 TCP connection with the remote end point and then sends
|
||||
* creates an H.225 TCP connection with the remote end point and then sends
|
||||
* SETUP message over this connection.
|
||||
* @param dest Destination - IP:Port/alias.
|
||||
* @param callToken Unique token for the new call.
|
||||
|
@ -541,7 +541,7 @@ EXTERN int ooH323HandleCallFwdRequest(struct OOH323CallData *call);
|
|||
/**
|
||||
* This function is used for forwarding/redirecting a call to third party.
|
||||
* @param callToken callToken for the call which has to be redirected.
|
||||
* @param dest Address to which call has to be forwarded. Can be
|
||||
* @param dest Address to which call has to be forwarded. Can be
|
||||
* IP:Port or alias.
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
|
@ -559,7 +559,7 @@ EXTERN int ooH323ForwardCall(char* callToken, char *dest);
|
|||
EXTERN int ooH323HangCall(char * callToken, OOCallClearReason reason, int q931);
|
||||
|
||||
|
||||
/**
|
||||
/**
|
||||
* Function to accept a call by sending connect. This function is used
|
||||
* as a helper function to ooSendConnect.
|
||||
* @param call Pointer to the call for which connect has to be sent
|
||||
|
@ -602,7 +602,7 @@ int ooGenerateCallToken (char *callToken, size_t size);
|
|||
|
||||
|
||||
/**
|
||||
* This function sends an encoded H.245 message buffer as a tunneled
|
||||
* This function sends an encoded H.245 message buffer as a tunneled
|
||||
* H.245 Facility message.
|
||||
* @param call Pointer to the call for which H.245 message has to
|
||||
* be tunneled.
|
||||
|
@ -617,28 +617,28 @@ int ooGenerateCallToken (char *callToken, size_t size);
|
|||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
*/
|
||||
EXTERN int ooSendAsTunneledMessage
|
||||
(struct OOH323CallData *call, ASN1OCTET* msgbuf,
|
||||
int h245Len, int h245MsgType, int associatedChan);
|
||||
|
||||
(struct OOH323CallData *call, ASN1OCTET* msgbuf,
|
||||
int h245Len, int h245MsgType, int associatedChan);
|
||||
|
||||
|
||||
/**
|
||||
* This function is used to encode an H.225 message.
|
||||
* @param call Handle to the call.
|
||||
* @param pq931Msg Pointer to the message to be encoded.
|
||||
* @param msgbuf Pointer to the buffer in which encoded message will
|
||||
* @param msgbuf Pointer to the buffer in which encoded message will
|
||||
* be returned.
|
||||
* @param size Size of the buffer passed.
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
*/
|
||||
int ooEncodeH225Message(struct OOH323CallData *call, Q931Message *pq931Msg,
|
||||
int ooEncodeH225Message(struct OOH323CallData *call, Q931Message *pq931Msg,
|
||||
char *msgbuf, int size);
|
||||
|
||||
/**
|
||||
* This is a callback function which is called when there is no CONNECT
|
||||
* This is a callback function which is called when there is no CONNECT
|
||||
* response from the remote endpoint after the SETUP has been sent and timeout
|
||||
* period has passed.
|
||||
* @param data The callback data registered at the time of timer
|
||||
* @param data The callback data registered at the time of timer
|
||||
* creation.
|
||||
*
|
||||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
|
@ -670,8 +670,8 @@ EXTERN int ooQ931SetKeypadIE(OOCTXT* pctxt, Q931Message *pmsg, const char* data)
|
|||
* @return OO_OK on success, OO_FAILED, on failure.
|
||||
*/
|
||||
EXTERN int ooSetBearerCapabilityIE
|
||||
(OOCTXT* pctxt, Q931Message *pmsg, enum Q931CodingStandard codingStandard,
|
||||
enum Q931InformationTransferCapability capability,
|
||||
(OOCTXT* pctxt, Q931Message *pmsg, enum Q931CodingStandard codingStandard,
|
||||
enum Q931InformationTransferCapability capability,
|
||||
enum Q931TransferMode transferMode, enum Q931TransferRate transferRate,
|
||||
enum Q931UserInfoLayer1Protocol userInfoLayer1);
|
||||
|
||||
|
@ -703,10 +703,10 @@ EXTERN int ooQ931SetCalledPartyNumberIE
|
|||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
*/
|
||||
EXTERN int ooQ931SetCallingPartyNumberIE
|
||||
(OOCTXT* pctxt, Q931Message *pmsg, const char *number, unsigned plan, unsigned type,
|
||||
(OOCTXT* pctxt, Q931Message *pmsg, const char *number, unsigned plan, unsigned type,
|
||||
unsigned presentation, unsigned screening);
|
||||
|
||||
/**
|
||||
/**
|
||||
* This function is used to set a cause ie for a q931 message.
|
||||
* @param pmsg Valid Q931 Message
|
||||
* @param cause Q931 Cause Value
|
||||
|
@ -716,15 +716,15 @@ EXTERN int ooQ931SetCallingPartyNumberIE
|
|||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
*/
|
||||
EXTERN int ooQ931SetCauseIE
|
||||
(OOCTXT *pctxt, Q931Message *pmsg,enum Q931CauseValues cause, unsigned coding,
|
||||
(OOCTXT *pctxt, Q931Message *pmsg,enum Q931CauseValues cause, unsigned coding,
|
||||
unsigned location);
|
||||
|
||||
EXTERN int ooQ931SetCallStateIE
|
||||
(OOCTXT *pctxt, Q931Message *pmsg, unsigned char callstate);
|
||||
|
||||
/**
|
||||
* This function is used to convert a call clear reason to cause and
|
||||
* reason code. It is used when local user is endoing the call and
|
||||
* This function is used to convert a call clear reason to cause and
|
||||
* reason code. It is used when local user is endoing the call and
|
||||
* sending releaseComplete.
|
||||
* @param clearReason Reason for ending call.
|
||||
* @param cause Pointer to Q931CauseVaules enum in which cause
|
||||
|
@ -735,7 +735,7 @@ EXTERN int ooQ931SetCallStateIE
|
|||
* @return OO_OK, on success. OO_FAILED, on failure.
|
||||
*/
|
||||
EXTERN int ooQ931GetCauseAndReasonCodeFromCallClearReason
|
||||
(OOCallClearReason clearReason, enum Q931CauseValues *cause,
|
||||
(OOCallClearReason clearReason, enum Q931CauseValues *cause,
|
||||
unsigned *reasonCode);
|
||||
|
||||
/**
|
||||
|
@ -750,7 +750,7 @@ EXTERN OOCallClearReason ooGetCallClearReasonFromCauseAndReasonCode
|
|||
(enum Q931CauseValues cause, unsigned reasonCode);
|
||||
|
||||
/**
|
||||
* This function is used to retrieve the description text for a
|
||||
* This function is used to retrieve the description text for a
|
||||
* message type.
|
||||
*
|
||||
* @param msgType Message type.
|
||||
|
@ -775,8 +775,8 @@ EXTERN int ooSendStartH245Facility(struct OOH323CallData *call);
|
|||
EXTERN int ooSendFSUpdate(struct OOH323CallData *call);
|
||||
EXTERN int ooHandleFastStartChannels(struct OOH323CallData *pCall);
|
||||
|
||||
/**
|
||||
* @}
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
/*
|
||||
* Copyright (C) 2004-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
@ -47,7 +47,7 @@ void ooTrace(OOUINT32 traceLevel, const char * fmtspec, ...) {
|
|||
if(traceLevel > gs_traceLevel) return;
|
||||
va_start (arglist, fmtspec);
|
||||
/* memset(logMessage, 0, MAXLOGMSGLEN);*/
|
||||
vsprintf(logMessage, fmtspec, arglist);
|
||||
vsprintf(logMessage, fmtspec, arglist);
|
||||
va_end(arglist);
|
||||
ooTraceLogMessage(logMessage);
|
||||
}
|
||||
|
@ -59,18 +59,18 @@ void ooTraceLogMessage(const char * logMessage)
|
|||
static int lasttime=25;
|
||||
int printDate =0;
|
||||
static int printTime=1;
|
||||
|
||||
|
||||
#ifdef _WIN32
|
||||
|
||||
|
||||
SYSTEMTIME systemTime;
|
||||
GetLocalTime(&systemTime);
|
||||
GetTimeFormat(LOCALE_SYSTEM_DEFAULT,0, &systemTime, "HH':'mm':'ss",
|
||||
GetTimeFormat(LOCALE_SYSTEM_DEFAULT,0, &systemTime, "HH':'mm':'ss",
|
||||
timeString, 100);
|
||||
GetTimeFormat(LOCALE_SYSTEM_DEFAULT,0, &systemTime, "H", currtime, 3);
|
||||
if(lasttime> atoi(currtime))
|
||||
printDate=1;
|
||||
lasttime = atoi(currtime);
|
||||
|
||||
|
||||
#else
|
||||
struct tm *ptime;
|
||||
char dateString[10];
|
||||
|
@ -80,10 +80,10 @@ void ooTraceLogMessage(const char * logMessage)
|
|||
strftime(currtime, 3, "%H", ptime);
|
||||
if(lasttime>atoi(currtime))
|
||||
printDate = 1;
|
||||
lasttime = atoi(currtime);
|
||||
lasttime = atoi(currtime);
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#ifdef _WIN32
|
||||
if(printDate)
|
||||
{
|
||||
|
@ -92,25 +92,25 @@ void ooTraceLogMessage(const char * logMessage)
|
|||
systemTime.wMonth, systemTime.wDay, systemTime.wYear);
|
||||
}
|
||||
if(printTime) {
|
||||
fprintf(gH323ep.fptraceFile, "%s:%03d %s", timeString,
|
||||
fprintf(gH323ep.fptraceFile, "%s:%03d %s", timeString,
|
||||
systemTime.wMilliseconds, logMessage);
|
||||
}
|
||||
else
|
||||
fprintf(gH323ep.fptraceFile, "%s", logMessage);
|
||||
|
||||
|
||||
fflush(gH323ep.fptraceFile);
|
||||
#else
|
||||
if(printDate)
|
||||
{
|
||||
printDate = 0;
|
||||
strftime(dateString, 10, "%d", ptime);
|
||||
fprintf(gH323ep.fptraceFile, "---------Date %s---------\n",
|
||||
fprintf(gH323ep.fptraceFile, "---------Date %s---------\n",
|
||||
dateString);
|
||||
}
|
||||
if(printTime) {
|
||||
struct timeval systemTime;
|
||||
gettimeofday(&systemTime, NULL);
|
||||
fprintf(gH323ep.fptraceFile, "%s:%03ld %s", timeString,
|
||||
fprintf(gH323ep.fptraceFile, "%s:%03ld %s", timeString,
|
||||
(long) systemTime.tv_usec/1000, logMessage);
|
||||
}
|
||||
else
|
||||
|
@ -118,7 +118,7 @@ void ooTraceLogMessage(const char * logMessage)
|
|||
|
||||
fflush(gH323ep.fptraceFile);
|
||||
#endif
|
||||
|
||||
|
||||
if(strchr(logMessage, '\n'))
|
||||
printTime = 1;
|
||||
else
|
||||
|
@ -131,4 +131,3 @@ int ooLogAsn1Error(int stat, const char * fname, int lno)
|
|||
OOTRACEERR4("Asn1Error: %d at %s:%d\n", stat, fname, lno);
|
||||
return stat;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,21 +1,21 @@
|
|||
/*
|
||||
* Copyright (C) 2004-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
/**
|
||||
* @file ootrace.h
|
||||
* @file ootrace.h
|
||||
* This file defines the trace functionality
|
||||
*/
|
||||
#include "ooCommon.h"
|
||||
|
@ -67,7 +67,7 @@
|
|||
#define OOTRACEINFO4(a,b,c,d) ooTrace(OOTRCLVLINFO,a,b,c,d)
|
||||
#define OOTRACEINFO5(a,b,c,d,e) ooTrace(OOTRCLVLINFO,a,b,c,d,e)
|
||||
#define OOTRACEINFO6(a,b,c,d,e,f) ooTrace(OOTRCLVLINFO,a,b,c,d,e, f)
|
||||
#ifndef _COMPACT
|
||||
#ifndef _COMPACT
|
||||
#define OOTRACEDBGA1(a) ooTrace(OOTRCLVLDBGA,a)
|
||||
#define OOTRACEDBGA2(a,b) ooTrace(OOTRCLVLDBGA,a,b)
|
||||
#define OOTRACEDBGA3(a,b,c) ooTrace(OOTRCLVLDBGA,a,b,c)
|
||||
|
@ -83,13 +83,13 @@
|
|||
#define OOTRACEDBGC4(a,b,c,d) ooTrace(OOTRCLVLDBGC,a,b,c,d)
|
||||
#define OOTRACEDBGC5(a,b,c,d,e) ooTrace(OOTRCLVLDBGC,a,b,c,d,e)
|
||||
#else
|
||||
#define OOTRACEDBGA1(a)
|
||||
#define OOTRACEDBGA1(a)
|
||||
#define OOTRACEDBGA2(a,b)
|
||||
#define OOTRACEDBGA3(a,b,c)
|
||||
#define OOTRACEDBGA4(a,b,c,d)
|
||||
#define OOTRACEDBGA5(a,b,c,d,e)
|
||||
#define OOTRACEDBGB1(a)
|
||||
#define OOTRACEDBGB2(a,b)
|
||||
#define OOTRACEDBGB2(a,b)
|
||||
#define OOTRACEDBGB3(a,b,c)
|
||||
#define OOTRACEDBGB4(a,b,c,d)
|
||||
#define OOTRACEDBGC1(a)
|
||||
|
@ -113,11 +113,11 @@ extern "C" {
|
|||
|
||||
/**
|
||||
* This function is used to set the trace level.
|
||||
* @param traceLevel New trace level. Various values are: OOTRCLVLERR,
|
||||
* @param traceLevel New trace level. Various values are: OOTRCLVLERR,
|
||||
* OOTRCLVLWARN, OOTRCLVLINFO, OOTRCLVLDBGA, OOTRCLVLDBGB,
|
||||
* OOTRCLVLDBGC
|
||||
*
|
||||
* @return None
|
||||
* @return None
|
||||
*/
|
||||
EXTERN void ooSetTraceThreshold(OOUINT32 traceLevel);
|
||||
|
||||
|
@ -126,7 +126,7 @@ EXTERN void ooSetTraceThreshold(OOUINT32 traceLevel);
|
|||
*
|
||||
* @param traceLevel Trace level for the message.
|
||||
* @param fmtspec Printf style format spec.
|
||||
* @param ... Printf style variable list of arguments
|
||||
* @param ... Printf style variable list of arguments
|
||||
*
|
||||
* @return - none
|
||||
*/
|
||||
|
|
|
@ -1,50 +1,50 @@
|
|||
/*
|
||||
* Copyright (C) 2004-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
/*! \mainpage
|
||||
/*! \mainpage
|
||||
* <H1>ooH323c Stack Functions</H1>
|
||||
*
|
||||
* The <B>Objective Open H.323 for C (ooH323c)</B> protocol stack is an
|
||||
* open source applications program interface (API) for building H.323 based
|
||||
* applications. The stack implements Q.931/H.225 call signaling procedures,
|
||||
* H.245 logical channel operations, and Registration, Admission, and Status
|
||||
* The <B>Objective Open H.323 for C (ooH323c)</B> protocol stack is an
|
||||
* open source applications program interface (API) for building H.323 based
|
||||
* applications. The stack implements Q.931/H.225 call signaling procedures,
|
||||
* H.245 logical channel operations, and Registration, Admission, and Status
|
||||
* (RAS) messaging for Gatekeeper communications.
|
||||
*
|
||||
* The categories of user functions provided are as follows:
|
||||
* <UL>
|
||||
* <LI>Stack command functions. These are high level functions used to
|
||||
* initiate common H.323 telephony operations (for example, to make a
|
||||
* <LI>Stack command functions. These are high level functions used to
|
||||
* initiate common H.323 telephony operations (for example, to make a
|
||||
* call).</LI>
|
||||
* <LI>Gatekeeper functions. These are high level functions for
|
||||
* <LI>Gatekeeper functions. These are high level functions for
|
||||
* managing communications with a gatekeeper using RAS messages.</LI>
|
||||
* <LI>H.323 endpoint management functions. These are function for
|
||||
* <LI>H.323 endpoint management functions. These are function for
|
||||
* used for managing the global H.323 endpoint.</LI>
|
||||
* <LI>Call management functions. These are functions used to manage
|
||||
* <LI>Call management functions. These are functions used to manage
|
||||
* active calls within the stack.</LI>
|
||||
* <LI>Capability management functions. These functions are used for
|
||||
* <LI>Capability management functions. These functions are used for
|
||||
* negotiating capabilities between two different terminals.</LI>
|
||||
* <LI>H.225 and H.245 message handling functions. Functions for
|
||||
* <LI>H.225 and H.245 message handling functions. Functions for
|
||||
* creating and handling H.323 standard ASN.1 messages.</LI>
|
||||
* <LI>Q.931 functions. Functions for the execution of various
|
||||
* <LI>Q.931 functions. Functions for the execution of various
|
||||
* standard Q.931 operations.</LI>
|
||||
* <LI>TCP/IP and UDP socket communication functions. Low-level
|
||||
* <LI>TCP/IP and UDP socket communication functions. Low-level
|
||||
* functions for writing data to and receiving data from sockets.</LI>
|
||||
* </UL>
|
||||
*/
|
||||
*/
|
||||
/**
|
||||
* @file ootypes.h
|
||||
* @file ootypes.h
|
||||
* This file contains definitions of common constants and data structures.
|
||||
*/
|
||||
#ifndef _OOTYPES_H_
|
||||
|
@ -71,7 +71,7 @@
|
|||
#endif /* MAKE_DLL */
|
||||
#endif /* EXTERN */
|
||||
|
||||
/**
|
||||
/**
|
||||
* @defgroup ootypes Common type and constant definitions.
|
||||
* @{
|
||||
*/
|
||||
|
@ -86,7 +86,7 @@
|
|||
*/
|
||||
typedef enum OOMasterSlaveState {
|
||||
OO_MasterSlave_Idle,
|
||||
OO_MasterSlave_DetermineSent,
|
||||
OO_MasterSlave_DetermineSent,
|
||||
OO_MasterSlave_AckReceived,
|
||||
OO_MasterSlave_Master,
|
||||
OO_MasterSlave_Slave
|
||||
|
@ -97,25 +97,25 @@ typedef enum OOMSAckStatus {
|
|||
OO_msAck_remoteReceived
|
||||
} OOMSAckStatus;
|
||||
|
||||
/**
|
||||
* States defined for the capability exchange procedure.
|
||||
/**
|
||||
* States defined for the capability exchange procedure.
|
||||
*/
|
||||
typedef enum {
|
||||
OO_LocalTermCapExchange_Idle,
|
||||
OO_LocalTermCapSetSent,
|
||||
OO_LocalTermCapSetAckRecvd,
|
||||
OO_RemoteTermCapExchange_Idle,
|
||||
OO_RemoteTermCapSetRecvd,
|
||||
OO_LocalTermCapExchange_Idle,
|
||||
OO_LocalTermCapSetSent,
|
||||
OO_LocalTermCapSetAckRecvd,
|
||||
OO_RemoteTermCapExchange_Idle,
|
||||
OO_RemoteTermCapSetRecvd,
|
||||
OO_RemoteTermCapSetAckSent
|
||||
} OOCapExchangeState;
|
||||
|
||||
/**
|
||||
/**
|
||||
* Call clear reason codes.
|
||||
*/
|
||||
typedef enum OOCallClearReason {
|
||||
OO_REASON_UNKNOWN=0,
|
||||
OO_REASON_UNKNOWN=0,
|
||||
OO_REASON_INVALIDMESSAGE,
|
||||
OO_REASON_TRANSPORTFAILURE,
|
||||
OO_REASON_TRANSPORTFAILURE,
|
||||
OO_REASON_NOROUTE,
|
||||
OO_REASON_NOUSER,
|
||||
OO_REASON_NOBW,
|
||||
|
@ -125,10 +125,10 @@ typedef enum OOCallClearReason {
|
|||
OO_REASON_GK_UNREACHABLE,
|
||||
OO_REASON_GK_CLEARED,
|
||||
OO_REASON_NOCOMMON_CAPABILITIES,
|
||||
OO_REASON_REMOTE_FWDED,
|
||||
OO_REASON_REMOTE_FWDED,
|
||||
OO_REASON_LOCAL_FWDED,
|
||||
OO_REASON_REMOTE_CLEARED,
|
||||
OO_REASON_LOCAL_CLEARED,
|
||||
OO_REASON_REMOTE_CLEARED,
|
||||
OO_REASON_LOCAL_CLEARED,
|
||||
OO_REASON_REMOTE_BUSY,
|
||||
OO_REASON_LOCAL_BUSY,
|
||||
OO_REASON_REMOTE_NOANSWER,
|
||||
|
@ -154,45 +154,45 @@ typedef enum OOCallClearReason {
|
|||
/**
|
||||
Various message types for H225 and H245 messages
|
||||
*/
|
||||
#define OO_MSGTYPE_MIN 101
|
||||
#define OOQ931MSG 101
|
||||
#define OOH245MSG 102
|
||||
#define OOSetup 103
|
||||
#define OOCallProceeding 104
|
||||
#define OOAlert 105
|
||||
#define OOConnect 106
|
||||
#define OOReleaseComplete 107
|
||||
#define OOFacility 108
|
||||
#define OOInformationMessage 109
|
||||
#define OOMasterSlaveDetermination 110
|
||||
#define OOMasterSlaveAck 111
|
||||
#define OOMasterSlaveReject 112
|
||||
#define OOMasterSlaveRelease 113
|
||||
#define OOTerminalCapabilitySet 114
|
||||
#define OOTerminalCapabilitySetAck 115
|
||||
#define OOTerminalCapabilitySetReject 116
|
||||
#define OOTerminalCapabilitySetRelease 117
|
||||
#define OOOpenLogicalChannel 118
|
||||
#define OOOpenLogicalChannelAck 119
|
||||
#define OOOpenLogicalChannelReject 120
|
||||
#define OOOpenLogicalChannelRelease 121
|
||||
#define OOOpenLogicalChannelConfirm 122
|
||||
#define OOCloseLogicalChannel 123
|
||||
#define OOCloseLogicalChannelAck 124
|
||||
#define OORequestChannelClose 125
|
||||
#define OORequestChannelCloseAck 126
|
||||
#define OORequestChannelCloseReject 127
|
||||
#define OORequestChannelCloseRelease 128
|
||||
#define OOEndSessionCommand 129
|
||||
#define OOUserInputIndication 130
|
||||
#define OORequestModeAck 131
|
||||
#define OORequestModeReject 132
|
||||
#define OORequestMode 133
|
||||
#define OORequestDelayResponse 134
|
||||
#define OORequestDelayRequest 135
|
||||
#define OOStatus 136
|
||||
#define OO_MSGTYPE_MIN 0x65
|
||||
#define OOQ931MSG 0x65
|
||||
#define OOH245MSG 0x66
|
||||
#define OOSetup 0x67
|
||||
#define OOCallProceeding 0x68
|
||||
#define OOAlert 0x69
|
||||
#define OOConnect 0x6a
|
||||
#define OOReleaseComplete 0x6b
|
||||
#define OOFacility 0x6c
|
||||
#define OOInformationMessage 0x6d
|
||||
#define OOMasterSlaveDetermination 0x6e
|
||||
#define OOMasterSlaveAck 0x6f
|
||||
#define OOMasterSlaveReject 0x70
|
||||
#define OOMasterSlaveRelease 0x71
|
||||
#define OOTerminalCapabilitySet 0x72
|
||||
#define OOTerminalCapabilitySetAck 0x73
|
||||
#define OOTerminalCapabilitySetReject 0x74
|
||||
#define OOTerminalCapabilitySetRelease 0x75
|
||||
#define OOOpenLogicalChannel 0x76
|
||||
#define OOOpenLogicalChannelAck 0x77
|
||||
#define OOOpenLogicalChannelReject 0x78
|
||||
#define OOOpenLogicalChannelRelease 0x79
|
||||
#define OOOpenLogicalChannelConfirm 0x7a
|
||||
#define OOCloseLogicalChannel 0x7b
|
||||
#define OOCloseLogicalChannelAck 0x7c
|
||||
#define OORequestChannelClose 0x7d
|
||||
#define OORequestChannelCloseAck 0x7e
|
||||
#define OORequestChannelCloseReject 0x7f
|
||||
#define OORequestChannelCloseRelease 0x80
|
||||
#define OOEndSessionCommand 0x81
|
||||
#define OOUserInputIndication 0x82
|
||||
#define OORequestModeAck 0x83
|
||||
#define OORequestModeReject 0x84
|
||||
#define OORequestMode 0x85
|
||||
#define OORequestDelayResponse 0x86
|
||||
#define OORequestDelayRequest 0x87
|
||||
#define OOStatus 0x88
|
||||
|
||||
#define OO_MSGTYPE_MAX 136
|
||||
#define OO_MSGTYPE_MAX 0x88
|
||||
|
||||
/* Timer types */
|
||||
#define OO_CALLESTB_TIMER (1<<0)
|
||||
|
@ -241,8 +241,8 @@ typedef enum OOCallMode {
|
|||
/*TODO: Should add caller-id, callername etc. So that they can be changed per
|
||||
call basis*/
|
||||
/**
|
||||
* This structure defines options that can be set at the level of an
|
||||
* individual call. They override options set in the H.323 endpoint
|
||||
* This structure defines options that can be set at the level of an
|
||||
* individual call. They override options set in the H.323 endpoint
|
||||
* structure.
|
||||
*/
|
||||
typedef struct ooCallOptions {
|
||||
|
@ -252,7 +252,7 @@ typedef struct ooCallOptions {
|
|||
OOCallMode callMode; /*!< Type of channel to setup with FastStart */
|
||||
int transfercap; /* q931 cap */
|
||||
}ooCallOptions;
|
||||
|
||||
|
||||
|
||||
struct OOH323CallData;
|
||||
|
||||
|
@ -266,4 +266,3 @@ typedef struct ooTimerCallback{
|
|||
* @}
|
||||
*/
|
||||
#endif
|
||||
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
/*
|
||||
* Copyright (C) 1997-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
@ -23,7 +23,7 @@
|
|||
ASN1BOOL isExtendableSize (Asn1SizeCnst* pSizeList);
|
||||
static ASN1BOOL isFixedSize (Asn1SizeCnst* pSizeList);
|
||||
|
||||
ASN1BOOL alignCharStr
|
||||
ASN1BOOL alignCharStr
|
||||
(OOCTXT* pctxt, ASN1UINT len, ASN1UINT nbits, Asn1SizeCnst* pSize)
|
||||
{
|
||||
if (TRUE) {
|
||||
|
@ -59,16 +59,16 @@ ASN1BOOL alignCharStr
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
int bitAndOctetStringAlignmentTest (Asn1SizeCnst* pSizeList,
|
||||
ASN1UINT itemCount,
|
||||
int bitAndOctetStringAlignmentTest (Asn1SizeCnst* pSizeList,
|
||||
ASN1UINT itemCount,
|
||||
ASN1BOOL bitStrFlag,
|
||||
ASN1BOOL* pAlignFlag)
|
||||
{
|
||||
ASN1UINT threshold = (bitStrFlag) ? 16 : 2;
|
||||
|
||||
if (pSizeList == 0 || itemCount > threshold)
|
||||
if (pSizeList == 0 || itemCount > threshold)
|
||||
*pAlignFlag = TRUE;
|
||||
else if (isFixedSize(pSizeList))
|
||||
else if (isFixedSize(pSizeList))
|
||||
*pAlignFlag = FALSE;
|
||||
else {
|
||||
|
||||
|
@ -91,8 +91,8 @@ int bitAndOctetStringAlignmentTest (Asn1SizeCnst* pSizeList,
|
|||
return (ASN_OK);
|
||||
}
|
||||
|
||||
Asn1SizeCnst* checkSize (Asn1SizeCnst* pSizeList,
|
||||
ASN1UINT value,
|
||||
Asn1SizeCnst* checkSize (Asn1SizeCnst* pSizeList,
|
||||
ASN1UINT value,
|
||||
ASN1BOOL* pExtendable)
|
||||
{
|
||||
Asn1SizeCnst* lpSize = pSizeList;
|
||||
|
@ -132,7 +132,7 @@ int addSizeConstraint (OOCTXT* pctxt, Asn1SizeCnst* pSize)
|
|||
lpSize = pSize;
|
||||
while (lpSize) {
|
||||
if (pctxt->pSizeConstraint->lower <= lpSize->lower ||
|
||||
pctxt->pSizeConstraint->upper >= lpSize->upper)
|
||||
pctxt->pSizeConstraint->upper >= lpSize->upper)
|
||||
{
|
||||
/* Set the extension flag to the value of the size */
|
||||
/* constraint structure that the item falls within.. */
|
||||
|
@ -196,32 +196,32 @@ int checkSizeConstraint(OOCTXT* pctxt, int size)
|
|||
}
|
||||
|
||||
ASN1UINT getUIntBitCount (ASN1UINT value)
|
||||
{
|
||||
{
|
||||
/* Binary search - decision tree (5 tests, rarely 6) */
|
||||
return
|
||||
((value < 1<<15) ?
|
||||
((value < 1<<7) ?
|
||||
((value < 1<<3) ?
|
||||
((value < 1<<1) ? ((value < 1<<0) ? 0 : 1) :
|
||||
((value < 1<<1) ? ((value < 1<<0) ? 0 : 1) :
|
||||
((value < 1<<2) ? 2 : 3)) :
|
||||
((value < 1<<5) ? ((value < 1<<4) ? 4 : 5) :
|
||||
((value < 1<<5) ? ((value < 1<<4) ? 4 : 5) :
|
||||
((value < 1<<6) ? 6 : 7))) :
|
||||
((value < 1<<11) ?
|
||||
((value < 1<<9) ? ((value < 1<<8) ? 8 : 9) :
|
||||
((value < 1<<9) ? ((value < 1<<8) ? 8 : 9) :
|
||||
((value < 1<<10) ? 10 : 11)) :
|
||||
((value < 1<<13) ? ((value < 1<<12) ? 12 : 13) :
|
||||
((value < 1<<13) ? ((value < 1<<12) ? 12 : 13) :
|
||||
((value < 1<<14) ? 14 : 15)))) :
|
||||
((value < 1<<23) ?
|
||||
((value < 1<<19) ?
|
||||
((value < 1<<17) ? ((value < 1<<16) ? 16 : 17) :
|
||||
((value < 1<<17) ? ((value < 1<<16) ? 16 : 17) :
|
||||
((value < 1<<18) ? 18 : 19)) :
|
||||
((value < 1<<21) ? ((value < 1<<20) ? 20 : 21) :
|
||||
((value < 1<<21) ? ((value < 1<<20) ? 20 : 21) :
|
||||
((value < 1<<22) ? 22 : 23))) :
|
||||
((value < 1<<27) ?
|
||||
((value < 1<<25) ? ((value < 1<<24) ? 24 : 25) :
|
||||
((value < 1<<25) ? ((value < 1<<24) ? 24 : 25) :
|
||||
((value < 1<<26) ? 26 : 27)) :
|
||||
((value < 1<<29) ? ((value < 1<<28) ? 28 : 29) :
|
||||
((value < 1<<30) ? 30 :
|
||||
((value < 1<<29) ? ((value < 1<<28) ? 28 : 29) :
|
||||
((value < 1<<30) ? 30 :
|
||||
((value < 1UL<<31) ? 31 : 32))))));
|
||||
}
|
||||
|
||||
|
@ -257,7 +257,7 @@ static ASN1BOOL isFixedSize (Asn1SizeCnst* pSizeList)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
void set16BitCharSet
|
||||
void set16BitCharSet
|
||||
(OOCTXT* pctxt, Asn116BitCharSet* pCharSet, Asn116BitCharSet* pAlphabet)
|
||||
{
|
||||
/* Permitted alphabet range can either be specified as a range of */
|
||||
|
@ -267,7 +267,7 @@ void set16BitCharSet
|
|||
int nocts = pAlphabet->charSet.nchars * 2;
|
||||
pCharSet->charSet.nchars = pAlphabet->charSet.nchars;
|
||||
|
||||
pCharSet->charSet.data =
|
||||
pCharSet->charSet.data =
|
||||
(ASN116BITCHAR*) ASN1MALLOC (pctxt, nocts);
|
||||
|
||||
if (pCharSet->charSet.data != NULL)
|
||||
|
@ -286,4 +286,3 @@ void set16BitCharSet
|
|||
pCharSet->alignedBits <<= 1;
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -1,20 +1,20 @@
|
|||
/*
|
||||
* Copyright (C) 2004-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
/* This is an implementation of a simple print handler. It outputs
|
||||
the fields of an encoded PER message to stdout in a structured output
|
||||
/* This is an implementation of a simple print handler. It outputs
|
||||
the fields of an encoded PER message to stdout in a structured output
|
||||
format..
|
||||
*/
|
||||
#include "asterisk.h"
|
||||
|
@ -35,10 +35,10 @@ AST_MUTEX_DEFINE_STATIC(printlock);
|
|||
static const char* pVarName;
|
||||
static int gIndentSpaces;
|
||||
|
||||
static const char* bitStrToString
|
||||
static const char* bitStrToString
|
||||
(ASN1UINT numbits, const ASN1OCTET* data, char* buffer, size_t bufsiz);
|
||||
|
||||
static const char* octStrToString
|
||||
static const char* octStrToString
|
||||
(ASN1UINT numocts, const ASN1OCTET* data, char* buffer, size_t bufsiz);
|
||||
|
||||
void printCharStr32BitValue (ASN1UINT nchars, ASN132BITCHAR* data);
|
||||
|
@ -231,7 +231,7 @@ void printOpenTypeValue (ASN1UINT numocts, const ASN1OCTET* data)
|
|||
OOTRACEDBGB1 ("< encoded data >\n");
|
||||
}
|
||||
|
||||
static const char* bitStrToString
|
||||
static const char* bitStrToString
|
||||
(ASN1UINT numbits, const ASN1OCTET* data, char* buffer, size_t bufsiz)
|
||||
{
|
||||
size_t i;
|
||||
|
@ -257,7 +257,7 @@ static const char* bitStrToString
|
|||
return buffer;
|
||||
}
|
||||
|
||||
static const char* octStrToString
|
||||
static const char* octStrToString
|
||||
(ASN1UINT numocts, const ASN1OCTET* data, char* buffer, size_t bufsiz)
|
||||
{
|
||||
size_t i;
|
||||
|
@ -268,7 +268,7 @@ static const char* octStrToString
|
|||
if (bufsiz > 1) buffer[1] = '\0';
|
||||
for (i = 0; i < numocts; i++) {
|
||||
if (i < bufsiz - 1) {
|
||||
sprintf (lbuf, "%02x", (unsigned)data[i]);
|
||||
sprintf (lbuf, "%02hhx", (unsigned char)data[i]);
|
||||
strcat (&buffer[(i*2)+1], lbuf);
|
||||
}
|
||||
else break;
|
||||
|
|
|
@ -1,22 +1,22 @@
|
|||
/*
|
||||
* Copyright (C) 2004-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
/**
|
||||
@file printHandler.h
|
||||
This is an implementation of a simple print handler. It outputs
|
||||
the fields of an encoded PER message to stdout in a structured output
|
||||
@file printHandler.h
|
||||
This is an implementation of a simple print handler. It outputs
|
||||
the fields of an encoded PER message to stdout in a structured output
|
||||
format..
|
||||
*/
|
||||
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
/*
|
||||
* Copyright (C) 1997-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
|
|
@ -1,21 +1,21 @@
|
|||
/*
|
||||
* Copyright (C) 1997-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
/**
|
||||
* @file rtctype.h
|
||||
/**
|
||||
* @file rtctype.h
|
||||
*/
|
||||
#ifndef _RTCTYPE_H_
|
||||
#define _RTCTYPE_H_
|
||||
|
@ -83,4 +83,3 @@ extern EXTERN const ASN1OCTET rtCtypeTable[256];
|
|||
#endif
|
||||
|
||||
#endif /* _RTCTYPE_H_ */
|
||||
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
/*
|
||||
* Copyright (C) 2004-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
@ -116,7 +116,7 @@ void* ooh323c_call_thread(void* dummy)
|
|||
|
||||
} while (mycthread->call != NULL && res >= 0);
|
||||
|
||||
|
||||
|
||||
ast_mutex_destroy(&mycthread->lock);
|
||||
|
||||
close(mycthread->thePipe[0]);
|
||||
|
@ -240,10 +240,10 @@ int ooh323c_set_capability
|
|||
if (gH323Debug) {
|
||||
ast_verb(0, "\tAdding g711 ulaw capability to H323 endpoint\n");
|
||||
}
|
||||
ret= ooH323EpAddG711Capability(OO_G711ULAW64K, gtxframes, grxframes,
|
||||
ret= ooH323EpAddG711Capability(OO_G711ULAW64K, gtxframes, grxframes,
|
||||
OORXANDTX, &ooh323c_start_receive_channel,
|
||||
&ooh323c_start_transmit_channel,
|
||||
&ooh323c_stop_receive_channel,
|
||||
&ooh323c_stop_receive_channel,
|
||||
&ooh323c_stop_transmit_channel);
|
||||
}
|
||||
if(ast_format_cmp(format, ast_format_alaw) == AST_FORMAT_CMP_EQUAL)
|
||||
|
@ -251,10 +251,10 @@ int ooh323c_set_capability
|
|||
if (gH323Debug) {
|
||||
ast_verb(0, "\tAdding g711 alaw capability to H323 endpoint\n");
|
||||
}
|
||||
ret= ooH323EpAddG711Capability(OO_G711ALAW64K, gtxframes, grxframes,
|
||||
ret= ooH323EpAddG711Capability(OO_G711ALAW64K, gtxframes, grxframes,
|
||||
OORXANDTX, &ooh323c_start_receive_channel,
|
||||
&ooh323c_start_transmit_channel,
|
||||
&ooh323c_stop_receive_channel,
|
||||
&ooh323c_stop_receive_channel,
|
||||
&ooh323c_stop_transmit_channel);
|
||||
}
|
||||
|
||||
|
@ -263,27 +263,27 @@ int ooh323c_set_capability
|
|||
if (gH323Debug) {
|
||||
ast_verb(0, "\tAdding g729A capability to H323 endpoint\n");
|
||||
}
|
||||
ret = ooH323EpAddG729Capability(OO_G729A, 2, 24,
|
||||
ret = ooH323EpAddG729Capability(OO_G729A, 2, 24,
|
||||
OORXANDTX, &ooh323c_start_receive_channel,
|
||||
&ooh323c_start_transmit_channel,
|
||||
&ooh323c_stop_receive_channel,
|
||||
&ooh323c_stop_receive_channel,
|
||||
&ooh323c_stop_transmit_channel);
|
||||
|
||||
if (gH323Debug) {
|
||||
ast_verb(0, "\tAdding g729 capability to H323 endpoint\n");
|
||||
}
|
||||
ret |= ooH323EpAddG729Capability(OO_G729, 2, 24,
|
||||
ret |= ooH323EpAddG729Capability(OO_G729, 2, 24,
|
||||
OORXANDTX, &ooh323c_start_receive_channel,
|
||||
&ooh323c_start_transmit_channel,
|
||||
&ooh323c_stop_receive_channel,
|
||||
&ooh323c_stop_receive_channel,
|
||||
&ooh323c_stop_transmit_channel);
|
||||
if (gH323Debug) {
|
||||
ast_verb(0, "\tAdding g729b capability to H323 endpoint\n");
|
||||
}
|
||||
ret |= ooH323EpAddG729Capability(OO_G729B, 2, 24,
|
||||
ret |= ooH323EpAddG729Capability(OO_G729B, 2, 24,
|
||||
OORXANDTX, &ooh323c_start_receive_channel,
|
||||
&ooh323c_start_transmit_channel,
|
||||
&ooh323c_stop_receive_channel,
|
||||
&ooh323c_stop_receive_channel,
|
||||
&ooh323c_stop_transmit_channel);
|
||||
}
|
||||
|
||||
|
@ -292,10 +292,10 @@ int ooh323c_set_capability
|
|||
if (gH323Debug) {
|
||||
ast_verb(0, "\tAdding g7231 capability to H323 endpoint\n");
|
||||
}
|
||||
ret = ooH323EpAddG7231Capability(OO_G7231, 1, 1, FALSE,
|
||||
ret = ooH323EpAddG7231Capability(OO_G7231, 1, 1, FALSE,
|
||||
OORXANDTX, &ooh323c_start_receive_channel,
|
||||
&ooh323c_start_transmit_channel,
|
||||
&ooh323c_stop_receive_channel,
|
||||
&ooh323c_stop_receive_channel,
|
||||
&ooh323c_stop_transmit_channel);
|
||||
|
||||
}
|
||||
|
@ -305,10 +305,10 @@ int ooh323c_set_capability
|
|||
if (gH323Debug) {
|
||||
ast_verb(0, "\tAdding g726 capability to H323 endpoint\n");
|
||||
}
|
||||
ret = ooH323EpAddG726Capability(OO_G726, gtxframes, grxframes, FALSE,
|
||||
ret = ooH323EpAddG726Capability(OO_G726, gtxframes, grxframes, FALSE,
|
||||
OORXANDTX, &ooh323c_start_receive_channel,
|
||||
&ooh323c_start_transmit_channel,
|
||||
&ooh323c_stop_receive_channel,
|
||||
&ooh323c_stop_receive_channel,
|
||||
&ooh323c_stop_transmit_channel);
|
||||
|
||||
}
|
||||
|
@ -318,10 +318,10 @@ int ooh323c_set_capability
|
|||
if (gH323Debug) {
|
||||
ast_verb(0, "\tAdding g726aal2 capability to H323 endpoint\n");
|
||||
}
|
||||
ret = ooH323EpAddG726Capability(OO_G726AAL2, gtxframes, grxframes, FALSE,
|
||||
ret = ooH323EpAddG726Capability(OO_G726AAL2, gtxframes, grxframes, FALSE,
|
||||
OORXANDTX, &ooh323c_start_receive_channel,
|
||||
&ooh323c_start_transmit_channel,
|
||||
&ooh323c_stop_receive_channel,
|
||||
&ooh323c_stop_receive_channel,
|
||||
&ooh323c_stop_transmit_channel);
|
||||
|
||||
}
|
||||
|
@ -331,10 +331,10 @@ int ooh323c_set_capability
|
|||
if (gH323Debug) {
|
||||
ast_verb(0, "\tAdding h263 capability to H323 endpoint\n");
|
||||
}
|
||||
ret = ooH323EpAddH263VideoCapability(OO_H263VIDEO, 1, 0, 0, 0, 0, 320*1024,
|
||||
ret = ooH323EpAddH263VideoCapability(OO_H263VIDEO, 1, 0, 0, 0, 0, 320*1024,
|
||||
OORXANDTX, &ooh323c_start_receive_channel,
|
||||
&ooh323c_start_transmit_channel,
|
||||
&ooh323c_stop_receive_channel,
|
||||
&ooh323c_stop_receive_channel,
|
||||
&ooh323c_stop_transmit_channel);
|
||||
|
||||
}
|
||||
|
@ -344,10 +344,10 @@ int ooh323c_set_capability
|
|||
if (gH323Debug) {
|
||||
ast_verb(0, "\tAdding gsm capability to H323 endpoint\n");
|
||||
}
|
||||
ret = ooH323EpAddGSMCapability(OO_GSMFULLRATE, 4, FALSE, FALSE,
|
||||
ret = ooH323EpAddGSMCapability(OO_GSMFULLRATE, 4, FALSE, FALSE,
|
||||
OORXANDTX, &ooh323c_start_receive_channel,
|
||||
&ooh323c_start_transmit_channel,
|
||||
&ooh323c_stop_receive_channel,
|
||||
&ooh323c_stop_receive_channel,
|
||||
&ooh323c_stop_transmit_channel);
|
||||
|
||||
}
|
||||
|
@ -357,17 +357,17 @@ int ooh323c_set_capability
|
|||
if (gH323Debug) {
|
||||
ast_verb(0, "\tAdding speex capability to H323 endpoint\n");
|
||||
}
|
||||
ret = ooH323EpAddSpeexCapability(OO_SPEEX, 4, 4, FALSE,
|
||||
ret = ooH323EpAddSpeexCapability(OO_SPEEX, 4, 4, FALSE,
|
||||
OORXANDTX, &ooh323c_start_receive_channel,
|
||||
&ooh323c_start_transmit_channel,
|
||||
&ooh323c_stop_receive_channel,
|
||||
&ooh323c_stop_receive_channel,
|
||||
&ooh323c_stop_transmit_channel);
|
||||
|
||||
}
|
||||
|
||||
ao2_ref(format, -1);
|
||||
ao2_ref(format, -1);
|
||||
}
|
||||
|
||||
|
||||
if(dtmf & H323_DTMF_CISCO)
|
||||
ret |= ooH323EpEnableDTMFCISCO(0);
|
||||
if(dtmf & H323_DTMF_RFC2833)
|
||||
|
@ -386,7 +386,7 @@ int ooh323c_set_capability_for_call
|
|||
{
|
||||
int ret = 0, x, txframes;
|
||||
if (gH323Debug) {
|
||||
ast_verb(0, "\tAdding capabilities to call(%s, %s)\n", call->callType,
|
||||
ast_verb(0, "\tAdding capabilities to call(%s, %s)\n", call->callType,
|
||||
call->callToken);
|
||||
}
|
||||
if(dtmf & H323_DTMF_CISCO || 1)
|
||||
|
@ -399,7 +399,7 @@ int ooh323c_set_capability_for_call
|
|||
ret |= ooCallEnableDTMFH245Signal(call);
|
||||
|
||||
if (t38support)
|
||||
ooCapabilityAddT38Capability(call, OO_T38, OORXANDTX,
|
||||
ooCapabilityAddT38Capability(call, OO_T38, OORXANDTX,
|
||||
&ooh323c_start_receive_datachannel,
|
||||
&ooh323c_start_transmit_datachannel,
|
||||
&ooh323c_stop_receive_datachannel,
|
||||
|
@ -412,15 +412,15 @@ int ooh323c_set_capability_for_call
|
|||
if(ast_format_cmp(format, ast_format_ulaw) == AST_FORMAT_CMP_EQUAL)
|
||||
{
|
||||
if (gH323Debug) {
|
||||
ast_verb(0, "\tAdding g711 ulaw capability to call(%s, %s)\n",
|
||||
ast_verb(0, "\tAdding g711 ulaw capability to call(%s, %s)\n",
|
||||
call->callType, call->callToken);
|
||||
}
|
||||
txframes = ast_format_cap_get_format_framing(cap, format);
|
||||
ret= ooCallAddG711Capability(call, OO_G711ULAW64K, txframes,
|
||||
txframes, OORXANDTX,
|
||||
ret= ooCallAddG711Capability(call, OO_G711ULAW64K, txframes,
|
||||
txframes, OORXANDTX,
|
||||
&ooh323c_start_receive_channel,
|
||||
&ooh323c_start_transmit_channel,
|
||||
&ooh323c_stop_receive_channel,
|
||||
&ooh323c_stop_receive_channel,
|
||||
&ooh323c_stop_transmit_channel);
|
||||
}
|
||||
if(ast_format_cmp(format, ast_format_alaw) == AST_FORMAT_CMP_EQUAL)
|
||||
|
@ -430,11 +430,11 @@ int ooh323c_set_capability_for_call
|
|||
call->callType, call->callToken);
|
||||
}
|
||||
txframes = ast_format_cap_get_format_framing(cap, format);
|
||||
ret= ooCallAddG711Capability(call, OO_G711ALAW64K, txframes,
|
||||
txframes, OORXANDTX,
|
||||
ret= ooCallAddG711Capability(call, OO_G711ALAW64K, txframes,
|
||||
txframes, OORXANDTX,
|
||||
&ooh323c_start_receive_channel,
|
||||
&ooh323c_start_transmit_channel,
|
||||
&ooh323c_stop_receive_channel,
|
||||
&ooh323c_stop_receive_channel,
|
||||
&ooh323c_stop_transmit_channel);
|
||||
}
|
||||
|
||||
|
@ -448,7 +448,7 @@ int ooh323c_set_capability_for_call
|
|||
ret = ooCallAddG726Capability(call, OO_G726, txframes, grxframes, FALSE,
|
||||
OORXANDTX, &ooh323c_start_receive_channel,
|
||||
&ooh323c_start_transmit_channel,
|
||||
&ooh323c_stop_receive_channel,
|
||||
&ooh323c_stop_receive_channel,
|
||||
&ooh323c_stop_transmit_channel);
|
||||
|
||||
}
|
||||
|
@ -463,23 +463,23 @@ int ooh323c_set_capability_for_call
|
|||
ret = ooCallAddG726Capability(call, OO_G726AAL2, txframes, grxframes, FALSE,
|
||||
OORXANDTX, &ooh323c_start_receive_channel,
|
||||
&ooh323c_start_transmit_channel,
|
||||
&ooh323c_stop_receive_channel,
|
||||
&ooh323c_stop_receive_channel,
|
||||
&ooh323c_stop_transmit_channel);
|
||||
|
||||
}
|
||||
|
||||
if(ast_format_cmp(format, ast_format_g729) == AST_FORMAT_CMP_EQUAL)
|
||||
{
|
||||
|
||||
|
||||
txframes = (ast_format_cap_get_format_framing(cap, format))/10;
|
||||
if (gH323Debug) {
|
||||
ast_verb(0, "\tAdding g729A capability to call(%s, %s)\n",
|
||||
call->callType, call->callToken);
|
||||
}
|
||||
ret= ooCallAddG729Capability(call, OO_G729A, txframes, txframes,
|
||||
ret= ooCallAddG729Capability(call, OO_G729A, txframes, txframes,
|
||||
OORXANDTX, &ooh323c_start_receive_channel,
|
||||
&ooh323c_start_transmit_channel,
|
||||
&ooh323c_stop_receive_channel,
|
||||
&ooh323c_stop_receive_channel,
|
||||
&ooh323c_stop_transmit_channel);
|
||||
if (g729onlyA)
|
||||
continue;
|
||||
|
@ -487,19 +487,19 @@ int ooh323c_set_capability_for_call
|
|||
ast_verb(0, "\tAdding g729 capability to call(%s, %s)\n",
|
||||
call->callType, call->callToken);
|
||||
}
|
||||
ret|= ooCallAddG729Capability(call, OO_G729, txframes, txframes,
|
||||
ret|= ooCallAddG729Capability(call, OO_G729, txframes, txframes,
|
||||
OORXANDTX, &ooh323c_start_receive_channel,
|
||||
&ooh323c_start_transmit_channel,
|
||||
&ooh323c_stop_receive_channel,
|
||||
&ooh323c_stop_receive_channel,
|
||||
&ooh323c_stop_transmit_channel);
|
||||
if (gH323Debug) {
|
||||
ast_verb(0, "\tAdding g729B capability to call(%s, %s)\n",
|
||||
call->callType, call->callToken);
|
||||
}
|
||||
ret|= ooCallAddG729Capability(call, OO_G729B, txframes, txframes,
|
||||
ret|= ooCallAddG729Capability(call, OO_G729B, txframes, txframes,
|
||||
OORXANDTX, &ooh323c_start_receive_channel,
|
||||
&ooh323c_start_transmit_channel,
|
||||
&ooh323c_stop_receive_channel,
|
||||
&ooh323c_stop_receive_channel,
|
||||
&ooh323c_stop_transmit_channel);
|
||||
|
||||
}
|
||||
|
@ -510,10 +510,10 @@ int ooh323c_set_capability_for_call
|
|||
ast_verb(0, "\tAdding g7231 capability to call (%s, %s)\n",
|
||||
call->callType, call->callToken);
|
||||
}
|
||||
ret = ooCallAddG7231Capability(call, OO_G7231, 1, 1, FALSE,
|
||||
ret = ooCallAddG7231Capability(call, OO_G7231, 1, 1, FALSE,
|
||||
OORXANDTX, &ooh323c_start_receive_channel,
|
||||
&ooh323c_start_transmit_channel,
|
||||
&ooh323c_stop_receive_channel,
|
||||
&ooh323c_stop_receive_channel,
|
||||
&ooh323c_stop_transmit_channel);
|
||||
|
||||
}
|
||||
|
@ -524,10 +524,10 @@ int ooh323c_set_capability_for_call
|
|||
ast_verb(0, "\tAdding h263 capability to call (%s, %s)\n",
|
||||
call->callType, call->callToken);
|
||||
}
|
||||
ret = ooCallAddH263VideoCapability(call, OO_H263VIDEO, 1, 0, 0, 0, 0, 320*1024,
|
||||
ret = ooCallAddH263VideoCapability(call, OO_H263VIDEO, 1, 0, 0, 0, 0, 320*1024,
|
||||
OORXANDTX, &ooh323c_start_receive_channel,
|
||||
&ooh323c_start_transmit_channel,
|
||||
&ooh323c_stop_receive_channel,
|
||||
&ooh323c_stop_receive_channel,
|
||||
&ooh323c_stop_transmit_channel);
|
||||
|
||||
}
|
||||
|
@ -535,26 +535,26 @@ int ooh323c_set_capability_for_call
|
|||
if(ast_format_cmp(format, ast_format_gsm) == AST_FORMAT_CMP_EQUAL)
|
||||
{
|
||||
if (gH323Debug) {
|
||||
ast_verb(0, "\tAdding gsm capability to call(%s, %s)\n",
|
||||
ast_verb(0, "\tAdding gsm capability to call(%s, %s)\n",
|
||||
call->callType, call->callToken);
|
||||
}
|
||||
ret = ooCallAddGSMCapability(call, OO_GSMFULLRATE, 4, FALSE, FALSE,
|
||||
ret = ooCallAddGSMCapability(call, OO_GSMFULLRATE, 4, FALSE, FALSE,
|
||||
OORXANDTX, &ooh323c_start_receive_channel,
|
||||
&ooh323c_start_transmit_channel,
|
||||
&ooh323c_stop_receive_channel,
|
||||
&ooh323c_stop_receive_channel,
|
||||
&ooh323c_stop_transmit_channel);
|
||||
}
|
||||
|
||||
if(ast_format_cmp(format, ast_format_speex) == AST_FORMAT_CMP_EQUAL)
|
||||
{
|
||||
if (gH323Debug) {
|
||||
ast_verb(0, "\tAdding Speex capability to call(%s, %s)\n",
|
||||
ast_verb(0, "\tAdding Speex capability to call(%s, %s)\n",
|
||||
call->callType, call->callToken);
|
||||
}
|
||||
ret = ooCallAddSpeexCapability(call, OO_SPEEX, 4, 4, FALSE,
|
||||
ret = ooCallAddSpeexCapability(call, OO_SPEEX, 4, 4, FALSE,
|
||||
OORXANDTX, &ooh323c_start_receive_channel,
|
||||
&ooh323c_start_transmit_channel,
|
||||
&ooh323c_stop_receive_channel,
|
||||
&ooh323c_stop_receive_channel,
|
||||
&ooh323c_stop_transmit_channel);
|
||||
}
|
||||
|
||||
|
@ -569,7 +569,7 @@ int ooh323c_set_aliases(ooAliases * aliases)
|
|||
while(cur)
|
||||
{
|
||||
switch(cur->type)
|
||||
{
|
||||
{
|
||||
case T_H225AliasAddress_dialedDigits:
|
||||
ooH323EpAddAliasDialedDigits(cur->value);
|
||||
break;
|
||||
|
@ -589,7 +589,7 @@ int ooh323c_set_aliases(ooAliases * aliases)
|
|||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
int ooh323c_start_receive_channel(ooCallData *call, ooLogicalChannel *pChannel)
|
||||
{
|
||||
struct ast_format *tmpfmt = NULL;
|
||||
|
@ -694,5 +694,3 @@ struct ast_format *convertH323CapToAsteriskCap(int cap)
|
|||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -1,20 +1,20 @@
|
|||
/*
|
||||
* Copyright (C) 2004-2005 by Objective Systems, Inc.
|
||||
*
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* This software is furnished under an open source license and may be
|
||||
* used and copied only in accordance with the terms of this license.
|
||||
* The text of the license may generally be found in the root
|
||||
* directory of this installation in the COPYING file. It
|
||||
* can also be viewed online at the following URL:
|
||||
*
|
||||
* http://www.obj-sys.com/open/license.html
|
||||
*
|
||||
* Any redistributions of this file including modified versions must
|
||||
* Any redistributions of this file including modified versions must
|
||||
* maintain this copyright notice.
|
||||
*
|
||||
*****************************************************************************/
|
||||
#ifndef _OO_H323CDRIVER_H_
|
||||
#define __OO_H323DRIVER_H_
|
||||
#define _OO_H323CDRIVER_H_
|
||||
#include "chan_ooh323.h"
|
||||
#include "ootypes.h"
|
||||
#include "ooh323ep.h"
|
||||
|
|
|
@ -35,7 +35,6 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
|||
#include <sys/stat.h>
|
||||
|
||||
#include <mysql/mysql.h>
|
||||
#include <mysql/mysql_version.h>
|
||||
#include <mysql/errmsg.h>
|
||||
|
||||
#include "asterisk/channel.h"
|
||||
|
@ -126,7 +125,6 @@ static char *handle_cli_realtime_mysql_status(struct ast_cli_entry *e, int cmd,
|
|||
static char *handle_cli_realtime_mysql_cache(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a);
|
||||
static int load_mysql_config(struct ast_config *config, const char *category, struct mysql_conn *conn);
|
||||
static int require_mysql(const char *database, const char *tablename, va_list ap);
|
||||
static int internal_require(const char *database, const char *table, ...) attribute_sentinel;
|
||||
|
||||
static struct ast_cli_entry cli_realtime_mysql_status[] = {
|
||||
AST_CLI_DEFINE(handle_cli_realtime_mysql_status, "Shows connection information for the MySQL RealTime driver"),
|
||||
|
@ -165,16 +163,6 @@ static struct mysql_conn *find_database(const char *database, int for_write)
|
|||
|
||||
#define release_database(a) ast_mutex_unlock(&(a)->lock)
|
||||
|
||||
static int internal_require(const char *database, const char *table, ...)
|
||||
{
|
||||
va_list ap;
|
||||
int res;
|
||||
va_start(ap, table);
|
||||
res = require_mysql(database, table, ap);
|
||||
va_end(ap);
|
||||
return res;
|
||||
}
|
||||
|
||||
static void destroy_table(struct tables *table)
|
||||
{
|
||||
struct columns *column;
|
||||
|
@ -316,6 +304,11 @@ static char *decode_chunk(char *chunk)
|
|||
return orig;
|
||||
}
|
||||
|
||||
#define IS_SQL_LIKE_CLAUSE(x) ((x) && ast_ends_with(x, " LIKE"))
|
||||
|
||||
/* MySQL requires us to escape the escape... yo dawg */
|
||||
static char *ESCAPE_CLAUSE = " ESCAPE '\\\\'";
|
||||
|
||||
static struct ast_variable *realtime_mysql(const char *database, const char *table, const struct ast_variable *rt_fields)
|
||||
{
|
||||
struct mysql_conn *dbh;
|
||||
|
@ -328,6 +321,7 @@ static struct ast_variable *realtime_mysql(const char *database, const char *tab
|
|||
char *stringp;
|
||||
char *chunk;
|
||||
char *op;
|
||||
char *escape = "";
|
||||
const struct ast_variable *field = rt_fields;
|
||||
struct ast_variable *var=NULL, *prev=NULL;
|
||||
|
||||
|
@ -358,20 +352,29 @@ static struct ast_variable *realtime_mysql(const char *database, const char *tab
|
|||
/* Create the first part of the query using the first parameter/value pairs we just extracted
|
||||
If there is only 1 set, then we have our query. Otherwise, loop thru the list and concat */
|
||||
|
||||
if (!strchr(field->name, ' '))
|
||||
op = " =";
|
||||
else
|
||||
if (!strchr(field->name, ' ')) {
|
||||
op = " =";
|
||||
} else {
|
||||
op = "";
|
||||
if (IS_SQL_LIKE_CLAUSE(field->name)) {
|
||||
escape = ESCAPE_CLAUSE;
|
||||
}
|
||||
}
|
||||
|
||||
ESCAPE_STRING(buf, field->value);
|
||||
ast_str_set(&sql, 0, "SELECT * FROM %s WHERE %s%s '%s'", table, field->name, op, ast_str_buffer(buf));
|
||||
ast_str_set(&sql, 0, "SELECT * FROM %s WHERE %s%s '%s'%s", table, field->name, op, ast_str_buffer(buf), escape);
|
||||
while ((field = field->next)) {
|
||||
if (!strchr(field->name, ' '))
|
||||
op = " =";
|
||||
else
|
||||
escape = "";
|
||||
if (!strchr(field->name, ' ')) {
|
||||
op = " =";
|
||||
} else {
|
||||
op = "";
|
||||
if (IS_SQL_LIKE_CLAUSE(field->name)) {
|
||||
escape = ESCAPE_CLAUSE;
|
||||
}
|
||||
}
|
||||
ESCAPE_STRING(buf, field->value);
|
||||
ast_str_append(&sql, 0, " AND %s%s '%s'", field->name, op, ast_str_buffer(buf));
|
||||
ast_str_append(&sql, 0, " AND %s%s '%s'%s", field->name, op, ast_str_buffer(buf), escape);
|
||||
}
|
||||
|
||||
ast_debug(1, "MySQL RealTime: Retrieve SQL: %s\n", ast_str_buffer(sql));
|
||||
|
@ -429,6 +432,7 @@ static struct ast_config *realtime_multi_mysql(const char *database, const char
|
|||
char *stringp;
|
||||
char *chunk;
|
||||
char *op;
|
||||
char *escape = "";
|
||||
const struct ast_variable *field = rt_fields;
|
||||
struct ast_variable *var = NULL;
|
||||
struct ast_config *cfg = NULL;
|
||||
|
@ -444,7 +448,7 @@ static struct ast_config *realtime_multi_mysql(const char *database, const char
|
|||
release_database(dbh);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
if (!(cfg = ast_config_new())) {
|
||||
/* If I can't alloc memory at this point, why bother doing anything else? */
|
||||
ast_log(LOG_WARNING, "Out of memory!\n");
|
||||
|
@ -475,17 +479,29 @@ static struct ast_config *realtime_multi_mysql(const char *database, const char
|
|||
/* Create the first part of the query using the first parameter/value pairs we just extracted
|
||||
If there is only 1 set, then we have our query. Otherwise, loop thru the list and concat */
|
||||
|
||||
if (!strchr(field->name, ' '))
|
||||
if (!strchr(field->name, ' ')) {
|
||||
op = " =";
|
||||
else
|
||||
} else {
|
||||
op = "";
|
||||
if (IS_SQL_LIKE_CLAUSE(field->name)) {
|
||||
escape = ESCAPE_CLAUSE;
|
||||
}
|
||||
}
|
||||
|
||||
ESCAPE_STRING(buf, field->value);
|
||||
ast_str_set(&sql, 0, "SELECT * FROM %s WHERE %s%s '%s'", table, field->name, op, ast_str_buffer(buf));
|
||||
ast_str_set(&sql, 0, "SELECT * FROM %s WHERE %s%s '%s'%s", table, field->name, op, ast_str_buffer(buf), escape);
|
||||
while ((field = field->next)) {
|
||||
if (!strchr(field->name, ' ')) op = " ="; else op = "";
|
||||
escape = "";
|
||||
if (!strchr(field->name, ' ')) {
|
||||
op = " =";
|
||||
} else {
|
||||
op = "";
|
||||
if (IS_SQL_LIKE_CLAUSE(field->name)) {
|
||||
escape = ESCAPE_CLAUSE;
|
||||
}
|
||||
}
|
||||
ESCAPE_STRING(buf, field->value);
|
||||
ast_str_append(&sql, 0, " AND %s%s '%s'", field->name, op, ast_str_buffer(buf));
|
||||
ast_str_append(&sql, 0, " AND %s%s '%s'%s", field->name, op, ast_str_buffer(buf), escape);
|
||||
}
|
||||
|
||||
if (initfield) {
|
||||
|
@ -508,9 +524,8 @@ static struct ast_config *realtime_multi_mysql(const char *database, const char
|
|||
|
||||
while ((row = mysql_fetch_row(result))) {
|
||||
var = NULL;
|
||||
cat = ast_category_new("", "", -1);
|
||||
cat = ast_category_new_anonymous();
|
||||
if (!cat) {
|
||||
ast_log(LOG_WARNING, "Out of memory!\n");
|
||||
continue;
|
||||
}
|
||||
for (i = 0; i < numFields; i++) {
|
||||
|
@ -541,7 +556,7 @@ static struct ast_config *realtime_multi_mysql(const char *database, const char
|
|||
static int update_mysql(const char *database, const char *tablename, const char *keyfield, const char *lookup, const struct ast_variable *rt_fields)
|
||||
{
|
||||
struct mysql_conn *dbh;
|
||||
my_ulonglong numrows;
|
||||
uint64_t numrows;
|
||||
const struct ast_variable *field = rt_fields;
|
||||
struct ast_str *sql = ast_str_thread_get(&sql_buf, 100), *buf = ast_str_thread_get(&scratch_buf, 100);
|
||||
struct tables *table;
|
||||
|
@ -600,11 +615,6 @@ static int update_mysql(const char *database, const char *tablename, const char
|
|||
ESCAPE_STRING(buf, field->value);
|
||||
ast_str_set(&sql, 0, "UPDATE %s SET `%s` = '%s'", tablename, field->name, ast_str_buffer(buf));
|
||||
|
||||
/* If the column length isn't long enough, give a chance to lengthen it. */
|
||||
if (strncmp(column->type, "char", 4) == 0 || strncmp(column->type, "varchar", 7) == 0) {
|
||||
internal_require(database, tablename, field->name, RQ_CHAR, ast_str_strlen(buf), SENTINEL);
|
||||
}
|
||||
|
||||
while ((field = field->next)) {
|
||||
/* If the column is not within the table, then skip it */
|
||||
if (!(column = find_column(table, field->name))) {
|
||||
|
@ -614,11 +624,6 @@ static int update_mysql(const char *database, const char *tablename, const char
|
|||
|
||||
ESCAPE_STRING(buf, field->value);
|
||||
ast_str_append(&sql, 0, ", `%s` = '%s'", field->name, ast_str_buffer(buf));
|
||||
|
||||
/* If the column length isn't long enough, give a chance to lengthen it. */
|
||||
if (strncmp(column->type, "char", 4) == 0 || strncmp(column->type, "varchar", 7) == 0) {
|
||||
internal_require(database, tablename, field->name, RQ_CHAR, ast_str_strlen(buf), SENTINEL);
|
||||
}
|
||||
}
|
||||
|
||||
ESCAPE_STRING(buf, lookup);
|
||||
|
@ -638,7 +643,7 @@ static int update_mysql(const char *database, const char *tablename, const char
|
|||
release_table(table);
|
||||
release_database(dbh);
|
||||
|
||||
ast_debug(1, "MySQL RealTime: Updated %llu rows on table: %s\n", numrows, tablename);
|
||||
ast_debug(1, "MySQL RealTime: Updated %" PRIu64 " rows on table: %s\n", numrows, tablename);
|
||||
|
||||
/* From http://dev.mysql.com/doc/mysql/en/mysql-affected-rows.html
|
||||
* An integer greater than zero indicates the number of rows affected
|
||||
|
@ -652,7 +657,7 @@ static int update_mysql(const char *database, const char *tablename, const char
|
|||
static int update2_mysql(const char *database, const char *tablename, const struct ast_variable *lookup_fields, const struct ast_variable *update_fields)
|
||||
{
|
||||
struct mysql_conn *dbh;
|
||||
my_ulonglong numrows;
|
||||
uint64_t numrows;
|
||||
int first;
|
||||
const struct ast_variable *field;
|
||||
struct ast_str *sql = ast_str_thread_get(&sql_buf, 100), *buf = ast_str_thread_get(&scratch_buf, 100);
|
||||
|
@ -703,11 +708,6 @@ static int update2_mysql(const char *database, const char *tablename, const stru
|
|||
ESCAPE_STRING(buf, field->value);
|
||||
ast_str_append(&where, 0, "%s `%s` = '%s'", first ? "" : " AND", field->name, ast_str_buffer(buf));
|
||||
first = 0;
|
||||
|
||||
/* If the column length isn't long enough, give a chance to lengthen it. */
|
||||
if (strncmp(column->type, "char", 4) == 0 || strncmp(column->type, "varchar", 7) == 0) {
|
||||
internal_require(database, tablename, field->name, RQ_CHAR, ast_str_strlen(buf), SENTINEL);
|
||||
}
|
||||
}
|
||||
|
||||
first = 1;
|
||||
|
@ -721,11 +721,6 @@ static int update2_mysql(const char *database, const char *tablename, const stru
|
|||
ESCAPE_STRING(buf, field->value);
|
||||
ast_str_append(&sql, 0, "%s `%s` = '%s'", first ? "" : ",", field->name, ast_str_buffer(buf));
|
||||
first = 0;
|
||||
|
||||
/* If the column length isn't long enough, give a chance to lengthen it. */
|
||||
if (strncmp(column->type, "char", 4) == 0 || strncmp(column->type, "varchar", 7) == 0) {
|
||||
internal_require(database, tablename, field->name, RQ_CHAR, ast_str_strlen(buf), SENTINEL);
|
||||
}
|
||||
}
|
||||
|
||||
release_table(table);
|
||||
|
@ -745,7 +740,7 @@ static int update2_mysql(const char *database, const char *tablename, const stru
|
|||
numrows = mysql_affected_rows(&dbh->handle);
|
||||
release_database(dbh);
|
||||
|
||||
ast_debug(1, "MySQL RealTime: Updated %llu rows on table: %s\n", numrows, tablename);
|
||||
ast_debug(1, "MySQL RealTime: Updated %" PRIu64 " rows on table: %s\n", numrows, tablename);
|
||||
|
||||
/* From http://dev.mysql.com/doc/mysql/en/mysql-affected-rows.html
|
||||
* An integer greater than zero indicates the number of rows affected
|
||||
|
@ -755,11 +750,10 @@ static int update2_mysql(const char *database, const char *tablename, const stru
|
|||
|
||||
return (int)numrows;
|
||||
}
|
||||
|
||||
|
||||
static int store_mysql(const char *database, const char *table, const struct ast_variable *rt_fields)
|
||||
{
|
||||
struct mysql_conn *dbh;
|
||||
my_ulonglong insertid;
|
||||
struct ast_str *sql = ast_str_thread_get(&sql_buf, 16);
|
||||
struct ast_str *sql2 = ast_str_thread_get(&sql2_buf, 16);
|
||||
struct ast_str *buf = ast_str_thread_get(&scratch_buf, 16);
|
||||
|
@ -792,15 +786,11 @@ static int store_mysql(const char *database, const char *table, const struct ast
|
|||
ast_str_set(&sql, 0, "INSERT INTO %s (`%s`", table, field->name);
|
||||
ast_str_set(&sql2, 0, ") VALUES ('%s'", ast_str_buffer(buf));
|
||||
|
||||
internal_require(database, table, field->name, RQ_CHAR, ast_str_strlen(buf), SENTINEL);
|
||||
|
||||
while ((field = field->next)) {
|
||||
ESCAPE_STRING(buf, field->value);
|
||||
|
||||
if (internal_require(database, table, field->name, RQ_CHAR, ast_str_strlen(buf), SENTINEL) == 0) {
|
||||
ast_str_append(&sql, 0, ", `%s`", field->name);
|
||||
ast_str_append(&sql2, 0, ", '%s'", ast_str_buffer(buf));
|
||||
}
|
||||
ast_str_append(&sql, 0, ", `%s`", field->name);
|
||||
ast_str_append(&sql2, 0, ", '%s'", ast_str_buffer(buf));
|
||||
}
|
||||
ast_str_append(&sql, 0, "%s)", ast_str_buffer(sql2));
|
||||
ast_debug(1,"MySQL RealTime: Insert SQL: %s\n", ast_str_buffer(sql));
|
||||
|
@ -812,24 +802,17 @@ static int store_mysql(const char *database, const char *table, const struct ast
|
|||
return -1;
|
||||
}
|
||||
|
||||
/*!\note The return value is non-portable and may change in future versions. */
|
||||
insertid = mysql_insert_id(&dbh->handle);
|
||||
release_database(dbh);
|
||||
|
||||
ast_debug(1, "MySQL RealTime: row inserted on table: %s, id: %llu\n", table, insertid);
|
||||
ast_debug(1, "MySQL RealTime: row inserted on table: %s\n", table);
|
||||
|
||||
/* From http://dev.mysql.com/doc/mysql/en/mysql-affected-rows.html
|
||||
* An integer greater than zero indicates the number of rows affected
|
||||
* Zero indicates that no records were updated
|
||||
* -1 indicates that the query returned an error (although, if the query failed, it should have been caught above.)
|
||||
*/
|
||||
return (int)insertid;
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int destroy_mysql(const char *database, const char *table, const char *keyfield, const char *lookup, const struct ast_variable *rt_fields)
|
||||
{
|
||||
struct mysql_conn *dbh;
|
||||
my_ulonglong numrows;
|
||||
uint64_t numrows;
|
||||
struct ast_str *sql = ast_str_thread_get(&sql_buf, 16);
|
||||
struct ast_str *buf = ast_str_thread_get(&scratch_buf, 16);
|
||||
const struct ast_variable *field;
|
||||
|
@ -881,7 +864,7 @@ static int destroy_mysql(const char *database, const char *table, const char *ke
|
|||
numrows = mysql_affected_rows(&dbh->handle);
|
||||
release_database(dbh);
|
||||
|
||||
ast_debug(1, "MySQL RealTime: Deleted %llu rows on table: %s\n", numrows, table);
|
||||
ast_debug(1, "MySQL RealTime: Deleted %" PRIu64 " rows on table: %s\n", numrows, table);
|
||||
|
||||
/* From http://dev.mysql.com/doc/mysql/en/mysql-affected-rows.html
|
||||
* An integer greater than zero indicates the number of rows affected
|
||||
|
@ -891,13 +874,13 @@ static int destroy_mysql(const char *database, const char *table, const char *ke
|
|||
|
||||
return (int)numrows;
|
||||
}
|
||||
|
||||
|
||||
static struct ast_config *config_mysql(const char *database, const char *table, const char *file, struct ast_config *cfg, struct ast_flags config_flags, const char *unused, const char *who_asked)
|
||||
{
|
||||
struct mysql_conn *dbh;
|
||||
MYSQL_RES *result;
|
||||
MYSQL_ROW row;
|
||||
my_ulonglong num_rows;
|
||||
uint64_t num_rows;
|
||||
struct ast_variable *new_v;
|
||||
struct ast_category *cur_cat = NULL;
|
||||
struct ast_str *sql = ast_str_thread_get(&sql_buf, 200);
|
||||
|
@ -935,7 +918,7 @@ static struct ast_config *config_mysql(const char *database, const char *table,
|
|||
|
||||
if ((result = mysql_store_result(&dbh->handle))) {
|
||||
num_rows = mysql_num_rows(result);
|
||||
ast_debug(1, "MySQL RealTime: Found %llu rows.\n", num_rows);
|
||||
ast_debug(1, "MySQL RealTime: Found %" PRIu64 " rows.\n", num_rows);
|
||||
|
||||
/* There might exist a better way to access the column names other than counting,
|
||||
* but I believe that would require another loop that we don't need. */
|
||||
|
@ -951,8 +934,8 @@ static struct ast_config *config_mysql(const char *database, const char *table,
|
|||
}
|
||||
|
||||
if (strcmp(last, row[0]) || last_cat_metric != atoi(row[3])) {
|
||||
if (!(cur_cat = ast_category_new(row[0], "", -1))) {
|
||||
ast_log(LOG_WARNING, "Out of memory!\n");
|
||||
cur_cat = ast_category_new_dynamic(row[0]);
|
||||
if (!cur_cat) {
|
||||
break;
|
||||
}
|
||||
strcpy(last, row[0]);
|
||||
|
@ -989,105 +972,14 @@ static int unload_mysql(const char *database, const char *tablename)
|
|||
return cur ? 0 : -1;
|
||||
}
|
||||
|
||||
static int modify_mysql(const char *database, const char *tablename, struct columns *column, require_type type, int len)
|
||||
{
|
||||
/*!\note Cannot use ANY of the same scratch space as is used in other functions, as this one is interspersed. */
|
||||
struct ast_str *sql = ast_str_thread_get(&modify_buf, 100), *escbuf = ast_str_thread_get(&modify2_buf, 100);
|
||||
struct ast_str *typestr = ast_str_thread_get(&modify3_buf, 30);
|
||||
int waschar = strncasecmp(column->type, "char", 4) == 0 ? 1 : 0;
|
||||
int wasvarchar = strncasecmp(column->type, "varchar", 7) == 0 ? 1 : 0;
|
||||
int res = 0;
|
||||
struct mysql_conn *dbh;
|
||||
|
||||
if (!(dbh = find_database(database, 1))) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
do {
|
||||
if (type == RQ_CHAR || waschar || wasvarchar) {
|
||||
if (wasvarchar) {
|
||||
ast_str_set(&typestr, 0, "VARCHAR(%d)", len);
|
||||
} else {
|
||||
ast_str_set(&typestr, 0, "CHAR(%d)", len);
|
||||
}
|
||||
} else if (type == RQ_UINTEGER1) {
|
||||
ast_str_set(&typestr, 0, "tinyint(3) unsigned");
|
||||
} else if (type == RQ_INTEGER1) {
|
||||
ast_str_set(&typestr, 0, "tinyint(4)");
|
||||
} else if (type == RQ_UINTEGER2) {
|
||||
ast_str_set(&typestr, 0, "smallint(5) unsigned");
|
||||
} else if (type == RQ_INTEGER2) {
|
||||
ast_str_set(&typestr, 0, "smallint(6)");
|
||||
} else if (type == RQ_UINTEGER3) {
|
||||
ast_str_set(&typestr, 0, "mediumint(8) unsigned");
|
||||
} else if (type == RQ_INTEGER3) {
|
||||
ast_str_set(&typestr, 0, "mediumint(8)");
|
||||
} else if (type == RQ_UINTEGER4) {
|
||||
ast_str_set(&typestr, 0, "int(10) unsigned");
|
||||
} else if (type == RQ_INTEGER4) {
|
||||
ast_str_set(&typestr, 0, "int(11)");
|
||||
} else if (type == RQ_UINTEGER8) {
|
||||
ast_str_set(&typestr, 0, "bigint(19) unsigned");
|
||||
} else if (type == RQ_INTEGER8) {
|
||||
ast_str_set(&typestr, 0, "bigint(20)");
|
||||
} else if (type == RQ_DATETIME) {
|
||||
ast_str_set(&typestr, 0, "datetime");
|
||||
} else if (type == RQ_DATE) {
|
||||
ast_str_set(&typestr, 0, "date");
|
||||
} else if (type == RQ_FLOAT) {
|
||||
ast_str_set(&typestr, 0, "FLOAT(%d,2)", len);
|
||||
} else {
|
||||
ast_log(LOG_ERROR, "Unknown type (should NEVER happen)\n");
|
||||
res = -1;
|
||||
break;
|
||||
}
|
||||
ast_str_set(&sql, 0, "ALTER TABLE %s MODIFY `%s` %s", tablename, column->name, ast_str_buffer(typestr));
|
||||
if (!column->null) {
|
||||
ast_str_append(&sql, 0, " NOT NULL");
|
||||
}
|
||||
if (!ast_strlen_zero(column->dflt)) {
|
||||
ESCAPE_STRING(escbuf, column->dflt);
|
||||
ast_str_append(&sql, 0, " DEFAULT '%s'", ast_str_buffer(escbuf));
|
||||
}
|
||||
|
||||
if (!mysql_reconnect(dbh)) {
|
||||
ast_log(LOG_ERROR, "Unable to add column: %s\n", ast_str_buffer(sql));
|
||||
res = -1;
|
||||
break;
|
||||
}
|
||||
|
||||
/* Execution. */
|
||||
if (mysql_real_query(&dbh->handle, ast_str_buffer(sql), ast_str_strlen(sql))) {
|
||||
ast_log(LOG_WARNING, "MySQL RealTime: Failed to modify database: %s\n", mysql_error(&dbh->handle));
|
||||
ast_debug(1, "MySQL RealTime: Query: %s\n", ast_str_buffer(sql));
|
||||
res = -1;
|
||||
}
|
||||
} while (0);
|
||||
|
||||
release_database(dbh);
|
||||
return res;
|
||||
}
|
||||
|
||||
#define PICK_WHICH_ALTER_ACTION(stringtype) \
|
||||
if (table->database->requirements == RQ_WARN) { \
|
||||
ast_log(LOG_WARNING, "Realtime table %s@%s: column '%s' may not be large enough for " \
|
||||
"the required data length: %d (detected stringtype)\n", \
|
||||
tablename, database, column->name, size); \
|
||||
res = -1; \
|
||||
} else if (table->database->requirements == RQ_CREATECLOSE && modify_mysql(database, tablename, column, type, size) == 0) { \
|
||||
table_altered = 1; \
|
||||
} else if (table->database->requirements == RQ_CREATECHAR && modify_mysql(database, tablename, column, RQ_CHAR, size) == 0) { \
|
||||
table_altered = 1; \
|
||||
} else { \
|
||||
res = -1; \
|
||||
}
|
||||
|
||||
static int require_mysql(const char *database, const char *tablename, va_list ap)
|
||||
{
|
||||
struct columns *column;
|
||||
struct tables *table = find_table(database, tablename);
|
||||
char *elm;
|
||||
int type, size, res = 0, table_altered = 0;
|
||||
int type;
|
||||
int size;
|
||||
int res = 0;
|
||||
|
||||
if (!table) {
|
||||
ast_log(LOG_WARNING, "Table %s not found in database. This table should exist if you're using realtime.\n", tablename);
|
||||
|
@ -1097,55 +989,54 @@ static int require_mysql(const char *database, const char *tablename, va_list ap
|
|||
while ((elm = va_arg(ap, char *))) {
|
||||
type = va_arg(ap, require_type);
|
||||
size = va_arg(ap, int);
|
||||
|
||||
AST_LIST_TRAVERSE(&table->columns, column, list) {
|
||||
if (strcmp(column->name, elm) == 0) {
|
||||
/* Char can hold anything, as long as it is large enough */
|
||||
if (strncmp(column->type, "char", 4) == 0 || strncmp(column->type, "varchar", 7) == 0) {
|
||||
if ((size > column->len) && column->len != -1) {
|
||||
if (table->database->requirements == RQ_WARN) {
|
||||
ast_log(LOG_WARNING, "Realtime table %s@%s: Column '%s' should be at least %d long, but is only %d long.\n", database, tablename, column->name, size, column->len);
|
||||
res = -1;
|
||||
} else if (modify_mysql(database, tablename, column, type, size) == 0) {
|
||||
table_altered = 1;
|
||||
} else {
|
||||
res = -1;
|
||||
}
|
||||
ast_log(LOG_WARNING, "Realtime table %s@%s: Column '%s' should be at least %d long, but is only %d long.\n", database, tablename, column->name, size, column->len);
|
||||
res = -1;
|
||||
}
|
||||
} else if (strcasestr(column->type, "unsigned")) {
|
||||
if (!ast_rq_is_int(type)) {
|
||||
if (table->database->requirements == RQ_WARN) {
|
||||
ast_log(LOG_WARNING, "Realtime table %s@%s: column '%s' cannot be type '%s' (need %s)\n",
|
||||
database, tablename, column->name, column->type,
|
||||
type == RQ_CHAR ? "char" : type == RQ_FLOAT ? "float" :
|
||||
type == RQ_DATETIME ? "datetime" : type == RQ_DATE ? "date" : "a rather stiff drink");
|
||||
res = -1;
|
||||
} else if (table->database->requirements == RQ_CREATECLOSE && modify_mysql(database, tablename, column, type, size) == 0) {
|
||||
table_altered = 1;
|
||||
} else if (table->database->requirements == RQ_CREATECHAR && modify_mysql(database, tablename, column, RQ_CHAR, size) == 0) {
|
||||
table_altered = 1;
|
||||
} else {
|
||||
res = -1;
|
||||
}
|
||||
ast_log(LOG_WARNING, "Realtime table %s@%s: column '%s' cannot be type '%s' (need %s)\n",
|
||||
database, tablename, column->name, column->type,
|
||||
type == RQ_CHAR ? "char" : type == RQ_FLOAT ? "float" :
|
||||
type == RQ_DATETIME ? "datetime" : type == RQ_DATE ? "date" : "a rather stiff drink");
|
||||
res = -1;
|
||||
} else if (strncasecmp(column->type, "tinyint", 1) == 0) {
|
||||
if (type != RQ_UINTEGER1) {
|
||||
PICK_WHICH_ALTER_ACTION(unsigned tinyint)
|
||||
ast_log(LOG_WARNING, "Realtime table %s@%s: column '%s' may not be large enough for " \
|
||||
"the required data length: %d (detected stringtype)\n", \
|
||||
tablename, database, column->name, size); \
|
||||
res = -1; \
|
||||
}
|
||||
} else if (strncasecmp(column->type, "smallint", 1) == 0) {
|
||||
if (type != RQ_UINTEGER1 && type != RQ_INTEGER1 && type != RQ_UINTEGER2) {
|
||||
PICK_WHICH_ALTER_ACTION(unsigned smallint)
|
||||
ast_log(LOG_WARNING, "Realtime table %s@%s: column '%s' may not be large enough for " \
|
||||
"the required data length: %d (detected stringtype)\n", \
|
||||
tablename, database, column->name, size); \
|
||||
res = -1; \
|
||||
}
|
||||
} else if (strncasecmp(column->type, "mediumint", 1) == 0) {
|
||||
if (type != RQ_UINTEGER1 && type != RQ_INTEGER1 &&
|
||||
type != RQ_UINTEGER2 && type != RQ_INTEGER2 &&
|
||||
type != RQ_UINTEGER3) {
|
||||
PICK_WHICH_ALTER_ACTION(unsigned mediumint)
|
||||
ast_log(LOG_WARNING, "Realtime table %s@%s: column '%s' may not be large enough for " \
|
||||
"the required data length: %d (detected stringtype)\n", \
|
||||
tablename, database, column->name, size); \
|
||||
res = -1; \
|
||||
}
|
||||
} else if (strncasecmp(column->type, "int", 1) == 0) {
|
||||
if (type != RQ_UINTEGER1 && type != RQ_INTEGER1 &&
|
||||
type != RQ_UINTEGER2 && type != RQ_INTEGER2 &&
|
||||
type != RQ_UINTEGER3 && type != RQ_INTEGER3 &&
|
||||
type != RQ_UINTEGER4) {
|
||||
PICK_WHICH_ALTER_ACTION(unsigned int)
|
||||
ast_log(LOG_WARNING, "Realtime table %s@%s: column '%s' may not be large enough for " \
|
||||
"the required data length: %d (detected stringtype)\n", \
|
||||
tablename, database, column->name, size); \
|
||||
res = -1; \
|
||||
}
|
||||
} else if (strncasecmp(column->type, "bigint", 1) == 0) {
|
||||
if (type != RQ_UINTEGER1 && type != RQ_INTEGER1 &&
|
||||
|
@ -1153,45 +1044,52 @@ static int require_mysql(const char *database, const char *tablename, va_list ap
|
|||
type != RQ_UINTEGER3 && type != RQ_INTEGER3 &&
|
||||
type != RQ_UINTEGER4 && type != RQ_INTEGER4 &&
|
||||
type != RQ_UINTEGER8) {
|
||||
PICK_WHICH_ALTER_ACTION(unsigned bigint)
|
||||
ast_log(LOG_WARNING, "Realtime table %s@%s: column '%s' may not be large enough for " \
|
||||
"the required data length: %d (detected stringtype)\n", \
|
||||
tablename, database, column->name, size); \
|
||||
res = -1; \
|
||||
}
|
||||
}
|
||||
} else if (strcasestr(column->type, "int")) {
|
||||
if (!ast_rq_is_int(type)) {
|
||||
if (table->database->requirements == RQ_WARN) {
|
||||
ast_log(LOG_WARNING, "Realtime table %s@%s: column '%s' cannot be type '%s' (need %s)\n",
|
||||
database, tablename, column->name, column->type,
|
||||
type == RQ_CHAR ? "char" : type == RQ_FLOAT ? "float" :
|
||||
type == RQ_DATETIME ? "datetime" : type == RQ_DATE ? "date" :
|
||||
"to get a life, rather than writing silly error messages");
|
||||
res = -1;
|
||||
} else if (table->database->requirements == RQ_CREATECLOSE && modify_mysql(database, tablename, column, type, size) == 0) {
|
||||
table_altered = 1;
|
||||
} else if (table->database->requirements == RQ_CREATECHAR && modify_mysql(database, tablename, column, RQ_CHAR, size) == 0) {
|
||||
table_altered = 1;
|
||||
} else {
|
||||
res = -1;
|
||||
}
|
||||
ast_log(LOG_WARNING, "Realtime table %s@%s: column '%s' cannot be type '%s' (need %s)\n",
|
||||
database, tablename, column->name, column->type,
|
||||
type == RQ_CHAR ? "char" : type == RQ_FLOAT ? "float" :
|
||||
type == RQ_DATETIME ? "datetime" : type == RQ_DATE ? "date" :
|
||||
"to get a life, rather than writing silly error messages");
|
||||
res = -1;
|
||||
} else if (strncasecmp(column->type, "tinyint", 1) == 0) {
|
||||
if (type != RQ_INTEGER1) {
|
||||
PICK_WHICH_ALTER_ACTION(tinyint)
|
||||
ast_log(LOG_WARNING, "Realtime table %s@%s: column '%s' may not be large enough for " \
|
||||
"the required data length: %d (detected stringtype)\n", \
|
||||
tablename, database, column->name, size); \
|
||||
res = -1; \
|
||||
}
|
||||
} else if (strncasecmp(column->type, "smallint", 1) == 0) {
|
||||
if (type != RQ_UINTEGER1 && type != RQ_INTEGER1 && type != RQ_INTEGER2) {
|
||||
PICK_WHICH_ALTER_ACTION(smallint)
|
||||
ast_log(LOG_WARNING, "Realtime table %s@%s: column '%s' may not be large enough for " \
|
||||
"the required data length: %d (detected stringtype)\n", \
|
||||
tablename, database, column->name, size); \
|
||||
res = -1; \
|
||||
}
|
||||
} else if (strncasecmp(column->type, "mediumint", 1) == 0) {
|
||||
if (type != RQ_UINTEGER1 && type != RQ_INTEGER1 &&
|
||||
type != RQ_UINTEGER2 && type != RQ_INTEGER2 &&
|
||||
type != RQ_INTEGER3) {
|
||||
PICK_WHICH_ALTER_ACTION(mediumint)
|
||||
ast_log(LOG_WARNING, "Realtime table %s@%s: column '%s' may not be large enough for " \
|
||||
"the required data length: %d (detected stringtype)\n", \
|
||||
tablename, database, column->name, size); \
|
||||
res = -1; \
|
||||
}
|
||||
} else if (strncasecmp(column->type, "int", 1) == 0) {
|
||||
if (type != RQ_UINTEGER1 && type != RQ_INTEGER1 &&
|
||||
type != RQ_UINTEGER2 && type != RQ_INTEGER2 &&
|
||||
type != RQ_UINTEGER3 && type != RQ_INTEGER3 &&
|
||||
type != RQ_INTEGER4) {
|
||||
PICK_WHICH_ALTER_ACTION(int)
|
||||
ast_log(LOG_WARNING, "Realtime table %s@%s: column '%s' may not be large enough for " \
|
||||
"the required data length: %d (detected stringtype)\n", \
|
||||
tablename, database, column->name, size); \
|
||||
res = -1; \
|
||||
}
|
||||
} else if (strncasecmp(column->type, "bigint", 1) == 0) {
|
||||
if (type != RQ_UINTEGER1 && type != RQ_INTEGER1 &&
|
||||
|
@ -1199,131 +1097,41 @@ static int require_mysql(const char *database, const char *tablename, va_list ap
|
|||
type != RQ_UINTEGER3 && type != RQ_INTEGER3 &&
|
||||
type != RQ_UINTEGER4 && type != RQ_INTEGER4 &&
|
||||
type != RQ_INTEGER8) {
|
||||
PICK_WHICH_ALTER_ACTION(bigint)
|
||||
ast_log(LOG_WARNING, "Realtime table %s@%s: column '%s' may not be large enough for " \
|
||||
"the required data length: %d (detected stringtype)\n", \
|
||||
tablename, database, column->name, size); \
|
||||
res = -1; \
|
||||
}
|
||||
}
|
||||
} else if (strncmp(column->type, "float", 5) == 0 && !ast_rq_is_int(type) && type != RQ_FLOAT) {
|
||||
if (table->database->requirements == RQ_WARN) {
|
||||
} else if (strncmp(column->type, "float", 5) == 0) {
|
||||
if (!ast_rq_is_int(type) && type != RQ_FLOAT) {
|
||||
ast_log(LOG_WARNING, "Realtime table %s@%s: Column %s cannot be a %s\n", tablename, database, column->name, column->type);
|
||||
res = -1;
|
||||
} else if (table->database->requirements == RQ_CREATECLOSE && modify_mysql(database, tablename, column, type, size) == 0) {
|
||||
table_altered = 1;
|
||||
} else if (table->database->requirements == RQ_CREATECHAR && modify_mysql(database, tablename, column, RQ_CHAR, size) == 0) {
|
||||
table_altered = 1;
|
||||
} else {
|
||||
res = -1;
|
||||
}
|
||||
} else if ((strncmp(column->type, "datetime", 8) == 0 || strncmp(column->type, "timestamp", 9) == 0) && type != RQ_DATETIME) {
|
||||
if (table->database->requirements == RQ_WARN) {
|
||||
} else if (strncmp(column->type, "datetime", 8) == 0 || strncmp(column->type, "timestamp", 9) == 0) {
|
||||
if (type != RQ_DATETIME) {
|
||||
ast_log(LOG_WARNING, "Realtime table %s@%s: Column %s cannot be a %s\n", tablename, database, column->name, column->type);
|
||||
res = -1;
|
||||
} else if (table->database->requirements == RQ_CREATECLOSE && modify_mysql(database, tablename, column, type, size) == 0) {
|
||||
table_altered = 1;
|
||||
} else if (table->database->requirements == RQ_CREATECHAR && modify_mysql(database, tablename, column, RQ_CHAR, size) == 0) {
|
||||
table_altered = 1;
|
||||
} else {
|
||||
res = -1;
|
||||
}
|
||||
} else if ((strncmp(column->type, "date", 4) == 0) && type != RQ_DATE) {
|
||||
if (table->database->requirements == RQ_WARN) {
|
||||
} else if (strncmp(column->type, "date", 4) == 0) {
|
||||
if (type != RQ_DATE) {
|
||||
ast_log(LOG_WARNING, "Realtime table %s@%s: Column %s cannot be a %s\n", tablename, database, column->name, column->type);
|
||||
res = -1;
|
||||
} else if (table->database->requirements == RQ_CREATECLOSE && modify_mysql(database, tablename, column, type, size) == 0) {
|
||||
table_altered = 1;
|
||||
} else if (table->database->requirements == RQ_CREATECHAR && modify_mysql(database, tablename, column, RQ_CHAR, size) == 0) {
|
||||
table_altered = 1;
|
||||
} else {
|
||||
res = -1;
|
||||
}
|
||||
} else { /* Other, possibly unsupported types? */
|
||||
if (table->database->requirements == RQ_WARN) {
|
||||
ast_log(LOG_WARNING, "Possibly unsupported column type '%s' on column '%s'\n", column->type, column->name);
|
||||
res = -1;
|
||||
} else if (table->database->requirements == RQ_CREATECLOSE && modify_mysql(database, tablename, column, type, size) == 0) {
|
||||
table_altered = 1;
|
||||
} else if (table->database->requirements == RQ_CREATECHAR && modify_mysql(database, tablename, column, RQ_CHAR, size) == 0) {
|
||||
table_altered = 1;
|
||||
} else {
|
||||
}
|
||||
ast_log(LOG_WARNING, "Possibly unsupported column type '%s' on column '%s'\n", column->type, column->name);
|
||||
res = -1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!column) {
|
||||
if (table->database->requirements == RQ_WARN) {
|
||||
ast_log(LOG_WARNING, "Table %s requires a column '%s' of size '%d', but no such column exists.\n", tablename, elm, size);
|
||||
} else {
|
||||
struct ast_str *sql = ast_str_thread_get(&modify_buf, 100), *fieldtype = ast_str_thread_get(&modify3_buf, 16);
|
||||
|
||||
if (table->database->requirements == RQ_CREATECHAR || type == RQ_CHAR) {
|
||||
ast_str_set(&fieldtype, 0, "CHAR(%d)", size);
|
||||
} else if (type == RQ_UINTEGER1 || type == RQ_UINTEGER2 || type == RQ_UINTEGER3 || type == RQ_UINTEGER4 || type == RQ_UINTEGER8) {
|
||||
if (type == RQ_UINTEGER1) {
|
||||
ast_str_set(&fieldtype, 0, "TINYINT(3) UNSIGNED");
|
||||
} else if (type == RQ_UINTEGER2) {
|
||||
ast_str_set(&fieldtype, 0, "SMALLINT(5) UNSIGNED");
|
||||
} else if (type == RQ_UINTEGER3) {
|
||||
ast_str_set(&fieldtype, 0, "MEDIUMINT(8) UNSIGNED");
|
||||
} else if (type == RQ_UINTEGER4) {
|
||||
ast_str_set(&fieldtype, 0, "INT(10) UNSIGNED");
|
||||
} else if (type == RQ_UINTEGER8) {
|
||||
ast_str_set(&fieldtype, 0, "BIGINT(20) UNSIGNED");
|
||||
} else {
|
||||
ast_log(LOG_WARNING, "Somebody should check this code for a rather large bug... it's about to squash Tokyo.\n");
|
||||
continue;
|
||||
}
|
||||
} else if (ast_rq_is_int(type)) {
|
||||
if (type == RQ_INTEGER1) {
|
||||
ast_str_set(&fieldtype, 0, "TINYINT(3)");
|
||||
} else if (type == RQ_INTEGER2) {
|
||||
ast_str_set(&fieldtype, 0, "SMALLINT(5)");
|
||||
} else if (type == RQ_INTEGER3) {
|
||||
ast_str_set(&fieldtype, 0, "MEDIUMINT(8)");
|
||||
} else if (type == RQ_INTEGER4) {
|
||||
ast_str_set(&fieldtype, 0, "INT(10)");
|
||||
} else if (type == RQ_INTEGER8) {
|
||||
ast_str_set(&fieldtype, 0, "BIGINT(20)");
|
||||
} else {
|
||||
ast_log(LOG_WARNING, "Somebody should check this code for a rather large bug... it's about to eat Cincinnati.\n");
|
||||
continue;
|
||||
}
|
||||
} else if (type == RQ_FLOAT) {
|
||||
ast_str_set(&fieldtype, 0, "FLOAT");
|
||||
} else if (type == RQ_DATE) {
|
||||
ast_str_set(&fieldtype, 0, "DATE");
|
||||
} else if (type == RQ_DATETIME) {
|
||||
ast_str_set(&fieldtype, 0, "DATETIME");
|
||||
} else {
|
||||
continue;
|
||||
}
|
||||
ast_str_set(&sql, 0, "ALTER TABLE %s ADD COLUMN %s %s", tablename, elm, ast_str_buffer(fieldtype));
|
||||
|
||||
ast_mutex_lock(&table->database->lock);
|
||||
if (!mysql_reconnect(table->database)) {
|
||||
ast_mutex_unlock(&table->database->lock);
|
||||
ast_log(LOG_ERROR, "Unable to add column: %s\n", ast_str_buffer(sql));
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Execution. */
|
||||
if (mysql_real_query(&table->database->handle, ast_str_buffer(sql), ast_str_strlen(sql))) {
|
||||
ast_log(LOG_WARNING, "MySQL RealTime: Failed to query database. Check debug for more info.\n");
|
||||
ast_debug(1, "MySQL RealTime: Query: %s\n", ast_str_buffer(sql));
|
||||
ast_debug(1, "MySQL RealTime: Query Failed because: %s\n", mysql_error(&table->database->handle));
|
||||
} else {
|
||||
table_altered = 1;
|
||||
}
|
||||
}
|
||||
ast_log(LOG_WARNING, "Table %s requires a column '%s' of size '%d', but no such column exists.\n", tablename, elm, size);
|
||||
}
|
||||
}
|
||||
release_table(table);
|
||||
|
||||
/* If we altered the table, we must refresh the cache */
|
||||
if (table_altered) {
|
||||
unload_mysql(database, tablename);
|
||||
release_table(find_table(database, tablename));
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
|
@ -1512,7 +1320,7 @@ static int load_mysql_config(struct ast_config *config, const char *category, st
|
|||
ast_debug(1, "MySQL RealTime database name: %s\n", conn->name);
|
||||
ast_debug(1, "MySQL RealTime user: %s\n", conn->user);
|
||||
ast_debug(1, "MySQL RealTime password: %s\n", conn->pass);
|
||||
if(conn->charset)
|
||||
if(!ast_strlen_zero(conn->charset))
|
||||
ast_debug(1, "MySQL RealTime charset: %s\n", conn->charset);
|
||||
|
||||
return 1;
|
||||
|
@ -1527,13 +1335,13 @@ static int mysql_reconnect(struct mysql_conn *conn)
|
|||
/* mutex lock should have been locked before calling this function. */
|
||||
|
||||
reconnect_tryagain:
|
||||
if ((!conn->connected) && (!ast_strlen_zero(conn->host) || conn->sock) && !ast_strlen_zero(conn->user) && !ast_strlen_zero(conn->name)) {
|
||||
if ((!conn->connected) && (!ast_strlen_zero(conn->host) || !ast_strlen_zero(conn->sock)) && !ast_strlen_zero(conn->user) && !ast_strlen_zero(conn->name)) {
|
||||
if (!mysql_init(&conn->handle)) {
|
||||
ast_log(LOG_WARNING, "MySQL RealTime: Insufficient memory to allocate MySQL resource.\n");
|
||||
conn->connected = 0;
|
||||
return 0;
|
||||
}
|
||||
if(conn->charset && strlen(conn->charset) > 2){
|
||||
if(strlen(conn->charset) > 2){
|
||||
char set_names[255];
|
||||
char statement[512];
|
||||
snprintf(set_names, sizeof(set_names), "SET NAMES %s", conn->charset);
|
||||
|
@ -1754,4 +1562,3 @@ AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "MySQL RealTime Config
|
|||
.reload = reload,
|
||||
.load_pri = AST_MODPRI_REALTIME_DRIVER,
|
||||
);
|
||||
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue