ekg2
Definicje | Funkcje | Zmienne
Dokumentacja pliku plugins/irc/irc.c
#include "ekg2-config.h"
#include <ekg/win32.h>
#include <errno.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/stat.h>
#include <netdb.h>
#include <sys/time.h>
#include <sys/utsname.h>
#include <pwd.h>
#include <ekg/commands.h>
#include <ekg/debug.h>
#include <ekg/dynstuff.h>
#include <ekg/log.h>
#include <ekg/net.h>
#include <ekg/protocol.h>
#include <ekg/recode.h>
#include <ekg/sessions.h>
#include <ekg/stuff.h>
#include <ekg/themes.h>
#include <ekg/userlist.h>
#include <ekg/vars.h>
#include <ekg/windows.h>
#include <ekg/xmalloc.h>
#include <ekg/queries.h>
#include "irc.h"
#include "people.h"
#include "input.h"
#include "autoacts.h"
#include "IRCVERSION.h"

Definicje

#define __USE_POSIX
#define DEFPORT   6667
#define DEFPARTMSG   "EKG2 bejbi! http://ekg2.org/"
#define DEFQUITMSG   "EKG2 - It's better than sex!"
#define DEFKICKMSG   "EKG2 - Y0U 57iNK2 50 MUCH!"
#define SGPARTMSG(x)   session_get(x, "PART_MSG")
#define SGQUITMSG(x)   session_get(x, "QUIT_MSG")
#define SGKICKMSG(x)   session_get(x, "KICK_MSG")
#define PARTMSG(x, r)   (r?r: SGPARTMSG(x)?SGPARTMSG(x):DEFPARTMSG)
#define QUITMSG(x)   (SGQUITMSG(x)?SGQUITMSG(x):DEFQUITMSG)
#define KICKMSG(x, r)   (r?r: SGKICKMSG(x)?SGKICKMSG(x):DEFKICKMSG)
#define getit(x)   tmp[x]?tmp[x]:"*"
#define plvl(x)   itoa(sum[x])
#define params(x)   x
#define IRC_PLUGIN_VAR_NICKNAME   20
#define IRC_PLUGIN_VAR_REALNAME   24
#define IRC_ONLY   SESSION_MUSTBELONG | SESSION_MUSTHASPRIVATE
#define IRC_FLAGS   IRC_ONLY | SESSION_MUSTBECONNECTED
#define IRC_FLAGS_TARGET   IRC_FLAGS | COMMAND_ENABLEREQPARAMS | COMMAND_PARAMASTARGET

Funkcje

static int irc_theme_init ()
static int irc_handle_resolver (int type, int fd, const char *watch, void *data)
static int irc_command_disconnect (const char *name, const char **params, session_t *session, const char *target, int quiet)
static int irc_really_connect (session_t *session)
static char * irc_getchan_int (session_t *s, const char *name, int checkchan)
static char * irc_getchan (session_t *s, const char **params, const char *name, char ***v, int pr, int checkchan)
 PLUGIN_DEFINE (irc, PLUGIN_PROTOCOL, irc_theme_init)
