ekg2
 All Struktury Danych Pliki Funkcje Zmienne Definicje typów Wyliczenia Wartości wyliczeń Definicje Grupay Strony
Definicje | Funkcje | Zmienne
Dokumentacja pliku userlist.c
#include "ekg2-config.h"
#include "win32.h"
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <errno.h>
#include <limits.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "commands.h"
#include "dynstuff.h"
#include "compat/strlcat.h"
#include "compat/strlcpy.h"
#include "plugins.h"
#include "stuff.h"
#include "themes.h"
#include "userlist.h"
#include "vars.h"
#include "windows.h"
#include "xmalloc.h"
#include "log.h"
#include "debug.h"
#include "dynstuff_inline.h"
#include "queries.h"

Definicje

#define _XOPEN_SOURCE   600
 
#define __EXTENSIONS__
 

Funkcje

static void userlist_private_free (userlist_t *u)
 
static int group_compare (struct ekg_group *data1, struct ekg_group *data2)
 
static LIST_FREE_ITEM (group_item_free, struct ekg_group *)
 
 DYNSTUFF_LIST_DECLARE_SORTED (ekg_groups, struct ekg_group, group_compare, group_item_free, static __DYNSTUFF_ADD_SORTED, static __DYNSTUFF_REMOVE_ITER, static __DYNSTUFF_DESTROY) static int userlist_resource_compare(ekg_resource_t *data1
 
return xstrcasecmp (data1->name, data2->name)
 
static LIST_FREE_ITEM (list_userlist_resource_free, ekg_resource_t *)
 
 DYNSTUFF_LIST_DECLARE_SORTED (ekg_resources, ekg_resource_t, userlist_resource_compare, list_userlist_resource_free, static __DYNSTUFF_ADD_SORTED, static __DYNSTUFF_REMOVE_SAFE, static __DYNSTUFF_DESTROY) static int userlist_compare(userlist_t *data1
 
static LIST_FREE_ITEM (userlist_free_item, userlist_t *)
 
 DYNSTUFF_LIST_DECLARE_SORTED (userlists, userlist_t, userlist_compare, userlist_free_item, static __DYNSTUFF_ADD_SORTED, __DYNSTUFF_REMOVE_SAFE, __DYNSTUFF_DESTROY) void userlist_add_entry(session_t *session
 
 if ((count=array_count(entry))< 7)
 
 query_emit_id (NULL, USERLIST_PRIVHANDLE,&u,&function,&entry,&count)
 
 if (valid_plugin_uid(session->plugin, u->uid)!=1)
 
 for (i=0;i< 6;i++)
 
 if (entry[3])
 
 array_free_count (entry, count)
 
int userlist_read (session_t *session)
 
int userlist_write (session_t *session)
 
void userlist_write_crash ()
 
void * userlist_private_get (plugin_t *plugin, userlist_t *u)
 
void userlist_clear_status (session_t *session, const char *uid)
 
void userlist_free (session_t *session)
 
ekg_resource_tuserlist_resource_add (userlist_t *u, const char *name, int prio)
 
ekg_resource_tuserlist_resource_find (userlist_t *u, const char *name)
 
void userlist_resource_remove (userlist_t *u, ekg_resource_t *r)
 
userlist_tuserlist_add (session_t *session, const char *uid, const char *nickname)
 
userlist_tuserlist_add_u (userlist_t **userlist, const char *uid, const char *nickname)
 
int userlist_remove (session_t *session, userlist_t *u)
 
int userlist_remove_u (userlist_t **userlist, userlist_t *u)
 
int userlist_replace (session_t *session, userlist_t *u)
 
userlist_tuserlist_find (session_t *session, const char *uid)
 
userlist_tuserlist_find_u (userlist_t **userlist, const char *uid)
 
int valid_nick (const char *nick)
 
int valid_uid (const char *uid)
 
int valid_plugin_uid (plugin_t *plugin, const char *uid)
 
const char * get_uid_any (session_t *session, const char *text)
 
const char * get_uid (session_t *session, const char *text)
 
const char * get_nickname (session_t *session, const char *text)
 
char * get_user_name (userlist_t *u)
 
const char * format_user (session_t *session, const char *uid)
 
int ignored_remove (session_t *session, const char *uid)
 
int ignored_add (session_t *session, const char *uid, ignore_t level)
 
int ignored_check (session_t *session, const char *uid)
 
int ignore_flags (const char *str)
 
const char * ignore_format (int level)
 
int ekg_group_add (userlist_t *u, const char *group)
 
int ekg_group_remove (userlist_t *u, const char *group)
 
int ekg_group_member (userlist_t *u, const char *group)
 
struct ekg_groupgroup_init (const char *names)
 
char * group_to_string (struct ekg_group *groups, int meta, int sep)
 

Zmienne

struct ignore_label ignore_labels [IGNORE_LABELS_MAX]
 
ekg_resource_tdata2
 
const char * line
 
userlist_tu = xmalloc(sizeof(userlist_t))
 
int count
 
int i
 
u uid = entry[6]
 
 entry [6] = NULL
 
u status = EKG_STATUS_NA
 
u groups = group_init(entry[5])
 
u foreign
 
userlists_add session
 

Dokumentacja definicji

#define __EXTENSIONS__
#define _XOPEN_SOURCE   600

Dokumentacja funkcji

array_free_count ( entry  ,
count   
)
DYNSTUFF_LIST_DECLARE_SORTED ( ekg_groups  ,
struct ekg_group  ,
group_compare  ,
group_item_free  ,
static  __DYNSTUFF_ADD_SORTED,
static  __DYNSTUFF_REMOVE_ITER,
static  __DYNSTUFF_DESTROY 
)
DYNSTUFF_LIST_DECLARE_SORTED ( ekg_resources  ,
ekg_resource_t  ,
userlist_resource_compare  ,
list_userlist_resource_free  ,
static  __DYNSTUFF_ADD_SORTED,
static  __DYNSTUFF_REMOVE_SAFE,
static  __DYNSTUFF_DESTROY 
)
DYNSTUFF_LIST_DECLARE_SORTED ( userlists  ,
userlist_t  ,
userlist_compare  ,
userlist_free_item  ,
static  __DYNSTUFF_ADD_SORTED,
__DYNSTUFF_REMOVE_SAFE  ,
__DYNSTUFF_DESTROY   
)
int ekg_group_add ( userlist_t u,
const char *  group 
)

ekg_group_add()

dodaje użytkownika do podanej grupy.

Parametry
u- wpis usera,
group- nazwa grupy.
Zwraca
-1 jesli juz user jest w tej grupie, lub zle parametry. 0 gdy dodano.
int ekg_group_member ( userlist_t u,
const char *  group 
)

ekg_group_member()

sprawdza czy użytkownik jest członkiem danej grupy.

Parametry
u- uzytkownik, ktorego chcemy sprawdzic
group- grupa ktora chcemy sprawdzic
Zwraca
1 jeśli tak, 0 jeśli nie.
int ekg_group_remove ( userlist_t u,
const char *  group 
)

ekg_group_remove()

usuwa użytkownika z podanej grupy.

Parametry
u- wpis usera,
group- nazwa grupy.
Zwraca
0 jeśli się udało, inaczej -1.
for ( )
const char* format_user ( session_t session,
const char *  uid 
)
const char* get_nickname ( session_t session,
const char *  text 
)
const char* get_uid ( session_t session,
const char *  text 
)

get_uid()

Return and checks if uid passed text is proper for session or it's nickname of smb on session userlist.

Nota
It also work with userlist_find() and if text is nickname of smb in session userlist.. Than it return uid of this user. So you shouldn't call userlist_find() with get_uid() as param, cause it's senseless userlist_find() don't check for "$" target, so you must do it by hand. Rest is the same. If there are such user: userlist_find(s, get_uid(s, target)) return the same as userlist_find(s, target)
If not, even userlist_find(s, get_uid(s, get_uid(s, get_uid(s, target)))) won't help
Parametry
session- session to check for, if NULL check all sessions (it doesn't look at userlists, in this mode)
text- uid to check for, if '$' than check current window.
Zobacz również
userlist_find()
get_nickname() - to look for nickname..
get_uid_any() - to do all session searching+specified session userlist search.. This function does only all session searching if session is NULL... and than it doesn't look at userlist. Do you feel difference?
Zwraca
If we found proper uid for text, than return it. Otherwise NULL
const char* get_uid_any ( session_t session,
const char *  text 
)

get_uid_any()

Return and checks if uid passed text is proper for at least one session, or it's nickname of smb on session userlist

Parametry
session- session to search for item on userlist
text- uid to check for, if '$' then check current window.
Zobacz również
get_uid() - to search only specified session.
Zwraca
If we found proper uid for text, than return it. Otherwise NULL
char* get_user_name ( userlist_t u)
static int group_compare ( struct ekg_group data1,
struct ekg_group data2 
)
static
struct ekg_group* group_init ( const char *  names)

group_init()

inicjuje listę grup użytkownika na podstawie danego ciągu znaków, w którym kolejne nazwy grup są rozdzielone przecinkiem.

Parametry
names- nazwy grup.
Zwraca
zwraca listę `struct group' jeśli się udało, inaczej NULL.
char* group_to_string ( struct ekg_group groups,
int  meta,
int  sep 
)

group_to_string()

zmienia listę grup na ciąg znaków rodzielony przecinkami.

Parametry
groups- lista grup.
meta- czy dołączyć ,,meta-grupy''?
sep- czy oddzielać przecinkiem i spacją?
Zwraca
zwraca zaalokowany ciąg znaków lub NULL w przypadku błędu.
if ( )
if ( valid_plugin_uid(session->plugin, u->uid)!  = 1)
if ( entry  [3])
int ignore_flags ( const char *  str)

ignore_flags()

zamienia łańcuch znaków na odpowiedni poziom ignorowania w postaci liczby.

Parametry
str
Zobacz również
ignore_format
ignore_t
ignore_labels
Zwraca
zwraca bitmaske opisana przez str
const char* ignore_format ( int  level)

ignore_format()

zwraca statyczny łańcuch znaków reprezentujący dany poziom ignorowania.

Parametry
level- poziom ignorowania, bitmaska z `enum ignore_t'
Zobacz również
ignore_flags
ignore_t
ignore_labels
Zwraca
zwraca statyczny bufor opisujacy bitmaske za pomoca ignore_labels
int ignored_add ( session_t session,
const char *  uid,
ignore_t  level 
)
int ignored_check ( session_t session,
const char *  uid 
)

ignored_check()

czy dany numerek znajduje się na liście ignorowanych.

Parametry
session- sesja w ktorej mamy szukac uzytkownika
uid- uid uzytkownika
int ignored_remove ( session_t session,
const char *  uid 
)
static LIST_FREE_ITEM ( group_item_free  ,
struct ekg_group  
)
static
static LIST_FREE_ITEM ( list_userlist_resource_free  ,
ekg_resource_t  
)
static
static LIST_FREE_ITEM ( userlist_free_item  ,
userlist_t  
)
static
query_emit_id ( NULL  ,
USERLIST_PRIVHANDLE  ,
u,
function,
entry,
count 
)
userlist_t* userlist_add ( session_t session,
const char *  uid,
const char *  nickname 
)
userlist_t* userlist_add_u ( userlist_t **  userlist,
const char *  uid,
const char *  nickname 
)
void userlist_clear_status ( session_t session,
const char *  uid 
)

userlist_clear_status()

If uin == NULL then it clears all users presence information in the session userlist otherwise it clears only specified user It's useful if user goes notavail, or we goes disconnected..
However if that happen you shouldn't use this function but emit query PROTOCOL_STATUS or PROTOCOL_DISCONNECTED

Nota
By presence information I mean:
-> status - user's status [avail, away, ffc, dnd], it'll be: EKG_STATUS_NA ("notavail")
-> descr - user's description, it'll be: NULL
-> ip - user's ip, il'll be: 0.0.0.0
-> port - user's port, it'll be: 0
-> resources - user's resource, list will be destroyed.
Parametry
session
uid
userlist_t* userlist_find ( session_t session,
const char *  uid 
)
userlist_t* userlist_find_u ( userlist_t **  userlist,
const char *  uid 
)
void userlist_free ( session_t session)
static void userlist_private_free ( userlist_t u)
static
void* userlist_private_get ( plugin_t plugin,
userlist_t u 
)
int userlist_read ( session_t session)

userlist_read()

wczytuje listę kontaktów z pliku uid_sesji-userlist w postaci eksportu tekstowego listy kontaktów windzianego klienta.

Parametry
session
Zwraca
0 on success, -1 file not found
int userlist_remove ( session_t session,
userlist_t u 
)
int userlist_remove_u ( userlist_t **  userlist,
userlist_t u 
)
int userlist_replace ( session_t session,
userlist_t u 
)
ekg_resource_t* userlist_resource_add ( userlist_t u,
const char *  name,
int  prio 
)

userlist_resource_add()

It adds new user resource to resources list, with given data.

Nota
It doesn't check if prio already exists.. So you must remember about calling userlist_resource_find() if you don't want two (or more) same resources...
Parametry
u- user
name- name of resource
prio- prio of resource
Zwraca
It returns inited ekg_resource_t pointer of given data, or NULL if u was NULL
ekg_resource_t* userlist_resource_find ( userlist_t u,
const char *  name 
)

userlist_resource_find()

It search for given resource name in user resource list u

Parametry
u- user
name- name of resource
Zwraca
It returns resource with given name if founded, otherwise NULL
void userlist_resource_remove ( userlist_t u,
ekg_resource_t r 
)

userlist_resource_remove()

Remove given resource r from user resource list u
Free allocated memory.

Parametry
u- user
r- resource
int userlist_write ( session_t session)

userlist_write()

It writes session userlist to file: session->uid-userlist in ekg2 config directory

Do zrobienia:
Each plugin should've own userlist_write()/ userlist_read() This format is obsolete.
Parametry
session
Zwraca
0 on succees
-1 if smth went wrong
-2 if we fail to create/open userlist file in rw mode
void userlist_write_crash ( )

userlist_write_crash()

zapisuje listę kontaktów w sytuacji kryzysowej jak najmniejszym nakładem pamięci i pracy.

Zobacz również
userlist_write
Błąd:
It was copied from ekg1 and it doesn't match ekg2 abi. It's bad so i comment it out... Reimplement it or delete
int valid_nick ( const char *  nick)
int valid_plugin_uid ( plugin_t plugin,
const char *  uid 
)

valid_plugin_uid()

Check if uid can be handled by given plugin

Parametry
plugin- plugin to check for
uid- uid to check for
Zobacz również
valid_uid() - if we want to know if this uid can be handled by ekg2 [when it doesn't matter which plugin]
Zwraca
1 - if uid can be handled by plugin
0 - if not
-1 - if plugin == NULL
int valid_uid ( const char *  uid)

valid_uid()

Check if uid can be handled by any plugin

Parametry
uid- uid to check for
Zobacz również
valid_plugin_uid() - You can specify plugin
Zwraca
1 - if uid can be handled by ekg2
0 - if not
return xstrcasecmp ( data1->  name,
data2->  name 
)

Dokumentacja zmiennych

int count
userlist_t* data2
Wartość początkowa:
{
if (data1->prio != data2->prio)
return (data2->prio - data1->prio)
entry[6] = NULL
u foreign
Wartość początkowa:
= entry[7] ?
saprintf(";%s", entry[7]) :
u groups = group_init(entry[5])
int i
struct ignore_label ignore_labels[IGNORE_LABELS_MAX]
Wartość początkowa:
= {
{ IGNORE_STATUS, "status" },
{ IGNORE_STATUS_DESCR, "descr" },
{ IGNORE_NOTIFY, "notify" },
{ IGNORE_MSG, "msg" },
{ IGNORE_DCC, "dcc" },
{ IGNORE_EVENTS, "events" },
{ IGNORE_XOSD, "xosd" },
{ IGNORE_LOG, "log" },
{ 0, NULL }
}
const char* line
Wartość początkowa:
{
char **entry = array_make(line, ";", 8, 0, 0)
userlists_add session
u status = EKG_STATUS_NA
userlists_add u = xmalloc(sizeof(userlist_t))
u uid = entry[6]