bridge_channel.c 97 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128
  1. /*
  2. * Asterisk -- An open source telephony toolkit.
  3. *
  4. * Copyright (C) 2007 - 2009, Digium, Inc.
  5. *
  6. * Joshua Colp <jcolp@digium.com>
  7. *
  8. * See http://www.asterisk.org for more information about
  9. * the Asterisk project. Please do not directly contact
  10. * any of the maintainers of this project for assistance;
  11. * the project provides a web site, mailing lists and IRC
  12. * channels for your use.
  13. *
  14. * This program is free software, distributed under the terms of
  15. * the GNU General Public License Version 2. See the LICENSE file
  16. * at the top of the source tree.
  17. */
  18. /*! \file
  19. *
  20. * \brief Bridging Channel API
  21. *
  22. * \author Joshua Colp <jcolp@digium.com>
  23. * \author Richard Mudgett <rmudgett@digium.com>
  24. * \author Matt Jordan <mjordan@digium.com>
  25. *
  26. */
  27. /*** MODULEINFO
  28. <support_level>core</support_level>
  29. ***/
  30. #include "asterisk.h"
  31. #include <signal.h>
  32. #include "asterisk/heap.h"
  33. #include "asterisk/alertpipe.h"
  34. #include "asterisk/astobj2.h"
  35. #include "asterisk/stringfields.h"
  36. #include "asterisk/app.h"
  37. #include "asterisk/pbx.h"
  38. #include "asterisk/channel.h"
  39. #include "asterisk/timing.h"
  40. #include "asterisk/bridge.h"
  41. #include "asterisk/bridge_channel.h"
  42. #include "asterisk/bridge_after.h"
  43. #include "asterisk/bridge_channel_internal.h"
  44. #include "asterisk/bridge_internal.h"
  45. #include "asterisk/stasis_bridges.h"
  46. #include "asterisk/stasis_channels.h"
  47. #include "asterisk/musiconhold.h"
  48. #include "asterisk/features_config.h"
  49. #include "asterisk/parking.h"
  50. #include "asterisk/causes.h"
  51. #include "asterisk/test.h"
  52. #include "asterisk/sem.h"
  53. #include "asterisk/stream.h"
  54. #include "asterisk/message.h"
  55. #include "asterisk/core_local.h"
  56. /*!
  57. * \brief Used to queue an action frame onto a bridge channel and write an action frame into a bridge.
  58. * \since 12.0.0
  59. *
  60. * \param bridge_channel Which channel work with.
  61. * \param action Type of bridge action frame.
  62. * \param data Frame payload data to pass.
  63. * \param datalen Frame payload data length to pass.
  64. *
  65. * \retval 0 on success.
  66. * \retval -1 on error.
  67. */
  68. typedef int (*ast_bridge_channel_post_action_data)(struct ast_bridge_channel *bridge_channel, enum bridge_channel_action_type action, const void *data, size_t datalen);
  69. /*!
  70. * \brief Counter used for assigning synchronous bridge action IDs
  71. */
  72. static int sync_ids;
  73. /*!
  74. * \brief Frame payload for synchronous bridge actions.
  75. *
  76. * The payload serves as a wrapper around the actual payload of the
  77. * frame, with the addition of an id used to find the associated
  78. * bridge_sync object.
  79. */
  80. struct sync_payload {
  81. /*! Unique ID for this synchronous action */
  82. unsigned int id;
  83. /*! Actual frame data to process */
  84. unsigned char data[0];
  85. };
  86. /*!
  87. * \brief Synchronous bridge action object.
  88. *
  89. * Synchronous bridge actions require the ability for one thread to wait
  90. * and for another thread to indicate that the action has completed. This
  91. * structure facilitates that goal by providing synchronization structures.
  92. */
  93. struct bridge_sync {
  94. /*! Unique ID of this synchronization object. Corresponds with ID in synchronous frame payload */
  95. unsigned int id;
  96. /*! Semaphore used for synchronization */
  97. struct ast_sem sem;
  98. /*! Pointer to next entry in the list */
  99. AST_LIST_ENTRY(bridge_sync) list;
  100. };
  101. /*!
  102. * \brief List holding active synchronous action objects.
  103. */
  104. static AST_RWLIST_HEAD_STATIC(sync_structs, bridge_sync);
  105. /*!
  106. * \brief Initialize a synchronous bridge object.
  107. *
  108. * This both initializes the structure and adds it to the list of
  109. * synchronization structures.
  110. *
  111. * \param sync_struct The synchronization object to initialize.
  112. * \param id ID to assign to the synchronization object.
  113. */
  114. static void bridge_sync_init(struct bridge_sync *sync_struct, unsigned int id)
  115. {
  116. memset(sync_struct, 0, sizeof(*sync_struct));
  117. sync_struct->id = id;
  118. ast_sem_init(&sync_struct->sem, 0, 0);
  119. AST_RWLIST_WRLOCK(&sync_structs);
  120. AST_RWLIST_INSERT_TAIL(&sync_structs, sync_struct, list);
  121. AST_RWLIST_UNLOCK(&sync_structs);
  122. }
  123. /*!
  124. * \brief Clean up a synchronization bridge object.
  125. *
  126. * This frees fields within the synchronization object and removes
  127. * it from the list of active synchronization objects.
  128. *
  129. * Since synchronization objects are stack-allocated, it is vital
  130. * that this is called before the synchronization object goes
  131. * out of scope.
  132. *
  133. * \param sync_struct Synchronization object to clean up.
  134. */
  135. static void bridge_sync_cleanup(struct bridge_sync *sync_struct)
  136. {
  137. struct bridge_sync *iter;
  138. AST_RWLIST_WRLOCK(&sync_structs);
  139. AST_LIST_TRAVERSE_SAFE_BEGIN(&sync_structs, iter, list) {
  140. if (iter->id == sync_struct->id) {
  141. AST_LIST_REMOVE_CURRENT(list);
  142. break;
  143. }
  144. }
  145. AST_LIST_TRAVERSE_SAFE_END;
  146. AST_RWLIST_UNLOCK(&sync_structs);
  147. ast_sem_destroy(&sync_struct->sem);
  148. }
  149. /*!
  150. * \brief Failsafe for synchronous bridge action waiting.
  151. *
  152. * When waiting for a synchronous bridge action to complete,
  153. * if there is a frame resource leak somewhere, it is possible
  154. * that we will never get notified that the synchronous action
  155. * completed.
  156. *
  157. * If a significant amount of time passes, then we will abandon
  158. * waiting for the synchrnous bridge action to complete.
  159. *
  160. * This constant represents the number of milliseconds we will
  161. * wait for the bridge action to complete.
  162. */
  163. #define PLAYBACK_TIMEOUT (600 * 1000)
  164. /*!
  165. * \brief Wait for a synchronous bridge action to complete.
  166. *
  167. * \param sync_struct Synchronization object corresponding to the bridge action.
  168. */
  169. static void bridge_sync_wait(struct bridge_sync *sync_struct)
  170. {
  171. struct timeval timeout_val = ast_tvadd(ast_tvnow(), ast_samp2tv(PLAYBACK_TIMEOUT, 1000));
  172. struct timespec timeout_spec = {
  173. .tv_sec = timeout_val.tv_sec,
  174. .tv_nsec = timeout_val.tv_usec * 1000,
  175. };
  176. ast_sem_timedwait(&sync_struct->sem, &timeout_spec);
  177. }
  178. /*!
  179. * \brief Signal that waiting for a synchronous bridge action is no longer necessary.
  180. *
  181. * This may occur for several reasons
  182. * \li The synchronous bridge action has completed.
  183. * \li The bridge channel has been removed from the bridge.
  184. * \li The synchronous bridge action could not be queued.
  185. *
  186. * \param sync_struct Synchronization object corresponding to the bridge action.
  187. */
  188. static void bridge_sync_signal(struct bridge_sync *sync_struct)
  189. {
  190. ast_sem_post(&sync_struct->sem);
  191. }
  192. struct ast_channel *ast_bridge_channel_get_chan(struct ast_bridge_channel *bridge_channel)
  193. {
  194. struct ast_channel *chan;
  195. ao2_lock(bridge_channel);
  196. chan = ao2_bump(bridge_channel->chan);
  197. ao2_unlock(bridge_channel);
  198. return chan;
  199. }
  200. void ast_bridge_channel_lock_bridge(struct ast_bridge_channel *bridge_channel)
  201. {
  202. struct ast_bridge *bridge;
  203. for (;;) {
  204. /* Safely get the bridge pointer */
  205. ast_bridge_channel_lock(bridge_channel);
  206. bridge = bridge_channel->bridge;
  207. ao2_ref(bridge, +1);
  208. ast_bridge_channel_unlock(bridge_channel);
  209. /* Lock the bridge and see if it is still the bridge we need to lock. */
  210. ast_bridge_lock(bridge);
  211. if (bridge == bridge_channel->bridge) {
  212. ao2_ref(bridge, -1);
  213. return;
  214. }
  215. ast_bridge_unlock(bridge);
  216. ao2_ref(bridge, -1);
  217. }
  218. }
  219. int ast_bridge_channel_notify_talking(struct ast_bridge_channel *bridge_channel, int started_talking)
  220. {
  221. struct ast_frame action = {
  222. .frametype = AST_FRAME_BRIDGE_ACTION,
  223. .subclass.integer = started_talking
  224. ? BRIDGE_CHANNEL_ACTION_TALKING_START : BRIDGE_CHANNEL_ACTION_TALKING_STOP,
  225. };
  226. return ast_bridge_channel_queue_frame(bridge_channel, &action);
  227. }
  228. /*!
  229. * \internal
  230. * \brief Poke the bridge_channel thread
  231. */
  232. static void bridge_channel_poke(struct ast_bridge_channel *bridge_channel)
  233. {
  234. if (!pthread_equal(pthread_self(), bridge_channel->thread)) {
  235. /* Wake up the bridge channel thread. */
  236. ast_queue_frame(bridge_channel->chan, &ast_null_frame);
  237. }
  238. }
  239. /*!
  240. * \internal
  241. * \brief Set actual cause on channel.
  242. * \since 12.0.0
  243. *
  244. * \param chan Channel to set cause.
  245. * \param cause Cause to set on channel.
  246. * If cause <= 0 then use cause on channel if cause still <= 0 use AST_CAUSE_NORMAL_CLEARING.
  247. *
  248. * \return Actual cause set on channel.
  249. */
  250. static int channel_set_cause(struct ast_channel *chan, int cause)
  251. {
  252. ast_channel_lock(chan);
  253. if (cause <= 0) {
  254. cause = ast_channel_hangupcause(chan);
  255. if (cause <= 0) {
  256. cause = AST_CAUSE_NORMAL_CLEARING;
  257. }
  258. }
  259. ast_channel_hangupcause_set(chan, cause);
  260. ast_channel_unlock(chan);
  261. return cause;
  262. }
  263. void ast_bridge_channel_leave_bridge_nolock(struct ast_bridge_channel *bridge_channel, enum bridge_channel_state new_state, int cause)
  264. {
  265. if (bridge_channel->state != BRIDGE_CHANNEL_STATE_WAIT) {
  266. return;
  267. }
  268. ast_debug(1, "Setting %p(%s) state from:%u to:%u\n",
  269. bridge_channel, ast_channel_name(bridge_channel->chan), bridge_channel->state,
  270. new_state);
  271. channel_set_cause(bridge_channel->chan, cause);
  272. ast_channel_lock(bridge_channel->chan);
  273. ast_bridge_vars_set(bridge_channel->chan, NULL, NULL);
  274. ast_channel_unlock(bridge_channel->chan);
  275. /* Change the state on the bridge channel */
  276. bridge_channel->state = new_state;
  277. bridge_channel_poke(bridge_channel);
  278. }
  279. void ast_bridge_channel_leave_bridge(struct ast_bridge_channel *bridge_channel, enum bridge_channel_state new_state, int cause)
  280. {
  281. ast_bridge_channel_lock(bridge_channel);
  282. ast_bridge_channel_leave_bridge_nolock(bridge_channel, new_state, cause);
  283. ast_bridge_channel_unlock(bridge_channel);
  284. }
  285. struct ast_bridge_channel *ast_bridge_channel_peer(struct ast_bridge_channel *bridge_channel)
  286. {
  287. struct ast_bridge *bridge = bridge_channel->bridge;
  288. struct ast_bridge_channel *other = NULL;
  289. if (bridge_channel->in_bridge && bridge->num_channels == 2) {
  290. AST_LIST_TRAVERSE(&bridge->channels, other, entry) {
  291. if (other != bridge_channel) {
  292. break;
  293. }
  294. }
  295. }
  296. return other;
  297. }
  298. void ast_bridge_channel_restore_formats(struct ast_bridge_channel *bridge_channel)
  299. {
  300. ast_assert(bridge_channel->read_format != NULL);
  301. ast_assert(bridge_channel->write_format != NULL);
  302. ast_channel_lock(bridge_channel->chan);
  303. /* Restore original formats of the channel as they came in */
  304. if (ast_format_cmp(ast_channel_readformat(bridge_channel->chan), bridge_channel->read_format) == AST_FORMAT_CMP_NOT_EQUAL) {
  305. ast_debug(1, "Bridge is returning %p(%s) to read format %s\n",
  306. bridge_channel, ast_channel_name(bridge_channel->chan),
  307. ast_format_get_name(bridge_channel->read_format));
  308. if (ast_set_read_format(bridge_channel->chan, bridge_channel->read_format)) {
  309. ast_debug(1, "Bridge failed to return %p(%s) to read format %s\n",
  310. bridge_channel, ast_channel_name(bridge_channel->chan),
  311. ast_format_get_name(bridge_channel->read_format));
  312. }
  313. }
  314. if (ast_format_cmp(ast_channel_writeformat(bridge_channel->chan), bridge_channel->write_format) == AST_FORMAT_CMP_NOT_EQUAL) {
  315. ast_debug(1, "Bridge is returning %p(%s) to write format %s\n",
  316. bridge_channel, ast_channel_name(bridge_channel->chan),
  317. ast_format_get_name(bridge_channel->write_format));
  318. if (ast_set_write_format(bridge_channel->chan, bridge_channel->write_format)) {
  319. ast_debug(1, "Bridge failed to return %p(%s) to write format %s\n",
  320. bridge_channel, ast_channel_name(bridge_channel->chan),
  321. ast_format_get_name(bridge_channel->write_format));
  322. }
  323. }
  324. ast_channel_unlock(bridge_channel->chan);
  325. }
  326. struct ast_bridge *ast_bridge_channel_merge_inhibit(struct ast_bridge_channel *bridge_channel, int request)
  327. {
  328. struct ast_bridge *bridge;
  329. ast_bridge_channel_lock_bridge(bridge_channel);
  330. bridge = bridge_channel->bridge;
  331. ao2_ref(bridge, +1);
  332. bridge_merge_inhibit_nolock(bridge, request);
  333. ast_bridge_unlock(bridge);
  334. return bridge;
  335. }
  336. void ast_bridge_channel_update_linkedids(struct ast_bridge_channel *bridge_channel, struct ast_bridge_channel *swap)
  337. {
  338. struct ast_bridge_channel *other;
  339. struct ast_bridge *bridge = bridge_channel->bridge;
  340. struct ast_channel *oldest_linkedid_chan = bridge_channel->chan;
  341. AST_LIST_TRAVERSE(&bridge->channels, other, entry) {
  342. if (other == swap) {
  343. continue;
  344. }
  345. oldest_linkedid_chan = ast_channel_internal_oldest_linkedid(
  346. oldest_linkedid_chan, other->chan);
  347. }
  348. ast_channel_lock(bridge_channel->chan);
  349. ast_channel_internal_copy_linkedid(bridge_channel->chan, oldest_linkedid_chan);
  350. ast_channel_unlock(bridge_channel->chan);
  351. AST_LIST_TRAVERSE(&bridge->channels, other, entry) {
  352. if (other == swap) {
  353. continue;
  354. }
  355. ast_channel_lock(other->chan);
  356. ast_channel_internal_copy_linkedid(other->chan, oldest_linkedid_chan);
  357. ast_channel_unlock(other->chan);
  358. }
  359. }
  360. /*!
  361. * \internal
  362. * \brief Set dest's empty peeraccount with the src's non-empty accountcode.
  363. * \since 12.5.0
  364. *
  365. * \param dest Channel to update peeraccount.
  366. * \param src Channel to get accountcode from.
  367. *
  368. * \note Both channels are already locked.
  369. */
  370. static void channel_fill_empty_peeraccount(struct ast_channel *dest, struct ast_channel *src)
  371. {
  372. if (ast_strlen_zero(ast_channel_peeraccount(dest))
  373. && !ast_strlen_zero(ast_channel_accountcode(src))) {
  374. ast_debug(1, "Setting channel %s peeraccount with channel %s accountcode '%s'.\n",
  375. ast_channel_name(dest),
  376. ast_channel_name(src), ast_channel_accountcode(src));
  377. ast_channel_peeraccount_set(dest, ast_channel_accountcode(src));
  378. }
  379. }
  380. /*!
  381. * \internal
  382. * \brief Set dest's empty accountcode with the src's non-empty peeraccount.
  383. * \since 12.5.0
  384. *
  385. * \param dest Channel to update accountcode.
  386. * \param src Channel to get peeraccount from.
  387. *
  388. * \note Both channels are already locked.
  389. */
  390. static void channel_fill_empty_accountcode(struct ast_channel *dest, struct ast_channel *src)
  391. {
  392. if (ast_strlen_zero(ast_channel_accountcode(dest))
  393. && !ast_strlen_zero(ast_channel_peeraccount(src))) {
  394. ast_debug(1, "Setting channel %s accountcode with channel %s peeraccount '%s'.\n",
  395. ast_channel_name(dest),
  396. ast_channel_name(src), ast_channel_peeraccount(src));
  397. ast_channel_accountcode_set(dest, ast_channel_peeraccount(src));
  398. }
  399. }
  400. /*!
  401. * \internal
  402. * \brief Set empty peeraccount and accountcode in a channel from the other channel.
  403. * \since 12.5.0
  404. *
  405. * \param c0 First bridge channel to update.
  406. * \param c1 Second bridge channel to update.
  407. *
  408. * \note Both channels are already locked.
  409. */
  410. static void channel_set_empty_accountcodes(struct ast_channel *c0, struct ast_channel *c1)
  411. {
  412. /* Set empty peeraccount from the other channel's accountcode. */
  413. channel_fill_empty_peeraccount(c0, c1);
  414. channel_fill_empty_peeraccount(c1, c0);
  415. /* Set empty accountcode from the other channel's peeraccount. */
  416. channel_fill_empty_accountcode(c0, c1);
  417. channel_fill_empty_accountcode(c1, c0);
  418. }
  419. /*!
  420. * \internal
  421. * \brief Update dest's peeraccount with the src's different accountcode.
  422. * \since 12.5.0
  423. *
  424. * \param dest Channel to update peeraccount.
  425. * \param src Channel to get accountcode from.
  426. *
  427. * \note Both channels are already locked.
  428. */
  429. static void channel_update_peeraccount(struct ast_channel *dest, struct ast_channel *src)
  430. {
  431. if (strcmp(ast_channel_accountcode(src), ast_channel_peeraccount(dest))) {
  432. ast_debug(1, "Changing channel %s peeraccount '%s' to match channel %s accountcode '%s'.\n",
  433. ast_channel_name(dest), ast_channel_peeraccount(dest),
  434. ast_channel_name(src), ast_channel_accountcode(src));
  435. ast_channel_peeraccount_set(dest, ast_channel_accountcode(src));
  436. }
  437. }
  438. /*!
  439. * \internal
  440. * \brief Update peeraccounts to match the other channel's accountcode.
  441. * \since 12.5.0
  442. *
  443. * \param c0 First channel to update.
  444. * \param c1 Second channel to update.
  445. *
  446. * \note Both channels are already locked.
  447. */
  448. static void channel_update_peeraccounts(struct ast_channel *c0, struct ast_channel *c1)
  449. {
  450. channel_update_peeraccount(c0, c1);
  451. channel_update_peeraccount(c1, c0);
  452. }
  453. /*!
  454. * \internal
  455. * \brief Update channel accountcodes because a channel is joining a bridge.
  456. * \since 12.5.0
  457. *
  458. * \param joining Channel joining the bridge.
  459. * \param swap Channel being replaced by the joining channel. May be NULL.
  460. *
  461. * \note The bridge must be locked prior to calling this function.
  462. */
  463. static void bridge_channel_update_accountcodes_joining(struct ast_bridge_channel *joining, struct ast_bridge_channel *swap)
  464. {
  465. struct ast_bridge *bridge = joining->bridge;
  466. struct ast_bridge_channel *other;
  467. unsigned int swap_in_bridge = 0;
  468. unsigned int will_be_two_party;
  469. /*
  470. * Only update the peeraccount to match if the joining channel
  471. * will make it a two party bridge.
  472. */
  473. if (bridge->num_channels <= 2 && swap) {
  474. AST_LIST_TRAVERSE(&bridge->channels, other, entry) {
  475. if (other == swap) {
  476. swap_in_bridge = 1;
  477. break;
  478. }
  479. }
  480. }
  481. will_be_two_party = (1 == bridge->num_channels - swap_in_bridge);
  482. AST_LIST_TRAVERSE(&bridge->channels, other, entry) {
  483. if (other == swap) {
  484. continue;
  485. }
  486. ast_assert(joining != other);
  487. ast_channel_lock_both(joining->chan, other->chan);
  488. channel_set_empty_accountcodes(joining->chan, other->chan);
  489. if (will_be_two_party) {
  490. channel_update_peeraccounts(joining->chan, other->chan);
  491. }
  492. ast_channel_unlock(joining->chan);
  493. ast_channel_unlock(other->chan);
  494. }
  495. }
  496. /*!
  497. * \internal
  498. * \brief Update channel peeraccount codes because a channel has left a bridge.
  499. * \since 12.5.0
  500. *
  501. * \param leaving Channel leaving the bridge. (Has already been removed actually)
  502. *
  503. * \note The bridge must be locked prior to calling this function.
  504. */
  505. static void bridge_channel_update_accountcodes_leaving(struct ast_bridge_channel *leaving)
  506. {
  507. struct ast_bridge *bridge = leaving->bridge;
  508. struct ast_bridge_channel *first;
  509. struct ast_bridge_channel *second;
  510. if (bridge->num_channels != 2 || bridge->dissolved) {
  511. return;
  512. }
  513. first = AST_LIST_FIRST(&bridge->channels);
  514. second = AST_LIST_LAST(&bridge->channels);
  515. ast_assert(first && first != second);
  516. ast_channel_lock_both(first->chan, second->chan);
  517. channel_set_empty_accountcodes(first->chan, second->chan);
  518. channel_update_peeraccounts(first->chan, second->chan);
  519. ast_channel_unlock(second->chan);
  520. ast_channel_unlock(first->chan);
  521. }
  522. void ast_bridge_channel_update_accountcodes(struct ast_bridge_channel *joining, struct ast_bridge_channel *leaving)
  523. {
  524. if (joining) {
  525. bridge_channel_update_accountcodes_joining(joining, leaving);
  526. } else {
  527. bridge_channel_update_accountcodes_leaving(leaving);
  528. }
  529. }
  530. void ast_bridge_channel_kick(struct ast_bridge_channel *bridge_channel, int cause)
  531. {
  532. struct ast_bridge_features *features = bridge_channel->features;
  533. struct ast_bridge_hook *hook;
  534. struct ao2_iterator iter;
  535. ast_bridge_channel_lock(bridge_channel);
  536. if (bridge_channel->state == BRIDGE_CHANNEL_STATE_WAIT) {
  537. channel_set_cause(bridge_channel->chan, cause);
  538. cause = 0;
  539. }
  540. ast_bridge_channel_unlock(bridge_channel);
  541. /* Run any hangup hooks. */
  542. iter = ao2_iterator_init(features->other_hooks, 0);
  543. for (; (hook = ao2_iterator_next(&iter)); ao2_ref(hook, -1)) {
  544. int remove_me;
  545. if (hook->type != AST_BRIDGE_HOOK_TYPE_HANGUP) {
  546. continue;
  547. }
  548. remove_me = hook->callback(bridge_channel, hook->hook_pvt);
  549. if (remove_me) {
  550. ast_debug(1, "Hangup hook %p is being removed from %p(%s)\n",
  551. hook, bridge_channel, ast_channel_name(bridge_channel->chan));
  552. ao2_unlink(features->other_hooks, hook);
  553. }
  554. }
  555. ao2_iterator_destroy(&iter);
  556. /* Default hangup action. */
  557. ast_bridge_channel_leave_bridge(bridge_channel, BRIDGE_CHANNEL_STATE_END, cause);
  558. }
  559. /*!
  560. * \internal
  561. * \brief Write an \ref ast_frame into the bridge
  562. * \since 12.0.0
  563. *
  564. * \param bridge_channel Which channel is queueing the frame.
  565. * \param frame The frame to write into the bridge
  566. *
  567. * \retval 0 on success.
  568. * \retval -1 on error.
  569. */
  570. static int bridge_channel_write_frame(struct ast_bridge_channel *bridge_channel, struct ast_frame *frame)
  571. {
  572. const struct ast_control_t38_parameters *t38_parameters;
  573. int unmapped_stream_num;
  574. int deferred;
  575. ast_assert(frame->frametype != AST_FRAME_BRIDGE_ACTION_SYNC);
  576. ast_bridge_channel_lock_bridge(bridge_channel);
  577. /*
  578. * Map the frame to the bridge.
  579. * We need to lock the bridge_channel to make sure that bridge_channel->chan
  580. * isn't NULL and keep it locked while we do multistream processing.
  581. */
  582. ast_bridge_channel_lock(bridge_channel);
  583. if (bridge_channel->chan && ast_channel_is_multistream(bridge_channel->chan)) {
  584. unmapped_stream_num = frame->stream_num;
  585. switch (frame->frametype) {
  586. case AST_FRAME_VOICE:
  587. case AST_FRAME_VIDEO:
  588. case AST_FRAME_TEXT:
  589. case AST_FRAME_IMAGE:
  590. case AST_FRAME_RTCP:
  591. /* These frames need to be mapped to an appropriate write stream */
  592. if (frame->stream_num < 0) {
  593. /* Map to default stream */
  594. frame->stream_num = -1;
  595. break;
  596. }
  597. if (frame->stream_num < (int)AST_VECTOR_SIZE(&bridge_channel->stream_map.to_bridge)) {
  598. frame->stream_num = AST_VECTOR_GET(
  599. &bridge_channel->stream_map.to_bridge, frame->stream_num);
  600. if (0 <= frame->stream_num) {
  601. break;
  602. }
  603. }
  604. ast_bridge_channel_unlock(bridge_channel);
  605. ast_bridge_unlock(bridge_channel->bridge);
  606. /*
  607. * Ignore frame because we don't know how to map the frame
  608. * or the bridge is not expecting any media from that
  609. * stream.
  610. */
  611. return 0;
  612. case AST_FRAME_DTMF_BEGIN:
  613. case AST_FRAME_DTMF_END:
  614. /*
  615. * XXX It makes sense that DTMF could be on any audio stream.
  616. * For now we will only put it on the default audio stream.
  617. */
  618. default:
  619. frame->stream_num = -1;
  620. break;
  621. }
  622. } else {
  623. unmapped_stream_num = -1;
  624. frame->stream_num = -1;
  625. }
  626. ast_bridge_channel_unlock(bridge_channel);
  627. deferred = bridge_channel->bridge->technology->write(bridge_channel->bridge, bridge_channel, frame);
  628. if (deferred) {
  629. struct ast_frame *dup;
  630. dup = ast_frdup(frame);
  631. if (dup) {
  632. /*
  633. * We have to unmap the deferred frame so it comes back
  634. * in like a new frame.
  635. */
  636. dup->stream_num = unmapped_stream_num;
  637. ast_bridge_channel_lock(bridge_channel);
  638. AST_LIST_INSERT_HEAD(&bridge_channel->deferred_queue, dup, frame_list);
  639. ast_bridge_channel_unlock(bridge_channel);
  640. }
  641. }
  642. /* Remember any owed events to the bridge. */
  643. switch (frame->frametype) {
  644. case AST_FRAME_DTMF_BEGIN:
  645. bridge_channel->owed.dtmf_tv = ast_tvnow();
  646. bridge_channel->owed.dtmf_digit = frame->subclass.integer;
  647. break;
  648. case AST_FRAME_DTMF_END:
  649. bridge_channel->owed.dtmf_digit = '\0';
  650. break;
  651. case AST_FRAME_CONTROL:
  652. /*
  653. * We explicitly will not remember HOLD/UNHOLD frames because
  654. * things like attended transfers will handle them.
  655. */
  656. switch (frame->subclass.integer) {
  657. case AST_CONTROL_T38_PARAMETERS:
  658. t38_parameters = frame->data.ptr;
  659. switch (t38_parameters->request_response) {
  660. case AST_T38_REQUEST_NEGOTIATE:
  661. case AST_T38_NEGOTIATED:
  662. bridge_channel->owed.t38_terminate = 1;
  663. break;
  664. case AST_T38_REQUEST_TERMINATE:
  665. case AST_T38_TERMINATED:
  666. case AST_T38_REFUSED:
  667. bridge_channel->owed.t38_terminate = 0;
  668. break;
  669. default:
  670. break;
  671. }
  672. break;
  673. default:
  674. break;
  675. }
  676. break;
  677. default:
  678. break;
  679. }
  680. ast_bridge_unlock(bridge_channel->bridge);
  681. /*
  682. * Claim successful write to bridge. If deferred frame
  683. * support is added, claim successfully deferred.
  684. */
  685. return 0;
  686. }
  687. /*!
  688. * \internal
  689. * \brief Cancel owed events by the channel to the bridge.
  690. * \since 13.8.0
  691. *
  692. * \param bridge_channel Channel that owes events to the bridge.
  693. *
  694. * \note On entry, the bridge_channel->bridge is already locked.
  695. */
  696. static void bridge_channel_cancel_owed_events(struct ast_bridge_channel *bridge_channel)
  697. {
  698. bridge_channel->owed.dtmf_digit = '\0';
  699. bridge_channel->owed.t38_terminate = 0;
  700. }
  701. void bridge_channel_settle_owed_events(struct ast_bridge *orig_bridge, struct ast_bridge_channel *bridge_channel)
  702. {
  703. if (bridge_channel->owed.dtmf_digit) {
  704. struct ast_frame frame = {
  705. .frametype = AST_FRAME_DTMF_END,
  706. .subclass.integer = bridge_channel->owed.dtmf_digit,
  707. .src = "Bridge channel owed DTMF",
  708. };
  709. frame.len = ast_tvdiff_ms(ast_tvnow(), bridge_channel->owed.dtmf_tv);
  710. if (frame.len < option_dtmfminduration) {
  711. frame.len = option_dtmfminduration;
  712. }
  713. ast_log(LOG_DTMF, "DTMF end '%c' simulated to bridge %s because %s left. Duration %ld ms.\n",
  714. bridge_channel->owed.dtmf_digit, orig_bridge->uniqueid,
  715. ast_channel_name(bridge_channel->chan), frame.len);
  716. bridge_channel->owed.dtmf_digit = '\0';
  717. orig_bridge->technology->write(orig_bridge, NULL, &frame);
  718. }
  719. if (bridge_channel->owed.t38_terminate) {
  720. struct ast_control_t38_parameters t38_parameters = {
  721. .request_response = AST_T38_TERMINATED,
  722. };
  723. struct ast_frame frame = {
  724. .frametype = AST_FRAME_CONTROL,
  725. .subclass.integer = AST_CONTROL_T38_PARAMETERS,
  726. .data.ptr = &t38_parameters,
  727. .datalen = sizeof(t38_parameters),
  728. .src = "Bridge channel owed T.38 terminate",
  729. };
  730. ast_debug(1, "T.38 terminate simulated to bridge %s because %s left.\n",
  731. orig_bridge->uniqueid, ast_channel_name(bridge_channel->chan));
  732. bridge_channel->owed.t38_terminate = 0;
  733. orig_bridge->technology->write(orig_bridge, NULL, &frame);
  734. }
  735. }
  736. void bridge_channel_queue_deferred_frames(struct ast_bridge_channel *bridge_channel)
  737. {
  738. struct ast_frame *frame;
  739. ast_bridge_channel_lock(bridge_channel);
  740. ast_channel_lock(bridge_channel->chan);
  741. while ((frame = AST_LIST_REMOVE_HEAD(&bridge_channel->deferred_queue, frame_list))) {
  742. ast_queue_frame_head(bridge_channel->chan, frame);
  743. ast_frfree(frame);
  744. }
  745. ast_channel_unlock(bridge_channel->chan);
  746. ast_bridge_channel_unlock(bridge_channel);
  747. }
  748. void bridge_channel_internal_suspend_nolock(struct ast_bridge_channel *bridge_channel)
  749. {
  750. bridge_channel->suspended = 1;
  751. if (bridge_channel->in_bridge) {
  752. --bridge_channel->bridge->num_active;
  753. }
  754. /* Get technology bridge threads off of the channel. */
  755. if (bridge_channel->bridge->technology->suspend) {
  756. bridge_channel->bridge->technology->suspend(bridge_channel->bridge, bridge_channel);
  757. }
  758. }
  759. /*!
  760. * \internal
  761. * \brief Suspend a channel from a bridge.
  762. *
  763. * \param bridge_channel Channel to suspend.
  764. */
  765. static void bridge_channel_suspend(struct ast_bridge_channel *bridge_channel)
  766. {
  767. ast_bridge_channel_lock_bridge(bridge_channel);
  768. bridge_channel_internal_suspend_nolock(bridge_channel);
  769. ast_bridge_unlock(bridge_channel->bridge);
  770. }
  771. void bridge_channel_internal_unsuspend_nolock(struct ast_bridge_channel *bridge_channel)
  772. {
  773. bridge_channel->suspended = 0;
  774. if (bridge_channel->in_bridge) {
  775. ++bridge_channel->bridge->num_active;
  776. }
  777. /* Wake technology bridge threads to take care of channel again. */
  778. if (bridge_channel->bridge->technology->unsuspend) {
  779. bridge_channel->bridge->technology->unsuspend(bridge_channel->bridge, bridge_channel);
  780. }
  781. /* Wake suspended channel. */
  782. ast_bridge_channel_lock(bridge_channel);
  783. ast_cond_signal(&bridge_channel->cond);
  784. ast_bridge_channel_unlock(bridge_channel);
  785. }
  786. /*!
  787. * \internal
  788. * \brief Unsuspend a channel from a bridge.
  789. *
  790. * \param bridge_channel Channel to unsuspend.
  791. */
  792. static void bridge_channel_unsuspend(struct ast_bridge_channel *bridge_channel)
  793. {
  794. ast_bridge_channel_lock_bridge(bridge_channel);
  795. bridge_channel_internal_unsuspend_nolock(bridge_channel);
  796. ast_bridge_unlock(bridge_channel->bridge);
  797. }
  798. /*!
  799. * \internal
  800. * \brief Queue an action frame onto the bridge channel with data.
  801. * \since 12.0.0
  802. *
  803. * \param bridge_channel Which channel to queue the frame onto.
  804. * \param action Type of bridge action frame.
  805. * \param data Frame payload data to pass.
  806. * \param datalen Frame payload data length to pass.
  807. *
  808. * \retval 0 on success.
  809. * \retval -1 on error.
  810. */
  811. static int bridge_channel_queue_action_data(struct ast_bridge_channel *bridge_channel,
  812. enum bridge_channel_action_type action, const void *data, size_t datalen)
  813. {
  814. struct ast_frame frame = {
  815. .frametype = AST_FRAME_BRIDGE_ACTION,
  816. .subclass.integer = action,
  817. .datalen = datalen,
  818. .data.ptr = (void *) data,
  819. };
  820. return ast_bridge_channel_queue_frame(bridge_channel, &frame);
  821. }
  822. /*!
  823. * \internal
  824. * \brief Queue an action frame onto the bridge channel with data synchronously.
  825. * \since 12.2.0
  826. *
  827. * The function will not return until the queued frame is freed.
  828. *
  829. * \param bridge_channel Which channel to queue the frame onto.
  830. * \param action Type of bridge action frame.
  831. * \param data Frame payload data to pass.
  832. * \param datalen Frame payload data length to pass.
  833. *
  834. * \retval 0 on success.
  835. * \retval -1 on error.
  836. */
  837. static int bridge_channel_queue_action_data_sync(struct ast_bridge_channel *bridge_channel,
  838. enum bridge_channel_action_type action, const void *data, size_t datalen)
  839. {
  840. struct sync_payload *sync_payload;
  841. int sync_payload_len = sizeof(*sync_payload) + datalen;
  842. struct bridge_sync sync_struct;
  843. struct ast_frame frame = {
  844. .frametype = AST_FRAME_BRIDGE_ACTION_SYNC,
  845. .subclass.integer = action,
  846. };
  847. /* Make sure we don't end up trying to wait on ourself to deliver the frame */
  848. ast_assert(!pthread_equal(pthread_self(), bridge_channel->thread));
  849. sync_payload = ast_alloca(sync_payload_len);
  850. sync_payload->id = ast_atomic_fetchadd_int(&sync_ids, +1);
  851. memcpy(sync_payload->data, data, datalen);
  852. frame.datalen = sync_payload_len;
  853. frame.data.ptr = sync_payload;
  854. bridge_sync_init(&sync_struct, sync_payload->id);
  855. if (ast_bridge_channel_queue_frame(bridge_channel, &frame)) {
  856. bridge_sync_cleanup(&sync_struct);
  857. return -1;
  858. }
  859. bridge_sync_wait(&sync_struct);
  860. bridge_sync_cleanup(&sync_struct);
  861. return 0;
  862. }
  863. /*!
  864. * \internal
  865. * \brief Write an action frame onto the bridge channel with data.
  866. * \since 12.0.0
  867. *
  868. * \param bridge_channel Which channel to queue the frame onto.
  869. * \param action Type of bridge action frame.
  870. * \param data Frame payload data to pass.
  871. * \param datalen Frame payload data length to pass.
  872. *
  873. * \retval 0 on success.
  874. * \retval -1 on error.
  875. */
  876. static int bridge_channel_write_action_data(struct ast_bridge_channel *bridge_channel,
  877. enum bridge_channel_action_type action, const void *data, size_t datalen)
  878. {
  879. struct ast_frame frame = {
  880. .frametype = AST_FRAME_BRIDGE_ACTION,
  881. .subclass.integer = action,
  882. .datalen = datalen,
  883. .data.ptr = (void *) data,
  884. };
  885. return bridge_channel_write_frame(bridge_channel, &frame);
  886. }
  887. static void bridge_frame_free(struct ast_frame *frame)
  888. {
  889. if (frame->frametype == AST_FRAME_BRIDGE_ACTION_SYNC) {
  890. struct sync_payload *sync_payload = frame->data.ptr;
  891. struct bridge_sync *sync;
  892. AST_RWLIST_RDLOCK(&sync_structs);
  893. AST_RWLIST_TRAVERSE(&sync_structs, sync, list) {
  894. if (sync->id == sync_payload->id) {
  895. break;
  896. }
  897. }
  898. if (sync) {
  899. bridge_sync_signal(sync);
  900. }
  901. AST_RWLIST_UNLOCK(&sync_structs);
  902. }
  903. ast_frfree(frame);
  904. }
  905. int ast_bridge_channel_queue_frame(struct ast_bridge_channel *bridge_channel, struct ast_frame *fr)
  906. {
  907. struct ast_frame *dup;
  908. if (bridge_channel->suspended
  909. /* Also defer DTMF frames. */
  910. && fr->frametype != AST_FRAME_DTMF_BEGIN
  911. && fr->frametype != AST_FRAME_DTMF_END
  912. && !ast_is_deferrable_frame(fr)) {
  913. /* Drop non-deferable frames when suspended. */
  914. return 0;
  915. }
  916. if (fr->frametype == AST_FRAME_NULL) {
  917. /* "Accept" the frame and discard it. */
  918. return 0;
  919. }
  920. if ((fr->frametype == AST_FRAME_VOICE || fr->frametype == AST_FRAME_VIDEO ||
  921. fr->frametype == AST_FRAME_TEXT || fr->frametype == AST_FRAME_IMAGE ||
  922. fr->frametype == AST_FRAME_RTCP) && fr->stream_num > -1) {
  923. int num = -1;
  924. ast_bridge_channel_lock(bridge_channel);
  925. if (fr->stream_num < (int)AST_VECTOR_SIZE(&bridge_channel->stream_map.to_channel)) {
  926. num = AST_VECTOR_GET(&bridge_channel->stream_map.to_channel, fr->stream_num);
  927. }
  928. ast_bridge_channel_unlock(bridge_channel);
  929. if (num == -1) {
  930. /* We don't have a mapped stream so just discard this frame. */
  931. return 0;
  932. }
  933. }
  934. dup = ast_frdup(fr);
  935. if (!dup) {
  936. return -1;
  937. }
  938. ast_bridge_channel_lock(bridge_channel);
  939. if (bridge_channel->state != BRIDGE_CHANNEL_STATE_WAIT) {
  940. /* Drop frames on channels leaving the bridge. */
  941. ast_bridge_channel_unlock(bridge_channel);
  942. bridge_frame_free(dup);
  943. return 0;
  944. }
  945. if ((fr->frametype == AST_FRAME_TEXT || fr->frametype == AST_FRAME_TEXT_DATA) &&
  946. !bridge_channel->features->text_messaging) {
  947. /* This channel is not accepting text messages. */
  948. ast_bridge_channel_unlock(bridge_channel);
  949. bridge_frame_free(dup);
  950. return 0;
  951. }
  952. if (DEBUG_ATLEAST(1)) {
  953. if (fr->frametype == AST_FRAME_TEXT) {
  954. ast_log(LOG_DEBUG, "Queuing TEXT frame to '%s': %*.s\n", ast_channel_name(bridge_channel->chan),
  955. fr->datalen, (char *)fr->data.ptr);
  956. } else if (fr->frametype == AST_FRAME_TEXT_DATA) {
  957. struct ast_msg_data *msg = fr->data.ptr;
  958. ast_log(LOG_DEBUG, "Queueing TEXT_DATA frame from '%s' to '%s:%s': %s\n",
  959. ast_msg_data_get_attribute(msg, AST_MSG_DATA_ATTR_FROM),
  960. ast_msg_data_get_attribute(msg, AST_MSG_DATA_ATTR_TO),
  961. ast_channel_name(bridge_channel->chan),
  962. ast_msg_data_get_attribute(msg, AST_MSG_DATA_ATTR_BODY));
  963. }
  964. }
  965. AST_LIST_INSERT_TAIL(&bridge_channel->wr_queue, dup, frame_list);
  966. if (ast_alertpipe_write(bridge_channel->alert_pipe)) {
  967. ast_log(LOG_ERROR, "We couldn't write alert pipe for %p(%s)... something is VERY wrong\n",
  968. bridge_channel, ast_channel_name(bridge_channel->chan));
  969. }
  970. ast_bridge_channel_unlock(bridge_channel);
  971. return 0;
  972. }
  973. int ast_bridge_queue_everyone_else(struct ast_bridge *bridge, struct ast_bridge_channel *bridge_channel, struct ast_frame *frame)
  974. {
  975. struct ast_bridge_channel *cur;
  976. int not_written = -1;
  977. if (frame->frametype == AST_FRAME_NULL) {
  978. /* "Accept" the frame and discard it. */
  979. return 0;
  980. }
  981. AST_LIST_TRAVERSE(&bridge->channels, cur, entry) {
  982. if (cur == bridge_channel) {
  983. continue;
  984. }
  985. if (!ast_bridge_channel_queue_frame(cur, frame)) {
  986. not_written = 0;
  987. }
  988. }
  989. return not_written;
  990. }
  991. int ast_bridge_channel_queue_control_data(struct ast_bridge_channel *bridge_channel, enum ast_control_frame_type control, const void *data, size_t datalen)
  992. {
  993. struct ast_frame frame = {
  994. .frametype = AST_FRAME_CONTROL,
  995. .subclass.integer = control,
  996. .datalen = datalen,
  997. .data.ptr = (void *) data,
  998. };
  999. return ast_bridge_channel_queue_frame(bridge_channel, &frame);
  1000. }
  1001. int ast_bridge_channel_write_control_data(struct ast_bridge_channel *bridge_channel, enum ast_control_frame_type control, const void *data, size_t datalen)
  1002. {
  1003. struct ast_frame frame = {
  1004. .frametype = AST_FRAME_CONTROL,
  1005. .subclass.integer = control,
  1006. .datalen = datalen,
  1007. .data.ptr = (void *) data,
  1008. };
  1009. return bridge_channel_write_frame(bridge_channel, &frame);
  1010. }
  1011. int ast_bridge_channel_write_hold(struct ast_bridge_channel *bridge_channel, const char *moh_class)
  1012. {
  1013. struct ast_json *blob;
  1014. int res;
  1015. size_t datalen;
  1016. if (!ast_strlen_zero(moh_class)) {
  1017. datalen = strlen(moh_class) + 1;
  1018. blob = ast_json_pack("{s: s}",
  1019. "musicclass", moh_class);
  1020. } else {
  1021. moh_class = NULL;
  1022. datalen = 0;
  1023. blob = NULL;
  1024. }
  1025. ast_channel_publish_cached_blob(bridge_channel->chan, ast_channel_hold_type(), blob);
  1026. res = ast_bridge_channel_write_control_data(bridge_channel, AST_CONTROL_HOLD,
  1027. moh_class, datalen);
  1028. ast_json_unref(blob);
  1029. return res;
  1030. }
  1031. int ast_bridge_channel_write_unhold(struct ast_bridge_channel *bridge_channel)
  1032. {
  1033. struct ast_channel *chan = ast_bridge_channel_get_chan(bridge_channel);
  1034. if (!chan) {
  1035. return -1;
  1036. }
  1037. ast_channel_publish_cached_blob(chan, ast_channel_unhold_type(), NULL);
  1038. ao2_ref(chan, -1);
  1039. return ast_bridge_channel_write_control_data(bridge_channel, AST_CONTROL_UNHOLD, NULL, 0);
  1040. }
  1041. /*!
  1042. * \internal
  1043. * \brief Helper function to kick off a PBX app on a bridge_channel
  1044. */
  1045. static int run_app_helper(struct ast_channel *chan, const char *app_name, const char *app_args)
  1046. {
  1047. int res = 0;
  1048. if (!strcasecmp("Gosub", app_name)) {
  1049. ast_app_exec_sub(NULL, chan, app_args, 0);
  1050. } else {
  1051. res = ast_pbx_exec_application(chan, app_name, app_args);
  1052. }
  1053. return res;
  1054. }
  1055. void ast_bridge_channel_run_app(struct ast_bridge_channel *bridge_channel, const char *app_name, const char *app_args, const char *moh_class)
  1056. {
  1057. if (moh_class) {
  1058. ast_bridge_channel_write_hold(bridge_channel, moh_class);
  1059. }
  1060. if (run_app_helper(bridge_channel->chan, app_name, S_OR(app_args, ""))) {
  1061. /* Break the bridge if the app returns non-zero. */
  1062. ast_bridge_channel_kick(bridge_channel, AST_CAUSE_NORMAL_CLEARING);
  1063. }
  1064. if (moh_class) {
  1065. ast_bridge_channel_write_unhold(bridge_channel);
  1066. }
  1067. }
  1068. struct bridge_run_app {
  1069. /*! Offset into app_name[] where the MOH class name starts. (zero if no MOH) */
  1070. int moh_offset;
  1071. /*! Offset into app_name[] where the application argument string starts. (zero if no arguments) */
  1072. int app_args_offset;
  1073. /*! Application name to run. */
  1074. char app_name[0];
  1075. };
  1076. /*!
  1077. * \internal
  1078. * \brief Handle the run application bridge action.
  1079. * \since 12.0.0
  1080. *
  1081. * \param bridge_channel Which channel to run the application on.
  1082. * \param data Action frame data to run the application.
  1083. */
  1084. static void bridge_channel_run_app(struct ast_bridge_channel *bridge_channel, struct bridge_run_app *data)
  1085. {
  1086. ast_bridge_channel_run_app(bridge_channel, data->app_name,
  1087. data->app_args_offset ? &data->app_name[data->app_args_offset] : NULL,
  1088. data->moh_offset ? &data->app_name[data->moh_offset] : NULL);
  1089. }
  1090. /*!
  1091. * \internal
  1092. * \brief Marshal an application to be executed on a bridge_channel
  1093. */
  1094. static int payload_helper_app(ast_bridge_channel_post_action_data post_it,
  1095. struct ast_bridge_channel *bridge_channel, const char *app_name, const char *app_args, const char *moh_class)
  1096. {
  1097. struct bridge_run_app *app_data;
  1098. size_t len_name = strlen(app_name) + 1;
  1099. size_t len_args = ast_strlen_zero(app_args) ? 0 : strlen(app_args) + 1;
  1100. size_t len_moh = !moh_class ? 0 : strlen(moh_class) + 1;
  1101. size_t len_data = sizeof(*app_data) + len_name + len_args + len_moh;
  1102. /* Fill in application run frame data. */
  1103. app_data = alloca(len_data);
  1104. app_data->app_args_offset = len_args ? len_name : 0;
  1105. app_data->moh_offset = len_moh ? len_name + len_args : 0;
  1106. strcpy(app_data->app_name, app_name);/* Safe */
  1107. if (len_args) {
  1108. strcpy(&app_data->app_name[app_data->app_args_offset], app_args);/* Safe */
  1109. }
  1110. if (moh_class) {
  1111. strcpy(&app_data->app_name[app_data->moh_offset], moh_class);/* Safe */
  1112. }
  1113. return post_it(bridge_channel, BRIDGE_CHANNEL_ACTION_RUN_APP, app_data, len_data);
  1114. }
  1115. int ast_bridge_channel_write_app(struct ast_bridge_channel *bridge_channel, const char *app_name, const char *app_args, const char *moh_class)
  1116. {
  1117. return payload_helper_app(bridge_channel_write_action_data,
  1118. bridge_channel, app_name, app_args, moh_class);
  1119. }
  1120. int ast_bridge_channel_queue_app(struct ast_bridge_channel *bridge_channel, const char *app_name, const char *app_args, const char *moh_class)
  1121. {
  1122. return payload_helper_app(bridge_channel_queue_action_data,
  1123. bridge_channel, app_name, app_args, moh_class);
  1124. }
  1125. void ast_bridge_channel_playfile(struct ast_bridge_channel *bridge_channel, ast_bridge_custom_play_fn custom_play, const char *playfile, const char *moh_class)
  1126. {
  1127. if (moh_class) {
  1128. ast_bridge_channel_write_hold(bridge_channel, moh_class);
  1129. }
  1130. if (custom_play) {
  1131. custom_play(bridge_channel, playfile);
  1132. } else {
  1133. ast_stream_and_wait(bridge_channel->chan, playfile, AST_DIGIT_NONE);
  1134. }
  1135. if (moh_class) {
  1136. ast_bridge_channel_write_unhold(bridge_channel);
  1137. }
  1138. /*
  1139. * It may be necessary to resume music on hold after we finish
  1140. * playing the announcment.
  1141. */
  1142. if (ast_test_flag(ast_channel_flags(bridge_channel->chan), AST_FLAG_MOH)) {
  1143. const char *latest_musicclass;
  1144. ast_channel_lock(bridge_channel->chan);
  1145. latest_musicclass = ast_strdupa(ast_channel_latest_musicclass(bridge_channel->chan));
  1146. ast_channel_unlock(bridge_channel->chan);
  1147. ast_moh_start(bridge_channel->chan, latest_musicclass, NULL);
  1148. }
  1149. }
  1150. struct bridge_playfile {
  1151. /*! Call this function to play the playfile. (NULL if normal sound file to play) */
  1152. ast_bridge_custom_play_fn custom_play;
  1153. /*! Offset into playfile[] where the MOH class name starts. (zero if no MOH)*/
  1154. int moh_offset;
  1155. /*! Filename to play. */
  1156. char playfile[0];
  1157. };
  1158. /*!
  1159. * \internal
  1160. * \brief Handle the playfile bridge action.
  1161. * \since 12.0.0
  1162. *
  1163. * \param bridge_channel Which channel to play a file on.
  1164. * \param payload Action frame payload to play a file.
  1165. */
  1166. static void bridge_channel_playfile(struct ast_bridge_channel *bridge_channel, struct bridge_playfile *payload)
  1167. {
  1168. ast_bridge_channel_playfile(bridge_channel, payload->custom_play, payload->playfile,
  1169. payload->moh_offset ? &payload->playfile[payload->moh_offset] : NULL);
  1170. }
  1171. /*!
  1172. * \internal
  1173. * \brief Marshal a file to be played on a bridge_channel
  1174. */
  1175. static int payload_helper_playfile(ast_bridge_channel_post_action_data post_it,
  1176. struct ast_bridge_channel *bridge_channel, ast_bridge_custom_play_fn custom_play, const char *playfile, const char *moh_class)
  1177. {
  1178. struct bridge_playfile *payload;
  1179. size_t len_name = strlen(playfile) + 1;
  1180. size_t len_moh = !moh_class ? 0 : strlen(moh_class) + 1;
  1181. size_t len_payload = sizeof(*payload) + len_name + len_moh;
  1182. /* Fill in play file frame data. */
  1183. payload = ast_alloca(len_payload);
  1184. payload->custom_play = custom_play;
  1185. payload->moh_offset = len_moh ? len_name : 0;
  1186. strcpy(payload->playfile, playfile);/* Safe */
  1187. if (moh_class) {
  1188. strcpy(&payload->playfile[payload->moh_offset], moh_class);/* Safe */
  1189. }
  1190. return post_it(bridge_channel, BRIDGE_CHANNEL_ACTION_PLAY_FILE, payload, len_payload);
  1191. }
  1192. int ast_bridge_channel_write_playfile(struct ast_bridge_channel *bridge_channel, ast_bridge_custom_play_fn custom_play, const char *playfile, const char *moh_class)
  1193. {
  1194. return payload_helper_playfile(bridge_channel_write_action_data,
  1195. bridge_channel, custom_play, playfile, moh_class);
  1196. }
  1197. int ast_bridge_channel_queue_playfile(struct ast_bridge_channel *bridge_channel, ast_bridge_custom_play_fn custom_play, const char *playfile, const char *moh_class)
  1198. {
  1199. return payload_helper_playfile(bridge_channel_queue_action_data,
  1200. bridge_channel, custom_play, playfile, moh_class);
  1201. }
  1202. int ast_bridge_channel_queue_playfile_sync(struct ast_bridge_channel *bridge_channel,
  1203. ast_bridge_custom_play_fn custom_play, const char *playfile, const char *moh_class)
  1204. {
  1205. return payload_helper_playfile(bridge_channel_queue_action_data_sync,
  1206. bridge_channel, custom_play, playfile, moh_class);
  1207. }
  1208. struct bridge_custom_callback {
  1209. /*! Call this function on the bridge channel thread. */
  1210. ast_bridge_custom_callback_fn callback;
  1211. /*! Size of the payload if it exists. A number otherwise. */
  1212. size_t payload_size;
  1213. /*! Option flags determining how callback is called. */
  1214. unsigned int flags;
  1215. /*! Nonzero if the payload exists. */
  1216. char payload_exists;
  1217. /*! Payload to give to callback. */
  1218. char payload[0];
  1219. };
  1220. /*!
  1221. * \internal
  1222. * \brief Handle the do custom callback bridge action.
  1223. * \since 12.0.0
  1224. *
  1225. * \param bridge_channel Which channel to call the callback on.
  1226. * \param data Action frame data to call the callback.
  1227. */
  1228. static void bridge_channel_do_callback(struct ast_bridge_channel *bridge_channel, struct bridge_custom_callback *data)
  1229. {
  1230. if (ast_test_flag(data, AST_BRIDGE_CHANNEL_CB_OPTION_MEDIA)) {
  1231. bridge_channel_suspend(bridge_channel);
  1232. ast_indicate(bridge_channel->chan, AST_CONTROL_SRCUPDATE);
  1233. }
  1234. data->callback(bridge_channel, data->payload_exists ? data->payload : NULL, data->payload_size);
  1235. if (ast_test_flag(data, AST_BRIDGE_CHANNEL_CB_OPTION_MEDIA)) {
  1236. ast_indicate(bridge_channel->chan, AST_CONTROL_SRCUPDATE);
  1237. bridge_channel_unsuspend(bridge_channel);
  1238. }
  1239. }
  1240. /*!
  1241. * \internal
  1242. * \brief Marshal a custom callback function to be called on a bridge_channel
  1243. */
  1244. static int payload_helper_cb(ast_bridge_channel_post_action_data post_it,
  1245. struct ast_bridge_channel *bridge_channel,
  1246. enum ast_bridge_channel_custom_callback_option flags,
  1247. ast_bridge_custom_callback_fn callback, const void *payload, size_t payload_size)
  1248. {
  1249. struct bridge_custom_callback *cb_data;
  1250. size_t len_data = sizeof(*cb_data) + (payload ? payload_size : 0);
  1251. /* Sanity check. */
  1252. if (!callback) {
  1253. ast_assert(0);
  1254. return -1;
  1255. }
  1256. /* Fill in custom callback frame data. */
  1257. cb_data = alloca(len_data);
  1258. cb_data->callback = callback;
  1259. cb_data->payload_size = payload_size;
  1260. cb_data->flags = flags;
  1261. cb_data->payload_exists = payload && payload_size;
  1262. if (cb_data->payload_exists) {
  1263. memcpy(cb_data->payload, payload, payload_size);/* Safe */
  1264. }
  1265. return post_it(bridge_channel, BRIDGE_CHANNEL_ACTION_CALLBACK, cb_data, len_data);
  1266. }
  1267. int ast_bridge_channel_write_callback(struct ast_bridge_channel *bridge_channel,
  1268. enum ast_bridge_channel_custom_callback_option flags,
  1269. ast_bridge_custom_callback_fn callback, const void *payload, size_t payload_size)
  1270. {
  1271. return payload_helper_cb(bridge_channel_write_action_data,
  1272. bridge_channel, flags, callback, payload, payload_size);
  1273. }
  1274. int ast_bridge_channel_queue_callback(struct ast_bridge_channel *bridge_channel,
  1275. enum ast_bridge_channel_custom_callback_option flags,
  1276. ast_bridge_custom_callback_fn callback, const void *payload, size_t payload_size)
  1277. {
  1278. return payload_helper_cb(bridge_channel_queue_action_data,
  1279. bridge_channel, flags, callback, payload, payload_size);
  1280. }
  1281. struct bridge_park {
  1282. int parker_uuid_offset;
  1283. int app_data_offset;
  1284. /* buffer used for holding those strings */
  1285. char parkee_uuid[0];
  1286. };
  1287. /*!
  1288. * \internal
  1289. * \brief Park a bridge_cahnnel
  1290. */
  1291. static void bridge_channel_park(struct ast_bridge_channel *bridge_channel, struct bridge_park *payload)
  1292. {
  1293. if (!ast_parking_provider_registered()) {
  1294. ast_log(AST_LOG_WARNING, "Unable to park %s: No parking provider loaded!\n",
  1295. ast_channel_name(bridge_channel->chan));
  1296. return;
  1297. }
  1298. if (ast_parking_park_bridge_channel(bridge_channel, payload->parkee_uuid,
  1299. &payload->parkee_uuid[payload->parker_uuid_offset],
  1300. payload->app_data_offset ? &payload->parkee_uuid[payload->app_data_offset] : NULL)) {
  1301. ast_log(AST_LOG_WARNING, "Error occurred while parking %s\n",
  1302. ast_channel_name(bridge_channel->chan));
  1303. }
  1304. }
  1305. /*!
  1306. * \internal
  1307. * \brief Marshal a park action onto a bridge_channel
  1308. */
  1309. static int payload_helper_park(ast_bridge_channel_post_action_data post_it,
  1310. struct ast_bridge_channel *bridge_channel,
  1311. const char *parkee_uuid,
  1312. const char *parker_uuid,
  1313. const char *app_data)
  1314. {
  1315. struct bridge_park *payload;
  1316. size_t len_parkee_uuid = strlen(parkee_uuid) + 1;
  1317. size_t len_parker_uuid = strlen(parker_uuid) + 1;
  1318. size_t len_app_data = !app_data ? 0 : strlen(app_data) + 1;
  1319. size_t len_payload = sizeof(*payload) + len_parker_uuid + len_parkee_uuid + len_app_data;
  1320. payload = alloca(len_payload);
  1321. payload->app_data_offset = len_app_data ? len_parkee_uuid + len_parker_uuid : 0;
  1322. payload->parker_uuid_offset = len_parkee_uuid;
  1323. strcpy(payload->parkee_uuid, parkee_uuid);
  1324. strcpy(&payload->parkee_uuid[payload->parker_uuid_offset], parker_uuid);
  1325. if (app_data) {
  1326. strcpy(&payload->parkee_uuid[payload->app_data_offset], app_data);
  1327. }
  1328. return post_it(bridge_channel, BRIDGE_CHANNEL_ACTION_PARK, payload, len_payload);
  1329. }
  1330. int ast_bridge_channel_write_park(struct ast_bridge_channel *bridge_channel, const char *parkee_uuid, const char *parker_uuid, const char *app_data)
  1331. {
  1332. return payload_helper_park(bridge_channel_write_action_data,
  1333. bridge_channel, parkee_uuid, parker_uuid, app_data);
  1334. }
  1335. /*!
  1336. * \internal
  1337. * \brief Handle bridge channel interval expiration.
  1338. * \since 12.0.0
  1339. *
  1340. * \param bridge_channel Channel to run expired intervals on.
  1341. */
  1342. static void bridge_channel_handle_interval(struct ast_bridge_channel *bridge_channel)
  1343. {
  1344. struct ast_heap *interval_hooks;
  1345. struct ast_bridge_hook_timer *hook;
  1346. struct timeval start;
  1347. int chan_suspended = 0;
  1348. interval_hooks = bridge_channel->features->interval_hooks;
  1349. ast_heap_wrlock(interval_hooks);
  1350. start = ast_tvnow();
  1351. while ((hook = ast_heap_peek(interval_hooks, 1))) {
  1352. int interval;
  1353. unsigned int execution_time;
  1354. if (ast_tvdiff_ms(hook->timer.trip_time, start) > 0) {
  1355. ast_debug(1, "Hook %p on %p(%s) wants to happen in the future, stopping our traversal\n",
  1356. hook, bridge_channel, ast_channel_name(bridge_channel->chan));
  1357. break;
  1358. }
  1359. ao2_ref(hook, +1);
  1360. ast_heap_unlock(interval_hooks);
  1361. if (!chan_suspended
  1362. && ast_test_flag(&hook->timer, AST_BRIDGE_HOOK_TIMER_OPTION_MEDIA)) {
  1363. chan_suspended = 1;
  1364. bridge_channel_suspend(bridge_channel);
  1365. ast_indicate(bridge_channel->chan, AST_CONTROL_SRCUPDATE);
  1366. }
  1367. ast_debug(1, "Executing hook %p on %p(%s)\n",
  1368. hook, bridge_channel, ast_channel_name(bridge_channel->chan));
  1369. interval = hook->generic.callback(bridge_channel, hook->generic.hook_pvt);
  1370. ast_heap_wrlock(interval_hooks);
  1371. if (ast_heap_peek(interval_hooks, hook->timer.heap_index) != hook
  1372. || !ast_heap_remove(interval_hooks, hook)) {
  1373. /* Interval hook is already removed from the bridge_channel. */
  1374. ao2_ref(hook, -1);
  1375. continue;
  1376. }
  1377. ao2_ref(hook, -1);
  1378. if (interval < 0) {
  1379. ast_debug(1, "Removed interval hook %p from %p(%s)\n",
  1380. hook, bridge_channel, ast_channel_name(bridge_channel->chan));
  1381. ao2_ref(hook, -1);
  1382. continue;
  1383. }
  1384. if (interval) {
  1385. /* Set new interval for the hook. */
  1386. hook->timer.interval = interval;
  1387. }
  1388. ast_debug(1, "Updating interval hook %p with interval %u on %p(%s)\n",
  1389. hook, hook->timer.interval, bridge_channel,
  1390. ast_channel_name(bridge_channel->chan));
  1391. /* resetting start */
  1392. start = ast_tvnow();
  1393. /*
  1394. * Resetup the interval hook for the next interval. We may need
  1395. * to skip over any missed intervals because the hook was
  1396. * delayed or took too long.
  1397. */
  1398. execution_time = ast_tvdiff_ms(start, hook->timer.trip_time);
  1399. while (hook->timer.interval < execution_time) {
  1400. execution_time -= hook->timer.interval;
  1401. }
  1402. hook->timer.trip_time = ast_tvadd(start, ast_samp2tv(hook->timer.interval - execution_time, 1000));
  1403. hook->timer.seqno = ast_atomic_fetchadd_int((int *) &bridge_channel->features->interval_sequence, +1);
  1404. if (ast_heap_push(interval_hooks, hook)) {
  1405. /* Could not push the hook back onto the heap. */
  1406. ao2_ref(hook, -1);
  1407. }
  1408. }
  1409. ast_heap_unlock(interval_hooks);
  1410. if (chan_suspended) {
  1411. ast_indicate(bridge_channel->chan, AST_CONTROL_SRCUPDATE);
  1412. bridge_channel_unsuspend(bridge_channel);
  1413. }
  1414. }
  1415. /*!
  1416. * \internal
  1417. * \brief Write a DTMF stream out to a channel
  1418. */
  1419. static int bridge_channel_write_dtmf_stream(struct ast_bridge_channel *bridge_channel, const char *dtmf)
  1420. {
  1421. return bridge_channel_write_action_data(bridge_channel,
  1422. BRIDGE_CHANNEL_ACTION_DTMF_STREAM, dtmf, strlen(dtmf) + 1);
  1423. }
  1424. /*!
  1425. * \internal
  1426. * \brief Indicate to the testsuite a feature was successfully detected.
  1427. *
  1428. * Currently, this function only will relay built-in features to the testsuite,
  1429. * but it could be modified to detect applicationmap items should the need arise.
  1430. *
  1431. * \param chan The channel that activated the feature
  1432. * \param dtmf The DTMF sequence entered to activate the feature
  1433. */
  1434. static void testsuite_notify_feature_success(struct ast_channel *chan, const char *dtmf)
  1435. {
  1436. #ifdef TEST_FRAMEWORK
  1437. char *feature = "unknown";
  1438. struct ast_featuremap_config *featuremap;
  1439. struct ast_features_xfer_config *xfer;
  1440. ast_channel_lock(chan);
  1441. featuremap = ast_get_chan_featuremap_config(chan);
  1442. xfer = ast_get_chan_features_xfer_config(chan);
  1443. ast_channel_unlock(chan);
  1444. if (featuremap) {
  1445. if (!strcmp(dtmf, featuremap->blindxfer)) {
  1446. feature = "blindxfer";
  1447. } else if (!strcmp(dtmf, featuremap->atxfer)) {
  1448. feature = "atxfer";
  1449. } else if (!strcmp(dtmf, featuremap->disconnect)) {
  1450. feature = "disconnect";
  1451. } else if (!strcmp(dtmf, featuremap->automixmon)) {
  1452. feature = "automixmon";
  1453. } else if (!strcmp(dtmf, featuremap->parkcall)) {
  1454. feature = "parkcall";
  1455. }
  1456. }
  1457. if (xfer) {
  1458. if (!strcmp(dtmf, xfer->atxferthreeway)) {
  1459. feature = "atxferthreeway";
  1460. }
  1461. }
  1462. ao2_cleanup(featuremap);
  1463. ao2_cleanup(xfer);
  1464. ast_test_suite_event_notify("FEATURE_DETECTION",
  1465. "Result: success\r\n"
  1466. "Feature: %s", feature);
  1467. #endif /* TEST_FRAMEWORK */
  1468. }
  1469. static int bridge_channel_feature_digit_add(
  1470. struct ast_bridge_channel *bridge_channel, int digit, size_t dtmf_len)
  1471. {
  1472. if (dtmf_len < ARRAY_LEN(bridge_channel->dtmf_hook_state.collected) - 1) {
  1473. /* Add the new digit to the DTMF string so we can do our matching */
  1474. bridge_channel->dtmf_hook_state.collected[dtmf_len++] = digit;
  1475. bridge_channel->dtmf_hook_state.collected[dtmf_len] = '\0';
  1476. ast_debug(1, "DTMF feature string on %p(%s) is now '%s'\n",
  1477. bridge_channel, ast_channel_name(bridge_channel->chan),
  1478. bridge_channel->dtmf_hook_state.collected);
  1479. }
  1480. return dtmf_len;
  1481. }
  1482. static unsigned int bridge_channel_feature_digit_timeout(struct ast_bridge_channel *bridge_channel)
  1483. {
  1484. unsigned int digit_timeout;
  1485. struct ast_features_general_config *gen_cfg;
  1486. /* Determine interdigit timeout */
  1487. ast_channel_lock(bridge_channel->chan);
  1488. gen_cfg = ast_get_chan_features_general_config(bridge_channel->chan);
  1489. ast_channel_unlock(bridge_channel->chan);
  1490. if (!gen_cfg) {
  1491. ast_log(LOG_ERROR, "Unable to retrieve features configuration.\n");
  1492. return 3000; /* Pick a reasonable failsafe timeout in ms */
  1493. }
  1494. digit_timeout = gen_cfg->featuredigittimeout;
  1495. ao2_ref(gen_cfg, -1);
  1496. return digit_timeout;
  1497. }
  1498. void ast_bridge_channel_feature_digit_add(struct ast_bridge_channel *bridge_channel, int digit)
  1499. {
  1500. if (digit) {
  1501. bridge_channel_feature_digit_add(
  1502. bridge_channel, digit, strlen(bridge_channel->dtmf_hook_state.collected));
  1503. }
  1504. }
  1505. void ast_bridge_channel_feature_digit(struct ast_bridge_channel *bridge_channel, int digit)
  1506. {
  1507. struct ast_bridge_features *features = bridge_channel->features;
  1508. struct ast_bridge_hook_dtmf *hook = NULL;
  1509. size_t dtmf_len;
  1510. struct sanity_check_of_dtmf_size {
  1511. char check[1 / (ARRAY_LEN(bridge_channel->dtmf_hook_state.collected) == ARRAY_LEN(hook->dtmf.code))];
  1512. };
  1513. dtmf_len = strlen(bridge_channel->dtmf_hook_state.collected);
  1514. if (!dtmf_len && !digit) {
  1515. /* Nothing to do */
  1516. return;
  1517. }
  1518. if (digit) {
  1519. dtmf_len = bridge_channel_feature_digit_add(bridge_channel, digit, dtmf_len);
  1520. }
  1521. while (digit) {
  1522. /* See if a DTMF feature hook matches or can match */
  1523. hook = ao2_find(features->dtmf_hooks, bridge_channel->dtmf_hook_state.collected,
  1524. OBJ_SEARCH_PARTIAL_KEY);
  1525. if (!hook) {
  1526. ast_debug(1, "No DTMF feature hooks on %p(%s) match '%s'\n",
  1527. bridge_channel, ast_channel_name(bridge_channel->chan),
  1528. bridge_channel->dtmf_hook_state.collected);
  1529. break;
  1530. } else if (dtmf_len != strlen(hook->dtmf.code)) {
  1531. unsigned int digit_timeout;
  1532. /* Need more digits to match */
  1533. ao2_ref(hook, -1);
  1534. digit_timeout = bridge_channel_feature_digit_timeout(bridge_channel);
  1535. bridge_channel->dtmf_hook_state.interdigit_timeout =
  1536. ast_tvadd(ast_tvnow(), ast_samp2tv(digit_timeout, 1000));
  1537. return;
  1538. } else {
  1539. int remove_me;
  1540. int already_suspended;
  1541. ast_debug(1, "DTMF feature hook %p matched DTMF string '%s' on %p(%s)\n",
  1542. hook, bridge_channel->dtmf_hook_state.collected, bridge_channel,
  1543. ast_channel_name(bridge_channel->chan));
  1544. /*
  1545. * Clear the collected digits before executing the hook
  1546. * in case the hook starts another sequence.
  1547. */
  1548. bridge_channel->dtmf_hook_state.collected[0] = '\0';
  1549. ast_bridge_channel_lock_bridge(bridge_channel);
  1550. already_suspended = bridge_channel->suspended;
  1551. if (!already_suspended) {
  1552. bridge_channel_internal_suspend_nolock(bridge_channel);
  1553. }
  1554. ast_bridge_unlock(bridge_channel->bridge);
  1555. ast_indicate(bridge_channel->chan, AST_CONTROL_SRCUPDATE);
  1556. /* Execute the matched hook on this channel. */
  1557. remove_me = hook->generic.callback(bridge_channel, hook->generic.hook_pvt);
  1558. if (remove_me) {
  1559. ast_debug(1, "DTMF hook %p is being removed from %p(%s)\n",
  1560. hook, bridge_channel, ast_channel_name(bridge_channel->chan));
  1561. ao2_unlink(features->dtmf_hooks, hook);
  1562. }
  1563. testsuite_notify_feature_success(bridge_channel->chan, hook->dtmf.code);
  1564. ao2_ref(hook, -1);
  1565. ast_indicate(bridge_channel->chan, AST_CONTROL_SRCUPDATE);
  1566. if (!already_suspended) {
  1567. bridge_channel_unsuspend(bridge_channel);
  1568. }
  1569. /*
  1570. * If we are handing the channel off to an external hook for
  1571. * ownership, we are not guaranteed what kind of state it will
  1572. * come back in. If the channel hungup, we need to detect that
  1573. * here if the hook did not already change the state.
  1574. */
  1575. if (bridge_channel->chan && ast_check_hangup_locked(bridge_channel->chan)) {
  1576. ast_bridge_channel_kick(bridge_channel, 0);
  1577. bridge_channel->dtmf_hook_state.collected[0] = '\0';
  1578. return;
  1579. }
  1580. /* if there is dtmf that has been collected then loop back through,
  1581. but set digit to -1 so it doesn't try to do an add since the dtmf
  1582. is already in the buffer */
  1583. dtmf_len = strlen(bridge_channel->dtmf_hook_state.collected);
  1584. if (!dtmf_len) {
  1585. return;
  1586. }
  1587. }
  1588. }
  1589. if (!digit) {
  1590. ast_debug(1, "DTMF feature string collection on %p(%s) timed out\n",
  1591. bridge_channel, ast_channel_name(bridge_channel->chan));
  1592. }
  1593. /* Timeout or DTMF digit didn't allow a match with any hooks. */
  1594. if (features->dtmf_passthrough) {
  1595. /* Stream the collected DTMF to the other channels. */
  1596. bridge_channel_write_dtmf_stream(bridge_channel,
  1597. bridge_channel->dtmf_hook_state.collected);
  1598. }
  1599. bridge_channel->dtmf_hook_state.collected[0] = '\0';
  1600. ast_test_suite_event_notify("FEATURE_DETECTION", "Result: fail");
  1601. }
  1602. /*!
  1603. * \internal
  1604. * \brief Handle bridge channel DTMF feature timeout expiration.
  1605. * \since 12.8.0
  1606. *
  1607. * \param bridge_channel Channel to check expired interdigit timer on.
  1608. */
  1609. static void bridge_channel_handle_feature_timeout(struct ast_bridge_channel *bridge_channel)
  1610. {
  1611. if (!bridge_channel->dtmf_hook_state.collected[0]
  1612. || 0 < ast_tvdiff_ms(bridge_channel->dtmf_hook_state.interdigit_timeout,
  1613. ast_tvnow())) {
  1614. /* Not within a sequence or not timed out. */
  1615. return;
  1616. }
  1617. ast_bridge_channel_feature_digit(bridge_channel, 0);
  1618. }
  1619. /*!
  1620. * \internal
  1621. * \brief Indicate that a bridge_channel is talking
  1622. */
  1623. static void bridge_channel_talking(struct ast_bridge_channel *bridge_channel, int talking)
  1624. {
  1625. struct ast_bridge_features *features = bridge_channel->features;
  1626. struct ast_bridge_hook *hook;
  1627. struct ao2_iterator iter;
  1628. /* Run any talk detection hooks. */
  1629. iter = ao2_iterator_init(features->other_hooks, 0);
  1630. for (; (hook = ao2_iterator_next(&iter)); ao2_ref(hook, -1)) {
  1631. int remove_me;
  1632. ast_bridge_talking_indicate_callback talk_cb;
  1633. if (hook->type != AST_BRIDGE_HOOK_TYPE_TALK) {
  1634. continue;
  1635. }
  1636. talk_cb = (ast_bridge_talking_indicate_callback) hook->callback;
  1637. remove_me = talk_cb(bridge_channel, hook->hook_pvt, talking);
  1638. if (remove_me) {
  1639. ast_debug(1, "Talk detection hook %p is being removed from %p(%s)\n",
  1640. hook, bridge_channel, ast_channel_name(bridge_channel->chan));
  1641. ao2_unlink(features->other_hooks, hook);
  1642. }
  1643. }
  1644. ao2_iterator_destroy(&iter);
  1645. }
  1646. /*!
  1647. * \internal
  1648. * \brief Play back DTMF on a bridge channel
  1649. */
  1650. static void bridge_channel_dtmf_stream(struct ast_bridge_channel *bridge_channel, const char *dtmf)
  1651. {
  1652. ast_debug(1, "Playing DTMF stream '%s' out to %p(%s)\n",
  1653. dtmf, bridge_channel, ast_channel_name(bridge_channel->chan));
  1654. ast_dtmf_stream(bridge_channel->chan, NULL, dtmf, 0, 0);
  1655. }
  1656. /*! \brief Data specifying where a blind transfer is going to */
  1657. struct blind_transfer_data {
  1658. char exten[AST_MAX_EXTENSION];
  1659. char context[AST_MAX_CONTEXT];
  1660. };
  1661. /*!
  1662. * \internal
  1663. * \brief Execute after bridge actions on a channel when it leaves a bridge
  1664. */
  1665. static void after_bridge_move_channel(struct ast_channel *chan_bridged, void *data)
  1666. {
  1667. RAII_VAR(struct ast_channel *, chan_target, data, ao2_cleanup);
  1668. struct ast_party_connected_line connected_target;
  1669. unsigned char connected_line_data[1024];
  1670. int payload_size;
  1671. ast_party_connected_line_init(&connected_target);
  1672. ast_channel_lock(chan_target);
  1673. ast_party_connected_line_copy(&connected_target, ast_channel_connected(chan_target));
  1674. ast_channel_unlock(chan_target);
  1675. ast_party_id_reset(&connected_target.priv);
  1676. if (ast_channel_move(chan_target, chan_bridged)) {
  1677. ast_softhangup(chan_target, AST_SOFTHANGUP_DEV);
  1678. ast_party_connected_line_free(&connected_target);
  1679. return;
  1680. }
  1681. /* The ast_channel_move function will end up updating the connected line information
  1682. * on chan_target to the value we have here, but will not inform it. To ensure that
  1683. * AST_FRAME_READ_ACTION_CONNECTED_LINE_MACRO is executed we wipe it away here. If
  1684. * we don't do this then the change will be considered redundant, since the connected
  1685. * line information is already there (despite the channel not being told).
  1686. */
  1687. ast_channel_lock(chan_target);
  1688. ast_party_connected_line_free(ast_channel_connected_indicated(chan_target));
  1689. ast_party_connected_line_init(ast_channel_connected_indicated(chan_target));
  1690. ast_channel_unlock(chan_target);
  1691. if ((payload_size = ast_connected_line_build_data(connected_line_data,
  1692. sizeof(connected_line_data), &connected_target, NULL)) != -1) {
  1693. struct ast_control_read_action_payload *frame_payload;
  1694. int frame_size;
  1695. frame_size = payload_size + sizeof(*frame_payload);
  1696. frame_payload = ast_alloca(frame_size);
  1697. frame_payload->action = AST_FRAME_READ_ACTION_CONNECTED_LINE_MACRO;
  1698. frame_payload->payload_size = payload_size;
  1699. memcpy(frame_payload->payload, connected_line_data, payload_size);
  1700. ast_queue_control_data(chan_target, AST_CONTROL_READ_ACTION, frame_payload, frame_size);
  1701. }
  1702. /* A connected line update is queued so that if chan_target is remotely involved with
  1703. * anything (such as dialing a channel) the other channel(s) will be informed of the
  1704. * new channel they are involved with.
  1705. */
  1706. ast_channel_lock(chan_target);
  1707. ast_connected_line_copy_from_caller(&connected_target, ast_channel_caller(chan_target));
  1708. ast_channel_queue_connected_line_update(chan_target, &connected_target, NULL);
  1709. ast_channel_unlock(chan_target);
  1710. ast_party_connected_line_free(&connected_target);
  1711. }
  1712. /*!
  1713. * \internal
  1714. * \brief Execute logic to cleanup when after bridge fails
  1715. */
  1716. static void after_bridge_move_channel_fail(enum ast_bridge_after_cb_reason reason, void *data)
  1717. {
  1718. RAII_VAR(struct ast_channel *, chan_target, data, ao2_cleanup);
  1719. ast_log(LOG_WARNING, "Unable to complete transfer: %s\n",
  1720. ast_bridge_after_cb_reason_string(reason));
  1721. ast_softhangup(chan_target, AST_SOFTHANGUP_DEV);
  1722. }
  1723. /*!
  1724. * \internal
  1725. * \brief Perform a blind transfer on a channel in a bridge
  1726. */
  1727. static void bridge_channel_blind_transfer(struct ast_bridge_channel *bridge_channel,
  1728. struct blind_transfer_data *blind_data)
  1729. {
  1730. ast_async_goto(bridge_channel->chan, blind_data->context, blind_data->exten, 1);
  1731. ast_bridge_channel_kick(bridge_channel, AST_CAUSE_NORMAL_CLEARING);
  1732. }
  1733. /*!
  1734. * \internal
  1735. * \brief Perform an attended transfer on a channel in a bridge
  1736. */
  1737. static void bridge_channel_attended_transfer(struct ast_bridge_channel *bridge_channel,
  1738. const char *target_chan_name)
  1739. {
  1740. RAII_VAR(struct ast_channel *, chan_target, NULL, ao2_cleanup);
  1741. RAII_VAR(struct ast_channel *, chan_bridged, NULL, ao2_cleanup);
  1742. chan_target = ast_channel_get_by_name(target_chan_name);
  1743. if (!chan_target) {
  1744. /* Dang, it disappeared somehow */
  1745. ast_bridge_channel_kick(bridge_channel, AST_CAUSE_NORMAL_CLEARING);
  1746. return;
  1747. }
  1748. ast_bridge_channel_lock(bridge_channel);
  1749. chan_bridged = bridge_channel->chan;
  1750. ast_assert(chan_bridged != NULL);
  1751. ao2_ref(chan_bridged, +1);
  1752. ast_bridge_channel_unlock(bridge_channel);
  1753. if (ast_bridge_set_after_callback(chan_bridged, after_bridge_move_channel,
  1754. after_bridge_move_channel_fail, ast_channel_ref(chan_target))) {
  1755. ast_softhangup(chan_target, AST_SOFTHANGUP_DEV);
  1756. /* Release the ref we tried to pass to ast_bridge_set_after_callback(). */
  1757. ast_channel_unref(chan_target);
  1758. }
  1759. ast_bridge_channel_kick(bridge_channel, AST_CAUSE_NORMAL_CLEARING);
  1760. }
  1761. /*!
  1762. * \internal
  1763. * \brief Handle bridge channel bridge action frame.
  1764. * \since 12.0.0
  1765. *
  1766. * \param bridge_channel Channel to execute the action on.
  1767. * \param action What to do.
  1768. * \param data data from the action.
  1769. */
  1770. static void bridge_channel_handle_action(struct ast_bridge_channel *bridge_channel,
  1771. enum bridge_channel_action_type action, void *data)
  1772. {
  1773. switch (action) {
  1774. case BRIDGE_CHANNEL_ACTION_DTMF_STREAM:
  1775. bridge_channel_suspend(bridge_channel);
  1776. ast_indicate(bridge_channel->chan, AST_CONTROL_SRCUPDATE);
  1777. bridge_channel_dtmf_stream(bridge_channel, data);
  1778. ast_indicate(bridge_channel->chan, AST_CONTROL_SRCUPDATE);
  1779. bridge_channel_unsuspend(bridge_channel);
  1780. break;
  1781. case BRIDGE_CHANNEL_ACTION_TALKING_START:
  1782. case BRIDGE_CHANNEL_ACTION_TALKING_STOP:
  1783. bridge_channel_talking(bridge_channel,
  1784. action == BRIDGE_CHANNEL_ACTION_TALKING_START);
  1785. break;
  1786. case BRIDGE_CHANNEL_ACTION_PLAY_FILE:
  1787. bridge_channel_suspend(bridge_channel);
  1788. ast_indicate(bridge_channel->chan, AST_CONTROL_SRCUPDATE);
  1789. bridge_channel_playfile(bridge_channel, data);
  1790. ast_indicate(bridge_channel->chan, AST_CONTROL_SRCUPDATE);
  1791. bridge_channel_unsuspend(bridge_channel);
  1792. break;
  1793. case BRIDGE_CHANNEL_ACTION_RUN_APP:
  1794. bridge_channel_suspend(bridge_channel);
  1795. ast_indicate(bridge_channel->chan, AST_CONTROL_SRCUPDATE);
  1796. bridge_channel_run_app(bridge_channel, data);
  1797. ast_indicate(bridge_channel->chan, AST_CONTROL_SRCUPDATE);
  1798. bridge_channel_unsuspend(bridge_channel);
  1799. break;
  1800. case BRIDGE_CHANNEL_ACTION_CALLBACK:
  1801. bridge_channel_do_callback(bridge_channel, data);
  1802. break;
  1803. case BRIDGE_CHANNEL_ACTION_PARK:
  1804. bridge_channel_suspend(bridge_channel);
  1805. ast_indicate(bridge_channel->chan, AST_CONTROL_SRCUPDATE);
  1806. bridge_channel_park(bridge_channel, data);
  1807. ast_indicate(bridge_channel->chan, AST_CONTROL_SRCUPDATE);
  1808. bridge_channel_unsuspend(bridge_channel);
  1809. break;
  1810. case BRIDGE_CHANNEL_ACTION_BLIND_TRANSFER:
  1811. bridge_channel_blind_transfer(bridge_channel, data);
  1812. break;
  1813. case BRIDGE_CHANNEL_ACTION_ATTENDED_TRANSFER:
  1814. bridge_channel_attended_transfer(bridge_channel, data);
  1815. break;
  1816. default:
  1817. break;
  1818. }
  1819. /* While invoking an action it is possible for the channel to be hung up. So
  1820. * that the bridge respects this we check here and if hung up kick it out.
  1821. */
  1822. if (bridge_channel->chan && ast_check_hangup_locked(bridge_channel->chan)) {
  1823. ast_bridge_channel_kick(bridge_channel, 0);
  1824. }
  1825. }
  1826. /*!
  1827. * \internal
  1828. * \brief Check if a bridge should dissolve and do it.
  1829. * \since 12.0.0
  1830. *
  1831. * \param bridge_channel Channel causing the check.
  1832. *
  1833. * \note On entry, bridge_channel->bridge is already locked.
  1834. */
  1835. static void bridge_channel_dissolve_check(struct ast_bridge_channel *bridge_channel)
  1836. {
  1837. struct ast_bridge *bridge = bridge_channel->bridge;
  1838. if (bridge->dissolved) {
  1839. return;
  1840. }
  1841. if (!bridge->num_channels
  1842. && ast_test_flag(&bridge->feature_flags, AST_BRIDGE_FLAG_DISSOLVE_EMPTY)) {
  1843. /* Last channel leaving the bridge turns off the lights. */
  1844. bridge_dissolve(bridge, ast_channel_hangupcause(bridge_channel->chan));
  1845. return;
  1846. }
  1847. switch (bridge_channel->state) {
  1848. case BRIDGE_CHANNEL_STATE_END:
  1849. /* Do we need to dissolve the bridge because this channel hung up? */
  1850. if (ast_test_flag(&bridge->feature_flags, AST_BRIDGE_FLAG_DISSOLVE_HANGUP)
  1851. || (bridge_channel->features->usable
  1852. && ast_test_flag(&bridge_channel->features->feature_flags,
  1853. AST_BRIDGE_CHANNEL_FLAG_DISSOLVE_HANGUP))) {
  1854. bridge_dissolve(bridge, ast_channel_hangupcause(bridge_channel->chan));
  1855. return;
  1856. }
  1857. break;
  1858. default:
  1859. break;
  1860. }
  1861. if (bridge->num_lonely && bridge->num_lonely == bridge->num_channels) {
  1862. /*
  1863. * This will start a chain reaction where each channel leaving
  1864. * enters this function and causes the next to leave as long as
  1865. * there aren't non-lonely channels in the bridge.
  1866. */
  1867. ast_bridge_channel_leave_bridge(AST_LIST_FIRST(&bridge->channels),
  1868. BRIDGE_CHANNEL_STATE_END_NO_DISSOLVE,
  1869. ast_channel_hangupcause(bridge_channel->chan));
  1870. }
  1871. }
  1872. void bridge_channel_internal_pull(struct ast_bridge_channel *bridge_channel)
  1873. {
  1874. struct ast_bridge *bridge = bridge_channel->bridge;
  1875. if (!bridge_channel->in_bridge) {
  1876. return;
  1877. }
  1878. bridge_channel->in_bridge = 0;
  1879. ast_debug(1, "Bridge %s: pulling %p(%s)\n",
  1880. bridge->uniqueid, bridge_channel, ast_channel_name(bridge_channel->chan));
  1881. ast_verb(3, "Channel %s left '%s' %s-bridge <%s>\n",
  1882. ast_channel_name(bridge_channel->chan),
  1883. bridge->technology->name,
  1884. bridge->v_table->name,
  1885. bridge->uniqueid);
  1886. if (!bridge_channel->just_joined) {
  1887. /* Tell the bridge technology we are leaving so they tear us down */
  1888. ast_debug(1, "Bridge %s: %p(%s) is leaving %s technology\n",
  1889. bridge->uniqueid, bridge_channel, ast_channel_name(bridge_channel->chan),
  1890. bridge->technology->name);
  1891. if (bridge->technology->leave) {
  1892. bridge->technology->leave(bridge, bridge_channel);
  1893. }
  1894. }
  1895. /* Remove channel from the bridge */
  1896. if (!bridge_channel->suspended) {
  1897. --bridge->num_active;
  1898. }
  1899. if (ast_test_flag(&bridge_channel->features->feature_flags, AST_BRIDGE_CHANNEL_FLAG_LONELY)) {
  1900. --bridge->num_lonely;
  1901. }
  1902. --bridge->num_channels;
  1903. AST_LIST_REMOVE(&bridge->channels, bridge_channel, entry);
  1904. bridge_channel_dissolve_check(bridge_channel);
  1905. bridge->v_table->pull(bridge, bridge_channel);
  1906. ast_bridge_channel_clear_roles(bridge_channel);
  1907. /* If we are not going to be hung up after leaving a bridge, and we were an
  1908. * outgoing channel, clear the outgoing flag.
  1909. */
  1910. if (ast_test_flag(ast_channel_flags(bridge_channel->chan), AST_FLAG_OUTGOING)
  1911. && (ast_channel_is_leaving_bridge(bridge_channel->chan)
  1912. || bridge_channel->state == BRIDGE_CHANNEL_STATE_WAIT)) {
  1913. ast_debug(2, "Channel %s will survive this bridge; clearing outgoing (dialed) flag\n", ast_channel_name(bridge_channel->chan));
  1914. ast_channel_clear_flag(bridge_channel->chan, AST_FLAG_OUTGOING);
  1915. }
  1916. bridge->reconfigured = 1;
  1917. ast_bridge_publish_leave(bridge, bridge_channel->chan);
  1918. }
  1919. int bridge_channel_internal_push_full(struct ast_bridge_channel *bridge_channel, int optimized)
  1920. {
  1921. struct ast_bridge *bridge = bridge_channel->bridge;
  1922. struct ast_bridge_channel *swap;
  1923. ast_assert(!bridge_channel->in_bridge);
  1924. swap = bridge_find_channel(bridge, bridge_channel->swap);
  1925. bridge_channel->swap = NULL;
  1926. if (swap) {
  1927. ast_debug(1, "Bridge %s: pushing %p(%s) by swapping with %p(%s)\n",
  1928. bridge->uniqueid, bridge_channel, ast_channel_name(bridge_channel->chan),
  1929. swap, ast_channel_name(swap->chan));
  1930. } else {
  1931. ast_debug(1, "Bridge %s: pushing %p(%s)\n",
  1932. bridge->uniqueid, bridge_channel, ast_channel_name(bridge_channel->chan));
  1933. }
  1934. /* Add channel to the bridge */
  1935. if (bridge->dissolved
  1936. || bridge_channel->state != BRIDGE_CHANNEL_STATE_WAIT
  1937. || (swap && swap->state != BRIDGE_CHANNEL_STATE_WAIT)
  1938. || bridge->v_table->push(bridge, bridge_channel, swap)) {
  1939. ast_debug(1, "Bridge %s: pushing %p(%s) into bridge failed\n",
  1940. bridge->uniqueid, bridge_channel, ast_channel_name(bridge_channel->chan));
  1941. return -1;
  1942. }
  1943. ast_bridge_channel_establish_roles(bridge_channel);
  1944. if (swap) {
  1945. int dissolve = ast_test_flag(&bridge->feature_flags, AST_BRIDGE_FLAG_DISSOLVE_EMPTY);
  1946. /* This flag is cleared so the act of this channel leaving does not cause it to dissolve if need be */
  1947. ast_clear_flag(&bridge->feature_flags, AST_BRIDGE_FLAG_DISSOLVE_EMPTY);
  1948. if (optimized) {
  1949. bridge_channel_cancel_owed_events(swap);
  1950. }
  1951. ast_bridge_channel_leave_bridge(swap, BRIDGE_CHANNEL_STATE_END_NO_DISSOLVE, 0);
  1952. bridge_channel_internal_pull(swap);
  1953. ast_set2_flag(&bridge->feature_flags, dissolve, AST_BRIDGE_FLAG_DISSOLVE_EMPTY);
  1954. }
  1955. bridge_channel->in_bridge = 1;
  1956. bridge_channel->just_joined = 1;
  1957. AST_LIST_INSERT_TAIL(&bridge->channels, bridge_channel, entry);
  1958. ++bridge->num_channels;
  1959. if (ast_test_flag(&bridge_channel->features->feature_flags, AST_BRIDGE_CHANNEL_FLAG_LONELY)) {
  1960. ++bridge->num_lonely;
  1961. }
  1962. if (!bridge_channel->suspended) {
  1963. ++bridge->num_active;
  1964. }
  1965. ast_verb(3, "Channel %s %s%s%s '%s' %s-bridge <%s>\n",
  1966. ast_channel_name(bridge_channel->chan),
  1967. swap ? "swapped with " : "joined",
  1968. swap ? ast_channel_name(swap->chan) : "",
  1969. swap ? " into" : "",
  1970. bridge->technology->name,
  1971. bridge->v_table->name,
  1972. bridge->uniqueid);
  1973. ast_bridge_publish_enter(bridge, bridge_channel->chan, swap ? swap->chan : NULL);
  1974. /* Clear any BLINDTRANSFER,ATTENDEDTRANSFER and FORWARDERNAME since the transfer has completed. */
  1975. pbx_builtin_setvar_helper(bridge_channel->chan, "BLINDTRANSFER", NULL);
  1976. pbx_builtin_setvar_helper(bridge_channel->chan, "ATTENDEDTRANSFER", NULL);
  1977. pbx_builtin_setvar_helper(bridge_channel->chan, "FORWARDERNAME", NULL);
  1978. /* Wake up the bridge channel thread to reevaluate any interval timers. */
  1979. ast_queue_frame(bridge_channel->chan, &ast_null_frame);
  1980. bridge->reconfigured = 1;
  1981. return 0;
  1982. }
  1983. int bridge_channel_internal_push(struct ast_bridge_channel *bridge_channel)
  1984. {
  1985. return bridge_channel_internal_push_full(bridge_channel, 0);
  1986. }
  1987. /*!
  1988. * \internal
  1989. * \brief Handle bridge channel control frame action.
  1990. * \since 12.0.0
  1991. *
  1992. * \param bridge_channel Channel to execute the control frame action on.
  1993. * \param fr Control frame to handle.
  1994. */
  1995. static void bridge_channel_handle_control(struct ast_bridge_channel *bridge_channel, struct ast_frame *fr)
  1996. {
  1997. struct ast_channel *chan;
  1998. struct ast_option_header *aoh;
  1999. chan = bridge_channel->chan;
  2000. switch (fr->subclass.integer) {
  2001. case AST_CONTROL_REDIRECTING:
  2002. if (ast_channel_redirecting_sub(NULL, chan, fr, 1)) {
  2003. ast_indicate_data(chan, fr->subclass.integer, fr->data.ptr, fr->datalen);
  2004. }
  2005. break;
  2006. case AST_CONTROL_CONNECTED_LINE:
  2007. if (ast_channel_connected_line_sub(NULL, chan, fr, 1)) {
  2008. ast_indicate_data(chan, fr->subclass.integer, fr->data.ptr, fr->datalen);
  2009. }
  2010. break;
  2011. case AST_CONTROL_OPTION:
  2012. /*
  2013. * Forward option Requests, but only ones we know are safe These
  2014. * are ONLY sent by chan_iax2 and I'm not convinced that they
  2015. * are useful. I haven't deleted them entirely because I just am
  2016. * not sure of the ramifications of removing them.
  2017. */
  2018. aoh = fr->data.ptr;
  2019. if (aoh && aoh->flag == AST_OPTION_FLAG_REQUEST) {
  2020. switch (ntohs(aoh->option)) {
  2021. case AST_OPTION_TONE_VERIFY:
  2022. case AST_OPTION_TDD:
  2023. case AST_OPTION_RELAXDTMF:
  2024. case AST_OPTION_AUDIO_MODE:
  2025. case AST_OPTION_DIGIT_DETECT:
  2026. case AST_OPTION_FAX_DETECT:
  2027. ast_channel_setoption(chan, ntohs(aoh->option), aoh->data,
  2028. fr->datalen - sizeof(*aoh), 0);
  2029. break;
  2030. default:
  2031. break;
  2032. }
  2033. }
  2034. break;
  2035. case AST_CONTROL_ANSWER:
  2036. if (ast_channel_state(chan) != AST_STATE_UP) {
  2037. ast_answer(chan);
  2038. ast_bridge_channel_lock_bridge(bridge_channel);
  2039. bridge_channel->bridge->reconfigured = 1;
  2040. bridge_reconfigured(bridge_channel->bridge, 0);
  2041. ast_bridge_unlock(bridge_channel->bridge);
  2042. } else {
  2043. ast_indicate(chan, -1);
  2044. }
  2045. break;
  2046. case AST_CONTROL_MASQUERADE_NOTIFY:
  2047. /* Should never happen. */
  2048. ast_assert(0);
  2049. break;
  2050. case AST_CONTROL_STREAM_TOPOLOGY_CHANGED:
  2051. ast_indicate_data(chan, fr->subclass.integer, fr->data.ptr, fr->datalen);
  2052. break;
  2053. default:
  2054. ast_indicate_data(chan, fr->subclass.integer, fr->data.ptr, fr->datalen);
  2055. break;
  2056. }
  2057. }
  2058. /*!
  2059. * \internal
  2060. * \brief Ensure text data is zero terminated before sending
  2061. *
  2062. * \param chan Channel to send text to
  2063. * \param f The frame containing the text data to send
  2064. */
  2065. static void sendtext_safe(struct ast_channel *chan, const struct ast_frame *f)
  2066. {
  2067. if (f->datalen) {
  2068. char *text = f->data.ptr;
  2069. if (text[f->datalen - 1]) {
  2070. /* Not zero terminated, we need to allocate */
  2071. text = ast_strndup(text, f->datalen);
  2072. if (!text) {
  2073. return;
  2074. }
  2075. }
  2076. ast_sendtext(chan, text);
  2077. if (text != f->data.ptr) {
  2078. /* Only free if we allocated */
  2079. ast_free(text);
  2080. }
  2081. } else {
  2082. /* Special case if the frame length is zero (although I
  2083. * am not sure this is possible?) */
  2084. ast_sendtext(chan, "");
  2085. }
  2086. }
  2087. /*!
  2088. * \internal
  2089. * \brief Handle bridge channel write frame to channel.
  2090. * \since 12.0.0
  2091. *
  2092. * \param bridge_channel Channel to write outgoing frame.
  2093. */
  2094. static void bridge_channel_handle_write(struct ast_bridge_channel *bridge_channel)
  2095. {
  2096. struct ast_frame *fr;
  2097. struct sync_payload *sync_payload;
  2098. int num;
  2099. struct ast_msg_data *msg;
  2100. ast_bridge_channel_lock(bridge_channel);
  2101. /* It's not good to have unbalanced frames and alert_pipe alerts. */
  2102. ast_assert(!AST_LIST_EMPTY(&bridge_channel->wr_queue));
  2103. if (AST_LIST_EMPTY(&bridge_channel->wr_queue)) {
  2104. /* No frame, flush the alert pipe of excess alerts. */
  2105. ast_log(LOG_WARNING, "Weird. No frame from bridge for %s to process?\n",
  2106. ast_channel_name(bridge_channel->chan));
  2107. ast_alertpipe_read(bridge_channel->alert_pipe);
  2108. ast_bridge_channel_unlock(bridge_channel);
  2109. return;
  2110. }
  2111. AST_LIST_TRAVERSE_SAFE_BEGIN(&bridge_channel->wr_queue, fr, frame_list) {
  2112. if (bridge_channel->dtmf_hook_state.collected[0]) {
  2113. switch (fr->frametype) {
  2114. case AST_FRAME_BRIDGE_ACTION:
  2115. case AST_FRAME_BRIDGE_ACTION_SYNC:
  2116. /* Defer processing these frames while DTMF is collected. */
  2117. continue;
  2118. default:
  2119. break;
  2120. }
  2121. }
  2122. ast_alertpipe_read(bridge_channel->alert_pipe);
  2123. AST_LIST_REMOVE_CURRENT(frame_list);
  2124. break;
  2125. }
  2126. AST_LIST_TRAVERSE_SAFE_END;
  2127. ast_bridge_channel_unlock(bridge_channel);
  2128. if (!fr) {
  2129. /*
  2130. * Wait some to reduce CPU usage from a tight loop
  2131. * without any wait because we only have deferred
  2132. * frames in the wr_queue.
  2133. */
  2134. usleep(1);
  2135. return;
  2136. }
  2137. switch (fr->frametype) {
  2138. case AST_FRAME_BRIDGE_ACTION:
  2139. bridge_channel_handle_action(bridge_channel, fr->subclass.integer, fr->data.ptr);
  2140. break;
  2141. case AST_FRAME_BRIDGE_ACTION_SYNC:
  2142. sync_payload = fr->data.ptr;
  2143. bridge_channel_handle_action(bridge_channel, fr->subclass.integer, sync_payload->data);
  2144. break;
  2145. case AST_FRAME_CONTROL:
  2146. bridge_channel_handle_control(bridge_channel, fr);
  2147. break;
  2148. case AST_FRAME_NULL:
  2149. break;
  2150. case AST_FRAME_TEXT:
  2151. ast_debug(1, "Sending TEXT frame to '%s': %*.s\n",
  2152. ast_channel_name(bridge_channel->chan), fr->datalen, (char *)fr->data.ptr);
  2153. sendtext_safe(bridge_channel->chan, fr);
  2154. break;
  2155. case AST_FRAME_TEXT_DATA:
  2156. msg = (struct ast_msg_data *)fr->data.ptr;
  2157. ast_debug(1, "Sending TEXT_DATA frame from '%s' to '%s:%s': %s\n",
  2158. ast_msg_data_get_attribute(msg, AST_MSG_DATA_ATTR_FROM),
  2159. ast_msg_data_get_attribute(msg, AST_MSG_DATA_ATTR_TO),
  2160. ast_channel_name(bridge_channel->chan),
  2161. ast_msg_data_get_attribute(msg, AST_MSG_DATA_ATTR_BODY));
  2162. ast_sendtext_data(bridge_channel->chan, msg);
  2163. break;
  2164. default:
  2165. /* Assume that there is no mapped stream for this */
  2166. num = -1;
  2167. if (fr->stream_num > -1) {
  2168. ast_bridge_channel_lock(bridge_channel);
  2169. if (fr->stream_num < (int)AST_VECTOR_SIZE(&bridge_channel->stream_map.to_channel)) {
  2170. num = AST_VECTOR_GET(&bridge_channel->stream_map.to_channel, fr->stream_num);
  2171. }
  2172. ast_bridge_channel_unlock(bridge_channel);
  2173. /* If there is no mapped stream after checking the mapping then there is nowhere
  2174. * to write this frame to, so drop it.
  2175. */
  2176. if (num == -1) {
  2177. break;
  2178. }
  2179. }
  2180. /* Write the frame to the channel. */
  2181. bridge_channel->activity = BRIDGE_CHANNEL_THREAD_SIMPLE;
  2182. ast_write_stream(bridge_channel->chan, num, fr);
  2183. break;
  2184. }
  2185. bridge_frame_free(fr);
  2186. }
  2187. /*!
  2188. * \internal
  2189. * \brief Handle DTMF from a channel
  2190. */
  2191. static struct ast_frame *bridge_handle_dtmf(struct ast_bridge_channel *bridge_channel, struct ast_frame *frame)
  2192. {
  2193. struct ast_bridge_features *features = bridge_channel->features;
  2194. struct ast_bridge_hook_dtmf *hook = NULL;
  2195. char dtmf[2];
  2196. /*
  2197. * See if we are already matching a DTMF feature hook sequence or
  2198. * if this DTMF matches the beginning of any DTMF feature hooks.
  2199. */
  2200. dtmf[0] = frame->subclass.integer;
  2201. dtmf[1] = '\0';
  2202. if (bridge_channel->dtmf_hook_state.collected[0]
  2203. || (hook = ao2_find(features->dtmf_hooks, dtmf, OBJ_SEARCH_PARTIAL_KEY))) {
  2204. enum ast_frame_type frametype = frame->frametype;
  2205. bridge_frame_free(frame);
  2206. frame = NULL;
  2207. ao2_cleanup(hook);
  2208. switch (frametype) {
  2209. case AST_FRAME_DTMF_BEGIN:
  2210. /* Just eat the frame. */
  2211. break;
  2212. case AST_FRAME_DTMF_END:
  2213. ast_bridge_channel_feature_digit(bridge_channel, dtmf[0]);
  2214. break;
  2215. default:
  2216. /* Unexpected frame type. */
  2217. ast_assert(0);
  2218. break;
  2219. }
  2220. #ifdef TEST_FRAMEWORK
  2221. } else if (frame->frametype == AST_FRAME_DTMF_END) {
  2222. /* Only transmit this event on DTMF end or else every DTMF
  2223. * press will result in the event being broadcast twice
  2224. */
  2225. ast_test_suite_event_notify("FEATURE_DETECTION", "Result: fail");
  2226. #endif
  2227. }
  2228. return frame;
  2229. }
  2230. static const char *controls[] = {
  2231. [AST_CONTROL_RINGING] = "RINGING",
  2232. [AST_CONTROL_PROCEEDING] = "PROCEEDING",
  2233. [AST_CONTROL_PROGRESS] = "PROGRESS",
  2234. [AST_CONTROL_BUSY] = "BUSY",
  2235. [AST_CONTROL_CONGESTION] = "CONGESTION",
  2236. [AST_CONTROL_ANSWER] = "ANSWER",
  2237. };
  2238. /*!
  2239. * \internal
  2240. * \brief Feed notification that a frame is waiting on a channel into the bridging core
  2241. *
  2242. * \param bridge_channel Bridge channel the notification was received on
  2243. */
  2244. static void bridge_handle_trip(struct ast_bridge_channel *bridge_channel)
  2245. {
  2246. struct ast_frame *frame;
  2247. int blocked;
  2248. if (!ast_strlen_zero(ast_channel_call_forward(bridge_channel->chan))) {
  2249. /* TODO If early bridging is ever used by anything other than ARI,
  2250. * it's important that we actually attempt to handle the call forward
  2251. * attempt, as well as expand features on a bridge channel to allow/disallow
  2252. * call forwarding. For now, all we do is raise an event, showing that
  2253. * a call forward is being attempted.
  2254. */
  2255. ast_channel_publish_dial_forward(NULL, bridge_channel->chan, NULL, NULL, "CANCEL",
  2256. ast_channel_call_forward(bridge_channel->chan));
  2257. }
  2258. if (bridge_channel->features->mute) {
  2259. frame = ast_read_stream_noaudio(bridge_channel->chan);
  2260. } else {
  2261. frame = ast_read_stream(bridge_channel->chan);
  2262. }
  2263. if (!frame) {
  2264. ast_bridge_channel_kick(bridge_channel, 0);
  2265. return;
  2266. }
  2267. if (!ast_channel_is_multistream(bridge_channel->chan)) {
  2268. /* This may not be initialized by non-multistream channel drivers */
  2269. frame->stream_num = -1;
  2270. }
  2271. switch (frame->frametype) {
  2272. case AST_FRAME_CONTROL:
  2273. switch (frame->subclass.integer) {
  2274. case AST_CONTROL_CONGESTION:
  2275. case AST_CONTROL_BUSY:
  2276. ast_channel_publish_dial(NULL, bridge_channel->chan, NULL, controls[frame->subclass.integer]);
  2277. break;
  2278. case AST_CONTROL_HANGUP:
  2279. ast_bridge_channel_kick(bridge_channel, 0);
  2280. bridge_frame_free(frame);
  2281. return;
  2282. case AST_CONTROL_RINGING:
  2283. case AST_CONTROL_PROGRESS:
  2284. case AST_CONTROL_PROCEEDING:
  2285. case AST_CONTROL_ANSWER:
  2286. ast_channel_publish_dial(NULL, bridge_channel->chan, NULL, controls[frame->subclass.integer]);
  2287. break;
  2288. case AST_CONTROL_STREAM_TOPOLOGY_REQUEST_CHANGE:
  2289. ast_bridge_channel_lock_bridge(bridge_channel);
  2290. blocked = bridge_channel->bridge->technology->stream_topology_request_change
  2291. && bridge_channel->bridge->technology->stream_topology_request_change(
  2292. bridge_channel->bridge, bridge_channel);
  2293. ast_bridge_unlock(bridge_channel->bridge);
  2294. if (blocked) {
  2295. /*
  2296. * Topology change was intercepted by the bridge technology
  2297. * so drop frame.
  2298. */
  2299. bridge_frame_free(frame);
  2300. return;
  2301. }
  2302. break;
  2303. case AST_CONTROL_STREAM_TOPOLOGY_CHANGED:
  2304. /*
  2305. * If a stream topology has changed then the bridge_channel's
  2306. * media mapping needs to be updated.
  2307. */
  2308. ast_bridge_channel_lock_bridge(bridge_channel);
  2309. if (bridge_channel->bridge->technology->stream_topology_changed) {
  2310. bridge_channel->bridge->technology->stream_topology_changed(
  2311. bridge_channel->bridge, bridge_channel);
  2312. } else {
  2313. ast_bridge_channel_stream_map(bridge_channel);
  2314. }
  2315. ast_bridge_unlock(bridge_channel->bridge);
  2316. break;
  2317. default:
  2318. break;
  2319. }
  2320. break;
  2321. case AST_FRAME_DTMF_BEGIN:
  2322. case AST_FRAME_DTMF_END:
  2323. frame = bridge_handle_dtmf(bridge_channel, frame);
  2324. if (!frame) {
  2325. return;
  2326. }
  2327. if (!bridge_channel->features->dtmf_passthrough) {
  2328. bridge_frame_free(frame);
  2329. return;
  2330. }
  2331. break;
  2332. default:
  2333. break;
  2334. }
  2335. /* Simply write the frame out to the bridge technology. */
  2336. bridge_channel_write_frame(bridge_channel, frame);
  2337. bridge_frame_free(frame);
  2338. }
  2339. /*!
  2340. * \internal
  2341. * \brief Determine how long till the next timer interval.
  2342. * \since 12.0.0
  2343. *
  2344. * \param bridge_channel Channel to determine how long can wait.
  2345. *
  2346. * \retval ms Number of milliseconds to wait.
  2347. * \retval -1 to wait forever.
  2348. */
  2349. static int bridge_channel_next_interval(struct ast_bridge_channel *bridge_channel)
  2350. {
  2351. struct ast_heap *interval_hooks = bridge_channel->features->interval_hooks;
  2352. struct ast_bridge_hook_timer *hook;
  2353. int ms;
  2354. ast_heap_wrlock(interval_hooks);
  2355. hook = ast_heap_peek(interval_hooks, 1);
  2356. if (hook) {
  2357. ms = ast_tvdiff_ms(hook->timer.trip_time, ast_tvnow());
  2358. if (ms < 0) {
  2359. /* Expire immediately. An interval hook is ready to run. */
  2360. ms = 0;
  2361. }
  2362. } else {
  2363. /* No hook so wait forever. */
  2364. ms = -1;
  2365. }
  2366. ast_heap_unlock(interval_hooks);
  2367. return ms;
  2368. }
  2369. /*!
  2370. * \internal
  2371. * \brief Determine how long till the DTMF interdigit timeout.
  2372. * \since 12.8.0
  2373. *
  2374. * \param bridge_channel Channel to determine how long can wait.
  2375. *
  2376. * \retval ms Number of milliseconds to wait.
  2377. * \retval -1 to wait forever.
  2378. */
  2379. static int bridge_channel_feature_timeout(struct ast_bridge_channel *bridge_channel)
  2380. {
  2381. int ms;
  2382. if (bridge_channel->dtmf_hook_state.collected[0]) {
  2383. ms = ast_tvdiff_ms(bridge_channel->dtmf_hook_state.interdigit_timeout,
  2384. ast_tvnow());
  2385. if (ms < 0) {
  2386. /* Expire immediately. */
  2387. ms = 0;
  2388. }
  2389. } else {
  2390. /* Timer is not active so wait forever. */
  2391. ms = -1;
  2392. }
  2393. return ms;
  2394. }
  2395. /*!
  2396. * \internal
  2397. * \brief Determine how long till a timeout.
  2398. * \since 12.8.0
  2399. *
  2400. * \param bridge_channel Channel to determine how long can wait.
  2401. *
  2402. * \retval ms Number of milliseconds to wait.
  2403. * \retval -1 to wait forever.
  2404. */
  2405. static int bridge_channel_next_timeout(struct ast_bridge_channel *bridge_channel)
  2406. {
  2407. int ms_interval;
  2408. int ms;
  2409. ms_interval = bridge_channel_next_interval(bridge_channel);
  2410. ms = bridge_channel_feature_timeout(bridge_channel);
  2411. if (ms < 0 || (0 <= ms_interval && ms_interval < ms)) {
  2412. /* Interval hook timeout is next. */
  2413. ms = ms_interval;
  2414. }
  2415. return ms;
  2416. }
  2417. /*!
  2418. * \internal
  2419. * \brief Wait for something to happen on the bridge channel and handle it.
  2420. * \since 12.0.0
  2421. *
  2422. * \param bridge_channel Channel to wait.
  2423. *
  2424. * \note Each channel does writing/reading in their own thread.
  2425. */
  2426. static void bridge_channel_wait(struct ast_bridge_channel *bridge_channel)
  2427. {
  2428. int ms;
  2429. int outfd;
  2430. struct ast_channel *chan;
  2431. /* Wait for data to either come from the channel or us to be signaled */
  2432. ast_bridge_channel_lock(bridge_channel);
  2433. if (bridge_channel->state != BRIDGE_CHANNEL_STATE_WAIT) {
  2434. } else if (bridge_channel->suspended) {
  2435. /* XXX ASTERISK-21271 the external party use of suspended will go away as will these references because this is the bridge channel thread */
  2436. ast_debug(1, "Bridge %s: %p(%s) is going into a signal wait\n",
  2437. bridge_channel->bridge->uniqueid, bridge_channel,
  2438. ast_channel_name(bridge_channel->chan));
  2439. ast_cond_wait(&bridge_channel->cond, ao2_object_get_lockaddr(bridge_channel));
  2440. } else {
  2441. ast_bridge_channel_unlock(bridge_channel);
  2442. outfd = -1;
  2443. ms = bridge_channel_next_timeout(bridge_channel);
  2444. chan = ast_waitfor_nandfds(&bridge_channel->chan, 1,
  2445. &bridge_channel->alert_pipe[0], 1, NULL, &outfd, &ms);
  2446. if (ast_channel_unbridged(bridge_channel->chan)) {
  2447. ast_channel_set_unbridged(bridge_channel->chan, 0);
  2448. ast_bridge_channel_lock_bridge(bridge_channel);
  2449. bridge_channel->bridge->reconfigured = 1;
  2450. bridge_reconfigured(bridge_channel->bridge, 0);
  2451. ast_bridge_unlock(bridge_channel->bridge);
  2452. }
  2453. ast_bridge_channel_lock(bridge_channel);
  2454. bridge_channel->activity = BRIDGE_CHANNEL_THREAD_FRAME;
  2455. ast_bridge_channel_unlock(bridge_channel);
  2456. if (!bridge_channel->suspended
  2457. && bridge_channel->state == BRIDGE_CHANNEL_STATE_WAIT) {
  2458. if (chan) {
  2459. bridge_handle_trip(bridge_channel);
  2460. } else if (ms == 0) {
  2461. /* An interdigit timeout or interval expired. */
  2462. bridge_channel_handle_feature_timeout(bridge_channel);
  2463. bridge_channel_handle_interval(bridge_channel);
  2464. } else if (-1 < outfd) {
  2465. /*
  2466. * Must do this after checking timeouts or may have
  2467. * an infinite loop due to deferring write queue
  2468. * actions while trying to match DTMF feature hooks.
  2469. */
  2470. bridge_channel_handle_write(bridge_channel);
  2471. }
  2472. }
  2473. bridge_channel->activity = BRIDGE_CHANNEL_THREAD_IDLE;
  2474. return;
  2475. }
  2476. ast_bridge_channel_unlock(bridge_channel);
  2477. }
  2478. /*!
  2479. * \internal
  2480. * \brief Handle bridge channel join/leave event.
  2481. * \since 12.0.0
  2482. *
  2483. * \param bridge_channel Which channel is involved.
  2484. * \param type Specified join/leave event.
  2485. */
  2486. static void bridge_channel_event_join_leave(struct ast_bridge_channel *bridge_channel, enum ast_bridge_hook_type type)
  2487. {
  2488. struct ast_bridge_features *features = bridge_channel->features;
  2489. struct ast_bridge_hook *hook;
  2490. struct ao2_iterator iter;
  2491. /* Run the specified hooks. */
  2492. iter = ao2_iterator_init(features->other_hooks, 0);
  2493. for (; (hook = ao2_iterator_next(&iter)); ao2_ref(hook, -1)) {
  2494. if (hook->type == type) {
  2495. break;
  2496. }
  2497. }
  2498. if (hook) {
  2499. /* Found the first specified hook to run. */
  2500. bridge_channel_suspend(bridge_channel);
  2501. ast_indicate(bridge_channel->chan, AST_CONTROL_SRCUPDATE);
  2502. do {
  2503. if (hook->type == type) {
  2504. hook->callback(bridge_channel, hook->hook_pvt);
  2505. ao2_unlink(features->other_hooks, hook);
  2506. }
  2507. ao2_ref(hook, -1);
  2508. } while ((hook = ao2_iterator_next(&iter)));
  2509. ast_indicate(bridge_channel->chan, AST_CONTROL_SRCUPDATE);
  2510. bridge_channel_unsuspend(bridge_channel);
  2511. }
  2512. ao2_iterator_destroy(&iter);
  2513. }
  2514. int bridge_channel_internal_join(struct ast_bridge_channel *bridge_channel)
  2515. {
  2516. int res = 0;
  2517. uint8_t indicate_src_change = 0;
  2518. struct ast_bridge_features *channel_features;
  2519. struct ast_channel *peer;
  2520. struct ast_channel *swap;
  2521. ast_debug(1, "Bridge %s: %p(%s) is joining\n",
  2522. bridge_channel->bridge->uniqueid,
  2523. bridge_channel, ast_channel_name(bridge_channel->chan));
  2524. /*
  2525. * Directly locking the bridge is safe here because nobody else
  2526. * knows about this bridge_channel yet.
  2527. */
  2528. ast_bridge_lock(bridge_channel->bridge);
  2529. ast_channel_lock(bridge_channel->chan);
  2530. peer = ast_local_get_peer(bridge_channel->chan);
  2531. if (peer) {
  2532. struct ast_bridge *peer_bridge;
  2533. ast_channel_unlock(bridge_channel->chan);
  2534. ast_channel_lock(peer);
  2535. peer_bridge = ast_channel_internal_bridge(peer);
  2536. ast_channel_unlock(peer);
  2537. ast_channel_unref(peer);
  2538. /* As we are only doing a pointer comparison we don't need the peer_bridge
  2539. * to be reference counted or locked.
  2540. */
  2541. if (peer_bridge == bridge_channel->bridge) {
  2542. ast_bridge_unlock(bridge_channel->bridge);
  2543. ast_debug(1, "Bridge %s: %p(%s) denying Bridge join to prevent Local channel loop\n",
  2544. bridge_channel->bridge->uniqueid,
  2545. bridge_channel,
  2546. ast_channel_name(bridge_channel->chan));
  2547. return -1;
  2548. }
  2549. ast_channel_lock(bridge_channel->chan);
  2550. }
  2551. bridge_channel->read_format = ao2_bump(ast_channel_readformat(bridge_channel->chan));
  2552. bridge_channel->write_format = ao2_bump(ast_channel_writeformat(bridge_channel->chan));
  2553. /* Make sure we're still good to be put into a bridge */
  2554. if (ast_channel_internal_bridge(bridge_channel->chan)
  2555. || ast_test_flag(ast_channel_flags(bridge_channel->chan), AST_FLAG_ZOMBIE)) {
  2556. ast_channel_unlock(bridge_channel->chan);
  2557. ast_bridge_unlock(bridge_channel->bridge);
  2558. ast_debug(1, "Bridge %s: %p(%s) failed to join Bridge\n",
  2559. bridge_channel->bridge->uniqueid,
  2560. bridge_channel,
  2561. ast_channel_name(bridge_channel->chan));
  2562. return -1;
  2563. }
  2564. ast_channel_internal_bridge_set(bridge_channel->chan, bridge_channel->bridge);
  2565. /* Attach features requested by the channel */
  2566. channel_features = ast_channel_feature_hooks_get(bridge_channel->chan);
  2567. if (channel_features) {
  2568. ast_bridge_features_merge(bridge_channel->features, channel_features);
  2569. }
  2570. ast_channel_unlock(bridge_channel->chan);
  2571. /* Add the jitterbuffer if the channel requires it */
  2572. ast_jb_enable_for_channel(bridge_channel->chan);
  2573. if (!bridge_channel->bridge->callid) {
  2574. bridge_channel->bridge->callid = ast_read_threadstorage_callid();
  2575. }
  2576. /* Take the swap channel ref from the bridge_channel struct. */
  2577. swap = bridge_channel->swap;
  2578. if (bridge_channel_internal_push(bridge_channel)) {
  2579. int cause = bridge_channel->bridge->cause;
  2580. ast_bridge_unlock(bridge_channel->bridge);
  2581. ast_bridge_channel_kick(bridge_channel, cause);
  2582. ast_bridge_channel_lock_bridge(bridge_channel);
  2583. ast_bridge_features_remove(bridge_channel->features,
  2584. AST_BRIDGE_HOOK_REMOVE_ON_PULL);
  2585. bridge_channel_dissolve_check(bridge_channel);
  2586. res = -1;
  2587. }
  2588. bridge_reconfigured(bridge_channel->bridge, !bridge_channel->inhibit_colp);
  2589. if (bridge_channel->state == BRIDGE_CHANNEL_STATE_WAIT) {
  2590. /*
  2591. * Indicate a source change since this channel is entering the
  2592. * bridge system only if the bridge technology is not MULTIMIX
  2593. * capable. The MULTIMIX technology has already done it.
  2594. */
  2595. if (!(bridge_channel->bridge->technology->capabilities
  2596. & AST_BRIDGE_CAPABILITY_MULTIMIX)) {
  2597. indicate_src_change = 1;
  2598. }
  2599. bridge_channel_impart_signal(bridge_channel->chan);
  2600. ast_bridge_unlock(bridge_channel->bridge);
  2601. /* Must release any swap ref after unlocking the bridge. */
  2602. ao2_t_cleanup(swap, "Bridge push with swap successful");
  2603. swap = NULL;
  2604. if (indicate_src_change) {
  2605. ast_indicate(bridge_channel->chan, AST_CONTROL_SRCCHANGE);
  2606. }
  2607. bridge_channel_event_join_leave(bridge_channel, AST_BRIDGE_HOOK_TYPE_JOIN);
  2608. while (bridge_channel->state == BRIDGE_CHANNEL_STATE_WAIT) {
  2609. /* Wait for something to do. */
  2610. bridge_channel_wait(bridge_channel);
  2611. }
  2612. /* Force a timeout on any accumulated DTMF hook digits. */
  2613. ast_bridge_channel_feature_digit(bridge_channel, 0);
  2614. bridge_channel_event_join_leave(bridge_channel, AST_BRIDGE_HOOK_TYPE_LEAVE);
  2615. ast_bridge_channel_lock_bridge(bridge_channel);
  2616. }
  2617. bridge_channel_internal_pull(bridge_channel);
  2618. bridge_channel_settle_owed_events(bridge_channel->bridge, bridge_channel);
  2619. bridge_reconfigured(bridge_channel->bridge, 1);
  2620. /* Remove ourselves if we are the video source */
  2621. ast_bridge_remove_video_src(bridge_channel->bridge, bridge_channel->chan);
  2622. ast_bridge_unlock(bridge_channel->bridge);
  2623. /* Must release any swap ref after unlocking the bridge. */
  2624. ao2_t_cleanup(swap, "Bridge push with swap failed or exited immediately");
  2625. /* Complete any active hold before exiting the bridge. */
  2626. if (ast_channel_hold_state(bridge_channel->chan) == AST_CONTROL_HOLD) {
  2627. ast_debug(1, "Channel %s simulating UNHOLD for bridge end.\n",
  2628. ast_channel_name(bridge_channel->chan));
  2629. ast_indicate(bridge_channel->chan, AST_CONTROL_UNHOLD);
  2630. }
  2631. /* Complete any partial DTMF digit before exiting the bridge. */
  2632. if (ast_channel_sending_dtmf_digit(bridge_channel->chan)) {
  2633. ast_channel_end_dtmf(bridge_channel->chan,
  2634. ast_channel_sending_dtmf_digit(bridge_channel->chan),
  2635. ast_channel_sending_dtmf_tv(bridge_channel->chan), "bridge end");
  2636. }
  2637. /* Complete any T.38 session before exiting the bridge. */
  2638. if (ast_channel_is_t38_active(bridge_channel->chan)) {
  2639. struct ast_control_t38_parameters t38_parameters = {
  2640. .request_response = AST_T38_TERMINATED,
  2641. };
  2642. ast_debug(1, "Channel %s simulating T.38 terminate for bridge end.\n",
  2643. ast_channel_name(bridge_channel->chan));
  2644. ast_indicate_data(bridge_channel->chan, AST_CONTROL_T38_PARAMETERS,
  2645. &t38_parameters, sizeof(t38_parameters));
  2646. }
  2647. /* Indicate a source change since this channel is leaving the bridge system. */
  2648. ast_indicate(bridge_channel->chan, AST_CONTROL_SRCCHANGE);
  2649. /*
  2650. * Wait for any dual redirect to complete.
  2651. *
  2652. * Must be done while "still in the bridge" for ast_async_goto()
  2653. * to work right.
  2654. */
  2655. while (ast_test_flag(ast_channel_flags(bridge_channel->chan), AST_FLAG_BRIDGE_DUAL_REDIRECT_WAIT)) {
  2656. sched_yield();
  2657. }
  2658. ast_channel_lock(bridge_channel->chan);
  2659. ast_channel_internal_bridge_set(bridge_channel->chan, NULL);
  2660. ast_channel_unlock(bridge_channel->chan);
  2661. ast_bridge_channel_restore_formats(bridge_channel);
  2662. return res;
  2663. }
  2664. int bridge_channel_internal_queue_blind_transfer(struct ast_channel *transferee,
  2665. const char *exten, const char *context,
  2666. transfer_channel_cb new_channel_cb, void *user_data)
  2667. {
  2668. RAII_VAR(struct ast_bridge_channel *, transferee_bridge_channel, NULL, ao2_cleanup);
  2669. struct blind_transfer_data blind_data;
  2670. ast_channel_lock(transferee);
  2671. transferee_bridge_channel = ast_channel_get_bridge_channel(transferee);
  2672. ast_channel_unlock(transferee);
  2673. if (!transferee_bridge_channel) {
  2674. return -1;
  2675. }
  2676. if (new_channel_cb) {
  2677. new_channel_cb(transferee, user_data, AST_BRIDGE_TRANSFER_SINGLE_PARTY);
  2678. }
  2679. ast_copy_string(blind_data.exten, exten, sizeof(blind_data.exten));
  2680. ast_copy_string(blind_data.context, context, sizeof(blind_data.context));
  2681. return bridge_channel_queue_action_data(transferee_bridge_channel,
  2682. BRIDGE_CHANNEL_ACTION_BLIND_TRANSFER, &blind_data, sizeof(blind_data));
  2683. }
  2684. int bridge_channel_internal_queue_attended_transfer(struct ast_channel *transferee,
  2685. struct ast_channel *unbridged_chan)
  2686. {
  2687. RAII_VAR(struct ast_bridge_channel *, transferee_bridge_channel, NULL, ao2_cleanup);
  2688. char unbridged_chan_name[AST_CHANNEL_NAME];
  2689. ast_channel_lock(transferee);
  2690. transferee_bridge_channel = ast_channel_get_bridge_channel(transferee);
  2691. ast_channel_unlock(transferee);
  2692. if (!transferee_bridge_channel) {
  2693. return -1;
  2694. }
  2695. ast_copy_string(unbridged_chan_name, ast_channel_name(unbridged_chan),
  2696. sizeof(unbridged_chan_name));
  2697. return bridge_channel_queue_action_data(transferee_bridge_channel,
  2698. BRIDGE_CHANNEL_ACTION_ATTENDED_TRANSFER, unbridged_chan_name,
  2699. sizeof(unbridged_chan_name));
  2700. }
  2701. int bridge_channel_internal_allows_optimization(struct ast_bridge_channel *bridge_channel)
  2702. {
  2703. return bridge_channel->in_bridge
  2704. && AST_LIST_EMPTY(&bridge_channel->wr_queue);
  2705. }
  2706. /* Destroy elements of the bridge channel structure and the bridge channel structure itself */
  2707. static void bridge_channel_destroy(void *obj)
  2708. {
  2709. struct ast_bridge_channel *bridge_channel = obj;
  2710. struct ast_frame *fr;
  2711. if (bridge_channel->callid) {
  2712. bridge_channel->callid = 0;
  2713. }
  2714. if (bridge_channel->bridge) {
  2715. ao2_ref(bridge_channel->bridge, -1);
  2716. bridge_channel->bridge = NULL;
  2717. }
  2718. /* Flush any unhandled wr_queue frames. */
  2719. while ((fr = AST_LIST_REMOVE_HEAD(&bridge_channel->wr_queue, frame_list))) {
  2720. bridge_frame_free(fr);
  2721. }
  2722. ast_alertpipe_close(bridge_channel->alert_pipe);
  2723. /* Flush any unhandled deferred_queue frames. */
  2724. while ((fr = AST_LIST_REMOVE_HEAD(&bridge_channel->deferred_queue, frame_list))) {
  2725. ast_frfree(fr);
  2726. }
  2727. ast_cond_destroy(&bridge_channel->cond);
  2728. ao2_cleanup(bridge_channel->write_format);
  2729. ao2_cleanup(bridge_channel->read_format);
  2730. AST_VECTOR_FREE(&bridge_channel->stream_map.to_bridge);
  2731. AST_VECTOR_FREE(&bridge_channel->stream_map.to_channel);
  2732. }
  2733. struct ast_bridge_channel *bridge_channel_internal_alloc(struct ast_bridge *bridge)
  2734. {
  2735. struct ast_bridge_channel *bridge_channel;
  2736. bridge_channel = ao2_alloc(sizeof(struct ast_bridge_channel), bridge_channel_destroy);
  2737. if (!bridge_channel) {
  2738. return NULL;
  2739. }
  2740. ast_cond_init(&bridge_channel->cond, NULL);
  2741. if (ast_alertpipe_init(bridge_channel->alert_pipe)) {
  2742. ao2_ref(bridge_channel, -1);
  2743. return NULL;
  2744. }
  2745. if (bridge) {
  2746. bridge_channel->bridge = bridge;
  2747. ao2_ref(bridge_channel->bridge, +1);
  2748. }
  2749. /* The stream_map is initialized later - see ast_bridge_channel_stream_map */
  2750. return bridge_channel;
  2751. }
  2752. void ast_bridge_channel_stream_map(struct ast_bridge_channel *bridge_channel)
  2753. {
  2754. ast_bridge_channel_lock(bridge_channel);
  2755. ast_channel_lock(bridge_channel->chan);
  2756. ast_stream_topology_map(ast_channel_get_stream_topology(bridge_channel->chan),
  2757. &bridge_channel->bridge->media_types, &bridge_channel->stream_map.to_bridge,
  2758. &bridge_channel->stream_map.to_channel);
  2759. ast_channel_unlock(bridge_channel->chan);
  2760. ast_bridge_channel_unlock(bridge_channel);
  2761. }