static int irc_session_init (void *data, va_list ap)
static LIST_FREE_ITEM (list_irc_awaylog_free, irc_awaylog_t *)
static LIST_FREE_ITEM (list_irc_resolver_free, connector_t *)
static int irc_session_deinit (void *data, va_list ap)
static char * irc_make_banmask (session_t *session, const char *nick, const char *ident, const char *hostname)
static int irc_print_version (void *data, va_list ap)
static int irc_setvar_default (void *data, va_list ap)
static int irc_resolver_sort (void *s1, void *s2)
static int irc_validate_uid (void *data, va_list ap)
static void irc_changed_resolve (session_t *s, const char *var)
out_recodes_tirc_find_out_recode (list_t rl, char *encname)
recoded_channels_tirc_find_recode_channel (list_t rcl, char *channame)
static char * irc_convert_out (irc_private_t *j, char *recipient, const char *line)
static void irc_changed_recode_list (session_t *s, const char *var)
static void irc_changed_recode (session_t *s, const char *var)
static void irc_changed_auto_guess_encoding (session_t *s, const char *var)
void irc_handle_disconnect (session_t *s, const char *reason, int type)
static int irc_handle_stream (int type, int fd, const char *watch, session_t *s)
static int irc_handle_connect_real (int type, int fd, watch_type_t watch, void *data)
static int irc_handle_connect (int type, int fd, watch_type_t watch, void *data)
static int irc_build_sin (session_t *s, connector_t *co, struct sockaddr **address)
static int irc_command_connect (const char *name, const char **params, session_t *session, const char *target, int quiet)
static int irc_command_reconnect (const char *name, const char **params, session_t *session, const char *target, int quiet)
static int irc_command_msg (const char *name, const char **params, session_t *session, const char *target, int quiet)
static int irc_command_inline_msg (const char *name, const char **params, session_t *session, const char *target, int quiet)
static int irc_command_quote (const char *name, const char **params, session_t *session, const char *target, int quiet)
static int irc_command_pipl (const char *name, const char **params, session_t *session, const char *target, int quiet)
static int irc_command_alist (const char *name, const char **params, session_t *session, const char *target, int quiet)
static int irc_command_add (const char *name, const char **params, session_t *session, const char *target, int quiet)
static void irc_display_awaylog (session_t *session)
static int irc_command_away (const char *name, const char **params, session_t *session, const char *target, int quiet)
static void irc_statusdescr_handler (session_t *s, const char *varname)
static int irc_window_kill (void *data, va_list ap)
static int irc_topic_header (void *data, va_list ap)
static int irc_command_names (const char *name, const char **params, session_t *session, const char *target, int quiet)
static int irc_command_topic (const char *name, const char **params, session_t *session, const char *target, int quiet)
static int irc_command_who (const char *name, const char **params, session_t *session, const char *target, int quiet)
static int irc_command_invite (const char *name, const char **params, session_t *session, const char *target, int quiet)
static int irc_command_kick (const char *name, const char **params, session_t *session, const char *target, int quiet)
static int irc_command_unban (const char *name, const char **params, session_t *session, const char *target, int quiet)
static int irc_command_ban (const char *name, const char **params, session_t *session, const char *target, int quiet)
static int irc_command_kickban (const char *name, const char **params, session_t *session, const char *target, int quiet)
static int irc_command_devop (const char *name, const char **params, session_t *session, const char *target, int quiet)
static int irc_command_ctcp (const char *name, const char **params, session_t *session, const char *target, int quiet)
static int irc_command_ping (const char *name, const char **params, session_t *session, const char *target, int quiet)
static int irc_command_me (const char *name, const char **params, session_t *session, const char *target, int quiet)
static int irc_command_mode (const char *name, const char **params, session_t *session, const char *target, int quiet)
static int irc_command_umode (const char *name, const char **params, session_t *session, const char *target, int quiet)
static int irc_command_whois (const char *name, const char **params, session_t *session, const char *target, int quiet)
static int irc_status_show_handle (void *data, va_list ap)
static int irc_command_query (const char *name, const char **params, session_t *session, const char *target, int quiet)
static int irc_command_jopacy (const char *name, const char **params, session_t *session, const char *target, int quiet)
static int irc_command_nick (const char *name, const char **params, session_t *session, const char *target, int quiet)
static int irc_command_test (const char *name, const char **params, session_t *session, const char *target, int quiet)
char * nickpad_string_create (channel_t *chan)
char * nickpad_string_apply (channel_t *chan, const char *str)
char * nickpad_string_restore (channel_t *chan)
EXPORT int irc_plugin_init (int prio)
static int irc_plugin_destroy ()

Zmienne

