Esempio n. 1
0
/* 0-NAO EXISTE! 1-EXISTE! */
int existUser(node *t,char *username, char *pass) {

	if(t) {
		if(strcmp(t->username,username) == 0){
			if(strcmp(t->password,pass) == 0)
				return 1;
			else
				return -4;
		}
		if(strcmp(t->username,username) > 0)
			return existUser(t->left,username,pass);
		else
			return existUser(t->right,username,pass);
	}	

	return -2;
}
/* Funcion que va a agregar a un usuario SI Y SOLO SI no se 
* encuentra en la base de datos, Si existe no lo agrega.
* REQUIRES:
* 	user != NULL
* RETURNS:
*	true 	si el usuario fue agregado
*	false	caso contrario (ej ya existia o error)
* NOTE: NO se debe liberar user despues de haber llamado a esta
* funcion.
*/
bool UDataBase::addUser (CUser * user)
{
	bool result = false;
	
	/* pres */
	ASSERT (user != NULL);
	
	/* verificamos si existe o no en la hashTable */
	if (existUser (user))
		/* lo borramos al choripan */
		delete user;
	else {
		fstream filestr;
		fstream verF;
		QString data = "";
		
		/*! hacemos atomico esto */
		this->mutex.lock();
		/* agregamos a la hash una nueva entrada */
		this->hashTable.insert (user->getMAC(), user);
		this->mutex.unlock();
		
		/* hacemos un append en el archivo */
		data = user->getMAC();
		/* tenemos: MAC */
		data.append(QChar(','));
		/* tenemos: MAC, */
		data.append (user->getNick());
		/* tenemos: MAC,Nickname */
		data.append(QChar('\n'));
		/* tenemos: MAC,Nickname\n */
		filestr.open(this->fname.toStdString().c_str(), fstream::out | 
			fstream::app);
		
		if (filestr.good()) {
			filestr << data.toStdString().c_str();
			filestr.close();
		}
		
		/*! ahora vamos a guardar los usuarios que se registran para
		 * llevar una cuenta propia de usuarios registrados por noche */
		verF.open(REG_CONTROL_FILE, fstream::out | 
		fstream::app);
		
		if (verF.good()) {
			QString auxD = "<user>";
			time_t nowraw;
			char *strTime = NULL;
			
			time(&nowraw);
			strTime = ctime(&nowraw);
			auxD.append("<Fecha>");
			auxD.append(strTime);
			auxD.append("</Fecha>");
			auxD.append("\n");
			auxD.append("<user_inf>");
			auxD.append(data.toStdString().c_str());
			auxD.append("</user_inf>");
			auxD.append("\n</user>\n");
			
			verF << auxD.toStdString().c_str();
			verF.close();
		}
		
		result = true;
	}
	
	return result;
}