funambol, php és mysql egyben
Mint mindenkinek, akinek van mobiltelefonja és saját adatbázisban tárolt címjegyzéke, naptár adatbázisa, elgondolkodott már azon, hogyan tudná ezeket az adatait legalább egy kicsit is szinkronban tartani. A weben léteznek mobil szinkronra szakosodott oldalak, de azok csak nehézségek árán adnak lehetőséget erre. Ha van saját szerverünk, akkor a funambol kínál egy lehetőséget a syncml szabvánnyal, hogy java alapon létesítsünk magunknak egy szinkron szervert, amivel többek között a contact és calendar bejegyzéseinket egy kézben tarthatjuk.
Ezzel csak egy probléma van, a telepített szerverünknek valahogyan kommunikálnia kellene saját adatbázisunkkal. A funambol hypersonic adatbáziskezelőt használ, ami persze nem elérhető php-vel. Szerencsére, lehet a funambol szervert mysql-lel is telepíteni. Ezután már csak össze kell kapcsolnunk a saját adatbázisunk a funambol adatbázisával.
És itt jön pár buktató.
A jelszó. A funambol beléptetéshez nem egy egyszerű md5-öt használ, hanem saját kulccsal operál. Itt a php forráskód:
function funambol_encrypt($cleartext)
{
$key = "Omnia Gallia in tres partes divida est";
$key = substr($key, 0, 24);
$cleartext = trim($cleartext);
$comp = ceil(strlen($cleartext) / 8) * 8;
$car = $comp - strlen($cleartext);
$cltxt = str_pad($cleartext, $comp, chr($car));
$cleartext = $cltxt;
$iv = "01234567";
$td = mcrypt_module_open(MCRYPT_3DES, "", MCRYPT_MODE_ECB, "");
$iv = @mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
@mcrypt_generic_init($td, $key, $iv);
$encrypteddata = mcrypt_generic($td, $cleartext);
mcrypt_generic_end($td);
return base64_encode($encrypteddata);
}
De ez még nem elég. Van még egy dolog, amit figyelembe kell venni. A timestamp. A funambolos timestamp nem ugyanaz, mint a mysql-es timestamp. A legegyszerűbb módja, ha mysql-ben, az update utasításban szorzunk 1000-el:
last_update = unix_timestamp()*1000
Ezek után még meg kell küzdenünk azzal a problémával, hogy az fnbl_pim_ kezdetű táblákra közösen vonatkozik az egyedi id, így amikor beszúrunk ezekbe a táblákba egy rekordot (pl.: kontakt, naptár) az id meghatározásához ezen táblák id-jeit közösen kell figyelembe venni.
És végül van még egy dolog, ami lehet, hogy az én hibám, de nem találtam rá jó megoldást: a funambol szerver, a mysql, a linux mind ugyanabba az időzónába van telepítve, mégis a nyári időszámítás alatt le kell vonni a naptár bejegyzések időpontjaiból egy órát. Ha erre tud valaki jó megoldást (vagy mit kellene másképp csinálni), kommentelje be, ha megkérhetném…
Összefoglaltam az összes trükköt, aminek a megoldása nem volt triviális.
Sok sikert a szinkronizáláshoz!
Leave a Reply
You must be logged in to post a comment.