static char * irc_config_default_access_groups
int irc_config_experimental_chan_name_clean
char fillchars_utf8 [] = "\xC2\xA0"
char fillchars_norm [] = "\xA0"
char * fillchars = NULL
int fillchars_len = 0
static plugins_params_t irc_plugin_vars []
static const char * irc_protocols [] = { "irc:", NULL }
static const status_t irc_statuses []
static struct protocol_plugin_priv irc_priv

Dokumentacja definicji

#define __USE_POSIX
#define DEFKICKMSG   "EKG2 - Y0U 57iNK2 50 MUCH!"
#define DEFPARTMSG   "EKG2 bejbi! http://ekg2.org/"
#define DEFPORT   6667
#define DEFQUITMSG   "EKG2 - It's better than sex!"
#define getit (   x)    tmp[x]?tmp[x]:"*"
#define IRC_FLAGS   IRC_ONLY | SESSION_MUSTBECONNECTED
#define IRC_FLAGS_TARGET   IRC_FLAGS | COMMAND_ENABLEREQPARAMS | COMMAND_PARAMASTARGET
#define IRC_ONLY   SESSION_MUSTBELONG | SESSION_MUSTHASPRIVATE
#define IRC_PLUGIN_VAR_NICKNAME   20
#define IRC_PLUGIN_VAR_REALNAME   24
#define KICKMSG (   x,
 
)    (r?r: SGKICKMSG(x)?SGKICKMSG(x):DEFKICKMSG)
#define params (   x)    x
#define PARTMSG (   x,
 
)    (r?r: SGPARTMSG(x)?SGPARTMSG(x):DEFPARTMSG)
#define plvl (   x)    itoa(sum[x])
#define QUITMSG (   x)    (SGQUITMSG(x)?SGQUITMSG(x):DEFQUITMSG)
#define SGKICKMSG (   x)    session_get(x, "KICK_MSG")
#define SGPARTMSG (   x)    session_get(x, "PART_MSG")
#define SGQUITMSG (   x)    session_get(x, "QUIT_MSG")

Dokumentacja funkcji

