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!

Tags: , ,

Leave a Reply

You must be logged in to post a comment.