ari_model_validators.c 147 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394
  1. /*
  2. * Asterisk -- An open source telephony toolkit.
  3. *
  4. * Copyright (C) 2013, Digium, Inc.
  5. *
  6. * See http://www.asterisk.org for more information about
  7. * the Asterisk project. Please do not directly contact
  8. * any of the maintainers of this project for assistance;
  9. * the project provides a web site, mailing lists and IRC
  10. * channels for your use.
  11. *
  12. * This program is free software, distributed under the terms of
  13. * the GNU General Public License Version 2. See the LICENSE file
  14. * at the top of the source tree.
  15. */
  16. /*! \file
  17. *
  18. * \brief Generated file - Build validators for ARI model objects.
  19. */
  20. /*
  21. * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  22. * !!!!! DO NOT EDIT !!!!!
  23. * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  24. * This file is generated by a mustache template. Please see the original
  25. * template in rest-api-templates/ari_model_validators.h.mustache
  26. */
  27. #include "asterisk.h"
  28. ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
  29. #include "asterisk/logger.h"
  30. #include "asterisk/module.h"
  31. #include "ari_model_validators.h"
  32. int ast_ari_validate_asterisk_info(struct ast_json *json)
  33. {
  34. int res = 1;
  35. struct ast_json_iter *iter;
  36. for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
  37. if (strcmp("build", ast_json_object_iter_key(iter)) == 0) {
  38. int prop_is_valid;
  39. prop_is_valid = ast_ari_validate_build_info(
  40. ast_json_object_iter_value(iter));
  41. if (!prop_is_valid) {
  42. ast_log(LOG_ERROR, "ARI AsteriskInfo field build failed validation\n");
  43. res = 0;
  44. }
  45. } else
  46. if (strcmp("config", ast_json_object_iter_key(iter)) == 0) {
  47. int prop_is_valid;
  48. prop_is_valid = ast_ari_validate_config_info(
  49. ast_json_object_iter_value(iter));
  50. if (!prop_is_valid) {
  51. ast_log(LOG_ERROR, "ARI AsteriskInfo field config failed validation\n");
  52. res = 0;
  53. }
  54. } else
  55. if (strcmp("status", ast_json_object_iter_key(iter)) == 0) {
  56. int prop_is_valid;
  57. prop_is_valid = ast_ari_validate_status_info(
  58. ast_json_object_iter_value(iter));
  59. if (!prop_is_valid) {
  60. ast_log(LOG_ERROR, "ARI AsteriskInfo field status failed validation\n");
  61. res = 0;
  62. }
  63. } else
  64. if (strcmp("system", ast_json_object_iter_key(iter)) == 0) {
  65. int prop_is_valid;
  66. prop_is_valid = ast_ari_validate_system_info(
  67. ast_json_object_iter_value(iter));
  68. if (!prop_is_valid) {
  69. ast_log(LOG_ERROR, "ARI AsteriskInfo field system failed validation\n");
  70. res = 0;
  71. }
  72. } else
  73. {
  74. ast_log(LOG_ERROR,
  75. "ARI AsteriskInfo has undocumented field %s\n",
  76. ast_json_object_iter_key(iter));
  77. res = 0;
  78. }
  79. }
  80. return res;
  81. }
  82. ari_validator ast_ari_validate_asterisk_info_fn(void)
  83. {
  84. return ast_ari_validate_asterisk_info;
  85. }
  86. int ast_ari_validate_build_info(struct ast_json *json)
  87. {
  88. int res = 1;
  89. struct ast_json_iter *iter;
  90. int has_date = 0;
  91. int has_kernel = 0;
  92. int has_machine = 0;
  93. int has_options = 0;
  94. int has_os = 0;
  95. int has_user = 0;
  96. for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
  97. if (strcmp("date", ast_json_object_iter_key(iter)) == 0) {
  98. int prop_is_valid;
  99. has_date = 1;
  100. prop_is_valid = ast_ari_validate_string(
  101. ast_json_object_iter_value(iter));
  102. if (!prop_is_valid) {
  103. ast_log(LOG_ERROR, "ARI BuildInfo field date failed validation\n");
  104. res = 0;
  105. }
  106. } else
  107. if (strcmp("kernel", ast_json_object_iter_key(iter)) == 0) {
  108. int prop_is_valid;
  109. has_kernel = 1;
  110. prop_is_valid = ast_ari_validate_string(
  111. ast_json_object_iter_value(iter));
  112. if (!prop_is_valid) {
  113. ast_log(LOG_ERROR, "ARI BuildInfo field kernel failed validation\n");
  114. res = 0;
  115. }
  116. } else
  117. if (strcmp("machine", ast_json_object_iter_key(iter)) == 0) {
  118. int prop_is_valid;
  119. has_machine = 1;
  120. prop_is_valid = ast_ari_validate_string(
  121. ast_json_object_iter_value(iter));
  122. if (!prop_is_valid) {
  123. ast_log(LOG_ERROR, "ARI BuildInfo field machine failed validation\n");
  124. res = 0;
  125. }
  126. } else
  127. if (strcmp("options", ast_json_object_iter_key(iter)) == 0) {
  128. int prop_is_valid;
  129. has_options = 1;
  130. prop_is_valid = ast_ari_validate_string(
  131. ast_json_object_iter_value(iter));
  132. if (!prop_is_valid) {
  133. ast_log(LOG_ERROR, "ARI BuildInfo field options failed validation\n");
  134. res = 0;
  135. }
  136. } else
  137. if (strcmp("os", ast_json_object_iter_key(iter)) == 0) {
  138. int prop_is_valid;
  139. has_os = 1;
  140. prop_is_valid = ast_ari_validate_string(
  141. ast_json_object_iter_value(iter));
  142. if (!prop_is_valid) {
  143. ast_log(LOG_ERROR, "ARI BuildInfo field os failed validation\n");
  144. res = 0;
  145. }
  146. } else
  147. if (strcmp("user", ast_json_object_iter_key(iter)) == 0) {
  148. int prop_is_valid;
  149. has_user = 1;
  150. prop_is_valid = ast_ari_validate_string(
  151. ast_json_object_iter_value(iter));
  152. if (!prop_is_valid) {
  153. ast_log(LOG_ERROR, "ARI BuildInfo field user failed validation\n");
  154. res = 0;
  155. }
  156. } else
  157. {
  158. ast_log(LOG_ERROR,
  159. "ARI BuildInfo has undocumented field %s\n",
  160. ast_json_object_iter_key(iter));
  161. res = 0;
  162. }
  163. }
  164. if (!has_date) {
  165. ast_log(LOG_ERROR, "ARI BuildInfo missing required field date\n");
  166. res = 0;
  167. }
  168. if (!has_kernel) {
  169. ast_log(LOG_ERROR, "ARI BuildInfo missing required field kernel\n");
  170. res = 0;
  171. }
  172. if (!has_machine) {
  173. ast_log(LOG_ERROR, "ARI BuildInfo missing required field machine\n");
  174. res = 0;
  175. }
  176. if (!has_options) {
  177. ast_log(LOG_ERROR, "ARI BuildInfo missing required field options\n");
  178. res = 0;
  179. }
  180. if (!has_os) {
  181. ast_log(LOG_ERROR, "ARI BuildInfo missing required field os\n");
  182. res = 0;
  183. }
  184. if (!has_user) {
  185. ast_log(LOG_ERROR, "ARI BuildInfo missing required field user\n");
  186. res = 0;
  187. }
  188. return res;
  189. }
  190. ari_validator ast_ari_validate_build_info_fn(void)
  191. {
  192. return ast_ari_validate_build_info;
  193. }
  194. int ast_ari_validate_config_info(struct ast_json *json)
  195. {
  196. int res = 1;
  197. struct ast_json_iter *iter;
  198. int has_default_language = 0;
  199. int has_name = 0;
  200. int has_setid = 0;
  201. for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
  202. if (strcmp("default_language", ast_json_object_iter_key(iter)) == 0) {
  203. int prop_is_valid;
  204. has_default_language = 1;
  205. prop_is_valid = ast_ari_validate_string(
  206. ast_json_object_iter_value(iter));
  207. if (!prop_is_valid) {
  208. ast_log(LOG_ERROR, "ARI ConfigInfo field default_language failed validation\n");
  209. res = 0;
  210. }
  211. } else
  212. if (strcmp("max_channels", ast_json_object_iter_key(iter)) == 0) {
  213. int prop_is_valid;
  214. prop_is_valid = ast_ari_validate_int(
  215. ast_json_object_iter_value(iter));
  216. if (!prop_is_valid) {
  217. ast_log(LOG_ERROR, "ARI ConfigInfo field max_channels failed validation\n");
  218. res = 0;
  219. }
  220. } else
  221. if (strcmp("max_load", ast_json_object_iter_key(iter)) == 0) {
  222. int prop_is_valid;
  223. prop_is_valid = ast_ari_validate_double(
  224. ast_json_object_iter_value(iter));
  225. if (!prop_is_valid) {
  226. ast_log(LOG_ERROR, "ARI ConfigInfo field max_load failed validation\n");
  227. res = 0;
  228. }
  229. } else
  230. if (strcmp("max_open_files", ast_json_object_iter_key(iter)) == 0) {
  231. int prop_is_valid;
  232. prop_is_valid = ast_ari_validate_int(
  233. ast_json_object_iter_value(iter));
  234. if (!prop_is_valid) {
  235. ast_log(LOG_ERROR, "ARI ConfigInfo field max_open_files failed validation\n");
  236. res = 0;
  237. }
  238. } else
  239. if (strcmp("name", ast_json_object_iter_key(iter)) == 0) {
  240. int prop_is_valid;
  241. has_name = 1;
  242. prop_is_valid = ast_ari_validate_string(
  243. ast_json_object_iter_value(iter));
  244. if (!prop_is_valid) {
  245. ast_log(LOG_ERROR, "ARI ConfigInfo field name failed validation\n");
  246. res = 0;
  247. }
  248. } else
  249. if (strcmp("setid", ast_json_object_iter_key(iter)) == 0) {
  250. int prop_is_valid;
  251. has_setid = 1;
  252. prop_is_valid = ast_ari_validate_set_id(
  253. ast_json_object_iter_value(iter));
  254. if (!prop_is_valid) {
  255. ast_log(LOG_ERROR, "ARI ConfigInfo field setid failed validation\n");
  256. res = 0;
  257. }
  258. } else
  259. {
  260. ast_log(LOG_ERROR,
  261. "ARI ConfigInfo has undocumented field %s\n",
  262. ast_json_object_iter_key(iter));
  263. res = 0;
  264. }
  265. }
  266. if (!has_default_language) {
  267. ast_log(LOG_ERROR, "ARI ConfigInfo missing required field default_language\n");
  268. res = 0;
  269. }
  270. if (!has_name) {
  271. ast_log(LOG_ERROR, "ARI ConfigInfo missing required field name\n");
  272. res = 0;
  273. }
  274. if (!has_setid) {
  275. ast_log(LOG_ERROR, "ARI ConfigInfo missing required field setid\n");
  276. res = 0;
  277. }
  278. return res;
  279. }
  280. ari_validator ast_ari_validate_config_info_fn(void)
  281. {
  282. return ast_ari_validate_config_info;
  283. }
  284. int ast_ari_validate_set_id(struct ast_json *json)
  285. {
  286. int res = 1;
  287. struct ast_json_iter *iter;
  288. int has_group = 0;
  289. int has_user = 0;
  290. for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
  291. if (strcmp("group", ast_json_object_iter_key(iter)) == 0) {
  292. int prop_is_valid;
  293. has_group = 1;
  294. prop_is_valid = ast_ari_validate_string(
  295. ast_json_object_iter_value(iter));
  296. if (!prop_is_valid) {
  297. ast_log(LOG_ERROR, "ARI SetId field group failed validation\n");
  298. res = 0;
  299. }
  300. } else
  301. if (strcmp("user", ast_json_object_iter_key(iter)) == 0) {
  302. int prop_is_valid;
  303. has_user = 1;
  304. prop_is_valid = ast_ari_validate_string(
  305. ast_json_object_iter_value(iter));
  306. if (!prop_is_valid) {
  307. ast_log(LOG_ERROR, "ARI SetId field user failed validation\n");
  308. res = 0;
  309. }
  310. } else
  311. {
  312. ast_log(LOG_ERROR,
  313. "ARI SetId has undocumented field %s\n",
  314. ast_json_object_iter_key(iter));
  315. res = 0;
  316. }
  317. }
  318. if (!has_group) {
  319. ast_log(LOG_ERROR, "ARI SetId missing required field group\n");
  320. res = 0;
  321. }
  322. if (!has_user) {
  323. ast_log(LOG_ERROR, "ARI SetId missing required field user\n");
  324. res = 0;
  325. }
  326. return res;
  327. }
  328. ari_validator ast_ari_validate_set_id_fn(void)
  329. {
  330. return ast_ari_validate_set_id;
  331. }
  332. int ast_ari_validate_status_info(struct ast_json *json)
  333. {
  334. int res = 1;
  335. struct ast_json_iter *iter;
  336. int has_last_reload_time = 0;
  337. int has_startup_time = 0;
  338. for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
  339. if (strcmp("last_reload_time", ast_json_object_iter_key(iter)) == 0) {
  340. int prop_is_valid;
  341. has_last_reload_time = 1;
  342. prop_is_valid = ast_ari_validate_date(
  343. ast_json_object_iter_value(iter));
  344. if (!prop_is_valid) {
  345. ast_log(LOG_ERROR, "ARI StatusInfo field last_reload_time failed validation\n");
  346. res = 0;
  347. }
  348. } else
  349. if (strcmp("startup_time", ast_json_object_iter_key(iter)) == 0) {
  350. int prop_is_valid;
  351. has_startup_time = 1;
  352. prop_is_valid = ast_ari_validate_date(
  353. ast_json_object_iter_value(iter));
  354. if (!prop_is_valid) {
  355. ast_log(LOG_ERROR, "ARI StatusInfo field startup_time failed validation\n");
  356. res = 0;
  357. }
  358. } else
  359. {
  360. ast_log(LOG_ERROR,
  361. "ARI StatusInfo has undocumented field %s\n",
  362. ast_json_object_iter_key(iter));
  363. res = 0;
  364. }
  365. }
  366. if (!has_last_reload_time) {
  367. ast_log(LOG_ERROR, "ARI StatusInfo missing required field last_reload_time\n");
  368. res = 0;
  369. }
  370. if (!has_startup_time) {
  371. ast_log(LOG_ERROR, "ARI StatusInfo missing required field startup_time\n");
  372. res = 0;
  373. }
  374. return res;
  375. }
  376. ari_validator ast_ari_validate_status_info_fn(void)
  377. {
  378. return ast_ari_validate_status_info;
  379. }
  380. int ast_ari_validate_system_info(struct ast_json *json)
  381. {
  382. int res = 1;
  383. struct ast_json_iter *iter;
  384. int has_entity_id = 0;
  385. int has_version = 0;
  386. for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
  387. if (strcmp("entity_id", ast_json_object_iter_key(iter)) == 0) {
  388. int prop_is_valid;
  389. has_entity_id = 1;
  390. prop_is_valid = ast_ari_validate_string(
  391. ast_json_object_iter_value(iter));
  392. if (!prop_is_valid) {
  393. ast_log(LOG_ERROR, "ARI SystemInfo field entity_id failed validation\n");
  394. res = 0;
  395. }
  396. } else
  397. if (strcmp("version", ast_json_object_iter_key(iter)) == 0) {
  398. int prop_is_valid;
  399. has_version = 1;
  400. prop_is_valid = ast_ari_validate_string(
  401. ast_json_object_iter_value(iter));
  402. if (!prop_is_valid) {
  403. ast_log(LOG_ERROR, "ARI SystemInfo field version failed validation\n");
  404. res = 0;
  405. }
  406. } else
  407. {
  408. ast_log(LOG_ERROR,
  409. "ARI SystemInfo has undocumented field %s\n",
  410. ast_json_object_iter_key(iter));
  411. res = 0;
  412. }
  413. }
  414. if (!has_entity_id) {
  415. ast_log(LOG_ERROR, "ARI SystemInfo missing required field entity_id\n");
  416. res = 0;
  417. }
  418. if (!has_version) {
  419. ast_log(LOG_ERROR, "ARI SystemInfo missing required field version\n");
  420. res = 0;
  421. }
  422. return res;
  423. }
  424. ari_validator ast_ari_validate_system_info_fn(void)
  425. {
  426. return ast_ari_validate_system_info;
  427. }
  428. int ast_ari_validate_variable(struct ast_json *json)
  429. {
  430. int res = 1;
  431. struct ast_json_iter *iter;
  432. int has_value = 0;
  433. for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
  434. if (strcmp("value", ast_json_object_iter_key(iter)) == 0) {
  435. int prop_is_valid;
  436. has_value = 1;
  437. prop_is_valid = ast_ari_validate_string(
  438. ast_json_object_iter_value(iter));
  439. if (!prop_is_valid) {
  440. ast_log(LOG_ERROR, "ARI Variable field value failed validation\n");
  441. res = 0;
  442. }
  443. } else
  444. {
  445. ast_log(LOG_ERROR,
  446. "ARI Variable has undocumented field %s\n",
  447. ast_json_object_iter_key(iter));
  448. res = 0;
  449. }
  450. }
  451. if (!has_value) {
  452. ast_log(LOG_ERROR, "ARI Variable missing required field value\n");
  453. res = 0;
  454. }
  455. return res;
  456. }
  457. ari_validator ast_ari_validate_variable_fn(void)
  458. {
  459. return ast_ari_validate_variable;
  460. }
  461. int ast_ari_validate_endpoint(struct ast_json *json)
  462. {
  463. int res = 1;
  464. struct ast_json_iter *iter;
  465. int has_channel_ids = 0;
  466. int has_resource = 0;
  467. int has_technology = 0;
  468. for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
  469. if (strcmp("channel_ids", ast_json_object_iter_key(iter)) == 0) {
  470. int prop_is_valid;
  471. has_channel_ids = 1;
  472. prop_is_valid = ast_ari_validate_list(
  473. ast_json_object_iter_value(iter),
  474. ast_ari_validate_string);
  475. if (!prop_is_valid) {
  476. ast_log(LOG_ERROR, "ARI Endpoint field channel_ids failed validation\n");
  477. res = 0;
  478. }
  479. } else
  480. if (strcmp("resource", ast_json_object_iter_key(iter)) == 0) {
  481. int prop_is_valid;
  482. has_resource = 1;
  483. prop_is_valid = ast_ari_validate_string(
  484. ast_json_object_iter_value(iter));
  485. if (!prop_is_valid) {
  486. ast_log(LOG_ERROR, "ARI Endpoint field resource failed validation\n");
  487. res = 0;
  488. }
  489. } else
  490. if (strcmp("state", ast_json_object_iter_key(iter)) == 0) {
  491. int prop_is_valid;
  492. prop_is_valid = ast_ari_validate_string(
  493. ast_json_object_iter_value(iter));
  494. if (!prop_is_valid) {
  495. ast_log(LOG_ERROR, "ARI Endpoint field state failed validation\n");
  496. res = 0;
  497. }
  498. } else
  499. if (strcmp("technology", ast_json_object_iter_key(iter)) == 0) {
  500. int prop_is_valid;
  501. has_technology = 1;
  502. prop_is_valid = ast_ari_validate_string(
  503. ast_json_object_iter_value(iter));
  504. if (!prop_is_valid) {
  505. ast_log(LOG_ERROR, "ARI Endpoint field technology failed validation\n");
  506. res = 0;
  507. }
  508. } else
  509. {
  510. ast_log(LOG_ERROR,
  511. "ARI Endpoint has undocumented field %s\n",
  512. ast_json_object_iter_key(iter));
  513. res = 0;
  514. }
  515. }
  516. if (!has_channel_ids) {
  517. ast_log(LOG_ERROR, "ARI Endpoint missing required field channel_ids\n");
  518. res = 0;
  519. }
  520. if (!has_resource) {
  521. ast_log(LOG_ERROR, "ARI Endpoint missing required field resource\n");
  522. res = 0;
  523. }
  524. if (!has_technology) {
  525. ast_log(LOG_ERROR, "ARI Endpoint missing required field technology\n");
  526. res = 0;
  527. }
  528. return res;
  529. }
  530. ari_validator ast_ari_validate_endpoint_fn(void)
  531. {
  532. return ast_ari_validate_endpoint;
  533. }
  534. int ast_ari_validate_text_message(struct ast_json *json)
  535. {
  536. int res = 1;
  537. struct ast_json_iter *iter;
  538. int has_body = 0;
  539. int has_from = 0;
  540. int has_to = 0;
  541. for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
  542. if (strcmp("body", ast_json_object_iter_key(iter)) == 0) {
  543. int prop_is_valid;
  544. has_body = 1;
  545. prop_is_valid = ast_ari_validate_string(
  546. ast_json_object_iter_value(iter));
  547. if (!prop_is_valid) {
  548. ast_log(LOG_ERROR, "ARI TextMessage field body failed validation\n");
  549. res = 0;
  550. }
  551. } else
  552. if (strcmp("from", ast_json_object_iter_key(iter)) == 0) {
  553. int prop_is_valid;
  554. has_from = 1;
  555. prop_is_valid = ast_ari_validate_string(
  556. ast_json_object_iter_value(iter));
  557. if (!prop_is_valid) {
  558. ast_log(LOG_ERROR, "ARI TextMessage field from failed validation\n");
  559. res = 0;
  560. }
  561. } else
  562. if (strcmp("to", ast_json_object_iter_key(iter)) == 0) {
  563. int prop_is_valid;
  564. has_to = 1;
  565. prop_is_valid = ast_ari_validate_string(
  566. ast_json_object_iter_value(iter));
  567. if (!prop_is_valid) {
  568. ast_log(LOG_ERROR, "ARI TextMessage field to failed validation\n");
  569. res = 0;
  570. }
  571. } else
  572. if (strcmp("variables", ast_json_object_iter_key(iter)) == 0) {
  573. int prop_is_valid;
  574. prop_is_valid = ast_ari_validate_list(
  575. ast_json_object_iter_value(iter),
  576. ast_ari_validate_text_message_variable);
  577. if (!prop_is_valid) {
  578. ast_log(LOG_ERROR, "ARI TextMessage field variables failed validation\n");
  579. res = 0;
  580. }
  581. } else
  582. {
  583. ast_log(LOG_ERROR,
  584. "ARI TextMessage has undocumented field %s\n",
  585. ast_json_object_iter_key(iter));
  586. res = 0;
  587. }
  588. }
  589. if (!has_body) {
  590. ast_log(LOG_ERROR, "ARI TextMessage missing required field body\n");
  591. res = 0;
  592. }
  593. if (!has_from) {
  594. ast_log(LOG_ERROR, "ARI TextMessage missing required field from\n");
  595. res = 0;
  596. }
  597. if (!has_to) {
  598. ast_log(LOG_ERROR, "ARI TextMessage missing required field to\n");
  599. res = 0;
  600. }
  601. return res;
  602. }
  603. ari_validator ast_ari_validate_text_message_fn(void)
  604. {
  605. return ast_ari_validate_text_message;
  606. }
  607. int ast_ari_validate_text_message_variable(struct ast_json *json)
  608. {
  609. int res = 1;
  610. struct ast_json_iter *iter;
  611. int has_key = 0;
  612. int has_value = 0;
  613. for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
  614. if (strcmp("key", ast_json_object_iter_key(iter)) == 0) {
  615. int prop_is_valid;
  616. has_key = 1;
  617. prop_is_valid = ast_ari_validate_string(
  618. ast_json_object_iter_value(iter));
  619. if (!prop_is_valid) {
  620. ast_log(LOG_ERROR, "ARI TextMessageVariable field key failed validation\n");
  621. res = 0;
  622. }
  623. } else
  624. if (strcmp("value", ast_json_object_iter_key(iter)) == 0) {
  625. int prop_is_valid;
  626. has_value = 1;
  627. prop_is_valid = ast_ari_validate_string(
  628. ast_json_object_iter_value(iter));
  629. if (!prop_is_valid) {
  630. ast_log(LOG_ERROR, "ARI TextMessageVariable field value failed validation\n");
  631. res = 0;
  632. }
  633. } else
  634. {
  635. ast_log(LOG_ERROR,
  636. "ARI TextMessageVariable has undocumented field %s\n",
  637. ast_json_object_iter_key(iter));
  638. res = 0;
  639. }
  640. }
  641. if (!has_key) {
  642. ast_log(LOG_ERROR, "ARI TextMessageVariable missing required field key\n");
  643. res = 0;
  644. }
  645. if (!has_value) {
  646. ast_log(LOG_ERROR, "ARI TextMessageVariable missing required field value\n");
  647. res = 0;
  648. }
  649. return res;
  650. }
  651. ari_validator ast_ari_validate_text_message_variable_fn(void)
  652. {
  653. return ast_ari_validate_text_message_variable;
  654. }
  655. int ast_ari_validate_caller_id(struct ast_json *json)
  656. {
  657. int res = 1;
  658. struct ast_json_iter *iter;
  659. int has_name = 0;
  660. int has_number = 0;
  661. for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
  662. if (strcmp("name", ast_json_object_iter_key(iter)) == 0) {
  663. int prop_is_valid;
  664. has_name = 1;
  665. prop_is_valid = ast_ari_validate_string(
  666. ast_json_object_iter_value(iter));
  667. if (!prop_is_valid) {
  668. ast_log(LOG_ERROR, "ARI CallerID field name failed validation\n");
  669. res = 0;
  670. }
  671. } else
  672. if (strcmp("number", ast_json_object_iter_key(iter)) == 0) {
  673. int prop_is_valid;
  674. has_number = 1;
  675. prop_is_valid = ast_ari_validate_string(
  676. ast_json_object_iter_value(iter));
  677. if (!prop_is_valid) {
  678. ast_log(LOG_ERROR, "ARI CallerID field number failed validation\n");
  679. res = 0;
  680. }
  681. } else
  682. {
  683. ast_log(LOG_ERROR,
  684. "ARI CallerID has undocumented field %s\n",
  685. ast_json_object_iter_key(iter));
  686. res = 0;
  687. }
  688. }
  689. if (!has_name) {
  690. ast_log(LOG_ERROR, "ARI CallerID missing required field name\n");
  691. res = 0;
  692. }
  693. if (!has_number) {
  694. ast_log(LOG_ERROR, "ARI CallerID missing required field number\n");
  695. res = 0;
  696. }
  697. return res;
  698. }
  699. ari_validator ast_ari_validate_caller_id_fn(void)
  700. {
  701. return ast_ari_validate_caller_id;
  702. }
  703. int ast_ari_validate_channel(struct ast_json *json)
  704. {
  705. int res = 1;
  706. struct ast_json_iter *iter;
  707. int has_accountcode = 0;
  708. int has_caller = 0;
  709. int has_connected = 0;
  710. int has_creationtime = 0;
  711. int has_dialplan = 0;
  712. int has_id = 0;
  713. int has_language = 0;
  714. int has_name = 0;
  715. int has_state = 0;
  716. for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
  717. if (strcmp("accountcode", ast_json_object_iter_key(iter)) == 0) {
  718. int prop_is_valid;
  719. has_accountcode = 1;
  720. prop_is_valid = ast_ari_validate_string(
  721. ast_json_object_iter_value(iter));
  722. if (!prop_is_valid) {
  723. ast_log(LOG_ERROR, "ARI Channel field accountcode failed validation\n");
  724. res = 0;
  725. }
  726. } else
  727. if (strcmp("caller", ast_json_object_iter_key(iter)) == 0) {
  728. int prop_is_valid;
  729. has_caller = 1;
  730. prop_is_valid = ast_ari_validate_caller_id(
  731. ast_json_object_iter_value(iter));
  732. if (!prop_is_valid) {
  733. ast_log(LOG_ERROR, "ARI Channel field caller failed validation\n");
  734. res = 0;
  735. }
  736. } else
  737. if (strcmp("connected", ast_json_object_iter_key(iter)) == 0) {
  738. int prop_is_valid;
  739. has_connected = 1;
  740. prop_is_valid = ast_ari_validate_caller_id(
  741. ast_json_object_iter_value(iter));
  742. if (!prop_is_valid) {
  743. ast_log(LOG_ERROR, "ARI Channel field connected failed validation\n");
  744. res = 0;
  745. }
  746. } else
  747. if (strcmp("creationtime", ast_json_object_iter_key(iter)) == 0) {
  748. int prop_is_valid;
  749. has_creationtime = 1;
  750. prop_is_valid = ast_ari_validate_date(
  751. ast_json_object_iter_value(iter));
  752. if (!prop_is_valid) {
  753. ast_log(LOG_ERROR, "ARI Channel field creationtime failed validation\n");
  754. res = 0;
  755. }
  756. } else
  757. if (strcmp("dialplan", ast_json_object_iter_key(iter)) == 0) {
  758. int prop_is_valid;
  759. has_dialplan = 1;
  760. prop_is_valid = ast_ari_validate_dialplan_cep(
  761. ast_json_object_iter_value(iter));
  762. if (!prop_is_valid) {
  763. ast_log(LOG_ERROR, "ARI Channel field dialplan failed validation\n");
  764. res = 0;
  765. }
  766. } else
  767. if (strcmp("id", ast_json_object_iter_key(iter)) == 0) {
  768. int prop_is_valid;
  769. has_id = 1;
  770. prop_is_valid = ast_ari_validate_string(
  771. ast_json_object_iter_value(iter));
  772. if (!prop_is_valid) {
  773. ast_log(LOG_ERROR, "ARI Channel field id failed validation\n");
  774. res = 0;
  775. }
  776. } else
  777. if (strcmp("language", ast_json_object_iter_key(iter)) == 0) {
  778. int prop_is_valid;
  779. has_language = 1;
  780. prop_is_valid = ast_ari_validate_string(
  781. ast_json_object_iter_value(iter));
  782. if (!prop_is_valid) {
  783. ast_log(LOG_ERROR, "ARI Channel field language failed validation\n");
  784. res = 0;
  785. }
  786. } else
  787. if (strcmp("name", ast_json_object_iter_key(iter)) == 0) {
  788. int prop_is_valid;
  789. has_name = 1;
  790. prop_is_valid = ast_ari_validate_string(
  791. ast_json_object_iter_value(iter));
  792. if (!prop_is_valid) {
  793. ast_log(LOG_ERROR, "ARI Channel field name failed validation\n");
  794. res = 0;
  795. }
  796. } else
  797. if (strcmp("state", ast_json_object_iter_key(iter)) == 0) {
  798. int prop_is_valid;
  799. has_state = 1;
  800. prop_is_valid = ast_ari_validate_string(
  801. ast_json_object_iter_value(iter));
  802. if (!prop_is_valid) {
  803. ast_log(LOG_ERROR, "ARI Channel field state failed validation\n");
  804. res = 0;
  805. }
  806. } else
  807. {
  808. ast_log(LOG_ERROR,
  809. "ARI Channel has undocumented field %s\n",
  810. ast_json_object_iter_key(iter));
  811. res = 0;
  812. }
  813. }
  814. if (!has_accountcode) {
  815. ast_log(LOG_ERROR, "ARI Channel missing required field accountcode\n");
  816. res = 0;
  817. }
  818. if (!has_caller) {
  819. ast_log(LOG_ERROR, "ARI Channel missing required field caller\n");
  820. res = 0;
  821. }
  822. if (!has_connected) {
  823. ast_log(LOG_ERROR, "ARI Channel missing required field connected\n");
  824. res = 0;
  825. }
  826. if (!has_creationtime) {
  827. ast_log(LOG_ERROR, "ARI Channel missing required field creationtime\n");
  828. res = 0;
  829. }
  830. if (!has_dialplan) {
  831. ast_log(LOG_ERROR, "ARI Channel missing required field dialplan\n");
  832. res = 0;
  833. }
  834. if (!has_id) {
  835. ast_log(LOG_ERROR, "ARI Channel missing required field id\n");
  836. res = 0;
  837. }
  838. if (!has_language) {
  839. ast_log(LOG_ERROR, "ARI Channel missing required field language\n");
  840. res = 0;
  841. }
  842. if (!has_name) {
  843. ast_log(LOG_ERROR, "ARI Channel missing required field name\n");
  844. res = 0;
  845. }
  846. if (!has_state) {
  847. ast_log(LOG_ERROR, "ARI Channel missing required field state\n");
  848. res = 0;
  849. }
  850. return res;
  851. }
  852. ari_validator ast_ari_validate_channel_fn(void)
  853. {
  854. return ast_ari_validate_channel;
  855. }
  856. int ast_ari_validate_dialed(struct ast_json *json)
  857. {
  858. int res = 1;
  859. struct ast_json_iter *iter;
  860. for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
  861. {
  862. ast_log(LOG_ERROR,
  863. "ARI Dialed has undocumented field %s\n",
  864. ast_json_object_iter_key(iter));
  865. res = 0;
  866. }
  867. }
  868. return res;
  869. }
  870. ari_validator ast_ari_validate_dialed_fn(void)
  871. {
  872. return ast_ari_validate_dialed;
  873. }
  874. int ast_ari_validate_dialplan_cep(struct ast_json *json)
  875. {
  876. int res = 1;
  877. struct ast_json_iter *iter;
  878. int has_context = 0;
  879. int has_exten = 0;
  880. int has_priority = 0;
  881. for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
  882. if (strcmp("context", ast_json_object_iter_key(iter)) == 0) {
  883. int prop_is_valid;
  884. has_context = 1;
  885. prop_is_valid = ast_ari_validate_string(
  886. ast_json_object_iter_value(iter));
  887. if (!prop_is_valid) {
  888. ast_log(LOG_ERROR, "ARI DialplanCEP field context failed validation\n");
  889. res = 0;
  890. }
  891. } else
  892. if (strcmp("exten", ast_json_object_iter_key(iter)) == 0) {
  893. int prop_is_valid;
  894. has_exten = 1;
  895. prop_is_valid = ast_ari_validate_string(
  896. ast_json_object_iter_value(iter));
  897. if (!prop_is_valid) {
  898. ast_log(LOG_ERROR, "ARI DialplanCEP field exten failed validation\n");
  899. res = 0;
  900. }
  901. } else
  902. if (strcmp("priority", ast_json_object_iter_key(iter)) == 0) {
  903. int prop_is_valid;
  904. has_priority = 1;
  905. prop_is_valid = ast_ari_validate_long(
  906. ast_json_object_iter_value(iter));
  907. if (!prop_is_valid) {
  908. ast_log(LOG_ERROR, "ARI DialplanCEP field priority failed validation\n");
  909. res = 0;
  910. }
  911. } else
  912. {
  913. ast_log(LOG_ERROR,
  914. "ARI DialplanCEP has undocumented field %s\n",
  915. ast_json_object_iter_key(iter));
  916. res = 0;
  917. }
  918. }
  919. if (!has_context) {
  920. ast_log(LOG_ERROR, "ARI DialplanCEP missing required field context\n");
  921. res = 0;
  922. }
  923. if (!has_exten) {
  924. ast_log(LOG_ERROR, "ARI DialplanCEP missing required field exten\n");
  925. res = 0;
  926. }
  927. if (!has_priority) {
  928. ast_log(LOG_ERROR, "ARI DialplanCEP missing required field priority\n");
  929. res = 0;
  930. }
  931. return res;
  932. }
  933. ari_validator ast_ari_validate_dialplan_cep_fn(void)
  934. {
  935. return ast_ari_validate_dialplan_cep;
  936. }
  937. int ast_ari_validate_bridge(struct ast_json *json)
  938. {
  939. int res = 1;
  940. struct ast_json_iter *iter;
  941. int has_bridge_class = 0;
  942. int has_bridge_type = 0;
  943. int has_channels = 0;
  944. int has_creator = 0;
  945. int has_id = 0;
  946. int has_name = 0;
  947. int has_technology = 0;
  948. for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
  949. if (strcmp("bridge_class", ast_json_object_iter_key(iter)) == 0) {
  950. int prop_is_valid;
  951. has_bridge_class = 1;
  952. prop_is_valid = ast_ari_validate_string(
  953. ast_json_object_iter_value(iter));
  954. if (!prop_is_valid) {
  955. ast_log(LOG_ERROR, "ARI Bridge field bridge_class failed validation\n");
  956. res = 0;
  957. }
  958. } else
  959. if (strcmp("bridge_type", ast_json_object_iter_key(iter)) == 0) {
  960. int prop_is_valid;
  961. has_bridge_type = 1;
  962. prop_is_valid = ast_ari_validate_string(
  963. ast_json_object_iter_value(iter));
  964. if (!prop_is_valid) {
  965. ast_log(LOG_ERROR, "ARI Bridge field bridge_type failed validation\n");
  966. res = 0;
  967. }
  968. } else
  969. if (strcmp("channels", ast_json_object_iter_key(iter)) == 0) {
  970. int prop_is_valid;
  971. has_channels = 1;
  972. prop_is_valid = ast_ari_validate_list(
  973. ast_json_object_iter_value(iter),
  974. ast_ari_validate_string);
  975. if (!prop_is_valid) {
  976. ast_log(LOG_ERROR, "ARI Bridge field channels failed validation\n");
  977. res = 0;
  978. }
  979. } else
  980. if (strcmp("creator", ast_json_object_iter_key(iter)) == 0) {
  981. int prop_is_valid;
  982. has_creator = 1;
  983. prop_is_valid = ast_ari_validate_string(
  984. ast_json_object_iter_value(iter));
  985. if (!prop_is_valid) {
  986. ast_log(LOG_ERROR, "ARI Bridge field creator failed validation\n");
  987. res = 0;
  988. }
  989. } else
  990. if (strcmp("id", ast_json_object_iter_key(iter)) == 0) {
  991. int prop_is_valid;
  992. has_id = 1;
  993. prop_is_valid = ast_ari_validate_string(
  994. ast_json_object_iter_value(iter));
  995. if (!prop_is_valid) {
  996. ast_log(LOG_ERROR, "ARI Bridge field id failed validation\n");
  997. res = 0;
  998. }
  999. } else
  1000. if (strcmp("name", ast_json_object_iter_key(iter)) == 0) {
  1001. int prop_is_valid;
  1002. has_name = 1;
  1003. prop_is_valid = ast_ari_validate_string(
  1004. ast_json_object_iter_value(iter));
  1005. if (!prop_is_valid) {
  1006. ast_log(LOG_ERROR, "ARI Bridge field name failed validation\n");
  1007. res = 0;
  1008. }
  1009. } else
  1010. if (strcmp("technology", ast_json_object_iter_key(iter)) == 0) {
  1011. int prop_is_valid;
  1012. has_technology = 1;
  1013. prop_is_valid = ast_ari_validate_string(
  1014. ast_json_object_iter_value(iter));
  1015. if (!prop_is_valid) {
  1016. ast_log(LOG_ERROR, "ARI Bridge field technology failed validation\n");
  1017. res = 0;
  1018. }
  1019. } else
  1020. {
  1021. ast_log(LOG_ERROR,
  1022. "ARI Bridge has undocumented field %s\n",
  1023. ast_json_object_iter_key(iter));
  1024. res = 0;
  1025. }
  1026. }
  1027. if (!has_bridge_class) {
  1028. ast_log(LOG_ERROR, "ARI Bridge missing required field bridge_class\n");
  1029. res = 0;
  1030. }
  1031. if (!has_bridge_type) {
  1032. ast_log(LOG_ERROR, "ARI Bridge missing required field bridge_type\n");
  1033. res = 0;
  1034. }
  1035. if (!has_channels) {
  1036. ast_log(LOG_ERROR, "ARI Bridge missing required field channels\n");
  1037. res = 0;
  1038. }
  1039. if (!has_creator) {
  1040. ast_log(LOG_ERROR, "ARI Bridge missing required field creator\n");
  1041. res = 0;
  1042. }
  1043. if (!has_id) {
  1044. ast_log(LOG_ERROR, "ARI Bridge missing required field id\n");
  1045. res = 0;
  1046. }
  1047. if (!has_name) {
  1048. ast_log(LOG_ERROR, "ARI Bridge missing required field name\n");
  1049. res = 0;
  1050. }
  1051. if (!has_technology) {
  1052. ast_log(LOG_ERROR, "ARI Bridge missing required field technology\n");
  1053. res = 0;
  1054. }
  1055. return res;
  1056. }
  1057. ari_validator ast_ari_validate_bridge_fn(void)
  1058. {
  1059. return ast_ari_validate_bridge;
  1060. }
  1061. int ast_ari_validate_live_recording(struct ast_json *json)
  1062. {
  1063. int res = 1;
  1064. struct ast_json_iter *iter;
  1065. int has_format = 0;
  1066. int has_name = 0;
  1067. int has_state = 0;
  1068. int has_target_uri = 0;
  1069. for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
  1070. if (strcmp("cause", ast_json_object_iter_key(iter)) == 0) {
  1071. int prop_is_valid;
  1072. prop_is_valid = ast_ari_validate_string(
  1073. ast_json_object_iter_value(iter));
  1074. if (!prop_is_valid) {
  1075. ast_log(LOG_ERROR, "ARI LiveRecording field cause failed validation\n");
  1076. res = 0;
  1077. }
  1078. } else
  1079. if (strcmp("duration", ast_json_object_iter_key(iter)) == 0) {
  1080. int prop_is_valid;
  1081. prop_is_valid = ast_ari_validate_int(
  1082. ast_json_object_iter_value(iter));
  1083. if (!prop_is_valid) {
  1084. ast_log(LOG_ERROR, "ARI LiveRecording field duration failed validation\n");
  1085. res = 0;
  1086. }
  1087. } else
  1088. if (strcmp("format", ast_json_object_iter_key(iter)) == 0) {
  1089. int prop_is_valid;
  1090. has_format = 1;
  1091. prop_is_valid = ast_ari_validate_string(
  1092. ast_json_object_iter_value(iter));
  1093. if (!prop_is_valid) {
  1094. ast_log(LOG_ERROR, "ARI LiveRecording field format failed validation\n");
  1095. res = 0;
  1096. }
  1097. } else
  1098. if (strcmp("name", ast_json_object_iter_key(iter)) == 0) {
  1099. int prop_is_valid;
  1100. has_name = 1;
  1101. prop_is_valid = ast_ari_validate_string(
  1102. ast_json_object_iter_value(iter));
  1103. if (!prop_is_valid) {
  1104. ast_log(LOG_ERROR, "ARI LiveRecording field name failed validation\n");
  1105. res = 0;
  1106. }
  1107. } else
  1108. if (strcmp("silence_duration", ast_json_object_iter_key(iter)) == 0) {
  1109. int prop_is_valid;
  1110. prop_is_valid = ast_ari_validate_int(
  1111. ast_json_object_iter_value(iter));
  1112. if (!prop_is_valid) {
  1113. ast_log(LOG_ERROR, "ARI LiveRecording field silence_duration failed validation\n");
  1114. res = 0;
  1115. }
  1116. } else
  1117. if (strcmp("state", ast_json_object_iter_key(iter)) == 0) {
  1118. int prop_is_valid;
  1119. has_state = 1;
  1120. prop_is_valid = ast_ari_validate_string(
  1121. ast_json_object_iter_value(iter));
  1122. if (!prop_is_valid) {
  1123. ast_log(LOG_ERROR, "ARI LiveRecording field state failed validation\n");
  1124. res = 0;
  1125. }
  1126. } else
  1127. if (strcmp("talking_duration", ast_json_object_iter_key(iter)) == 0) {
  1128. int prop_is_valid;
  1129. prop_is_valid = ast_ari_validate_int(
  1130. ast_json_object_iter_value(iter));
  1131. if (!prop_is_valid) {
  1132. ast_log(LOG_ERROR, "ARI LiveRecording field talking_duration failed validation\n");
  1133. res = 0;
  1134. }
  1135. } else
  1136. if (strcmp("target_uri", ast_json_object_iter_key(iter)) == 0) {
  1137. int prop_is_valid;
  1138. has_target_uri = 1;
  1139. prop_is_valid = ast_ari_validate_string(
  1140. ast_json_object_iter_value(iter));
  1141. if (!prop_is_valid) {
  1142. ast_log(LOG_ERROR, "ARI LiveRecording field target_uri failed validation\n");
  1143. res = 0;
  1144. }
  1145. } else
  1146. {
  1147. ast_log(LOG_ERROR,
  1148. "ARI LiveRecording has undocumented field %s\n",
  1149. ast_json_object_iter_key(iter));
  1150. res = 0;
  1151. }
  1152. }
  1153. if (!has_format) {
  1154. ast_log(LOG_ERROR, "ARI LiveRecording missing required field format\n");
  1155. res = 0;
  1156. }
  1157. if (!has_name) {
  1158. ast_log(LOG_ERROR, "ARI LiveRecording missing required field name\n");
  1159. res = 0;
  1160. }
  1161. if (!has_state) {
  1162. ast_log(LOG_ERROR, "ARI LiveRecording missing required field state\n");
  1163. res = 0;
  1164. }
  1165. if (!has_target_uri) {
  1166. ast_log(LOG_ERROR, "ARI LiveRecording missing required field target_uri\n");
  1167. res = 0;
  1168. }
  1169. return res;
  1170. }
  1171. ari_validator ast_ari_validate_live_recording_fn(void)
  1172. {
  1173. return ast_ari_validate_live_recording;
  1174. }
  1175. int ast_ari_validate_stored_recording(struct ast_json *json)
  1176. {
  1177. int res = 1;
  1178. struct ast_json_iter *iter;
  1179. int has_format = 0;
  1180. int has_name = 0;
  1181. for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
  1182. if (strcmp("format", ast_json_object_iter_key(iter)) == 0) {
  1183. int prop_is_valid;
  1184. has_format = 1;
  1185. prop_is_valid = ast_ari_validate_string(
  1186. ast_json_object_iter_value(iter));
  1187. if (!prop_is_valid) {
  1188. ast_log(LOG_ERROR, "ARI StoredRecording field format failed validation\n");
  1189. res = 0;
  1190. }
  1191. } else
  1192. if (strcmp("name", ast_json_object_iter_key(iter)) == 0) {
  1193. int prop_is_valid;
  1194. has_name = 1;
  1195. prop_is_valid = ast_ari_validate_string(
  1196. ast_json_object_iter_value(iter));
  1197. if (!prop_is_valid) {
  1198. ast_log(LOG_ERROR, "ARI StoredRecording field name failed validation\n");
  1199. res = 0;
  1200. }
  1201. } else
  1202. {
  1203. ast_log(LOG_ERROR,
  1204. "ARI StoredRecording has undocumented field %s\n",
  1205. ast_json_object_iter_key(iter));
  1206. res = 0;
  1207. }
  1208. }
  1209. if (!has_format) {
  1210. ast_log(LOG_ERROR, "ARI StoredRecording missing required field format\n");
  1211. res = 0;
  1212. }
  1213. if (!has_name) {
  1214. ast_log(LOG_ERROR, "ARI StoredRecording missing required field name\n");
  1215. res = 0;
  1216. }
  1217. return res;
  1218. }
  1219. ari_validator ast_ari_validate_stored_recording_fn(void)
  1220. {
  1221. return ast_ari_validate_stored_recording;
  1222. }
  1223. int ast_ari_validate_format_lang_pair(struct ast_json *json)
  1224. {
  1225. int res = 1;
  1226. struct ast_json_iter *iter;
  1227. int has_format = 0;
  1228. int has_language = 0;
  1229. for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
  1230. if (strcmp("format", ast_json_object_iter_key(iter)) == 0) {
  1231. int prop_is_valid;
  1232. has_format = 1;
  1233. prop_is_valid = ast_ari_validate_string(
  1234. ast_json_object_iter_value(iter));
  1235. if (!prop_is_valid) {
  1236. ast_log(LOG_ERROR, "ARI FormatLangPair field format failed validation\n");
  1237. res = 0;
  1238. }
  1239. } else
  1240. if (strcmp("language", ast_json_object_iter_key(iter)) == 0) {
  1241. int prop_is_valid;
  1242. has_language = 1;
  1243. prop_is_valid = ast_ari_validate_string(
  1244. ast_json_object_iter_value(iter));
  1245. if (!prop_is_valid) {
  1246. ast_log(LOG_ERROR, "ARI FormatLangPair field language failed validation\n");
  1247. res = 0;
  1248. }
  1249. } else
  1250. {
  1251. ast_log(LOG_ERROR,
  1252. "ARI FormatLangPair has undocumented field %s\n",
  1253. ast_json_object_iter_key(iter));
  1254. res = 0;
  1255. }
  1256. }
  1257. if (!has_format) {
  1258. ast_log(LOG_ERROR, "ARI FormatLangPair missing required field format\n");
  1259. res = 0;
  1260. }
  1261. if (!has_language) {
  1262. ast_log(LOG_ERROR, "ARI FormatLangPair missing required field language\n");
  1263. res = 0;
  1264. }
  1265. return res;
  1266. }
  1267. ari_validator ast_ari_validate_format_lang_pair_fn(void)
  1268. {
  1269. return ast_ari_validate_format_lang_pair;
  1270. }
  1271. int ast_ari_validate_sound(struct ast_json *json)
  1272. {
  1273. int res = 1;
  1274. struct ast_json_iter *iter;
  1275. int has_formats = 0;
  1276. int has_id = 0;
  1277. for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
  1278. if (strcmp("formats", ast_json_object_iter_key(iter)) == 0) {
  1279. int prop_is_valid;
  1280. has_formats = 1;
  1281. prop_is_valid = ast_ari_validate_list(
  1282. ast_json_object_iter_value(iter),
  1283. ast_ari_validate_format_lang_pair);
  1284. if (!prop_is_valid) {
  1285. ast_log(LOG_ERROR, "ARI Sound field formats failed validation\n");
  1286. res = 0;
  1287. }
  1288. } else
  1289. if (strcmp("id", ast_json_object_iter_key(iter)) == 0) {
  1290. int prop_is_valid;
  1291. has_id = 1;
  1292. prop_is_valid = ast_ari_validate_string(
  1293. ast_json_object_iter_value(iter));
  1294. if (!prop_is_valid) {
  1295. ast_log(LOG_ERROR, "ARI Sound field id failed validation\n");
  1296. res = 0;
  1297. }
  1298. } else
  1299. if (strcmp("text", ast_json_object_iter_key(iter)) == 0) {
  1300. int prop_is_valid;
  1301. prop_is_valid = ast_ari_validate_string(
  1302. ast_json_object_iter_value(iter));
  1303. if (!prop_is_valid) {
  1304. ast_log(LOG_ERROR, "ARI Sound field text failed validation\n");
  1305. res = 0;
  1306. }
  1307. } else
  1308. {
  1309. ast_log(LOG_ERROR,
  1310. "ARI Sound has undocumented field %s\n",
  1311. ast_json_object_iter_key(iter));
  1312. res = 0;
  1313. }
  1314. }
  1315. if (!has_formats) {
  1316. ast_log(LOG_ERROR, "ARI Sound missing required field formats\n");
  1317. res = 0;
  1318. }
  1319. if (!has_id) {
  1320. ast_log(LOG_ERROR, "ARI Sound missing required field id\n");
  1321. res = 0;
  1322. }
  1323. return res;
  1324. }
  1325. ari_validator ast_ari_validate_sound_fn(void)
  1326. {
  1327. return ast_ari_validate_sound;
  1328. }
  1329. int ast_ari_validate_playback(struct ast_json *json)
  1330. {
  1331. int res = 1;
  1332. struct ast_json_iter *iter;
  1333. int has_id = 0;
  1334. int has_media_uri = 0;
  1335. int has_state = 0;
  1336. int has_target_uri = 0;
  1337. for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
  1338. if (strcmp("id", ast_json_object_iter_key(iter)) == 0) {
  1339. int prop_is_valid;
  1340. has_id = 1;
  1341. prop_is_valid = ast_ari_validate_string(
  1342. ast_json_object_iter_value(iter));
  1343. if (!prop_is_valid) {
  1344. ast_log(LOG_ERROR, "ARI Playback field id failed validation\n");
  1345. res = 0;
  1346. }
  1347. } else
  1348. if (strcmp("language", ast_json_object_iter_key(iter)) == 0) {
  1349. int prop_is_valid;
  1350. prop_is_valid = ast_ari_validate_string(
  1351. ast_json_object_iter_value(iter));
  1352. if (!prop_is_valid) {
  1353. ast_log(LOG_ERROR, "ARI Playback field language failed validation\n");
  1354. res = 0;
  1355. }
  1356. } else
  1357. if (strcmp("media_uri", ast_json_object_iter_key(iter)) == 0) {
  1358. int prop_is_valid;
  1359. has_media_uri = 1;
  1360. prop_is_valid = ast_ari_validate_string(
  1361. ast_json_object_iter_value(iter));
  1362. if (!prop_is_valid) {
  1363. ast_log(LOG_ERROR, "ARI Playback field media_uri failed validation\n");
  1364. res = 0;
  1365. }
  1366. } else
  1367. if (strcmp("state", ast_json_object_iter_key(iter)) == 0) {
  1368. int prop_is_valid;
  1369. has_state = 1;
  1370. prop_is_valid = ast_ari_validate_string(
  1371. ast_json_object_iter_value(iter));
  1372. if (!prop_is_valid) {
  1373. ast_log(LOG_ERROR, "ARI Playback field state failed validation\n");
  1374. res = 0;
  1375. }
  1376. } else
  1377. if (strcmp("target_uri", ast_json_object_iter_key(iter)) == 0) {
  1378. int prop_is_valid;
  1379. has_target_uri = 1;
  1380. prop_is_valid = ast_ari_validate_string(
  1381. ast_json_object_iter_value(iter));
  1382. if (!prop_is_valid) {
  1383. ast_log(LOG_ERROR, "ARI Playback field target_uri failed validation\n");
  1384. res = 0;
  1385. }
  1386. } else
  1387. {
  1388. ast_log(LOG_ERROR,
  1389. "ARI Playback has undocumented field %s\n",
  1390. ast_json_object_iter_key(iter));
  1391. res = 0;
  1392. }
  1393. }
  1394. if (!has_id) {
  1395. ast_log(LOG_ERROR, "ARI Playback missing required field id\n");
  1396. res = 0;
  1397. }
  1398. if (!has_media_uri) {
  1399. ast_log(LOG_ERROR, "ARI Playback missing required field media_uri\n");
  1400. res = 0;
  1401. }
  1402. if (!has_state) {
  1403. ast_log(LOG_ERROR, "ARI Playback missing required field state\n");
  1404. res = 0;
  1405. }
  1406. if (!has_target_uri) {
  1407. ast_log(LOG_ERROR, "ARI Playback missing required field target_uri\n");
  1408. res = 0;
  1409. }
  1410. return res;
  1411. }
  1412. ari_validator ast_ari_validate_playback_fn(void)
  1413. {
  1414. return ast_ari_validate_playback;
  1415. }
  1416. int ast_ari_validate_device_state(struct ast_json *json)
  1417. {
  1418. int res = 1;
  1419. struct ast_json_iter *iter;
  1420. int has_name = 0;
  1421. int has_state = 0;
  1422. for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
  1423. if (strcmp("name", ast_json_object_iter_key(iter)) == 0) {
  1424. int prop_is_valid;
  1425. has_name = 1;
  1426. prop_is_valid = ast_ari_validate_string(
  1427. ast_json_object_iter_value(iter));
  1428. if (!prop_is_valid) {
  1429. ast_log(LOG_ERROR, "ARI DeviceState field name failed validation\n");
  1430. res = 0;
  1431. }
  1432. } else
  1433. if (strcmp("state", ast_json_object_iter_key(iter)) == 0) {
  1434. int prop_is_valid;
  1435. has_state = 1;
  1436. prop_is_valid = ast_ari_validate_string(
  1437. ast_json_object_iter_value(iter));
  1438. if (!prop_is_valid) {
  1439. ast_log(LOG_ERROR, "ARI DeviceState field state failed validation\n");
  1440. res = 0;
  1441. }
  1442. } else
  1443. {
  1444. ast_log(LOG_ERROR,
  1445. "ARI DeviceState has undocumented field %s\n",
  1446. ast_json_object_iter_key(iter));
  1447. res = 0;
  1448. }
  1449. }
  1450. if (!has_name) {
  1451. ast_log(LOG_ERROR, "ARI DeviceState missing required field name\n");
  1452. res = 0;
  1453. }
  1454. if (!has_state) {
  1455. ast_log(LOG_ERROR, "ARI DeviceState missing required field state\n");
  1456. res = 0;
  1457. }
  1458. return res;
  1459. }
  1460. ari_validator ast_ari_validate_device_state_fn(void)
  1461. {
  1462. return ast_ari_validate_device_state;
  1463. }
  1464. int ast_ari_validate_mailbox(struct ast_json *json)
  1465. {
  1466. int res = 1;
  1467. struct ast_json_iter *iter;
  1468. int has_name = 0;
  1469. int has_new_messages = 0;
  1470. int has_old_messages = 0;
  1471. for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
  1472. if (strcmp("name", ast_json_object_iter_key(iter)) == 0) {
  1473. int prop_is_valid;
  1474. has_name = 1;
  1475. prop_is_valid = ast_ari_validate_string(
  1476. ast_json_object_iter_value(iter));
  1477. if (!prop_is_valid) {
  1478. ast_log(LOG_ERROR, "ARI Mailbox field name failed validation\n");
  1479. res = 0;
  1480. }
  1481. } else
  1482. if (strcmp("new_messages", ast_json_object_iter_key(iter)) == 0) {
  1483. int prop_is_valid;
  1484. has_new_messages = 1;
  1485. prop_is_valid = ast_ari_validate_int(
  1486. ast_json_object_iter_value(iter));
  1487. if (!prop_is_valid) {
  1488. ast_log(LOG_ERROR, "ARI Mailbox field new_messages failed validation\n");
  1489. res = 0;
  1490. }
  1491. } else
  1492. if (strcmp("old_messages", ast_json_object_iter_key(iter)) == 0) {
  1493. int prop_is_valid;
  1494. has_old_messages = 1;
  1495. prop_is_valid = ast_ari_validate_int(
  1496. ast_json_object_iter_value(iter));
  1497. if (!prop_is_valid) {
  1498. ast_log(LOG_ERROR, "ARI Mailbox field old_messages failed validation\n");
  1499. res = 0;
  1500. }
  1501. } else
  1502. {
  1503. ast_log(LOG_ERROR,
  1504. "ARI Mailbox has undocumented field %s\n",
  1505. ast_json_object_iter_key(iter));
  1506. res = 0;
  1507. }
  1508. }
  1509. if (!has_name) {
  1510. ast_log(LOG_ERROR, "ARI Mailbox missing required field name\n");
  1511. res = 0;
  1512. }
  1513. if (!has_new_messages) {
  1514. ast_log(LOG_ERROR, "ARI Mailbox missing required field new_messages\n");
  1515. res = 0;
  1516. }
  1517. if (!has_old_messages) {
  1518. ast_log(LOG_ERROR, "ARI Mailbox missing required field old_messages\n");
  1519. res = 0;
  1520. }
  1521. return res;
  1522. }
  1523. ari_validator ast_ari_validate_mailbox_fn(void)
  1524. {
  1525. return ast_ari_validate_mailbox;
  1526. }
  1527. int ast_ari_validate_application_replaced(struct ast_json *json)
  1528. {
  1529. int res = 1;
  1530. struct ast_json_iter *iter;
  1531. int has_type = 0;
  1532. int has_application = 0;
  1533. for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
  1534. if (strcmp("type", ast_json_object_iter_key(iter)) == 0) {
  1535. int prop_is_valid;
  1536. has_type = 1;
  1537. prop_is_valid = ast_ari_validate_string(
  1538. ast_json_object_iter_value(iter));
  1539. if (!prop_is_valid) {
  1540. ast_log(LOG_ERROR, "ARI ApplicationReplaced field type failed validation\n");
  1541. res = 0;
  1542. }
  1543. } else
  1544. if (strcmp("application", ast_json_object_iter_key(iter)) == 0) {
  1545. int prop_is_valid;
  1546. has_application = 1;
  1547. prop_is_valid = ast_ari_validate_string(
  1548. ast_json_object_iter_value(iter));
  1549. if (!prop_is_valid) {
  1550. ast_log(LOG_ERROR, "ARI ApplicationReplaced field application failed validation\n");
  1551. res = 0;
  1552. }
  1553. } else
  1554. if (strcmp("timestamp", ast_json_object_iter_key(iter)) == 0) {
  1555. int prop_is_valid;
  1556. prop_is_valid = ast_ari_validate_date(
  1557. ast_json_object_iter_value(iter));
  1558. if (!prop_is_valid) {
  1559. ast_log(LOG_ERROR, "ARI ApplicationReplaced field timestamp failed validation\n");
  1560. res = 0;
  1561. }
  1562. } else
  1563. {
  1564. ast_log(LOG_ERROR,
  1565. "ARI ApplicationReplaced has undocumented field %s\n",
  1566. ast_json_object_iter_key(iter));
  1567. res = 0;
  1568. }
  1569. }
  1570. if (!has_type) {
  1571. ast_log(LOG_ERROR, "ARI ApplicationReplaced missing required field type\n");
  1572. res = 0;
  1573. }
  1574. if (!has_application) {
  1575. ast_log(LOG_ERROR, "ARI ApplicationReplaced missing required field application\n");
  1576. res = 0;
  1577. }
  1578. return res;
  1579. }
  1580. ari_validator ast_ari_validate_application_replaced_fn(void)
  1581. {
  1582. return ast_ari_validate_application_replaced;
  1583. }
  1584. int ast_ari_validate_bridge_attended_transfer(struct ast_json *json)
  1585. {
  1586. int res = 1;
  1587. struct ast_json_iter *iter;
  1588. int has_type = 0;
  1589. int has_application = 0;
  1590. int has_destination_type = 0;
  1591. int has_is_external = 0;
  1592. int has_result = 0;
  1593. int has_transferer_first_leg = 0;
  1594. int has_transferer_second_leg = 0;
  1595. for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
  1596. if (strcmp("type", ast_json_object_iter_key(iter)) == 0) {
  1597. int prop_is_valid;
  1598. has_type = 1;
  1599. prop_is_valid = ast_ari_validate_string(
  1600. ast_json_object_iter_value(iter));
  1601. if (!prop_is_valid) {
  1602. ast_log(LOG_ERROR, "ARI BridgeAttendedTransfer field type failed validation\n");
  1603. res = 0;
  1604. }
  1605. } else
  1606. if (strcmp("application", ast_json_object_iter_key(iter)) == 0) {
  1607. int prop_is_valid;
  1608. has_application = 1;
  1609. prop_is_valid = ast_ari_validate_string(
  1610. ast_json_object_iter_value(iter));
  1611. if (!prop_is_valid) {
  1612. ast_log(LOG_ERROR, "ARI BridgeAttendedTransfer field application failed validation\n");
  1613. res = 0;
  1614. }
  1615. } else
  1616. if (strcmp("timestamp", ast_json_object_iter_key(iter)) == 0) {
  1617. int prop_is_valid;
  1618. prop_is_valid = ast_ari_validate_date(
  1619. ast_json_object_iter_value(iter));
  1620. if (!prop_is_valid) {
  1621. ast_log(LOG_ERROR, "ARI BridgeAttendedTransfer field timestamp failed validation\n");
  1622. res = 0;
  1623. }
  1624. } else
  1625. if (strcmp("destination_application", ast_json_object_iter_key(iter)) == 0) {
  1626. int prop_is_valid;
  1627. prop_is_valid = ast_ari_validate_string(
  1628. ast_json_object_iter_value(iter));
  1629. if (!prop_is_valid) {
  1630. ast_log(LOG_ERROR, "ARI BridgeAttendedTransfer field destination_application failed validation\n");
  1631. res = 0;
  1632. }
  1633. } else
  1634. if (strcmp("destination_bridge", ast_json_object_iter_key(iter)) == 0) {
  1635. int prop_is_valid;
  1636. prop_is_valid = ast_ari_validate_string(
  1637. ast_json_object_iter_value(iter));
  1638. if (!prop_is_valid) {
  1639. ast_log(LOG_ERROR, "ARI BridgeAttendedTransfer field destination_bridge failed validation\n");
  1640. res = 0;
  1641. }
  1642. } else
  1643. if (strcmp("destination_link_first_leg", ast_json_object_iter_key(iter)) == 0) {
  1644. int prop_is_valid;
  1645. prop_is_valid = ast_ari_validate_channel(
  1646. ast_json_object_iter_value(iter));
  1647. if (!prop_is_valid) {
  1648. ast_log(LOG_ERROR, "ARI BridgeAttendedTransfer field destination_link_first_leg failed validation\n");
  1649. res = 0;
  1650. }
  1651. } else
  1652. if (strcmp("destination_link_second_leg", ast_json_object_iter_key(iter)) == 0) {
  1653. int prop_is_valid;
  1654. prop_is_valid = ast_ari_validate_channel(
  1655. ast_json_object_iter_value(iter));
  1656. if (!prop_is_valid) {
  1657. ast_log(LOG_ERROR, "ARI BridgeAttendedTransfer field destination_link_second_leg failed validation\n");
  1658. res = 0;
  1659. }
  1660. } else
  1661. if (strcmp("destination_threeway_bridge", ast_json_object_iter_key(iter)) == 0) {
  1662. int prop_is_valid;
  1663. prop_is_valid = ast_ari_validate_bridge(
  1664. ast_json_object_iter_value(iter));
  1665. if (!prop_is_valid) {
  1666. ast_log(LOG_ERROR, "ARI BridgeAttendedTransfer field destination_threeway_bridge failed validation\n");
  1667. res = 0;
  1668. }
  1669. } else
  1670. if (strcmp("destination_threeway_channel", ast_json_object_iter_key(iter)) == 0) {
  1671. int prop_is_valid;
  1672. prop_is_valid = ast_ari_validate_channel(
  1673. ast_json_object_iter_value(iter));
  1674. if (!prop_is_valid) {
  1675. ast_log(LOG_ERROR, "ARI BridgeAttendedTransfer field destination_threeway_channel failed validation\n");
  1676. res = 0;
  1677. }
  1678. } else
  1679. if (strcmp("destination_type", ast_json_object_iter_key(iter)) == 0) {
  1680. int prop_is_valid;
  1681. has_destination_type = 1;
  1682. prop_is_valid = ast_ari_validate_string(
  1683. ast_json_object_iter_value(iter));
  1684. if (!prop_is_valid) {
  1685. ast_log(LOG_ERROR, "ARI BridgeAttendedTransfer field destination_type failed validation\n");
  1686. res = 0;
  1687. }
  1688. } else
  1689. if (strcmp("is_external", ast_json_object_iter_key(iter)) == 0) {
  1690. int prop_is_valid;
  1691. has_is_external = 1;
  1692. prop_is_valid = ast_ari_validate_boolean(
  1693. ast_json_object_iter_value(iter));
  1694. if (!prop_is_valid) {
  1695. ast_log(LOG_ERROR, "ARI BridgeAttendedTransfer field is_external failed validation\n");
  1696. res = 0;
  1697. }
  1698. } else
  1699. if (strcmp("replace_channel", ast_json_object_iter_key(iter)) == 0) {
  1700. int prop_is_valid;
  1701. prop_is_valid = ast_ari_validate_channel(
  1702. ast_json_object_iter_value(iter));
  1703. if (!prop_is_valid) {
  1704. ast_log(LOG_ERROR, "ARI BridgeAttendedTransfer field replace_channel failed validation\n");
  1705. res = 0;
  1706. }
  1707. } else
  1708. if (strcmp("result", ast_json_object_iter_key(iter)) == 0) {
  1709. int prop_is_valid;
  1710. has_result = 1;
  1711. prop_is_valid = ast_ari_validate_string(
  1712. ast_json_object_iter_value(iter));
  1713. if (!prop_is_valid) {
  1714. ast_log(LOG_ERROR, "ARI BridgeAttendedTransfer field result failed validation\n");
  1715. res = 0;
  1716. }
  1717. } else
  1718. if (strcmp("transfer_target", ast_json_object_iter_key(iter)) == 0) {
  1719. int prop_is_valid;
  1720. prop_is_valid = ast_ari_validate_channel(
  1721. ast_json_object_iter_value(iter));
  1722. if (!prop_is_valid) {
  1723. ast_log(LOG_ERROR, "ARI BridgeAttendedTransfer field transfer_target failed validation\n");
  1724. res = 0;
  1725. }
  1726. } else
  1727. if (strcmp("transferee", ast_json_object_iter_key(iter)) == 0) {
  1728. int prop_is_valid;
  1729. prop_is_valid = ast_ari_validate_channel(
  1730. ast_json_object_iter_value(iter));
  1731. if (!prop_is_valid) {
  1732. ast_log(LOG_ERROR, "ARI BridgeAttendedTransfer field transferee failed validation\n");
  1733. res = 0;
  1734. }
  1735. } else
  1736. if (strcmp("transferer_first_leg", ast_json_object_iter_key(iter)) == 0) {
  1737. int prop_is_valid;
  1738. has_transferer_first_leg = 1;
  1739. prop_is_valid = ast_ari_validate_channel(
  1740. ast_json_object_iter_value(iter));
  1741. if (!prop_is_valid) {
  1742. ast_log(LOG_ERROR, "ARI BridgeAttendedTransfer field transferer_first_leg failed validation\n");
  1743. res = 0;
  1744. }
  1745. } else
  1746. if (strcmp("transferer_first_leg_bridge", ast_json_object_iter_key(iter)) == 0) {
  1747. int prop_is_valid;
  1748. prop_is_valid = ast_ari_validate_bridge(
  1749. ast_json_object_iter_value(iter));
  1750. if (!prop_is_valid) {
  1751. ast_log(LOG_ERROR, "ARI BridgeAttendedTransfer field transferer_first_leg_bridge failed validation\n");
  1752. res = 0;
  1753. }
  1754. } else
  1755. if (strcmp("transferer_second_leg", ast_json_object_iter_key(iter)) == 0) {
  1756. int prop_is_valid;
  1757. has_transferer_second_leg = 1;
  1758. prop_is_valid = ast_ari_validate_channel(
  1759. ast_json_object_iter_value(iter));
  1760. if (!prop_is_valid) {
  1761. ast_log(LOG_ERROR, "ARI BridgeAttendedTransfer field transferer_second_leg failed validation\n");
  1762. res = 0;
  1763. }
  1764. } else
  1765. if (strcmp("transferer_second_leg_bridge", ast_json_object_iter_key(iter)) == 0) {
  1766. int prop_is_valid;
  1767. prop_is_valid = ast_ari_validate_bridge(
  1768. ast_json_object_iter_value(iter));
  1769. if (!prop_is_valid) {
  1770. ast_log(LOG_ERROR, "ARI BridgeAttendedTransfer field transferer_second_leg_bridge failed validation\n");
  1771. res = 0;
  1772. }
  1773. } else
  1774. {
  1775. ast_log(LOG_ERROR,
  1776. "ARI BridgeAttendedTransfer has undocumented field %s\n",
  1777. ast_json_object_iter_key(iter));
  1778. res = 0;
  1779. }
  1780. }
  1781. if (!has_type) {
  1782. ast_log(LOG_ERROR, "ARI BridgeAttendedTransfer missing required field type\n");
  1783. res = 0;
  1784. }
  1785. if (!has_application) {
  1786. ast_log(LOG_ERROR, "ARI BridgeAttendedTransfer missing required field application\n");
  1787. res = 0;
  1788. }
  1789. if (!has_destination_type) {
  1790. ast_log(LOG_ERROR, "ARI BridgeAttendedTransfer missing required field destination_type\n");
  1791. res = 0;
  1792. }
  1793. if (!has_is_external) {
  1794. ast_log(LOG_ERROR, "ARI BridgeAttendedTransfer missing required field is_external\n");
  1795. res = 0;
  1796. }
  1797. if (!has_result) {
  1798. ast_log(LOG_ERROR, "ARI BridgeAttendedTransfer missing required field result\n");
  1799. res = 0;
  1800. }
  1801. if (!has_transferer_first_leg) {
  1802. ast_log(LOG_ERROR, "ARI BridgeAttendedTransfer missing required field transferer_first_leg\n");
  1803. res = 0;
  1804. }
  1805. if (!has_transferer_second_leg) {
  1806. ast_log(LOG_ERROR, "ARI BridgeAttendedTransfer missing required field transferer_second_leg\n");
  1807. res = 0;
  1808. }
  1809. return res;
  1810. }
  1811. ari_validator ast_ari_validate_bridge_attended_transfer_fn(void)
  1812. {
  1813. return ast_ari_validate_bridge_attended_transfer;
  1814. }
  1815. int ast_ari_validate_bridge_blind_transfer(struct ast_json *json)
  1816. {
  1817. int res = 1;
  1818. struct ast_json_iter *iter;
  1819. int has_type = 0;
  1820. int has_application = 0;
  1821. int has_channel = 0;
  1822. int has_context = 0;
  1823. int has_exten = 0;
  1824. int has_is_external = 0;
  1825. int has_result = 0;
  1826. for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
  1827. if (strcmp("type", ast_json_object_iter_key(iter)) == 0) {
  1828. int prop_is_valid;
  1829. has_type = 1;
  1830. prop_is_valid = ast_ari_validate_string(
  1831. ast_json_object_iter_value(iter));
  1832. if (!prop_is_valid) {
  1833. ast_log(LOG_ERROR, "ARI BridgeBlindTransfer field type failed validation\n");
  1834. res = 0;
  1835. }
  1836. } else
  1837. if (strcmp("application", ast_json_object_iter_key(iter)) == 0) {
  1838. int prop_is_valid;
  1839. has_application = 1;
  1840. prop_is_valid = ast_ari_validate_string(
  1841. ast_json_object_iter_value(iter));
  1842. if (!prop_is_valid) {
  1843. ast_log(LOG_ERROR, "ARI BridgeBlindTransfer field application failed validation\n");
  1844. res = 0;
  1845. }
  1846. } else
  1847. if (strcmp("timestamp", ast_json_object_iter_key(iter)) == 0) {
  1848. int prop_is_valid;
  1849. prop_is_valid = ast_ari_validate_date(
  1850. ast_json_object_iter_value(iter));
  1851. if (!prop_is_valid) {
  1852. ast_log(LOG_ERROR, "ARI BridgeBlindTransfer field timestamp failed validation\n");
  1853. res = 0;
  1854. }
  1855. } else
  1856. if (strcmp("bridge", ast_json_object_iter_key(iter)) == 0) {
  1857. int prop_is_valid;
  1858. prop_is_valid = ast_ari_validate_bridge(
  1859. ast_json_object_iter_value(iter));
  1860. if (!prop_is_valid) {
  1861. ast_log(LOG_ERROR, "ARI BridgeBlindTransfer field bridge failed validation\n");
  1862. res = 0;
  1863. }
  1864. } else
  1865. if (strcmp("channel", ast_json_object_iter_key(iter)) == 0) {
  1866. int prop_is_valid;
  1867. has_channel = 1;
  1868. prop_is_valid = ast_ari_validate_channel(
  1869. ast_json_object_iter_value(iter));
  1870. if (!prop_is_valid) {
  1871. ast_log(LOG_ERROR, "ARI BridgeBlindTransfer field channel failed validation\n");
  1872. res = 0;
  1873. }
  1874. } else
  1875. if (strcmp("context", ast_json_object_iter_key(iter)) == 0) {
  1876. int prop_is_valid;
  1877. has_context = 1;
  1878. prop_is_valid = ast_ari_validate_string(
  1879. ast_json_object_iter_value(iter));
  1880. if (!prop_is_valid) {
  1881. ast_log(LOG_ERROR, "ARI BridgeBlindTransfer field context failed validation\n");
  1882. res = 0;
  1883. }
  1884. } else
  1885. if (strcmp("exten", ast_json_object_iter_key(iter)) == 0) {
  1886. int prop_is_valid;
  1887. has_exten = 1;
  1888. prop_is_valid = ast_ari_validate_string(
  1889. ast_json_object_iter_value(iter));
  1890. if (!prop_is_valid) {
  1891. ast_log(LOG_ERROR, "ARI BridgeBlindTransfer field exten failed validation\n");
  1892. res = 0;
  1893. }
  1894. } else
  1895. if (strcmp("is_external", ast_json_object_iter_key(iter)) == 0) {
  1896. int prop_is_valid;
  1897. has_is_external = 1;
  1898. prop_is_valid = ast_ari_validate_boolean(
  1899. ast_json_object_iter_value(iter));
  1900. if (!prop_is_valid) {
  1901. ast_log(LOG_ERROR, "ARI BridgeBlindTransfer field is_external failed validation\n");
  1902. res = 0;
  1903. }
  1904. } else
  1905. if (strcmp("replace_channel", ast_json_object_iter_key(iter)) == 0) {
  1906. int prop_is_valid;
  1907. prop_is_valid = ast_ari_validate_channel(
  1908. ast_json_object_iter_value(iter));
  1909. if (!prop_is_valid) {
  1910. ast_log(LOG_ERROR, "ARI BridgeBlindTransfer field replace_channel failed validation\n");
  1911. res = 0;
  1912. }
  1913. } else
  1914. if (strcmp("result", ast_json_object_iter_key(iter)) == 0) {
  1915. int prop_is_valid;
  1916. has_result = 1;
  1917. prop_is_valid = ast_ari_validate_string(
  1918. ast_json_object_iter_value(iter));
  1919. if (!prop_is_valid) {
  1920. ast_log(LOG_ERROR, "ARI BridgeBlindTransfer field result failed validation\n");
  1921. res = 0;
  1922. }
  1923. } else
  1924. if (strcmp("transferee", ast_json_object_iter_key(iter)) == 0) {
  1925. int prop_is_valid;
  1926. prop_is_valid = ast_ari_validate_channel(
  1927. ast_json_object_iter_value(iter));
  1928. if (!prop_is_valid) {
  1929. ast_log(LOG_ERROR, "ARI BridgeBlindTransfer field transferee failed validation\n");
  1930. res = 0;
  1931. }
  1932. } else
  1933. {
  1934. ast_log(LOG_ERROR,
  1935. "ARI BridgeBlindTransfer has undocumented field %s\n",
  1936. ast_json_object_iter_key(iter));
  1937. res = 0;
  1938. }
  1939. }
  1940. if (!has_type) {
  1941. ast_log(LOG_ERROR, "ARI BridgeBlindTransfer missing required field type\n");
  1942. res = 0;
  1943. }
  1944. if (!has_application) {
  1945. ast_log(LOG_ERROR, "ARI BridgeBlindTransfer missing required field application\n");
  1946. res = 0;
  1947. }
  1948. if (!has_channel) {
  1949. ast_log(LOG_ERROR, "ARI BridgeBlindTransfer missing required field channel\n");
  1950. res = 0;
  1951. }
  1952. if (!has_context) {
  1953. ast_log(LOG_ERROR, "ARI BridgeBlindTransfer missing required field context\n");
  1954. res = 0;
  1955. }
  1956. if (!has_exten) {
  1957. ast_log(LOG_ERROR, "ARI BridgeBlindTransfer missing required field exten\n");
  1958. res = 0;
  1959. }
  1960. if (!has_is_external) {
  1961. ast_log(LOG_ERROR, "ARI BridgeBlindTransfer missing required field is_external\n");
  1962. res = 0;
  1963. }
  1964. if (!has_result) {
  1965. ast_log(LOG_ERROR, "ARI BridgeBlindTransfer missing required field result\n");
  1966. res = 0;
  1967. }
  1968. return res;
  1969. }
  1970. ari_validator ast_ari_validate_bridge_blind_transfer_fn(void)
  1971. {
  1972. return ast_ari_validate_bridge_blind_transfer;
  1973. }
  1974. int ast_ari_validate_bridge_created(struct ast_json *json)
  1975. {
  1976. int res = 1;
  1977. struct ast_json_iter *iter;
  1978. int has_type = 0;
  1979. int has_application = 0;
  1980. int has_bridge = 0;
  1981. for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
  1982. if (strcmp("type", ast_json_object_iter_key(iter)) == 0) {
  1983. int prop_is_valid;
  1984. has_type = 1;
  1985. prop_is_valid = ast_ari_validate_string(
  1986. ast_json_object_iter_value(iter));
  1987. if (!prop_is_valid) {
  1988. ast_log(LOG_ERROR, "ARI BridgeCreated field type failed validation\n");
  1989. res = 0;
  1990. }
  1991. } else
  1992. if (strcmp("application", ast_json_object_iter_key(iter)) == 0) {
  1993. int prop_is_valid;
  1994. has_application = 1;
  1995. prop_is_valid = ast_ari_validate_string(
  1996. ast_json_object_iter_value(iter));
  1997. if (!prop_is_valid) {
  1998. ast_log(LOG_ERROR, "ARI BridgeCreated field application failed validation\n");
  1999. res = 0;
  2000. }
  2001. } else
  2002. if (strcmp("timestamp", ast_json_object_iter_key(iter)) == 0) {
  2003. int prop_is_valid;
  2004. prop_is_valid = ast_ari_validate_date(
  2005. ast_json_object_iter_value(iter));
  2006. if (!prop_is_valid) {
  2007. ast_log(LOG_ERROR, "ARI BridgeCreated field timestamp failed validation\n");
  2008. res = 0;
  2009. }
  2010. } else
  2011. if (strcmp("bridge", ast_json_object_iter_key(iter)) == 0) {
  2012. int prop_is_valid;
  2013. has_bridge = 1;
  2014. prop_is_valid = ast_ari_validate_bridge(
  2015. ast_json_object_iter_value(iter));
  2016. if (!prop_is_valid) {
  2017. ast_log(LOG_ERROR, "ARI BridgeCreated field bridge failed validation\n");
  2018. res = 0;
  2019. }
  2020. } else
  2021. {
  2022. ast_log(LOG_ERROR,
  2023. "ARI BridgeCreated has undocumented field %s\n",
  2024. ast_json_object_iter_key(iter));
  2025. res = 0;
  2026. }
  2027. }
  2028. if (!has_type) {
  2029. ast_log(LOG_ERROR, "ARI BridgeCreated missing required field type\n");
  2030. res = 0;
  2031. }
  2032. if (!has_application) {
  2033. ast_log(LOG_ERROR, "ARI BridgeCreated missing required field application\n");
  2034. res = 0;
  2035. }
  2036. if (!has_bridge) {
  2037. ast_log(LOG_ERROR, "ARI BridgeCreated missing required field bridge\n");
  2038. res = 0;
  2039. }
  2040. return res;
  2041. }
  2042. ari_validator ast_ari_validate_bridge_created_fn(void)
  2043. {
  2044. return ast_ari_validate_bridge_created;
  2045. }
  2046. int ast_ari_validate_bridge_destroyed(struct ast_json *json)
  2047. {
  2048. int res = 1;
  2049. struct ast_json_iter *iter;
  2050. int has_type = 0;
  2051. int has_application = 0;
  2052. int has_bridge = 0;
  2053. for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
  2054. if (strcmp("type", ast_json_object_iter_key(iter)) == 0) {
  2055. int prop_is_valid;
  2056. has_type = 1;
  2057. prop_is_valid = ast_ari_validate_string(
  2058. ast_json_object_iter_value(iter));
  2059. if (!prop_is_valid) {
  2060. ast_log(LOG_ERROR, "ARI BridgeDestroyed field type failed validation\n");
  2061. res = 0;
  2062. }
  2063. } else
  2064. if (strcmp("application", ast_json_object_iter_key(iter)) == 0) {
  2065. int prop_is_valid;
  2066. has_application = 1;
  2067. prop_is_valid = ast_ari_validate_string(
  2068. ast_json_object_iter_value(iter));
  2069. if (!prop_is_valid) {
  2070. ast_log(LOG_ERROR, "ARI BridgeDestroyed field application failed validation\n");
  2071. res = 0;
  2072. }
  2073. } else
  2074. if (strcmp("timestamp", ast_json_object_iter_key(iter)) == 0) {
  2075. int prop_is_valid;
  2076. prop_is_valid = ast_ari_validate_date(
  2077. ast_json_object_iter_value(iter));
  2078. if (!prop_is_valid) {
  2079. ast_log(LOG_ERROR, "ARI BridgeDestroyed field timestamp failed validation\n");
  2080. res = 0;
  2081. }
  2082. } else
  2083. if (strcmp("bridge", ast_json_object_iter_key(iter)) == 0) {
  2084. int prop_is_valid;
  2085. has_bridge = 1;
  2086. prop_is_valid = ast_ari_validate_bridge(
  2087. ast_json_object_iter_value(iter));
  2088. if (!prop_is_valid) {
  2089. ast_log(LOG_ERROR, "ARI BridgeDestroyed field bridge failed validation\n");
  2090. res = 0;
  2091. }
  2092. } else
  2093. {
  2094. ast_log(LOG_ERROR,
  2095. "ARI BridgeDestroyed has undocumented field %s\n",
  2096. ast_json_object_iter_key(iter));
  2097. res = 0;
  2098. }
  2099. }
  2100. if (!has_type) {
  2101. ast_log(LOG_ERROR, "ARI BridgeDestroyed missing required field type\n");
  2102. res = 0;
  2103. }
  2104. if (!has_application) {
  2105. ast_log(LOG_ERROR, "ARI BridgeDestroyed missing required field application\n");
  2106. res = 0;
  2107. }
  2108. if (!has_bridge) {
  2109. ast_log(LOG_ERROR, "ARI BridgeDestroyed missing required field bridge\n");
  2110. res = 0;
  2111. }
  2112. return res;
  2113. }
  2114. ari_validator ast_ari_validate_bridge_destroyed_fn(void)
  2115. {
  2116. return ast_ari_validate_bridge_destroyed;
  2117. }
  2118. int ast_ari_validate_bridge_merged(struct ast_json *json)
  2119. {
  2120. int res = 1;
  2121. struct ast_json_iter *iter;
  2122. int has_type = 0;
  2123. int has_application = 0;
  2124. int has_bridge = 0;
  2125. int has_bridge_from = 0;
  2126. for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
  2127. if (strcmp("type", ast_json_object_iter_key(iter)) == 0) {
  2128. int prop_is_valid;
  2129. has_type = 1;
  2130. prop_is_valid = ast_ari_validate_string(
  2131. ast_json_object_iter_value(iter));
  2132. if (!prop_is_valid) {
  2133. ast_log(LOG_ERROR, "ARI BridgeMerged field type failed validation\n");
  2134. res = 0;
  2135. }
  2136. } else
  2137. if (strcmp("application", ast_json_object_iter_key(iter)) == 0) {
  2138. int prop_is_valid;
  2139. has_application = 1;
  2140. prop_is_valid = ast_ari_validate_string(
  2141. ast_json_object_iter_value(iter));
  2142. if (!prop_is_valid) {
  2143. ast_log(LOG_ERROR, "ARI BridgeMerged field application failed validation\n");
  2144. res = 0;
  2145. }
  2146. } else
  2147. if (strcmp("timestamp", ast_json_object_iter_key(iter)) == 0) {
  2148. int prop_is_valid;
  2149. prop_is_valid = ast_ari_validate_date(
  2150. ast_json_object_iter_value(iter));
  2151. if (!prop_is_valid) {
  2152. ast_log(LOG_ERROR, "ARI BridgeMerged field timestamp failed validation\n");
  2153. res = 0;
  2154. }
  2155. } else
  2156. if (strcmp("bridge", ast_json_object_iter_key(iter)) == 0) {
  2157. int prop_is_valid;
  2158. has_bridge = 1;
  2159. prop_is_valid = ast_ari_validate_bridge(
  2160. ast_json_object_iter_value(iter));
  2161. if (!prop_is_valid) {
  2162. ast_log(LOG_ERROR, "ARI BridgeMerged field bridge failed validation\n");
  2163. res = 0;
  2164. }
  2165. } else
  2166. if (strcmp("bridge_from", ast_json_object_iter_key(iter)) == 0) {
  2167. int prop_is_valid;
  2168. has_bridge_from = 1;
  2169. prop_is_valid = ast_ari_validate_bridge(
  2170. ast_json_object_iter_value(iter));
  2171. if (!prop_is_valid) {
  2172. ast_log(LOG_ERROR, "ARI BridgeMerged field bridge_from failed validation\n");
  2173. res = 0;
  2174. }
  2175. } else
  2176. {
  2177. ast_log(LOG_ERROR,
  2178. "ARI BridgeMerged has undocumented field %s\n",
  2179. ast_json_object_iter_key(iter));
  2180. res = 0;
  2181. }
  2182. }
  2183. if (!has_type) {
  2184. ast_log(LOG_ERROR, "ARI BridgeMerged missing required field type\n");
  2185. res = 0;
  2186. }
  2187. if (!has_application) {
  2188. ast_log(LOG_ERROR, "ARI BridgeMerged missing required field application\n");
  2189. res = 0;
  2190. }
  2191. if (!has_bridge) {
  2192. ast_log(LOG_ERROR, "ARI BridgeMerged missing required field bridge\n");
  2193. res = 0;
  2194. }
  2195. if (!has_bridge_from) {
  2196. ast_log(LOG_ERROR, "ARI BridgeMerged missing required field bridge_from\n");
  2197. res = 0;
  2198. }
  2199. return res;
  2200. }
  2201. ari_validator ast_ari_validate_bridge_merged_fn(void)
  2202. {
  2203. return ast_ari_validate_bridge_merged;
  2204. }
  2205. int ast_ari_validate_channel_caller_id(struct ast_json *json)
  2206. {
  2207. int res = 1;
  2208. struct ast_json_iter *iter;
  2209. int has_type = 0;
  2210. int has_application = 0;
  2211. int has_caller_presentation = 0;
  2212. int has_caller_presentation_txt = 0;
  2213. int has_channel = 0;
  2214. for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
  2215. if (strcmp("type", ast_json_object_iter_key(iter)) == 0) {
  2216. int prop_is_valid;
  2217. has_type = 1;
  2218. prop_is_valid = ast_ari_validate_string(
  2219. ast_json_object_iter_value(iter));
  2220. if (!prop_is_valid) {
  2221. ast_log(LOG_ERROR, "ARI ChannelCallerId field type failed validation\n");
  2222. res = 0;
  2223. }
  2224. } else
  2225. if (strcmp("application", ast_json_object_iter_key(iter)) == 0) {
  2226. int prop_is_valid;
  2227. has_application = 1;
  2228. prop_is_valid = ast_ari_validate_string(
  2229. ast_json_object_iter_value(iter));
  2230. if (!prop_is_valid) {
  2231. ast_log(LOG_ERROR, "ARI ChannelCallerId field application failed validation\n");
  2232. res = 0;
  2233. }
  2234. } else
  2235. if (strcmp("timestamp", ast_json_object_iter_key(iter)) == 0) {
  2236. int prop_is_valid;
  2237. prop_is_valid = ast_ari_validate_date(
  2238. ast_json_object_iter_value(iter));
  2239. if (!prop_is_valid) {
  2240. ast_log(LOG_ERROR, "ARI ChannelCallerId field timestamp failed validation\n");
  2241. res = 0;
  2242. }
  2243. } else
  2244. if (strcmp("caller_presentation", ast_json_object_iter_key(iter)) == 0) {
  2245. int prop_is_valid;
  2246. has_caller_presentation = 1;
  2247. prop_is_valid = ast_ari_validate_int(
  2248. ast_json_object_iter_value(iter));
  2249. if (!prop_is_valid) {
  2250. ast_log(LOG_ERROR, "ARI ChannelCallerId field caller_presentation failed validation\n");
  2251. res = 0;
  2252. }
  2253. } else
  2254. if (strcmp("caller_presentation_txt", ast_json_object_iter_key(iter)) == 0) {
  2255. int prop_is_valid;
  2256. has_caller_presentation_txt = 1;
  2257. prop_is_valid = ast_ari_validate_string(
  2258. ast_json_object_iter_value(iter));
  2259. if (!prop_is_valid) {
  2260. ast_log(LOG_ERROR, "ARI ChannelCallerId field caller_presentation_txt failed validation\n");
  2261. res = 0;
  2262. }
  2263. } else
  2264. if (strcmp("channel", ast_json_object_iter_key(iter)) == 0) {
  2265. int prop_is_valid;
  2266. has_channel = 1;
  2267. prop_is_valid = ast_ari_validate_channel(
  2268. ast_json_object_iter_value(iter));
  2269. if (!prop_is_valid) {
  2270. ast_log(LOG_ERROR, "ARI ChannelCallerId field channel failed validation\n");
  2271. res = 0;
  2272. }
  2273. } else
  2274. {
  2275. ast_log(LOG_ERROR,
  2276. "ARI ChannelCallerId has undocumented field %s\n",
  2277. ast_json_object_iter_key(iter));
  2278. res = 0;
  2279. }
  2280. }
  2281. if (!has_type) {
  2282. ast_log(LOG_ERROR, "ARI ChannelCallerId missing required field type\n");
  2283. res = 0;
  2284. }
  2285. if (!has_application) {
  2286. ast_log(LOG_ERROR, "ARI ChannelCallerId missing required field application\n");
  2287. res = 0;
  2288. }
  2289. if (!has_caller_presentation) {
  2290. ast_log(LOG_ERROR, "ARI ChannelCallerId missing required field caller_presentation\n");
  2291. res = 0;
  2292. }
  2293. if (!has_caller_presentation_txt) {
  2294. ast_log(LOG_ERROR, "ARI ChannelCallerId missing required field caller_presentation_txt\n");
  2295. res = 0;
  2296. }
  2297. if (!has_channel) {
  2298. ast_log(LOG_ERROR, "ARI ChannelCallerId missing required field channel\n");
  2299. res = 0;
  2300. }
  2301. return res;
  2302. }
  2303. ari_validator ast_ari_validate_channel_caller_id_fn(void)
  2304. {
  2305. return ast_ari_validate_channel_caller_id;
  2306. }
  2307. int ast_ari_validate_channel_connected_line(struct ast_json *json)
  2308. {
  2309. int res = 1;
  2310. struct ast_json_iter *iter;
  2311. int has_type = 0;
  2312. int has_application = 0;
  2313. int has_channel = 0;
  2314. for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
  2315. if (strcmp("type", ast_json_object_iter_key(iter)) == 0) {
  2316. int prop_is_valid;
  2317. has_type = 1;
  2318. prop_is_valid = ast_ari_validate_string(
  2319. ast_json_object_iter_value(iter));
  2320. if (!prop_is_valid) {
  2321. ast_log(LOG_ERROR, "ARI ChannelConnectedLine field type failed validation\n");
  2322. res = 0;
  2323. }
  2324. } else
  2325. if (strcmp("application", ast_json_object_iter_key(iter)) == 0) {
  2326. int prop_is_valid;
  2327. has_application = 1;
  2328. prop_is_valid = ast_ari_validate_string(
  2329. ast_json_object_iter_value(iter));
  2330. if (!prop_is_valid) {
  2331. ast_log(LOG_ERROR, "ARI ChannelConnectedLine field application failed validation\n");
  2332. res = 0;
  2333. }
  2334. } else
  2335. if (strcmp("timestamp", ast_json_object_iter_key(iter)) == 0) {
  2336. int prop_is_valid;
  2337. prop_is_valid = ast_ari_validate_date(
  2338. ast_json_object_iter_value(iter));
  2339. if (!prop_is_valid) {
  2340. ast_log(LOG_ERROR, "ARI ChannelConnectedLine field timestamp failed validation\n");
  2341. res = 0;
  2342. }
  2343. } else
  2344. if (strcmp("channel", ast_json_object_iter_key(iter)) == 0) {
  2345. int prop_is_valid;
  2346. has_channel = 1;
  2347. prop_is_valid = ast_ari_validate_channel(
  2348. ast_json_object_iter_value(iter));
  2349. if (!prop_is_valid) {
  2350. ast_log(LOG_ERROR, "ARI ChannelConnectedLine field channel failed validation\n");
  2351. res = 0;
  2352. }
  2353. } else
  2354. {
  2355. ast_log(LOG_ERROR,
  2356. "ARI ChannelConnectedLine has undocumented field %s\n",
  2357. ast_json_object_iter_key(iter));
  2358. res = 0;
  2359. }
  2360. }
  2361. if (!has_type) {
  2362. ast_log(LOG_ERROR, "ARI ChannelConnectedLine missing required field type\n");
  2363. res = 0;
  2364. }
  2365. if (!has_application) {
  2366. ast_log(LOG_ERROR, "ARI ChannelConnectedLine missing required field application\n");
  2367. res = 0;
  2368. }
  2369. if (!has_channel) {
  2370. ast_log(LOG_ERROR, "ARI ChannelConnectedLine missing required field channel\n");
  2371. res = 0;
  2372. }
  2373. return res;
  2374. }
  2375. ari_validator ast_ari_validate_channel_connected_line_fn(void)
  2376. {
  2377. return ast_ari_validate_channel_connected_line;
  2378. }
  2379. int ast_ari_validate_channel_created(struct ast_json *json)
  2380. {
  2381. int res = 1;
  2382. struct ast_json_iter *iter;
  2383. int has_type = 0;
  2384. int has_application = 0;
  2385. int has_channel = 0;
  2386. for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
  2387. if (strcmp("type", ast_json_object_iter_key(iter)) == 0) {
  2388. int prop_is_valid;
  2389. has_type = 1;
  2390. prop_is_valid = ast_ari_validate_string(
  2391. ast_json_object_iter_value(iter));
  2392. if (!prop_is_valid) {
  2393. ast_log(LOG_ERROR, "ARI ChannelCreated field type failed validation\n");
  2394. res = 0;
  2395. }
  2396. } else
  2397. if (strcmp("application", ast_json_object_iter_key(iter)) == 0) {
  2398. int prop_is_valid;
  2399. has_application = 1;
  2400. prop_is_valid = ast_ari_validate_string(
  2401. ast_json_object_iter_value(iter));
  2402. if (!prop_is_valid) {
  2403. ast_log(LOG_ERROR, "ARI ChannelCreated field application failed validation\n");
  2404. res = 0;
  2405. }
  2406. } else
  2407. if (strcmp("timestamp", ast_json_object_iter_key(iter)) == 0) {
  2408. int prop_is_valid;
  2409. prop_is_valid = ast_ari_validate_date(
  2410. ast_json_object_iter_value(iter));
  2411. if (!prop_is_valid) {
  2412. ast_log(LOG_ERROR, "ARI ChannelCreated field timestamp failed validation\n");
  2413. res = 0;
  2414. }
  2415. } else
  2416. if (strcmp("channel", ast_json_object_iter_key(iter)) == 0) {
  2417. int prop_is_valid;
  2418. has_channel = 1;
  2419. prop_is_valid = ast_ari_validate_channel(
  2420. ast_json_object_iter_value(iter));
  2421. if (!prop_is_valid) {
  2422. ast_log(LOG_ERROR, "ARI ChannelCreated field channel failed validation\n");
  2423. res = 0;
  2424. }
  2425. } else
  2426. {
  2427. ast_log(LOG_ERROR,
  2428. "ARI ChannelCreated has undocumented field %s\n",
  2429. ast_json_object_iter_key(iter));
  2430. res = 0;
  2431. }
  2432. }
  2433. if (!has_type) {
  2434. ast_log(LOG_ERROR, "ARI ChannelCreated missing required field type\n");
  2435. res = 0;
  2436. }
  2437. if (!has_application) {
  2438. ast_log(LOG_ERROR, "ARI ChannelCreated missing required field application\n");
  2439. res = 0;
  2440. }
  2441. if (!has_channel) {
  2442. ast_log(LOG_ERROR, "ARI ChannelCreated missing required field channel\n");
  2443. res = 0;
  2444. }
  2445. return res;
  2446. }
  2447. ari_validator ast_ari_validate_channel_created_fn(void)
  2448. {
  2449. return ast_ari_validate_channel_created;
  2450. }
  2451. int ast_ari_validate_channel_destroyed(struct ast_json *json)
  2452. {
  2453. int res = 1;
  2454. struct ast_json_iter *iter;
  2455. int has_type = 0;
  2456. int has_application = 0;
  2457. int has_cause = 0;
  2458. int has_cause_txt = 0;
  2459. int has_channel = 0;
  2460. for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
  2461. if (strcmp("type", ast_json_object_iter_key(iter)) == 0) {
  2462. int prop_is_valid;
  2463. has_type = 1;
  2464. prop_is_valid = ast_ari_validate_string(
  2465. ast_json_object_iter_value(iter));
  2466. if (!prop_is_valid) {
  2467. ast_log(LOG_ERROR, "ARI ChannelDestroyed field type failed validation\n");
  2468. res = 0;
  2469. }
  2470. } else
  2471. if (strcmp("application", ast_json_object_iter_key(iter)) == 0) {
  2472. int prop_is_valid;
  2473. has_application = 1;
  2474. prop_is_valid = ast_ari_validate_string(
  2475. ast_json_object_iter_value(iter));
  2476. if (!prop_is_valid) {
  2477. ast_log(LOG_ERROR, "ARI ChannelDestroyed field application failed validation\n");
  2478. res = 0;
  2479. }
  2480. } else
  2481. if (strcmp("timestamp", ast_json_object_iter_key(iter)) == 0) {
  2482. int prop_is_valid;
  2483. prop_is_valid = ast_ari_validate_date(
  2484. ast_json_object_iter_value(iter));
  2485. if (!prop_is_valid) {
  2486. ast_log(LOG_ERROR, "ARI ChannelDestroyed field timestamp failed validation\n");
  2487. res = 0;
  2488. }
  2489. } else
  2490. if (strcmp("cause", ast_json_object_iter_key(iter)) == 0) {
  2491. int prop_is_valid;
  2492. has_cause = 1;
  2493. prop_is_valid = ast_ari_validate_int(
  2494. ast_json_object_iter_value(iter));
  2495. if (!prop_is_valid) {
  2496. ast_log(LOG_ERROR, "ARI ChannelDestroyed field cause failed validation\n");
  2497. res = 0;
  2498. }
  2499. } else
  2500. if (strcmp("cause_txt", ast_json_object_iter_key(iter)) == 0) {
  2501. int prop_is_valid;
  2502. has_cause_txt = 1;
  2503. prop_is_valid = ast_ari_validate_string(
  2504. ast_json_object_iter_value(iter));
  2505. if (!prop_is_valid) {
  2506. ast_log(LOG_ERROR, "ARI ChannelDestroyed field cause_txt failed validation\n");
  2507. res = 0;
  2508. }
  2509. } else
  2510. if (strcmp("channel", ast_json_object_iter_key(iter)) == 0) {
  2511. int prop_is_valid;
  2512. has_channel = 1;
  2513. prop_is_valid = ast_ari_validate_channel(
  2514. ast_json_object_iter_value(iter));
  2515. if (!prop_is_valid) {
  2516. ast_log(LOG_ERROR, "ARI ChannelDestroyed field channel failed validation\n");
  2517. res = 0;
  2518. }
  2519. } else
  2520. {
  2521. ast_log(LOG_ERROR,
  2522. "ARI ChannelDestroyed has undocumented field %s\n",
  2523. ast_json_object_iter_key(iter));
  2524. res = 0;
  2525. }
  2526. }
  2527. if (!has_type) {
  2528. ast_log(LOG_ERROR, "ARI ChannelDestroyed missing required field type\n");
  2529. res = 0;
  2530. }
  2531. if (!has_application) {
  2532. ast_log(LOG_ERROR, "ARI ChannelDestroyed missing required field application\n");
  2533. res = 0;
  2534. }
  2535. if (!has_cause) {
  2536. ast_log(LOG_ERROR, "ARI ChannelDestroyed missing required field cause\n");
  2537. res = 0;
  2538. }
  2539. if (!has_cause_txt) {
  2540. ast_log(LOG_ERROR, "ARI ChannelDestroyed missing required field cause_txt\n");
  2541. res = 0;
  2542. }
  2543. if (!has_channel) {
  2544. ast_log(LOG_ERROR, "ARI ChannelDestroyed missing required field channel\n");
  2545. res = 0;
  2546. }
  2547. return res;
  2548. }
  2549. ari_validator ast_ari_validate_channel_destroyed_fn(void)
  2550. {
  2551. return ast_ari_validate_channel_destroyed;
  2552. }
  2553. int ast_ari_validate_channel_dialplan(struct ast_json *json)
  2554. {
  2555. int res = 1;
  2556. struct ast_json_iter *iter;
  2557. int has_type = 0;
  2558. int has_application = 0;
  2559. int has_channel = 0;
  2560. int has_dialplan_app = 0;
  2561. int has_dialplan_app_data = 0;
  2562. for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
  2563. if (strcmp("type", ast_json_object_iter_key(iter)) == 0) {
  2564. int prop_is_valid;
  2565. has_type = 1;
  2566. prop_is_valid = ast_ari_validate_string(
  2567. ast_json_object_iter_value(iter));
  2568. if (!prop_is_valid) {
  2569. ast_log(LOG_ERROR, "ARI ChannelDialplan field type failed validation\n");
  2570. res = 0;
  2571. }
  2572. } else
  2573. if (strcmp("application", ast_json_object_iter_key(iter)) == 0) {
  2574. int prop_is_valid;
  2575. has_application = 1;
  2576. prop_is_valid = ast_ari_validate_string(
  2577. ast_json_object_iter_value(iter));
  2578. if (!prop_is_valid) {
  2579. ast_log(LOG_ERROR, "ARI ChannelDialplan field application failed validation\n");
  2580. res = 0;
  2581. }
  2582. } else
  2583. if (strcmp("timestamp", ast_json_object_iter_key(iter)) == 0) {
  2584. int prop_is_valid;
  2585. prop_is_valid = ast_ari_validate_date(
  2586. ast_json_object_iter_value(iter));
  2587. if (!prop_is_valid) {
  2588. ast_log(LOG_ERROR, "ARI ChannelDialplan field timestamp failed validation\n");
  2589. res = 0;
  2590. }
  2591. } else
  2592. if (strcmp("channel", ast_json_object_iter_key(iter)) == 0) {
  2593. int prop_is_valid;
  2594. has_channel = 1;
  2595. prop_is_valid = ast_ari_validate_channel(
  2596. ast_json_object_iter_value(iter));
  2597. if (!prop_is_valid) {
  2598. ast_log(LOG_ERROR, "ARI ChannelDialplan field channel failed validation\n");
  2599. res = 0;
  2600. }
  2601. } else
  2602. if (strcmp("dialplan_app", ast_json_object_iter_key(iter)) == 0) {
  2603. int prop_is_valid;
  2604. has_dialplan_app = 1;
  2605. prop_is_valid = ast_ari_validate_string(
  2606. ast_json_object_iter_value(iter));
  2607. if (!prop_is_valid) {
  2608. ast_log(LOG_ERROR, "ARI ChannelDialplan field dialplan_app failed validation\n");
  2609. res = 0;
  2610. }
  2611. } else
  2612. if (strcmp("dialplan_app_data", ast_json_object_iter_key(iter)) == 0) {
  2613. int prop_is_valid;
  2614. has_dialplan_app_data = 1;
  2615. prop_is_valid = ast_ari_validate_string(
  2616. ast_json_object_iter_value(iter));
  2617. if (!prop_is_valid) {
  2618. ast_log(LOG_ERROR, "ARI ChannelDialplan field dialplan_app_data failed validation\n");
  2619. res = 0;
  2620. }
  2621. } else
  2622. {
  2623. ast_log(LOG_ERROR,
  2624. "ARI ChannelDialplan has undocumented field %s\n",
  2625. ast_json_object_iter_key(iter));
  2626. res = 0;
  2627. }
  2628. }
  2629. if (!has_type) {
  2630. ast_log(LOG_ERROR, "ARI ChannelDialplan missing required field type\n");
  2631. res = 0;
  2632. }
  2633. if (!has_application) {
  2634. ast_log(LOG_ERROR, "ARI ChannelDialplan missing required field application\n");
  2635. res = 0;
  2636. }
  2637. if (!has_channel) {
  2638. ast_log(LOG_ERROR, "ARI ChannelDialplan missing required field channel\n");
  2639. res = 0;
  2640. }
  2641. if (!has_dialplan_app) {
  2642. ast_log(LOG_ERROR, "ARI ChannelDialplan missing required field dialplan_app\n");
  2643. res = 0;
  2644. }
  2645. if (!has_dialplan_app_data) {
  2646. ast_log(LOG_ERROR, "ARI ChannelDialplan missing required field dialplan_app_data\n");
  2647. res = 0;
  2648. }
  2649. return res;
  2650. }
  2651. ari_validator ast_ari_validate_channel_dialplan_fn(void)
  2652. {
  2653. return ast_ari_validate_channel_dialplan;
  2654. }
  2655. int ast_ari_validate_channel_dtmf_received(struct ast_json *json)
  2656. {
  2657. int res = 1;
  2658. struct ast_json_iter *iter;
  2659. int has_type = 0;
  2660. int has_application = 0;
  2661. int has_channel = 0;
  2662. int has_digit = 0;
  2663. int has_duration_ms = 0;
  2664. for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
  2665. if (strcmp("type", ast_json_object_iter_key(iter)) == 0) {
  2666. int prop_is_valid;
  2667. has_type = 1;
  2668. prop_is_valid = ast_ari_validate_string(
  2669. ast_json_object_iter_value(iter));
  2670. if (!prop_is_valid) {
  2671. ast_log(LOG_ERROR, "ARI ChannelDtmfReceived field type failed validation\n");
  2672. res = 0;
  2673. }
  2674. } else
  2675. if (strcmp("application", ast_json_object_iter_key(iter)) == 0) {
  2676. int prop_is_valid;
  2677. has_application = 1;
  2678. prop_is_valid = ast_ari_validate_string(
  2679. ast_json_object_iter_value(iter));
  2680. if (!prop_is_valid) {
  2681. ast_log(LOG_ERROR, "ARI ChannelDtmfReceived field application failed validation\n");
  2682. res = 0;
  2683. }
  2684. } else
  2685. if (strcmp("timestamp", ast_json_object_iter_key(iter)) == 0) {
  2686. int prop_is_valid;
  2687. prop_is_valid = ast_ari_validate_date(
  2688. ast_json_object_iter_value(iter));
  2689. if (!prop_is_valid) {
  2690. ast_log(LOG_ERROR, "ARI ChannelDtmfReceived field timestamp failed validation\n");
  2691. res = 0;
  2692. }
  2693. } else
  2694. if (strcmp("channel", ast_json_object_iter_key(iter)) == 0) {
  2695. int prop_is_valid;
  2696. has_channel = 1;
  2697. prop_is_valid = ast_ari_validate_channel(
  2698. ast_json_object_iter_value(iter));
  2699. if (!prop_is_valid) {
  2700. ast_log(LOG_ERROR, "ARI ChannelDtmfReceived field channel failed validation\n");
  2701. res = 0;
  2702. }
  2703. } else
  2704. if (strcmp("digit", ast_json_object_iter_key(iter)) == 0) {
  2705. int prop_is_valid;
  2706. has_digit = 1;
  2707. prop_is_valid = ast_ari_validate_string(
  2708. ast_json_object_iter_value(iter));
  2709. if (!prop_is_valid) {
  2710. ast_log(LOG_ERROR, "ARI ChannelDtmfReceived field digit failed validation\n");
  2711. res = 0;
  2712. }
  2713. } else
  2714. if (strcmp("duration_ms", ast_json_object_iter_key(iter)) == 0) {
  2715. int prop_is_valid;
  2716. has_duration_ms = 1;
  2717. prop_is_valid = ast_ari_validate_int(
  2718. ast_json_object_iter_value(iter));
  2719. if (!prop_is_valid) {
  2720. ast_log(LOG_ERROR, "ARI ChannelDtmfReceived field duration_ms failed validation\n");
  2721. res = 0;
  2722. }
  2723. } else
  2724. {
  2725. ast_log(LOG_ERROR,
  2726. "ARI ChannelDtmfReceived has undocumented field %s\n",
  2727. ast_json_object_iter_key(iter));
  2728. res = 0;
  2729. }
  2730. }
  2731. if (!has_type) {
  2732. ast_log(LOG_ERROR, "ARI ChannelDtmfReceived missing required field type\n");
  2733. res = 0;
  2734. }
  2735. if (!has_application) {
  2736. ast_log(LOG_ERROR, "ARI ChannelDtmfReceived missing required field application\n");
  2737. res = 0;
  2738. }
  2739. if (!has_channel) {
  2740. ast_log(LOG_ERROR, "ARI ChannelDtmfReceived missing required field channel\n");
  2741. res = 0;
  2742. }
  2743. if (!has_digit) {
  2744. ast_log(LOG_ERROR, "ARI ChannelDtmfReceived missing required field digit\n");
  2745. res = 0;
  2746. }
  2747. if (!has_duration_ms) {
  2748. ast_log(LOG_ERROR, "ARI ChannelDtmfReceived missing required field duration_ms\n");
  2749. res = 0;
  2750. }
  2751. return res;
  2752. }
  2753. ari_validator ast_ari_validate_channel_dtmf_received_fn(void)
  2754. {
  2755. return ast_ari_validate_channel_dtmf_received;
  2756. }
  2757. int ast_ari_validate_channel_entered_bridge(struct ast_json *json)
  2758. {
  2759. int res = 1;
  2760. struct ast_json_iter *iter;
  2761. int has_type = 0;
  2762. int has_application = 0;
  2763. int has_bridge = 0;
  2764. for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
  2765. if (strcmp("type", ast_json_object_iter_key(iter)) == 0) {
  2766. int prop_is_valid;
  2767. has_type = 1;
  2768. prop_is_valid = ast_ari_validate_string(
  2769. ast_json_object_iter_value(iter));
  2770. if (!prop_is_valid) {
  2771. ast_log(LOG_ERROR, "ARI ChannelEnteredBridge field type failed validation\n");
  2772. res = 0;
  2773. }
  2774. } else
  2775. if (strcmp("application", ast_json_object_iter_key(iter)) == 0) {
  2776. int prop_is_valid;
  2777. has_application = 1;
  2778. prop_is_valid = ast_ari_validate_string(
  2779. ast_json_object_iter_value(iter));
  2780. if (!prop_is_valid) {
  2781. ast_log(LOG_ERROR, "ARI ChannelEnteredBridge field application failed validation\n");
  2782. res = 0;
  2783. }
  2784. } else
  2785. if (strcmp("timestamp", ast_json_object_iter_key(iter)) == 0) {
  2786. int prop_is_valid;
  2787. prop_is_valid = ast_ari_validate_date(
  2788. ast_json_object_iter_value(iter));
  2789. if (!prop_is_valid) {
  2790. ast_log(LOG_ERROR, "ARI ChannelEnteredBridge field timestamp failed validation\n");
  2791. res = 0;
  2792. }
  2793. } else
  2794. if (strcmp("bridge", ast_json_object_iter_key(iter)) == 0) {
  2795. int prop_is_valid;
  2796. has_bridge = 1;
  2797. prop_is_valid = ast_ari_validate_bridge(
  2798. ast_json_object_iter_value(iter));
  2799. if (!prop_is_valid) {
  2800. ast_log(LOG_ERROR, "ARI ChannelEnteredBridge field bridge failed validation\n");
  2801. res = 0;
  2802. }
  2803. } else
  2804. if (strcmp("channel", ast_json_object_iter_key(iter)) == 0) {
  2805. int prop_is_valid;
  2806. prop_is_valid = ast_ari_validate_channel(
  2807. ast_json_object_iter_value(iter));
  2808. if (!prop_is_valid) {
  2809. ast_log(LOG_ERROR, "ARI ChannelEnteredBridge field channel failed validation\n");
  2810. res = 0;
  2811. }
  2812. } else
  2813. {
  2814. ast_log(LOG_ERROR,
  2815. "ARI ChannelEnteredBridge has undocumented field %s\n",
  2816. ast_json_object_iter_key(iter));
  2817. res = 0;
  2818. }
  2819. }
  2820. if (!has_type) {
  2821. ast_log(LOG_ERROR, "ARI ChannelEnteredBridge missing required field type\n");
  2822. res = 0;
  2823. }
  2824. if (!has_application) {
  2825. ast_log(LOG_ERROR, "ARI ChannelEnteredBridge missing required field application\n");
  2826. res = 0;
  2827. }
  2828. if (!has_bridge) {
  2829. ast_log(LOG_ERROR, "ARI ChannelEnteredBridge missing required field bridge\n");
  2830. res = 0;
  2831. }
  2832. return res;
  2833. }
  2834. ari_validator ast_ari_validate_channel_entered_bridge_fn(void)
  2835. {
  2836. return ast_ari_validate_channel_entered_bridge;
  2837. }
  2838. int ast_ari_validate_channel_hangup_request(struct ast_json *json)
  2839. {
  2840. int res = 1;
  2841. struct ast_json_iter *iter;
  2842. int has_type = 0;
  2843. int has_application = 0;
  2844. int has_channel = 0;
  2845. for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
  2846. if (strcmp("type", ast_json_object_iter_key(iter)) == 0) {
  2847. int prop_is_valid;
  2848. has_type = 1;
  2849. prop_is_valid = ast_ari_validate_string(
  2850. ast_json_object_iter_value(iter));
  2851. if (!prop_is_valid) {
  2852. ast_log(LOG_ERROR, "ARI ChannelHangupRequest field type failed validation\n");
  2853. res = 0;
  2854. }
  2855. } else
  2856. if (strcmp("application", ast_json_object_iter_key(iter)) == 0) {
  2857. int prop_is_valid;
  2858. has_application = 1;
  2859. prop_is_valid = ast_ari_validate_string(
  2860. ast_json_object_iter_value(iter));
  2861. if (!prop_is_valid) {
  2862. ast_log(LOG_ERROR, "ARI ChannelHangupRequest field application failed validation\n");
  2863. res = 0;
  2864. }
  2865. } else
  2866. if (strcmp("timestamp", ast_json_object_iter_key(iter)) == 0) {
  2867. int prop_is_valid;
  2868. prop_is_valid = ast_ari_validate_date(
  2869. ast_json_object_iter_value(iter));
  2870. if (!prop_is_valid) {
  2871. ast_log(LOG_ERROR, "ARI ChannelHangupRequest field timestamp failed validation\n");
  2872. res = 0;
  2873. }
  2874. } else
  2875. if (strcmp("cause", ast_json_object_iter_key(iter)) == 0) {
  2876. int prop_is_valid;
  2877. prop_is_valid = ast_ari_validate_int(
  2878. ast_json_object_iter_value(iter));
  2879. if (!prop_is_valid) {
  2880. ast_log(LOG_ERROR, "ARI ChannelHangupRequest field cause failed validation\n");
  2881. res = 0;
  2882. }
  2883. } else
  2884. if (strcmp("channel", ast_json_object_iter_key(iter)) == 0) {
  2885. int prop_is_valid;
  2886. has_channel = 1;
  2887. prop_is_valid = ast_ari_validate_channel(
  2888. ast_json_object_iter_value(iter));
  2889. if (!prop_is_valid) {
  2890. ast_log(LOG_ERROR, "ARI ChannelHangupRequest field channel failed validation\n");
  2891. res = 0;
  2892. }
  2893. } else
  2894. if (strcmp("soft", ast_json_object_iter_key(iter)) == 0) {
  2895. int prop_is_valid;
  2896. prop_is_valid = ast_ari_validate_boolean(
  2897. ast_json_object_iter_value(iter));
  2898. if (!prop_is_valid) {
  2899. ast_log(LOG_ERROR, "ARI ChannelHangupRequest field soft failed validation\n");
  2900. res = 0;
  2901. }
  2902. } else
  2903. {
  2904. ast_log(LOG_ERROR,
  2905. "ARI ChannelHangupRequest has undocumented field %s\n",
  2906. ast_json_object_iter_key(iter));
  2907. res = 0;
  2908. }
  2909. }
  2910. if (!has_type) {
  2911. ast_log(LOG_ERROR, "ARI ChannelHangupRequest missing required field type\n");
  2912. res = 0;
  2913. }
  2914. if (!has_application) {
  2915. ast_log(LOG_ERROR, "ARI ChannelHangupRequest missing required field application\n");
  2916. res = 0;
  2917. }
  2918. if (!has_channel) {
  2919. ast_log(LOG_ERROR, "ARI ChannelHangupRequest missing required field channel\n");
  2920. res = 0;
  2921. }
  2922. return res;
  2923. }
  2924. ari_validator ast_ari_validate_channel_hangup_request_fn(void)
  2925. {
  2926. return ast_ari_validate_channel_hangup_request;
  2927. }
  2928. int ast_ari_validate_channel_hold(struct ast_json *json)
  2929. {
  2930. int res = 1;
  2931. struct ast_json_iter *iter;
  2932. int has_type = 0;
  2933. int has_application = 0;
  2934. int has_channel = 0;
  2935. for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
  2936. if (strcmp("type", ast_json_object_iter_key(iter)) == 0) {
  2937. int prop_is_valid;
  2938. has_type = 1;
  2939. prop_is_valid = ast_ari_validate_string(
  2940. ast_json_object_iter_value(iter));
  2941. if (!prop_is_valid) {
  2942. ast_log(LOG_ERROR, "ARI ChannelHold field type failed validation\n");
  2943. res = 0;
  2944. }
  2945. } else
  2946. if (strcmp("application", ast_json_object_iter_key(iter)) == 0) {
  2947. int prop_is_valid;
  2948. has_application = 1;
  2949. prop_is_valid = ast_ari_validate_string(
  2950. ast_json_object_iter_value(iter));
  2951. if (!prop_is_valid) {
  2952. ast_log(LOG_ERROR, "ARI ChannelHold field application failed validation\n");
  2953. res = 0;
  2954. }
  2955. } else
  2956. if (strcmp("timestamp", ast_json_object_iter_key(iter)) == 0) {
  2957. int prop_is_valid;
  2958. prop_is_valid = ast_ari_validate_date(
  2959. ast_json_object_iter_value(iter));
  2960. if (!prop_is_valid) {
  2961. ast_log(LOG_ERROR, "ARI ChannelHold field timestamp failed validation\n");
  2962. res = 0;
  2963. }
  2964. } else
  2965. if (strcmp("channel", ast_json_object_iter_key(iter)) == 0) {
  2966. int prop_is_valid;
  2967. has_channel = 1;
  2968. prop_is_valid = ast_ari_validate_channel(
  2969. ast_json_object_iter_value(iter));
  2970. if (!prop_is_valid) {
  2971. ast_log(LOG_ERROR, "ARI ChannelHold field channel failed validation\n");
  2972. res = 0;
  2973. }
  2974. } else
  2975. if (strcmp("musicclass", ast_json_object_iter_key(iter)) == 0) {
  2976. int prop_is_valid;
  2977. prop_is_valid = ast_ari_validate_string(
  2978. ast_json_object_iter_value(iter));
  2979. if (!prop_is_valid) {
  2980. ast_log(LOG_ERROR, "ARI ChannelHold field musicclass failed validation\n");
  2981. res = 0;
  2982. }
  2983. } else
  2984. {
  2985. ast_log(LOG_ERROR,
  2986. "ARI ChannelHold has undocumented field %s\n",
  2987. ast_json_object_iter_key(iter));
  2988. res = 0;
  2989. }
  2990. }
  2991. if (!has_type) {
  2992. ast_log(LOG_ERROR, "ARI ChannelHold missing required field type\n");
  2993. res = 0;
  2994. }
  2995. if (!has_application) {
  2996. ast_log(LOG_ERROR, "ARI ChannelHold missing required field application\n");
  2997. res = 0;
  2998. }
  2999. if (!has_channel) {
  3000. ast_log(LOG_ERROR, "ARI ChannelHold missing required field channel\n");
  3001. res = 0;
  3002. }
  3003. return res;
  3004. }
  3005. ari_validator ast_ari_validate_channel_hold_fn(void)
  3006. {
  3007. return ast_ari_validate_channel_hold;
  3008. }
  3009. int ast_ari_validate_channel_left_bridge(struct ast_json *json)
  3010. {
  3011. int res = 1;
  3012. struct ast_json_iter *iter;
  3013. int has_type = 0;
  3014. int has_application = 0;
  3015. int has_bridge = 0;
  3016. int has_channel = 0;
  3017. for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
  3018. if (strcmp("type", ast_json_object_iter_key(iter)) == 0) {
  3019. int prop_is_valid;
  3020. has_type = 1;
  3021. prop_is_valid = ast_ari_validate_string(
  3022. ast_json_object_iter_value(iter));
  3023. if (!prop_is_valid) {
  3024. ast_log(LOG_ERROR, "ARI ChannelLeftBridge field type failed validation\n");
  3025. res = 0;
  3026. }
  3027. } else
  3028. if (strcmp("application", ast_json_object_iter_key(iter)) == 0) {
  3029. int prop_is_valid;
  3030. has_application = 1;
  3031. prop_is_valid = ast_ari_validate_string(
  3032. ast_json_object_iter_value(iter));
  3033. if (!prop_is_valid) {
  3034. ast_log(LOG_ERROR, "ARI ChannelLeftBridge field application failed validation\n");
  3035. res = 0;
  3036. }
  3037. } else
  3038. if (strcmp("timestamp", ast_json_object_iter_key(iter)) == 0) {
  3039. int prop_is_valid;
  3040. prop_is_valid = ast_ari_validate_date(
  3041. ast_json_object_iter_value(iter));
  3042. if (!prop_is_valid) {
  3043. ast_log(LOG_ERROR, "ARI ChannelLeftBridge field timestamp failed validation\n");
  3044. res = 0;
  3045. }
  3046. } else
  3047. if (strcmp("bridge", ast_json_object_iter_key(iter)) == 0) {
  3048. int prop_is_valid;
  3049. has_bridge = 1;
  3050. prop_is_valid = ast_ari_validate_bridge(
  3051. ast_json_object_iter_value(iter));
  3052. if (!prop_is_valid) {
  3053. ast_log(LOG_ERROR, "ARI ChannelLeftBridge field bridge failed validation\n");
  3054. res = 0;
  3055. }
  3056. } else
  3057. if (strcmp("channel", ast_json_object_iter_key(iter)) == 0) {
  3058. int prop_is_valid;
  3059. has_channel = 1;
  3060. prop_is_valid = ast_ari_validate_channel(
  3061. ast_json_object_iter_value(iter));
  3062. if (!prop_is_valid) {
  3063. ast_log(LOG_ERROR, "ARI ChannelLeftBridge field channel failed validation\n");
  3064. res = 0;
  3065. }
  3066. } else
  3067. {
  3068. ast_log(LOG_ERROR,
  3069. "ARI ChannelLeftBridge has undocumented field %s\n",
  3070. ast_json_object_iter_key(iter));
  3071. res = 0;
  3072. }
  3073. }
  3074. if (!has_type) {
  3075. ast_log(LOG_ERROR, "ARI ChannelLeftBridge missing required field type\n");
  3076. res = 0;
  3077. }
  3078. if (!has_application) {
  3079. ast_log(LOG_ERROR, "ARI ChannelLeftBridge missing required field application\n");
  3080. res = 0;
  3081. }
  3082. if (!has_bridge) {
  3083. ast_log(LOG_ERROR, "ARI ChannelLeftBridge missing required field bridge\n");
  3084. res = 0;
  3085. }
  3086. if (!has_channel) {
  3087. ast_log(LOG_ERROR, "ARI ChannelLeftBridge missing required field channel\n");
  3088. res = 0;
  3089. }
  3090. return res;
  3091. }
  3092. ari_validator ast_ari_validate_channel_left_bridge_fn(void)
  3093. {
  3094. return ast_ari_validate_channel_left_bridge;
  3095. }
  3096. int ast_ari_validate_channel_state_change(struct ast_json *json)
  3097. {
  3098. int res = 1;
  3099. struct ast_json_iter *iter;
  3100. int has_type = 0;
  3101. int has_application = 0;
  3102. int has_channel = 0;
  3103. for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
  3104. if (strcmp("type", ast_json_object_iter_key(iter)) == 0) {
  3105. int prop_is_valid;
  3106. has_type = 1;
  3107. prop_is_valid = ast_ari_validate_string(
  3108. ast_json_object_iter_value(iter));
  3109. if (!prop_is_valid) {
  3110. ast_log(LOG_ERROR, "ARI ChannelStateChange field type failed validation\n");
  3111. res = 0;
  3112. }
  3113. } else
  3114. if (strcmp("application", ast_json_object_iter_key(iter)) == 0) {
  3115. int prop_is_valid;
  3116. has_application = 1;
  3117. prop_is_valid = ast_ari_validate_string(
  3118. ast_json_object_iter_value(iter));
  3119. if (!prop_is_valid) {
  3120. ast_log(LOG_ERROR, "ARI ChannelStateChange field application failed validation\n");
  3121. res = 0;
  3122. }
  3123. } else
  3124. if (strcmp("timestamp", ast_json_object_iter_key(iter)) == 0) {
  3125. int prop_is_valid;
  3126. prop_is_valid = ast_ari_validate_date(
  3127. ast_json_object_iter_value(iter));
  3128. if (!prop_is_valid) {
  3129. ast_log(LOG_ERROR, "ARI ChannelStateChange field timestamp failed validation\n");
  3130. res = 0;
  3131. }
  3132. } else
  3133. if (strcmp("channel", ast_json_object_iter_key(iter)) == 0) {
  3134. int prop_is_valid;
  3135. has_channel = 1;
  3136. prop_is_valid = ast_ari_validate_channel(
  3137. ast_json_object_iter_value(iter));
  3138. if (!prop_is_valid) {
  3139. ast_log(LOG_ERROR, "ARI ChannelStateChange field channel failed validation\n");
  3140. res = 0;
  3141. }
  3142. } else
  3143. {
  3144. ast_log(LOG_ERROR,
  3145. "ARI ChannelStateChange has undocumented field %s\n",
  3146. ast_json_object_iter_key(iter));
  3147. res = 0;
  3148. }
  3149. }
  3150. if (!has_type) {
  3151. ast_log(LOG_ERROR, "ARI ChannelStateChange missing required field type\n");
  3152. res = 0;
  3153. }
  3154. if (!has_application) {
  3155. ast_log(LOG_ERROR, "ARI ChannelStateChange missing required field application\n");
  3156. res = 0;
  3157. }
  3158. if (!has_channel) {
  3159. ast_log(LOG_ERROR, "ARI ChannelStateChange missing required field channel\n");
  3160. res = 0;
  3161. }
  3162. return res;
  3163. }
  3164. ari_validator ast_ari_validate_channel_state_change_fn(void)
  3165. {
  3166. return ast_ari_validate_channel_state_change;
  3167. }
  3168. int ast_ari_validate_channel_talking_finished(struct ast_json *json)
  3169. {
  3170. int res = 1;
  3171. struct ast_json_iter *iter;
  3172. int has_type = 0;
  3173. int has_application = 0;
  3174. int has_channel = 0;
  3175. int has_duration = 0;
  3176. for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
  3177. if (strcmp("type", ast_json_object_iter_key(iter)) == 0) {
  3178. int prop_is_valid;
  3179. has_type = 1;
  3180. prop_is_valid = ast_ari_validate_string(
  3181. ast_json_object_iter_value(iter));
  3182. if (!prop_is_valid) {
  3183. ast_log(LOG_ERROR, "ARI ChannelTalkingFinished field type failed validation\n");
  3184. res = 0;
  3185. }
  3186. } else
  3187. if (strcmp("application", ast_json_object_iter_key(iter)) == 0) {
  3188. int prop_is_valid;
  3189. has_application = 1;
  3190. prop_is_valid = ast_ari_validate_string(
  3191. ast_json_object_iter_value(iter));
  3192. if (!prop_is_valid) {
  3193. ast_log(LOG_ERROR, "ARI ChannelTalkingFinished field application failed validation\n");
  3194. res = 0;
  3195. }
  3196. } else
  3197. if (strcmp("timestamp", ast_json_object_iter_key(iter)) == 0) {
  3198. int prop_is_valid;
  3199. prop_is_valid = ast_ari_validate_date(
  3200. ast_json_object_iter_value(iter));
  3201. if (!prop_is_valid) {
  3202. ast_log(LOG_ERROR, "ARI ChannelTalkingFinished field timestamp failed validation\n");
  3203. res = 0;
  3204. }
  3205. } else
  3206. if (strcmp("channel", ast_json_object_iter_key(iter)) == 0) {
  3207. int prop_is_valid;
  3208. has_channel = 1;
  3209. prop_is_valid = ast_ari_validate_channel(
  3210. ast_json_object_iter_value(iter));
  3211. if (!prop_is_valid) {
  3212. ast_log(LOG_ERROR, "ARI ChannelTalkingFinished field channel failed validation\n");
  3213. res = 0;
  3214. }
  3215. } else
  3216. if (strcmp("duration", ast_json_object_iter_key(iter)) == 0) {
  3217. int prop_is_valid;
  3218. has_duration = 1;
  3219. prop_is_valid = ast_ari_validate_int(
  3220. ast_json_object_iter_value(iter));
  3221. if (!prop_is_valid) {
  3222. ast_log(LOG_ERROR, "ARI ChannelTalkingFinished field duration failed validation\n");
  3223. res = 0;
  3224. }
  3225. } else
  3226. {
  3227. ast_log(LOG_ERROR,
  3228. "ARI ChannelTalkingFinished has undocumented field %s\n",
  3229. ast_json_object_iter_key(iter));
  3230. res = 0;
  3231. }
  3232. }
  3233. if (!has_type) {
  3234. ast_log(LOG_ERROR, "ARI ChannelTalkingFinished missing required field type\n");
  3235. res = 0;
  3236. }
  3237. if (!has_application) {
  3238. ast_log(LOG_ERROR, "ARI ChannelTalkingFinished missing required field application\n");
  3239. res = 0;
  3240. }
  3241. if (!has_channel) {
  3242. ast_log(LOG_ERROR, "ARI ChannelTalkingFinished missing required field channel\n");
  3243. res = 0;
  3244. }
  3245. if (!has_duration) {
  3246. ast_log(LOG_ERROR, "ARI ChannelTalkingFinished missing required field duration\n");
  3247. res = 0;
  3248. }
  3249. return res;
  3250. }
  3251. ari_validator ast_ari_validate_channel_talking_finished_fn(void)
  3252. {
  3253. return ast_ari_validate_channel_talking_finished;
  3254. }
  3255. int ast_ari_validate_channel_talking_started(struct ast_json *json)
  3256. {
  3257. int res = 1;
  3258. struct ast_json_iter *iter;
  3259. int has_type = 0;
  3260. int has_application = 0;
  3261. int has_channel = 0;
  3262. for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
  3263. if (strcmp("type", ast_json_object_iter_key(iter)) == 0) {
  3264. int prop_is_valid;
  3265. has_type = 1;
  3266. prop_is_valid = ast_ari_validate_string(
  3267. ast_json_object_iter_value(iter));
  3268. if (!prop_is_valid) {
  3269. ast_log(LOG_ERROR, "ARI ChannelTalkingStarted field type failed validation\n");
  3270. res = 0;
  3271. }
  3272. } else
  3273. if (strcmp("application", ast_json_object_iter_key(iter)) == 0) {
  3274. int prop_is_valid;
  3275. has_application = 1;
  3276. prop_is_valid = ast_ari_validate_string(
  3277. ast_json_object_iter_value(iter));
  3278. if (!prop_is_valid) {
  3279. ast_log(LOG_ERROR, "ARI ChannelTalkingStarted field application failed validation\n");
  3280. res = 0;
  3281. }
  3282. } else
  3283. if (strcmp("timestamp", ast_json_object_iter_key(iter)) == 0) {
  3284. int prop_is_valid;
  3285. prop_is_valid = ast_ari_validate_date(
  3286. ast_json_object_iter_value(iter));
  3287. if (!prop_is_valid) {
  3288. ast_log(LOG_ERROR, "ARI ChannelTalkingStarted field timestamp failed validation\n");
  3289. res = 0;
  3290. }
  3291. } else
  3292. if (strcmp("channel", ast_json_object_iter_key(iter)) == 0) {
  3293. int prop_is_valid;
  3294. has_channel = 1;
  3295. prop_is_valid = ast_ari_validate_channel(
  3296. ast_json_object_iter_value(iter));
  3297. if (!prop_is_valid) {
  3298. ast_log(LOG_ERROR, "ARI ChannelTalkingStarted field channel failed validation\n");
  3299. res = 0;
  3300. }
  3301. } else
  3302. {
  3303. ast_log(LOG_ERROR,
  3304. "ARI ChannelTalkingStarted has undocumented field %s\n",
  3305. ast_json_object_iter_key(iter));
  3306. res = 0;
  3307. }
  3308. }
  3309. if (!has_type) {
  3310. ast_log(LOG_ERROR, "ARI ChannelTalkingStarted missing required field type\n");
  3311. res = 0;
  3312. }
  3313. if (!has_application) {
  3314. ast_log(LOG_ERROR, "ARI ChannelTalkingStarted missing required field application\n");
  3315. res = 0;
  3316. }
  3317. if (!has_channel) {
  3318. ast_log(LOG_ERROR, "ARI ChannelTalkingStarted missing required field channel\n");
  3319. res = 0;
  3320. }
  3321. return res;
  3322. }
  3323. ari_validator ast_ari_validate_channel_talking_started_fn(void)
  3324. {
  3325. return ast_ari_validate_channel_talking_started;
  3326. }
  3327. int ast_ari_validate_channel_unhold(struct ast_json *json)
  3328. {
  3329. int res = 1;
  3330. struct ast_json_iter *iter;
  3331. int has_type = 0;
  3332. int has_application = 0;
  3333. int has_channel = 0;
  3334. for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
  3335. if (strcmp("type", ast_json_object_iter_key(iter)) == 0) {
  3336. int prop_is_valid;
  3337. has_type = 1;
  3338. prop_is_valid = ast_ari_validate_string(
  3339. ast_json_object_iter_value(iter));
  3340. if (!prop_is_valid) {
  3341. ast_log(LOG_ERROR, "ARI ChannelUnhold field type failed validation\n");
  3342. res = 0;
  3343. }
  3344. } else
  3345. if (strcmp("application", ast_json_object_iter_key(iter)) == 0) {
  3346. int prop_is_valid;
  3347. has_application = 1;
  3348. prop_is_valid = ast_ari_validate_string(
  3349. ast_json_object_iter_value(iter));
  3350. if (!prop_is_valid) {
  3351. ast_log(LOG_ERROR, "ARI ChannelUnhold field application failed validation\n");
  3352. res = 0;
  3353. }
  3354. } else
  3355. if (strcmp("timestamp", ast_json_object_iter_key(iter)) == 0) {
  3356. int prop_is_valid;
  3357. prop_is_valid = ast_ari_validate_date(
  3358. ast_json_object_iter_value(iter));
  3359. if (!prop_is_valid) {
  3360. ast_log(LOG_ERROR, "ARI ChannelUnhold field timestamp failed validation\n");
  3361. res = 0;
  3362. }
  3363. } else
  3364. if (strcmp("channel", ast_json_object_iter_key(iter)) == 0) {
  3365. int prop_is_valid;
  3366. has_channel = 1;
  3367. prop_is_valid = ast_ari_validate_channel(
  3368. ast_json_object_iter_value(iter));
  3369. if (!prop_is_valid) {
  3370. ast_log(LOG_ERROR, "ARI ChannelUnhold field channel failed validation\n");
  3371. res = 0;
  3372. }
  3373. } else
  3374. {
  3375. ast_log(LOG_ERROR,
  3376. "ARI ChannelUnhold has undocumented field %s\n",
  3377. ast_json_object_iter_key(iter));
  3378. res = 0;
  3379. }
  3380. }
  3381. if (!has_type) {
  3382. ast_log(LOG_ERROR, "ARI ChannelUnhold missing required field type\n");
  3383. res = 0;
  3384. }
  3385. if (!has_application) {
  3386. ast_log(LOG_ERROR, "ARI ChannelUnhold missing required field application\n");
  3387. res = 0;
  3388. }
  3389. if (!has_channel) {
  3390. ast_log(LOG_ERROR, "ARI ChannelUnhold missing required field channel\n");
  3391. res = 0;
  3392. }
  3393. return res;
  3394. }
  3395. ari_validator ast_ari_validate_channel_unhold_fn(void)
  3396. {
  3397. return ast_ari_validate_channel_unhold;
  3398. }
  3399. int ast_ari_validate_channel_userevent(struct ast_json *json)
  3400. {
  3401. int res = 1;
  3402. struct ast_json_iter *iter;
  3403. int has_type = 0;
  3404. int has_application = 0;
  3405. int has_eventname = 0;
  3406. int has_userevent = 0;
  3407. for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
  3408. if (strcmp("type", ast_json_object_iter_key(iter)) == 0) {
  3409. int prop_is_valid;
  3410. has_type = 1;
  3411. prop_is_valid = ast_ari_validate_string(
  3412. ast_json_object_iter_value(iter));
  3413. if (!prop_is_valid) {
  3414. ast_log(LOG_ERROR, "ARI ChannelUserevent field type failed validation\n");
  3415. res = 0;
  3416. }
  3417. } else
  3418. if (strcmp("application", ast_json_object_iter_key(iter)) == 0) {
  3419. int prop_is_valid;
  3420. has_application = 1;
  3421. prop_is_valid = ast_ari_validate_string(
  3422. ast_json_object_iter_value(iter));
  3423. if (!prop_is_valid) {
  3424. ast_log(LOG_ERROR, "ARI ChannelUserevent field application failed validation\n");
  3425. res = 0;
  3426. }
  3427. } else
  3428. if (strcmp("timestamp", ast_json_object_iter_key(iter)) == 0) {
  3429. int prop_is_valid;
  3430. prop_is_valid = ast_ari_validate_date(
  3431. ast_json_object_iter_value(iter));
  3432. if (!prop_is_valid) {
  3433. ast_log(LOG_ERROR, "ARI ChannelUserevent field timestamp failed validation\n");
  3434. res = 0;
  3435. }
  3436. } else
  3437. if (strcmp("bridge", ast_json_object_iter_key(iter)) == 0) {
  3438. int prop_is_valid;
  3439. prop_is_valid = ast_ari_validate_bridge(
  3440. ast_json_object_iter_value(iter));
  3441. if (!prop_is_valid) {
  3442. ast_log(LOG_ERROR, "ARI ChannelUserevent field bridge failed validation\n");
  3443. res = 0;
  3444. }
  3445. } else
  3446. if (strcmp("channel", ast_json_object_iter_key(iter)) == 0) {
  3447. int prop_is_valid;
  3448. prop_is_valid = ast_ari_validate_channel(
  3449. ast_json_object_iter_value(iter));
  3450. if (!prop_is_valid) {
  3451. ast_log(LOG_ERROR, "ARI ChannelUserevent field channel failed validation\n");
  3452. res = 0;
  3453. }
  3454. } else
  3455. if (strcmp("endpoint", ast_json_object_iter_key(iter)) == 0) {
  3456. int prop_is_valid;
  3457. prop_is_valid = ast_ari_validate_endpoint(
  3458. ast_json_object_iter_value(iter));
  3459. if (!prop_is_valid) {
  3460. ast_log(LOG_ERROR, "ARI ChannelUserevent field endpoint failed validation\n");
  3461. res = 0;
  3462. }
  3463. } else
  3464. if (strcmp("eventname", ast_json_object_iter_key(iter)) == 0) {
  3465. int prop_is_valid;
  3466. has_eventname = 1;
  3467. prop_is_valid = ast_ari_validate_string(
  3468. ast_json_object_iter_value(iter));
  3469. if (!prop_is_valid) {
  3470. ast_log(LOG_ERROR, "ARI ChannelUserevent field eventname failed validation\n");
  3471. res = 0;
  3472. }
  3473. } else
  3474. if (strcmp("userevent", ast_json_object_iter_key(iter)) == 0) {
  3475. int prop_is_valid;
  3476. has_userevent = 1;
  3477. prop_is_valid = ast_ari_validate_object(
  3478. ast_json_object_iter_value(iter));
  3479. if (!prop_is_valid) {
  3480. ast_log(LOG_ERROR, "ARI ChannelUserevent field userevent failed validation\n");
  3481. res = 0;
  3482. }
  3483. } else
  3484. {
  3485. ast_log(LOG_ERROR,
  3486. "ARI ChannelUserevent has undocumented field %s\n",
  3487. ast_json_object_iter_key(iter));
  3488. res = 0;
  3489. }
  3490. }
  3491. if (!has_type) {
  3492. ast_log(LOG_ERROR, "ARI ChannelUserevent missing required field type\n");
  3493. res = 0;
  3494. }
  3495. if (!has_application) {
  3496. ast_log(LOG_ERROR, "ARI ChannelUserevent missing required field application\n");
  3497. res = 0;
  3498. }
  3499. if (!has_eventname) {
  3500. ast_log(LOG_ERROR, "ARI ChannelUserevent missing required field eventname\n");
  3501. res = 0;
  3502. }
  3503. if (!has_userevent) {
  3504. ast_log(LOG_ERROR, "ARI ChannelUserevent missing required field userevent\n");
  3505. res = 0;
  3506. }
  3507. return res;
  3508. }
  3509. ari_validator ast_ari_validate_channel_userevent_fn(void)
  3510. {
  3511. return ast_ari_validate_channel_userevent;
  3512. }
  3513. int ast_ari_validate_channel_varset(struct ast_json *json)
  3514. {
  3515. int res = 1;
  3516. struct ast_json_iter *iter;
  3517. int has_type = 0;
  3518. int has_application = 0;
  3519. int has_value = 0;
  3520. int has_variable = 0;
  3521. for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
  3522. if (strcmp("type", ast_json_object_iter_key(iter)) == 0) {
  3523. int prop_is_valid;
  3524. has_type = 1;
  3525. prop_is_valid = ast_ari_validate_string(
  3526. ast_json_object_iter_value(iter));
  3527. if (!prop_is_valid) {
  3528. ast_log(LOG_ERROR, "ARI ChannelVarset field type failed validation\n");
  3529. res = 0;
  3530. }
  3531. } else
  3532. if (strcmp("application", ast_json_object_iter_key(iter)) == 0) {
  3533. int prop_is_valid;
  3534. has_application = 1;
  3535. prop_is_valid = ast_ari_validate_string(
  3536. ast_json_object_iter_value(iter));
  3537. if (!prop_is_valid) {
  3538. ast_log(LOG_ERROR, "ARI ChannelVarset field application failed validation\n");
  3539. res = 0;
  3540. }
  3541. } else
  3542. if (strcmp("timestamp", ast_json_object_iter_key(iter)) == 0) {
  3543. int prop_is_valid;
  3544. prop_is_valid = ast_ari_validate_date(
  3545. ast_json_object_iter_value(iter));
  3546. if (!prop_is_valid) {
  3547. ast_log(LOG_ERROR, "ARI ChannelVarset field timestamp failed validation\n");
  3548. res = 0;
  3549. }
  3550. } else
  3551. if (strcmp("channel", ast_json_object_iter_key(iter)) == 0) {
  3552. int prop_is_valid;
  3553. prop_is_valid = ast_ari_validate_channel(
  3554. ast_json_object_iter_value(iter));
  3555. if (!prop_is_valid) {
  3556. ast_log(LOG_ERROR, "ARI ChannelVarset field channel failed validation\n");
  3557. res = 0;
  3558. }
  3559. } else
  3560. if (strcmp("value", ast_json_object_iter_key(iter)) == 0) {
  3561. int prop_is_valid;
  3562. has_value = 1;
  3563. prop_is_valid = ast_ari_validate_string(
  3564. ast_json_object_iter_value(iter));
  3565. if (!prop_is_valid) {
  3566. ast_log(LOG_ERROR, "ARI ChannelVarset field value failed validation\n");
  3567. res = 0;
  3568. }
  3569. } else
  3570. if (strcmp("variable", ast_json_object_iter_key(iter)) == 0) {
  3571. int prop_is_valid;
  3572. has_variable = 1;
  3573. prop_is_valid = ast_ari_validate_string(
  3574. ast_json_object_iter_value(iter));
  3575. if (!prop_is_valid) {
  3576. ast_log(LOG_ERROR, "ARI ChannelVarset field variable failed validation\n");
  3577. res = 0;
  3578. }
  3579. } else
  3580. {
  3581. ast_log(LOG_ERROR,
  3582. "ARI ChannelVarset has undocumented field %s\n",
  3583. ast_json_object_iter_key(iter));
  3584. res = 0;
  3585. }
  3586. }
  3587. if (!has_type) {
  3588. ast_log(LOG_ERROR, "ARI ChannelVarset missing required field type\n");
  3589. res = 0;
  3590. }
  3591. if (!has_application) {
  3592. ast_log(LOG_ERROR, "ARI ChannelVarset missing required field application\n");
  3593. res = 0;
  3594. }
  3595. if (!has_value) {
  3596. ast_log(LOG_ERROR, "ARI ChannelVarset missing required field value\n");
  3597. res = 0;
  3598. }
  3599. if (!has_variable) {
  3600. ast_log(LOG_ERROR, "ARI ChannelVarset missing required field variable\n");
  3601. res = 0;
  3602. }
  3603. return res;
  3604. }
  3605. ari_validator ast_ari_validate_channel_varset_fn(void)
  3606. {
  3607. return ast_ari_validate_channel_varset;
  3608. }
  3609. int ast_ari_validate_device_state_changed(struct ast_json *json)
  3610. {
  3611. int res = 1;
  3612. struct ast_json_iter *iter;
  3613. int has_type = 0;
  3614. int has_application = 0;
  3615. int has_device_state = 0;
  3616. for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
  3617. if (strcmp("type", ast_json_object_iter_key(iter)) == 0) {
  3618. int prop_is_valid;
  3619. has_type = 1;
  3620. prop_is_valid = ast_ari_validate_string(
  3621. ast_json_object_iter_value(iter));
  3622. if (!prop_is_valid) {
  3623. ast_log(LOG_ERROR, "ARI DeviceStateChanged field type failed validation\n");
  3624. res = 0;
  3625. }
  3626. } else
  3627. if (strcmp("application", ast_json_object_iter_key(iter)) == 0) {
  3628. int prop_is_valid;
  3629. has_application = 1;
  3630. prop_is_valid = ast_ari_validate_string(
  3631. ast_json_object_iter_value(iter));
  3632. if (!prop_is_valid) {
  3633. ast_log(LOG_ERROR, "ARI DeviceStateChanged field application failed validation\n");
  3634. res = 0;
  3635. }
  3636. } else
  3637. if (strcmp("timestamp", ast_json_object_iter_key(iter)) == 0) {
  3638. int prop_is_valid;
  3639. prop_is_valid = ast_ari_validate_date(
  3640. ast_json_object_iter_value(iter));
  3641. if (!prop_is_valid) {
  3642. ast_log(LOG_ERROR, "ARI DeviceStateChanged field timestamp failed validation\n");
  3643. res = 0;
  3644. }
  3645. } else
  3646. if (strcmp("device_state", ast_json_object_iter_key(iter)) == 0) {
  3647. int prop_is_valid;
  3648. has_device_state = 1;
  3649. prop_is_valid = ast_ari_validate_device_state(
  3650. ast_json_object_iter_value(iter));
  3651. if (!prop_is_valid) {
  3652. ast_log(LOG_ERROR, "ARI DeviceStateChanged field device_state failed validation\n");
  3653. res = 0;
  3654. }
  3655. } else
  3656. {
  3657. ast_log(LOG_ERROR,
  3658. "ARI DeviceStateChanged has undocumented field %s\n",
  3659. ast_json_object_iter_key(iter));
  3660. res = 0;
  3661. }
  3662. }
  3663. if (!has_type) {
  3664. ast_log(LOG_ERROR, "ARI DeviceStateChanged missing required field type\n");
  3665. res = 0;
  3666. }
  3667. if (!has_application) {
  3668. ast_log(LOG_ERROR, "ARI DeviceStateChanged missing required field application\n");
  3669. res = 0;
  3670. }
  3671. if (!has_device_state) {
  3672. ast_log(LOG_ERROR, "ARI DeviceStateChanged missing required field device_state\n");
  3673. res = 0;
  3674. }
  3675. return res;
  3676. }
  3677. ari_validator ast_ari_validate_device_state_changed_fn(void)
  3678. {
  3679. return ast_ari_validate_device_state_changed;
  3680. }
  3681. int ast_ari_validate_dial(struct ast_json *json)
  3682. {
  3683. int res = 1;
  3684. struct ast_json_iter *iter;
  3685. int has_type = 0;
  3686. int has_application = 0;
  3687. int has_dialstatus = 0;
  3688. int has_peer = 0;
  3689. for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
  3690. if (strcmp("type", ast_json_object_iter_key(iter)) == 0) {
  3691. int prop_is_valid;
  3692. has_type = 1;
  3693. prop_is_valid = ast_ari_validate_string(
  3694. ast_json_object_iter_value(iter));
  3695. if (!prop_is_valid) {
  3696. ast_log(LOG_ERROR, "ARI Dial field type failed validation\n");
  3697. res = 0;
  3698. }
  3699. } else
  3700. if (strcmp("application", ast_json_object_iter_key(iter)) == 0) {
  3701. int prop_is_valid;
  3702. has_application = 1;
  3703. prop_is_valid = ast_ari_validate_string(
  3704. ast_json_object_iter_value(iter));
  3705. if (!prop_is_valid) {
  3706. ast_log(LOG_ERROR, "ARI Dial field application failed validation\n");
  3707. res = 0;
  3708. }
  3709. } else
  3710. if (strcmp("timestamp", ast_json_object_iter_key(iter)) == 0) {
  3711. int prop_is_valid;
  3712. prop_is_valid = ast_ari_validate_date(
  3713. ast_json_object_iter_value(iter));
  3714. if (!prop_is_valid) {
  3715. ast_log(LOG_ERROR, "ARI Dial field timestamp failed validation\n");
  3716. res = 0;
  3717. }
  3718. } else
  3719. if (strcmp("caller", ast_json_object_iter_key(iter)) == 0) {
  3720. int prop_is_valid;
  3721. prop_is_valid = ast_ari_validate_channel(
  3722. ast_json_object_iter_value(iter));
  3723. if (!prop_is_valid) {
  3724. ast_log(LOG_ERROR, "ARI Dial field caller failed validation\n");
  3725. res = 0;
  3726. }
  3727. } else
  3728. if (strcmp("dialstatus", ast_json_object_iter_key(iter)) == 0) {
  3729. int prop_is_valid;
  3730. has_dialstatus = 1;
  3731. prop_is_valid = ast_ari_validate_string(
  3732. ast_json_object_iter_value(iter));
  3733. if (!prop_is_valid) {
  3734. ast_log(LOG_ERROR, "ARI Dial field dialstatus failed validation\n");
  3735. res = 0;
  3736. }
  3737. } else
  3738. if (strcmp("dialstring", ast_json_object_iter_key(iter)) == 0) {
  3739. int prop_is_valid;
  3740. prop_is_valid = ast_ari_validate_string(
  3741. ast_json_object_iter_value(iter));
  3742. if (!prop_is_valid) {
  3743. ast_log(LOG_ERROR, "ARI Dial field dialstring failed validation\n");
  3744. res = 0;
  3745. }
  3746. } else
  3747. if (strcmp("forward", ast_json_object_iter_key(iter)) == 0) {
  3748. int prop_is_valid;
  3749. prop_is_valid = ast_ari_validate_string(
  3750. ast_json_object_iter_value(iter));
  3751. if (!prop_is_valid) {
  3752. ast_log(LOG_ERROR, "ARI Dial field forward failed validation\n");
  3753. res = 0;
  3754. }
  3755. } else
  3756. if (strcmp("forwarded", ast_json_object_iter_key(iter)) == 0) {
  3757. int prop_is_valid;
  3758. prop_is_valid = ast_ari_validate_channel(
  3759. ast_json_object_iter_value(iter));
  3760. if (!prop_is_valid) {
  3761. ast_log(LOG_ERROR, "ARI Dial field forwarded failed validation\n");
  3762. res = 0;
  3763. }
  3764. } else
  3765. if (strcmp("peer", ast_json_object_iter_key(iter)) == 0) {
  3766. int prop_is_valid;
  3767. has_peer = 1;
  3768. prop_is_valid = ast_ari_validate_channel(
  3769. ast_json_object_iter_value(iter));
  3770. if (!prop_is_valid) {
  3771. ast_log(LOG_ERROR, "ARI Dial field peer failed validation\n");
  3772. res = 0;
  3773. }
  3774. } else
  3775. {
  3776. ast_log(LOG_ERROR,
  3777. "ARI Dial has undocumented field %s\n",
  3778. ast_json_object_iter_key(iter));
  3779. res = 0;
  3780. }
  3781. }
  3782. if (!has_type) {
  3783. ast_log(LOG_ERROR, "ARI Dial missing required field type\n");
  3784. res = 0;
  3785. }
  3786. if (!has_application) {
  3787. ast_log(LOG_ERROR, "ARI Dial missing required field application\n");
  3788. res = 0;
  3789. }
  3790. if (!has_dialstatus) {
  3791. ast_log(LOG_ERROR, "ARI Dial missing required field dialstatus\n");
  3792. res = 0;
  3793. }
  3794. if (!has_peer) {
  3795. ast_log(LOG_ERROR, "ARI Dial missing required field peer\n");
  3796. res = 0;
  3797. }
  3798. return res;
  3799. }
  3800. ari_validator ast_ari_validate_dial_fn(void)
  3801. {
  3802. return ast_ari_validate_dial;
  3803. }
  3804. int ast_ari_validate_endpoint_state_change(struct ast_json *json)
  3805. {
  3806. int res = 1;
  3807. struct ast_json_iter *iter;
  3808. int has_type = 0;
  3809. int has_application = 0;
  3810. int has_endpoint = 0;
  3811. for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
  3812. if (strcmp("type", ast_json_object_iter_key(iter)) == 0) {
  3813. int prop_is_valid;
  3814. has_type = 1;
  3815. prop_is_valid = ast_ari_validate_string(
  3816. ast_json_object_iter_value(iter));
  3817. if (!prop_is_valid) {
  3818. ast_log(LOG_ERROR, "ARI EndpointStateChange field type failed validation\n");
  3819. res = 0;
  3820. }
  3821. } else
  3822. if (strcmp("application", ast_json_object_iter_key(iter)) == 0) {
  3823. int prop_is_valid;
  3824. has_application = 1;
  3825. prop_is_valid = ast_ari_validate_string(
  3826. ast_json_object_iter_value(iter));
  3827. if (!prop_is_valid) {
  3828. ast_log(LOG_ERROR, "ARI EndpointStateChange field application failed validation\n");
  3829. res = 0;
  3830. }
  3831. } else
  3832. if (strcmp("timestamp", ast_json_object_iter_key(iter)) == 0) {
  3833. int prop_is_valid;
  3834. prop_is_valid = ast_ari_validate_date(
  3835. ast_json_object_iter_value(iter));
  3836. if (!prop_is_valid) {
  3837. ast_log(LOG_ERROR, "ARI EndpointStateChange field timestamp failed validation\n");
  3838. res = 0;
  3839. }
  3840. } else
  3841. if (strcmp("endpoint", ast_json_object_iter_key(iter)) == 0) {
  3842. int prop_is_valid;
  3843. has_endpoint = 1;
  3844. prop_is_valid = ast_ari_validate_endpoint(
  3845. ast_json_object_iter_value(iter));
  3846. if (!prop_is_valid) {
  3847. ast_log(LOG_ERROR, "ARI EndpointStateChange field endpoint failed validation\n");
  3848. res = 0;
  3849. }
  3850. } else
  3851. {
  3852. ast_log(LOG_ERROR,
  3853. "ARI EndpointStateChange has undocumented field %s\n",
  3854. ast_json_object_iter_key(iter));
  3855. res = 0;
  3856. }
  3857. }
  3858. if (!has_type) {
  3859. ast_log(LOG_ERROR, "ARI EndpointStateChange missing required field type\n");
  3860. res = 0;
  3861. }
  3862. if (!has_application) {
  3863. ast_log(LOG_ERROR, "ARI EndpointStateChange missing required field application\n");
  3864. res = 0;
  3865. }
  3866. if (!has_endpoint) {
  3867. ast_log(LOG_ERROR, "ARI EndpointStateChange missing required field endpoint\n");
  3868. res = 0;
  3869. }
  3870. return res;
  3871. }
  3872. ari_validator ast_ari_validate_endpoint_state_change_fn(void)
  3873. {
  3874. return ast_ari_validate_endpoint_state_change;
  3875. }
  3876. int ast_ari_validate_event(struct ast_json *json)
  3877. {
  3878. int res = 1;
  3879. struct ast_json_iter *iter;
  3880. int has_type = 0;
  3881. int has_application = 0;
  3882. const char *discriminator;
  3883. discriminator = ast_json_string_get(ast_json_object_get(json, "type"));
  3884. if (!discriminator) {
  3885. ast_log(LOG_ERROR, "ARI Event missing required field type");
  3886. return 0;
  3887. }
  3888. if (strcmp("Event", discriminator) == 0) {
  3889. /* Self type; fall through */
  3890. } else
  3891. if (strcmp("ApplicationReplaced", discriminator) == 0) {
  3892. return ast_ari_validate_application_replaced(json);
  3893. } else
  3894. if (strcmp("BridgeAttendedTransfer", discriminator) == 0) {
  3895. return ast_ari_validate_bridge_attended_transfer(json);
  3896. } else
  3897. if (strcmp("BridgeBlindTransfer", discriminator) == 0) {
  3898. return ast_ari_validate_bridge_blind_transfer(json);
  3899. } else
  3900. if (strcmp("BridgeCreated", discriminator) == 0) {
  3901. return ast_ari_validate_bridge_created(json);
  3902. } else
  3903. if (strcmp("BridgeDestroyed", discriminator) == 0) {
  3904. return ast_ari_validate_bridge_destroyed(json);
  3905. } else
  3906. if (strcmp("BridgeMerged", discriminator) == 0) {
  3907. return ast_ari_validate_bridge_merged(json);
  3908. } else
  3909. if (strcmp("ChannelCallerId", discriminator) == 0) {
  3910. return ast_ari_validate_channel_caller_id(json);
  3911. } else
  3912. if (strcmp("ChannelConnectedLine", discriminator) == 0) {
  3913. return ast_ari_validate_channel_connected_line(json);
  3914. } else
  3915. if (strcmp("ChannelCreated", discriminator) == 0) {
  3916. return ast_ari_validate_channel_created(json);
  3917. } else
  3918. if (strcmp("ChannelDestroyed", discriminator) == 0) {
  3919. return ast_ari_validate_channel_destroyed(json);
  3920. } else
  3921. if (strcmp("ChannelDialplan", discriminator) == 0) {
  3922. return ast_ari_validate_channel_dialplan(json);
  3923. } else
  3924. if (strcmp("ChannelDtmfReceived", discriminator) == 0) {
  3925. return ast_ari_validate_channel_dtmf_received(json);
  3926. } else
  3927. if (strcmp("ChannelEnteredBridge", discriminator) == 0) {
  3928. return ast_ari_validate_channel_entered_bridge(json);
  3929. } else
  3930. if (strcmp("ChannelHangupRequest", discriminator) == 0) {
  3931. return ast_ari_validate_channel_hangup_request(json);
  3932. } else
  3933. if (strcmp("ChannelHold", discriminator) == 0) {
  3934. return ast_ari_validate_channel_hold(json);
  3935. } else
  3936. if (strcmp("ChannelLeftBridge", discriminator) == 0) {
  3937. return ast_ari_validate_channel_left_bridge(json);
  3938. } else
  3939. if (strcmp("ChannelStateChange", discriminator) == 0) {
  3940. return ast_ari_validate_channel_state_change(json);
  3941. } else
  3942. if (strcmp("ChannelTalkingFinished", discriminator) == 0) {
  3943. return ast_ari_validate_channel_talking_finished(json);
  3944. } else
  3945. if (strcmp("ChannelTalkingStarted", discriminator) == 0) {
  3946. return ast_ari_validate_channel_talking_started(json);
  3947. } else
  3948. if (strcmp("ChannelUnhold", discriminator) == 0) {
  3949. return ast_ari_validate_channel_unhold(json);
  3950. } else
  3951. if (strcmp("ChannelUserevent", discriminator) == 0) {
  3952. return ast_ari_validate_channel_userevent(json);
  3953. } else
  3954. if (strcmp("ChannelVarset", discriminator) == 0) {
  3955. return ast_ari_validate_channel_varset(json);
  3956. } else
  3957. if (strcmp("DeviceStateChanged", discriminator) == 0) {
  3958. return ast_ari_validate_device_state_changed(json);
  3959. } else
  3960. if (strcmp("Dial", discriminator) == 0) {
  3961. return ast_ari_validate_dial(json);
  3962. } else
  3963. if (strcmp("EndpointStateChange", discriminator) == 0) {
  3964. return ast_ari_validate_endpoint_state_change(json);
  3965. } else
  3966. if (strcmp("PlaybackFinished", discriminator) == 0) {
  3967. return ast_ari_validate_playback_finished(json);
  3968. } else
  3969. if (strcmp("PlaybackStarted", discriminator) == 0) {
  3970. return ast_ari_validate_playback_started(json);
  3971. } else
  3972. if (strcmp("RecordingFailed", discriminator) == 0) {
  3973. return ast_ari_validate_recording_failed(json);
  3974. } else
  3975. if (strcmp("RecordingFinished", discriminator) == 0) {
  3976. return ast_ari_validate_recording_finished(json);
  3977. } else
  3978. if (strcmp("RecordingStarted", discriminator) == 0) {
  3979. return ast_ari_validate_recording_started(json);
  3980. } else
  3981. if (strcmp("StasisEnd", discriminator) == 0) {
  3982. return ast_ari_validate_stasis_end(json);
  3983. } else
  3984. if (strcmp("StasisStart", discriminator) == 0) {
  3985. return ast_ari_validate_stasis_start(json);
  3986. } else
  3987. if (strcmp("TextMessageReceived", discriminator) == 0) {
  3988. return ast_ari_validate_text_message_received(json);
  3989. } else
  3990. {
  3991. ast_log(LOG_ERROR, "ARI Event has undocumented subtype %s\n",
  3992. discriminator);
  3993. res = 0;
  3994. }
  3995. for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
  3996. if (strcmp("type", ast_json_object_iter_key(iter)) == 0) {
  3997. int prop_is_valid;
  3998. has_type = 1;
  3999. prop_is_valid = ast_ari_validate_string(
  4000. ast_json_object_iter_value(iter));
  4001. if (!prop_is_valid) {
  4002. ast_log(LOG_ERROR, "ARI Event field type failed validation\n");
  4003. res = 0;
  4004. }
  4005. } else
  4006. if (strcmp("application", ast_json_object_iter_key(iter)) == 0) {
  4007. int prop_is_valid;
  4008. has_application = 1;
  4009. prop_is_valid = ast_ari_validate_string(
  4010. ast_json_object_iter_value(iter));
  4011. if (!prop_is_valid) {
  4012. ast_log(LOG_ERROR, "ARI Event field application failed validation\n");
  4013. res = 0;
  4014. }
  4015. } else
  4016. if (strcmp("timestamp", ast_json_object_iter_key(iter)) == 0) {
  4017. int prop_is_valid;
  4018. prop_is_valid = ast_ari_validate_date(
  4019. ast_json_object_iter_value(iter));
  4020. if (!prop_is_valid) {
  4021. ast_log(LOG_ERROR, "ARI Event field timestamp failed validation\n");
  4022. res = 0;
  4023. }
  4024. } else
  4025. {
  4026. ast_log(LOG_ERROR,
  4027. "ARI Event has undocumented field %s\n",
  4028. ast_json_object_iter_key(iter));
  4029. res = 0;
  4030. }
  4031. }
  4032. if (!has_type) {
  4033. ast_log(LOG_ERROR, "ARI Event missing required field type\n");
  4034. res = 0;
  4035. }
  4036. if (!has_application) {
  4037. ast_log(LOG_ERROR, "ARI Event missing required field application\n");
  4038. res = 0;
  4039. }
  4040. return res;
  4041. }
  4042. ari_validator ast_ari_validate_event_fn(void)
  4043. {
  4044. return ast_ari_validate_event;
  4045. }
  4046. int ast_ari_validate_message(struct ast_json *json)
  4047. {
  4048. int res = 1;
  4049. struct ast_json_iter *iter;
  4050. int has_type = 0;
  4051. const char *discriminator;
  4052. discriminator = ast_json_string_get(ast_json_object_get(json, "type"));
  4053. if (!discriminator) {
  4054. ast_log(LOG_ERROR, "ARI Message missing required field type");
  4055. return 0;
  4056. }
  4057. if (strcmp("Message", discriminator) == 0) {
  4058. /* Self type; fall through */
  4059. } else
  4060. if (strcmp("ApplicationReplaced", discriminator) == 0) {
  4061. return ast_ari_validate_application_replaced(json);
  4062. } else
  4063. if (strcmp("BridgeAttendedTransfer", discriminator) == 0) {
  4064. return ast_ari_validate_bridge_attended_transfer(json);
  4065. } else
  4066. if (strcmp("BridgeBlindTransfer", discriminator) == 0) {
  4067. return ast_ari_validate_bridge_blind_transfer(json);
  4068. } else
  4069. if (strcmp("BridgeCreated", discriminator) == 0) {
  4070. return ast_ari_validate_bridge_created(json);
  4071. } else
  4072. if (strcmp("BridgeDestroyed", discriminator) == 0) {
  4073. return ast_ari_validate_bridge_destroyed(json);
  4074. } else
  4075. if (strcmp("BridgeMerged", discriminator) == 0) {
  4076. return ast_ari_validate_bridge_merged(json);
  4077. } else
  4078. if (strcmp("ChannelCallerId", discriminator) == 0) {
  4079. return ast_ari_validate_channel_caller_id(json);
  4080. } else
  4081. if (strcmp("ChannelConnectedLine", discriminator) == 0) {
  4082. return ast_ari_validate_channel_connected_line(json);
  4083. } else
  4084. if (strcmp("ChannelCreated", discriminator) == 0) {
  4085. return ast_ari_validate_channel_created(json);
  4086. } else
  4087. if (strcmp("ChannelDestroyed", discriminator) == 0) {
  4088. return ast_ari_validate_channel_destroyed(json);
  4089. } else
  4090. if (strcmp("ChannelDialplan", discriminator) == 0) {
  4091. return ast_ari_validate_channel_dialplan(json);
  4092. } else
  4093. if (strcmp("ChannelDtmfReceived", discriminator) == 0) {
  4094. return ast_ari_validate_channel_dtmf_received(json);
  4095. } else
  4096. if (strcmp("ChannelEnteredBridge", discriminator) == 0) {
  4097. return ast_ari_validate_channel_entered_bridge(json);
  4098. } else
  4099. if (strcmp("ChannelHangupRequest", discriminator) == 0) {
  4100. return ast_ari_validate_channel_hangup_request(json);
  4101. } else
  4102. if (strcmp("ChannelHold", discriminator) == 0) {
  4103. return ast_ari_validate_channel_hold(json);
  4104. } else
  4105. if (strcmp("ChannelLeftBridge", discriminator) == 0) {
  4106. return ast_ari_validate_channel_left_bridge(json);
  4107. } else
  4108. if (strcmp("ChannelStateChange", discriminator) == 0) {
  4109. return ast_ari_validate_channel_state_change(json);
  4110. } else
  4111. if (strcmp("ChannelTalkingFinished", discriminator) == 0) {
  4112. return ast_ari_validate_channel_talking_finished(json);
  4113. } else
  4114. if (strcmp("ChannelTalkingStarted", discriminator) == 0) {
  4115. return ast_ari_validate_channel_talking_started(json);
  4116. } else
  4117. if (strcmp("ChannelUnhold", discriminator) == 0) {
  4118. return ast_ari_validate_channel_unhold(json);
  4119. } else
  4120. if (strcmp("ChannelUserevent", discriminator) == 0) {
  4121. return ast_ari_validate_channel_userevent(json);
  4122. } else
  4123. if (strcmp("ChannelVarset", discriminator) == 0) {
  4124. return ast_ari_validate_channel_varset(json);
  4125. } else
  4126. if (strcmp("DeviceStateChanged", discriminator) == 0) {
  4127. return ast_ari_validate_device_state_changed(json);
  4128. } else
  4129. if (strcmp("Dial", discriminator) == 0) {
  4130. return ast_ari_validate_dial(json);
  4131. } else
  4132. if (strcmp("EndpointStateChange", discriminator) == 0) {
  4133. return ast_ari_validate_endpoint_state_change(json);
  4134. } else
  4135. if (strcmp("Event", discriminator) == 0) {
  4136. return ast_ari_validate_event(json);
  4137. } else
  4138. if (strcmp("MissingParams", discriminator) == 0) {
  4139. return ast_ari_validate_missing_params(json);
  4140. } else
  4141. if (strcmp("PlaybackFinished", discriminator) == 0) {
  4142. return ast_ari_validate_playback_finished(json);
  4143. } else
  4144. if (strcmp("PlaybackStarted", discriminator) == 0) {
  4145. return ast_ari_validate_playback_started(json);
  4146. } else
  4147. if (strcmp("RecordingFailed", discriminator) == 0) {
  4148. return ast_ari_validate_recording_failed(json);
  4149. } else
  4150. if (strcmp("RecordingFinished", discriminator) == 0) {
  4151. return ast_ari_validate_recording_finished(json);
  4152. } else
  4153. if (strcmp("RecordingStarted", discriminator) == 0) {
  4154. return ast_ari_validate_recording_started(json);
  4155. } else
  4156. if (strcmp("StasisEnd", discriminator) == 0) {
  4157. return ast_ari_validate_stasis_end(json);
  4158. } else
  4159. if (strcmp("StasisStart", discriminator) == 0) {
  4160. return ast_ari_validate_stasis_start(json);
  4161. } else
  4162. if (strcmp("TextMessageReceived", discriminator) == 0) {
  4163. return ast_ari_validate_text_message_received(json);
  4164. } else
  4165. {
  4166. ast_log(LOG_ERROR, "ARI Message has undocumented subtype %s\n",
  4167. discriminator);
  4168. res = 0;
  4169. }
  4170. for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
  4171. if (strcmp("type", ast_json_object_iter_key(iter)) == 0) {
  4172. int prop_is_valid;
  4173. has_type = 1;
  4174. prop_is_valid = ast_ari_validate_string(
  4175. ast_json_object_iter_value(iter));
  4176. if (!prop_is_valid) {
  4177. ast_log(LOG_ERROR, "ARI Message field type failed validation\n");
  4178. res = 0;
  4179. }
  4180. } else
  4181. {
  4182. ast_log(LOG_ERROR,
  4183. "ARI Message has undocumented field %s\n",
  4184. ast_json_object_iter_key(iter));
  4185. res = 0;
  4186. }
  4187. }
  4188. if (!has_type) {
  4189. ast_log(LOG_ERROR, "ARI Message missing required field type\n");
  4190. res = 0;
  4191. }
  4192. return res;
  4193. }
  4194. ari_validator ast_ari_validate_message_fn(void)
  4195. {
  4196. return ast_ari_validate_message;
  4197. }
  4198. int ast_ari_validate_missing_params(struct ast_json *json)
  4199. {
  4200. int res = 1;
  4201. struct ast_json_iter *iter;
  4202. int has_type = 0;
  4203. int has_params = 0;
  4204. for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
  4205. if (strcmp("type", ast_json_object_iter_key(iter)) == 0) {
  4206. int prop_is_valid;
  4207. has_type = 1;
  4208. prop_is_valid = ast_ari_validate_string(
  4209. ast_json_object_iter_value(iter));
  4210. if (!prop_is_valid) {
  4211. ast_log(LOG_ERROR, "ARI MissingParams field type failed validation\n");
  4212. res = 0;
  4213. }
  4214. } else
  4215. if (strcmp("params", ast_json_object_iter_key(iter)) == 0) {
  4216. int prop_is_valid;
  4217. has_params = 1;
  4218. prop_is_valid = ast_ari_validate_list(
  4219. ast_json_object_iter_value(iter),
  4220. ast_ari_validate_string);
  4221. if (!prop_is_valid) {
  4222. ast_log(LOG_ERROR, "ARI MissingParams field params failed validation\n");
  4223. res = 0;
  4224. }
  4225. } else
  4226. {
  4227. ast_log(LOG_ERROR,
  4228. "ARI MissingParams has undocumented field %s\n",
  4229. ast_json_object_iter_key(iter));
  4230. res = 0;
  4231. }
  4232. }
  4233. if (!has_type) {
  4234. ast_log(LOG_ERROR, "ARI MissingParams missing required field type\n");
  4235. res = 0;
  4236. }
  4237. if (!has_params) {
  4238. ast_log(LOG_ERROR, "ARI MissingParams missing required field params\n");
  4239. res = 0;
  4240. }
  4241. return res;
  4242. }
  4243. ari_validator ast_ari_validate_missing_params_fn(void)
  4244. {
  4245. return ast_ari_validate_missing_params;
  4246. }
  4247. int ast_ari_validate_playback_finished(struct ast_json *json)
  4248. {
  4249. int res = 1;
  4250. struct ast_json_iter *iter;
  4251. int has_type = 0;
  4252. int has_application = 0;
  4253. int has_playback = 0;
  4254. for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
  4255. if (strcmp("type", ast_json_object_iter_key(iter)) == 0) {
  4256. int prop_is_valid;
  4257. has_type = 1;
  4258. prop_is_valid = ast_ari_validate_string(
  4259. ast_json_object_iter_value(iter));
  4260. if (!prop_is_valid) {
  4261. ast_log(LOG_ERROR, "ARI PlaybackFinished field type failed validation\n");
  4262. res = 0;
  4263. }
  4264. } else
  4265. if (strcmp("application", ast_json_object_iter_key(iter)) == 0) {
  4266. int prop_is_valid;
  4267. has_application = 1;
  4268. prop_is_valid = ast_ari_validate_string(
  4269. ast_json_object_iter_value(iter));
  4270. if (!prop_is_valid) {
  4271. ast_log(LOG_ERROR, "ARI PlaybackFinished field application failed validation\n");
  4272. res = 0;
  4273. }
  4274. } else
  4275. if (strcmp("timestamp", ast_json_object_iter_key(iter)) == 0) {
  4276. int prop_is_valid;
  4277. prop_is_valid = ast_ari_validate_date(
  4278. ast_json_object_iter_value(iter));
  4279. if (!prop_is_valid) {
  4280. ast_log(LOG_ERROR, "ARI PlaybackFinished field timestamp failed validation\n");
  4281. res = 0;
  4282. }
  4283. } else
  4284. if (strcmp("playback", ast_json_object_iter_key(iter)) == 0) {
  4285. int prop_is_valid;
  4286. has_playback = 1;
  4287. prop_is_valid = ast_ari_validate_playback(
  4288. ast_json_object_iter_value(iter));
  4289. if (!prop_is_valid) {
  4290. ast_log(LOG_ERROR, "ARI PlaybackFinished field playback failed validation\n");
  4291. res = 0;
  4292. }
  4293. } else
  4294. {
  4295. ast_log(LOG_ERROR,
  4296. "ARI PlaybackFinished has undocumented field %s\n",
  4297. ast_json_object_iter_key(iter));
  4298. res = 0;
  4299. }
  4300. }
  4301. if (!has_type) {
  4302. ast_log(LOG_ERROR, "ARI PlaybackFinished missing required field type\n");
  4303. res = 0;
  4304. }
  4305. if (!has_application) {
  4306. ast_log(LOG_ERROR, "ARI PlaybackFinished missing required field application\n");
  4307. res = 0;
  4308. }
  4309. if (!has_playback) {
  4310. ast_log(LOG_ERROR, "ARI PlaybackFinished missing required field playback\n");
  4311. res = 0;
  4312. }
  4313. return res;
  4314. }
  4315. ari_validator ast_ari_validate_playback_finished_fn(void)
  4316. {
  4317. return ast_ari_validate_playback_finished;
  4318. }
  4319. int ast_ari_validate_playback_started(struct ast_json *json)
  4320. {
  4321. int res = 1;
  4322. struct ast_json_iter *iter;
  4323. int has_type = 0;
  4324. int has_application = 0;
  4325. int has_playback = 0;
  4326. for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
  4327. if (strcmp("type", ast_json_object_iter_key(iter)) == 0) {
  4328. int prop_is_valid;
  4329. has_type = 1;
  4330. prop_is_valid = ast_ari_validate_string(
  4331. ast_json_object_iter_value(iter));
  4332. if (!prop_is_valid) {
  4333. ast_log(LOG_ERROR, "ARI PlaybackStarted field type failed validation\n");
  4334. res = 0;
  4335. }
  4336. } else
  4337. if (strcmp("application", ast_json_object_iter_key(iter)) == 0) {
  4338. int prop_is_valid;
  4339. has_application = 1;
  4340. prop_is_valid = ast_ari_validate_string(
  4341. ast_json_object_iter_value(iter));
  4342. if (!prop_is_valid) {
  4343. ast_log(LOG_ERROR, "ARI PlaybackStarted field application failed validation\n");
  4344. res = 0;
  4345. }
  4346. } else
  4347. if (strcmp("timestamp", ast_json_object_iter_key(iter)) == 0) {
  4348. int prop_is_valid;
  4349. prop_is_valid = ast_ari_validate_date(
  4350. ast_json_object_iter_value(iter));
  4351. if (!prop_is_valid) {
  4352. ast_log(LOG_ERROR, "ARI PlaybackStarted field timestamp failed validation\n");
  4353. res = 0;
  4354. }
  4355. } else
  4356. if (strcmp("playback", ast_json_object_iter_key(iter)) == 0) {
  4357. int prop_is_valid;
  4358. has_playback = 1;
  4359. prop_is_valid = ast_ari_validate_playback(
  4360. ast_json_object_iter_value(iter));
  4361. if (!prop_is_valid) {
  4362. ast_log(LOG_ERROR, "ARI PlaybackStarted field playback failed validation\n");
  4363. res = 0;
  4364. }
  4365. } else
  4366. {
  4367. ast_log(LOG_ERROR,
  4368. "ARI PlaybackStarted has undocumented field %s\n",
  4369. ast_json_object_iter_key(iter));
  4370. res = 0;
  4371. }
  4372. }
  4373. if (!has_type) {
  4374. ast_log(LOG_ERROR, "ARI PlaybackStarted missing required field type\n");
  4375. res = 0;
  4376. }
  4377. if (!has_application) {
  4378. ast_log(LOG_ERROR, "ARI PlaybackStarted missing required field application\n");
  4379. res = 0;
  4380. }
  4381. if (!has_playback) {
  4382. ast_log(LOG_ERROR, "ARI PlaybackStarted missing required field playback\n");
  4383. res = 0;
  4384. }
  4385. return res;
  4386. }
  4387. ari_validator ast_ari_validate_playback_started_fn(void)
  4388. {
  4389. return ast_ari_validate_playback_started;
  4390. }
  4391. int ast_ari_validate_recording_failed(struct ast_json *json)
  4392. {
  4393. int res = 1;
  4394. struct ast_json_iter *iter;
  4395. int has_type = 0;
  4396. int has_application = 0;
  4397. int has_recording = 0;
  4398. for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
  4399. if (strcmp("type", ast_json_object_iter_key(iter)) == 0) {
  4400. int prop_is_valid;
  4401. has_type = 1;
  4402. prop_is_valid = ast_ari_validate_string(
  4403. ast_json_object_iter_value(iter));
  4404. if (!prop_is_valid) {
  4405. ast_log(LOG_ERROR, "ARI RecordingFailed field type failed validation\n");
  4406. res = 0;
  4407. }
  4408. } else
  4409. if (strcmp("application", ast_json_object_iter_key(iter)) == 0) {
  4410. int prop_is_valid;
  4411. has_application = 1;
  4412. prop_is_valid = ast_ari_validate_string(
  4413. ast_json_object_iter_value(iter));
  4414. if (!prop_is_valid) {
  4415. ast_log(LOG_ERROR, "ARI RecordingFailed field application failed validation\n");
  4416. res = 0;
  4417. }
  4418. } else
  4419. if (strcmp("timestamp", ast_json_object_iter_key(iter)) == 0) {
  4420. int prop_is_valid;
  4421. prop_is_valid = ast_ari_validate_date(
  4422. ast_json_object_iter_value(iter));
  4423. if (!prop_is_valid) {
  4424. ast_log(LOG_ERROR, "ARI RecordingFailed field timestamp failed validation\n");
  4425. res = 0;
  4426. }
  4427. } else
  4428. if (strcmp("recording", ast_json_object_iter_key(iter)) == 0) {
  4429. int prop_is_valid;
  4430. has_recording = 1;
  4431. prop_is_valid = ast_ari_validate_live_recording(
  4432. ast_json_object_iter_value(iter));
  4433. if (!prop_is_valid) {
  4434. ast_log(LOG_ERROR, "ARI RecordingFailed field recording failed validation\n");
  4435. res = 0;
  4436. }
  4437. } else
  4438. {
  4439. ast_log(LOG_ERROR,
  4440. "ARI RecordingFailed has undocumented field %s\n",
  4441. ast_json_object_iter_key(iter));
  4442. res = 0;
  4443. }
  4444. }
  4445. if (!has_type) {
  4446. ast_log(LOG_ERROR, "ARI RecordingFailed missing required field type\n");
  4447. res = 0;
  4448. }
  4449. if (!has_application) {
  4450. ast_log(LOG_ERROR, "ARI RecordingFailed missing required field application\n");
  4451. res = 0;
  4452. }
  4453. if (!has_recording) {
  4454. ast_log(LOG_ERROR, "ARI RecordingFailed missing required field recording\n");
  4455. res = 0;
  4456. }
  4457. return res;
  4458. }
  4459. ari_validator ast_ari_validate_recording_failed_fn(void)
  4460. {
  4461. return ast_ari_validate_recording_failed;
  4462. }
  4463. int ast_ari_validate_recording_finished(struct ast_json *json)
  4464. {
  4465. int res = 1;
  4466. struct ast_json_iter *iter;
  4467. int has_type = 0;
  4468. int has_application = 0;
  4469. int has_recording = 0;
  4470. for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
  4471. if (strcmp("type", ast_json_object_iter_key(iter)) == 0) {
  4472. int prop_is_valid;
  4473. has_type = 1;
  4474. prop_is_valid = ast_ari_validate_string(
  4475. ast_json_object_iter_value(iter));
  4476. if (!prop_is_valid) {
  4477. ast_log(LOG_ERROR, "ARI RecordingFinished field type failed validation\n");
  4478. res = 0;
  4479. }
  4480. } else
  4481. if (strcmp("application", ast_json_object_iter_key(iter)) == 0) {
  4482. int prop_is_valid;
  4483. has_application = 1;
  4484. prop_is_valid = ast_ari_validate_string(
  4485. ast_json_object_iter_value(iter));
  4486. if (!prop_is_valid) {
  4487. ast_log(LOG_ERROR, "ARI RecordingFinished field application failed validation\n");
  4488. res = 0;
  4489. }
  4490. } else
  4491. if (strcmp("timestamp", ast_json_object_iter_key(iter)) == 0) {
  4492. int prop_is_valid;
  4493. prop_is_valid = ast_ari_validate_date(
  4494. ast_json_object_iter_value(iter));
  4495. if (!prop_is_valid) {
  4496. ast_log(LOG_ERROR, "ARI RecordingFinished field timestamp failed validation\n");
  4497. res = 0;
  4498. }
  4499. } else
  4500. if (strcmp("recording", ast_json_object_iter_key(iter)) == 0) {
  4501. int prop_is_valid;
  4502. has_recording = 1;
  4503. prop_is_valid = ast_ari_validate_live_recording(
  4504. ast_json_object_iter_value(iter));
  4505. if (!prop_is_valid) {
  4506. ast_log(LOG_ERROR, "ARI RecordingFinished field recording failed validation\n");
  4507. res = 0;
  4508. }
  4509. } else
  4510. {
  4511. ast_log(LOG_ERROR,
  4512. "ARI RecordingFinished has undocumented field %s\n",
  4513. ast_json_object_iter_key(iter));
  4514. res = 0;
  4515. }
  4516. }
  4517. if (!has_type) {
  4518. ast_log(LOG_ERROR, "ARI RecordingFinished missing required field type\n");
  4519. res = 0;
  4520. }
  4521. if (!has_application) {
  4522. ast_log(LOG_ERROR, "ARI RecordingFinished missing required field application\n");
  4523. res = 0;
  4524. }
  4525. if (!has_recording) {
  4526. ast_log(LOG_ERROR, "ARI RecordingFinished missing required field recording\n");
  4527. res = 0;
  4528. }
  4529. return res;
  4530. }
  4531. ari_validator ast_ari_validate_recording_finished_fn(void)
  4532. {
  4533. return ast_ari_validate_recording_finished;
  4534. }
  4535. int ast_ari_validate_recording_started(struct ast_json *json)
  4536. {
  4537. int res = 1;
  4538. struct ast_json_iter *iter;
  4539. int has_type = 0;
  4540. int has_application = 0;
  4541. int has_recording = 0;
  4542. for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
  4543. if (strcmp("type", ast_json_object_iter_key(iter)) == 0) {
  4544. int prop_is_valid;
  4545. has_type = 1;
  4546. prop_is_valid = ast_ari_validate_string(
  4547. ast_json_object_iter_value(iter));
  4548. if (!prop_is_valid) {
  4549. ast_log(LOG_ERROR, "ARI RecordingStarted field type failed validation\n");
  4550. res = 0;
  4551. }
  4552. } else
  4553. if (strcmp("application", ast_json_object_iter_key(iter)) == 0) {
  4554. int prop_is_valid;
  4555. has_application = 1;
  4556. prop_is_valid = ast_ari_validate_string(
  4557. ast_json_object_iter_value(iter));
  4558. if (!prop_is_valid) {
  4559. ast_log(LOG_ERROR, "ARI RecordingStarted field application failed validation\n");
  4560. res = 0;
  4561. }
  4562. } else
  4563. if (strcmp("timestamp", ast_json_object_iter_key(iter)) == 0) {
  4564. int prop_is_valid;
  4565. prop_is_valid = ast_ari_validate_date(
  4566. ast_json_object_iter_value(iter));
  4567. if (!prop_is_valid) {
  4568. ast_log(LOG_ERROR, "ARI RecordingStarted field timestamp failed validation\n");
  4569. res = 0;
  4570. }
  4571. } else
  4572. if (strcmp("recording", ast_json_object_iter_key(iter)) == 0) {
  4573. int prop_is_valid;
  4574. has_recording = 1;
  4575. prop_is_valid = ast_ari_validate_live_recording(
  4576. ast_json_object_iter_value(iter));
  4577. if (!prop_is_valid) {
  4578. ast_log(LOG_ERROR, "ARI RecordingStarted field recording failed validation\n");
  4579. res = 0;
  4580. }
  4581. } else
  4582. {
  4583. ast_log(LOG_ERROR,
  4584. "ARI RecordingStarted has undocumented field %s\n",
  4585. ast_json_object_iter_key(iter));
  4586. res = 0;
  4587. }
  4588. }
  4589. if (!has_type) {
  4590. ast_log(LOG_ERROR, "ARI RecordingStarted missing required field type\n");
  4591. res = 0;
  4592. }
  4593. if (!has_application) {
  4594. ast_log(LOG_ERROR, "ARI RecordingStarted missing required field application\n");
  4595. res = 0;
  4596. }
  4597. if (!has_recording) {
  4598. ast_log(LOG_ERROR, "ARI RecordingStarted missing required field recording\n");
  4599. res = 0;
  4600. }
  4601. return res;
  4602. }
  4603. ari_validator ast_ari_validate_recording_started_fn(void)
  4604. {
  4605. return ast_ari_validate_recording_started;
  4606. }
  4607. int ast_ari_validate_stasis_end(struct ast_json *json)
  4608. {
  4609. int res = 1;
  4610. struct ast_json_iter *iter;
  4611. int has_type = 0;
  4612. int has_application = 0;
  4613. int has_channel = 0;
  4614. for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
  4615. if (strcmp("type", ast_json_object_iter_key(iter)) == 0) {
  4616. int prop_is_valid;
  4617. has_type = 1;
  4618. prop_is_valid = ast_ari_validate_string(
  4619. ast_json_object_iter_value(iter));
  4620. if (!prop_is_valid) {
  4621. ast_log(LOG_ERROR, "ARI StasisEnd field type failed validation\n");
  4622. res = 0;
  4623. }
  4624. } else
  4625. if (strcmp("application", ast_json_object_iter_key(iter)) == 0) {
  4626. int prop_is_valid;
  4627. has_application = 1;
  4628. prop_is_valid = ast_ari_validate_string(
  4629. ast_json_object_iter_value(iter));
  4630. if (!prop_is_valid) {
  4631. ast_log(LOG_ERROR, "ARI StasisEnd field application failed validation\n");
  4632. res = 0;
  4633. }
  4634. } else
  4635. if (strcmp("timestamp", ast_json_object_iter_key(iter)) == 0) {
  4636. int prop_is_valid;
  4637. prop_is_valid = ast_ari_validate_date(
  4638. ast_json_object_iter_value(iter));
  4639. if (!prop_is_valid) {
  4640. ast_log(LOG_ERROR, "ARI StasisEnd field timestamp failed validation\n");
  4641. res = 0;
  4642. }
  4643. } else
  4644. if (strcmp("channel", ast_json_object_iter_key(iter)) == 0) {
  4645. int prop_is_valid;
  4646. has_channel = 1;
  4647. prop_is_valid = ast_ari_validate_channel(
  4648. ast_json_object_iter_value(iter));
  4649. if (!prop_is_valid) {
  4650. ast_log(LOG_ERROR, "ARI StasisEnd field channel failed validation\n");
  4651. res = 0;
  4652. }
  4653. } else
  4654. {
  4655. ast_log(LOG_ERROR,
  4656. "ARI StasisEnd has undocumented field %s\n",
  4657. ast_json_object_iter_key(iter));
  4658. res = 0;
  4659. }
  4660. }
  4661. if (!has_type) {
  4662. ast_log(LOG_ERROR, "ARI StasisEnd missing required field type\n");
  4663. res = 0;
  4664. }
  4665. if (!has_application) {
  4666. ast_log(LOG_ERROR, "ARI StasisEnd missing required field application\n");
  4667. res = 0;
  4668. }
  4669. if (!has_channel) {
  4670. ast_log(LOG_ERROR, "ARI StasisEnd missing required field channel\n");
  4671. res = 0;
  4672. }
  4673. return res;
  4674. }
  4675. ari_validator ast_ari_validate_stasis_end_fn(void)
  4676. {
  4677. return ast_ari_validate_stasis_end;
  4678. }
  4679. int ast_ari_validate_stasis_start(struct ast_json *json)
  4680. {
  4681. int res = 1;
  4682. struct ast_json_iter *iter;
  4683. int has_type = 0;
  4684. int has_application = 0;
  4685. int has_args = 0;
  4686. int has_channel = 0;
  4687. for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
  4688. if (strcmp("type", ast_json_object_iter_key(iter)) == 0) {
  4689. int prop_is_valid;
  4690. has_type = 1;
  4691. prop_is_valid = ast_ari_validate_string(
  4692. ast_json_object_iter_value(iter));
  4693. if (!prop_is_valid) {
  4694. ast_log(LOG_ERROR, "ARI StasisStart field type failed validation\n");
  4695. res = 0;
  4696. }
  4697. } else
  4698. if (strcmp("application", ast_json_object_iter_key(iter)) == 0) {
  4699. int prop_is_valid;
  4700. has_application = 1;
  4701. prop_is_valid = ast_ari_validate_string(
  4702. ast_json_object_iter_value(iter));
  4703. if (!prop_is_valid) {
  4704. ast_log(LOG_ERROR, "ARI StasisStart field application failed validation\n");
  4705. res = 0;
  4706. }
  4707. } else
  4708. if (strcmp("timestamp", ast_json_object_iter_key(iter)) == 0) {
  4709. int prop_is_valid;
  4710. prop_is_valid = ast_ari_validate_date(
  4711. ast_json_object_iter_value(iter));
  4712. if (!prop_is_valid) {
  4713. ast_log(LOG_ERROR, "ARI StasisStart field timestamp failed validation\n");
  4714. res = 0;
  4715. }
  4716. } else
  4717. if (strcmp("args", ast_json_object_iter_key(iter)) == 0) {
  4718. int prop_is_valid;
  4719. has_args = 1;
  4720. prop_is_valid = ast_ari_validate_list(
  4721. ast_json_object_iter_value(iter),
  4722. ast_ari_validate_string);
  4723. if (!prop_is_valid) {
  4724. ast_log(LOG_ERROR, "ARI StasisStart field args failed validation\n");
  4725. res = 0;
  4726. }
  4727. } else
  4728. if (strcmp("channel", ast_json_object_iter_key(iter)) == 0) {
  4729. int prop_is_valid;
  4730. has_channel = 1;
  4731. prop_is_valid = ast_ari_validate_channel(
  4732. ast_json_object_iter_value(iter));
  4733. if (!prop_is_valid) {
  4734. ast_log(LOG_ERROR, "ARI StasisStart field channel failed validation\n");
  4735. res = 0;
  4736. }
  4737. } else
  4738. if (strcmp("replace_channel", ast_json_object_iter_key(iter)) == 0) {
  4739. int prop_is_valid;
  4740. prop_is_valid = ast_ari_validate_channel(
  4741. ast_json_object_iter_value(iter));
  4742. if (!prop_is_valid) {
  4743. ast_log(LOG_ERROR, "ARI StasisStart field replace_channel failed validation\n");
  4744. res = 0;
  4745. }
  4746. } else
  4747. {
  4748. ast_log(LOG_ERROR,
  4749. "ARI StasisStart has undocumented field %s\n",
  4750. ast_json_object_iter_key(iter));
  4751. res = 0;
  4752. }
  4753. }
  4754. if (!has_type) {
  4755. ast_log(LOG_ERROR, "ARI StasisStart missing required field type\n");
  4756. res = 0;
  4757. }
  4758. if (!has_application) {
  4759. ast_log(LOG_ERROR, "ARI StasisStart missing required field application\n");
  4760. res = 0;
  4761. }
  4762. if (!has_args) {
  4763. ast_log(LOG_ERROR, "ARI StasisStart missing required field args\n");
  4764. res = 0;
  4765. }
  4766. if (!has_channel) {
  4767. ast_log(LOG_ERROR, "ARI StasisStart missing required field channel\n");
  4768. res = 0;
  4769. }
  4770. return res;
  4771. }
  4772. ari_validator ast_ari_validate_stasis_start_fn(void)
  4773. {
  4774. return ast_ari_validate_stasis_start;
  4775. }
  4776. int ast_ari_validate_text_message_received(struct ast_json *json)
  4777. {
  4778. int res = 1;
  4779. struct ast_json_iter *iter;
  4780. int has_type = 0;
  4781. int has_application = 0;
  4782. int has_message = 0;
  4783. for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
  4784. if (strcmp("type", ast_json_object_iter_key(iter)) == 0) {
  4785. int prop_is_valid;
  4786. has_type = 1;
  4787. prop_is_valid = ast_ari_validate_string(
  4788. ast_json_object_iter_value(iter));
  4789. if (!prop_is_valid) {
  4790. ast_log(LOG_ERROR, "ARI TextMessageReceived field type failed validation\n");
  4791. res = 0;
  4792. }
  4793. } else
  4794. if (strcmp("application", ast_json_object_iter_key(iter)) == 0) {
  4795. int prop_is_valid;
  4796. has_application = 1;
  4797. prop_is_valid = ast_ari_validate_string(
  4798. ast_json_object_iter_value(iter));
  4799. if (!prop_is_valid) {
  4800. ast_log(LOG_ERROR, "ARI TextMessageReceived field application failed validation\n");
  4801. res = 0;
  4802. }
  4803. } else
  4804. if (strcmp("timestamp", ast_json_object_iter_key(iter)) == 0) {
  4805. int prop_is_valid;
  4806. prop_is_valid = ast_ari_validate_date(
  4807. ast_json_object_iter_value(iter));
  4808. if (!prop_is_valid) {
  4809. ast_log(LOG_ERROR, "ARI TextMessageReceived field timestamp failed validation\n");
  4810. res = 0;
  4811. }
  4812. } else
  4813. if (strcmp("endpoint", ast_json_object_iter_key(iter)) == 0) {
  4814. int prop_is_valid;
  4815. prop_is_valid = ast_ari_validate_endpoint(
  4816. ast_json_object_iter_value(iter));
  4817. if (!prop_is_valid) {
  4818. ast_log(LOG_ERROR, "ARI TextMessageReceived field endpoint failed validation\n");
  4819. res = 0;
  4820. }
  4821. } else
  4822. if (strcmp("message", ast_json_object_iter_key(iter)) == 0) {
  4823. int prop_is_valid;
  4824. has_message = 1;
  4825. prop_is_valid = ast_ari_validate_text_message(
  4826. ast_json_object_iter_value(iter));
  4827. if (!prop_is_valid) {
  4828. ast_log(LOG_ERROR, "ARI TextMessageReceived field message failed validation\n");
  4829. res = 0;
  4830. }
  4831. } else
  4832. {
  4833. ast_log(LOG_ERROR,
  4834. "ARI TextMessageReceived has undocumented field %s\n",
  4835. ast_json_object_iter_key(iter));
  4836. res = 0;
  4837. }
  4838. }
  4839. if (!has_type) {
  4840. ast_log(LOG_ERROR, "ARI TextMessageReceived missing required field type\n");
  4841. res = 0;
  4842. }
  4843. if (!has_application) {
  4844. ast_log(LOG_ERROR, "ARI TextMessageReceived missing required field application\n");
  4845. res = 0;
  4846. }
  4847. if (!has_message) {
  4848. ast_log(LOG_ERROR, "ARI TextMessageReceived missing required field message\n");
  4849. res = 0;
  4850. }
  4851. return res;
  4852. }
  4853. ari_validator ast_ari_validate_text_message_received_fn(void)
  4854. {
  4855. return ast_ari_validate_text_message_received;
  4856. }
  4857. int ast_ari_validate_application(struct ast_json *json)
  4858. {
  4859. int res = 1;
  4860. struct ast_json_iter *iter;
  4861. int has_bridge_ids = 0;
  4862. int has_channel_ids = 0;
  4863. int has_device_names = 0;
  4864. int has_endpoint_ids = 0;
  4865. int has_name = 0;
  4866. for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
  4867. if (strcmp("bridge_ids", ast_json_object_iter_key(iter)) == 0) {
  4868. int prop_is_valid;
  4869. has_bridge_ids = 1;
  4870. prop_is_valid = ast_ari_validate_list(
  4871. ast_json_object_iter_value(iter),
  4872. ast_ari_validate_string);
  4873. if (!prop_is_valid) {
  4874. ast_log(LOG_ERROR, "ARI Application field bridge_ids failed validation\n");
  4875. res = 0;
  4876. }
  4877. } else
  4878. if (strcmp("channel_ids", ast_json_object_iter_key(iter)) == 0) {
  4879. int prop_is_valid;
  4880. has_channel_ids = 1;
  4881. prop_is_valid = ast_ari_validate_list(
  4882. ast_json_object_iter_value(iter),
  4883. ast_ari_validate_string);
  4884. if (!prop_is_valid) {
  4885. ast_log(LOG_ERROR, "ARI Application field channel_ids failed validation\n");
  4886. res = 0;
  4887. }
  4888. } else
  4889. if (strcmp("device_names", ast_json_object_iter_key(iter)) == 0) {
  4890. int prop_is_valid;
  4891. has_device_names = 1;
  4892. prop_is_valid = ast_ari_validate_list(
  4893. ast_json_object_iter_value(iter),
  4894. ast_ari_validate_string);
  4895. if (!prop_is_valid) {
  4896. ast_log(LOG_ERROR, "ARI Application field device_names failed validation\n");
  4897. res = 0;
  4898. }
  4899. } else
  4900. if (strcmp("endpoint_ids", ast_json_object_iter_key(iter)) == 0) {
  4901. int prop_is_valid;
  4902. has_endpoint_ids = 1;
  4903. prop_is_valid = ast_ari_validate_list(
  4904. ast_json_object_iter_value(iter),
  4905. ast_ari_validate_string);
  4906. if (!prop_is_valid) {
  4907. ast_log(LOG_ERROR, "ARI Application field endpoint_ids failed validation\n");
  4908. res = 0;
  4909. }
  4910. } else
  4911. if (strcmp("name", ast_json_object_iter_key(iter)) == 0) {
  4912. int prop_is_valid;
  4913. has_name = 1;
  4914. prop_is_valid = ast_ari_validate_string(
  4915. ast_json_object_iter_value(iter));
  4916. if (!prop_is_valid) {
  4917. ast_log(LOG_ERROR, "ARI Application field name failed validation\n");
  4918. res = 0;
  4919. }
  4920. } else
  4921. {
  4922. ast_log(LOG_ERROR,
  4923. "ARI Application has undocumented field %s\n",
  4924. ast_json_object_iter_key(iter));
  4925. res = 0;
  4926. }
  4927. }
  4928. if (!has_bridge_ids) {
  4929. ast_log(LOG_ERROR, "ARI Application missing required field bridge_ids\n");
  4930. res = 0;
  4931. }
  4932. if (!has_channel_ids) {
  4933. ast_log(LOG_ERROR, "ARI Application missing required field channel_ids\n");
  4934. res = 0;
  4935. }
  4936. if (!has_device_names) {
  4937. ast_log(LOG_ERROR, "ARI Application missing required field device_names\n");
  4938. res = 0;
  4939. }
  4940. if (!has_endpoint_ids) {
  4941. ast_log(LOG_ERROR, "ARI Application missing required field endpoint_ids\n");
  4942. res = 0;
  4943. }
  4944. if (!has_name) {
  4945. ast_log(LOG_ERROR, "ARI Application missing required field name\n");
  4946. res = 0;
  4947. }
  4948. return res;
  4949. }
  4950. ari_validator ast_ari_validate_application_fn(void)
  4951. {
  4952. return ast_ari_validate_application;
  4953. }