Beispiel #1
0
// ------------------------------------------------------------
int Qaullib_UserCheckUser(union olsr_ip_addr *ip, char *name)
{
	struct qaul_user_LL_item *user;
	int user_found = 0;

	// check if user exists in LL
	if(Qaullib_User_LL_IpSearch (ip, &user))
	{
		// if user exists: update lastseen_at
		if(user->type < QAUL_USERTYPE_KNOWN)
		{
			// set user name
			strncpy(user->name, name, MAX_USER_LEN);
			memcpy(&user->name[MAX_USER_LEN], "\0", 1);

			// hide empty users
			if(strlen(user->name) > 0)
			{
				user->type = QAUL_USERTYPE_KNOWN;
				user->changed = QAUL_USERCHANGED_MODIFIED;
			}
			else
			{
				user->type = QAUL_USERTYPE_HIDDEN;
			}
		}
		else if(user->changed >= QAUL_USERCHANGED_DELETED)
		{
			if(user->changed == QAUL_USERCHANGED_DELETED)
				user->changed = QAUL_USERCHANGED_UNCHANGED;
			else
				user->changed = QAUL_USERCHANGED_MODIFIED;
		}

		user->time = time(NULL);
		user_found = 1;
	}
	else
	{
		// if user does not exist: create user
		user = Qaullib_User_LL_Add (ip);
		// set user name
		strncpy(user->name, name, MAX_USER_LEN);
		memcpy(&user->name[MAX_USER_LEN], "\0", 1);

		// hide empty users
		if(strlen(user->name) > 0)
		{
			user->type = QAUL_USERTYPE_KNOWN;
			user->changed = QAUL_USERCHANGED_MODIFIED;
		}
		else
		{
			user->type = QAUL_USERTYPE_HIDDEN;
		}
	}
	return user_found;
}
Beispiel #2
0
// ------------------------------------------------------------
void Qaullib_UserTouchIp(union olsr_ip_addr *ip, float linkcost)
{
	struct qaul_user_LL_item *user;

	if(QAUL_DEBUG)
		printf("Qaullib_UserTouchIp \n");

	// check if user exists in LL
	if(Qaullib_User_LL_IpSearch (ip, &user))
	{
		if(QAUL_DEBUG)
			printf("user exists \n");

		// if user exists: update lastseen_at
		if(user->changed >= QAUL_USERCHANGED_DELETED)
		{
			if(user->type == QAUL_USERTYPE_KNOWN)
				user->changed = QAUL_USERCHANGED_MODIFIED;
			else
				user->changed = QAUL_USERCHANGED_UNCHANGED;
		}

		// set link cost
		if(linkcost > 20.0)
		{
			// delete this user
			if(user->changed < QAUL_USERCHANGED_DELETED)
				user->changed = QAUL_USERCHANGED_DELETED;
		}
		else
		{
			if( user->changed >= QAUL_USERCHANGED_DELETED &&
				linkcost <= 10.0)
			{
				user->changed = QAUL_USERCHANGED_MODIFIED;
			}
			else if(Qaullib_UserLinkcost2Img(user->lq) != Qaullib_UserLinkcost2Img(linkcost))
			{
				user->changed = QAUL_USERCHANGED_MODIFIED;
			}
		}
		user->lq = linkcost;

		// set last seen time stamp
		user->time = time(NULL);
	}
	else
	{
		if(QAUL_DEBUG)
			printf("user does not exist, create it \n");

		// if user does not exist: create user
		user = Qaullib_User_LL_Add (ip);
		user->lq = linkcost;
	}
}
Beispiel #3
0
// ------------------------------------------------------------
void Qaullib_UserFavoritesDB2LL(void)
{
	sqlite3_stmt *ppStmt;
	union olsr_ip_addr myip;
	struct qaul_user_LL_item *myitem;
	int myipint;

	// Select rows from database
	if( sqlite3_prepare_v2(db, sql_user_get_all, -1, &ppStmt, NULL) != SQLITE_OK )
	{
		printf("SQLite error: %s\n",sqlite3_errmsg(db));
		return;
	}

	// For each row returned
	while (sqlite3_step(ppStmt) == SQLITE_ROW)
	{
	  // For each column
	  int jj;
	  // search for ip
	  for(jj=0; jj < sqlite3_column_count(ppStmt); jj++)
	  {
			if(strcmp(sqlite3_column_name(ppStmt,jj), "ipv4") == 0)
			{
				myipint = sqlite3_column_int(ppStmt, jj);
				memcpy(&myip.v4, &myipint, sizeof(struct sockaddr_in));
				break;
			}
	  }

	  myitem = Qaullib_User_LL_Add(&myip);
	  myitem->type = QAUL_USERTYPE_KNOWN;
	  myitem->favorite = 1;
	  myitem->changed = QAUL_USERCHANGED_CACHED;

	  // fill in rest
	  for(jj=0; jj < sqlite3_column_count(ppStmt); jj++)
	  {
			if(strcmp(sqlite3_column_name(ppStmt,jj), "name") == 0)
			{
				sprintf(myitem->name,"%s",sqlite3_column_text(ppStmt, jj));
				break;
			}
	  }
	}
	sqlite3_finalize(ppStmt);
}
Beispiel #4
0
void Qaullib_UserAdd(union olsr_ip_addr *ip, char *name, char *iconhash, char *suffix)
{
	struct qaul_user_LL_item *myuseritem;

	printf("Qaullib_UserAdd\n");

	// search for user
	if(Qaullib_User_LL_IpSearch (ip, &myuseritem))
	{
		printf("Qaullib_UserAddInfo user found in LL\n");

		// check if it is already known
		if(myuseritem->type < QAUL_USERTYPE_KNOWN)
		{
			printf("Qaullib_UserAddInfo name not known yet\n");
			// set type
			myuseritem->type = QAUL_USERTYPE_KNOWN;
			if(myuseritem->changed == QAUL_USERCHANGED_UNCHANGED)
				myuseritem->changed = QAUL_USERCHANGED_MODIFIED;
		}
		else
			return;
	}
	else
	{
		printf("Qaullib_UserAddInfo user not found in LL: create it\n");
		// create the user if it doesn't exist
		myuseritem = Qaullib_User_LL_Add (ip);
		// set user to cache
		myuseritem->changed = QAUL_USERCHANGED_CACHED;
	}

	// fill in name
	strncpy(myuseritem->name, name, MAX_USER_LEN);
	memcpy(&myuseritem->name[MAX_USER_LEN], "\0", 1);
	// todo: add icon info
	memcpy(&myuseritem->icon[0], "\0", 1);
	printf("Qaullib_User survived\n");

	if(strlen(myuseritem->name) > 0)
		myuseritem->type = QAUL_USERTYPE_KNOWN;
	else
		myuseritem->type = QAUL_USERTYPE_HIDDEN;

	if(QAUL_DEBUG)
		printf("Qaullib_UserAdd added: %s\n", name);
}
// ------------------------------------------------------------
void Qaullib_User_LL_IpTouch (union olsr_ip_addr *ip, float linkcost)
{
	struct qaul_user_LL_node mynode;
	struct qaul_user_LL_item *new_item;
	Qaullib_User_LL_InitNodeWithIP(&mynode, ip);
	int ip_exists;

	ip_exists = 0;

	while(Qaullib_User_LL_NextItem(&mynode))
	{
		if(memcmp(&mynode.item->ip, ip, qaul_ip_size) == 0)
		{
			// check if it is a real user
			if(mynode.item->type != QAUL_USERTYPE_WEB_KNOWN)
			{
				ip_exists = 1;

				mynode.item->time = time(NULL);

				// if user exists: update lastseen_at
				if(mynode.item->changed >= QAUL_USERCHANGED_DELETED)
				{
					if(mynode.item->type == QAUL_USERTYPE_KNOWN)
						mynode.item->changed = QAUL_USERCHANGED_MODIFIED;
					else
						mynode.item->changed = QAUL_USERCHANGED_UNCHANGED;
				}

				// set link cost
				if(linkcost > 20.0)
				{
					// delete this user
					if(mynode.item->changed < QAUL_USERCHANGED_DELETED)
						mynode.item->changed = QAUL_USERCHANGED_DELETED;
				}
				else
				{
					if( mynode.item->changed >= QAUL_USERCHANGED_DELETED &&
						linkcost <= 10.0)
					{
						mynode.item->changed = QAUL_USERCHANGED_MODIFIED;
					}
					else if(Qaullib_UserLinkcost2Img(mynode.item->lq) != Qaullib_UserLinkcost2Img(linkcost))
					{
						mynode.item->changed = QAUL_USERCHANGED_MODIFIED;
					}
				}
			}

			// update link cost
			mynode.item->lq = linkcost;
		}
	}

	// create new entry if none exists
	if(ip_exists == 0)
	{
		new_item = Qaullib_User_LL_Add (ip, 0);
		new_item->lq = linkcost;
	}

	return;
}