• Main Page
  • Related Pages
  • Namespaces
  • Data Structures
  • Files
  • Examples

/home/dko/projects/mobilec/tags/MobileC-v1.10.4/src/security/asm.c

Go to the documentation of this file.
00001 /* SVN FILE INFO
00002  * $Revision: 231 $ : Last Committed Revision
00003  * $Date: 2008-10-24 15:58:25 -0700 (Fri, 24 Oct 2008) $ : Last Committed Date */
00004 #include "../include/mc_platform.h"
00005 #include "../include/message.h"
00006 #include "asm.h"
00007 #include "asm_message_composer.h"
00008 #include "config.h"
00009 #include "mc_dh.h"
00010 
00011 #ifdef MC_SECURITY
00012 
00013 AP_QUEUE_STD_DEFN_TEMPLATE
00014 (
00015  asm_queue,
00016  asm_node
00017  )
00018 
00019 AP_QUEUE_SEARCH_TEMPLATE
00020 (
00021  asm_queue,
00022  SearchAddr,
00023  asm_node,
00024  struct sockaddr_in*,
00025  (
00026   (key->sin_addr.s_addr == node->remote_addr->sin_addr.s_addr) &&
00027   (key->sin_port == node->remote_addr->sin_port)
00028  )
00029  )
00030 
00031 AP_QUEUE_REMOVE_TEMPLATE
00032 (
00033  asm_queue,
00034  RemoveAddr,
00035  asm_node,
00036  struct sockaddr_in*,
00037  (
00038   (key->sin_addr.s_addr == node->remote_addr->sin_addr.s_addr) &&
00039   (key->sin_port == node-html#b36a177f329aea77a2496b5b9c21b8fe">to_address, exit(0); );
00089 
00090   strcpy(message->to_address, addr);
00091 
00092   message->message_type = REQUEST_ENCRYPTION_INITIALIZE;
00093 
00094   message->xml_root = message_xml_compose__RequestEncryptionInit(mc_platform);
00095 
00096   message->message_body = mxmlSaveAllocString
00097     (
00098      message->xml_root,
00099      MXML_NO_CALLBACK
00100     );
00101 
00102   message_queue_Add(mc_platform->message_queue, message);
00103 }
00104 
00105 int
00106 asm_SendEncryptionData(
00107     mc_asm_p security_manager,
00108     const char* address
00109     )
00110 {
00111   message_p message = message_Initialize();
00112 
00113   message->to_address = (char*)malloc
00114     (
00115      sizeof(char) * (strlen(address)+1)
00116     );
00117   CHECK_NULL(message->to_address, exit(0););
00118   strcpy(message->to_address, address);
00119 
00120 /*  if(_message->addr != NULL) {
00121     message->addr = (struct sockaddr_in*)malloc(sizeof(struct sockaddr_in));
00122     *(message->addr) = *(_message->addr);
00123   } */
00124 
00125   message->message_type = ENCRYPTION_INITIALIZE;
00126 
00127   message->xml_root = 
00128     message_xml_compose__EncryptionInitialize
00129     (
00130      security_manager
00131     );
00132 
00133   message->mAGYBV}Yo8ywH	HE=ߟnՃ>dO KJW2&#qCz0%t U("Vlb)eyӡ?+ty*S:\dwqNZz":ʓV̥QnK:67,xuc^>Uj^UhU)njiQ(GWai]=d6_ᐲ'aP(R|^Rnn'^f\Tm54?&@Ru'i}aTFCȣXWʷWkpOLt|,(W;T`<0st9gTkk=*/r,:f9|A7T:CXky8KѹrG&Ѥ\$&7d:2"ʑS}RVÁbKyC&T2bBmFh3%YO}P2*5jBfUhl̝s&cLe^i MoG6gUS+D̹in*'ΰ\yJ4qv86.NY?Oy]xcFpػ"hjM:fi'ΉGhfU;Jᘻ\hx/JwĹnM~F$f-X{qlM𕎺=N!hFJ緉S8J$4lndE}91]bW\sfJΗ]&ۺsXO3+SXVbu1
4L2GJCw\8nȗ_,yYƦ?q
~N-WNeKh˷%vX3e^IH
E/qn͞3(ύ>bs)YrZbZǭݖ2İYoDd< &ޯhg7~5X$YN֖Z8>ĥ[!\KA"s=k*N#H[S˧eWv,-8U'txꢇ'֝hWTHpY%¶_(w3cf/D端EZP&{-}N~|%4f%Wjp>([ۗO&^fj̴霐YxpC/пzXX&Tνaa\]Z
e`Me%cظ0ݑ{>ap#ٟHM=k;fi[*e/FUխ'.:-x2%"j2nAGbiSO,fwNÙfX,(%@W%\-4Ƥ;7hH$dE:d`U]a\?$Ob8]o{ݭL/#>#U!ӊZf4X;{	)Z+fY1J{MjsZ(RԂ0Xm]H-XgF:'}D2KdMw/|m--8&?]ro薗:žE?ݐ3^NO5]M+_lÏ}DR\jT$MS%/K^^ĐDuWZMpX5ޙ0n5D洖$޼creZQ}j]ֈ%Ru̱3rRYD!'zi$mdW$*fR9Ӵ7sjZcW퍨jH-'Nf3k.KtyFs̬]57I/:eHl=r~&5rezo`i8Ge$Ag_JN^#'tr3lDC4=ۡ"d}y#J]I-B-_4Ժlyw.UA٨H*xhw׵
V* eQYaJ`8wߏD5&F(V_Mq}WN>"7+~dZ<#jFȋ֥_jTfkК-\3'Z?$;f^9e[ymL)_0p2EbOaCBS!))\e[D?0StOP8*#@}ѻHz̒Ė͈cJrR`L@_P砳sc<lYNݮ7E'̕=yKQst@"fϮfUɰ;B̆R*ԫ*8~@Jp,WloE8!7	LlߛC4YTX7u*gtvk׷BP?uC/m˗l_ӌ`K	'+d8kMZ[w-޻<͌UeK)~gC5]cK7589yzJ:<,m;VDKYn1ն{ҪcLvP6:&Sfe]TXQ>$ә75
pZꝻd>ZeBi3(<em&	̓~؀AFR2ǠT)-6XŲO缈dbcl<-39L.-ǿ։q)]Ր&9gDBYk-w#\1ݍ!vрsџ!i@|4ս|*iTc8?F^:HPϤ(	\Z;	JEvA\g|/)}QRPkư?:\\R8Q 01+!R}Sru5yK
Vf7k+s2@tŋiŖG10fOM^yP('lMFQLWN2zVHp[s}ڬ{ؽcR3Ty@y2RgLؽ,пf\0oAV_eHJ-AfwȜ#zJZ
XlڛCEN3=oL\	#kl~&49XltK0%MАL|mAՍ&]]ݭv<@ܫ/LM{u~h"-$GcK"oBB^eAWi	(zŒuC*'m0n|];gn{> -,?Orxkt%_.+v瞴7MSqRŶe߆Z|l IC1QՂ;XIf"t;G0"WK/1EbUư[pK厣R%XA
8"b~UY/ef$?FV^L_kTҏE3:&x&	VW>(퓖?ǣQ*3ٲ~U{zGڿg0!,nX:=<|ibIsơ&#	R"bpBRâҸʰBemmX]xBdoɂS4]m{f`7!b
ȝÔ^GIHUK]iq,\hVP##XD͛OuHe^jߩ'Eb.=Sv%g7W(6Ly9cHQS'hO=4"dfz),r2ҁ_kㅇ6k4/ggnќs
R1N}	^,1SL_49UBOX
W[Ͽt}-{jܛ>HVJ};3ؒ$8_vw6#?oI~7^98q?gJ9@8D2q^X|Ʌ/VXW%oE<l.JJGOi̟ں~.Eܨ޷<踃 
9qkF+Bդq~3Vy5=bZ˦R^a]v-J{e.[e"FCLMG𒍉XQ#n;f:n(h	yNPh30T,P'+6)ʐ	HtpM8Sp8+0%IY0s{jT7oO03#(cv|(ql6SYocnLK³Gr1p%|諵`x+y<8<A
޴]nz2/W:}H5+W•It.*u,TղMk5YF}Wk9
Bρs[۳]K෱uA3m'		YRLf1oQulf_3**cz\lW*m?
b!ñ0x*%ƾQwx(sxzHd4ؒݐQ
7
7pŽT)P#NFh|^3u&T0Y޿Od2w(
{~>3.&+2xOB6TLl.*H|tQCW5ʒ,Js#)X*s;FT8`F׋-]	l˄GX @qhz1C8GCX{CBu5H|FGǏCtY{v;K%R:)*ada.Ro2ᴠEs܀#Qܚ8su-{sb'
x%qHuߝ59{NARRoiWiqo39^%oRf3j_Պ9Tlg8{x^ca֨,/ǯ3=Vx}]Qrn97A%˧u)"V4(`'+9rW	UxSi3=EVDZLLY	DË–&\$"'aIz۩aKJM;Xʊ?)*#sGV46-gM|Gt4a{qL(}vGB+O.?UH^@CIm7˓lQn\q2HհI
ZƏzJ_mh[jwµ_#>?~.Ka9rțpƵfg	|^4=9xpݝ!nFѤ7~^{C9wϾ Xp{ wf0B00dK
La	Xej੻ؐCDeq}?z	gx"|J
rxtDx͢CCxaYC! xh g7YRybǰ(gW<
]Se6Χp?dRM.).6(p|v5ʡ#c;,"|KO`7‡\-Rh:Ї^Z|A&o6$	h$>Cqa
4vPsaqU04xxɦ(vvع1Ǔv">M :]}y-"µB]q	1 #bp>

^#2)X* k|*8l(ĂuN,uѡ4VNj͓9.nf} V'h y@a;KmZpAV'A>tg} Z9 MH]X:NN8P$HxYע]w NDV,0 VmǖM$ 0Z7B8a6;~0}uuu2İ|°F5%(7- ;"sho]T*IW0~7/@b]zw0}ׅ € KV𭜸?'r00224 /* Go through each of the lost messages and see if they can be 00225 * decrypted/encrypted. */ 00226 for 00227 ( 00228 i = 0; 00229 i < mc_platform->security_manager->lost_message_queue->size; 00230 i++ 00231 ) 00232 { 00233 message = message_queue_Pop 00234 ( 00235 mc_platform->security_manager->lost_message_queue 00236 ); 00237 if (message == NULL) { 00238 message_queue_Add 00239 ( 00240 mc_platform->security_manager->lost_message_queue, 00241 message 00242 ); 00243 break; 00244 } 00245 if (message->addr == NULL) { 00246 message_queue_Add 00247 ( 00248 mc_platform->security_manager->lost_message_queue, 00249 message 00250 ); 00251 break; 00252 } 00253 if 00254 ( 00255 asm_queue_SearchAddr(mc_platform->asm_queue, message->addr) 00256 ) 00257 { 00258 message_queue_Add 00259 ( 00260 mc_platform->message_queue, 00261 message 00262 ); 00263 } else { 00264 message_queue_Add 00265 ( 00266 mc_platform->security_manager->lost_message_queue, 00267 message 00268 ); 00269 } 00270 } 00271 } 00272 MUTEX_UNLOCK(mc_platform->asm_queue->lock); 00273 message = message_queue_Pop(mc_platform->asm_message_queue); 00274 if (message != NULL) 00275 { 00276 asm_node = asm_queue_SearchAddr 00277 ( 00278 mc_platform->asm_queue, 00279 message->addr 00280 ); 00281 switch(message->message_type) 00282 { 00283 case ENCRYPTED_DATA: 00284 if (asm_node == NULL) { 00285 /* The encryption session was never initialized with this host, 00286 * according to this agency. Let us initialize it now. */ 00287 asm_RequestInitFromAddr 00288 ( 00289 mc_platform, 00290 message->from_address 00291 ); 00292 message_queue_Add 00293 ( 00294 mc_platform->security_manager->lost_message_queue, 00295 message 00296 ); 00297 continue; 00298 } 00299 if ( 00300 message_Decrypt(message, asm_node) 00301 ) 00302 { 00303 fprintf(stderr, "Decrypt error. %s:%d\n", __FILE__, __LINE__); 00304 message_Destroy(message); 00305 } else { 00306 message_queue_Add 00307 ( 00308 mc_platform->message_queue, 00309 message 00310 ); 00311 } 00312 break; 00313 case ENCRYPTION_INITIALIZE: 00314 asm_queue_RemoveAddr 00315 ( 00316 mc_platform->asm_queue, 00317 message->addr 00318 ); 00319 asm_queue_Add 00320 ( 00321 mc_platform->asm_queue, 00322 asm_node_Initialize(message, mc_platform->security_manager) 00323 ); 00324 message_Destroy(message); 00325 break; 00326 default: 00327 if (asm_node == NULL) { 00328 /* Send our encryption data to other host */ 00329 asm_SendEncryptionData 00330 ( 00331 mc_platform->security_manager, 00332 message->SE-ZxmUIĮTrTD3͕i֗-s$hJʱ®x}f1l8:P\vK䎒7YFKMۚ$[2CFT_KoNֆyv<+V)dNlF1QrEQdƫ/fWAXs#Z^-6+axNkSw9_NL {t'9m }RaۜdX{Ƹd*5 hVjJ1TĎˡ\]feXckS˗ 0ُy;DZ/ªPz}S;P4, uC6 =o͈u 4[(zpc`wUDZp dcyYQO' |o++Ǫ ZU /ޖs[^;lq+r+_a>֡XmC$b ΍`_忇NHVSMao ^L"0 ;MAd\`[&j-ZrlmrؤY,,ԧi0V`۵͍IXV;+=43"eKF7r&+۪\QKX۳Gۼ8}:i ]8ʌj,Ri_KNQW(@kN22D4N!Oji"SzxYiYoL_Ih7ҚDg(=oδXؔ&O";X-lSFM索啪6-IbX,Ubc feZI)c|簍ʛ% .ƻ<%ϤZc;)vp= ̠a¼y?dLoZ_Z@dU5 t3n(5j`$hB'jE_eOHh[o"ZÆcf'7jOk+ݔ*_. 3͕i#z"n 3VZ so)!k\x;lF0S9)?R%r;KaJOhp,T 47OMn:E5uq–V]HJ]qvٵ쯹#іR=j.yF-@SV|6 cG>ԍ[ˮ"ou%^MŖ{CT(,'yOVӉZ>}"Β{%GO~Ez=%?8oĹ}GK2x_{T?sNgq9xfO 5?<.qx^{b36O2~aC4ߟt ZS4ad0o%!s_%UqIW̟{bLYv;LyLsw4WdOWiGBrUU$}#?O^b"X$SzN}u||;߯ ;ŞoY)x) +[3O+\BnO7~}z?;×SR%Y{Mi-|VQ>Y겋8zEkPu.!uǷ) UW>~'xF–Do##ٵ -vvJW/v&X)<ëD?|cKbhM+&|I_o,s:h8 8N' Ja? @u[z67{:{XA-QF:ҿx6([jH[X*؈QԆ%