Exemple #1
0
static bool onSessionEvent(EVENT *ev)
{
	InPacket in(ev->packet->data, ev->packet->dataLen);

	Pool *pool = ev->s->getPool();
	PRES *pres = new(pool) PRES(pool);

	in >> pres->status >> pres->p2pVer;
	pres->realIP = in.read32();
	pres->msgPort = in.read16();

	ev->s->registerEvent(moduleIndex, pres);

	DBResult *res;
	DB_ROW row;

	SQLStmt sql(ev->conn);
	SQL_APPEND(sql, "SELECT contact, subscrpt FROM roster WHERE id=");
	sql << ev->s->getUserID();
	if (!ev->conn->query(sql.getData(), sql.getLength()) ||
		!(res = ev->conn->getResult()))
		return false;

	const char *name = ev->s->getUserName();

	while ((row = res->fetchRow()) != NULL) {
		const char *c = row[0];
		uint8 sub = atoi(row[1]);

		if (sub & SUB_TO) {
			PACKET p;
			p.cmd = CMD_SRV_PROBE_STATUS;
			p.from = name;
			p.to = c;
			p.data = NULL;
			p.dataLen = 0;
			p.online = true;

			ev->mapi->deliver(&p);
		}

		if ((sub & SUB_FROM) && (pres->status != STATUS_INVIS))
			addAndNotify(ev, pres, c);
	}
	res->destroy();

	return false;
}