From 03d71b27e4f1f2646e98ee1e5283b41df876a1fc Mon Sep 17 00:00:00 2001 From: Ghislain MARY Date: Mon, 6 Jul 2015 11:35:18 +0200 Subject: [PATCH] Add tester for Windows 10. --- build/windows10/liblinphone-tester/App.xaml | 16 + .../windows10/liblinphone-tester/App.xaml.cs | 114 +++++ .../ApplicationInsights.config | 23 + .../liblinphone-tester/Assets/Logo.png | Bin 0 -> 11783 bytes .../liblinphone-tester/Assets/SmallLogo.png | Bin 0 -> 11783 bytes .../Assets/SplashScreen.png | Bin 0 -> 29889 bytes .../Assets/WideLogo.scale-100.png | Bin 0 -> 21480 bytes .../DataModel/UnitTestDataSource.cs | 251 ++++++++++ .../liblinphone-tester/MainPage.xaml | 128 ++++++ .../liblinphone-tester/MainPage.xaml.cs | 197 ++++++++ .../liblinphone-tester/Package.appxmanifest | 48 ++ .../Properties/AssemblyInfo.cs | 29 ++ .../Properties/Default.rd.xml | 31 ++ ...blinphone-tester-runtime-component.vcxproj | 121 +++++ .../liblinphone-tester-static.vcxproj | 127 +++++ .../liblinphone-tester.csproj | 177 +++++++ .../liblinphone-tester/liblinphone-tester.sln | 432 ++++++++++++++++++ .../liblinphone-tester_TemporaryKey.pfx | Bin 0 -> 2456 bytes .../liblinphone-tester/packages.config | 8 + .../windows10/liblinphone/liblinphone.vcxproj | 1 + tester/call_tester.c | 4 +- tester/liblinphone_tester.c | 12 +- tester/liblinphone_tester.h | 11 +- tester/liblinphone_tester_windows.cpp | 149 ++++++ tester/liblinphone_tester_windows.h | 41 ++ tester/log_collection_tester.c | 12 +- tester/multi_call_tester.c | 2 +- tester/tester.c | 5 +- tester/video_tester.c | 4 +- 29 files changed, 1922 insertions(+), 21 deletions(-) create mode 100644 build/windows10/liblinphone-tester/App.xaml create mode 100644 build/windows10/liblinphone-tester/App.xaml.cs create mode 100644 build/windows10/liblinphone-tester/ApplicationInsights.config create mode 100644 build/windows10/liblinphone-tester/Assets/Logo.png create mode 100644 build/windows10/liblinphone-tester/Assets/SmallLogo.png create mode 100644 build/windows10/liblinphone-tester/Assets/SplashScreen.png create mode 100644 build/windows10/liblinphone-tester/Assets/WideLogo.scale-100.png create mode 100644 build/windows10/liblinphone-tester/DataModel/UnitTestDataSource.cs create mode 100644 build/windows10/liblinphone-tester/MainPage.xaml create mode 100644 build/windows10/liblinphone-tester/MainPage.xaml.cs create mode 100644 build/windows10/liblinphone-tester/Package.appxmanifest create mode 100644 build/windows10/liblinphone-tester/Properties/AssemblyInfo.cs create mode 100644 build/windows10/liblinphone-tester/Properties/Default.rd.xml create mode 100644 build/windows10/liblinphone-tester/liblinphone-tester-runtime-component/liblinphone-tester-runtime-component.vcxproj create mode 100644 build/windows10/liblinphone-tester/liblinphone-tester-static/liblinphone-tester-static.vcxproj create mode 100644 build/windows10/liblinphone-tester/liblinphone-tester.csproj create mode 100644 build/windows10/liblinphone-tester/liblinphone-tester.sln create mode 100644 build/windows10/liblinphone-tester/liblinphone-tester_TemporaryKey.pfx create mode 100644 build/windows10/liblinphone-tester/packages.config create mode 100644 tester/liblinphone_tester_windows.cpp create mode 100644 tester/liblinphone_tester_windows.h diff --git a/build/windows10/liblinphone-tester/App.xaml b/build/windows10/liblinphone-tester/App.xaml new file mode 100644 index 000000000..8ed2e3f95 --- /dev/null +++ b/build/windows10/liblinphone-tester/App.xaml @@ -0,0 +1,16 @@ + + + + + + + + + + diff --git a/build/windows10/liblinphone-tester/App.xaml.cs b/build/windows10/liblinphone-tester/App.xaml.cs new file mode 100644 index 000000000..e80598ed7 --- /dev/null +++ b/build/windows10/liblinphone-tester/App.xaml.cs @@ -0,0 +1,114 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices.WindowsRuntime; +using Windows.ApplicationModel; +using Windows.ApplicationModel.Activation; +using Windows.Foundation; +using Windows.Foundation.Collections; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; +using Windows.UI.Xaml.Controls.Primitives; +using Windows.UI.Xaml.Data; +using Windows.UI.Xaml.Input; +using Windows.UI.Xaml.Media; +using Windows.UI.Xaml.Navigation; + +// The Blank Application template is documented at http://go.microsoft.com/fwlink/?LinkId=402347&clcid=0x409 + +namespace liblinphone_tester +{ + /// + /// Provides application-specific behavior to supplement the default Application class. + /// + sealed partial class App : Application + { + /// + /// Allows tracking page views, exceptions and other telemetry through the Microsoft Application Insights service. + /// + public static Microsoft.ApplicationInsights.TelemetryClient TelemetryClient; + + /// + /// Initializes the singleton application object. This is the first line of authored code + /// executed, and as such is the logical equivalent of main() or WinMain(). + /// + public App() + { + TelemetryClient = new Microsoft.ApplicationInsights.TelemetryClient(); + + this.InitializeComponent(); + this.Suspending += OnSuspending; + } + + /// + /// Invoked when the application is launched normally by the end user. Other entry points + /// will be used such as when the application is launched to open a specific file. + /// + /// Details about the launch request and process. + protected override void OnLaunched(LaunchActivatedEventArgs e) + { + +#if DEBUG + if (System.Diagnostics.Debugger.IsAttached) + { + this.DebugSettings.EnableFrameRateCounter = true; + } +#endif + + Frame rootFrame = Window.Current.Content as Frame; + + // Do not repeat app initialization when the Window already has content, + // just ensure that the window is active + if (rootFrame == null) + { + // Create a Frame to act as the navigation context and navigate to the first page + rootFrame = new Frame(); + + rootFrame.NavigationFailed += OnNavigationFailed; + + if (e.PreviousExecutionState == ApplicationExecutionState.Terminated) + { + //TODO: Load state from previously suspended application + } + + // Place the frame in the current Window + Window.Current.Content = rootFrame; + } + + if (rootFrame.Content == null) + { + // When the navigation stack isn't restored navigate to the first page, + // configuring the new page by passing required information as a navigation + // parameter + rootFrame.Navigate(typeof(MainPage), e.Arguments); + } + // Ensure the current window is active + Window.Current.Activate(); + } + + /// + /// Invoked when Navigation to a certain page fails + /// + /// The Frame which failed navigation + /// Details about the navigation failure + void OnNavigationFailed(object sender, NavigationFailedEventArgs e) + { + throw new Exception("Failed to load Page " + e.SourcePageType.FullName); + } + + /// + /// Invoked when application execution is being suspended. Application state is saved + /// without knowing whether the application will be terminated or resumed with the contents + /// of memory still intact. + /// + /// The source of the suspend request. + /// Details about the suspend request. + private void OnSuspending(object sender, SuspendingEventArgs e) + { + var deferral = e.SuspendingOperation.GetDeferral(); + //TODO: Save application state and stop any background activity + deferral.Complete(); + } + } +} diff --git a/build/windows10/liblinphone-tester/ApplicationInsights.config b/build/windows10/liblinphone-tester/ApplicationInsights.config new file mode 100644 index 000000000..8a6452a34 --- /dev/null +++ b/build/windows10/liblinphone-tester/ApplicationInsights.config @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/build/windows10/liblinphone-tester/Assets/Logo.png b/build/windows10/liblinphone-tester/Assets/Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..ecfbad551241f4c60fad2e52cadb3a6228252462 GIT binary patch literal 11783 zcmb_iWmg$?iwJ$o#1YPz@6v*hPT(Ms@2^e zs`~Wty<=3Aq*0NGkN^Mxs;rEp8e~oXZy>-!W007@5w^LOR@&evWURn~eLarByuCI^< z(M3kr9ROgZ`fot_l!n}k^;L4)YGpUavbFhJQvEdjmi=}+ zB(Mv`d-R(8SV@a56uID8H1mF|9floMjKqaaZmko2R^Io3=;fs@lyZO_ibR-eDxT7x+Xur_28TkZ(!zGP2f{Q0FqppmLli#MD#22k0a8r9eZ71)_V02e0<2JIU$LF zuZbA0PiQ?B(DRD=Sth!Ig97|S9hc{LvyOG{=$DEL497+32=$P|JBiKjaQY^&!4;mRZ)2le|DMI$@-rfi%Vv3xFL$f`8kDwu zPF!Y9j|iI4;>eLKqWHQ*Vm))tcRX8N)B}`*NLhl5uWm}-9zM|A_A$QV53%x6!8E2S zuAMkzT(+4(ccH1fIoG``aJUD|I++^6SpeBK1IAd&CB*)ABe4ygw8Vh3AwTYTwI#rdMX_l=RR%iS6iWlVk9TRq zICeyZ?Le-?k-HcjrNL_N+--dkI{Fn)oTS=gAs=DZ!R+Bai13+C5~`^2ADtl#@VTqw zA>g_gZ8pmgroW*T-DRxh--bXobgAW{gE&iEgpa>JjCS7gaCOH6tYhDJ+`DAtP)u!^ zU<|W#3J89Qh)Oq%N;hw;ncoy>gFRo1bQBTB{4GjH2Y+|tx9hA^OiSbEBLOQpP9K{m z_OIs!!$}G~cCu5SI@fY$bw19fskM}^>~>xe(qCutw+{jfOR^HXJ%D$ol;5nmE`Rw1 zCtec4E5b-wx>Ao{eutMaT2&j$$@uQ_P>e@}oM!97IMq79z=KZxyyTKXN6R6Yu_DAG za}14hBn4d?8)1XOD5(i2AwJ6`OO)a|Lt&ch$?&F!FBQOcnV zzt`u*yOQ8=l_YK;xFRJT{h{^ukM6T>o_d3ydjc~)UrM|`2omq(@8)-Ka@4Yy*eo3j z84a}YcL&o6nDp#)7D-C#Xcg3%CHV?T?(jyJi2SA1&k6GPt~Jm?N*RbOe%I=)OgBjX zAWwqXx9xqZkPvX*-1_(eF;QhO>)))MX-bIjGJ?N8Cd*+K%Cmc>j}C75>e6L+aD7f+ zd0ySVI-HtIgr3Jl{LEW9pR*vg333(>5$Xq7oMY9EtT_C7xL0rMD?N+ejEal%5R ztqq)g+`F?58zUj>w&57~W$a#-%{0L!k%?rgC zHqq-^Gl!_hvp1x@5E(r=5bvBx(~9xxk|LWz=cp6m4~KSF^@P~tal60g^5eLk#wi!;VAU_f<|&m^%Y&;FBe7krDC(;o3~`HNjsp$$bQ8Lj<1oev!N*?r1$UdQ9Un{2WE+{Ws*Ax|oMNFaAaAZJB5_lMdYJ~B;8Jh`_4+@a=F?rH!_DW}S)_Iz3L@en;TrT;S=&1{M{Dc$xxNx8Q&O>I~ zn7bD1M3Q(HQn&MYMW-`|J?GhisqViv6Y@lghdz5de8gx9*HOFFXN&3TeUz1pSSr!1+e&UW8!mFF*1F6J8VER0m{N_V9P-+ZnO*e; zdtTAd_YNC#igS;g%9?+w5sMH8LcS?EYaO4-TQBsq_E_)^^e#|~tn-Ysp?_#m%{-Sm227k~+dn@`A?x@%!1+gD z?Cr{F>jITTAVJ`rJM>Dobh7O)S&tt>M*i|NIuH5Yg|Z;JxTT_CI9m8c`Vw{w%9TUS zKJhAZ8IMCpViX-`!0AHI+iEiG>d&Yu^lF41^ca#nQ}CSO#w-n~qEyD`{Dt=8te~Lp z*5N@jJ8#(-pEU=rhpl`K>7s0A{f@hKUpD2b)#c>F%Qp4RKI&!9_&^N4JYX2xTedjs zn(L6AmPwk}oZtwm-|E6Xl5ZjpNfeOv|T5mitI7(3Pys0GI=RbaVfKmvf zDwV`dlar$BWVkVSY}7O?w1NFP=CghE)WlHXE)j?$r2~FToj~E8iM^YU7sygC{_)f$ zG_=ulh>%n6W}t&z%u`wHpXd4}2j`1z6F66sT4Dho)KZzD!ZswqY8V=7QNuc6)$B1k z`1Tw-Qk%D}Qhm^h1e~q&c<^=Y#I#2j_s~01E}%T(Flj`gp@_OSX-%>Bl2o5ldOmQSf4r{V7&}2s$By5*; zts}ISa{vN9iqW=$2D;VCo>+jxGvIphPZj9@X<`fpufEU;h_yQYc37WHl9R?hs6B>d z0%dAXHB<%%C|Ejqv&oI@bA0-8S=9UYS@_*{okDvx!WIc0L#7-hb(_XL;I$jnJ=9Vc zMu-0GrY!!`?}7!sKGsl5W=fJ8wx4I}9Z(Z$>D0RU3ch1opT8O{{i)7KvnZpsPDS4N zU5nN^dz{|tc6JyiZ@73U9{m8Wm*X@1FYCqg!IBCta#b`(Men|WrsW_)6?vz!;MN*0 zL7)zSR@?O44cPMBg?>^g&}oaCyCOa0j#n*?6~$$*lIN*#dpll(dpm4iDPH<;xdZk# zIR~Luxg_xJzR9uTsO^3nz>CR zWeIp#b4PNv)Is=Mv$$*vUONfS-|9hd#VbEzT-K2*Ir*d<#-)oFSLm0RIg*ir0v5Y-qV@Zzx6#@F6Vev)5lU)n7r!a&YT!nb>4Z>HySE9%iU8|4lL<+_9FGKXuq2d^=7mK4+C~Xbd z%1?UoRSJmY?H{0CPm2^@o{`#FM_?w0LTfo!uls~J>y^V}o)>f8e#_ZYvn%sVb)=2z zy_;!t00WK}cl%^`g^2voKc*qiEf$eU*BwLSQ-XuZ?3KT@u&5J865>2lb#eMH8(?`P zHpeCmGi92ZAI-z3C-E>PGE|c6!SAzi?4{IioAD+@%n6aIA&qsys#4cFltafEt+#A! zSFp7it-RZPVFHN?ZiePKK<2xOoRk^cc!4hdjcCZFSg|}rDndTd)^*Q{$gCQ&P=G!S+gOdESsPS`xOs3^bBvp82gxy|S1!!>YFv#131TD%_@m5TEvhl- zb;vb!$VcAWryj3j``4tK+JJo|E>A6;2RIa!2+)s04397+Yf!|q-qs?^pmYq_{!KQU zf))u)3WB|I#aCa8tLP`5hBUSMI*So4C5WA#^^-_tpB5PT3p1_Tb=*tm{9?~4r?Pus z8Noq77K^WL1STKidYWGLnU)EBV=N&i$sM03LGFl!YOR(DP(|5Evg1w77PEFFkT{a) zge|5Z;5O#k62JB4#rdnT(#(LYAKtojsYQqmq&M_j?MjrMWKs(%8{*$RfL3h5*J^2&{A30xSt( zY<~qGx0gak!)oC1j@f>Lw~dY1P8YdC9x0JbSo=l3 z{Hj{(m=~y#SPdF;$E{WAk!*5fcobr4b<>SK{O81wU!n&D&Ihl^07?&>$$wq;9Lkrb z)i7#yfPq@d&VZ`GopdQjgTCVU2BCLBZxW&~mvNdjb(j4}L{Q#VO-9-|O#xbS=Y%!c z=8%q(wW=d*3^Qfgo#79~biG&^I7#2G^tmINjDBU-U7RhinYE$P{#q0Pl`I9i4jFkVSb@5PVC?`%eHpa|N(4v98@9_B z$wGHYhDr={dUI+N;}-b@M{aUlcoU_t3zo?)d8-WrjR7EZMNQ1U(j}D#}WOK zGK;%Bu=r!kBgylhdaX^giJWesTF?lCRDMYyQjB$S)AfEX)mJ6?o?A)x@iLQS+QMJk zH#w5tq*@;3?%fnSe|-3CvWC&??jE?hYp`$)g3LC1gBHTH^IOV!NOoci)?k!F8D*L8 ztRJ)ouyskHLmLb{Tf5GV$v3BtEYd-qyS90Do0q`eHup?$ysCa#_}uxStY)kNTrW5@ zQP5ZYgSLy3)6>+p=9 zU)U9WH|{Jv!U`@)iiPkfOMl@Wy669+Rc3is#G%i;YlzOJk}0R@UDuQTj-SciSLd!=Y2&p!C^kbWnWN@iGt z6`S)sxUZ5yn>Gf^zm5~|7L+9&FUVMo!|E@y4=LvE4iJx@4eP6a_om+^`7|suima1B z!-hI!%QXdUBlJh8P42_b7bv8Gb#f9Fj2=gN!U|yn2C;E4)M51(LG^agcSm4%C<6II zpR3eYU3F|XeZ@(X%tOs2!6vz6#w*b-u)$)*?W=*WJA>dROz`ou@5i)rWDo6v{a=#7 zcDslVGK0H6pu{DWYdF^RlI-5zlg5^#MYk1C-IyPzAs6sNUqPF1#H+Ca(l^1v(gyK-xvR_n5K=4RaNG z`SxD*>(!NlF}eQgg5(w3Y=2mYY5G4BsDBBh!1~C7&N>5zJO4eg*!*?FS)3U~XQkEH$551`J1*=)> z6Wlomv(Vr9k(c>Iwl`A|Slq!_7i18{`Fygi2d|H^`ZH8RmMfzyi4<5c8RbzrDN*J+ zr3|N|FkDZqy`c|g*_ue|#Q$2@1Ul|8f#KUes6(aQ@(Ll6VGgX8P8Q*hq@twWUYdp) z2RPsoZt}q+_2OvWJ}27CFM?fN3ExD3hGU{o!VO)UzvqDQ!5ulKpo*0Nf7JcDVfEU$ zsWN78J496dHF#HXd;3K*_(O2z$|&OgH8a+_D zyFZ~Vyx!v0if*!!dkjmV=p8>e1@BxeOElQkg}R9(TZf4_>&?zOHq|Y%^j9& zy0%F;Xk8qxeG)L4OqZZ0Ue-^Uk(R_wjSUJ*{x+(jXH8$nnX({rfYKakYiw@xdt(w4 z=S6+ile7*ij>HF0bnX0URMz&(&2_1IxSLhZ&3%c^h)7`$1# z3`&qk*Qr>GL39^{fJPzst4r)_#UBX%VtkqHx;^ijy@KsdmcWLpTu;Btk z0>+e!Z64pZ-_CG)`<%b;;w(F2LQeTcWnZ&glVhjz+v?_GA&^RtFMqF@pUL4D!)J*> zG4dtBPsTHkVk={AAldZGSregNpFihL&;Dg_ z|5b-K#mdo;0BF%fF>~%Tjs4r7wo(DM%1NAkTr-XZca1yupi7!omk@cc$6XVl)xyKb zS8M;9vMMoJE_+qCO>Csk)XSaD0+uy|)AkuFs&G?da{I;nyIB`_m#@M~CCv3~^b2EcB51uPsp^O&m<=p3i z@|YYpBbgPhiA*>6QpPn7_4+dwx~5U)?MVnEGFjb$3J~1l9li8OM;?5Sn)v?FRa`RA z79_DvUt(MLEyM5|q-FbZzSf+l%&8#!a_vMJ3l>~Orem=TnvlDZ9^faYN<%!PPWMz_ zJaES6>FgbB@Iqe~LGGU0OR{qFbc{w8B0NV?Z@%n@eMml0JbW|@X4o}Hzt|H=R9Mt{ zzLx#)ZupuFrtz$E7-qDtap`Y%53Rw|6<+eu+dqq<17e6~EJAAgMo`_2^F>RvZ#m9y zp3I$3<_yBbe!KPJ9M&!n97l#R$|_qDnsKHH$7eZCsekf^6V{2&Fw~z3E=FWkqzjR`VI$2>t#KIX1 z9S&Nko@7`TgjsvLH(Yn(jGVUkwviL7eg)Q$lD*BTQG$g_7+ z{#ND{{G7GgpK+21Nt6!Lef#$Y2f{SPiY# zzpv5xr^@q~D#%9TWW*&WBu`hw`?YKAowl7Fl?q)Pa>??Xibul|4(G~^_CBX@o2UN- zqLM`&At8b)C!#dnxA=s1IyRCoWwPmV9yV?t$lLwJ@Ba5p$KecF^s1oVS<6T%v`?pl zr(%}zNr2VwbED%|bLm>8S=BC#T=C!4gx#I2;@0Z#BR4LLW93a;d8W&r=M`a!QM829 zr;?f@^*X)^ZoY_k8nDXb`MO%f!4j#2?_6o6EO?FBHHR}gMS8w14EE)+iYlf`TsAbO zLpfeptJHu0)rgPfnS(BSmb$`H!A~>^L-Np1iN--?%-!=_d4Bx8A2}&FY*uDaXCdbaMGXFf&T)dWF8`R5a`msP zEzWjuGV?JiZJ%}324(c9ijfNBKo++-6?>D~aNjJsBU3vFH+Pb&n1MOdcU!^<+#wI`=cRzd2RKuu=kp|NEd^PzEFMOTeOgL~ohFqXIi)LAPko$J2M1@#LN zyOT15pI3`W;Z@cy&RytA87*q+1{X=)Hz)Qo!pcE=cx1+Tdpu+W_|WgH6GWWqwHmXc zVrjy?-YZDTc1|t9Ce6_aBy(1e-YQU=36wiOI&iYaSmIbBVl*4O$DIB%hs4wC&&;;=IXOz9GB!T<3Jf&{K zjvtJ4G{0@1g~T+Act|L!2 zrlF7S4%^zVT#iA5X{bai!3<>O@;!|(t+u4gzH$R>;AMsgq$MX({(v5-Vn4fN+3r8c zh5w+>?I~fHS6nAeCE=n;?KsJ*c==&E$~9yjS~~Z=JukMrXLcIffzo;r3v~gj!01u* z)5Qa3xyO?AXm{x(wtgq=9PnF9;x4d9f~P^RqdK%4=@I9s!xUHlO!y$oDU!PDp-jyhs5|Gg>R=)!-kO>mJ^Dzq+dM zqvez+uCoGwziKh7y{+KXvIl0XNW?T<{}nVcGB+#2K)1U-2$p-KzJJr~-STx%D4m0q zLqwb@Wy{*nJDv+1_xgS0!;(r%GUUbd*R^4UPPIL_O&dzu5cgHRRx%gyLWE!yKT^2z3vq8bn*_3rT zz3)uYRe&#U@ZO1~J~N^4@B61^0dIpZf|=uP^!60tC+ekAd>eOH2Vgkq-| zQAjyoW+Bc?I8SpdsqubX4A;H80RkBOXph*Inc#-B$Ej-<3DMT>u79~pnKOYej7dk@ zLXl?Wpun_R-m9DU_d)P~B;}6qhec7#xkQW2a7)4V>Yeb1F6Cz|S$U)x;H(8zQNOkJR`b zG&_P!WW$j8bj+4My|+*}X^DPemVww14J(u58zsb4r;54Xs~sZj7MOKek588Gilt&Z z0`0@ACXAA@lGzs=m6D!X|J$xCtB^jFdjZh)5bwI=%nfPvYwPW0(~JY4My+?e%ORK!0|M$ko>-D zZx8R8bGTy$(Zd+aUDDtcoEzjnE?+(YW!7$;&9cJM7*47Y??wVklsZrFS!V5P%;(N# z4PbeDBWeHbAZv*GG z%6r*n_OzMg$DxRM>eP2@qCi0z#<>shP7JQQvKi6!ZuxFApI_=B(P}h`r{ln{* z_T3m^gtb_sHQ3&=luhIazQAZWgN?0c+8qp?L++yWE7&rN{pV40RpugVUhPzED`adgy{Va9qQ*vj}^kLs78Z8%t9HJUj zionU`-y4RW7s9>ol<63Qu=N1@pLc24Wad-iMQ)&j&QjXJQH=ztC#QYwb>$!?f5w`- zhpl7ZZSqG>I+8+$(i9$rl@+P>uk;iCm+P|-Y*gtI!8piR_}V&V7GkW#*%3oYHL{hts&IC6w8TK#B(wB) zCO17pA402hbiAZy@*FU`7>eT0vT(CqRjMYKn}++~+6FZ~mKeCC>65F(?Vb~28=^|P zpn7Zp*))mzB#g_AabS**GL3s7V}Og1(5e?tlbut~mFB|Df2G8z1olRocbb57N;fl> zMNqp>cv8!s1KEF;lv8Ue!K-YQ$CEADd<}I8E+&3oc6TJR#~u^!!brm)Y$w?N2tysKsg8*B#pDv@0*TlutAC zt4_LlW@_g|rv_U1j^YC*t4%^vCBtZLHhcU61=PsoVD2R0H%l(BgwkJvd?TbovhsPD z-`9>w*e#2~E>R=Kie*e#PQqhDPTph)~?N zlqa0RcX45ByJ?6?s{qYD>7x>+s1CtGqY@< z9Z3uw+uS_TJQYprhC;ch>h=b^=4R2V+s~7L)y2(+969ZoCJ5sOxv=6%3${Q2uVc?7 z=ZpQ;P~rHT0#V}~7i{fJomlaKwGRS<*!WShKvz25;GDip#Gs}ObBm}Bioa}X5|3gt z$J|w663{53yu6i>Wi^ew>3Bsr9^=D z(93!jaDD8_&NL8DRQc*h{~QM8(Oji*t&wl2?raZdPo49g4EjX>ZpHP(07+eN_vGO> z2q6R3m*YkH;2F^}q7Mfpls-riMok#8JMywVL{59a!_^8C^8Ibt?Vo@vX}NT>@0T<> zu>J{zx11Ir*)5V3Q|J9!cNZ?@Ddy)(SQKcfrgM0_5Cu65B)J-mcYpLvLtf3!U)Hgl zi8^Qyh#soD&qiG2?Wid&v;*5C?v42drxKrJn*^^66Z$%7BCRl)y!Q}e()w}7h7kFaon4Qbozceh5Jn)>{e5KcI>wuOz5)&t0ZtXcfh@eQILIOg ztv1smjvg(!P&A8#Bwl5fe@d(`;0te{pTR2BZ1E8QyJbE^u+b8-EqB(Lq5(xDyYV1$WP!oj~ zNI8vsUN>n9zJ?qpx*`0aKHYz6+XJzxZ2Cd-5T2_v^Ct*R5^A$wKdzjWMXK36{mU+T z8G@#n)UH55fc+J_3-3zs;xUtVmf| zg)c_?r}n7JdXKWWBaOWgWo9-%zg6f4=z1|1%)-CZmZlSYY;cKizTYhoQ!q_nT*$8h zn})AUhOmc&1^7+f5E}3&4=DQ(@M8sT2!D&2E9otlR_9q={}%|YSGKc@QJ_R4;`&&= zR{Z{c1;#ztJs8hKcpimI#XyOl9SH?Gs;M07HzG;323ErVjG_!7IwwSZpcniVs6CrA R$o-F#Ei0uYSubu9`hRsbzRv&v literal 0 HcmV?d00001 diff --git a/build/windows10/liblinphone-tester/Assets/SmallLogo.png b/build/windows10/liblinphone-tester/Assets/SmallLogo.png new file mode 100644 index 0000000000000000000000000000000000000000..ecfbad551241f4c60fad2e52cadb3a6228252462 GIT binary patch literal 11783 zcmb_iWmg$?iwJ$o#1YPz@6v*hPT(Ms@2^e zs`~Wty<=3Aq*0NGkN^Mxs;rEp8e~oXZy>-!W007@5w^LOR@&evWURn~eLarByuCI^< z(M3kr9ROgZ`fot_l!n}k^;L4)YGpUavbFhJQvEdjmi=}+ zB(Mv`d-R(8SV@a56uID8H1mF|9floMjKqaaZmko2R^Io3=;fs@lyZO_ibR-eDxT7x+Xur_28TkZ(!zGP2f{Q0FqppmLli#MD#22k0a8r9eZ71)_V02e0<2JIU$LF zuZbA0PiQ?B(DRD=Sth!Ig97|S9hc{LvyOG{=$DEL497+32=$P|JBiKjaQY^&!4;mRZ)2le|DMI$@-rfi%Vv3xFL$f`8kDwu zPF!Y9j|iI4;>eLKqWHQ*Vm))tcRX8N)B}`*NLhl5uWm}-9zM|A_A$QV53%x6!8E2S zuAMkzT(+4(ccH1fIoG``aJUD|I++^6SpeBK1IAd&CB*)ABe4ygw8Vh3AwTYTwI#rdMX_l=RR%iS6iWlVk9TRq zICeyZ?Le-?k-HcjrNL_N+--dkI{Fn)oTS=gAs=DZ!R+Bai13+C5~`^2ADtl#@VTqw zA>g_gZ8pmgroW*T-DRxh--bXobgAW{gE&iEgpa>JjCS7gaCOH6tYhDJ+`DAtP)u!^ zU<|W#3J89Qh)Oq%N;hw;ncoy>gFRo1bQBTB{4GjH2Y+|tx9hA^OiSbEBLOQpP9K{m z_OIs!!$}G~cCu5SI@fY$bw19fskM}^>~>xe(qCutw+{jfOR^HXJ%D$ol;5nmE`Rw1 zCtec4E5b-wx>Ao{eutMaT2&j$$@uQ_P>e@}oM!97IMq79z=KZxyyTKXN6R6Yu_DAG za}14hBn4d?8)1XOD5(i2AwJ6`OO)a|Lt&ch$?&F!FBQOcnV zzt`u*yOQ8=l_YK;xFRJT{h{^ukM6T>o_d3ydjc~)UrM|`2omq(@8)-Ka@4Yy*eo3j z84a}YcL&o6nDp#)7D-C#Xcg3%CHV?T?(jyJi2SA1&k6GPt~Jm?N*RbOe%I=)OgBjX zAWwqXx9xqZkPvX*-1_(eF;QhO>)))MX-bIjGJ?N8Cd*+K%Cmc>j}C75>e6L+aD7f+ zd0ySVI-HtIgr3Jl{LEW9pR*vg333(>5$Xq7oMY9EtT_C7xL0rMD?N+ejEal%5R ztqq)g+`F?58zUj>w&57~W$a#-%{0L!k%?rgC zHqq-^Gl!_hvp1x@5E(r=5bvBx(~9xxk|LWz=cp6m4~KSF^@P~tal60g^5eLk#wi!;VAU_f<|&m^%Y&;FBe7krDC(;o3~`HNjsp$$bQ8Lj<1oev!N*?r1$UdQ9Un{2WE+{Ws*Ax|oMNFaAaAZJB5_lMdYJ~B;8Jh`_4+@a=F?rH!_DW}S)_Iz3L@en;TrT;S=&1{M{Dc$xxNx8Q&O>I~ zn7bD1M3Q(HQn&MYMW-`|J?GhisqViv6Y@lghdz5de8gx9*HOFFXN&3TeUz1pSSr!1+e&UW8!mFF*1F6J8VER0m{N_V9P-+ZnO*e; zdtTAd_YNC#igS;g%9?+w5sMH8LcS?EYaO4-TQBsq_E_)^^e#|~tn-Ysp?_#m%{-Sm227k~+dn@`A?x@%!1+gD z?Cr{F>jITTAVJ`rJM>Dobh7O)S&tt>M*i|NIuH5Yg|Z;JxTT_CI9m8c`Vw{w%9TUS zKJhAZ8IMCpViX-`!0AHI+iEiG>d&Yu^lF41^ca#nQ}CSO#w-n~qEyD`{Dt=8te~Lp z*5N@jJ8#(-pEU=rhpl`K>7s0A{f@hKUpD2b)#c>F%Qp4RKI&!9_&^N4JYX2xTedjs zn(L6AmPwk}oZtwm-|E6Xl5ZjpNfeOv|T5mitI7(3Pys0GI=RbaVfKmvf zDwV`dlar$BWVkVSY}7O?w1NFP=CghE)WlHXE)j?$r2~FToj~E8iM^YU7sygC{_)f$ zG_=ulh>%n6W}t&z%u`wHpXd4}2j`1z6F66sT4Dho)KZzD!ZswqY8V=7QNuc6)$B1k z`1Tw-Qk%D}Qhm^h1e~q&c<^=Y#I#2j_s~01E}%T(Flj`gp@_OSX-%>Bl2o5ldOmQSf4r{V7&}2s$By5*; zts}ISa{vN9iqW=$2D;VCo>+jxGvIphPZj9@X<`fpufEU;h_yQYc37WHl9R?hs6B>d z0%dAXHB<%%C|Ejqv&oI@bA0-8S=9UYS@_*{okDvx!WIc0L#7-hb(_XL;I$jnJ=9Vc zMu-0GrY!!`?}7!sKGsl5W=fJ8wx4I}9Z(Z$>D0RU3ch1opT8O{{i)7KvnZpsPDS4N zU5nN^dz{|tc6JyiZ@73U9{m8Wm*X@1FYCqg!IBCta#b`(Men|WrsW_)6?vz!;MN*0 zL7)zSR@?O44cPMBg?>^g&}oaCyCOa0j#n*?6~$$*lIN*#dpll(dpm4iDPH<;xdZk# zIR~Luxg_xJzR9uTsO^3nz>CR zWeIp#b4PNv)Is=Mv$$*vUONfS-|9hd#VbEzT-K2*Ir*d<#-)oFSLm0RIg*ir0v5Y-qV@Zzx6#@F6Vev)5lU)n7r!a&YT!nb>4Z>HySE9%iU8|4lL<+_9FGKXuq2d^=7mK4+C~Xbd z%1?UoRSJmY?H{0CPm2^@o{`#FM_?w0LTfo!uls~J>y^V}o)>f8e#_ZYvn%sVb)=2z zy_;!t00WK}cl%^`g^2voKc*qiEf$eU*BwLSQ-XuZ?3KT@u&5J865>2lb#eMH8(?`P zHpeCmGi92ZAI-z3C-E>PGE|c6!SAzi?4{IioAD+@%n6aIA&qsys#4cFltafEt+#A! zSFp7it-RZPVFHN?ZiePKK<2xOoRk^cc!4hdjcCZFSg|}rDndTd)^*Q{$gCQ&P=G!S+gOdESsPS`xOs3^bBvp82gxy|S1!!>YFv#131TD%_@m5TEvhl- zb;vb!$VcAWryj3j``4tK+JJo|E>A6;2RIa!2+)s04397+Yf!|q-qs?^pmYq_{!KQU zf))u)3WB|I#aCa8tLP`5hBUSMI*So4C5WA#^^-_tpB5PT3p1_Tb=*tm{9?~4r?Pus z8Noq77K^WL1STKidYWGLnU)EBV=N&i$sM03LGFl!YOR(DP(|5Evg1w77PEFFkT{a) zge|5Z;5O#k62JB4#rdnT(#(LYAKtojsYQqmq&M_j?MjrMWKs(%8{*$RfL3h5*J^2&{A30xSt( zY<~qGx0gak!)oC1j@f>Lw~dY1P8YdC9x0JbSo=l3 z{Hj{(m=~y#SPdF;$E{WAk!*5fcobr4b<>SK{O81wU!n&D&Ihl^07?&>$$wq;9Lkrb z)i7#yfPq@d&VZ`GopdQjgTCVU2BCLBZxW&~mvNdjb(j4}L{Q#VO-9-|O#xbS=Y%!c z=8%q(wW=d*3^Qfgo#79~biG&^I7#2G^tmINjDBU-U7RhinYE$P{#q0Pl`I9i4jFkVSb@5PVC?`%eHpa|N(4v98@9_B z$wGHYhDr={dUI+N;}-b@M{aUlcoU_t3zo?)d8-WrjR7EZMNQ1U(j}D#}WOK zGK;%Bu=r!kBgylhdaX^giJWesTF?lCRDMYyQjB$S)AfEX)mJ6?o?A)x@iLQS+QMJk zH#w5tq*@;3?%fnSe|-3CvWC&??jE?hYp`$)g3LC1gBHTH^IOV!NOoci)?k!F8D*L8 ztRJ)ouyskHLmLb{Tf5GV$v3BtEYd-qyS90Do0q`eHup?$ysCa#_}uxStY)kNTrW5@ zQP5ZYgSLy3)6>+p=9 zU)U9WH|{Jv!U`@)iiPkfOMl@Wy669+Rc3is#G%i;YlzOJk}0R@UDuQTj-SciSLd!=Y2&p!C^kbWnWN@iGt z6`S)sxUZ5yn>Gf^zm5~|7L+9&FUVMo!|E@y4=LvE4iJx@4eP6a_om+^`7|suima1B z!-hI!%QXdUBlJh8P42_b7bv8Gb#f9Fj2=gN!U|yn2C;E4)M51(LG^agcSm4%C<6II zpR3eYU3F|XeZ@(X%tOs2!6vz6#w*b-u)$)*?W=*WJA>dROz`ou@5i)rWDo6v{a=#7 zcDslVGK0H6pu{DWYdF^RlI-5zlg5^#MYk1C-IyPzAs6sNUqPF1#H+Ca(l^1v(gyK-xvR_n5K=4RaNG z`SxD*>(!NlF}eQgg5(w3Y=2mYY5G4BsDBBh!1~C7&N>5zJO4eg*!*?FS)3U~XQkEH$551`J1*=)> z6Wlomv(Vr9k(c>Iwl`A|Slq!_7i18{`Fygi2d|H^`ZH8RmMfzyi4<5c8RbzrDN*J+ zr3|N|FkDZqy`c|g*_ue|#Q$2@1Ul|8f#KUes6(aQ@(Ll6VGgX8P8Q*hq@twWUYdp) z2RPsoZt}q+_2OvWJ}27CFM?fN3ExD3hGU{o!VO)UzvqDQ!5ulKpo*0Nf7JcDVfEU$ zsWN78J496dHF#HXd;3K*_(O2z$|&OgH8a+_D zyFZ~Vyx!v0if*!!dkjmV=p8>e1@BxeOElQkg}R9(TZf4_>&?zOHq|Y%^j9& zy0%F;Xk8qxeG)L4OqZZ0Ue-^Uk(R_wjSUJ*{x+(jXH8$nnX({rfYKakYiw@xdt(w4 z=S6+ile7*ij>HF0bnX0URMz&(&2_1IxSLhZ&3%c^h)7`$1# z3`&qk*Qr>GL39^{fJPzst4r)_#UBX%VtkqHx;^ijy@KsdmcWLpTu;Btk z0>+e!Z64pZ-_CG)`<%b;;w(F2LQeTcWnZ&glVhjz+v?_GA&^RtFMqF@pUL4D!)J*> zG4dtBPsTHkVk={AAldZGSregNpFihL&;Dg_ z|5b-K#mdo;0BF%fF>~%Tjs4r7wo(DM%1NAkTr-XZca1yupi7!omk@cc$6XVl)xyKb zS8M;9vMMoJE_+qCO>Csk)XSaD0+uy|)AkuFs&G?da{I;nyIB`_m#@M~CCv3~^b2EcB51uPsp^O&m<=p3i z@|YYpBbgPhiA*>6QpPn7_4+dwx~5U)?MVnEGFjb$3J~1l9li8OM;?5Sn)v?FRa`RA z79_DvUt(MLEyM5|q-FbZzSf+l%&8#!a_vMJ3l>~Orem=TnvlDZ9^faYN<%!PPWMz_ zJaES6>FgbB@Iqe~LGGU0OR{qFbc{w8B0NV?Z@%n@eMml0JbW|@X4o}Hzt|H=R9Mt{ zzLx#)ZupuFrtz$E7-qDtap`Y%53Rw|6<+eu+dqq<17e6~EJAAgMo`_2^F>RvZ#m9y zp3I$3<_yBbe!KPJ9M&!n97l#R$|_qDnsKHH$7eZCsekf^6V{2&Fw~z3E=FWkqzjR`VI$2>t#KIX1 z9S&Nko@7`TgjsvLH(Yn(jGVUkwviL7eg)Q$lD*BTQG$g_7+ z{#ND{{G7GgpK+21Nt6!Lef#$Y2f{SPiY# zzpv5xr^@q~D#%9TWW*&WBu`hw`?YKAowl7Fl?q)Pa>??Xibul|4(G~^_CBX@o2UN- zqLM`&At8b)C!#dnxA=s1IyRCoWwPmV9yV?t$lLwJ@Ba5p$KecF^s1oVS<6T%v`?pl zr(%}zNr2VwbED%|bLm>8S=BC#T=C!4gx#I2;@0Z#BR4LLW93a;d8W&r=M`a!QM829 zr;?f@^*X)^ZoY_k8nDXb`MO%f!4j#2?_6o6EO?FBHHR}gMS8w14EE)+iYlf`TsAbO zLpfeptJHu0)rgPfnS(BSmb$`H!A~>^L-Np1iN--?%-!=_d4Bx8A2}&FY*uDaXCdbaMGXFf&T)dWF8`R5a`msP zEzWjuGV?JiZJ%}324(c9ijfNBKo++-6?>D~aNjJsBU3vFH+Pb&n1MOdcU!^<+#wI`=cRzd2RKuu=kp|NEd^PzEFMOTeOgL~ohFqXIi)LAPko$J2M1@#LN zyOT15pI3`W;Z@cy&RytA87*q+1{X=)Hz)Qo!pcE=cx1+Tdpu+W_|WgH6GWWqwHmXc zVrjy?-YZDTc1|t9Ce6_aBy(1e-YQU=36wiOI&iYaSmIbBVl*4O$DIB%hs4wC&&;;=IXOz9GB!T<3Jf&{K zjvtJ4G{0@1g~T+Act|L!2 zrlF7S4%^zVT#iA5X{bai!3<>O@;!|(t+u4gzH$R>;AMsgq$MX({(v5-Vn4fN+3r8c zh5w+>?I~fHS6nAeCE=n;?KsJ*c==&E$~9yjS~~Z=JukMrXLcIffzo;r3v~gj!01u* z)5Qa3xyO?AXm{x(wtgq=9PnF9;x4d9f~P^RqdK%4=@I9s!xUHlO!y$oDU!PDp-jyhs5|Gg>R=)!-kO>mJ^Dzq+dM zqvez+uCoGwziKh7y{+KXvIl0XNW?T<{}nVcGB+#2K)1U-2$p-KzJJr~-STx%D4m0q zLqwb@Wy{*nJDv+1_xgS0!;(r%GUUbd*R^4UPPIL_O&dzu5cgHRRx%gyLWE!yKT^2z3vq8bn*_3rT zz3)uYRe&#U@ZO1~J~N^4@B61^0dIpZf|=uP^!60tC+ekAd>eOH2Vgkq-| zQAjyoW+Bc?I8SpdsqubX4A;H80RkBOXph*Inc#-B$Ej-<3DMT>u79~pnKOYej7dk@ zLXl?Wpun_R-m9DU_d)P~B;}6qhec7#xkQW2a7)4V>Yeb1F6Cz|S$U)x;H(8zQNOkJR`b zG&_P!WW$j8bj+4My|+*}X^DPemVww14J(u58zsb4r;54Xs~sZj7MOKek588Gilt&Z z0`0@ACXAA@lGzs=m6D!X|J$xCtB^jFdjZh)5bwI=%nfPvYwPW0(~JY4My+?e%ORK!0|M$ko>-D zZx8R8bGTy$(Zd+aUDDtcoEzjnE?+(YW!7$;&9cJM7*47Y??wVklsZrFS!V5P%;(N# z4PbeDBWeHbAZv*GG z%6r*n_OzMg$DxRM>eP2@qCi0z#<>shP7JQQvKi6!ZuxFApI_=B(P}h`r{ln{* z_T3m^gtb_sHQ3&=luhIazQAZWgN?0c+8qp?L++yWE7&rN{pV40RpugVUhPzED`adgy{Va9qQ*vj}^kLs78Z8%t9HJUj zionU`-y4RW7s9>ol<63Qu=N1@pLc24Wad-iMQ)&j&QjXJQH=ztC#QYwb>$!?f5w`- zhpl7ZZSqG>I+8+$(i9$rl@+P>uk;iCm+P|-Y*gtI!8piR_}V&V7GkW#*%3oYHL{hts&IC6w8TK#B(wB) zCO17pA402hbiAZy@*FU`7>eT0vT(CqRjMYKn}++~+6FZ~mKeCC>65F(?Vb~28=^|P zpn7Zp*))mzB#g_AabS**GL3s7V}Og1(5e?tlbut~mFB|Df2G8z1olRocbb57N;fl> zMNqp>cv8!s1KEF;lv8Ue!K-YQ$CEADd<}I8E+&3oc6TJR#~u^!!brm)Y$w?N2tysKsg8*B#pDv@0*TlutAC zt4_LlW@_g|rv_U1j^YC*t4%^vCBtZLHhcU61=PsoVD2R0H%l(BgwkJvd?TbovhsPD z-`9>w*e#2~E>R=Kie*e#PQqhDPTph)~?N zlqa0RcX45ByJ?6?s{qYD>7x>+s1CtGqY@< z9Z3uw+uS_TJQYprhC;ch>h=b^=4R2V+s~7L)y2(+969ZoCJ5sOxv=6%3${Q2uVc?7 z=ZpQ;P~rHT0#V}~7i{fJomlaKwGRS<*!WShKvz25;GDip#Gs}ObBm}Bioa}X5|3gt z$J|w663{53yu6i>Wi^ew>3Bsr9^=D z(93!jaDD8_&NL8DRQc*h{~QM8(Oji*t&wl2?raZdPo49g4EjX>ZpHP(07+eN_vGO> z2q6R3m*YkH;2F^}q7Mfpls-riMok#8JMywVL{59a!_^8C^8Ibt?Vo@vX}NT>@0T<> zu>J{zx11Ir*)5V3Q|J9!cNZ?@Ddy)(SQKcfrgM0_5Cu65B)J-mcYpLvLtf3!U)Hgl zi8^Qyh#soD&qiG2?Wid&v;*5C?v42drxKrJn*^^66Z$%7BCRl)y!Q}e()w}7h7kFaon4Qbozceh5Jn)>{e5KcI>wuOz5)&t0ZtXcfh@eQILIOg ztv1smjvg(!P&A8#Bwl5fe@d(`;0te{pTR2BZ1E8QyJbE^u+b8-EqB(Lq5(xDyYV1$WP!oj~ zNI8vsUN>n9zJ?qpx*`0aKHYz6+XJzxZ2Cd-5T2_v^Ct*R5^A$wKdzjWMXK36{mU+T z8G@#n)UH55fc+J_3-3zs;xUtVmf| zg)c_?r}n7JdXKWWBaOWgWo9-%zg6f4=z1|1%)-CZmZlSYY;cKizTYhoQ!q_nT*$8h zn})AUhOmc&1^7+f5E}3&4=DQ(@M8sT2!D&2E9otlR_9q={}%|YSGKc@QJ_R4;`&&= zR{Z{c1;#ztJs8hKcpimI#XyOl9SH?Gs;M07HzG;323ErVjG_!7IwwSZpcniVs6CrA R$o-F#Ei0uYSubu9`hRsbzRv&v literal 0 HcmV?d00001 diff --git a/build/windows10/liblinphone-tester/Assets/SplashScreen.png b/build/windows10/liblinphone-tester/Assets/SplashScreen.png new file mode 100644 index 0000000000000000000000000000000000000000..0d83a79808b3739c0ec0dbfbbdd308256e52fd91 GIT binary patch literal 29889 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 EA2)jil>h($ literal 0 HcmV?d00001 diff --git a/build/windows10/liblinphone-tester/Assets/WideLogo.scale-100.png b/build/windows10/liblinphone-tester/Assets/WideLogo.scale-100.png new file mode 100644 index 0000000000000000000000000000000000000000..85fd4db8fa81ab0e982fbd2e0b7a23344c6dce57 GIT binary patch literal 21480 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%0A8Bkzzr10@TZ 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 literal 0 HcmV?d00001 diff --git a/build/windows10/liblinphone-tester/DataModel/UnitTestDataSource.cs b/build/windows10/liblinphone-tester/DataModel/UnitTestDataSource.cs new file mode 100644 index 000000000..a5bc5bdc3 --- /dev/null +++ b/build/windows10/liblinphone-tester/DataModel/UnitTestDataSource.cs @@ -0,0 +1,251 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using liblinphone_tester_runtime_component; +using System.Collections.ObjectModel; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; +using Windows.UI.Xaml.Data; +using Windows.UI.Xaml.Media; +using System.ComponentModel; +using Windows.UI; +using Windows.UI.Xaml.Documents; +using Windows.UI.Core; + +namespace liblinphone_tester.DataModel +{ + public class OutputTrace + { + public OutputTrace(String lev, String msg) + { + Level = lev; + Msg = msg; + } + + public String Level { get; private set; } + public String Msg { get; private set; } + } + + public class UnitTestSuite + { + public UnitTestSuite(string name) + { + Name = name; + Cases = new ObservableCollection(); + Selected = false; + } + + public string Name { get; private set; } + public bool Selected + { + get { return Cases.All(x => x.Selected); } + set + { + foreach (UnitTestCase c in Cases) + { + c.Selected = value; + } + } + } + public ObservableCollection Cases { get; private set; } + } + + public enum UnitTestCaseState + { + NotRun, + Success, + Failure + } + + public class UnitTestCase : INotifyPropertyChanged + { + public UnitTestCase(UnitTestSuite suite, string name) + { + _suite = new WeakReference(suite); + Name = name; + Selected = false; + State = UnitTestCaseState.NotRun; + Traces = new ObservableCollection(); + } + + public UnitTestSuite Suite + { + get { return _suite.Target as UnitTestSuite; } + } + public string Name { get; private set; } + public bool Selected + { + get { return _selected; } + set + { + _selected = value; + RaisePropertyChanged("Selected"); + } + } + public UnitTestCaseState State + { + get { return _state; } + set + { + _state = value; + RaisePropertyChanged("State"); + } + } + public ObservableCollection Traces + { + get { return _traces; } + set + { + _traces = value; + RaisePropertyChanged("Traces"); + } + } + public CoreDispatcher Dispatcher { get; set; } + + public event PropertyChangedEventHandler PropertyChanged; + + protected void RaisePropertyChanged(string name) + { + if (PropertyChanged != null) + { + PropertyChanged(this, new PropertyChangedEventArgs(name)); + } + } + + private WeakReference _suite; + private bool _selected; + private UnitTestCaseState _state; + private ObservableCollection _traces; + } + + public sealed class UnitTestDataSource + { + private static UnitTestDataSource _unitTestDataSource = new UnitTestDataSource(); + private ObservableCollection _suites = new ObservableCollection(); + + public ObservableCollection Suites + { + get { return this._suites; } + } + + public static IEnumerable GetSuites(LibLinphoneTester tester) + { + return _unitTestDataSource.FillSuites(tester); + } + + private IEnumerable FillSuites(LibLinphoneTester tester) + { + if (this.Suites.Count != 0) return this.Suites; + for (int i = 0; i < tester.nbTestSuites(); i++) + { + UnitTestSuite suite = new UnitTestSuite(tester.testSuiteName(i)); + for (int j = 0; j < tester.nbTests(suite.Name); j++) + { + suite.Cases.Add(new UnitTestCase(suite, tester.testName(suite.Name, j))); + } + this.Suites.Add(suite); + } + return this.Suites; + } + } + + public sealed class UnitTestCaseStateToSymbolConverter : IValueConverter + { + object IValueConverter.Convert(object value, Type targetType, object parametr, string language) + { + if (!value.GetType().Equals(typeof(UnitTestCaseState))) + { + throw new ArgumentException("Only UnitTestCaseState is supported"); + } + if (targetType.Equals(typeof(Symbol))) + { + switch ((UnitTestCaseState)value) + { + case UnitTestCaseState.Success: + return Symbol.Like; + case UnitTestCaseState.Failure: + return Symbol.Dislike; + case UnitTestCaseState.NotRun: + default: + return Symbol.Help; + } + } + else + { + throw new ArgumentException(string.Format("Unsupported type {0}", targetType.FullName)); + } + } + + object IValueConverter.ConvertBack(object value, Type targetType, object parameter, string language) + { + throw new NotImplementedException(); + } + } + + public sealed class UnitTestCaseStateToSymbolColorConverter : IValueConverter + { + object IValueConverter.Convert(object value, Type targetType, object parameter, string language) + { + if (!value.GetType().Equals(typeof(UnitTestCaseState))) + { + throw new ArgumentException("Only UnitTestCaseState is supported"); + } + if (targetType.Equals(typeof(Brush))) + { + switch ((UnitTestCaseState)value) + { + case UnitTestCaseState.Success: + return new SolidColorBrush(Colors.ForestGreen); + case UnitTestCaseState.Failure: + return new SolidColorBrush(Colors.IndianRed); + case UnitTestCaseState.NotRun: + default: + return new SolidColorBrush(Colors.LightGray); + } + } + else + { + throw new ArgumentException(string.Format("Unsupported format {0}", targetType.FullName)); + } + } + + object IValueConverter.ConvertBack(object value, Type targetType, object parameter, string language) + { + throw new NotImplementedException(); + } + } + + public sealed class OutputTraceLevelToColorConverter : IValueConverter + { + object IValueConverter.Convert(object value, Type targetType, object parameter, string language) + { + if (!value.GetType().Equals(typeof(String))) + { + throw new ArgumentException("Only String is supported"); + } + if (targetType.Equals(typeof(Brush))) + { + if ((String)value == "Error") + { + return new SolidColorBrush(Colors.IndianRed); + } + else if ((String)value == "Warning") + { + return new SolidColorBrush(Colors.Orange); + } + return new SolidColorBrush(Colors.Black); + } + else + { + throw new ArgumentException(string.Format("Unsupported format {0}", targetType.FullName)); + } + } + + object IValueConverter.ConvertBack(object value, Type targetType, object parameter, string language) + { + throw new NotImplementedException(); + } + } +} diff --git a/build/windows10/liblinphone-tester/MainPage.xaml b/build/windows10/liblinphone-tester/MainPage.xaml new file mode 100644 index 000000000..2cdea219c --- /dev/null +++ b/build/windows10/liblinphone-tester/MainPage.xaml @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/build/windows10/liblinphone-tester/MainPage.xaml.cs b/build/windows10/liblinphone-tester/MainPage.xaml.cs new file mode 100644 index 000000000..043713796 --- /dev/null +++ b/build/windows10/liblinphone-tester/MainPage.xaml.cs @@ -0,0 +1,197 @@ +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices.WindowsRuntime; +using Windows.Foundation; +using Windows.Foundation.Collections; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; +using Windows.UI.Xaml.Controls.Primitives; +using Windows.UI.Xaml.Data; +using Windows.UI.Xaml.Input; +using Windows.UI.Xaml.Media; +using Windows.UI.Xaml.Navigation; +using liblinphone_tester.DataModel; +using liblinphone_tester_runtime_component; +using System.Threading.Tasks; +using Windows.UI.Core; +using Windows.UI.Xaml.Documents; +using Windows.Storage; + +// The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409 + +namespace liblinphone_tester +{ + /// + /// An empty page that can be used on its own or navigated to within a Frame. + /// + public sealed partial class MainPage : Page, OutputTraceListener + { + public MainPage() + { + this.InitializeComponent(); + } + + protected override void OnNavigatedTo(NavigationEventArgs e) + { + base.OnNavigatedTo(e); + _suites = UnitTestDataSource.GetSuites(LibLinphoneTester.Instance); + TryAutoLaunch(); + } + + public IEnumerable Suites + { + get { return _suites; } + } + + private IEnumerable _suites; + + private void SelectAll_Click(object sender, RoutedEventArgs e) + { + bool allSelected = Suites.All(x => x.Selected); + foreach (UnitTestSuite suite in Suites) + { + suite.Selected = !allSelected; + } + } + + private void RunSelected_Click(object sender, RoutedEventArgs e) + { + int nbCases = 0; + foreach (UnitTestSuite suite in Suites) + { + foreach (UnitTestCase c in suite.Cases) + { + if (c.Selected) nbCases++; + } + } + if (nbCases == 0) return; + + PrepareRun(nbCases); + + var tup = new Tuple, bool?>(Suites, Verbose.IsChecked); + var t = Task.Factory.StartNew(async (object parameters) => + { + var p = parameters as Tuple, bool?>; + IEnumerable suites = p.Item1; + bool verbose = p.Item2 != null ? (bool)p.Item2 : false; + foreach (UnitTestSuite suite in suites) + { + foreach (UnitTestCase c in suite.Cases) + { + if (c.Selected) + { + await RunUnitTestCase(c, verbose); + } + } + } + }, tup); + } + + private void RunSingle_Click(object sender, RoutedEventArgs e) + { + PrepareRun(1); + + var tup = new Tuple(DisplayedTestCase, Verbose.IsChecked); + var t = Task.Factory.StartNew(async (object parameters) => + { + var p = parameters as Tuple; + UnitTestCase c = p.Item1; + bool verbose = p.Item2 != null ? (bool)p.Item2 : false; + await RunUnitTestCase(c, verbose); + }, tup); + } + + private void PrepareRun(int nbCases) + { + CommandBar.IsEnabled = false; + ProgressIndicator.IsEnabled = true; + ProgressIndicator.Minimum = 0; + ProgressIndicator.Maximum = nbCases; + ProgressIndicator.Value = 0; + LibLinphoneTester.Instance.setOutputTraceListener(this); + } + + private async Task RunUnitTestCase(UnitTestCase c, bool verbose) + { + UnitTestCaseState newState = UnitTestCaseState.NotRun; + await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => + { + RunningTestCase = c; + }); + await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => + { + c.Traces.Clear(); + }); + c.Dispatcher = Dispatcher; + if (LibLinphoneTester.Instance.run(c.Suite.Name, c.Name, verbose)) + { + newState = UnitTestCaseState.Failure; + } + else + { + newState = UnitTestCaseState.Success; + } + await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => + { + c.State = newState; + ProgressIndicator.Value += 1; + if (ProgressIndicator.Value == ProgressIndicator.Maximum) + { + UnprepareRun(); + } + }); + } + + private void UnprepareRun() + { + LibLinphoneTester.Instance.setOutputTraceListener(null); + RunningTestCase = null; + ProgressIndicator.IsEnabled = false; + CommandBar.IsEnabled = true; + } + + private void UnitTestCase_Click(object sender, ItemClickEventArgs e) + { + DisplayedTestCase = (e.ClickedItem as UnitTestCase); + TestResultPage.DataContext = DisplayedTestCase; + TestResultState.Visibility = Visibility.Visible; + TestResultRun.Visibility = Visibility.Visible; + } + + public async void outputTrace(String lev, String msg) + { + await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => + { + if (RunningTestCase != null) + { + RunningTestCase.Traces.Add(new OutputTrace(lev, msg)); + } + }); + } + + private async void TryAutoLaunch() + { + try + { + await ApplicationData.Current.LocalFolder.GetFileAsync("autolaunch"); + CommandBar.IsEnabled = false; + ProgressIndicator.IsIndeterminate = true; + ProgressIndicator.IsEnabled = true; + LibLinphoneTester.Instance.runAllToXml(); + if (LibLinphoneTester.Instance.AsyncAction != null) + { + LibLinphoneTester.Instance.AsyncAction.Completed += (asyncInfo, asyncStatus) => { + App.Current.Exit(); + }; + } + } + catch (Exception) { } + } + + private UnitTestCase RunningTestCase; + private UnitTestCase DisplayedTestCase; + } +} diff --git a/build/windows10/liblinphone-tester/Package.appxmanifest b/build/windows10/liblinphone-tester/Package.appxmanifest new file mode 100644 index 000000000..15b79a967 --- /dev/null +++ b/build/windows10/liblinphone-tester/Package.appxmanifest @@ -0,0 +1,48 @@ + + + + + + + + + + liblinphone-tester + Belledonne Communications + Assets\StoreLogo.png + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/build/windows10/liblinphone-tester/Properties/AssemblyInfo.cs b/build/windows10/liblinphone-tester/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..d4b2a0c81 --- /dev/null +++ b/build/windows10/liblinphone-tester/Properties/AssemblyInfo.cs @@ -0,0 +1,29 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("liblinphone-tester")] +[assembly: AssemblyDescription("LibLinphone tester for Windows 10")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Belledonne Communications")] +[assembly: AssemblyProduct("liblinphone-tester-windows10")] +[assembly: AssemblyCopyright("Copyright © 2015 Belledonne Communications")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] +[assembly: ComVisible(false)] \ No newline at end of file diff --git a/build/windows10/liblinphone-tester/Properties/Default.rd.xml b/build/windows10/liblinphone-tester/Properties/Default.rd.xml new file mode 100644 index 000000000..80a960ce3 --- /dev/null +++ b/build/windows10/liblinphone-tester/Properties/Default.rd.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/build/windows10/liblinphone-tester/liblinphone-tester-runtime-component/liblinphone-tester-runtime-component.vcxproj b/build/windows10/liblinphone-tester/liblinphone-tester-runtime-component/liblinphone-tester-runtime-component.vcxproj new file mode 100644 index 000000000..be2267db5 --- /dev/null +++ b/build/windows10/liblinphone-tester/liblinphone-tester-runtime-component/liblinphone-tester-runtime-component.vcxproj @@ -0,0 +1,121 @@ + + + + + Debug + ARM + + + Debug + Win32 + + + Debug + x64 + + + Release + ARM + + + Release + Win32 + + + Release + x64 + + + + + + + + + + + {8c1bc968-c5c8-4d4b-9ef3-d6a065fc7c97} + + + {6a18bbb9-08d1-41a8-be57-17fc992cc36f} + + + {b84d5c3b-6de5-49c8-b3dd-5eb67b01a527} + + + {266b769a-c04e-424c-9033-7209f0425bc0} + + + {878cf9d3-9761-479e-a715-a1de9f99cb78} + + + {9eb3fe8d-2d91-4d29-a3bb-98ddb51d45b7} + + + + {1ce10f06-8fad-437f-b3d7-3b7a8909a190} + WindowsRuntimeComponent + liblinphone-tester-runtime-component + liblinphone_tester_runtime_component + en-US + 14.0 + true + Windows Store + 8.2 + + + + DynamicLibrary + true + v140 + + + DynamicLibrary + false + true + v140 + + + + + + + + + + + + false + + + + NotUsing + IN_LINPHONE;_WINRT_DLL;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + $(WindowsSDK_WindowsMetadata);$(AdditionalUsingDirectories) + /bigobj %(AdditionalOptions) + 28204 + $(ProjectDir)..\..\..\..\coreapi;$(ProjectDir)..\..\..\..\tester\common;$(ProjectDir)..\..\..\..\mediastreamer2\include;$(ProjectDir)..\..\..\..\oRTP\include;%(AdditionalIncludeDirectories) + + + Console + false + + + + + NotUsing + IN_LINPHONE;_WINRT_DLL;NDEBUG;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + $(WindowsSDK_WindowsMetadata);$(AdditionalUsingDirectories) + /bigobj %(AdditionalOptions) + 28204 + $(ProjectDir)..\..\..\..\coreapi;$(ProjectDir)..\..\..\..\tester\common;$(ProjectDir)..\..\..\..\mediastreamer2\include;$(ProjectDir)..\..\..\..\oRTP\include;%(AdditionalIncludeDirectories) + + + Console + false + + + + + + \ No newline at end of file diff --git a/build/windows10/liblinphone-tester/liblinphone-tester-static/liblinphone-tester-static.vcxproj b/build/windows10/liblinphone-tester/liblinphone-tester-static/liblinphone-tester-static.vcxproj new file mode 100644 index 000000000..08ad38958 --- /dev/null +++ b/build/windows10/liblinphone-tester/liblinphone-tester-static/liblinphone-tester-static.vcxproj @@ -0,0 +1,127 @@ + + + + + Debug + ARM + + + Debug + Win32 + + + Debug + x64 + + + Release + ARM + + + Release + Win32 + + + Release + x64 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {b6cdf482-7da3-43d4-9b12-70150106c191} + + + {025e28a8-9dfb-4015-ad56-19896aa6cc9b} + + + {88e3c241-eb6f-4c84-80dc-89b8961daf80} + + + {2e56b851-9d8d-40e5-84bb-e4ee63b71d25} + + + {c7139899-d8bc-48a3-a437-6844a8baabef} + + + + {9eb3fe8d-2d91-4d29-a3bb-98ddb51d45b7} + StaticLibrary + liblinphone-tester-static + liblinphone_tester_static + en-US + 14.0 + true + Windows Store + 8.2 + + + + StaticLibrary + true + v140 + + + StaticLibrary + false + true + v140 + + + + + + + + + + + + false + + + + NotUsing + false + true + $(SolutionDir)$(Platform)\$(Configuration)\include;$(ProjectDir)..\..\..\..\tester;$(ProjectDir)..\..\..\..\tester\common;$(ProjectDir)..\..\liblinphone;$(ProjectDir)..\..\..\..\coreapi;$(ProjectDir)..\..\..\..\include;$(ProjectDir)..\..\..\..\mediastreamer2\include;$(ProjectDir)..\..\..\..\oRTP\include;$(ProjectDir)..\..\..\..\..\belle-sip\include;$(ProjectDir)..\..\..\..\..\cunit\build\windows10\cunit\$(Platform)\$(Configuration);%(AdditionalIncludeDirectories) + BC_CONFIG_FILE="config.h";IN_LINPHONE;VIDEO_ENABLED;_CRT_SECURE_NO_WARNINGS;_WINSOCK_DEPRECATED_NO_WARNINGS;%(PreprocessorDefinitions) + + + Console + false + false + + + + + + \ No newline at end of file diff --git a/build/windows10/liblinphone-tester/liblinphone-tester.csproj b/build/windows10/liblinphone-tester/liblinphone-tester.csproj new file mode 100644 index 000000000..7bb05da84 --- /dev/null +++ b/build/windows10/liblinphone-tester/liblinphone-tester.csproj @@ -0,0 +1,177 @@ + + + + + Debug + x86 + {EC78E1D3-6FD8-4CAF-8D3F-6F4F97093BE5} + AppContainerExe + Properties + liblinphone_tester + liblinphone-tester + en-US + UAP + 10.0.10069.0 + 10.0.10069.0 + 14 + true + 512 + {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + liblinphone-tester_TemporaryKey.pfx + + + + + true + bin\ARM\Debug\ + DEBUG;TRACE;NETFX_CORE;WINDOWS_UAP + ;2008 + full + ARM + false + prompt + true + + + bin\ARM\Release\ + TRACE;NETFX_CORE;WINDOWS_UAP + true + ;2008 + pdbonly + ARM + false + prompt + true + true + + + true + bin\x64\Debug\ + DEBUG;TRACE;NETFX_CORE;WINDOWS_UAP + ;2008 + full + x64 + false + prompt + true + + + bin\x64\Release\ + TRACE;NETFX_CORE;WINDOWS_UAP + true + ;2008 + pdbonly + x64 + false + prompt + true + true + + + true + bin\x86\Debug\ + DEBUG;TRACE;NETFX_CORE;WINDOWS_UAP + ;2008 + full + x86 + false + prompt + true + + + bin\x86\Release\ + TRACE;NETFX_CORE;WINDOWS_UAP + true + ;2008 + pdbonly + x86 + false + prompt + true + true + + + + App.xaml + + + + MainPage.xaml + + + + + + Designer + + + + + + + + + + + + + + + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + + + + + packages\Microsoft.ApplicationInsights.0.14.3-build00177\lib\portable-win81+wpa81\Microsoft.ApplicationInsights.dll + True + + + packages\Microsoft.ApplicationInsights.WindowsApps.0.14.3-build00177\lib\win81\Microsoft.ApplicationInsights.Extensibility.Windows.dll + True + + + packages\Microsoft.ApplicationInsights.PersistenceChannel.0.14.3-build00177\lib\portable-win81+wpa81\Microsoft.ApplicationInsights.PersistenceChannel.dll + True + + + packages\System.Numerics.Vectors.4.0.0\lib\win8\System.Numerics.Vectors.dll + True + + + packages\System.Numerics.Vectors.4.0.0\lib\win8\System.Numerics.Vectors.WindowsRuntime.dll + True + + + + + {1ce10f06-8fad-437f-b3d7-3b7a8909a190} + liblinphone-tester-runtime-component + + + + + 14.0 + + + + + + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + + + \ No newline at end of file diff --git a/build/windows10/liblinphone-tester/liblinphone-tester.sln b/build/windows10/liblinphone-tester/liblinphone-tester.sln new file mode 100644 index 000000000..dda1be3a9 --- /dev/null +++ b/build/windows10/liblinphone-tester/liblinphone-tester.sln @@ -0,0 +1,432 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.22823.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "liblinphone-tester", "liblinphone-tester.csproj", "{EC78E1D3-6FD8-4CAF-8D3F-6F4F97093BE5}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "liblinphone-tester-static", "liblinphone-tester-static\liblinphone-tester-static.vcxproj", "{9EB3FE8D-2D91-4D29-A3BB-98DDB51D45B7}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "liblinphone", "..\liblinphone\liblinphone.vcxproj", "{C7139899-D8BC-48A3-A437-6844A8BAABEF}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mediastreamer2", "..\..\..\mediastreamer2\build\windows10\mediastreamer2\mediastreamer2.vcxproj", "{88E3C241-EB6F-4C84-80DC-89B8961DAF80}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ortp", "..\..\..\oRTP\build\windows10\ortp\ortp.vcxproj", "{2E56B851-9D8D-40E5-84BB-E4EE63B71D25}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "srtp", "..\..\..\..\srtp\build\windows10\srtp\srtp.vcxproj", "{59104E4F-A087-442E-ABD4-BCD2A1F0B0FE}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xml2", "..\..\..\..\build\xml2\xml2.vcxproj", "{2B04DE79-4D33-4405-AC01-C89E0593A71D}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "polarssl", "..\..\..\..\polarssl\build\windows10\polarssl\polarssl.vcxproj", "{88768DD9-5110-4AC8-8B0E-41CD7713E1A2}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "speex", "..\..\..\..\speex\build\windows10\speex\speex.vcxproj", "{971DD379-1C2D-44D2-9285-FDA556C48176}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "speexdsp", "..\..\..\..\speex\build\windows10\speexdsp\speexdsp.vcxproj", "{104BF91B-8314-4328-A996-90B8DF6052AF}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "opus", "..\..\..\..\opus\build\windows10\opus\opus.vcxproj", "{81AF1025-E0EE-4AD6-988D-2EF162778693}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "bzrtp", "..\..\..\..\bzrtp\build\windows10\bzrtp\bzrtp.vcxproj", "{45C7723D-3107-4906-9633-F43ABE8A7147}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gsm", "..\..\..\..\gsm\build\windows10\gsm\gsm.vcxproj", "{EF1103C7-8AAC-464B-BA31-86B87246FA72}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "belle-sip", "..\..\..\..\belle-sip\build\windows10\belle-sip\belle-sip.vcxproj", "{B6CDF482-7DA3-43D4-9B12-70150106C191}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "antlr3c", "..\..\..\..\antlr3\runtime\C\build\windows10\antlr3c\antlr3c.vcxproj", "{01CCCCC9-CA0C-4528-92BC-5B8BE1D02D6D}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlib", "..\..\..\..\zlib\build\windows10\zlib\zlib.vcxproj", "{A34F450D-392D-4660-9618-810BD695B3B0}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sqlite", "..\..\..\..\build\sqlite\sqlite.vcxproj", "{74CAD9D0-D8AE-4896-B71B-B2D9B48F30AA}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "liblinphone-tester-runtime-component", "liblinphone-tester-runtime-component\liblinphone-tester-runtime-component.vcxproj", "{1CE10F06-8FAD-437F-B3D7-3B7A8909A190}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cunit", "..\..\..\..\cunit\build\windows10\cunit\cunit.vcxproj", "{025E28A8-9DFB-4015-AD56-19896AA6CC9B}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libmsamr", "..\..\..\..\msamr\build\windows10\libmsamr\libmsamr.vcxproj", "{8C1BC968-C5C8-4D4B-9EF3-D6A065FC7C97}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libmsilbc", "..\..\..\..\msilbc\build\windows10\libmsilbc\libmsilbc.vcxproj", "{6A18BBB9-08D1-41A8-BE57-17FC992CC36F}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libmssilk", "..\..\..\..\mssilk\build\windows10\libmssilk\libmssilk.vcxproj", "{B84D5C3B-6DE5-49C8-B3DD-5EB67B01A527}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libmswasapi", "..\..\..\..\mswasapi\windows10\libmswasapi\libmswasapi.vcxproj", "{266B769A-C04E-424C-9033-7209F0425BC0}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libmswebrtc", "..\..\..\..\mswebrtc\build\windows10\libmswebrtc\libmswebrtc.vcxproj", "{878CF9D3-9761-479E-A715-A1DE9F99CB78}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ilbc", "..\..\..\..\libilbc-rfc3951\build\windows10\ilbc\ilbc.vcxproj", "{995B01AF-C568-453E-9E5F-8AE81FB79B4B}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "opencore_amrnb", "..\..\..\..\msamr\build\windows10\opencore_amrnb\opencore_amrnb.vcxproj", "{71A5F1C8-F76D-4297-95AA-75E1C967DC79}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "opencore_amrwb", "..\..\..\..\msamr\build\windows10\opencore_amrwb\opencore_amrwb.vcxproj", "{3CC91899-3E98-49FD-BED5-FA290A9A5C8E}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vo-amrwbenc", "..\..\..\..\msamr\build\windows10\vo-amrwbenc\vo-amrwbenc.vcxproj", "{D829672F-3775-4718-A991-1ABC42CBA67C}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "webrtc", "..\..\..\..\mswebrtc\webrtc\build\windows10\webrtc\webrtc.vcxproj", "{C5895B75-BDCF-406C-B803-9CB954E90F0C}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|ARM = Debug|ARM + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|ARM = Release|ARM + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {EC78E1D3-6FD8-4CAF-8D3F-6F4F97093BE5}.Debug|ARM.ActiveCfg = Debug|ARM + {EC78E1D3-6FD8-4CAF-8D3F-6F4F97093BE5}.Debug|ARM.Build.0 = Debug|ARM + {EC78E1D3-6FD8-4CAF-8D3F-6F4F97093BE5}.Debug|ARM.Deploy.0 = Debug|ARM + {EC78E1D3-6FD8-4CAF-8D3F-6F4F97093BE5}.Debug|x64.ActiveCfg = Debug|x64 + {EC78E1D3-6FD8-4CAF-8D3F-6F4F97093BE5}.Debug|x64.Build.0 = Debug|x64 + {EC78E1D3-6FD8-4CAF-8D3F-6F4F97093BE5}.Debug|x64.Deploy.0 = Debug|x64 + {EC78E1D3-6FD8-4CAF-8D3F-6F4F97093BE5}.Debug|x86.ActiveCfg = Debug|x86 + {EC78E1D3-6FD8-4CAF-8D3F-6F4F97093BE5}.Debug|x86.Build.0 = Debug|x86 + {EC78E1D3-6FD8-4CAF-8D3F-6F4F97093BE5}.Debug|x86.Deploy.0 = Debug|x86 + {EC78E1D3-6FD8-4CAF-8D3F-6F4F97093BE5}.Release|ARM.ActiveCfg = Release|ARM + {EC78E1D3-6FD8-4CAF-8D3F-6F4F97093BE5}.Release|ARM.Build.0 = Release|ARM + {EC78E1D3-6FD8-4CAF-8D3F-6F4F97093BE5}.Release|ARM.Deploy.0 = Release|ARM + {EC78E1D3-6FD8-4CAF-8D3F-6F4F97093BE5}.Release|x64.ActiveCfg = Release|x64 + {EC78E1D3-6FD8-4CAF-8D3F-6F4F97093BE5}.Release|x64.Build.0 = Release|x64 + {EC78E1D3-6FD8-4CAF-8D3F-6F4F97093BE5}.Release|x64.Deploy.0 = Release|x64 + {EC78E1D3-6FD8-4CAF-8D3F-6F4F97093BE5}.Release|x86.ActiveCfg = Release|x86 + {EC78E1D3-6FD8-4CAF-8D3F-6F4F97093BE5}.Release|x86.Build.0 = Release|x86 + {EC78E1D3-6FD8-4CAF-8D3F-6F4F97093BE5}.Release|x86.Deploy.0 = Release|x86 + {9EB3FE8D-2D91-4D29-A3BB-98DDB51D45B7}.Debug|ARM.ActiveCfg = Debug|ARM + {9EB3FE8D-2D91-4D29-A3BB-98DDB51D45B7}.Debug|ARM.Build.0 = Debug|ARM + {9EB3FE8D-2D91-4D29-A3BB-98DDB51D45B7}.Debug|x64.ActiveCfg = Debug|x64 + {9EB3FE8D-2D91-4D29-A3BB-98DDB51D45B7}.Debug|x64.Build.0 = Debug|x64 + {9EB3FE8D-2D91-4D29-A3BB-98DDB51D45B7}.Debug|x86.ActiveCfg = Debug|Win32 + {9EB3FE8D-2D91-4D29-A3BB-98DDB51D45B7}.Debug|x86.Build.0 = Debug|Win32 + {9EB3FE8D-2D91-4D29-A3BB-98DDB51D45B7}.Release|ARM.ActiveCfg = Release|ARM + {9EB3FE8D-2D91-4D29-A3BB-98DDB51D45B7}.Release|ARM.Build.0 = Release|ARM + {9EB3FE8D-2D91-4D29-A3BB-98DDB51D45B7}.Release|x64.ActiveCfg = Release|x64 + {9EB3FE8D-2D91-4D29-A3BB-98DDB51D45B7}.Release|x64.Build.0 = Release|x64 + {9EB3FE8D-2D91-4D29-A3BB-98DDB51D45B7}.Release|x86.ActiveCfg = Release|Win32 + {9EB3FE8D-2D91-4D29-A3BB-98DDB51D45B7}.Release|x86.Build.0 = Release|Win32 + {C7139899-D8BC-48A3-A437-6844A8BAABEF}.Debug|ARM.ActiveCfg = Debug|ARM + {C7139899-D8BC-48A3-A437-6844A8BAABEF}.Debug|ARM.Build.0 = Debug|ARM + {C7139899-D8BC-48A3-A437-6844A8BAABEF}.Debug|x64.ActiveCfg = Debug|x64 + {C7139899-D8BC-48A3-A437-6844A8BAABEF}.Debug|x64.Build.0 = Debug|x64 + {C7139899-D8BC-48A3-A437-6844A8BAABEF}.Debug|x86.ActiveCfg = Debug|Win32 + {C7139899-D8BC-48A3-A437-6844A8BAABEF}.Debug|x86.Build.0 = Debug|Win32 + {C7139899-D8BC-48A3-A437-6844A8BAABEF}.Release|ARM.ActiveCfg = Release|ARM + {C7139899-D8BC-48A3-A437-6844A8BAABEF}.Release|ARM.Build.0 = Release|ARM + {C7139899-D8BC-48A3-A437-6844A8BAABEF}.Release|x64.ActiveCfg = Release|x64 + {C7139899-D8BC-48A3-A437-6844A8BAABEF}.Release|x64.Build.0 = Release|x64 + {C7139899-D8BC-48A3-A437-6844A8BAABEF}.Release|x86.ActiveCfg = Release|Win32 + {C7139899-D8BC-48A3-A437-6844A8BAABEF}.Release|x86.Build.0 = Release|Win32 + {88E3C241-EB6F-4C84-80DC-89B8961DAF80}.Debug|ARM.ActiveCfg = Debug|ARM + {88E3C241-EB6F-4C84-80DC-89B8961DAF80}.Debug|ARM.Build.0 = Debug|ARM + {88E3C241-EB6F-4C84-80DC-89B8961DAF80}.Debug|x64.ActiveCfg = Debug|x64 + {88E3C241-EB6F-4C84-80DC-89B8961DAF80}.Debug|x64.Build.0 = Debug|x64 + {88E3C241-EB6F-4C84-80DC-89B8961DAF80}.Debug|x86.ActiveCfg = Debug|Win32 + {88E3C241-EB6F-4C84-80DC-89B8961DAF80}.Debug|x86.Build.0 = Debug|Win32 + {88E3C241-EB6F-4C84-80DC-89B8961DAF80}.Release|ARM.ActiveCfg = Release|ARM + {88E3C241-EB6F-4C84-80DC-89B8961DAF80}.Release|ARM.Build.0 = Release|ARM + {88E3C241-EB6F-4C84-80DC-89B8961DAF80}.Release|x64.ActiveCfg = Release|x64 + {88E3C241-EB6F-4C84-80DC-89B8961DAF80}.Release|x64.Build.0 = Release|x64 + {88E3C241-EB6F-4C84-80DC-89B8961DAF80}.Release|x86.ActiveCfg = Release|Win32 + {88E3C241-EB6F-4C84-80DC-89B8961DAF80}.Release|x86.Build.0 = Release|Win32 + {2E56B851-9D8D-40E5-84BB-E4EE63B71D25}.Debug|ARM.ActiveCfg = Debug|ARM + {2E56B851-9D8D-40E5-84BB-E4EE63B71D25}.Debug|ARM.Build.0 = Debug|ARM + {2E56B851-9D8D-40E5-84BB-E4EE63B71D25}.Debug|x64.ActiveCfg = Debug|x64 + {2E56B851-9D8D-40E5-84BB-E4EE63B71D25}.Debug|x64.Build.0 = Debug|x64 + {2E56B851-9D8D-40E5-84BB-E4EE63B71D25}.Debug|x86.ActiveCfg = Debug|Win32 + {2E56B851-9D8D-40E5-84BB-E4EE63B71D25}.Debug|x86.Build.0 = Debug|Win32 + {2E56B851-9D8D-40E5-84BB-E4EE63B71D25}.Release|ARM.ActiveCfg = Release|ARM + {2E56B851-9D8D-40E5-84BB-E4EE63B71D25}.Release|ARM.Build.0 = Release|ARM + {2E56B851-9D8D-40E5-84BB-E4EE63B71D25}.Release|x64.ActiveCfg = Release|x64 + {2E56B851-9D8D-40E5-84BB-E4EE63B71D25}.Release|x64.Build.0 = Release|x64 + {2E56B851-9D8D-40E5-84BB-E4EE63B71D25}.Release|x86.ActiveCfg = Release|Win32 + {2E56B851-9D8D-40E5-84BB-E4EE63B71D25}.Release|x86.Build.0 = Release|Win32 + {59104E4F-A087-442E-ABD4-BCD2A1F0B0FE}.Debug|ARM.ActiveCfg = Debug|ARM + {59104E4F-A087-442E-ABD4-BCD2A1F0B0FE}.Debug|ARM.Build.0 = Debug|ARM + {59104E4F-A087-442E-ABD4-BCD2A1F0B0FE}.Debug|x64.ActiveCfg = Debug|x64 + {59104E4F-A087-442E-ABD4-BCD2A1F0B0FE}.Debug|x64.Build.0 = Debug|x64 + {59104E4F-A087-442E-ABD4-BCD2A1F0B0FE}.Debug|x86.ActiveCfg = Debug|Win32 + {59104E4F-A087-442E-ABD4-BCD2A1F0B0FE}.Debug|x86.Build.0 = Debug|Win32 + {59104E4F-A087-442E-ABD4-BCD2A1F0B0FE}.Release|ARM.ActiveCfg = Release|ARM + {59104E4F-A087-442E-ABD4-BCD2A1F0B0FE}.Release|ARM.Build.0 = Release|ARM + {59104E4F-A087-442E-ABD4-BCD2A1F0B0FE}.Release|x64.ActiveCfg = Release|x64 + {59104E4F-A087-442E-ABD4-BCD2A1F0B0FE}.Release|x64.Build.0 = Release|x64 + {59104E4F-A087-442E-ABD4-BCD2A1F0B0FE}.Release|x86.ActiveCfg = Release|Win32 + {59104E4F-A087-442E-ABD4-BCD2A1F0B0FE}.Release|x86.Build.0 = Release|Win32 + {2B04DE79-4D33-4405-AC01-C89E0593A71D}.Debug|ARM.ActiveCfg = Debug|ARM + {2B04DE79-4D33-4405-AC01-C89E0593A71D}.Debug|ARM.Build.0 = Debug|ARM + {2B04DE79-4D33-4405-AC01-C89E0593A71D}.Debug|x64.ActiveCfg = Debug|x64 + {2B04DE79-4D33-4405-AC01-C89E0593A71D}.Debug|x64.Build.0 = Debug|x64 + {2B04DE79-4D33-4405-AC01-C89E0593A71D}.Debug|x86.ActiveCfg = Debug|Win32 + {2B04DE79-4D33-4405-AC01-C89E0593A71D}.Debug|x86.Build.0 = Debug|Win32 + {2B04DE79-4D33-4405-AC01-C89E0593A71D}.Release|ARM.ActiveCfg = Release|ARM + {2B04DE79-4D33-4405-AC01-C89E0593A71D}.Release|ARM.Build.0 = Release|ARM + {2B04DE79-4D33-4405-AC01-C89E0593A71D}.Release|x64.ActiveCfg = Release|x64 + {2B04DE79-4D33-4405-AC01-C89E0593A71D}.Release|x64.Build.0 = Release|x64 + {2B04DE79-4D33-4405-AC01-C89E0593A71D}.Release|x86.ActiveCfg = Release|Win32 + {2B04DE79-4D33-4405-AC01-C89E0593A71D}.Release|x86.Build.0 = Release|Win32 + {88768DD9-5110-4AC8-8B0E-41CD7713E1A2}.Debug|ARM.ActiveCfg = Debug|ARM + {88768DD9-5110-4AC8-8B0E-41CD7713E1A2}.Debug|ARM.Build.0 = Debug|ARM + {88768DD9-5110-4AC8-8B0E-41CD7713E1A2}.Debug|x64.ActiveCfg = Debug|x64 + {88768DD9-5110-4AC8-8B0E-41CD7713E1A2}.Debug|x64.Build.0 = Debug|x64 + {88768DD9-5110-4AC8-8B0E-41CD7713E1A2}.Debug|x86.ActiveCfg = Debug|Win32 + {88768DD9-5110-4AC8-8B0E-41CD7713E1A2}.Debug|x86.Build.0 = Debug|Win32 + {88768DD9-5110-4AC8-8B0E-41CD7713E1A2}.Release|ARM.ActiveCfg = Release|ARM + {88768DD9-5110-4AC8-8B0E-41CD7713E1A2}.Release|ARM.Build.0 = Release|ARM + {88768DD9-5110-4AC8-8B0E-41CD7713E1A2}.Release|x64.ActiveCfg = Release|x64 + {88768DD9-5110-4AC8-8B0E-41CD7713E1A2}.Release|x64.Build.0 = Release|x64 + {88768DD9-5110-4AC8-8B0E-41CD7713E1A2}.Release|x86.ActiveCfg = Release|Win32 + {88768DD9-5110-4AC8-8B0E-41CD7713E1A2}.Release|x86.Build.0 = Release|Win32 + {971DD379-1C2D-44D2-9285-FDA556C48176}.Debug|ARM.ActiveCfg = Debug|ARM + {971DD379-1C2D-44D2-9285-FDA556C48176}.Debug|ARM.Build.0 = Debug|ARM + {971DD379-1C2D-44D2-9285-FDA556C48176}.Debug|x64.ActiveCfg = Debug|x64 + {971DD379-1C2D-44D2-9285-FDA556C48176}.Debug|x64.Build.0 = Debug|x64 + {971DD379-1C2D-44D2-9285-FDA556C48176}.Debug|x86.ActiveCfg = Debug|Win32 + {971DD379-1C2D-44D2-9285-FDA556C48176}.Debug|x86.Build.0 = Debug|Win32 + {971DD379-1C2D-44D2-9285-FDA556C48176}.Release|ARM.ActiveCfg = Release|ARM + {971DD379-1C2D-44D2-9285-FDA556C48176}.Release|ARM.Build.0 = Release|ARM + {971DD379-1C2D-44D2-9285-FDA556C48176}.Release|x64.ActiveCfg = Release|x64 + {971DD379-1C2D-44D2-9285-FDA556C48176}.Release|x64.Build.0 = Release|x64 + {971DD379-1C2D-44D2-9285-FDA556C48176}.Release|x86.ActiveCfg = Release|Win32 + {971DD379-1C2D-44D2-9285-FDA556C48176}.Release|x86.Build.0 = Release|Win32 + {104BF91B-8314-4328-A996-90B8DF6052AF}.Debug|ARM.ActiveCfg = Debug|ARM + {104BF91B-8314-4328-A996-90B8DF6052AF}.Debug|ARM.Build.0 = Debug|ARM + {104BF91B-8314-4328-A996-90B8DF6052AF}.Debug|x64.ActiveCfg = Debug|x64 + {104BF91B-8314-4328-A996-90B8DF6052AF}.Debug|x64.Build.0 = Debug|x64 + {104BF91B-8314-4328-A996-90B8DF6052AF}.Debug|x86.ActiveCfg = Debug|Win32 + {104BF91B-8314-4328-A996-90B8DF6052AF}.Debug|x86.Build.0 = Debug|Win32 + {104BF91B-8314-4328-A996-90B8DF6052AF}.Release|ARM.ActiveCfg = Release|ARM + {104BF91B-8314-4328-A996-90B8DF6052AF}.Release|ARM.Build.0 = Release|ARM + {104BF91B-8314-4328-A996-90B8DF6052AF}.Release|x64.ActiveCfg = Release|x64 + {104BF91B-8314-4328-A996-90B8DF6052AF}.Release|x64.Build.0 = Release|x64 + {104BF91B-8314-4328-A996-90B8DF6052AF}.Release|x86.ActiveCfg = Release|Win32 + {104BF91B-8314-4328-A996-90B8DF6052AF}.Release|x86.Build.0 = Release|Win32 + {81AF1025-E0EE-4AD6-988D-2EF162778693}.Debug|ARM.ActiveCfg = Debug|ARM + {81AF1025-E0EE-4AD6-988D-2EF162778693}.Debug|ARM.Build.0 = Debug|ARM + {81AF1025-E0EE-4AD6-988D-2EF162778693}.Debug|x64.ActiveCfg = Debug|x64 + {81AF1025-E0EE-4AD6-988D-2EF162778693}.Debug|x64.Build.0 = Debug|x64 + {81AF1025-E0EE-4AD6-988D-2EF162778693}.Debug|x86.ActiveCfg = Debug|Win32 + {81AF1025-E0EE-4AD6-988D-2EF162778693}.Debug|x86.Build.0 = Debug|Win32 + {81AF1025-E0EE-4AD6-988D-2EF162778693}.Release|ARM.ActiveCfg = Release|ARM + {81AF1025-E0EE-4AD6-988D-2EF162778693}.Release|ARM.Build.0 = Release|ARM + {81AF1025-E0EE-4AD6-988D-2EF162778693}.Release|x64.ActiveCfg = Release|x64 + {81AF1025-E0EE-4AD6-988D-2EF162778693}.Release|x64.Build.0 = Release|x64 + {81AF1025-E0EE-4AD6-988D-2EF162778693}.Release|x86.ActiveCfg = Release|Win32 + {81AF1025-E0EE-4AD6-988D-2EF162778693}.Release|x86.Build.0 = Release|Win32 + {45C7723D-3107-4906-9633-F43ABE8A7147}.Debug|ARM.ActiveCfg = Debug|ARM + {45C7723D-3107-4906-9633-F43ABE8A7147}.Debug|ARM.Build.0 = Debug|ARM + {45C7723D-3107-4906-9633-F43ABE8A7147}.Debug|x64.ActiveCfg = Debug|x64 + {45C7723D-3107-4906-9633-F43ABE8A7147}.Debug|x64.Build.0 = Debug|x64 + {45C7723D-3107-4906-9633-F43ABE8A7147}.Debug|x86.ActiveCfg = Debug|Win32 + {45C7723D-3107-4906-9633-F43ABE8A7147}.Debug|x86.Build.0 = Debug|Win32 + {45C7723D-3107-4906-9633-F43ABE8A7147}.Release|ARM.ActiveCfg = Release|ARM + {45C7723D-3107-4906-9633-F43ABE8A7147}.Release|ARM.Build.0 = Release|ARM + {45C7723D-3107-4906-9633-F43ABE8A7147}.Release|x64.ActiveCfg = Release|x64 + {45C7723D-3107-4906-9633-F43ABE8A7147}.Release|x64.Build.0 = Release|x64 + {45C7723D-3107-4906-9633-F43ABE8A7147}.Release|x86.ActiveCfg = Release|Win32 + {45C7723D-3107-4906-9633-F43ABE8A7147}.Release|x86.Build.0 = Release|Win32 + {EF1103C7-8AAC-464B-BA31-86B87246FA72}.Debug|ARM.ActiveCfg = Debug|ARM + {EF1103C7-8AAC-464B-BA31-86B87246FA72}.Debug|ARM.Build.0 = Debug|ARM + {EF1103C7-8AAC-464B-BA31-86B87246FA72}.Debug|x64.ActiveCfg = Debug|x64 + {EF1103C7-8AAC-464B-BA31-86B87246FA72}.Debug|x64.Build.0 = Debug|x64 + {EF1103C7-8AAC-464B-BA31-86B87246FA72}.Debug|x86.ActiveCfg = Debug|Win32 + {EF1103C7-8AAC-464B-BA31-86B87246FA72}.Debug|x86.Build.0 = Debug|Win32 + {EF1103C7-8AAC-464B-BA31-86B87246FA72}.Release|ARM.ActiveCfg = Release|ARM + {EF1103C7-8AAC-464B-BA31-86B87246FA72}.Release|ARM.Build.0 = Release|ARM + {EF1103C7-8AAC-464B-BA31-86B87246FA72}.Release|x64.ActiveCfg = Release|x64 + {EF1103C7-8AAC-464B-BA31-86B87246FA72}.Release|x64.Build.0 = Release|x64 + {EF1103C7-8AAC-464B-BA31-86B87246FA72}.Release|x86.ActiveCfg = Release|Win32 + {EF1103C7-8AAC-464B-BA31-86B87246FA72}.Release|x86.Build.0 = Release|Win32 + {B6CDF482-7DA3-43D4-9B12-70150106C191}.Debug|ARM.ActiveCfg = Debug|ARM + {B6CDF482-7DA3-43D4-9B12-70150106C191}.Debug|ARM.Build.0 = Debug|ARM + {B6CDF482-7DA3-43D4-9B12-70150106C191}.Debug|x64.ActiveCfg = Debug|x64 + {B6CDF482-7DA3-43D4-9B12-70150106C191}.Debug|x64.Build.0 = Debug|x64 + {B6CDF482-7DA3-43D4-9B12-70150106C191}.Debug|x86.ActiveCfg = Debug|Win32 + {B6CDF482-7DA3-43D4-9B12-70150106C191}.Debug|x86.Build.0 = Debug|Win32 + {B6CDF482-7DA3-43D4-9B12-70150106C191}.Release|ARM.ActiveCfg = Release|ARM + {B6CDF482-7DA3-43D4-9B12-70150106C191}.Release|ARM.Build.0 = Release|ARM + {B6CDF482-7DA3-43D4-9B12-70150106C191}.Release|x64.ActiveCfg = Release|x64 + {B6CDF482-7DA3-43D4-9B12-70150106C191}.Release|x64.Build.0 = Release|x64 + {B6CDF482-7DA3-43D4-9B12-70150106C191}.Release|x86.ActiveCfg = Release|Win32 + {B6CDF482-7DA3-43D4-9B12-70150106C191}.Release|x86.Build.0 = Release|Win32 + {01CCCCC9-CA0C-4528-92BC-5B8BE1D02D6D}.Debug|ARM.ActiveCfg = Debug|ARM + {01CCCCC9-CA0C-4528-92BC-5B8BE1D02D6D}.Debug|ARM.Build.0 = Debug|ARM + {01CCCCC9-CA0C-4528-92BC-5B8BE1D02D6D}.Debug|x64.ActiveCfg = Debug|x64 + {01CCCCC9-CA0C-4528-92BC-5B8BE1D02D6D}.Debug|x64.Build.0 = Debug|x64 + {01CCCCC9-CA0C-4528-92BC-5B8BE1D02D6D}.Debug|x86.ActiveCfg = Debug|Win32 + {01CCCCC9-CA0C-4528-92BC-5B8BE1D02D6D}.Debug|x86.Build.0 = Debug|Win32 + {01CCCCC9-CA0C-4528-92BC-5B8BE1D02D6D}.Release|ARM.ActiveCfg = Release|ARM + {01CCCCC9-CA0C-4528-92BC-5B8BE1D02D6D}.Release|ARM.Build.0 = Release|ARM + {01CCCCC9-CA0C-4528-92BC-5B8BE1D02D6D}.Release|x64.ActiveCfg = Release|x64 + {01CCCCC9-CA0C-4528-92BC-5B8BE1D02D6D}.Release|x64.Build.0 = Release|x64 + {01CCCCC9-CA0C-4528-92BC-5B8BE1D02D6D}.Release|x86.ActiveCfg = Release|Win32 + {01CCCCC9-CA0C-4528-92BC-5B8BE1D02D6D}.Release|x86.Build.0 = Release|Win32 + {A34F450D-392D-4660-9618-810BD695B3B0}.Debug|ARM.ActiveCfg = Debug|ARM + {A34F450D-392D-4660-9618-810BD695B3B0}.Debug|ARM.Build.0 = Debug|ARM + {A34F450D-392D-4660-9618-810BD695B3B0}.Debug|x64.ActiveCfg = Debug|x64 + {A34F450D-392D-4660-9618-810BD695B3B0}.Debug|x64.Build.0 = Debug|x64 + {A34F450D-392D-4660-9618-810BD695B3B0}.Debug|x86.ActiveCfg = Debug|Win32 + {A34F450D-392D-4660-9618-810BD695B3B0}.Debug|x86.Build.0 = Debug|Win32 + {A34F450D-392D-4660-9618-810BD695B3B0}.Release|ARM.ActiveCfg = Release|ARM + {A34F450D-392D-4660-9618-810BD695B3B0}.Release|ARM.Build.0 = Release|ARM + {A34F450D-392D-4660-9618-810BD695B3B0}.Release|x64.ActiveCfg = Release|x64 + {A34F450D-392D-4660-9618-810BD695B3B0}.Release|x64.Build.0 = Release|x64 + {A34F450D-392D-4660-9618-810BD695B3B0}.Release|x86.ActiveCfg = Release|Win32 + {A34F450D-392D-4660-9618-810BD695B3B0}.Release|x86.Build.0 = Release|Win32 + {74CAD9D0-D8AE-4896-B71B-B2D9B48F30AA}.Debug|ARM.ActiveCfg = Debug|ARM + {74CAD9D0-D8AE-4896-B71B-B2D9B48F30AA}.Debug|ARM.Build.0 = Debug|ARM + {74CAD9D0-D8AE-4896-B71B-B2D9B48F30AA}.Debug|x64.ActiveCfg = Debug|x64 + {74CAD9D0-D8AE-4896-B71B-B2D9B48F30AA}.Debug|x64.Build.0 = Debug|x64 + {74CAD9D0-D8AE-4896-B71B-B2D9B48F30AA}.Debug|x86.ActiveCfg = Debug|Win32 + {74CAD9D0-D8AE-4896-B71B-B2D9B48F30AA}.Debug|x86.Build.0 = Debug|Win32 + {74CAD9D0-D8AE-4896-B71B-B2D9B48F30AA}.Release|ARM.ActiveCfg = Release|ARM + {74CAD9D0-D8AE-4896-B71B-B2D9B48F30AA}.Release|ARM.Build.0 = Release|ARM + {74CAD9D0-D8AE-4896-B71B-B2D9B48F30AA}.Release|x64.ActiveCfg = Release|x64 + {74CAD9D0-D8AE-4896-B71B-B2D9B48F30AA}.Release|x64.Build.0 = Release|x64 + {74CAD9D0-D8AE-4896-B71B-B2D9B48F30AA}.Release|x86.ActiveCfg = Release|Win32 + {74CAD9D0-D8AE-4896-B71B-B2D9B48F30AA}.Release|x86.Build.0 = Release|Win32 + {1CE10F06-8FAD-437F-B3D7-3B7A8909A190}.Debug|ARM.ActiveCfg = Debug|ARM + {1CE10F06-8FAD-437F-B3D7-3B7A8909A190}.Debug|ARM.Build.0 = Debug|ARM + {1CE10F06-8FAD-437F-B3D7-3B7A8909A190}.Debug|x64.ActiveCfg = Debug|x64 + {1CE10F06-8FAD-437F-B3D7-3B7A8909A190}.Debug|x64.Build.0 = Debug|x64 + {1CE10F06-8FAD-437F-B3D7-3B7A8909A190}.Debug|x86.ActiveCfg = Debug|Win32 + {1CE10F06-8FAD-437F-B3D7-3B7A8909A190}.Debug|x86.Build.0 = Debug|Win32 + {1CE10F06-8FAD-437F-B3D7-3B7A8909A190}.Release|ARM.ActiveCfg = Release|ARM + {1CE10F06-8FAD-437F-B3D7-3B7A8909A190}.Release|ARM.Build.0 = Release|ARM + {1CE10F06-8FAD-437F-B3D7-3B7A8909A190}.Release|x64.ActiveCfg = Release|x64 + {1CE10F06-8FAD-437F-B3D7-3B7A8909A190}.Release|x64.Build.0 = Release|x64 + {1CE10F06-8FAD-437F-B3D7-3B7A8909A190}.Release|x86.ActiveCfg = Release|Win32 + {1CE10F06-8FAD-437F-B3D7-3B7A8909A190}.Release|x86.Build.0 = Release|Win32 + {025E28A8-9DFB-4015-AD56-19896AA6CC9B}.Debug|ARM.ActiveCfg = Debug|ARM + {025E28A8-9DFB-4015-AD56-19896AA6CC9B}.Debug|ARM.Build.0 = Debug|ARM + {025E28A8-9DFB-4015-AD56-19896AA6CC9B}.Debug|x64.ActiveCfg = Debug|x64 + {025E28A8-9DFB-4015-AD56-19896AA6CC9B}.Debug|x64.Build.0 = Debug|x64 + {025E28A8-9DFB-4015-AD56-19896AA6CC9B}.Debug|x86.ActiveCfg = Debug|Win32 + {025E28A8-9DFB-4015-AD56-19896AA6CC9B}.Debug|x86.Build.0 = Debug|Win32 + {025E28A8-9DFB-4015-AD56-19896AA6CC9B}.Release|ARM.ActiveCfg = Release|ARM + {025E28A8-9DFB-4015-AD56-19896AA6CC9B}.Release|ARM.Build.0 = Release|ARM + {025E28A8-9DFB-4015-AD56-19896AA6CC9B}.Release|x64.ActiveCfg = Release|x64 + {025E28A8-9DFB-4015-AD56-19896AA6CC9B}.Release|x64.Build.0 = Release|x64 + {025E28A8-9DFB-4015-AD56-19896AA6CC9B}.Release|x86.ActiveCfg = Release|Win32 + {025E28A8-9DFB-4015-AD56-19896AA6CC9B}.Release|x86.Build.0 = Release|Win32 + {8C1BC968-C5C8-4D4B-9EF3-D6A065FC7C97}.Debug|ARM.ActiveCfg = Debug|ARM + {8C1BC968-C5C8-4D4B-9EF3-D6A065FC7C97}.Debug|ARM.Build.0 = Debug|ARM + {8C1BC968-C5C8-4D4B-9EF3-D6A065FC7C97}.Debug|x64.ActiveCfg = Debug|x64 + {8C1BC968-C5C8-4D4B-9EF3-D6A065FC7C97}.Debug|x64.Build.0 = Debug|x64 + {8C1BC968-C5C8-4D4B-9EF3-D6A065FC7C97}.Debug|x86.ActiveCfg = Debug|Win32 + {8C1BC968-C5C8-4D4B-9EF3-D6A065FC7C97}.Debug|x86.Build.0 = Debug|Win32 + {8C1BC968-C5C8-4D4B-9EF3-D6A065FC7C97}.Release|ARM.ActiveCfg = Release|ARM + {8C1BC968-C5C8-4D4B-9EF3-D6A065FC7C97}.Release|ARM.Build.0 = Release|ARM + {8C1BC968-C5C8-4D4B-9EF3-D6A065FC7C97}.Release|x64.ActiveCfg = Release|x64 + {8C1BC968-C5C8-4D4B-9EF3-D6A065FC7C97}.Release|x64.Build.0 = Release|x64 + {8C1BC968-C5C8-4D4B-9EF3-D6A065FC7C97}.Release|x86.ActiveCfg = Release|Win32 + {8C1BC968-C5C8-4D4B-9EF3-D6A065FC7C97}.Release|x86.Build.0 = Release|Win32 + {6A18BBB9-08D1-41A8-BE57-17FC992CC36F}.Debug|ARM.ActiveCfg = Debug|ARM + {6A18BBB9-08D1-41A8-BE57-17FC992CC36F}.Debug|ARM.Build.0 = Debug|ARM + {6A18BBB9-08D1-41A8-BE57-17FC992CC36F}.Debug|x64.ActiveCfg = Debug|x64 + {6A18BBB9-08D1-41A8-BE57-17FC992CC36F}.Debug|x64.Build.0 = Debug|x64 + {6A18BBB9-08D1-41A8-BE57-17FC992CC36F}.Debug|x86.ActiveCfg = Debug|Win32 + {6A18BBB9-08D1-41A8-BE57-17FC992CC36F}.Debug|x86.Build.0 = Debug|Win32 + {6A18BBB9-08D1-41A8-BE57-17FC992CC36F}.Release|ARM.ActiveCfg = Release|ARM + {6A18BBB9-08D1-41A8-BE57-17FC992CC36F}.Release|ARM.Build.0 = Release|ARM + {6A18BBB9-08D1-41A8-BE57-17FC992CC36F}.Release|x64.ActiveCfg = Release|x64 + {6A18BBB9-08D1-41A8-BE57-17FC992CC36F}.Release|x64.Build.0 = Release|x64 + {6A18BBB9-08D1-41A8-BE57-17FC992CC36F}.Release|x86.ActiveCfg = Release|Win32 + {6A18BBB9-08D1-41A8-BE57-17FC992CC36F}.Release|x86.Build.0 = Release|Win32 + {B84D5C3B-6DE5-49C8-B3DD-5EB67B01A527}.Debug|ARM.ActiveCfg = Debug|ARM + {B84D5C3B-6DE5-49C8-B3DD-5EB67B01A527}.Debug|ARM.Build.0 = Debug|ARM + {B84D5C3B-6DE5-49C8-B3DD-5EB67B01A527}.Debug|x64.ActiveCfg = Debug|x64 + {B84D5C3B-6DE5-49C8-B3DD-5EB67B01A527}.Debug|x64.Build.0 = Debug|x64 + {B84D5C3B-6DE5-49C8-B3DD-5EB67B01A527}.Debug|x86.ActiveCfg = Debug|Win32 + {B84D5C3B-6DE5-49C8-B3DD-5EB67B01A527}.Debug|x86.Build.0 = Debug|Win32 + {B84D5C3B-6DE5-49C8-B3DD-5EB67B01A527}.Release|ARM.ActiveCfg = Release|ARM + {B84D5C3B-6DE5-49C8-B3DD-5EB67B01A527}.Release|ARM.Build.0 = Release|ARM + {B84D5C3B-6DE5-49C8-B3DD-5EB67B01A527}.Release|x64.ActiveCfg = Release|x64 + {B84D5C3B-6DE5-49C8-B3DD-5EB67B01A527}.Release|x64.Build.0 = Release|x64 + {B84D5C3B-6DE5-49C8-B3DD-5EB67B01A527}.Release|x86.ActiveCfg = Release|Win32 + {B84D5C3B-6DE5-49C8-B3DD-5EB67B01A527}.Release|x86.Build.0 = Release|Win32 + {266B769A-C04E-424C-9033-7209F0425BC0}.Debug|ARM.ActiveCfg = Debug|ARM + {266B769A-C04E-424C-9033-7209F0425BC0}.Debug|ARM.Build.0 = Debug|ARM + {266B769A-C04E-424C-9033-7209F0425BC0}.Debug|x64.ActiveCfg = Debug|x64 + {266B769A-C04E-424C-9033-7209F0425BC0}.Debug|x64.Build.0 = Debug|x64 + {266B769A-C04E-424C-9033-7209F0425BC0}.Debug|x86.ActiveCfg = Debug|Win32 + {266B769A-C04E-424C-9033-7209F0425BC0}.Debug|x86.Build.0 = Debug|Win32 + {266B769A-C04E-424C-9033-7209F0425BC0}.Release|ARM.ActiveCfg = Release|ARM + {266B769A-C04E-424C-9033-7209F0425BC0}.Release|ARM.Build.0 = Release|ARM + {266B769A-C04E-424C-9033-7209F0425BC0}.Release|x64.ActiveCfg = Release|x64 + {266B769A-C04E-424C-9033-7209F0425BC0}.Release|x64.Build.0 = Release|x64 + {266B769A-C04E-424C-9033-7209F0425BC0}.Release|x86.ActiveCfg = Release|Win32 + {266B769A-C04E-424C-9033-7209F0425BC0}.Release|x86.Build.0 = Release|Win32 + {878CF9D3-9761-479E-A715-A1DE9F99CB78}.Debug|ARM.ActiveCfg = Debug|ARM + {878CF9D3-9761-479E-A715-A1DE9F99CB78}.Debug|ARM.Build.0 = Debug|ARM + {878CF9D3-9761-479E-A715-A1DE9F99CB78}.Debug|x64.ActiveCfg = Debug|x64 + {878CF9D3-9761-479E-A715-A1DE9F99CB78}.Debug|x64.Build.0 = Debug|x64 + {878CF9D3-9761-479E-A715-A1DE9F99CB78}.Debug|x86.ActiveCfg = Debug|Win32 + {878CF9D3-9761-479E-A715-A1DE9F99CB78}.Debug|x86.Build.0 = Debug|Win32 + {878CF9D3-9761-479E-A715-A1DE9F99CB78}.Release|ARM.ActiveCfg = Release|ARM + {878CF9D3-9761-479E-A715-A1DE9F99CB78}.Release|ARM.Build.0 = Release|ARM + {878CF9D3-9761-479E-A715-A1DE9F99CB78}.Release|x64.ActiveCfg = Release|x64 + {878CF9D3-9761-479E-A715-A1DE9F99CB78}.Release|x64.Build.0 = Release|x64 + {878CF9D3-9761-479E-A715-A1DE9F99CB78}.Release|x86.ActiveCfg = Release|Win32 + {878CF9D3-9761-479E-A715-A1DE9F99CB78}.Release|x86.Build.0 = Release|Win32 + {995B01AF-C568-453E-9E5F-8AE81FB79B4B}.Debug|ARM.ActiveCfg = Debug|ARM + {995B01AF-C568-453E-9E5F-8AE81FB79B4B}.Debug|ARM.Build.0 = Debug|ARM + {995B01AF-C568-453E-9E5F-8AE81FB79B4B}.Debug|x64.ActiveCfg = Debug|x64 + {995B01AF-C568-453E-9E5F-8AE81FB79B4B}.Debug|x64.Build.0 = Debug|x64 + {995B01AF-C568-453E-9E5F-8AE81FB79B4B}.Debug|x86.ActiveCfg = Debug|Win32 + {995B01AF-C568-453E-9E5F-8AE81FB79B4B}.Debug|x86.Build.0 = Debug|Win32 + {995B01AF-C568-453E-9E5F-8AE81FB79B4B}.Release|ARM.ActiveCfg = Release|ARM + {995B01AF-C568-453E-9E5F-8AE81FB79B4B}.Release|ARM.Build.0 = Release|ARM + {995B01AF-C568-453E-9E5F-8AE81FB79B4B}.Release|x64.ActiveCfg = Release|x64 + {995B01AF-C568-453E-9E5F-8AE81FB79B4B}.Release|x64.Build.0 = Release|x64 + {995B01AF-C568-453E-9E5F-8AE81FB79B4B}.Release|x86.ActiveCfg = Release|Win32 + {995B01AF-C568-453E-9E5F-8AE81FB79B4B}.Release|x86.Build.0 = Release|Win32 + {71A5F1C8-F76D-4297-95AA-75E1C967DC79}.Debug|ARM.ActiveCfg = Debug|ARM + {71A5F1C8-F76D-4297-95AA-75E1C967DC79}.Debug|ARM.Build.0 = Debug|ARM + {71A5F1C8-F76D-4297-95AA-75E1C967DC79}.Debug|x64.ActiveCfg = Debug|x64 + {71A5F1C8-F76D-4297-95AA-75E1C967DC79}.Debug|x64.Build.0 = Debug|x64 + {71A5F1C8-F76D-4297-95AA-75E1C967DC79}.Debug|x86.ActiveCfg = Debug|Win32 + {71A5F1C8-F76D-4297-95AA-75E1C967DC79}.Debug|x86.Build.0 = Debug|Win32 + {71A5F1C8-F76D-4297-95AA-75E1C967DC79}.Release|ARM.ActiveCfg = Release|ARM + {71A5F1C8-F76D-4297-95AA-75E1C967DC79}.Release|ARM.Build.0 = Release|ARM + {71A5F1C8-F76D-4297-95AA-75E1C967DC79}.Release|x64.ActiveCfg = Release|x64 + {71A5F1C8-F76D-4297-95AA-75E1C967DC79}.Release|x64.Build.0 = Release|x64 + {71A5F1C8-F76D-4297-95AA-75E1C967DC79}.Release|x86.ActiveCfg = Release|Win32 + {71A5F1C8-F76D-4297-95AA-75E1C967DC79}.Release|x86.Build.0 = Release|Win32 + {3CC91899-3E98-49FD-BED5-FA290A9A5C8E}.Debug|ARM.ActiveCfg = Debug|ARM + {3CC91899-3E98-49FD-BED5-FA290A9A5C8E}.Debug|ARM.Build.0 = Debug|ARM + {3CC91899-3E98-49FD-BED5-FA290A9A5C8E}.Debug|x64.ActiveCfg = Debug|x64 + {3CC91899-3E98-49FD-BED5-FA290A9A5C8E}.Debug|x64.Build.0 = Debug|x64 + {3CC91899-3E98-49FD-BED5-FA290A9A5C8E}.Debug|x86.ActiveCfg = Debug|Win32 + {3CC91899-3E98-49FD-BED5-FA290A9A5C8E}.Debug|x86.Build.0 = Debug|Win32 + {3CC91899-3E98-49FD-BED5-FA290A9A5C8E}.Release|ARM.ActiveCfg = Release|ARM + {3CC91899-3E98-49FD-BED5-FA290A9A5C8E}.Release|ARM.Build.0 = Release|ARM + {3CC91899-3E98-49FD-BED5-FA290A9A5C8E}.Release|x64.ActiveCfg = Release|x64 + {3CC91899-3E98-49FD-BED5-FA290A9A5C8E}.Release|x64.Build.0 = Release|x64 + {3CC91899-3E98-49FD-BED5-FA290A9A5C8E}.Release|x86.ActiveCfg = Release|Win32 + {3CC91899-3E98-49FD-BED5-FA290A9A5C8E}.Release|x86.Build.0 = Release|Win32 + {D829672F-3775-4718-A991-1ABC42CBA67C}.Debug|ARM.ActiveCfg = Debug|ARM + {D829672F-3775-4718-A991-1ABC42CBA67C}.Debug|ARM.Build.0 = Debug|ARM + {D829672F-3775-4718-A991-1ABC42CBA67C}.Debug|x64.ActiveCfg = Debug|x64 + {D829672F-3775-4718-A991-1ABC42CBA67C}.Debug|x64.Build.0 = Debug|x64 + {D829672F-3775-4718-A991-1ABC42CBA67C}.Debug|x86.ActiveCfg = Debug|Win32 + {D829672F-3775-4718-A991-1ABC42CBA67C}.Debug|x86.Build.0 = Debug|Win32 + {D829672F-3775-4718-A991-1ABC42CBA67C}.Release|ARM.ActiveCfg = Release|ARM + {D829672F-3775-4718-A991-1ABC42CBA67C}.Release|ARM.Build.0 = Release|ARM + {D829672F-3775-4718-A991-1ABC42CBA67C}.Release|x64.ActiveCfg = Release|x64 + {D829672F-3775-4718-A991-1ABC42CBA67C}.Release|x64.Build.0 = Release|x64 + {D829672F-3775-4718-A991-1ABC42CBA67C}.Release|x86.ActiveCfg = Release|Win32 + {D829672F-3775-4718-A991-1ABC42CBA67C}.Release|x86.Build.0 = Release|Win32 + {C5895B75-BDCF-406C-B803-9CB954E90F0C}.Debug|ARM.ActiveCfg = Debug|ARM + {C5895B75-BDCF-406C-B803-9CB954E90F0C}.Debug|ARM.Build.0 = Debug|ARM + {C5895B75-BDCF-406C-B803-9CB954E90F0C}.Debug|x64.ActiveCfg = Debug|x64 + {C5895B75-BDCF-406C-B803-9CB954E90F0C}.Debug|x64.Build.0 = Debug|x64 + {C5895B75-BDCF-406C-B803-9CB954E90F0C}.Debug|x86.ActiveCfg = Debug|Win32 + {C5895B75-BDCF-406C-B803-9CB954E90F0C}.Debug|x86.Build.0 = Debug|Win32 + {C5895B75-BDCF-406C-B803-9CB954E90F0C}.Release|ARM.ActiveCfg = Release|ARM + {C5895B75-BDCF-406C-B803-9CB954E90F0C}.Release|ARM.Build.0 = Release|ARM + {C5895B75-BDCF-406C-B803-9CB954E90F0C}.Release|x64.ActiveCfg = Release|x64 + {C5895B75-BDCF-406C-B803-9CB954E90F0C}.Release|x64.Build.0 = Release|x64 + {C5895B75-BDCF-406C-B803-9CB954E90F0C}.Release|x86.ActiveCfg = Release|Win32 + {C5895B75-BDCF-406C-B803-9CB954E90F0C}.Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/build/windows10/liblinphone-tester/liblinphone-tester_TemporaryKey.pfx b/build/windows10/liblinphone-tester/liblinphone-tester_TemporaryKey.pfx new file mode 100644 index 0000000000000000000000000000000000000000..19e757bfa23543403adb4a8ac76ecafcf5f2fdfe GIT binary patch literal 2456 zcmZuz2{=>@7ru8kW*DhK){(@>)}6$VrL>?S6iwEIjHMWBS}fz*s$YhbEoy`$Su2D@ zMqds2tj$OzUz?h*L?VR$*7N`U{m=6~_c`}D?|aUB?s?9=_uLD?`12?b4Z(Ov99}!c zCS{fgih*1hZ;65N<_K*9!Pxo#3t>eV82b*PUm-S%llYHHk^rK(FlGsYG4qfzj__X^ zDK3Q(AE}w?Wp6#oL!rcaF)&6LMe`jg6L*-I5DcrEypKl9NbA{Jwdj1_T4t2DFe0i? zdx&ir5=<_RZ;dOTqWg~dS}@%^xmjUbcw`2jFDRb7wOY}z#`sZFP0x!Xto!dNuB`o% z$75PHf9MS3$JNg4jP;jr6otrJ2(9Qk=sN|k;pyxI6OR|Hnk1FzQLk>N6-Jg$UzZ3x zqT9+ZRkp@6RfA^4X|()pt<_!V&`I|xtqYa-BiXti)L@OwSH8xTh8LY;n(7O8evy#U zUIrYiGD1hK7@1D|Cwe7S?7QKmiL-YL!YDD#<|V%O?6!9q?j)WmTIf;Sloaig?JN*< zu5LZve68Mbsymq8C)s2%k@htF#YsvM?@MrG|AVAPM(O&;Pwi#;Q!9I1voe@~;j7p< z>~Jg140oKurZLx;JHI)6=#KRJo>l6nCE1y)ZR^T+eHHeqk~*|^isH4iH@mf-RH`x# zCe`u>8VA~{GtM>d)dAl#`JCO!f44{I4-_A*zrr<(>+5S*Yj4AL54O9M66Hu{F-Hd- z#x%L?zXH~?;*$NA+sehY<8>x24f{oQ{$dYhBv5}WPn{fG)Uzr1nx;At2v+eL=P!5y zsxE+<&DG9q7vpPR(0|sy-&C5Q_HD);aLA)`yHvJU^&g-hHnWoqH5kO*YorUwV1Z@G?|y8 z?p%=&N6NafcW(^kw(+ivQnRSD9gvb*-o z@0cnc=^RR;muK}95}n-q+MjMt8xQmvE;X%woSh*#Jk>hLXU__)R|Zv!2vSWm@mam- z4Sf!r_-osvb_V2F%%(rzCAi(QX^{U$wZ@lWLH*}SKtb0%6=q10#)6fuu z75Z^)t@j$b)llj(+gkGAz_w|w^&_sSP|%~&LJ&a-X5wpV|d$gi{xz-Y=hn=Vtwx5O}k93;@3)DC8{f&P)}8KiFMP}Fxgn|dOshW zvc7+^Q~tHSg7o#Kxin6mo!9nahtw7YueIIf#}Wo}O$AF;uVq)HP?c)?W$oVNIICRF z2rs7%%WrU#zZlV$;ab1E<9qdHaR>WMzOU1Rly4!%icJ5v2g>5wk`!h+fh8YYIupmt zqS`N%X)2uL>pXLppg*u*>|l@GfA~pZ>4SU0w5;P8|JEIzdx7$a`R1~}p^vI%IeD*mW-i#2yCKHX8SN;~3Z z9Kl=<=hKZp<;35Ty0EeJMjcF7dKd90mgd008a(A1OnnlWhP)fC~5lCIA!g z1&okG4=_eB6)-@&O@I&L`~KuMBAGv;Oe9VPyb%Qri5x<5AO!nDo;bV?4#a>kZ6!!` zB-;bKfj}f79AE(vh%tdkU=84eoPRJOfIot^BmQw96yaD14o8ZH0s%i&YXHZec}Ed+ z2x%c4g3+{Jo&WeSptUeCdL2TqK}`Ag?T_ZdsA&jBeg3uk@p6a&^%4W4o*}#tg26T} z8U>2$>xyo)X9S+Jx@qSlq*=_Xf4r_bPtJTND_|5{ zrU!ku(!5Fvu(*eAaqw_^2Vy4Y9&u@M?ZQ++iFsa7b9VW~N4xfR+*Hf_EBYJjv-a_i z&8lirtc}NBI|73vCV7uN9^8Gk zV`0wAj;D3yc_qO`S=Z^f_M3~7af!F}0x*`wJ!-p?-*`k0J(5MCK>#e)f;1sXWZo(y z5M0KfAOMp4fi!*~Nr-?GM;40% + + + + + + + \ No newline at end of file diff --git a/build/windows10/liblinphone/liblinphone.vcxproj b/build/windows10/liblinphone/liblinphone.vcxproj index 1cc743e47..1ac61e9b3 100644 --- a/build/windows10/liblinphone/liblinphone.vcxproj +++ b/build/windows10/liblinphone/liblinphone.vcxproj @@ -58,6 +58,7 @@ + diff --git a/tester/call_tester.c b/tester/call_tester.c index 729c52354..2356b8ed5 100644 --- a/tester/call_tester.c +++ b/tester/call_tester.c @@ -17,7 +17,7 @@ */ - #include +#include #include #include "linphonecore.h" #include "lpconfig.h" @@ -26,7 +26,7 @@ #include "mediastreamer2/msutils.h" #include "belle-sip/sipstack.h" -#ifdef WIN32 +#ifdef _WIN32 #define unlink _unlink #ifndef F_OK #define F_OK 00 /*visual studio does not define F_OK*/ diff --git a/tester/liblinphone_tester.c b/tester/liblinphone_tester.c index cd54c8458..2ed59f314 100644 --- a/tester/liblinphone_tester.c +++ b/tester/liblinphone_tester.c @@ -129,7 +129,7 @@ static void liblinphone_tester_qnx_log_handler(OrtpLogLevel lev, const char *fmt #endif /* __QNX__ */ static void log_handler(int lev, const char *fmt, va_list args) { -#ifdef WIN32 +#ifdef _WIN32 vfprintf(lev == ORTP_ERROR ? stderr : stdout, fmt, args); fprintf(lev == ORTP_ERROR ? stderr : stdout, "\n"); #else @@ -150,7 +150,7 @@ static void log_handler(int lev, const char *fmt, va_list args) { } } -void liblinphone_tester_init(void) { +void liblinphone_tester_init(void(*ftester_printf)(int level, const char *fmt, va_list args)) { if (! log_file) { #if defined(ANDROID) linphone_core_set_log_handler(liblinphone_android_ortp_log_handler); @@ -159,7 +159,8 @@ void liblinphone_tester_init(void) { #endif } - bc_tester_init(log_handler, ORTP_MESSAGE, ORTP_ERROR); + if (ftester_printf == NULL) ftester_printf = log_handler; + bc_tester_init(ftester_printf, ORTP_MESSAGE, ORTP_ERROR); liblinphone_tester_add_suites(); } @@ -168,6 +169,8 @@ void liblinphone_tester_uninit(void) { } +#if !defined(ANDROID) && !defined(TARGET_OS_IPHONE) && !(defined(LINPHONE_WINDOWS_PHONE) || defined(LINPHONE_WINDOWS_UNIVERSAL)) + static const char* liblinphone_helper = "\t\t\t--verbose\n" "\t\t\t--silent\n" @@ -178,7 +181,6 @@ static const char* liblinphone_helper = "\t\t\t--dns-hosts \n" "\t\t\t--keep-recorded-files\n"; -#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) int main (int argc, char *argv[]) { int i; @@ -192,7 +194,7 @@ int main (int argc, char *argv[]) gdk_threads_init(); #endif - liblinphone_tester_init(); + liblinphone_tester_init(NULL); for(i = 1; i < argc; ++i) { if (strcmp(argv[i], "--verbose") == 0) { diff --git a/tester/liblinphone_tester.h b/tester/liblinphone_tester.h index 63af31569..b5687e002 100644 --- a/tester/liblinphone_tester.h +++ b/tester/liblinphone_tester.h @@ -80,10 +80,6 @@ void liblinphone_tester_keep_recorded_files(int keep); */ extern void liblinphone_tester_clear_accounts(void); -#ifdef __cplusplus -}; -#endif - extern const char* test_domain; extern const char* auth_domain; @@ -332,5 +328,12 @@ int linphone_core_manager_get_max_audio_up_bw(const LinphoneCoreManager *mgr); void video_call_base_2(LinphoneCoreManager* pauline,LinphoneCoreManager* marie, bool_t using_policy,LinphoneMediaEncryption mode, bool_t callee_video_enabled, bool_t caller_video_enabled); int liblinphone_tester_setup(); +void liblinphone_tester_init(void(*ftester_printf)(int level, const char *fmt, va_list args)); +void liblinphone_tester_uninit(void); + + +#ifdef __cplusplus +}; +#endif #endif /* LIBLINPHONE_TESTER_H_ */ diff --git a/tester/liblinphone_tester_windows.cpp b/tester/liblinphone_tester_windows.cpp new file mode 100644 index 000000000..30fab9c9a --- /dev/null +++ b/tester/liblinphone_tester_windows.cpp @@ -0,0 +1,149 @@ +#include + +#include "liblinphone_tester_windows.h" + +using namespace liblinphone_tester_runtime_component; +using namespace Platform; +using namespace Windows::Foundation; +using namespace Windows::Storage; +using namespace Windows::System::Threading; + +#define MAX_TRACE_SIZE 512 +#define MAX_SUITE_NAME_SIZE 128 +#define MAX_WRITABLE_DIR_SIZE 1024 + +static OutputTraceListener^ sTraceListener; + +LibLinphoneTester^ LibLinphoneTester::_instance = ref new LibLinphoneTester(); + +static void nativeOutputTraceHandler(int lev, const char *fmt, va_list args) +{ + if (sTraceListener) { + wchar_t wstr[MAX_TRACE_SIZE]; + std::string str; + str.resize(MAX_TRACE_SIZE); + vsnprintf((char *)str.c_str(), MAX_TRACE_SIZE, fmt, args); + mbstowcs(wstr, str.c_str(), sizeof(wstr)); + String^ msg = ref new String(wstr); + String^ l; + switch (lev) { + case ORTP_FATAL: + case ORTP_ERROR: + l = ref new String(L"Error"); + break; + case ORTP_WARNING: + l = ref new String(L"Warning"); + break; + case ORTP_MESSAGE: + l = ref new String(L"Message"); + break; + default: + l = ref new String(L"Debug"); + break; + } + sTraceListener->outputTrace(l, msg); + } +} + +static void libLinphoneNativeOutputTraceHandler(OrtpLogLevel lev, const char *fmt, va_list args) +{ + nativeOutputTraceHandler((int)lev, fmt, args); +} + + +LibLinphoneTester::LibLinphoneTester() +{ + char writable_dir[MAX_WRITABLE_DIR_SIZE]; + StorageFolder ^folder = ApplicationData::Current->LocalFolder; + const wchar_t *wwritable_dir = folder->Path->Data(); + wcstombs(writable_dir, wwritable_dir, sizeof(writable_dir)); + liblinphone_tester_init(nativeOutputTraceHandler); + bc_tester_set_resource_dir_prefix("Assets"); + bc_tester_set_writable_dir_prefix(writable_dir); +} + +LibLinphoneTester::~LibLinphoneTester() +{ + liblinphone_tester_uninit(); +} + +void LibLinphoneTester::setOutputTraceListener(OutputTraceListener^ traceListener) +{ + sTraceListener = traceListener; +} + +void LibLinphoneTester::init(bool verbose) +{ + if (verbose) { + linphone_core_set_log_level_mask((OrtpLogLevel)(ORTP_MESSAGE | ORTP_WARNING | ORTP_ERROR | ORTP_FATAL)); + } + else { + linphone_core_set_log_level_mask(ORTP_FATAL); + } +} + +bool LibLinphoneTester::run(Platform::String^ suiteName, Platform::String^ caseName, Platform::Boolean verbose) +{ + std::wstring all(L"ALL"); + std::wstring wssuitename = suiteName->Data(); + std::wstring wscasename = caseName->Data(); + char csuitename[MAX_SUITE_NAME_SIZE] = { 0 }; + char ccasename[MAX_SUITE_NAME_SIZE] = { 0 }; + wcstombs(csuitename, wssuitename.c_str(), sizeof(csuitename)); + wcstombs(ccasename, wscasename.c_str(), sizeof(ccasename)); + + init(verbose); + linphone_core_set_log_handler(libLinphoneNativeOutputTraceHandler); + return bc_tester_run_tests(wssuitename == all ? 0 : csuitename, wscasename == all ? 0 : ccasename) != 0; +} + +void LibLinphoneTester::runAllToXml() +{ + auto workItem = ref new WorkItemHandler([this](IAsyncAction ^workItem) { + char *xmlFile = bc_tester_file("LibLinphoneWindows10.xml"); + char *logFile = bc_tester_file("LibLinphoneWindows10.log"); + char *args[] = { "--xml-file", xmlFile }; + bc_tester_parse_args(2, args, 0); + init(true); + FILE *f = fopen(logFile, "w"); + ortp_set_log_file(f); + bc_tester_start(); + bc_tester_uninit(); + fclose(f); + free(xmlFile); + free(logFile); + }); + _asyncAction = ThreadPool::RunAsync(workItem); +} + +unsigned int LibLinphoneTester::nbTestSuites() +{ + return bc_tester_nb_suites(); +} + +unsigned int LibLinphoneTester::nbTests(Platform::String^ suiteName) +{ + std::wstring suitename = suiteName->Data(); + char cname[MAX_SUITE_NAME_SIZE] = { 0 }; + wcstombs(cname, suitename.c_str(), sizeof(cname)); + return bc_tester_nb_tests(cname); +} + +Platform::String^ LibLinphoneTester::testSuiteName(int index) +{ + const char *cname = bc_tester_suite_name(index); + wchar_t wcname[MAX_SUITE_NAME_SIZE]; + mbstowcs(wcname, cname, sizeof(wcname)); + return ref new String(wcname); +} + +Platform::String^ LibLinphoneTester::testName(Platform::String^ suiteName, int testIndex) +{ + std::wstring suitename = suiteName->Data(); + char csuitename[MAX_SUITE_NAME_SIZE] = { 0 }; + wcstombs(csuitename, suitename.c_str(), sizeof(csuitename)); + const char *cname = bc_tester_test_name(csuitename, testIndex); + wchar_t wcname[MAX_SUITE_NAME_SIZE]; + mbstowcs(wcname, cname, sizeof(wcname)); + return ref new String(wcname); +} diff --git a/tester/liblinphone_tester_windows.h b/tester/liblinphone_tester_windows.h new file mode 100644 index 000000000..959a6d1d9 --- /dev/null +++ b/tester/liblinphone_tester_windows.h @@ -0,0 +1,41 @@ +#pragma once + +#include "linphonecore.h" +#include "liblinphone_tester.h" + +namespace liblinphone_tester_runtime_component +{ + public interface class OutputTraceListener + { + public: + void outputTrace(Platform::String^ lev, Platform::String^ msg); + }; + + public ref class LibLinphoneTester sealed + { + public: + void setOutputTraceListener(OutputTraceListener^ traceListener); + unsigned int nbTestSuites(); + unsigned int nbTests(Platform::String^ suiteName); + Platform::String^ testSuiteName(int index); + Platform::String^ testName(Platform::String^ suiteName, int testIndex); + bool run(Platform::String^ suiteName, Platform::String^ caseName, Platform::Boolean verbose); + void runAllToXml(); + + static property LibLinphoneTester^ Instance + { + LibLinphoneTester^ get() { return _instance; } + } + property Windows::Foundation::IAsyncAction^ AsyncAction + { + Windows::Foundation::IAsyncAction^ get() { return _asyncAction; } + } + private: + LibLinphoneTester(); + ~LibLinphoneTester(); + void init(bool verbose); + + static LibLinphoneTester^ _instance; + Windows::Foundation::IAsyncAction^ _asyncAction; + }; +} \ No newline at end of file diff --git a/tester/log_collection_tester.c b/tester/log_collection_tester.c index 9a374d110..b2a7fa1d9 100644 --- a/tester/log_collection_tester.c +++ b/tester/log_collection_tester.c @@ -30,7 +30,7 @@ /*getline is POSIX 2008, not available on many systems.*/ -#if defined(ANDROID) || defined(WIN32) +#if defined(ANDROID) || defined(_WIN32) /* This code is public domain -- Will Hartung 4/9/09 */ static size_t getline(char **lineptr, size_t *n, FILE *stream) { char *bufptr = NULL; @@ -143,14 +143,14 @@ static FILE* gzuncompress(const char* filepath) { static time_t get_current_time() { struct timeval tp; struct tm *lt; -#ifndef WIN32 +#ifndef _WIN32 struct tm tmbuf; #endif time_t tt; ortp_gettimeofday(&tp,NULL); tt = (time_t)tp.tv_sec; -#ifdef WIN32 +#ifdef _WIN32 lt = localtime(&tt); #else lt = localtime_r(&tt,&tmbuf); @@ -172,7 +172,7 @@ static time_t check_file(LinphoneCoreManager* mgr) { int line_count = 0; char *line = NULL; size_t line_size = 256; -#ifndef WIN32 +#ifndef _WIN32 struct tm tm_curr = {0}; time_t time_prev = 0; #endif @@ -192,7 +192,7 @@ static time_t check_file(LinphoneCoreManager* mgr) { while (getline(&line, &line_size, file) != -1) { // a) there should be at least 25 lines ++line_count; -#ifndef WIN32 +#ifndef _WIN32 // b) logs should be ordered by date (format: 2014-11-04 15:22:12:606) if (strlen(line) > 24) { char date[24] = {'\0'}; @@ -216,7 +216,7 @@ static time_t check_file(LinphoneCoreManager* mgr) { timediff = labs((long int)log_time - (long int)cur_time); (void)timediff; -#ifndef WIN32 +#ifndef _WIN32 BC_ASSERT_TRUE( timediff <= 1 ); if( !(timediff <= 1) ){ char buffers[2][128] = {{0}}; diff --git a/tester/multi_call_tester.c b/tester/multi_call_tester.c index 612858a1c..22db4b446 100644 --- a/tester/multi_call_tester.c +++ b/tester/multi_call_tester.c @@ -26,7 +26,7 @@ #include "mediastreamer2/msutils.h" #include "belle-sip/sipstack.h" -#ifdef WIN32 +#ifdef _WIN32 #define unlink _unlink #endif diff --git a/tester/tester.c b/tester/tester.c index 5ac0448db..106077a88 100644 --- a/tester/tester.c +++ b/tester/tester.c @@ -28,6 +28,9 @@ #ifdef HAVE_GTK #include #endif +#if _WIN32 +#define unlink _unlink +#endif static bool_t liblinphone_tester_ipv6_enabled=FALSE; static int liblinphone_tester_keep_accounts_flag = 0; @@ -184,7 +187,7 @@ bool_t wait_for_list(MSList* lcs,int* counter,int value,int timeout_ms) { #endif linphone_core_iterate((LinphoneCore*)(iterator->data)); } -#ifdef WIN32 +#ifdef LINPHONE_WINDOWS_DESKTOP { MSG msg; while (PeekMessage(&msg, NULL, 0, 0,1)){ diff --git a/tester/video_tester.c b/tester/video_tester.c index 843778884..7e7c846cd 100644 --- a/tester/video_tester.c +++ b/tester/video_tester.c @@ -28,7 +28,7 @@ #include #ifdef GDK_WINDOWING_X11 #include -#elif defined(WIN32) +#elif defined(_WIN32) #include #elif defined(__APPLE__) extern void *gdk_quartz_window_get_nswindow(GdkWindow *window); @@ -41,7 +41,7 @@ extern void *gdk_quartz_window_get_nsview(GdkWindow *window); static unsigned long get_native_handle(GdkWindow *gdkw) { #ifdef GDK_WINDOWING_X11 return (unsigned long)GDK_WINDOW_XID(gdkw); -#elif defined(WIN32) +#elif defined(_WIN32) return (unsigned long)GDK_WINDOW_HWND(gdkw); #elif defined(__APPLE__) return (unsigned long)gdk_quartz_window_get_nsview(gdkw);