From 4dfd16a63faf44b8e6f21ca6600b387d56e8e67f Mon Sep 17 00:00:00 2001 From: Lyubomir Marinov Date: Thu, 12 Jul 2012 11:12:09 +0000 Subject: [PATCH] Commits work in progress on calling from Microsoft Office with Jitsi to phone numbers originating from Microsoft Office. --- lib/native/windows-64/jmsofficecomm.dll | Bin 192379 -> 193053 bytes lib/native/windows/jmsofficecomm.dll | Bin 188335 -> 188499 bytes src/native/windows/msofficecomm/Messenger.cxx | 222 +++++++++++------- src/native/windows/msofficecomm/Messenger.h | 2 + .../plugin/msofficecomm/Messenger.java | 106 ++++++++- 5 files changed, 240 insertions(+), 90 deletions(-) diff --git a/lib/native/windows-64/jmsofficecomm.dll b/lib/native/windows-64/jmsofficecomm.dll index 8205f597050016f7b5ef0994a93fa67e8c48fda6..af28cc97c8ff08a7edc02f45dd263ffe5541a9fd 100755 GIT binary patch delta 36726 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 delta 36197 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 diff --git a/lib/native/windows/jmsofficecomm.dll b/lib/native/windows/jmsofficecomm.dll index 69d4f0a6ed831b1d85c9cb9e60484a38a255f27a..968465a2096f8d5560e46b8c60cb518c0148a0d7 100755 GIT binary patch delta 31293 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 delta 30750 zcmbWA3tSXc|Nm!Jl1))oL)ipn)iuey?ES)C71UKxQBl!Q(7a$?S``(|+*L3kyr5$) zmKl~6l_`ZKnNMzINoGc6NoGb*R%=;Nk11No|8sU&<{a&Ley`VmUaw(h-t)bk@A;l{ zW^ejwu>FCf?aPX9-@NwkvD^-xi`}|)xNJ}U*0UpJnH{$FOb`b1F4={Lg?0QG-e3JO zAJ6ld)fZ*G`55JeU|^Tb$T&uu+qPh<;k-8S`(5!oDfu|son^YJKk6320&FKzpF`vDF%4QnoJ;+K1g zWJ$g{ibyq26$V8o%RZYbc%!?>PLab%*}AF1k?53ert$FE3qB*JWi6(=3kvyA+0}8v zWcjyzXTf&+Zr&oCy}h3-E33L~yLi6S*vX{jd!kfgQ#_M}f$jV9@xr9`NwOa%2`k!f z?6r0hMC@ulSdykzg_hz9Ez79#c*8^;nlVY}6O+Wtg`qL`w7WDhEF8KpQCJnzO;$Tm z*b#G=EI3hkGp1{gO57|>Q}=I^tyYr+5F;=uC(YY9QTRP(1RoUa9mev0VI%&!g>xN7 z@tly{aS(V`M?K*k!@T2IS;ITRfY_0Ig-{Tyhv>doBHD!W3ZcJZET1c^R*d3RLakzu ztl=%;nqnYsBzGdB*`3BhbYG`Yu-epV5UeJ59t6>>&JaB+lyn{lR0HG|Lio!G$~y)@ z*@M4sp#Xn5p%Q0jch0jC@vj@^RODDl)DTeN!;PS<}KTZGw-n^S1xW7luQ*_G5b^4OwvINMaDE+#fG zxG<=iyOgDl@D^T@W5PNfTRZ~-do&p7>w~dHskkUrY}%;a2zgVN$9f z1GLx6sGTTv^LS<0NNmxc5H3aWWU5sNjHs5jBO@52S_Op|0InoXP5d`+t->r+cu4{0 zX=-(B(Hdes9g1R%ZBpY(Cq%7(zeK!@^%Wf_%B$7=wO2~clrB)K(NW1iJve9Wb-6os zy_RUZ<)zASyY_|K6~)9rstCTDw{8skjUlc4i9|>R8iUzXUico5c~X?E5o1J5K9V@T z$(FBHwS<(fi#?>6Q+Qn-yS@NbSDGdNsqkoXGv^P7P$7n}_82L>lBRp7=S+J$n=3{9 zrHC5_tB7xRA_-#)In6|ike8MOBZUe?c91AXsd43tDeV$NreO^K(5rKy5a|ih1KY~l zkYq*`1@qUn+&FrhoAZ|{!u^wmTNme$AmRIHM+}OKS-6^07QQBf8KFX{ee4P#-fE-?Ip=28Bs7EQv4xo?!H78GgpxHD2vUD$Cyl2xRvA( zmo4n+Vc?5}&wET$Uh5w2zNnISO4HPt$Pp=wP+@0bRFZ*D7W_%WWOH0XZPI^Ih>fS^ zXlrSzlClMpm=)wLO;VRWn7F<8*A5}6r&A{HD2y|Ahx3Pe z+GT|a!W%u)_?m6KddWt164bp8v?tRJk{K1svJ2;XJ%Z_QUhmQPd#Lw429IDXq#d}6qkOR7=#$jW({h#jvT(}MRao7p zTvk>lOzJlThIjVMkALzi@|metqK@NAqe)*vH!4|B-*d*K`UsYy)WP=13ok2}yCc}UgFD9G`C+Tq(4F+%7@<>V=I+Jwtq~K;AG3E~XYY1mEtjx& z;kUy{$?uf&)$a~?Lgr{9%S;D7SvO*fHlcG!mxR|2JRTvb;Wg%GU3gtteAB&J;Ym#b zo=@Ju-(=y8W^#07VKHjcqt(Y@dD7YHVr@+n?-2%@&f#wlvzE^jGR!?>p%}qyo+4|y zE_`4X_;o^##d^B{72@N0VUMNv?Nu#T@8POz*LP!!0D2Rpb^AAveg34d%oT)V zlY1G2_PK|(1kq{mV06TU!E12+$>7nls&t{}kixEsKX|;&U5ba0#VQJOfQt+oQ}y8? zvt)dgkTi5T-?e(j&`Yub#f@;1nur8*$J^v}A#;$5T$H57?AeHWC8>%%W#MDop6$W` z&nC4l6b>r`hfwCGa_C#^X=-GkJJ~gIDHaPs`)V;GfI!=i}(@$36 zr>?&{{ln-HpS+ZUFm71eb3eiB4dLr?YtW_B$8YQ?S0KS|IqY%AIl0g@z7Jnn-DAQ# zysYVx@NH(Vgxh{b%CS0q`g9^*3+?e@O2>l&Nv*0{HPOxUmg*UkX7XL~i5zIidn23# zGGa4@`pGk`eoXoU$e+Td=ru1CHno3)T*Pkv5kB{j)Ahk+o%R%kPhyLLpqujV;@1A@ z7nWxA$3u2S)~0sFqL}K9je>a!c_N=XMbDoT9-s0s&U;NACb|FMPq;@Ma9=4rG)8OkCInnmWHQL{F+&BhWCY8KAV zGPX`d-Db~@<_OMuR=CTXEbO11jInlR_PwG}2deHLj4Fk(a}uJ%-GAHP!nj!*qQjl| z^yM(Rg>Hq6Q6-H?nI@82eSvO;jp zm+Y;YzmWe!2+i+KADdZ9$38r(7VVyL_vVw+e|rEt#LU_147KNw=+A!-*H4FG#hMW(<8$+496eh}YaL+>VM1 zVYToIKCdj?j@)l0WG$20;rQXdv}5e*glG?G$8A5fv}40+x*em#W9Qk;g5@Dsx8Qe@ z^_`oUW^7#(-vOfxeIbUkS?E%5cldz}Ly9z^%Niv*mOP;Ww6vfb_d!^NJYk1+ZlVk- zgx^-gcX(gAJ8zTJn1vVqOJkCJ3DI)W7~_SO#!U9njcIv!{Jd0<`(52s)MM-WrId5I zKt=;sD|z2pN;*Y)!Xyp)&aadJX^>@Y7d$JCS$hwetJ^Of(BW{{K)5#NJrW)nuS>-G zi16Lo5tsx9txLenIci;cNB0rw_R5lQdA}i%5hc~1t&8FLEaBgUeegIYFZ#8k|B!V5 z&JDtC>+9tn@(hp~RV;kBUMpU>ana-9OR`X$5VN75l00u-{P+Ogm6=d@Nr~5+s?t;y z9?pa@8{!ep{@F@l&4wg2O}u_>gITiq#|Ft}^}ymOe8*gB_?N6Bjl7c@{!`XbX;lh6 zm&JFWhVb3%gg;7j9sJZ7z9<+TnJgQ(wtCYe?ReQU4+%R<6Jn~c=;J|x!#dqu-E*Ug z-?mXMYuHiUZlkh|;{F-SXAD{}W6|6}6Y`hLTQpbbxut8H}-nQj!o2)9Q zdeR5mx+iiEc)Yn@kJpR6Kc0NZ-iY%ccA--n^*yS^9xz7jw<;ei%=ZK2nq|0$9m=Zqxi|?f_jv1;dxQsmds&{b!sAt8$IZm{ew;KEc)X1T zM6+ji?@Eu?ja{@W{;eR_4|==`;o~2BCzatW7dtHx#I@=nk5}^$u`*6xg>yf4xagj6 zQ{x)IRcqi;ysu8E!bMB)UX|bD&A_!EdxoDF>n^VY^J6ECN${_2ZH%{Z9W3EG1G}ma zjr(DbyrK}-*h%Aj8AYv)^9I+$C2pv|8gU-UbL8lK827N#%~EY>X*il!Rt(3u--tbk z^N3#L=q|xMa7sUsYXoe`i#N9vMsOX(URFw)HdwCMh-+{XtswtJ)zzIXbu@?bG6>{u z6r8{G%T{ed|87R_l%XeZ%*9?uj<~MEJ^;)3hLJO@hZh~`MH<)3N9PKdbghQMw!0K?{jq@s; zXFxs|N6ipiV<(Mu|Bp`hHh9ni?77%0u=}xRjDTaZlWQDdL?w6{EBy#bD^aHRUUdhTyC_^!Fgy&ro8_Nr+}1$NDJ(ry1| zMjN2QZTshp2669yWi$hND(pxGGtB%(#ERing?qW;eYH^gpN9XlhTH;z!T$eUL&<;4 z>Z*AZ3Bb-_uh@?4VRt_&JoQIES(#2a^~a))io4O??vT)6*9s%Abh88@T!%fV!mU0Y zFP_N4Ra{70W1TadUpu$EU_!%j z+i~cq>7q%{s5JdFTFsN1e`(HXaVJyJ45%h~b#wcf)l9XEYd{MvpPm zSYu2zC764e=bM+951HRI|6u;b9B=7i8EzTlv#hYJu{>wlZ#iQ*Z|P~Rwti-9vOb^k zUCKJ!Q?@s4XKhz(W9*ssRrWphckIy)m*YjpF6aBs1+JYWC^yILC9!D)%`Q!@)~`LL zb?6?@ZPs1XP1CQ@*XV=#3;IiXg+XaZF$^&j7}gnz4Vw*u;h^D7L#^So!FS#eGITel z8fO|08Q(PiVEn~6-t-Kj?Q33a?tmEGmiE@p*2&iC*0-%cTklBGrEEyqoHEh&fvvNB ziTyYGReKDAN_R|gY;_!T9CMs-eBt=FqpMTr9O1mfRY!u%;5hQxhf_0N^Qz`e&A&Bw zYhBuW?J8}l_9vfqrtXmLecfeUPyGOWihj8MDg6QcoBH?kr}RzwXhR1>w&6a+?L%rG zH&hu88BQ8LMaaJ*z0pROafz|eSZv&8eAc+%_@1$=No9J~^p@!}Q<8a}d5yW$yww~q zKWpA+e#88h`I@=CCEjwErN6~y8DW`dnQK{S@jYenSQlE?Sc|P&tyR_&NdIrvHfSZO ziov!e_HFi8?4Q`Lp)wwFv~$Kg9nK}r_09v%p!2FT*44-Ln(JNHDc2Pjm&%P@p)wR?2(x>Vt>Zj^+^b7PW^nU#|{S*45`s4a9^dbF!^miLl z4WkW{3=bO~H9T!NZ1~!6&2X1-uyLv}9~s$YJZOB!_>u8@;}zp=rX-WjG{lr?T4#FR z^rq=O(<#$erYQ66=7DCP!R#~-H>aELHRqc1(B}`D*P0(OKW;v34w~OHe`@~1EVp#D zs4cTC`IeOypJk(Eo8?u@2bPafurjOM+SfY3nqpmSU1eQwEwk>h?yCG+TjfqfM|qW_!~1z3sB?PM_Uux7+92AF>xB)qCt8 z+W)YxbQC%S$4A`;qij&UMa5oZFm_IiGUA;C#h-*!i~eg!2>US?9l< zKRSPR>Re-7_q*y{O)d^|Ir-qEn?|p(Vvv5QxuO}bU8H?P+oVKS3)pts zKD1r3bw@WYwC}VZx1YkCaKk>valhk`<4wm8j$a(St1p=c%EI#%7q97|`CAjEHEA8% zemS~Hx`n#+x_{|D({<3t>4)h@>z_01H=Hq?H$)pd8iyOlU~Io>I&Ff13XUTmA<8io zlT;~iFgWDS7$;6J<&!sVD=qshRhEO68p{z&&~nTYNZi8PV?EY%Ylbz`nq|$l=2~Y3 z=5FDK$I4S;QWPn1Daw?@6jh2k@UJcWs1da(CsXRs!1|PPDGe!dTZ~O%i?b&Mq!uPw%f{WyKEJhb1ZOp9r=y|$7+Y)QR&#{sKR_(<2d37V%Dv7oOIMVPCM!y=Nt`= z3*n?FoN-R2GtsGXssqEf@)J@+&P&cl=VfP;^DigoigL+aF)oEG&ZTrEyZXB{E`!VB zvb)@_G?&Mf?#ggwy0Tn(t_3cyE8kV%TJ7??iUMD4<$L==u1l^)*JU!)&&CL43$EKQzffyS%J*A!@0Yl<}+HD#LZnsO{$ z6`ESjNlhK*#(J!$4H~&NMyt@qX_eYUtxBubdbH`<3~i=1OPj6D)y@h$w2kjQs8)MY zTc#x)33_6R>u5;_s0v~PT<8z928+B#6 z?YeT^E?tFgudY(JPgkWosH@Q(!5V&2SEoCztJj^=HRvwrLb^-3Ml4KCI=MbZuRw7s z^@)0wUae2o_t$Im2E9e^(WmP(^qKlBeYQSVKPxa);Kybp8~PhG1_LG)yTNTpGk6T? zh73cVVS&MG$j4f?+Tb@7VIAIRC^J+V_F+{!XsE$sLoL>}I;_bd!zDwb;j*F0@E2CO zC}RL`FZAl0XIxD$MaU##-Y^W1aD|vEF#j*kHU67_gmBn&!bU z&%lJAWy&_?nr4}bO&d*RrtPM34E+kzUQ?xMpQ*}p&{ShOVyZQrG}U2%)tk{K?mL@aK4bbKt80-Y(#Uk(dmwd1w9Hiy6{9t^Jwjx( zNBTN(ZZ)nH_?m@8o&>35 z$SXvv2QBjhNLdn1Zifa2DP<>-ke)OdA;TSv62VPT-`S>#5GbJZf+jR&M^9Zm8;8gps# z3`j0RE`oR&G7y;xGGsnT<3ifbx*Q-s)5_x@Tn;Uiq=K{7fFiAYA7WA~U65h7Opv;} z#76pY-gp;nb3ce;HBF+>LnBiuZwN zifHm3h|fEaMja5JmoYR1#65_X*#@G()3apyD2PT&lZzlhhTPE)GWhO{q%{zv%EzD) zKy?i9gLw6{+H*wBK$8zaSoc>6X|)p>7C)dzq+!t+8RWRm9&$Q2O(Tv{s& zm7`+vQ2~;{G^33c<3htYy9dSOWyn;JDl=`m7=-PPy&#gENFB&{x(-f4hTXma;km$; zXZa)_UIuWvco>zMJpgs(XGk_k1w;0O1Q~J`q=6xFRCS$~wmb$zGn*!Y52#`mjlKq{ zVn}}sh788gD=_rp))a+=infPxIt+u)2*+YI7oLVOz}mvMHx z9rdG9V`zdIzKd?Ul&aj7+3w zk^=k-d~aEqog}|o!2JR*_f@o7ib#>~T}u;lw3F>Uj_UzZ)v87AjsVeMm;6t`m75_& zxN2m`XSmAs4W`wiTu2B*I)elmk`B^1gw|RCqDZC5vmkzkoB?sC(K6lKNbJxlG_nIV z4x`CpkTMTVf*|e@H2DoAV`PLxvSv|}Wl%SC$9_KUuCi9> zoxODSefb0LBPONo0!%ed35VxvBCe;>uH_hVUWW7l;qIkn>>zH2Oe9(inFrFqkX0ax zY}!tFGEgpq-T-NAC6RV+3;gyH^0i$&>9F;{nri+p{AdwaKEnP5s z5m)S!(9--RvzB?ebJHSiB&J<3ohQlMH)8=pZBLW99=(@BrJ;N{HBU zSkG!DIcVFW`xbf|8A1|J(MpKcI%w51WFtuBczmRTyD}oe?F1?Jp%^4o14K6R(YPp- zjWtAkxey`oSVKIRdnK*AK`d^XI6=rJ*%=2?n?cLW0kPu&or{8?=xj3)a?(OCf{?FP zONLH>h;I-?v;-_+;_?w8*Ff+r!nJL++!?Evl5u|*NKFR(OYIm86vS|r$b%pjMr|`u z!$cs-JO`4+kRwC}Q?Vp-mJlZS-+>fhKJ`gLmx0J8wKW!NSviyH{vfQ34J3;RaXd&S z5-PQRZi^PlvY6@R5j(!to?Z`h?qM=yB0}3ioVhB^0ME(MaiJ{$h z#nQMP^SUH62qX(jLK|+!>wGuga9qmKXOh6ZgdiUhSp`zZv`PReVhCA-^Duo#TJM91 zZyrS&MW&Zfdpf+0J|OX3sEAM;dQX{28%hQto76dJAX(@^$=SUixqdo>AK#)SLswNY z-PJ1tW1yTdq=P^d>`Fa27^I$2n~AFeru79N$*FWe+d#PcX!0T<*raBhAY&kpN&Z;~ zon}n`22vmHuSka4;6Wje$K*$SP$xsO)SPUidAxHr;=t3Z5lUm;lvX_iODb?|4l^kUw88U%{n6mPK zRN$FIl9>uZHaT{r4%<8s1?Dzsdh>(iVfvD^wu6+9LjOzXS)lZGbU<%|D4DVFEeLsK zENT4>qQIrpjE;B)t7S+ZLYQt%0cje}Wl@Gk0~I4FlId)a3M{1(c@kt7W9V&=JSNrk zAi05`j^MqI5Ke0mpJd<$$Ps2j=!D`To76M?K>T>;O44%PA`=Z8<%4M%C5W7vjPLdV zCBll78WTv~Fj{R4i1?Z$(tFj!5W$e9A`gvVF$V=p3ur|5zOIrni&WGEWDSYW##Lmq`C%he#k*)%ylg{-jH zq{Lo=P%YDX8P>dHW^^k-veIZn_kh$eEpvd7uRTbXCxMWWAqA8N;^T5@^bk-zQ(#*` z)UYKDl-EHDn0$N+LN>|S_aNe%osoRZ#WGYog!Z)-1pZZ&+T%dPk!0u)NF0ci*!Mxi z4=*F8r($9uT2hD$K>U!C+FAuttv=v)l~Y&}a~{%t@waf+$@ySx&UD zNhP--7kv)vlGaHOKhx)zbA3dKR*Qn`Amcs}SFDT)M9Hk?BS3Oz(a!DzDQ5aSA0(7Y z%WRy1!l`7Qlb(SP`F9eea(WMhb$=Gb&&)}UAQmREZD!uA6$es>WJs0=g7`d)AqNoF z18NLT0tqp_m z>S_Kyj?0(P&JsbAnS2;Q(%aB7X&}Yp(f^<=ll>GR)m*x&-vx2!(lYJP%NH1DN|0X_0S1Jaa^{+Ha(1}bJ|pj9B^_d+5e%CPd(Fs0WSgltjR5f?TUh=my) zHW2m|-t-nNpOnT$El46hLYUPjaEpw74qjn0`S5^{O|o+wBrlcD;`bm*(m`bWiBUHZ zAw0@U`RIVIAkW(p=?&t+OCO1tK$Ofw(MS+Ek|E_|G6>nEfbu|Qg@cBF(S0G%M%Zl& zL6JNTVo9T&Jqsd!SQ3#*#$YKQO3Ro*#4mS5WcGrjF@66Yh;m3+%h%%UOCa&Hzlhqr zd1xzwk=pSn2-&1|?7M{=1<7MFbQ(nb@F-$=?EM(hqI=FKwsiqe78BzZ5b-0gh}u;U z@pJPC@y*AZ0x%%uEC9lW_&kUjC>p!y>kW{C;Vn5M{m*e<0fh$BX}k`S%*^>67ocC= zv`kNsa;DBrAj%Q6j0c2lQqHnKl3TUH{_}yFm}%z`5b+)LNYo)B!#q-52VqTjUWftA ztdsYEgqSJL0aA{BZ7E^mKMTmi6xvdddPxW}B_L#z+OZSFGOX1Q?(GA~8cCDjEm~t2 zL53=G_@4%p$HeFbA)Dlkd_rjfk&5wokPtImgCO;hehuq?3=+(x1G)&JgppP|KJIUz zJSrlNOLzc;F*E=~4U9|w=6Pu-2-zg9$sqDH+VL!qS|-N@AmWz>A{BPs2NYsVcV3L5 zbJK?UfP|R&&IV#(GBF;6Y*Iio!vz1PMsvj3Vq%AxxC$4e7Lu6?-vOawMrbb~%)~gRyCC&UGtPsEAEZXy&su``6m*EImS8PpquvZ5@tboIwJuA;B2>%zfGC+-Ndb|M zqjNS4q@Ed;(?EhVX_@69cZ3+BM}XXc4JYxC{1Q%UnA&;^WC2sP=Rxw^w9RWE#f(hn zd=O@S>JF02OrbiECPpUB2PDs=O-}~N8cmbAAT>j1QUu~*N@Y6;*`zW^ScYmIOKUkn zJWTpBmZ4+nnRa9oHD(-&uFSN0(0x4jEE+u3Vt@Q*5*`)5M0>N0K0y<5!*v}8XzeVjTi1;rf3ewU4lF)pha;B_Sg2bVlrJmjjqVUtx zrgIfW2U9VVK#G~t^MYvLUb3?pB(4qmUyA4npv0Dl#Z zb}svX>KUO<4}mZpV+08?4;G_AE=;Bk-3KCmvnkRG?bnF!gOFY#JHBEGk~@voa;!mZ zkx?V9?4u!6$;>vhKx&yOX$gpY2yLhcB$=toognEY6!ZZid&G9%hdG4y4>oC+#Xo0aNGg3Nig*t>xiB7Itz7 zB-D6lOW<(*&+dr#N;G?UoS#F1Sua* zyZ;)*LS`LO++xyx2FhcimTf?RFzypUYMJsJ08*Jon|6YfGu1E!q?nPJ2XZW&Gx!(X z7ZM?+hIfIGO)8m}Zz0D($QL%GEXs?~WozhaC zUl2Jn!%hOJAJVEt{Lcguze5@^bP}YPN!s^B22V`VY%yySWS9)C0kJUSWh03Aed&nh zUYpU>p{?#Q|8NE%(f}#3!$B$;_tQXX$#`vTYXOKHPiqnpK*S$|M4TmVfjBnF@;e~n zmr7e?e4M8Y&ZLAud?tt-cBOt@3}VL}i97-#etR(DECiA@h7Ra&5D$}~Zd>7t8H&DS zpbDm~!$8O;MLh|mmNC5u#K45On#eFCXv-~jDnTllsygBWsu@m4{Q<~!#`I4h7KU6S zhSF)RuG?-7dKXAB6ZBD#a>mXV+XCt@@ngteaOWVCgxdr>=Q4$x0OHA@eGURCXixXb z2#}_6w9HHpbd;;zMPZ04(laVTY@X?#!uP%8MlW{%M znJ+-7K5*t7Ui!a<(_|)+&k13Q=vR;hOkefbfvRFsqXkJsCdizRj>a|}q>|BE-XbG! zmGS$4#9xU-)Vc=HY!BVYWDxRwHe{#8^g<9nQ%)N|YTdNV;~+JRo&6wk7cFx%fS$=? zYOWqaWRuFE2_(d%uR}S;3q#Z(;%`(UA?^mLXZn0U2x)^f$GlOF>5=`q)cX)hX4K9T zGJ=k}5yZpDwAmSsnF=}{M9zfR7sSuFcY>h(bXz9@HBF+O+Uke98<0(5ayHLVzI>f#pS(!Ak zfq2-L{v&|6`E))GgVZz5Y6)RXp9M+8sFMcXWsqd1J7iCw%!knKyMd^n;*->LKq02k zhJe&CMU+L<7}Ik=ikW~`5G`ho-b}RarQO$okbmL5?L0JDO!dz|P0SNOo87pHP3p6F zkl-xZkRD_oQy=46w1`#F^8Fyn(Sg<9;CHl}ac*Iz&^;jA84GWN6fpI44kVeGim!ku znZ-}>BxaygI<_Q`WM=8L`GCkKHEBFZJu{Qe1u14`gR`(yzjYh=$O}4Iw3CdK^fkC|dFdQp=3E)gWY(nz6kCT?`^k?R!9KnQ}T@f$7G> zl=FuWN`{&=P(vVcCe@cg%2v{CE#HHdF;n{ikOHP*wICkG{TUFnpN{$>5KE$-LKQNL zUjm4nnG&@iH4GUJQouON1mUJfGELrWo0qeSQv@Ekz<2QN#LXsGVH~E14b7<4kK*%P!Uj;(`UkRyW0wA@F zp=yv~CJ)C!luXBb1=7C_ZRg_C=!Dgb>9%{(pUgl}f*fIF93VB!3_5{mG2>(=h|*0r ztN?^(8dkO!ML<4vK~OF8!%GmVXJ(#bAY_yB@fk<~Qy2dRImv_=^$Y@HsvrrZej@El z2Xa#p4g+eKMGMUYDQ4!~0+2WaBz1=XBK|-#(v0gMxlF1%Ka1s*89A?k6!@4l)&f;c zqledLAmYFA5HUUNIdmCgdO3*rL&b>9H-t=~n{gSWAdM!?AX#p-UrK&rCC0)KnixUI zzo0?-4f)0PDhT^E&f_5Bzh@GWS@=9s%}mG-f{6b@K}6eoRRr~5GEho zOK2EV`FDUA!dZlW(S3iQtRZxasUWq?@;nZtoGI98AQiJ|tu@3Bvp{VDNp{mRPlFVT zAx7R3J4DpdX`xz>%F#4A3nFLQ`V&Ykqb1vq5Sh}u3*;D+*L093k7&8&EwSl9DrVdl zfRIh<`;8#tFMA_7y8%+qJY97@AU^CyK~v0YKad4DZQDwQfi&c_G>r5=es2LpHp$sf zw~*@~<;)0fTZJN;Pgle9AX$vFS`Y;+lVHSvz625fnE^t={wKanoYU?Xf&`hQZMa2d zH^@Fl<{*fdA)kUIGfzT4f$Wt+B>wqV(61Pa&}@mZ3rOWqnj{m#tZz1u8YUmZK)jM^ zSjz(;o0R-Qkb-fNW%%C?6k>+Qb0G4T0uht;Hb@22vTr~a+;0FOn^Z$Ph@A{t>i{84UVU!^S;o>r zXFzIFX%YgdT0<9F_Cbu7nY7F@kV;0Y2qfgDWp;wFAGp7f4phJ-|3eV6N$t1@(!`j) z0TKflX_(#fDrU5R@fW;{l7`b-7wvaCh=rLr7J(?KGT^wiAi-R^jUkYeZRp~;?KKh@ zx&pgc7YdLp##b*NK}=scK=K(wnIL%+=@1uzkWFg!29O#?YZr)z>8ky=XubCuDq8%v z1tKwyJ#_Oc=^PN&*-DTaCPV9Qk$DWHd=ee>OCU<7sqY-Zj1t2{{RuHWfmZtl#6k}O z?k_@8X_@Xd=yS&OAdqsV%bY}pnOvrV__CQPpa7_n>7g=^EaqY084x9t*rOm#nRGy( zfoPb9eG6h?W{KZH#2J-SwG>Ft*Tqz0xU`UmZXsuHA>P9`YhAd7Onl>JnK#1(F>--% z6?}s4n_DEBZXw1aH(ObG3wiSv^5-q2^S^GkbARS7==od7ueT7>n>QO;Mw3J1e&@f8 z3e^41cP5iM_tBe=s${+Ry8_y)_>J^@@o-W+3=X^nC<_Dw-(Tf>$$kk2-fQN21TwDT zA9MD;Mf7B+!v}s^U|bW_KN1hIfp2gnoBvMW{58H8|1a?}=2+O%+`#B-xOqUlY9CmP zD}JGPcs1}kxk?Q1*Kt@9KFChJ7x=3g?sdn*`VR)SlABS1S8XT?Liz{lijp?G*rJX{GMWK&KBdi;eLpE?zev29@e-w>S?n1O?A`$vIOf5XQ) z@lstEmYE;0-oVX+;j7rc>*yH!iZO2gI2_~89|um{fbp@P1R7;%<&ICnxXq`5%?MqV z{%K$zk1pI6=+q3S*Tlo5z@BD4DR7~g?<#xlbYRhS1kmo$Bw24+)@OlsO}P3dd^O?o za5Q<39>A?n!WS~-nJ`-&NZGetMethodID( clazz, "startConversation", - "(I[Ljava/lang/String;)V"); + "(I[Ljava/lang/String;Ljava/lang/String;)V"); if (startConversationMethodID) { @@ -744,11 +744,119 @@ Messenger::StartConversation VARIANT vConversationData, VARIANT *pvWndHnd) { + JavaVM *vm = OutOfProcessServer::getJavaVM(); + JNIEnv *env; + HRESULT hr; + + if (vm && !(vm->AttachCurrentThreadAsDaemon((void **) &env, NULL))) + { + jobjectArray participants; + + hr = toStringArray(env, vParticipants, &participants); + if (SUCCEEDED(hr)) + { + jstring conversationData; + + hr = toString(env, vConversationData, &conversationData); + /* + * The MSDN is pretty scarce on the subject of vConversationData + * thus we can hardly rely on getting it right. + */ + if (hr == E_INVALIDARG) + { + conversationData = NULL; + hr = S_OK; + } + if (SUCCEEDED(hr)) + { + if (_jobject) + { + env->CallVoidMethod( + _jobject, + _jstartConversationMethodID, + (jint) ConversationType, + participants, + conversationData); + } + else + hr = E_FAIL; + } + } + if (env->ExceptionCheck()) + { + env->ExceptionClear(); + hr = E_FAIL; + } + } + else + hr = E_UNEXPECTED; + return hr; +} + +STDMETHODIMP Messenger::StartVideo(VARIANT vContact, IDispatch **ppMWindow) + STDMETHODIMP_E_NOTIMPL_STUB + +STDMETHODIMP Messenger::StartVoice(VARIANT vContact, IDispatch **ppMWindow) + STDMETHODIMP_E_NOTIMPL_STUB + +HRESULT Messenger::stop(JNIEnv *env) +{ + jclass clazz = _jclass; + + _jclass = NULL; + _jctorMethodID = NULL; + _jstartConversationMethodID = NULL; + if (clazz) + env->DeleteGlobalRef(clazz); + + return S_OK; +} + +HRESULT Messenger::toString(JNIEnv *env, VARIANT &v, jstring *string) +{ + BSTR bstr; HRESULT hr; - if (VT_ARRAY == (vParticipants.vt & VT_ARRAY)) + if (VT_BSTR == v.vt) { - SAFEARRAY *sa = vParticipants.parray; + bstr = v.bstrVal; + hr = S_OK; + } + else if ((VT_BSTR | VT_BYREF) == v.vt) + { + bstr = *(v.pbstrVal); + hr = S_OK; + } + else + hr = E_INVALIDARG; + + if (SUCCEEDED(hr)) + { + if (bstr) + { + jstring _string + = env->NewString((const jchar *) bstr, ::SysStringLen(bstr)); + + if (_string) + *string = _string; + else + hr = E_OUTOFMEMORY; + } + else + *string = NULL; + } + + return hr; +} + +HRESULT +Messenger::toStringArray(JNIEnv *env, VARIANT &v, jobjectArray *stringArray) +{ + HRESULT hr; + + if (VT_ARRAY == (v.vt & VT_ARRAY)) + { + SAFEARRAY *sa = v.parray; if (sa && (1 == sa->cDims) @@ -759,86 +867,41 @@ Messenger::StartConversation hr = ::SafeArrayAccessData(sa, (PVOID *) &data); if (SUCCEEDED(hr)) { - JavaVM *vm = OutOfProcessServer::getJavaVM(); - JNIEnv *env; + jclass stringClass = env->FindClass("java/lang/String"); - if (vm - && !(vm->AttachCurrentThreadAsDaemon( - (void **) &env, - NULL))) + if (stringClass) { - jclass stringClass = env->FindClass("java/lang/String"); + SAFEARRAYBOUND *bound = sa->rgsabound; + ULONG length = bound->cElements; + jobjectArray _stringArray + = env->NewObjectArray(length, stringClass, NULL); - if (stringClass) + if (_stringArray) { - SAFEARRAYBOUND *bound = sa->rgsabound; - ULONG length = bound->cElements; - jobjectArray participants - = env->NewObjectArray(length, stringClass, NULL); + ULONG elemsize = sa->cbElements; - if (participants) + data += bound->lLbound; + for (ULONG i = 0; i < length; i++, data += elemsize) { - ULONG elemsize = sa->cbElements; - - data += bound->lLbound; - for (ULONG i = 0; i < length; i++, data += elemsize) - { - VARIANT *v = (VARIANT *) data; - BSTR bstr; - - if (VT_BSTR == v->vt) - bstr = v->bstrVal; - else if ((VT_BSTR | VT_BYREF) == v->vt) - bstr = *(v->pbstrVal); - else - { - hr = E_INVALIDARG; - break; - } - - jstring participant - = env->NewString( - (const jchar *) bstr, - ::SysStringLen(bstr)); - - if (participant) - { - env->SetObjectArrayElement( - participants, - i, - participant); - } - else - { - hr = E_OUTOFMEMORY; - break; - } - } + jstring _string; + hr = toString(env, *((VARIANT *) data), &_string); if (SUCCEEDED(hr)) { - if (_jobject) - { - env->CallVoidMethod( - _jobject, - _jstartConversationMethodID, - (jint) ConversationType, - participants); - if (env->ExceptionCheck()) - { - env->ExceptionClear(); - hr = E_FAIL; - } - } - else - hr = E_FAIL; + env->SetObjectArrayElement( + _stringArray, + i, + _string); } + else + break; } - else - hr = E_OUTOFMEMORY; + + if (SUCCEEDED(hr)) + *stringArray = _stringArray; } else - hr = E_UNEXPECTED; + hr = E_OUTOFMEMORY; } else hr = E_UNEXPECTED; @@ -853,24 +916,5 @@ Messenger::StartConversation return hr; } -STDMETHODIMP Messenger::StartVideo(VARIANT vContact, IDispatch **ppMWindow) - STDMETHODIMP_E_NOTIMPL_STUB - -STDMETHODIMP Messenger::StartVoice(VARIANT vContact, IDispatch **ppMWindow) - STDMETHODIMP_E_NOTIMPL_STUB - -HRESULT Messenger::stop(JNIEnv *env) -{ - jclass clazz = _jclass; - - _jclass = NULL; - _jctorMethodID = NULL; - _jstartConversationMethodID = NULL; - if (clazz) - env->DeleteGlobalRef(clazz); - - return S_OK; -} - STDMETHODIMP Messenger::ViewProfile(VARIANT vContact) STDMETHODIMP_E_NOTIMPL_STUB diff --git a/src/native/windows/msofficecomm/Messenger.h b/src/native/windows/msofficecomm/Messenger.h index 7a8051c6a..5eca3e885 100644 --- a/src/native/windows/msofficecomm/Messenger.h +++ b/src/native/windows/msofficecomm/Messenger.h @@ -113,6 +113,8 @@ private: HRESULT createMessengerContact(BSTR signinName, REFIID iid, PVOID *obj); HRESULT destructJobject(); HRESULT getMessengerContact(BSTR signinName, REFIID iid, PVOID *obj); + HRESULT toString(JNIEnv *env, VARIANT &v, jstring *string); + HRESULT toStringArray(JNIEnv *env, VARIANT &v, jobjectArray *stringArray); DMessengerEventsConnectionPoint *_dMessengerEventsConnectionPoint; jobject _jobject; diff --git a/src/net/java/sip/communicator/plugin/msofficecomm/Messenger.java b/src/net/java/sip/communicator/plugin/msofficecomm/Messenger.java index 21319d1e8..831b3724d 100644 --- a/src/net/java/sip/communicator/plugin/msofficecomm/Messenger.java +++ b/src/net/java/sip/communicator/plugin/msofficecomm/Messenger.java @@ -21,7 +21,9 @@ import net.java.sip.communicator.service.protocol.yahooconstants.*; import net.java.sip.communicator.util.*; +import org.jitsi.util.xml.*; import org.osgi.framework.*; +import org.w3c.dom.*; /** * Represents the Java counterpart of a native IMessenger @@ -31,6 +33,12 @@ */ public class Messenger { + /** + * The Logger used by the Messenger class and its + * instances for logging output. + */ + private static final Logger logger = Logger.getLogger(Messenger.class); + static final int CONVERSATION_TYPE_AUDIO = 8; static final int CONVERSATION_TYPE_IM = 1; @@ -653,10 +661,13 @@ public Messenger() * type of the conversation to be started * @param participants an array of String values specifying the * other users to start a conversation with + * @param conversationData an XML BLOB specifying the phone numbers to be + * dialed in order to start the conversation */ public void startConversation( final int conversationType, - String[] participants) + String[] participants, + String conversationData) { /* * Firstly, resolve the participants into Contacts which may include @@ -670,10 +681,103 @@ public void startConversation( case CONVERSATION_TYPE_PHONE: case CONVERSATION_TYPE_PSTN: opSetClass = OperationSetBasicTelephony.class; + + if ((conversationData != null) && (conversationData.length() != 0)) + { + if (logger.isTraceEnabled()) + { + logger.trace( + "conversationData = \"" + conversationData + "\""); + } + + // According to MSDN, vConversationData could be an XML BLOB. + if (conversationData.startsWith("<")) + { + try + { + Document document + = XMLUtils.createDocument(conversationData); + Element documentElement = document.getDocumentElement(); + + if ("TelURIs".equalsIgnoreCase( + documentElement.getTagName())) + { + NodeList childNodes + = documentElement.getChildNodes(); + + if (childNodes != null) + { + int childNodeCount = childNodes.getLength(); + List phoneNumbers + = new ArrayList(childNodeCount); + + for (int childNodeIndex = 0; + childNodeIndex < childNodeCount; + childNodeIndex++) + { + Node childNode + = childNodes.item(childNodeIndex); + + if (childNode.getNodeType() + == Node.ELEMENT_NODE) + { + phoneNumbers.add( + childNode.getTextContent()); + } + } + + int count = participants.length; + + if (phoneNumbers.size() == count) + { + for (int i = 0; i < count; i++) + { + String phoneNumber + = phoneNumbers.get(i); + + if ((phoneNumber != null) + && (phoneNumber.length() != 0)) + { + if (phoneNumber + .toLowerCase() + .startsWith("tel:")) + { + phoneNumber + = phoneNumber.substring(4); + } + participants[i] = phoneNumber; + } + } + } + } + } + } + catch (Exception e) + { + logger.error( + "Failed to parse" + + " IMessengerAdvanced::StartConversation" + + " vConversationData: " + + conversationData, + e); + } + } + else + { + /* + * Practice/testing shows that vConversationData is the + * phone number in the case of a single participant. + */ + if (participants.length == 1) + participants[0] = conversationData; + } + } + break; case CONVERSATION_TYPE_IM: opSetClass = OperationSetBasicInstantMessaging.class; break; + default: throw new UnsupportedOperationException(); }