Esempio n. 1
0
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);

		}
	}
}
Esempio n. 2
0
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);
}
Esempio n. 3
0
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");
}
Esempio n. 4
0
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);
}
Esempio n. 5
0
/*
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);
}
Esempio n. 7
0
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);
}
Esempio n. 9
0
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);
}