void CACHE_SESSION::unserialize_bin(char *bin) { // zend_printf("CACHE_SESSION::unserialize_bin()\n"); unsigned long *p = (unsigned long *)bin; this->session_id = p[0]; unsigned long nbases = p[1]; p += 2; CACHE_BASE *cb; while(nbases--) { long base_id = *p++; long sbas_id = *p++; bool online = *p++ ? true : false; char *viewname = (char *)p; p += LSTRPAD(strlen(viewname)) / sizeof(long); char *host = (char *)p; p += LSTRPAD(strlen(host)) / sizeof(long); long port = *p++; char *user = (char *)p; p += LSTRPAD(strlen(user)) / sizeof(long); char *passwd = (char *)p; p += LSTRPAD(strlen(passwd)) / sizeof(long); long engine = *p++; char *dbname = (char *)p; p += LSTRPAD(strlen(dbname)) / sizeof(long); char *xmlstruct = (char *)p; p += LSTRPAD(strlen(xmlstruct)) / sizeof(long); unsigned long ncoll = *p++; cb = this->addbase(base_id, host, port, user, passwd, dbname, xmlstruct, sbas_id, viewname, online); while(ncoll--) { int l; long coll_id = *p++; long base_id = *p++; // long phserver_port = *p++; long registered = *p++; char *name = (char *)p; l = LSTRPAD(strlen(name)); p += l/sizeof(long); #if GETPREFS char *prefs = (char *)p; l = LSTRPAD(strlen(prefs)); p += l/sizeof(long); #endif // char *phserver_host = (char *)p; // l = LSTRPAD(strlen(phserver_host)); // p += l/sizeof(long); // cb->addcoll(coll_id, base_id, name, phserver_host, phserver_port, registered ? true : false); cb->addcoll(coll_id, base_id, name, prefs, registered ? true : false); } } }
long CACHE_SESSION::get_binsize() { long binsize = sizeof(this->session_id) + sizeof(long); CACHE_BASE *cb; for(cb=this->firstbase; cb; cb = cb->nextbase) binsize += cb->get_binsize(); return(binsize); }
void CACHE_SESSION::dump() { CACHE_BASE *cb; zend_printf("<pre>+--session_id=%li\n", this->session_id); for(cb = this->firstbase; cb; cb = cb->nextbase) cb->dump(); zend_printf("+-- (session binsize=%li)\n", this->get_binsize()); zend_printf("</pre>\n"); }
long CACHE_SESSION::get_local_base_id(long local_base_id, long distant_coll_id) { CACHE_BASE *cb; for(cb=this->firstbase; cb && cb->base_id != local_base_id; cb = cb->nextbase) ; if(cb) return(cb->get_local_base_id(distant_coll_id)); return(-1); }
/* idem que la version du dessus, a la difference que local_base_id peut etre une coll fille et non la coll mere plus d'explication : AS */ long CACHE_SESSION::get_local_base_id2(long local_base_id, long distant_coll_id) { CACHE_BASE *cb; CACHE_COLL *cc; for(cb=this->firstbase; cb; cb = cb->nextbase) { for(cc=cb->firstcoll; cc && cc->base_id != local_base_id; cc=cc->nextcoll) ; if(cc) break; } if(cb) return(cb->get_local_base_id2(distant_coll_id)); return(-1); }
int CACHE_SESSION::serialize_bin(long *binbuff = NULL) { CACHE_BASE *cb; unsigned int l = this->get_binsize(); long nbases = 0; long *p; if(binbuff == NULL) return(l); // just return the needed size binbuff[0] = this->session_id; binbuff[1] = 0; p = binbuff+2; for(cb = this->firstbase; cb; cb = cb->nextbase) { binbuff[1]++; p = cb->serialize_bin(p); } return(l); }
void CACHE_SESSION::serialize_php(zval *result, bool everything) { CACHE_BASE *cb; CACHE_COLL *cc; bool basereg; zval *zbaselist; array_init(result); add_assoc_long(result, (char *)"session_id", this->session_id); MAKE_STD_ZVAL(zbaselist); array_init(zbaselist); for(cb = this->firstbase; cb; cb = cb->nextbase) { basereg = everything; for(cc=cb->firstcoll; !basereg && cc; cc=cc->nextcoll) basereg = cc->registered; if(everything || (cb->online && basereg)) // on ne retourne pas les bases offline cb->serialize_php(zbaselist, everything); } add_assoc_zval(result, (char *)"bases", zbaselist); }
void CACHE_SESSION::serialize_php(zval *result) //, bool everything) { CACHE_BASE *cb; // CACHE_COLL *cc; // bool basereg; zval *zbaselist; array_init(result); add_assoc_long(result, (char *)"session_id", this->session_id); MAKE_STD_ZVAL(zbaselist); array_init(zbaselist); for(cb = this->firstbase; cb; cb = cb->nextbase) { // basereg = everything; // for(cc=cb->firstcoll; !basereg && cc; cc=cc->nextcoll) // basereg = cc->registered; // // if(everything || (cb->online && basereg)) // don't return offline bases cb->serialize_php(zbaselist); // , everything); } add_assoc_zval(result, (char *)"bases", zbaselist); }
int CACHE_SESSION::serialize_bin(long *binbuff = NULL) { CACHE_BASE *cb; unsigned int l = this->get_binsize(); long nbases = 0; // int written; long *p; if(binbuff == NULL) return(l); // on demande juste la taille maximum n�cessaire // zend_printf("CACHE_SESSION::serialize_bin()\n"); binbuff[0] = this->session_id; binbuff[1] = 0; p = binbuff+2; for(cb = this->firstbase; cb; cb = cb->nextbase) { binbuff[1]++; p = cb->serialize_bin(p); } // written = ((char *)p) - ((char *)(binbuff)); // zend_printf("CACHE_SESSION::serialize_bin returning l=%i, written=%i\n", l, written); return(l); }