static int irc_build_sin ( session_t s,
connector_t co,
struct sockaddr **  address 
) [static]
static void irc_changed_auto_guess_encoding ( session_t s,
const char *  var 
) [static]
static void irc_changed_recode ( session_t s,
const char *  var 
) [static]
static void irc_changed_recode_list ( session_t s,
const char *  var 
) [static]
static void irc_changed_resolve ( session_t s,
const char *  var 
) [static]
static int irc_command_add ( const char *  name,
const char **  params,
session_t session,
const char *  target,
int  quiet 
) [static]
static int irc_command_alist ( const char *  name,
const char **  params,
session_t session,
const char *  target,
int  quiet 
) [static]
static int irc_command_away ( const char *  name,
const char **  params,
session_t session,
const char *  target,
int  quiet 
) [static]
static int irc_command_ban ( const char *  name,
const char **  params,
session_t session,
const char *  target,
int  quiet 
) [static]
static int irc_command_connect ( const char *  name,
const char **  params,
session_t session,
const char *  target,
int  quiet 
) [static]
static int irc_command_ctcp ( const char *  name,
const char **  params,
session_t session,
const char *  target,
int  quiet 
) [static]
static int irc_command_devop ( const char *  name,
const char **  params,
session_t session,
const char *  target,
int  quiet 
) [static]
static int irc_command_disconnect ( const char *  name,
const char **  params,
session_t session,
const char *  target,
int  quiet 
) [static]
static int irc_command_inline_msg ( const char *  name,
const char **  params,
session_t session,
const char *  target,
int  quiet 
) [static]
static int irc_command_invite ( const char *  name,
const char **  params,
session_t session,
const char *  target,
int  quiet 
) [static]
static int irc_command_jopacy ( const char *  name,
const char **  params,
session_t session,
const char *  target,
int  quiet 
) [static]
static int irc_command_kick ( const char *  name,
const char **  params,
session_t session,
const char *  target,
int  quiet 
) [static]
static int irc_command_kickban ( const char *  name,
const char **  params,
session_t session,
const char *  target,
int  quiet 
) [static]
static int irc_command_me ( const char *  name,
const char **  params,
session_t session,
const char *  target,
int  quiet 
) [static]
static int irc_command_mode ( const char *  name,
const char **  params,
session_t session,
const char *  target,
int  quiet 
) [static]
static int irc_command_msg ( const char *  name,
const char **  params,
session_t session,
const char *  target,
int  quiet 
) [static]
static int irc_command_names ( const char *  name,
const char **  params,
session_t session,
const char *  target,
int  quiet 
) [static]
static int irc_command_nick ( const char *  name,
const char **  params,
session_t session,
const char *  target,
int  quiet 
) [static]
static int irc_command_ping ( const char *  name,
const char **  params,
session_t session,
const char *  target,
int  quiet 
) [static]
static int irc_command_pipl ( const char *  name,
const char **  params,
session_t session,
const char *  target,
int  quiet 
) [static]
static int irc_command_query ( const char *  name,
const char **  params,
session_t session,
const char *  target,
int  quiet 
) [static]
static int irc_command_quote ( const char *  name,
const char **  params,
session_t session,
const char *  target,
int  quiet 
) [static]
static int irc_command_reconnect ( const char *  name,
const char **  params,
session_t session,
const char *  target,
int  quiet 
) [static]
static int irc_command_test ( const char *  name,
const char **  params,
session_t session,
const char *  target,
int  quiet 
) [static]
static int irc_command_topic ( const char *  name,
const char **  params,
session_t session,
const char *  target,
int  quiet 
) [static]
static int irc_command_umode ( const char *  name,
const char **  params,
session_t session,
const char *  target,
int  quiet 
) [static]
static int irc_command_unban ( const char *  name,
const char **  params,
session_t session,
const char *  target,
int  quiet 
) [static]
static int irc_command_who ( const char *  name,
const char **  params,
session_t session,
const char *  target,
int  quiet 
) [static]
static int irc_command_whois ( const char *  name,
const char **  params,
session_t session,
const char *  target,
int  quiet 
) [static]
static char* irc_convert_out ( irc_private_t j,
char *  recipient,
const char *  line 
) [static]
static void irc_display_awaylog ( session_t session) [static]
out_recodes_t* irc_find_out_recode ( list_t  rl,
char *  encname 
)
recoded_channels_t* irc_find_recode_channel ( list_t  rcl,
char *  channame 
)
static char * irc_getchan ( session_t s,
const char **  params,
const char *  name,
char ***  v,
int  pr,
int  checkchan 
) [static]
static char * irc_getchan_int ( session_t s,
const char *  name,
int  checkchan 
) [static]
static int irc_handle_connect ( int  type,
int  fd,
watch_type_t  watch,
void *  data 
) [static]
static int irc_handle_connect_real ( int  type,
int  fd,
watch_type_t  watch,
void *  data 
) [static]
void irc_handle_disconnect ( session_t s,
const char *  reason,
int  type 
)
static int irc_handle_resolver ( int  type,
int  fd,
const char *  watch,
void *  data 
) [static]
static int irc_handle_stream ( int  type,
int  fd,
const char *  watch,
session_t s 
) [static]
static char* irc_make_banmask ( session_t session,
const char *  nick,
const char *  ident,
const char *  hostname 
) [static]
static int irc_plugin_destroy ( ) [static]
EXPORT int irc_plugin_init ( int  prio)
static int irc_print_version ( void *  data,
va_list  ap 
) [static]

irc_print_version()

handler for PLUGIN_PRINT_VERSION query requests
print info about this plugin [Copyright note+version]

Nota:
what the heck this can be ? ;) (c GiM)
Zwraca:
0
static int irc_really_connect ( session_t session) [static]
static int irc_resolver_sort ( void *  s1,
void *  s2 
) [static]
static int irc_session_deinit ( void *  data,
va_list  ap 
) [static]

