FoxEye Code
Multipurpose platform of modularized client or server daemon.
Status: Beta
Brought to you by:
lstranger
What is FoxEye?
FoxEye is an IRC bot that is compatible (I meant:) with Eggdrop bot. Ones
have alike commands and Tcl interface but FoxEye has it as module. But this
isn't all about FoxEye because it has possibilities above and beyond ones
of Eggdrop...
Catched signals and actions:
SIGABRT shutdowns the bot
SIGBUS shutdowns the bot
SIGFPE shutdowns the bot
SIGHUP flushes files/connections
SIGILL shutdowns the bot
SIGINT restarts the bot
SIGPOLL used by sockets API
SIGPIPE ignored
SIGQUIT shutdowns the bot
SIGSEGV shutdowns the bot
SIGSYS shutdowns the bot
SIGTERM shutdowns the bot
SIGUSR1 ignored
SIGUSR2 ignored
Return codes:
0 all went OK
1 command line error
2 out of memory
3 init error
4 cannot create console interface
5 cannot fork
6 bot already running
7 interface locking error
8 internal unrecoverable error
The bot is multithreaded but created threads may run with limitations:
1) If thread have a bot interface then IFRequest() and IFSignal() are NOT
DETACHED part of it, so thread cannot call these functions itself.
2) If thread want to call any API that using interface address or any data
of bot interface structure, thread must call Set_Iface() or Find_Iface()
before that and call Unset_Iface() after.
Undocumented options.
There is one option switch to foxeye executable: '-D'. If you add this
to command line then it'll create new file 'foxeye.debug' where any debug
messages will be stored in slightly modified format. This option does not
require '-d' option. Meaningful only for developers. There also is some
undocumended macro DBG(fmt,...) that writes debug only into this file (in
difference with dprint() this one is async-safe, i.e. can be called any
time and anywhere).
Version control.
Any version A.BCxxx must be compatible. It means if something was changed
in the core headers then it must be subject for version change.
Note: since the version 0.10 versions with release number equal to 0 (i.e.
such as 0.10.0.1 and so on) are 'developer' versions and are not subject for
this version control as protocol/arrays may be changed with any build number
change so should be not used for making any release package.
Why I may need iconv?
Iconv is a library which can do conversion from one charset to another.
You may need it if you have a number of different character sets in your
botnet.
Color codes and smile codes.
Due to historical reasons text coloring codes scheme is one from mIRC.
Smiles are GUI-only feature so there is no smile codes scheme in FoxEye.
What is in the core?
Core has the code which is common or used by many modules, so it's
vital for the bot or can avoid duplicate the code:
- init stuff (init.c)
- telnet/dcc login manager with little chat-like subsystem (direct.c)
- intermodule transfer/communication manager (dispatcher.c)
- helpfiles manager (help.c)
- bindings manager (init.c)
- config and formats files support (init.c)
- common functions (lib.c)
- terminal console driver (see -c switch) (main.c)
- modules manager (modules.c)
- timers API (sheduler.c)
- sockets API (socket.c)
- listfile manager (list.c)
- eventsfile manager (wtmp.c)
- base character transcoding API (conversion.c)
- connection chains API (connchain.c)
What modules have to care about in interaction with "ui" module?
As soon as module "ui" is loaded it have to get not only text that
comes into logs but also it should be informed about each client status
change, i.e. each service opening, each client connection, each client
disconnection (such as joining or parting channels) and each changing
of status. That should be done either by sending signal S_FLUSH from
interface of service or client that got the change or by sending a
message with name of client and appropriate flag (if that status change
was for client on some service not for service itself) to module "ui".
Which modules are available?
Currently available modules are:
logs - customisable saving and rotating of log files.
autolog - automatic saving of private and public conversations.
lua - support for scripts in Lua language.
irc - common support of connection to IRC network.
irc-channel - basic support for channels of IRC network.
irc-ctcp - implementation of some IRC commands including few DCC.
modes - implementation of commands +ban, -ban, and others
tcl - support for scripts in Tcl language
ircd - standard (RFC2813) IRC server
ziplink - support for compressed connections
ssl - support for SSL/TLS on every connection
syslog - support for logging some messages to syslog
ircd-rusnet - RusNet ircd IRC server extensions
ircd-capab - CAPAB server protocol command
Were planned to implement some other modules but they are either pending
or unrequested. Feel free to write them or ask someone to implement:
botnet - implementation of network of bots
db - unified interface (bindtables) to database.
dcc-new - chat subsystem access for any unregistered user
eggdropnet - implementation of eggdrop's botnet protocol
expirehosts - deletes hosts and users not seen for too long time
forth - support for scripts in Forth language
fserv - file downloading service
getops - automatic getting privileges from other bots
icq - client for ICQ network
irc-protection - antiflood, antispam and other
ircd-console - "consolecmd" command for IRC operators
ircd-tkserv - "temporary kill" support for ircd
jabber - client for Jabber network
login - "login", "logoff", and "cron" scripts for each chat user
md5 - support for md5 encryption
news - service for storing news and notifying people about them
notes - service for storing notes from people to other people
perl - support for scripting in Perl language
python - support for scrypting in Python language
seen - implementation of commands whois, find, and seen
su - enables change of user on chat subsystem
ui - support for generic user interface (text or GUI)
upnp - support for UPnP listening port forwarding