irc_session_deinit()

Handler for: SESSION_REMOVED
Free memory allocated by irc_private_t if session is irc one.
Save userlist with userlist_write()

Parametry:
ap1st param: (char *) session - uid of session
dataNULL
Do zrobienia:
Check if userlist_write() here is good.
Zwraca:
0 if session is irc one, and memory allocated where xfree()'d.
1 if not such session, or it wasn't irc session [most probable], or we already free memory.
static int irc_session_init ( void *  data,
va_list  ap 
) [static]

irc_session_init()

Handler for: SESSION_ADDED
Init private session struct irc_private_t if session is irc one.
Read saved userlist with userlist_read()

Parametry:
ap1st param: (char *) session - uid of session
dataNULL
Zwraca:
0 if session is irc one, and we init memory
1 if we don't found such session, or it wasn't irc session [most probable], or we already init memory.
static int irc_setvar_default ( void *  data,
va_list  ap 
) [static]
static int irc_status_show_handle ( void *  data,
va_list  ap 
) [static]
static void irc_statusdescr_handler ( session_t s,
const char *  varname 
) [static]
static int irc_theme_init ( ) [static]
static int irc_topic_header ( void *  data,
va_list  ap 
) [static]

irc_topic_header()

handler for IRC_TOPIC query requests

Parametry:
ap1st param: (char *) top - place to put:
-> topic of current irc channel (if current window is valid irc channel)
-> ident@host of current irc user (if current window is known user)
ap2nd param: (char *) setby - place to put:
-> topic owner of current irc channel
-> realname of current irc user
ap3rd param: (char *) modes - place to put:
modes of current irc channel or undefined if not channel
data0
Zwraca:
1 if it's known irc channel.
2 if it's known irc user.
0 if it's neither known user, nor channel.
-3 if it's not valid irc window, or session is not connected
static int irc_validate_uid ( void *  data,
va_list  ap 
) [static]

irc_validate_uid()

handler for PROTOCOL_VALIDATE_UID
checks, if uid is proper for irc plugin.

Nota:
Proper for irc plugin means if uid starts with "irc:" and uid len > 4
Parametry:
ap1st param: (char *) uid - of user/session/command/whatever
ap2nd param: (int) valid - place to put 1 if uid is valid for irc plugin.
dataNULL
Zwraca:
-1 if it's valid uid for irc plugin
0 if not
static int irc_window_kill ( void *  data,
va_list  ap 
) [static]

irc_window_kill()

handler for UI_WINDOW_KILL query requests It checks if window which will be destroyed is valid irc channel window, and we are on it now. if yes (and of course if we are connected) it send PART message to irc server, with reason got using PARTMSG macro

Parametry:
ap1st param: (window_t *) w - window which will be destroyed
dataNULL
Zwraca:
0
static LIST_FREE_ITEM ( list_irc_awaylog_free  ,
irc_awaylog_t  
) [static]
static LIST_FREE_ITEM ( list_irc_resolver_free  ,
connector_t  
) [static]
char* nickpad_string_apply ( channel_t chan,
const char *  str 
)
char* nickpad_string_create ( channel_t chan)
char* nickpad_string_restore ( channel_t chan)
PLUGIN_DEFINE ( irc  ,
PLUGIN_PROTOCOL  ,
irc_theme_init   
)

Dokumentacja zmiennych

char* fillchars = NULL
int fillchars_len = 0
char fillchars_norm[] = "\xA0"
char fillchars_utf8[] = "\xC2\xA0"
struct protocol_plugin_priv irc_priv [static]
Wartość początkowa:
 {
        .protocols      = irc_protocols,
        .statuses       = irc_statuses
}
const char* irc_protocols[] = { "irc:", NULL } [static]
const status_t irc_statuses[] [static]
 All Struktury Danych Pliki Funkcje Zmienne Definicje typów Wyliczenia Wartości wyliczeń Definicje