- build fix for poor distros who have a hard time with libircclient (now we just include this small lib in the source tree) so no longer required as an external lib

This commit is contained in:
Mark Vejvoda 2010-12-27 09:01:40 +00:00
parent b76cc89b60
commit 8d8afe78b5
873 changed files with 99837 additions and 95 deletions

View File

@ -96,8 +96,7 @@ IF(WIN32)
SET(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH}
${PROJECT_SOURCE_DIR}/source/win32_deps/lib
${PROJECT_SOURCE_DIR}/source/win32_deps/xerces-c-src_2_8_0/lib
${PROJECT_SOURCE_DIR}/source/win32_deps/wxWidgets-2.8.10/lib
${PROJECT_SOURCE_DIR}/source/win32_deps/libircclient/build/lib)
${PROJECT_SOURCE_DIR}/source/win32_deps/wxWidgets-2.8.10/lib)
SET(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH}
${PROJECT_SOURCE_DIR}/source/win32_deps/include

View File

@ -53,23 +53,6 @@ ELSE()
link_directories(${PROJECT_SOURCE_DIR}/source/win32_deps/xerces-c-src_2_8_0/lib)
ENDIF()
# stupid hack because cmake WILL NOT find libircclient for some reason
if(WIN32)
if(EXISTS ${PROJECT_SOURCE_DIR}/source/win32_deps/libircclient/include/libircclient.h)
set(LIBIRCCLIENT_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/source/win32_deps/libircclient/include)
link_directories(${PROJECT_SOURCE_DIR}/source/win32_deps/libircclient/build/lib)
endif()
else()
FIND_PATH(LIBIRCCLIENT_INCLUDE_DIR NAME libircclient/libircclient.h PATHS /usr/local/include)
link_directories(/usr/local/include)
link_directories(/usr/local/lib)
endif()
if(NOT LIBIRCCLIENT_INCLUDE_DIR)
message(FATAL_ERROR "missing libircclient : please install it [${LIBIRCCLIENT_INCLUDE_DIR}]")
endif()
INCLUDE_DIRECTORIES(${LIBIRCCLIENT_INCLUDE_DIR})
#########################################################################################
# glest configurator

View File

@ -53,23 +53,6 @@ ELSE()
link_directories(${PROJECT_SOURCE_DIR}/source/win32_deps/xerces-c-src_2_8_0/lib)
ENDIF()
# stupid hack because cmake WILL NOT find libircclient for some reason
if(WIN32)
if(EXISTS ${PROJECT_SOURCE_DIR}/source/win32_deps/libircclient/include/libircclient.h)
set(LIBIRCCLIENT_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/source/win32_deps/libircclient/include)
link_directories(${PROJECT_SOURCE_DIR}/source/win32_deps/libircclient/build/lib)
endif()
else()
FIND_PATH(LIBIRCCLIENT_INCLUDE_DIR NAME libircclient/libircclient.h PATHS /usr/local/include)
link_directories(/usr/local/include)
link_directories(/usr/local/lib)
endif()
if(NOT LIBIRCCLIENT_INCLUDE_DIR)
message(FATAL_ERROR "missing libircclient : please install it [${LIBIRCCLIENT_INCLUDE_DIR}]")
endif()
INCLUDE_DIRECTORIES(${LIBIRCCLIENT_INCLUDE_DIR})
#########################################################################################
# glest G3d Model Viewer

View File

@ -49,23 +49,6 @@ ELSE()
link_directories(${PROJECT_SOURCE_DIR}/source/win32_deps/xerces-c-src_2_8_0/lib)
ENDIF()
# stupid hack because cmake WILL NOT find libircclient for some reason
if(WIN32)
if(EXISTS ${PROJECT_SOURCE_DIR}/source/win32_deps/libircclient/include/libircclient.h)
set(LIBIRCCLIENT_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/source/win32_deps/libircclient/include)
link_directories(${PROJECT_SOURCE_DIR}/source/win32_deps/libircclient/build/lib)
endif()
else()
FIND_PATH(LIBIRCCLIENT_INCLUDE_DIR NAME libircclient/libircclient.h PATHS /usr/local/include)
link_directories(/usr/local/include)
link_directories(/usr/local/lib)
endif()
if(NOT LIBIRCCLIENT_INCLUDE_DIR)
message(FATAL_ERROR "missing libircclient : please install it [${LIBIRCCLIENT_INCLUDE_DIR}]")
endif()
INCLUDE_DIRECTORIES(${LIBIRCCLIENT_INCLUDE_DIR})
#########################################################################################
# glest map editor

View File

@ -15,8 +15,7 @@ IF(WIN32)
SET(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH}
${PROJECT_SOURCE_DIR}/source/win32_deps/lib
${PROJECT_SOURCE_DIR}/source/win32_deps/xerces-c-src_2_8_0/lib
${PROJECT_SOURCE_DIR}/source/win32_deps/wxWidgets-2.8.10/lib
${PROJECT_SOURCE_DIR}/source/win32_deps/libircclient/build/lib)
${PROJECT_SOURCE_DIR}/source/win32_deps/wxWidgets-2.8.10/lib)
INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/include)
INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/win32_deps/openal-soft-1.12.854/include)
@ -40,36 +39,6 @@ IF(WIN32)
INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/shared_lib/include/platform/win32)
ENDIF()
# stupid hack because cmake WILL NOT find libircclient for some reason
if(WIN32)
if(EXISTS ${PROJECT_SOURCE_DIR}/source/win32_deps/libircclient/include/libircclient.h)
set(LIBIRCCLIENT_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/source/win32_deps/libircclient/include)
link_directories(${PROJECT_SOURCE_DIR}/source/win32_deps/libircclient/build/lib)
endif()
else()
#CHECK_INCLUDE_FILES(libircclient/libircclient.h LIBIRCCLIENT_INCLUDE_DIR)
FIND_PATH(LIBIRCCLIENT_INCLUDE_DIR NAMES libircclient/libircclient.h)
if(NOT LIBIRCCLIENT_INCLUDE_DIR)
FIND_PATH(LIBIRCCLIENT_INCLUDE_DIR NAMES libircclient.h PATHS /usr/local/include)
if(LIBIRCCLIENT_INCLUDE_DIR)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_LIBIRCCLIENTLOCAL=1")
link_directories(/usr/local/include)
link_directories(/usr/local/lib)
endif()
endif()
endif()
#check_include_files("libircclient/libircclient.h;libircclient/include/libircclient.h" LIBIRCCLIENT_H_)
if(NOT LIBIRCCLIENT_INCLUDE_DIR)
message(FATAL_ERROR "missing libircclient : please install it [${LIBIRCCLIENT_INCLUDE_DIR}]")
else()
message(STATUS "Found libircclient : [${LIBIRCCLIENT_INCLUDE_DIR}]")
endif()
INCLUDE_DIRECTORIES(${LIBIRCCLIENT_INCLUDE_DIR})
#SET(EXTERNAL_LIBS ${EXTERNAL_LIBS} ircclient)
FIND_PACKAGE(SDL REQUIRED)
INCLUDE_DIRECTORIES(${SDL_INCLUDE_DIR})
IF(UNIX)
@ -164,6 +133,10 @@ SET(MG_INCLUDE_FILES "")
SET(MG_SOURCE_FILES "")
INCLUDE_DIRECTORIES( ${MG_INCLUDES_ROOT}platform/sdl )
SET(MG_SOURCE_FILES ${MG_SOURCE_FILES} ${PROJECT_SOURCE_DIR}/source/shared_lib/sources/libircclient/src/libircclient.c)
INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/source/shared_lib/include/libircclient/include)
IF(WIN32)
SET(MG_SOURCE_FILES ${MG_SOURCE_FILES} ${PROJECT_SOURCE_DIR}/source/shared_lib/sources/platform/posix/socket.cpp)
SET(MG_SOURCE_FILES ${MG_SOURCE_FILES} ${PROJECT_SOURCE_DIR}/source/shared_lib/sources/platform/posix/ircclient.cpp)
@ -250,7 +223,7 @@ ENDIF()
#ADD_LIBRARY(libglest SHARED ${MG_SOURCE_FILES} ${MG_INCLUDE_FILES})
#ADD_LIBRARY(libglest STATIC ${MG_SOURCE_FILES} ${MG_INCLUDE_FILES})
IF(WIN32)
TARGET_LINK_LIBRARIES(libglest stdc++ gcc odbc32 wsock32 winspool winmm shell32 comctl32 ctl3d32 advapi32 wsock32 opengl32 glu32 ole32 oleaut32 uuid mingw32 ddraw dsound dxguid ws2_32 iphlpapi wsock32 libogg libvorbis libvorbisfile zlib jpeg libpng xerces-c2_8_0 OpenAL32 libcurl winmm gdi32 opengl32 glu32 SDL SDLmain lua5.1 ircclient streflop libglest stdc++ moldname mingwex msvcrt user32 kernel32)
TARGET_LINK_LIBRARIES(libglest stdc++ gcc odbc32 wsock32 winspool winmm shell32 comctl32 ctl3d32 advapi32 wsock32 opengl32 glu32 ole32 oleaut32 uuid mingw32 ddraw dsound dxguid ws2_32 iphlpapi wsock32 libogg libvorbis libvorbisfile zlib jpeg libpng xerces-c2_8_0 OpenAL32 libcurl winmm gdi32 opengl32 glu32 SDL SDLmain lua5.1 streflop libglest stdc++ moldname mingwex msvcrt user32 kernel32)
ENDIF()
TARGET_LINK_LIBRARIES(libglest streflop)
TARGET_LINK_LIBRARIES(libglest ${EXTERNAL_LIBS})

View File

@ -0,0 +1,109 @@
/* include/config.h.in. Generated from configure.in by autoheader. */
/* Define to 1 if you have the `getaddrinfo' function. */
#undef HAVE_GETADDRINFO
/* Define to 1 if you have the `gethostbyname_r' function. */
#undef HAVE_GETHOSTBYNAME_R
/* Define to 1 if you have the `inet_ntoa' function. */
#undef HAVE_INET_NTOA
/* Define to 1 if you have the `inet_pton' function. */
#undef HAVE_INET_PTON
/* Define to 1 if you have the <inttypes.h> header file. */
#undef HAVE_INTTYPES_H
/* Define to 1 if you have the `localtime_r' function. */
#undef HAVE_LOCALTIME_R
/* Define to 1 if your system has a GNU libc compatible `malloc' function, and
to 0 otherwise. */
#undef HAVE_MALLOC
/* Define to 1 if you have the <memory.h> header file. */
#undef HAVE_MEMORY_H
/* Define to 1 if you have the `socket' function. */
#undef HAVE_SOCKET
/* Define to 1 if `stat' has the bug that it succeeds when given the
zero-length file name argument. */
#undef HAVE_STAT_EMPTY_STRING_BUG
/* Define to 1 if stdbool.h conforms to C99. */
#undef HAVE_STDBOOL_H
/* Define to 1 if you have the <stdint.h> header file. */
#undef HAVE_STDINT_H
/* Define to 1 if you have the <stdlib.h> header file. */
#undef HAVE_STDLIB_H
/* Define to 1 if you have the <strings.h> header file. */
#undef HAVE_STRINGS_H
/* Define to 1 if you have the <string.h> header file. */
#undef HAVE_STRING_H
/* Define to 1 if you have the <sys/select.h> header file. */
#undef HAVE_SYS_SELECT_H
/* Define to 1 if you have the <sys/socket.h> header file. */
#undef HAVE_SYS_SOCKET_H
/* Define to 1 if you have the <sys/stat.h> header file. */
#undef HAVE_SYS_STAT_H
/* Define to 1 if you have the <sys/types.h> header file. */
#undef HAVE_SYS_TYPES_H
/* Define to 1 if you have the <unistd.h> header file. */
#undef HAVE_UNISTD_H
/* Define to 1 if the system has the type `_Bool'. */
#undef HAVE__BOOL
/* Define to 1 if `lstat' dereferences a symlink specified with a trailing
slash. */
#undef LSTAT_FOLLOWS_SLASHED_SYMLINK
/* Define to the address where bug reports for this package should be sent. */
#undef PACKAGE_BUGREPORT
/* Define to the full name of this package. */
#undef PACKAGE_NAME
/* Define to the full name and version of this package. */
#undef PACKAGE_STRING
/* Define to the one symbol short name of this package. */
#undef PACKAGE_TARNAME
/* Define to the version of this package. */
#undef PACKAGE_VERSION
/* Define to the type of arg 1 for `select'. */
#undef SELECT_TYPE_ARG1
/* Define to the type of args 2, 3 and 4 for `select'. */
#undef SELECT_TYPE_ARG234
/* Define to the type of arg 5 for `select'. */
#undef SELECT_TYPE_ARG5
/* Define to 1 if you have the ANSI C header files. */
#undef STDC_HEADERS
/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
#undef TIME_WITH_SYS_TIME
/* Define to empty if `const' does not conform to ANSI C. */
#undef const
/* Define to rpl_malloc if the replacement function should be used. */
#undef malloc
/* Define to `unsigned int' if <sys/types.h> does not define. */
#undef size_t

View File

@ -0,0 +1,59 @@
/*
* Copyright (C) 2004-2009 Georgy Yunaev gyunaev@ulduzsoft.com
*
* This library is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
* License for more details.
*/
#ifndef INCLUDE_IRC_DCC_H
#define INCLUDE_IRC_DCC_H
#ifndef IN_INCLUDE_LIBIRC_H
#error This file should not be included directly, include just libirclient.h
#endif
#include <stdio.h>
/*
* This structure keeps the state of a single DCC connection.
*/
struct irc_dcc_session_s
{
irc_dcc_session_t * next;
irc_dcc_t id;
void * ctx;
socket_t sock; /*!< DCC socket */
int dccmode; /*!< Boolean value to differ chat vs send
requests. Changes the cb behavior - when
it is chat, data is sent by lines with
stripped CRLFs. In file mode, the data
is sent as-is */
int state;
time_t timeout;
FILE * dccsend_file_fp;
unsigned int received_file_size;
unsigned int file_confirm_offset;
struct sockaddr_in remote_addr;
char incoming_buf[LIBIRC_DCC_BUFFER_SIZE];
unsigned int incoming_offset;
char outgoing_buf[LIBIRC_DCC_BUFFER_SIZE];
unsigned int outgoing_offset;
port_mutex_t mutex_outbuf;
irc_dcc_callback_t cb;
};
#endif /* INCLUDE_IRC_DCC_H */

View File

@ -0,0 +1,166 @@
/*
* Copyright (C) 2004-2009 Georgy Yunaev gyunaev@ulduzsoft.com
*
* This library is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
* License for more details.
*/
/*!
* \file libirc_doc.h
* \author Georgy Yunaev
* \version 1.0
* \date 09.2004
* \brief This file contains Doxygen modules.
*/
/*! \mainpage libircclient - a IRC library to create IRC clients
*
* \section intro_sec Introduction
*
* libircclient is a small but powerful library, which implements client-server IRC
* protocol. It is designed to be small, fast, portable and compatible to RFC
* standards, and most IRC clients. libircclient features include:
* - Full multi-threading support.
* - Single threads handles all the IRC processing.
* - Support for single-threaded applications, and socket-based applications,
* which use select()
* - Synchronous and asynchronous interfaces.
* - CTCP support with optional build-in reply code.
* - Flexible DCC support, including both DCC chat, and DCC file transfer.
* - Can both initiate and react to initiated DCC.
* - Can accept or decline DCC sessions asynchronously.
* - Plain C interface and implementation (possible to use from C++ code,
* obviously)
* - Compatible with RFC 1459 and most IRC clients.
* - Free, licensed under LGPL license.
* - Good documentation and examples available.
*
* \section install_sec Compilation on Unix
*
* To compile libircclient, unpack the distribution, and do the standard mantra:
* \code
* # ./configure
* # make
* # make install
* \endcode
*
* \section install_secw Compilation under MS Windows
*
* To compile libircclient under MS Windows:
* - open the src/win32/libircclient.dsw file;
* - select the appropriate library linkage (static or dynamic), and
* debug/release version;
* - do 'Make build'
*
* You can also build the example using spammer.dsp project file. Here you
* can see how to integrate libircclient into your own project.
*
* \section doc Documentation
*
* Documentation is not installed with \a make \a install; you should copy it
* somewhere by hand.
* There is html documentation (in \a doc/html) and manual pages (\a doc/man).
* It is also recommended to check the \a examples directory, there are a
* few examples, they'll help you.
*
* \section cocoa Cocoa Support
*
* There is an experimental Cocoa framework wrapper around libircclient, called
* <a href="../../cocoa/doc/html/index.html">IRCClient</a>. You can find the Xcode project
* and source in the cocoa/ directory in the current trunk.
*
* \section author Author, copyright, support.
*
* If you have any questions, bug reports, suggestions regarding libircclient -
* please send them to gyunaev@ulduzsoft.com.
*
* Copyright (C) 2004-2009 Georgy Yunaev gyunaev@ulduzsoft.com
*
* This library is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
* License for more details.
*
*/
/*!
* \defgroup initclose Initiating and destroying IRC session.
*/
/*!
* \defgroup conndisc Connecting, disconnecting from IRC server.
*/
/*!
* \defgroup running Running IRC session.
*/
/*!
* \defgroup ircmd_ch IRC commands: channel management.
*/
/*!
* \defgroup ircmd_msg IRC commands: sending messages/notices.
*/
/*!
* \defgroup ircmd_oth IRC commands: other stuff.
*/
/*!
* \defgroup ctcp CTCP requests and replies.
*/
/*!
* \defgroup nnparse Nickname parsing.
*/
/*!
* \defgroup dccstuff DCC chat/send requests and replies.
*/
/*!
* \defgroup events Handling IRC events.
*/
/*!
* \defgroup errors Obtaining error values and descriptions.
*/
/*!
* \defgroup errorcodes Error codes generated by libircclient.
*/
/*!
* \defgroup contexts Managing contexts.
*/
/*!
* \defgroup common Getting libircclient version.
*/
/*!
* \defgroup options Managing libircclient options.
*/
/*!
* \defgroup rfcnumbers Numeric reply codes from RFC1459
*/
/*!
* \defgroup colors Messages colors manipulation
*/

View File

@ -0,0 +1,130 @@
/*
* Copyright (C) 2004-2009 Georgy Yunaev gyunaev@ulduzsoft.com
*
* This library is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
* License for more details.
*/
/*!
* \file libirc_doc_faq.h
* \author Georgy Yunaev
* \version 1.0
* \date 09.2004
* \brief This file contains libircclient FAQ.
*/
/*! \page pagefaq Frequently Asked Questions
\section faq FAQ
\subsection faq1 Why the IRC server generates all these event_numeric events, and what is their meaning?
The IRC protocol itself is asynchronous and server-driven.
For you, this means the following:
- For any IRC command, it is not possible to obtain an immediate response
whether the command succeed or not. Instead the server will send the
reply in a short (or long) period of time.
- For some IRC command there is no 'success' response at all. For example,
when you send a text message, IRC server will not send anything to confirm
that the message is already sent.
- You can send several commands to the IRC server, and then receive several
replies regarding every command. The order of the replies you receive
is generally undefined.
- A lot of IRC events sent to you is generated by other users, or the IRC
server itself, and are sent to you just when they are generated.
- Long lists (for example, channel lists) are also sent as events. Moreover,
these events could be separated by other events (message or notices). And
it is your responsibility to separate the data (using event codes), and
use some sort of data structure that will hold it until the data is
complete. It is not possible to simply query the list of channels, and
expect that its content will immediately arrive.
- IRC protocol is event-based, not request-based. This means that if you
send JOIN request asking to join a channel, you cannot assume that you
have joined it until the server tells you so with JOIN event. Also it is
possible for server to "JOIN" you to a specific channel implicitly,
without even sending a join request.
- You should be prepared to expect the unexpected from the IRC server.
For example, the server can change your nick (seen on most servers, which
use \a nickserv authentication. You can be "forced" to join the channel,
to say something, to leave a channel, to change your usermode and so on.
Listen what IRC server tells you, and do so.
\subsection faq2 Why the irc_cmd_... functions does not return an error if the IRC server reports it? For example, why irc_cmd_join() returns success when I attempt to join a password-protected channel, and then the IRC server sends an error?
The irc_cmd_... functions return success when the command is sent to the
IRC server. The asynchronous nature of IRC makes it impossible to obtain
the command result immediately. Please read \ref faq1.
\subsection faq3 How to register/auth with NICKSERV?
There is no 'standard' way. However, knowing that all NICKSERV messages are
sent via irc_callbacks_t::event_notice, you can use following algorithm:
\code
static void event_notice (irc_session_t * session, const char * event,
const char * origin, const char ** params, unsigned int count)
{
char buf[256];
if ( !origin )
return;
if ( strcasecmp (origin, "nickserv") )
return;
if ( strstr (params[1], "This nick is not registered") == params[1] )
{
sprintf (buf, "REGISTER %s NOMAIL", gCfg.irc_nickserv_password);
irc_cmd_msg (session, "nickserv", buf);
}
else if ( strstr (params[1], "This nickname is registered and protected")
== params[1] )
{
sprintf (buf, "IDENTIFY %s", gCfg.irc_nickserv_password);
irc_cmd_msg (session, "nickserv", buf);
}
else if ( strstr (params[1], "Password accepted - you are now recognized")
== params[1] )
printf ("Nickserv authentication succeed.");
}
\endcode
The idea is to parse the messages sent from NICKSERV, and if they're matched
the specific patterns, react on them appropriately.
\subsection faq4 What is CTCP, and why do I need my own handler?
CTCP abbreviature is deciphered as "Client-to-Client Protocol". It is used
between the IRC clients to query the remote client for some data, or to send
some information - for example, /me messages are sent via CTCP. There is no
standard list of possible CTCP requests, and different IRC clients often add
their own CTCP codes. The built-in handler reacts on TIME, VERSION, PING and
FINGER CTCP queries. If you need to react on other queries, you'll have to
write your own CTCP handler. See the source code of libirc_event_ctcp_internal
to get an idea how to write it.
\subsection faq5 Why don't I receive event_umode when I am made +o (a channel operator)?
Because this is a channel mode, not a user mode. The user mode \c +o means that
this user is an IRC network operator, not just a channel operator.
\subsection faq6 Why do I get a LIBIRC_ERR_SOCKET error while using static library under Win32?
Because if you use static library, you have to initialize Winsock manually:
\code
WORD wVersionRequested = MAKEWORD (1, 1);
WSADATA wsaData;
if ( WSAStartup (wVersionRequested, &wsaData) != 0 )
// report an error
// And now we can use libircclient
\endcode
*/

View File

@ -0,0 +1,208 @@
/*
* Copyright (C) 2004-2009 Georgy Yunaev gyunaev@ulduzsoft.com
*
* This library is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
* License for more details.
*/
/*!
* \file libirc_errors.h
* \author Georgy Yunaev
* \version 1.0
* \date 09.2004
* \brief This file defines error codes generated by libircclient.
*/
#ifndef INCLUDE_IRC_ERRORS_H
#define INCLUDE_IRC_ERRORS_H
#ifndef IN_INCLUDE_LIBIRC_H
#error This file should not be included directly, include just libircclient.h
#endif
/*! brief No error
* \ingroup errorcodes
*/
#define LIBIRC_ERR_OK 0
/*! \brief Invalid argument
*
* An invalid value was given for one of the arguments to a function.
* For example, supplying the NULL value for \a channel argument of
* irc_cmd_join() produces LIBIRC_ERR_INVAL error. You should fix the code.
*
* \ingroup errorcodes
*/
#define LIBIRC_ERR_INVAL 1
/*! \brief Could not resolve host.
*
* The host name supplied for irc_connect() function could not be resolved
* into valid IP address. Usually means that host name is invalid.
*
* \ingroup errorcodes
*/
#define LIBIRC_ERR_RESOLV 2
/*! \brief Could not create socket.
*
* The new socket could not be created or made non-blocking. Usually means
* that the server is out of resources, or (rarely :) a bug in libircclient.
*
* \ingroup errorcodes
*/
#define LIBIRC_ERR_SOCKET 3
/*! \brief Could not connect.
*
* The socket could not connect to the IRC server, or to the destination DCC
* part. Usually means that either the IRC server is down or its address is
* invalid. For DCC the reason usually is the firewall on your or destination
* computer, which refuses DCC transfer.
*
* \sa irc_run irc_connect
* \ingroup errorcodes
*/
#define LIBIRC_ERR_CONNECT 4
/*! \brief Connection closed by remote peer.
*
* The IRC connection was closed by the IRC server (which could mean that an
* IRC operator just have banned you from the server :)), or the DCC connection
* was closed by remote peer - for example, the other side just quits his mIrc.
* Usually it is not an error.
*
* \sa irc_run irc_connect irc_dcc_callback_t
* \ingroup errorcodes
*/
#define LIBIRC_ERR_CLOSED 5
/*! \brief Out of memory
*
* There are two possible reasons for this error. First is that memory could
* not be allocated for libircclient use, and this error usually is fatal.
* Second reason is that the command queue (which keeps command ready to be
* sent to the IRC server) is full, and could not accept more commands yet.
* In this case you should just wait, and repeat the command later.
*
* \ingroup errorcodes
*/
#define LIBIRC_ERR_NOMEM 6
/*! \brief Could not accept new connection
*
* A DCC chat/send connection from the remote peer could not be accepted.
* Either the connection was just terminated before it is accepted, or there
* is a bug in libircclient.
*
* \ingroup errorcodes
*/
#define LIBIRC_ERR_ACCEPT 7
/*! \brief Could not send this
*
* A \a filename supplied to irc_dcc_sendfile() could not be sent. Either is
* is not a file (a directory or a socket, for example), or it is not readable. *
*
* \sa LIBIRC_ERR_OPENFILE
* \ingroup errorcodes
*/
#define LIBIRC_ERR_NODCCSEND 9
/*! \brief Could not read DCC file or socket
*
* Either a DCC file could not be read (for example, was truncated during
* sending), or a DCC socket returns a read error, which usually means that
* the network connection is terminated.
*
* \ingroup errorcodes
*/
#define LIBIRC_ERR_READ 10
/*! \brief Could not write DCC file or socket
*
* Either a DCC file could not be written (for example, there is no free space
* on disk), or a DCC socket returns a write error, which usually means that
* the network connection is terminated.
*
* \ingroup errorcodes
*/
#define LIBIRC_ERR_WRITE 11
/*! \brief Invalid state
*
* The function is called when it is not allowed to be called. For example,
* irc_cmd_join() was called before the connection to IRC server succeed, and
* ::event_connect is called.
*
* \ingroup errorcodes
*/
#define LIBIRC_ERR_STATE 12
/*! \brief Operation timed out
*
* The DCC request is timed out.
* There is a timer for each DCC request, which tracks connecting, accepting
* and non-accepted/declined DCC requests. For every request this timer
* is currently 60 seconds. If the DCC request was not connected, accepted
* or declined during this time, it will be terminated with this error.
*
* \ingroup errorcodes
*/
#define LIBIRC_ERR_TIMEOUT 13
/*! \brief Could not open file for DCC send
*
* The file specified in irc_dcc_sendfile() could not be opened.
*
* \ingroup errorcodes
*/
#define LIBIRC_ERR_OPENFILE 14
/*! \brief IRC server connection terminated
*
* The connection to the IRC server was terminated - possibly, by network
* error. Try to irc_connect() again.
*
* \ingroup errorcodes
*/
#define LIBIRC_ERR_TERMINATED 15
/*! \brief IPv6 not supported
*
* The function which requires IPv6 support was called, but the IPv6 support was not compiled
* into the application
*
* \ingroup errorcodes
*/
#define LIBIRC_ERR_NOIPV6 16
/*! brief Internal max error value count
*/
#define LIBIRC_ERR_MAX 17
#endif /* INCLUDE_IRC_ERRORS_H */

View File

@ -0,0 +1,398 @@
/*
* Copyright (C) 2004-2009 Georgy Yunaev gyunaev@ulduzsoft.com
*
* This library is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
* License for more details.
*/
/*!
* \file libirc_events.h
* \author Georgy Yunaev
* \version 1.0
* \date 09.2004
* \brief Describes event callbacks generated by libircclient.
*
* This file should not be included directly. Include libircclient.h instead.
*/
#ifndef INCLUDE_IRC_EVENTS_H
#define INCLUDE_IRC_EVENTS_H
#ifndef IN_INCLUDE_LIBIRC_H
#error This file should not be included directly, include just libircclient.h
#endif
/*!
* \fn typedef void (*irc_event_callback_t) (irc_session_t * session, const char * event, const char * origin, const char ** params, unsigned int count)
* \brief A most common event callback
*
* \param session the session, which generates an event
* \param event the text name of the event. Useful in case you use a single
* event handler for several events simultaneously.
* \param origin the originator of the event. See the note below.
* \param params a list of event params. Depending on the event nature, it
* could have zero or more params. The actual number of params
* is specified in count. None of the params can be NULL, but
* 'params' pointer itself could be NULL for some events.
* \param count the total number of params supplied.
*
* Every event generates a callback. This callback is generated by most events.
* Depending on the event nature, it can provide zero or more params. For each
* event, the number of provided params is fixed, and their meaning is
* described.
*
* Every event has origin, though the \a origin variable may be NULL, which
* means that event origin is unknown. The origin usually looks like
* nick!host\@ircserver, i.e. like tim!home\@irc.krasnogorsk.ru. Such origins
* can not be used in IRC commands, and need to be stripped (i.e. host and
* server part should be cut off) before using. This can be done either
* explicitly, by calling irc_target_get_nick(), or implicitly for all the
* events - by setting the #LIBIRC_OPTION_STRIPNICKS option with irc_option_set().
*
* \ingroup events
*/
typedef void (*irc_event_callback_t) (irc_session_t * session, const char * event, const char * origin, const char ** params, unsigned int count);
/*!
* \fn typedef void (*irc_eventcode_callback_t) (irc_session_t * session, unsigned int event, const char * origin, const char ** params, unsigned int count)
* \brief A numeric event callback
*
* \param session the session, which generates an event
* \param event the numeric code of the event. Useful in case you use a
* single event handler for several events simultaneously.
* \param origin the originator of the event. See the note below.
* \param params a list of event params. Depending on the event nature, it
* could have zero or more params. The actual number of params
* is specified in count. None of the params can be NULL, but
* 'params' pointer itself could be NULL for some events.
* \param count the total number of params supplied.
*
* Most times in reply to your actions the IRC server generates numeric
* callbacks. Most of them are error codes, and some of them mark list start
* and list stop markers. Every code has its own set of params; for details
* you can either experiment, or read RFC 1459.
*
* Every event has origin, though the \a origin variable may be NULL, which
* means that event origin is unknown. The origin usually looks like
* nick!host\@ircserver, i.e. like tim!home\@irc.krasnogorsk.ru. Such origins
* can not be used in IRC commands, and need to be stripped (i.e. host and
* server part should be cut off) before using. This can be done either
* explicitly, by calling irc_target_get_nick(), or implicitly for all the
* events - by setting the #LIBIRC_OPTION_STRIPNICKS option with irc_option_set().
*
* \ingroup events
*/
typedef void (*irc_eventcode_callback_t) (irc_session_t * session, unsigned int event, const char * origin, const char ** params, unsigned int count);
/*!
* \fn typedef void (*irc_event_dcc_chat_t) (irc_session_t * session, const char * nick, const char * addr, irc_dcc_t dccid)
* \brief A remote DCC CHAT request callback
*
* \param session the session, which generates an event
* \param nick the person who requested DCC CHAT with you.
* \param addr the person's IP address in decimal-dot notation.
* \param dccid an id associated with this request. Use it in calls to
* irc_dcc_accept() or irc_dcc_decline().
*
* This callback is called when someone requests DCC CHAT with you. In respond
* you should call either irc_dcc_accept() to accept chat request, or
* irc_dcc_decline() to decline chat request.
*
* \sa irc_dcc_accept or irc_dcc_decline
* \ingroup events
*/
typedef void (*irc_event_dcc_chat_t) (irc_session_t * session, const char * nick, const char * addr, irc_dcc_t dccid);
/*!
* \fn typedef void (*irc_event_dcc_send_t) (irc_session_t * session, const char * nick, const char * addr, const char * filename, unsigned long size, irc_dcc_t dccid)
* \brief A remote DCC CHAT request callback
*
* \param session the session, which generates an event
* \param nick the person who requested DCC CHAT with you.
* \param addr the person's IP address in decimal-dot notation.
* \param filename the sent filename.
* \param size the filename size.
* \param dccid an id associated with this request. Use it in calls to
* irc_dcc_accept() or irc_dcc_decline().
*
* This callback is called when someone wants to send a file to you using
* DCC SEND. As with chat, in respond you should call either irc_dcc_accept()
* to accept this request and receive the file, or irc_dcc_decline() to
* decline this request.
*
* \sa irc_dcc_accept or irc_dcc_decline
* \ingroup events
*/
typedef void (*irc_event_dcc_send_t) (irc_session_t * session, const char * nick, const char * addr, const char * filename, unsigned long size, irc_dcc_t dccid);
/*! \brief Event callbacks structure.
*
* All the communication with the IRC network is based on events. Generally
* speaking, event is anything generated by someone else in the network,
* or by the IRC server itself. "Someone sends you a message", "Someone
* has joined the channel", "Someone has quits IRC" - all these messages
* are events.
*
* Every event has its own event handler, which is called when the
* appropriate event is received. You don't have to define all the event
* handlers; define only the handlers for the events you need to intercept.
*
* Most event callbacks are the types of ::irc_event_callback_t. There are
* also events, which generate ::irc_eventcode_callback_t,
* ::irc_event_dcc_chat_t and ::irc_event_dcc_send_t callbacks.
*
* \ingroup events
*/
typedef struct
{
/*!
* The "on_connect" event is triggered when the client successfully
* connects to the server, and could send commands to the server.
* No extra params supplied; \a params is 0.
*/
irc_event_callback_t event_connect;
/*!
* The "nick" event is triggered when the client receives a NICK message,
* meaning that someone (including you) on a channel with the client has
* changed their nickname.
*
* \param origin the person, who changes the nick. Note that it can be you!
* \param params[0] mandatory, contains the new nick.
*/
irc_event_callback_t event_nick;
/*!
* The "quit" event is triggered upon receipt of a QUIT message, which
* means that someone on a channel with the client has disconnected.
*
* \param origin the person, who is disconnected
* \param params[0] optional, contains the reason message (user-specified).
*/
irc_event_callback_t event_quit;
/*!
* The "join" event is triggered upon receipt of a JOIN message, which
* means that someone has entered a channel that the client is on.
*
* \param origin the person, who joins the channel. By comparing it with
* your own nickname, you can check whether your JOIN
* command succeed.
* \param params[0] mandatory, contains the channel name.
*/
irc_event_callback_t event_join;
/*!
* The "part" event is triggered upon receipt of a PART message, which
* means that someone has left a channel that the client is on.
*
* \param origin the person, who leaves the channel. By comparing it with
* your own nickname, you can check whether your PART
* command succeed.
* \param params[0] mandatory, contains the channel name.
* \param params[1] optional, contains the reason message (user-defined).
*/
irc_event_callback_t event_part;
/*!
* The "mode" event is triggered upon receipt of a channel MODE message,
* which means that someone on a channel with the client has changed the
* channel's parameters.
*
* \param origin the person, who changed the channel mode.
* \param params[0] mandatory, contains the channel name.
* \param params[1] mandatory, contains the changed channel mode, like
* '+t', '-i' and so on.
* \param params[2] optional, contains the mode argument (for example, a
* key for +k mode, or user who got the channel operator status for
* +o mode)
*/
irc_event_callback_t event_mode;
/*!
* The "umode" event is triggered upon receipt of a user MODE message,
* which means that your user mode has been changed.
*
* \param origin the person, who changed the channel mode.
* \param params[0] mandatory, contains the user changed mode, like
* '+t', '-i' and so on.
*/
irc_event_callback_t event_umode;
/*!
* The "topic" event is triggered upon receipt of a TOPIC message, which
* means that someone on a channel with the client has changed the
* channel's topic.
*
* \param origin the person, who changes the channel topic.
* \param params[0] mandatory, contains the channel name.
* \param params[1] optional, contains the new topic.
*/
irc_event_callback_t event_topic;
/*!
* The "kick" event is triggered upon receipt of a KICK message, which
* means that someone on a channel with the client (or possibly the
* client itself!) has been forcibly ejected.
*
* \param origin the person, who kicked the poor.
* \param params[0] mandatory, contains the channel name.
* \param params[0] optional, contains the nick of kicked person.
* \param params[1] optional, contains the kick text
*/
irc_event_callback_t event_kick;
/*!
* The "channel" event is triggered upon receipt of a PRIVMSG message
* to an entire channel, which means that someone on a channel with
* the client has said something aloud. Your own messages don't trigger
* PRIVMSG event.
*
* \param origin the person, who generates the message.
* \param params[0] mandatory, contains the channel name.
* \param params[1] optional, contains the message text
*/
irc_event_callback_t event_channel;
/*!
* The "privmsg" event is triggered upon receipt of a PRIVMSG message
* which is addressed to one or more clients, which means that someone
* is sending the client a private message.
*
* \param origin the person, who generates the message.
* \param params[0] mandatory, contains your nick.
* \param params[1] optional, contains the message text
*/
irc_event_callback_t event_privmsg;
/*!
* The "notice" event is triggered upon receipt of a NOTICE message
* which means that someone has sent the client a public or private
* notice. According to RFC 1459, the only difference between NOTICE
* and PRIVMSG is that you should NEVER automatically reply to NOTICE
* messages. Unfortunately, this rule is frequently violated by IRC
* servers itself - for example, NICKSERV messages require reply, and
* are NOTICEs.
*
* \param origin the person, who generates the message.
* \param params[0] mandatory, contains the target nick name.
* \param params[1] optional, contains the message text
*/
irc_event_callback_t event_notice;
/*!
* The "channel_notice" event is triggered upon receipt of a NOTICE
* message which means that someone has sent the client a public
* notice. According to RFC 1459, the only difference between NOTICE
* and PRIVMSG is that you should NEVER automatically reply to NOTICE
* messages. Unfortunately, this rule is frequently violated by IRC
* servers itself - for example, NICKSERV messages require reply, and
* are NOTICEs.
*
* \param origin the person, who generates the message.
* \param params[0] mandatory, contains the channel name.
* \param params[1] optional, contains the message text
*/
irc_event_callback_t event_channel_notice;
/*!
* The "invite" event is triggered upon receipt of an INVITE message,
* which means that someone is permitting the client's entry into a +i
* channel.
*
* \param origin the person, who INVITEs you.
* \param params[0] mandatory, contains your nick.
* \param params[1] mandatory, contains the channel name you're invited into.
*
* \sa irc_cmd_invite irc_cmd_chanmode_invite
*/
irc_event_callback_t event_invite;
/*!
* The "ctcp" event is triggered when the client receives the CTCP
* request. By default, the built-in CTCP request handler is used. The
* build-in handler automatically replies on most CTCP messages, so you
* will rarely need to override it.
*
* \param origin the person, who generates the message.
* \param params[0] mandatory, the complete CTCP message, including its
* arguments.
*
* Mirc generates PING, FINGER, VERSION, TIME and ACTION messages,
* check the source code of \c libirc_event_ctcp_internal function to
* see how to write your own CTCP request handler. Also you may find
* useful this question in FAQ: \ref faq4
*/
irc_event_callback_t event_ctcp_req;
/*!
* The "ctcp" event is triggered when the client receives the CTCP reply.
*
* \param origin the person, who generates the message.
* \param params[0] mandatory, the CTCP message itself with its arguments.
*/
irc_event_callback_t event_ctcp_rep;
/*!
* The "action" event is triggered when the client receives the CTCP
* ACTION message. These messages usually looks like:\n
* \code
* [23:32:55] * Tim gonna sleep.
* \endcode
*
* \param origin the person, who generates the message.
* \param params[0] mandatory, the ACTION message.
*/
irc_event_callback_t event_ctcp_action;
/*!
* The "unknown" event is triggered upon receipt of any number of
* unclassifiable miscellaneous messages, which aren't handled by the
* library.
*/
irc_event_callback_t event_unknown;
/*!
* The "numeric" event is triggered upon receipt of any numeric response
* from the server. There is a lot of such responses, see the full list
* here: \ref rfcnumbers.
*
* See the params in ::irc_eventcode_callback_t specification.
*/
irc_eventcode_callback_t event_numeric;
/*!
* The "dcc chat" event is triggered when someone requests a DCC CHAT from
* you.
*
* See the params in ::irc_event_dcc_chat_t specification.
*/
irc_event_dcc_chat_t event_dcc_chat_req;
/*!
* The "dcc chat" event is triggered when someone wants to send a file
* to you via DCC SEND request.
*
* See the params in ::irc_event_dcc_send_t specification.
*/
irc_event_dcc_send_t event_dcc_send_req;
} irc_callbacks_t;
#endif /* INCLUDE_IRC_EVENTS_H */

View File

@ -0,0 +1,49 @@
/*
* Copyright (C) 2004-2009 Georgy Yunaev gyunaev@ulduzsoft.com
*
* This library is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
* License for more details.
*/
/*!
* \file libirc_options.h
* \author Georgy Yunaev
* \version 1.0
* \date 09.2004
* \brief This file defines the options used in irc_session_options()
*/
#ifndef INCLUDE_IRC_OPTIONS_H
#define INCLUDE_IRC_OPTIONS_H
#ifndef IN_INCLUDE_LIBIRC_H
#error This file should not be included directly, include just libircclient.h
#endif
/*!
* enables additional debug output
* \ingroup options
*/
#define LIBIRC_OPTION_DEBUG (1 << 1)
/*! \brief allows to strip origins automatically.
*
* For every IRC server event, the event origin is sent in standard form:
* nick!host\@ircserver, i.e. like tim!home\@irc.krasnogorsk.ru. Such origins
* can not be used in IRC commands, and need to be stripped (i.e. host and
* server part should be cut off) before using. This can be done either
* explicitly, by calling irc_target_get_nick(), or implicitly for all the
* events - by setting this option with irc_option_set().
* \ingroup options
*/
#define LIBIRC_OPTION_STRIPNICKS (1 << 2)
#endif /* INCLUDE_IRC_OPTIONS_H */

View File

@ -0,0 +1,38 @@
/*
* Copyright (C) 2004-2009 Georgy Yunaev gyunaev@ulduzsoft.com
*
* This library is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
* License for more details.
*/
#ifndef INCLUDE_IRC_PARAMS_H
#define INCLUDE_IRC_PARAMS_H
#ifndef IN_INCLUDE_LIBIRC_H
#error This file should not be included directly, include just libircclient.h
#endif
#define LIBIRC_VERSION_HIGH 0x0001
#define LIBIRC_VERSION_LOW 0x0002
#define LIBIRC_BUFFER_SIZE 1024
#define LIBIRC_DCC_BUFFER_SIZE 1024
#define LIBIRC_STATE_INIT 0
#define LIBIRC_STATE_LISTENING 1
#define LIBIRC_STATE_CONNECTING 2
#define LIBIRC_STATE_CONNECTED 3
#define LIBIRC_STATE_DISCONNECTED 4
#define LIBIRC_STATE_CONFIRM_SIZE 5 // Used only by DCC send to confirm the amount of sent data
#define LIBIRC_STATE_REMOVED 10 // this state is used only in DCC
#endif /* INCLUDE_IRC_PARAMS_H */

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,68 @@
/*
* Copyright (C) 2004-2009 Georgy Yunaev gyunaev@ulduzsoft.com
*
* This library is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
* License for more details.
*/
#ifndef INCLUDE_IRC_SESSION_H
#define INCLUDE_IRC_SESSION_H
#ifndef IN_INCLUDE_LIBIRC_H
#error This file should not be included directly, include just libircclient.h
#endif
#include "libirc_params.h"
#include "libirc_dcc.h"
#include "libirc_events.h"
struct irc_session_s
{
void * ctx;
int dcc_timeout;
int options;
int lasterror;
char incoming_buf[LIBIRC_BUFFER_SIZE];
unsigned int incoming_offset;
char outgoing_buf[LIBIRC_BUFFER_SIZE];
unsigned int outgoing_offset;
port_mutex_t mutex_session;
socket_t sock;
int state;
int motd_received;
char * server;
char * server_password;
char * realname;
char * username;
char * nick;
#if defined( ENABLE_IPV6 )
struct in6_addr local_addr;
#else
struct in_addr local_addr;
#endif
irc_dcc_t dcc_last_id;
irc_dcc_session_t * dcc_sessions;
port_mutex_t mutex_dcc;
irc_callbacks_t callbacks;
};
#endif /* INCLUDE_IRC_SESSION_H */

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,95 @@
2009-01-03 Georgy Yunaev
* libircclient 1.3 released.
* Added IPv6 support (thanks Lothar May)
* Now provides more information about ACTION (thx chromerium)
* Updated contact info and copyrights.
* Removed ircmud sample as it never worked anyway.
2006-08-29 Georgy Yunaev
* libircclient 1.2 released.
* Windows: added missed expored functions from .def file.
2005-03-10 Georgy Yunaev
* libircclient 1.1 released.
* Fixed DCC buffer size which resulted extra callback on DCC tranfers
(thanks flohimself).
2004-11-12 Georgy Yunaev
* libircclient 1.0 released.
* Fixed compilation on FreeBSD.
2004-10-31 Georgy Yunaev
* When more than one DCC chat sessions were active, only the latest
generated callbacks.
* libircclient 0.8 released.
2004-10-17 Georgy Yunaev
* libircclient 0.7 released.
* Fixed DCC chat lockup in multithread programs (thanks olifozzy).
2004-10-15 Georgy Yunaev
* Win32 static library does not have dllmain anymore (thanks olifozzy).
* DCC chat crashed if there were several DCC session, and one of them was
closed (thanks olifozzy).
* DCC chat speed increased when several messages are stored in buffer.
2004-10-10 Georgy Yunaev
* libircclient 0.6 released.
* Added color support.
2004-10-07 Georgy Yunaev
* CTCP TIME reply was malformed on some platforms with buggy locales.
* Socket stuff rewritten to be signal-safe and more portable.
* Data and commands are now sent faster to IRC server.
* event_umode now works.
2004-10-06 Georgy Yunaev
* CHANGED BEHAVIOR: the built-in CTCP handler is used if not set.
Therefore, irc_event_ctcp_internal() is not public anymore.
* Added a small (as yet) FAQ.
* Add extra numeric codes from RFC2812.
2004-10-03 Georgy Yunaev
* Libircclient error codes are now well-documented.
* Modules documentation is extended.
* Added new methods: irc_cmd_part, irc_cmd_invite, irc_cmd_names,
irc_cmd_list, irc_cmd_topic, irc_cmd_channel_mode, irc_cmd_user_mode,
irc_cmd_nick, irc_cmd_whois.
* Added the improved error handling for NULL pointers to all the irc_cmd*
methods.
* Fixed the nickname tracking bug (after the nickname changing, all
privmsgs were treaten as channel messages).
* All the numeric reply codes from RFC1459 are now documented.
* Numeric reply codes for every command are now described.
2004-09-30 Georgy Yunaev
* libircclient 0.4 released
* exported an irc_is_connected method.
* fixed error output in examples.
* fixed several errors in Win32 build (there were no multithread support)
* add a Win32 dsp/dsw to build the library from VC6/7
* add a .dsp for an example.
2004-09-14 Georgy Yunaev
* libircclient 0.3 released
* Fix CTCP time bug.
* Added working Win32 Visual Studio build, and libs.
* Added ircmud example, which allows people to play MUD through IRC client.
* Some stuff rewritten in more portable way.
2004-09-13 Georgy Yunaev
* Fix solaris x86/sparc compilation.
2004-09-12 Georgy Yunaev
* libircclient 0.2 released
* select() timeout decreased to 0.25sec (was 1 sec). The reason: when
the output buffer is empty, and server doesn't send anything, but a
command was asynchronously added, it will be processed only after
select() timeout.
* Fixed bug in DCC sessions - all DCC sessions requested by bots were
terminated in 60 secs with TIMEOUT error.
* Add DCC error description in irctest example.
2004-09-08 Georgy Yunaev
* libircclient 0.1 released

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,482 @@
GNU LIBRARY GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1991 Free Software Foundation, Inc.
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
[This is the first released version of the library GPL. It is
numbered 2 because it goes with version 2 of the ordinary GPL.]
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
Licenses are intended to guarantee your freedom to share and change
free software--to make sure the software is free for all its users.
This license, the Library General Public License, applies to some
specially designated Free Software Foundation software, and to any
other libraries whose authors decide to use it. You can use it for
your libraries, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if
you distribute copies of the library, or if you modify it.
For example, if you distribute copies of the library, whether gratis
or for a fee, you must give the recipients all the rights that we gave
you. You must make sure that they, too, receive or can get the source
code. If you link a program with the library, you must provide
complete object files to the recipients so that they can relink them
with the library, after making changes to the library and recompiling
it. And you must show them these terms so they know their rights.
Our method of protecting your rights has two steps: (1) copyright
the library, and (2) offer you this license which gives you legal
permission to copy, distribute and/or modify the library.
Also, for each distributor's protection, we want to make certain
that everyone understands that there is no warranty for this free
library. If the library is modified by someone else and passed on, we
want its recipients to know that what they have is not the original
version, so that any problems introduced by others will not reflect on
the original authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that companies distributing free
software will individually obtain patent licenses, thus in effect
transforming the program into proprietary software. To prevent this,
we have made it clear that any patent must be licensed for everyone's
free use or not licensed at all.
Most GNU software, including some libraries, is covered by the ordinary
GNU General Public License, which was designed for utility programs. This
license, the GNU Library General Public License, applies to certain
designated libraries. This license is quite different from the ordinary
one; be sure to read it in full, and don't assume that anything in it is
the same as in the ordinary license.
The reason we have a separate public license for some libraries is that
they blur the distinction we usually make between modifying or adding to a
program and simply using it. Linking a program with a library, without
changing the library, is in some sense simply using the library, and is
analogous to running a utility program or application program. However, in
a textual and legal sense, the linked executable is a combined work, a
derivative of the original library, and the ordinary General Public License
treats it as such.
Because of this blurred distinction, using the ordinary General
Public License for libraries did not effectively promote software
sharing, because most developers did not use the libraries. We
concluded that weaker conditions might promote sharing better.
However, unrestricted linking of non-free programs would deprive the
users of those programs of all benefit from the free status of the
libraries themselves. This Library General Public License is intended to
permit developers of non-free programs to use free libraries, while
preserving your freedom as a user of such programs to change the free
libraries that are incorporated in them. (We have not seen how to achieve
this as regards changes in header files, but we have achieved it as regards
changes in the actual functions of the Library.) The hope is that this
will lead to faster development of free libraries.
The precise terms and conditions for copying, distribution and
modification follow. Pay close attention to the difference between a
"work based on the library" and a "work that uses the library". The
former contains code derived from the library, while the latter only
works together with the library.
Note that it is possible for a library to be covered by the ordinary
General Public License rather than by this special one.
GNU LIBRARY GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License Agreement applies to any software library which
contains a notice placed by the copyright holder or other authorized
party saying it may be distributed under the terms of this Library
General Public License (also called "this License"). Each licensee is
addressed as "you".
A "library" means a collection of software functions and/or data
prepared so as to be conveniently linked with application programs
(which use some of those functions and data) to form executables.
The "Library", below, refers to any such software library or work
which has been distributed under these terms. A "work based on the
Library" means either the Library or any derivative work under
copyright law: that is to say, a work containing the Library or a
portion of it, either verbatim or with modifications and/or translated
straightforwardly into another language. (Hereinafter, translation is
included without limitation in the term "modification".)
"Source code" for a work means the preferred form of the work for
making modifications to it. For a library, complete source code means
all the source code for all modules it contains, plus any associated
interface definition files, plus the scripts used to control compilation
and installation of the library.
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running a program using the Library is not restricted, and output from
such a program is covered only if its contents constitute a work based
on the Library (independent of the use of the Library in a tool for
writing it). Whether that is true depends on what the Library does
and what the program that uses the Library does.
1. You may copy and distribute verbatim copies of the Library's
complete source code as you receive it, in any medium, provided that
you conspicuously and appropriately publish on each copy an
appropriate copyright notice and disclaimer of warranty; keep intact
all the notices that refer to this License and to the absence of any
warranty; and distribute a copy of this License along with the
Library.
You may charge a fee for the physical act of transferring a copy,
and you may at your option offer warranty protection in exchange for a
fee.
2. You may modify your copy or copies of the Library or any portion
of it, thus forming a work based on the Library, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) The modified work must itself be a software library.
b) You must cause the files modified to carry prominent notices
stating that you changed the files and the date of any change.
c) You must cause the whole of the work to be licensed at no
charge to all third parties under the terms of this License.
d) If a facility in the modified Library refers to a function or a
table of data to be supplied by an application program that uses
the facility, other than as an argument passed when the facility
is invoked, then you must make a good faith effort to ensure that,
in the event an application does not supply such function or
table, the facility still operates, and performs whatever part of
its purpose remains meaningful.
(For example, a function in a library to compute square roots has
a purpose that is entirely well-defined independent of the
application. Therefore, Subsection 2d requires that any
application-supplied function or table used by this function must
be optional: if the application does not supply it, the square
root function must still compute square roots.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Library,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Library, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote
it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Library.
In addition, mere aggregation of another work not based on the Library
with the Library (or with a work based on the Library) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may opt to apply the terms of the ordinary GNU General Public
License instead of this License to a given copy of the Library. To do
this, you must alter all the notices that refer to this License, so
that they refer to the ordinary GNU General Public License, version 2,
instead of to this License. (If a newer version than version 2 of the
ordinary GNU General Public License has appeared, then you can specify
that version instead if you wish.) Do not make any other change in
these notices.
Once this change is made in a given copy, it is irreversible for
that copy, so the ordinary GNU General Public License applies to all
subsequent copies and derivative works made from that copy.
This option is useful when you wish to copy part of the code of
the Library into a program that is not a library.
4. You may copy and distribute the Library (or a portion or
derivative of it, under Section 2) in object code or executable form
under the terms of Sections 1 and 2 above provided that you accompany
it with the complete corresponding machine-readable source code, which
must be distributed under the terms of Sections 1 and 2 above on a
medium customarily used for software interchange.
If distribution of object code is made by offering access to copy
from a designated place, then offering equivalent access to copy the
source code from the same place satisfies the requirement to
distribute the source code, even though third parties are not
compelled to copy the source along with the object code.
5. A program that contains no derivative of any portion of the
Library, but is designed to work with the Library by being compiled or
linked with it, is called a "work that uses the Library". Such a
work, in isolation, is not a derivative work of the Library, and
therefore falls outside the scope of this License.
However, linking a "work that uses the Library" with the Library
creates an executable that is a derivative of the Library (because it
contains portions of the Library), rather than a "work that uses the
library". The executable is therefore covered by this License.
Section 6 states terms for distribution of such executables.
When a "work that uses the Library" uses material from a header file
that is part of the Library, the object code for the work may be a
derivative work of the Library even though the source code is not.
Whether this is true is especially significant if the work can be
linked without the Library, or if the work is itself a library. The
threshold for this to be true is not precisely defined by law.
If such an object file uses only numerical parameters, data
structure layouts and accessors, and small macros and small inline
functions (ten lines or less in length), then the use of the object
file is unrestricted, regardless of whether it is legally a derivative
work. (Executables containing this object code plus portions of the
Library will still fall under Section 6.)
Otherwise, if the work is a derivative of the Library, you may
distribute the object code for the work under the terms of Section 6.
Any executables containing that work also fall under Section 6,
whether or not they are linked directly with the Library itself.
6. As an exception to the Sections above, you may also compile or
link a "work that uses the Library" with the Library to produce a
work containing portions of the Library, and distribute that work
under terms of your choice, provided that the terms permit
modification of the work for the customer's own use and reverse
engineering for debugging such modifications.
You must give prominent notice with each copy of the work that the
Library is used in it and that the Library and its use are covered by
this License. You must supply a copy of this License. If the work
during execution displays copyright notices, you must include the
copyright notice for the Library among them, as well as a reference
directing the user to the copy of this License. Also, you must do one
of these things:
a) Accompany the work with the complete corresponding
machine-readable source code for the Library including whatever
changes were used in the work (which must be distributed under
Sections 1 and 2 above); and, if the work is an executable linked
with the Library, with the complete machine-readable "work that
uses the Library", as object code and/or source code, so that the
user can modify the Library and then relink to produce a modified
executable containing the modified Library. (It is understood
that the user who changes the contents of definitions files in the
Library will not necessarily be able to recompile the application
to use the modified definitions.)
b) Accompany the work with a written offer, valid for at
least three years, to give the same user the materials
specified in Subsection 6a, above, for a charge no more
than the cost of performing this distribution.
c) If distribution of the work is made by offering access to copy
from a designated place, offer equivalent access to copy the above
specified materials from the same place.
d) Verify that the user has already received a copy of these
materials or that you have already sent this user a copy.
For an executable, the required form of the "work that uses the
Library" must include any data and utility programs needed for
reproducing the executable from it. However, as a special exception,
the source code distributed need not include anything that is normally
distributed (in either source or binary form) with the major
components (compiler, kernel, and so on) of the operating system on
which the executable runs, unless that component itself accompanies
the executable.
It may happen that this requirement contradicts the license
restrictions of other proprietary libraries that do not normally
accompany the operating system. Such a contradiction means you cannot
use both them and the Library together in an executable that you
distribute.
7. You may place library facilities that are a work based on the
Library side-by-side in a single library together with other library
facilities not covered by this License, and distribute such a combined
library, provided that the separate distribution of the work based on
the Library and of the other library facilities is otherwise
permitted, and provided that you do these two things:
a) Accompany the combined library with a copy of the same work
based on the Library, uncombined with any other library
facilities. This must be distributed under the terms of the
Sections above.
b) Give prominent notice with the combined library of the fact
that part of it is a work based on the Library, and explaining
where to find the accompanying uncombined form of the same work.
8. You may not copy, modify, sublicense, link with, or distribute
the Library except as expressly provided under this License. Any
attempt otherwise to copy, modify, sublicense, link with, or
distribute the Library is void, and will automatically terminate your
rights under this License. However, parties who have received copies,
or rights, from you under this License will not have their licenses
terminated so long as such parties remain in full compliance.
9. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Library or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Library (or any work based on the
Library), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Library or works based on it.
10. Each time you redistribute the Library (or any work based on the
Library), the recipient automatically receives a license from the
original licensor to copy, distribute, link with or modify the Library
subject to these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
11. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Library at all. For example, if a patent
license would not permit royalty-free redistribution of the Library by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Library.
If any portion of this section is held invalid or unenforceable under any
particular circumstance, the balance of the section is intended to apply,
and the section as a whole is intended to apply in other circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
12. If the distribution and/or use of the Library is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Library under this License may add
an explicit geographical distribution limitation excluding those countries,
so that distribution is permitted only in or among countries not thus
excluded. In such case, this License incorporates the limitation as if
written in the body of this License.
13. The Free Software Foundation may publish revised and/or new
versions of the Library General Public License from time to time.
Such new versions will be similar in spirit to the present version,
but may differ in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the Library
specifies a version number of this License which applies to it and
"any later version", you have the option of following the terms and
conditions either of that version or of any later version published by
the Free Software Foundation. If the Library does not specify a
license version number, you may choose any version ever published by
the Free Software Foundation.
14. If you wish to incorporate parts of the Library into other free
programs whose distribution conditions are incompatible with these,
write to the author to ask for permission. For software which is
copyrighted by the Free Software Foundation, write to the Free
Software Foundation; we sometimes make exceptions for this. Our
decision will be guided by the two goals of preserving the free status
of all derivatives of our free software and of promoting the sharing
and reuse of software generally.
NO WARRANTY
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES.
END OF TERMS AND CONDITIONS
Appendix: How to Apply These Terms to Your New Libraries
If you develop a new library, and you want it to be of the greatest
possible use to the public, we recommend making it free software that
everyone can redistribute and change. You can do so by permitting
redistribution under these terms (or, alternatively, under the terms of the
ordinary General Public License).
To apply these terms, attach the following notices to the library. It is
safest to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least the
"copyright" line and a pointer to where the full notice is found.
<one line to give the library's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
MA 02111-1307, USA
Also add information on how to contact you by electronic and paper mail.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the library, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the
library `Frob' (a library for tweaking knobs) written by James Random Hacker.
<signature of Ty Coon>, 1 April 1990
Ty Coon, President of Vice
That's all there is to it!

View File

@ -0,0 +1,26 @@
# $Id: Makefile 84 2009-01-10 01:37:29Z chromerium $
SUBDIRS = src examples
all:
for subdir in $(SUBDIRS); do \
$(MAKE) -C $$subdir || exit 1; \
done
clean:
-for subdir in $(SUBDIRS); do \
$(MAKE) -C $$subdir clean || exit 1; \
done
-rm -f core
distclean:
-for subdir in $(SUBDIRS); do \
$(MAKE) -C $$subdir distclean || exit 1; \
done
-rm -f include/config.h config.cache config.status config.log core
distro: distclean
(cd .. && tar zcf libircclient-1.2.tar.gz libircclient-1.2)
install: all
-cd src && make install

View File

@ -0,0 +1,44 @@
# You must have mingw installed.
BUILD=build/
SRCDIR=$(BUILD)/source
LIBDIR=$(BUILD)/lib
OBJS=src/libircclient.obj
all: prep static dynamic package-win32 package-linux
prep:
mkdir -p $(LIBDIR)
$(OBJS) : src/colors.c src/dcc.c src/errors.c src/libircclient.c src/portable.c src/sockets.c src/utils.c Makefile.mingw
src/libircclient.obj: src/libircclient.c
i586-mingw32msvc-gcc -Iinclude -O2 -s -Isrc -DWIN32 -c -o src/libircclient.obj src/libircclient.c
static: $(OBJS)
i586-mingw32msvc-ar cr $(LIBDIR)/libircclient-static.lib $(OBJS)
i586-mingw32msvc-ranlib $(LIBDIR)/libircclient-static.lib
dynamic: $(OBJS)
i586-mingw32msvc-gcc -s -shared $(OBJS) src/libircclient.def -o $(LIBDIR)/libircclient.dll -Wl,-out-implib,$(LIBDIR)/libircclient.lib -lkernel32 -lwsock32
docs:
doxygen Doxyfile
package-win32:
mkdir -p $(BUILD)/doc
mkdir -p $(BUILD)/include
mkdir -p $(BUILD)/examples
cp include/libircclient.h include/libirc_errors.h include/libirc_events.h $(BUILD)/include/
cp include/libircclient.h include/libirc_errors.h include/libirc_events.h $(BUILD)/include/
cp examples/*.cpp examples/*.c $(BUILD)/examples/
cp src/win32/spammer.dsp $(BUILD)/examples/
cp doc/html/* $(BUILD)/doc/
rm -f libircclient-win32.zip
(cd $(BUILD) && zip -r ../libircclient-win32.zip .)
package-linux:
mkdir -p $(SRCDIR)
rm -rf $(SRCDIR)/libircclient
svn export . $(SRCDIR)/libircclient
(cd $(SRCDIR) && tar zcf ../../libircclient.tar.gz libircclient)

View File

@ -0,0 +1 @@
See doc/html/index.html

View File

@ -0,0 +1,4 @@
I'd like to thank those people, who greatly helped to develop libircclient:
- olifozzy (olifozzy@users.sourceforge.net) for great bug reports.
- Lothar May for adding and testing IPv6 support.

View File

@ -0,0 +1,34 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>libircclient: Data Structures</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.7.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li class="current"><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li class="current"><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li><a href="functions.html"><span>Data&nbsp;Fields</span></a></li>
</ul>
</div>
</div>
<div class="contents">
<h1>Data Structures</h1>Here are the data structures with brief descriptions:<table>
<tr><td class="indexkey"><a class="el" href="structirc__callbacks__t.html">irc_callbacks_t</a></td><td class="indexvalue">Event callbacks structure </td></tr>
</table>
</div>
<hr size="1"><address style="text-align: right;"><small>Generated on Sat Jan 10 18:19:35 2009 for libircclient by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.7.1 </small></address>
</body>
</html>

View File

@ -0,0 +1,35 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>libircclient: Alphabetical List</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.7.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li class="current"><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li><a href="functions.html"><span>Data&nbsp;Fields</span></a></li>
</ul>
</div>
</div>
<div class="contents">
<h1>Data Structure Index</h1><p><div class="qindex"><a class="qindex" href="#letter_I">I</a></div><p>
<table align="center" width="95%" border="0" cellspacing="0" cellpadding="0">
<tr><td><a name="letter_I"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&nbsp;&nbsp;I&nbsp;&nbsp;</div></td></tr></table>
</td><td><a class="el" href="structirc__callbacks__t.html">irc_callbacks_t</a>&nbsp;&nbsp;&nbsp;</td></tr></table><p><div class="qindex"><a class="qindex" href="#letter_I">I</a></div><p>
</div>
<hr size="1"><address style="text-align: right;"><small>Generated on Sat Jan 10 18:19:35 2009 for libircclient by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.7.1 </small></address>
</body>
</html>

View File

@ -0,0 +1,441 @@
body, table, div, p, dl {
font-family: Lucida Grande, Verdana, Geneva, Arial, sans-serif;
font-size: 12px;
}
/* @group Heading Levels */
h1 {
text-align: center;
font-size: 150%;
}
h2 {
font-size: 120%;
}
h3 {
font-size: 100%;
}
/* @end */
caption {
font-weight: bold;
}
div.qindex, div.navpath, div.navtab{
background-color: #e8eef2;
border: 1px solid #84b0c7;
text-align: center;
margin: 2px;
padding: 2px;
}
div.qindex, div.navpath {
width: 100%;
line-height: 140%;
}
div.navtab {
margin-right: 15px;
}
/* @group Link Styling */
a {
color: #153788;
font-weight: normal;
text-decoration: none;
}
.contents a:visited {
color: #1b77c5;
}
a:hover {
text-decoration: underline;
}
a.qindex {
font-weight: bold;
}
a.qindexHL {
font-weight: bold;
background-color: #6666cc;
color: #ffffff;
border: 1px double #9295C2;
}
a.el {
font-weight: bold;
}
a.elRef {
}
a.code {
}
a.codeRef {
}
/* @end */
dl.el {
margin-left: -1cm;
}
.fragment {
font-family: monospace, fixed;
font-size: 105%;
}
pre.fragment {
border: 1px solid #CCCCCC;
background-color: #f5f5f5;
padding: 4px 6px;
margin: 4px 8px 4px 2px;
}
div.ah {
background-color: black;
font-weight: bold;
color: #ffffff;
margin-bottom: 3px;
margin-top: 3px
}
div.groupHeader {
margin-left: 16px;
margin-top: 12px;
margin-bottom: 6px;
font-weight: bold;
}
div.groupText {
margin-left: 16px;
font-style: italic;
}
body {
background: white;
color: black;
margin-right: 20px;
margin-left: 20px;
}
td.indexkey {
background-color: #e8eef2;
font-weight: bold;
border: 1px solid #CCCCCC;
margin: 2px 0px 2px 0;
padding: 2px 10px;
}
td.indexvalue {
background-color: #e8eef2;
border: 1px solid #CCCCCC;
padding: 2px 10px;
margin: 2px 0px;
}
tr.memlist {
background-color: #f0f0f0;
}
p.formulaDsp {
text-align: center;
}
img.formulaDsp {
}
img.formulaInl {
vertical-align: middle;
}
/* @group Code Colorization */
span.keyword {
color: #008000
}
span.keywordtype {
color: #604020
}
span.keywordflow {
color: #e08000
}
span.comment {
color: #800000
}
span.preprocessor {
color: #806020
}
span.stringliteral {
color: #002080
}
span.charliteral {
color: #008080
}
span.vhdldigit {
color: #ff00ff
}
span.vhdlchar {
color: #000000
}
span.vhdlkeyword {
color: #700070
}
span.vhdllogic {
color: #ff0000
}
/* @end */
.search {
color: #003399;
font-weight: bold;
}
form.search {
margin-bottom: 0px;
margin-top: 0px;
}
input.search {
font-size: 75%;
color: #000080;
font-weight: normal;
background-color: #e8eef2;
}
td.tiny {
font-size: 75%;
}
.dirtab {
padding: 4px;
border-collapse: collapse;
border: 1px solid #84b0c7;
}
th.dirtab {
background: #e8eef2;
font-weight: bold;
}
hr {
height: 0;
border: none;
border-top: 1px solid #666;
}
/* @group Member Descriptions */
.mdescLeft, .mdescRight,
.memItemLeft, .memItemRight,
.memTemplItemLeft, .memTemplItemRight, .memTemplParams {
background-color: #FAFAFA;
border: none;
margin: 4px;
padding: 1px 0 0 8px;
}
.mdescLeft, .mdescRight {
padding: 0px 8px 4px 8px;
color: #555;
}
.memItemLeft, .memItemRight, .memTemplParams {
border-top: 1px solid #ccc;
}
.memTemplParams {
color: #606060;
}
/* @end */
/* @group Member Details */
/* Styles for detailed member documentation */
.memtemplate {
font-size: 80%;
color: #606060;
font-weight: normal;
margin-left: 3px;
}
.memnav {
background-color: #e8eef2;
border: 1px solid #84b0c7;
text-align: center;
margin: 2px;
margin-right: 15px;
padding: 2px;
}
.memitem {
padding: 0;
}
.memname {
white-space: nowrap;
font-weight: bold;
}
.memproto, .memdoc {
border: 1px solid #84b0c7;
}
.memproto {
padding: 0;
background-color: #d5e1e8;
font-weight: bold;
-webkit-border-top-left-radius: 8px;
-webkit-border-top-right-radius: 8px;
-moz-border-radius-topleft: 8px;
-moz-border-radius-topright: 8px;
}
.memdoc {
padding: 2px 5px;
background-color: #eef3f5;
border-top-width: 0;
-webkit-border-bottom-left-radius: 8px;
-webkit-border-bottom-right-radius: 8px;
-moz-border-radius-bottomleft: 8px;
-moz-border-radius-bottomright: 8px;
}
.memdoc p, .memdoc dl, .memdoc ul {
margin: 6px 0;
}
.paramkey {
text-align: right;
}
.paramtype {
white-space: nowrap;
}
.paramname {
color: #602020;
white-space: nowrap;
}
.paramname em {
font-style: normal;
}
/* @end */
/* @group Directory (tree) */
/* for the tree view */
.ftvtree {
font-family: sans-serif;
margin: 0.5em;
}
/* these are for tree view when used as main index */
.directory {
font-size: 9pt;
font-weight: bold;
}
.directory h3 {
margin: 0px;
margin-top: 1em;
font-size: 11pt;
}
/*
The following two styles can be used to replace the root node title
with an image of your choice. Simply uncomment the next two styles,
specify the name of your image and be sure to set 'height' to the
proper pixel height of your image.
*/
/*
.directory h3.swap {
height: 61px;
background-repeat: no-repeat;
background-image: url("yourimage.gif");
}
.directory h3.swap span {
display: none;
}
*/
.directory > h3 {
margin-top: 0;
}
.directory p {
margin: 0px;
white-space: nowrap;
}
.directory div {
display: none;
margin: 0px;
}
.directory img {
vertical-align: -30%;
}
/* these are for tree view when not used as main index */
.directory-alt {
font-size: 100%;
font-weight: bold;
}
.directory-alt h3 {
margin: 0px;
margin-top: 1em;
font-size: 11pt;
}
.directory-alt > h3 {
margin-top: 0;
}
.directory-alt p {
margin: 0px;
white-space: nowrap;
}
.directory-alt div {
display: none;
margin: 0px;
}
.directory-alt img {
vertical-align: -30%;
}
/* @end */
address {
font-style: normal;
color: #333;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -0,0 +1,40 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>libircclient: File Index</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.7.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li class="current"><a href="files.html"><span>File&nbsp;List</span></a></li>
<li><a href="globals.html"><span>Globals</span></a></li>
</ul>
</div>
</div>
<div class="contents">
<h1>File List</h1>Here is a list of all documented files with brief descriptions:<table>
<tr><td class="indexkey"><a class="el" href="libirc__doc_8h.html">libirc_doc.h</a></td><td class="indexvalue">This file contains Doxygen modules </td></tr>
<tr><td class="indexkey"><a class="el" href="libirc__doc__faq_8h.html">libirc_doc_faq.h</a></td><td class="indexvalue">This file contains libircclient FAQ </td></tr>
<tr><td class="indexkey"><a class="el" href="libirc__errors_8h.html">libirc_errors.h</a></td><td class="indexvalue">This file defines error codes generated by libircclient </td></tr>
<tr><td class="indexkey"><a class="el" href="libirc__events_8h.html">libirc_events.h</a></td><td class="indexvalue">Describes event callbacks generated by libircclient </td></tr>
<tr><td class="indexkey"><a class="el" href="libirc__options_8h.html">libirc_options.h</a></td><td class="indexvalue">This file defines the options used in irc_session_options() </td></tr>
<tr><td class="indexkey"><a class="el" href="libirc__rfcnumeric_8h.html">libirc_rfcnumeric.h</a></td><td class="indexvalue">This file defines RFC numeric reply codes, which should be used in event_numeric callback. Every code also has a comment regarding its arguments </td></tr>
<tr><td class="indexkey"><a class="el" href="libircclient_8h.html">libircclient.h</a></td><td class="indexvalue">This file defines all prototypes and functions to use libircclient </td></tr>
</table>
</div>
<hr size="1"><address style="text-align: right;"><small>Generated on Sat Jan 10 18:19:35 2009 for libircclient by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.7.1 </small></address>
</body>
</html>

View File

@ -0,0 +1,83 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>libircclient: Data Fields</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.7.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li class="current"><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li class="current"><a href="functions.html"><span>Data&nbsp;Fields</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li class="current"><a href="functions.html"><span>All</span></a></li>
<li><a href="functions_vars.html"><span>Variables</span></a></li>
</ul>
</div>
</div>
<div class="contents">
Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:
<p>
<ul>
<li>event_channel
: <a class="el" href="structirc__callbacks__t.html#87d4401073ce8dba9a43fcbcaa20d341">irc_callbacks_t</a>
<li>event_channel_notice
: <a class="el" href="structirc__callbacks__t.html#ce284026a0e082bcdc13a6dae26dd90b">irc_callbacks_t</a>
<li>event_connect
: <a class="el" href="structirc__callbacks__t.html#7294e75ca74ba6dc2b5c18ef8e7795a2">irc_callbacks_t</a>
<li>event_ctcp_action
: <a class="el" href="structirc__callbacks__t.html#522d1cf8dc01b66efc03d31e3787e11f">irc_callbacks_t</a>
<li>event_ctcp_rep
: <a class="el" href="structirc__callbacks__t.html#1e967e7534502bce5434dd4d4415bdd8">irc_callbacks_t</a>
<li>event_ctcp_req
: <a class="el" href="structirc__callbacks__t.html#5f5d386a4df0d1334ffb96b3c406355f">irc_callbacks_t</a>
<li>event_dcc_chat_req
: <a class="el" href="structirc__callbacks__t.html#fbaf019778a64b544093ee29da5b3c81">irc_callbacks_t</a>
<li>event_dcc_send_req
: <a class="el" href="structirc__callbacks__t.html#2ac9d08921faee2472ed16d41799887d">irc_callbacks_t</a>
<li>event_invite
: <a class="el" href="structirc__callbacks__t.html#e5f3325ab13c3a36ed84435e3bcf7b61">irc_callbacks_t</a>
<li>event_join
: <a class="el" href="structirc__callbacks__t.html#8f24c0e2b05425c2308a0106dbaaffec">irc_callbacks_t</a>
<li>event_kick
: <a class="el" href="structirc__callbacks__t.html#1a8194bfdbf2622e9384fbd1ac1a67d7">irc_callbacks_t</a>
<li>event_mode
: <a class="el" href="structirc__callbacks__t.html#3d7add398f78ad0a3c5d96133411d60a">irc_callbacks_t</a>
<li>event_nick
: <a class="el" href="structirc__callbacks__t.html#6151296f8a888132bd25d7db67ff70a5">irc_callbacks_t</a>
<li>event_notice
: <a class="el" href="structirc__callbacks__t.html#92a5b22ba900f06fa04ea9e79462ffc6">irc_callbacks_t</a>
<li>event_numeric
: <a class="el" href="structirc__callbacks__t.html#85951d45acff22aea37a822bb9c7aef7">irc_callbacks_t</a>
<li>event_part
: <a class="el" href="structirc__callbacks__t.html#0076faaabcf638dba3f08c2048956621">irc_callbacks_t</a>
<li>event_privmsg
: <a class="el" href="structirc__callbacks__t.html#f0fe4e42f9d675f0d844fc3c58b2dc5d">irc_callbacks_t</a>
<li>event_quit
: <a class="el" href="structirc__callbacks__t.html#a4a728c3926384c3781aa65a18ebeb7a">irc_callbacks_t</a>
<li>event_topic
: <a class="el" href="structirc__callbacks__t.html#8a5ab3ffc89e19d5748c58bb675436b5">irc_callbacks_t</a>
<li>event_umode
: <a class="el" href="structirc__callbacks__t.html#a92693d9acb2013f6f4b54301ee54d61">irc_callbacks_t</a>
<li>event_unknown
: <a class="el" href="structirc__callbacks__t.html#765b4f0a622cedf2c26c1a615414a3a4">irc_callbacks_t</a>
</ul>
</div>
<hr size="1"><address style="text-align: right;"><small>Generated on Sat Jan 10 18:19:35 2009 for libircclient by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.7.1 </small></address>
</body>
</html>

View File

@ -0,0 +1,83 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>libircclient: Data Fields - Variables</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.7.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li class="current"><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li class="current"><a href="functions.html"><span>Data&nbsp;Fields</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="functions.html"><span>All</span></a></li>
<li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
</ul>
</div>
</div>
<div class="contents">
&nbsp;
<p>
<ul>
<li>event_channel
: <a class="el" href="structirc__callbacks__t.html#87d4401073ce8dba9a43fcbcaa20d341">irc_callbacks_t</a>
<li>event_channel_notice
: <a class="el" href="structirc__callbacks__t.html#ce284026a0e082bcdc13a6dae26dd90b">irc_callbacks_t</a>
<li>event_connect
: <a class="el" href="structirc__callbacks__t.html#7294e75ca74ba6dc2b5c18ef8e7795a2">irc_callbacks_t</a>
<li>event_ctcp_action
: <a class="el" href="structirc__callbacks__t.html#522d1cf8dc01b66efc03d31e3787e11f">irc_callbacks_t</a>
<li>event_ctcp_rep
: <a class="el" href="structirc__callbacks__t.html#1e967e7534502bce5434dd4d4415bdd8">irc_callbacks_t</a>
<li>event_ctcp_req
: <a class="el" href="structirc__callbacks__t.html#5f5d386a4df0d1334ffb96b3c406355f">irc_callbacks_t</a>
<li>event_dcc_chat_req
: <a class="el" href="structirc__callbacks__t.html#fbaf019778a64b544093ee29da5b3c81">irc_callbacks_t</a>
<li>event_dcc_send_req
: <a class="el" href="structirc__callbacks__t.html#2ac9d08921faee2472ed16d41799887d">irc_callbacks_t</a>
<li>event_invite
: <a class="el" href="structirc__callbacks__t.html#e5f3325ab13c3a36ed84435e3bcf7b61">irc_callbacks_t</a>
<li>event_join
: <a class="el" href="structirc__callbacks__t.html#8f24c0e2b05425c2308a0106dbaaffec">irc_callbacks_t</a>
<li>event_kick
: <a class="el" href="structirc__callbacks__t.html#1a8194bfdbf2622e9384fbd1ac1a67d7">irc_callbacks_t</a>
<li>event_mode
: <a class="el" href="structirc__callbacks__t.html#3d7add398f78ad0a3c5d96133411d60a">irc_callbacks_t</a>
<li>event_nick
: <a class="el" href="structirc__callbacks__t.html#6151296f8a888132bd25d7db67ff70a5">irc_callbacks_t</a>
<li>event_notice
: <a class="el" href="structirc__callbacks__t.html#92a5b22ba900f06fa04ea9e79462ffc6">irc_callbacks_t</a>
<li>event_numeric
: <a class="el" href="structirc__callbacks__t.html#85951d45acff22aea37a822bb9c7aef7">irc_callbacks_t</a>
<li>event_part
: <a class="el" href="structirc__callbacks__t.html#0076faaabcf638dba3f08c2048956621">irc_callbacks_t</a>
<li>event_privmsg
: <a class="el" href="structirc__callbacks__t.html#f0fe4e42f9d675f0d844fc3c58b2dc5d">irc_callbacks_t</a>
<li>event_quit
: <a class="el" href="structirc__callbacks__t.html#a4a728c3926384c3781aa65a18ebeb7a">irc_callbacks_t</a>
<li>event_topic
: <a class="el" href="structirc__callbacks__t.html#8a5ab3ffc89e19d5748c58bb675436b5">irc_callbacks_t</a>
<li>event_umode
: <a class="el" href="structirc__callbacks__t.html#a92693d9acb2013f6f4b54301ee54d61">irc_callbacks_t</a>
<li>event_unknown
: <a class="el" href="structirc__callbacks__t.html#765b4f0a622cedf2c26c1a615414a3a4">irc_callbacks_t</a>
</ul>
</div>
<hr size="1"><address style="text-align: right;"><small>Generated on Sat Jan 10 18:19:35 2009 for libircclient by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.7.1 </small></address>
</body>
</html>

View File

@ -0,0 +1,155 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>libircclient: Data Fields</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.7.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="files.html"><span>File&nbsp;List</span></a></li>
<li class="current"><a href="globals.html"><span>Globals</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li class="current"><a href="globals.html"><span>All</span></a></li>
<li><a href="globals_func.html"><span>Functions</span></a></li>
<li><a href="globals_type.html"><span>Typedefs</span></a></li>
<li><a href="globals_defs.html"><span>Defines</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li class="current"><a href="globals.html#index_i"><span>i</span></a></li>
<li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
</ul>
</div>
</div>
<div class="contents">
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
<p>
<h3><a class="anchor" name="index_i">- i -</a></h3><ul>
<li>irc_add_select_descriptors()
: <a class="el" href="group__running.html#g75d2af4209ad2edbdbff77b0cfcabcab">libircclient.h</a>
<li>irc_cmd_channel_mode()
: <a class="el" href="group__ircmd__ch.html#g63489434dcf78d454389b7744624c1e7">libircclient.h</a>
<li>irc_cmd_ctcp_reply()
: <a class="el" href="group__ctcp.html#g62cba0ecb13b0d602403e77bbe78550e">libircclient.h</a>
<li>irc_cmd_ctcp_request()
: <a class="el" href="group__ctcp.html#gd3eb9e56b5988f157e6f4a9b73145382">libircclient.h</a>
<li>irc_cmd_invite()
: <a class="el" href="group__ircmd__ch.html#g77e2b2c46c8883a7986180f36ca17247">libircclient.h</a>
<li>irc_cmd_join()
: <a class="el" href="group__ircmd__ch.html#g4960c546c2a077e8fb01fc7aa5ae7add">libircclient.h</a>
<li>irc_cmd_kick()
: <a class="el" href="group__ircmd__ch.html#g47a6c7a2b3f96c9fe41e7df82f0dbd7c">libircclient.h</a>
<li>irc_cmd_list()
: <a class="el" href="group__ircmd__ch.html#g1f49929bca3afb8d95b2986dfb480d42">libircclient.h</a>
<li>irc_cmd_me()
: <a class="el" href="group__ircmd__msg.html#g09c7e471bf4062b57df10d31ee275fc5">libircclient.h</a>
<li>irc_cmd_msg()
: <a class="el" href="group__ircmd__msg.html#g8c2ec03f1a9ce7c739e11b64fd088ae5">libircclient.h</a>
<li>irc_cmd_names()
: <a class="el" href="group__ircmd__ch.html#g9b5d3f07ca8a44f0772fc48f677e5bdd">libircclient.h</a>
<li>irc_cmd_nick()
: <a class="el" href="group__ircmd__oth.html#g19ae1ad61caf031e5c2dc950e24b7370">libircclient.h</a>
<li>irc_cmd_notice()
: <a class="el" href="group__ircmd__msg.html#gf537698d7ec582701fa3473a2dd6775f">libircclient.h</a>
<li>irc_cmd_part()
: <a class="el" href="group__ircmd__ch.html#gdb50b9a3a78693266fb0a257b997831b">libircclient.h</a>
<li>irc_cmd_quit()
: <a class="el" href="group__ircmd__oth.html#ga89bd6efb6dacf53f25ca5518a5aa4ee">libircclient.h</a>
<li>irc_cmd_topic()
: <a class="el" href="group__ircmd__ch.html#ge088b8e83e3482875ea3d3f970dbb9a2">libircclient.h</a>
<li>irc_cmd_user_mode()
: <a class="el" href="group__ircmd__oth.html#g71b0c8a534600d2b354be35e28735513">libircclient.h</a>
<li>irc_cmd_whois()
: <a class="el" href="group__ircmd__oth.html#g7cfe0b48a060c5291ef1d59a3ea79b4f">libircclient.h</a>
<li>irc_color_convert_from_mirc()
: <a class="el" href="group__colors.html#gbb894bace7c39c70b5582bcdb4052bea">libircclient.h</a>
<li>irc_color_convert_to_mirc()
: <a class="el" href="group__colors.html#g7a9a3490741e2883695759ba5f4adc1e">libircclient.h</a>
<li>irc_color_strip_from_mirc()
: <a class="el" href="group__colors.html#g2b94751f30cf4cdf444345808fe4ed6c">libircclient.h</a>
<li>irc_connect()
: <a class="el" href="group__conndisc.html#g121b23c9e131da651175ae779e1b6851">libircclient.h</a>
<li>irc_connect6()
: <a class="el" href="group__conndisc.html#g5729f584833d55510ae114c8ac3d8e99">libircclient.h</a>
<li>irc_create_session()
: <a class="el" href="group__initclose.html#gc5dada35ee77795d8bb77b6701853b98">libircclient.h</a>
<li>irc_dcc_accept()
: <a class="el" href="group__dccstuff.html#g43f747d3b2252109f9d811ea8414745b">libircclient.h</a>
<li>irc_dcc_callback_t
: <a class="el" href="group__dccstuff.html#g92d4d3f7866bd8c4f1d6df8f05d939f9">libircclient.h</a>
<li>irc_dcc_chat()
: <a class="el" href="group__dccstuff.html#gd6958aac6d67f595966949d1ec5ae4a0">libircclient.h</a>
<li>irc_dcc_decline()
: <a class="el" href="group__dccstuff.html#g3ff4ca78d346b7acf847cf28a7211bf4">libircclient.h</a>
<li>irc_dcc_destroy()
: <a class="el" href="group__dccstuff.html#g8b8aa3363ee93cc395bc89ac5cc9501c">libircclient.h</a>
<li>irc_dcc_msg()
: <a class="el" href="group__dccstuff.html#gb98b7ea58a36d7649c2dca6c4b3c8a7d">libircclient.h</a>
<li>irc_dcc_sendfile()
: <a class="el" href="group__dccstuff.html#gf9e8a307113cd27d08e082fda6264262">libircclient.h</a>
<li>irc_dcc_session_t
: <a class="el" href="libircclient_8h.html#25dc31f3073d8dffd01f659d19c76e5e">libircclient.h</a>
<li>irc_dcc_t
: <a class="el" href="libircclient_8h.html#4136d52803e88f369d728e1e3b0e70f7">libircclient.h</a>
<li>irc_destroy_session()
: <a class="el" href="group__initclose.html#g30c6cea4f149632d1905b097a3a573f7">libircclient.h</a>
<li>irc_disconnect()
: <a class="el" href="group__conndisc.html#ga5f6dd73d3f0bdecb53f53362e253aab">libircclient.h</a>
<li>irc_errno()
: <a class="el" href="group__errors.html#g3a18336093ee74751244d996bc32247d">libircclient.h</a>
<li>irc_event_callback_t
: <a class="el" href="group__events.html#gc472d3e37df8f172fed3d75e649fac14">libirc_events.h</a>
<li>irc_event_dcc_chat_t
: <a class="el" href="group__events.html#g8c3ddaa55e5ded002b5054f0b926381c">libirc_events.h</a>
<li>irc_event_dcc_send_t
: <a class="el" href="group__events.html#g5f4b1d95f2d6619041f993ba748544cf">libirc_events.h</a>
<li>irc_eventcode_callback_t
: <a class="el" href="group__events.html#gb6000d309e87cfb727dcad0136fcb79f">libirc_events.h</a>
<li>irc_get_ctx()
: <a class="el" href="group__contexts.html#g341a8954613f29c7ff5a92413398ce7d">libircclient.h</a>
<li>irc_get_version()
: <a class="el" href="group__common.html#gebc090ad2392569b1998d7e2354c7bc7">libircclient.h</a>
<li>irc_is_connected()
: <a class="el" href="group__conndisc.html#g90f826583118cb2e34135cb0e9b26cf8">libircclient.h</a>
<li>irc_option_reset()
: <a class="el" href="group__options.html#gf56687ccad2045204ae23f70d2f54860">libircclient.h</a>
<li>irc_option_set()
: <a class="el" href="group__options.html#gc5d81f651f1441690f3f59c3ddccaa48">libircclient.h</a>
<li>irc_process_select_descriptors()
: <a class="el" href="group__running.html#g4526d10056559eac7bd777437d440170">libircclient.h</a>
<li>irc_run()
: <a class="el" href="group__running.html#g112631b75eb9997868d73fede17440d0">libircclient.h</a>
<li>irc_send_raw()
: <a class="el" href="group__ircmd__oth.html#gd69addf9c9e45d888a71d6295429e05c">libircclient.h</a>
<li>irc_session_t
: <a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">libircclient.h</a>
<li>irc_set_ctx()
: <a class="el" href="group__contexts.html#ge0cf439a36aafce4abab8f4cce5ac5ff">libircclient.h</a>
<li>irc_strerror()
: <a class="el" href="group__errors.html#gfdc70ca04626818d2fd9a55da0b90e5f">libircclient.h</a>
<li>irc_target_get_host()
: <a class="el" href="group__nnparse.html#g5929f96c251be831d1de66e6bba6299c">libircclient.h</a>
<li>irc_target_get_nick()
: <a class="el" href="group__nnparse.html#g217df7c7c7dc5e60678dd14e24e41f03">libircclient.h</a>
</ul>
</div>
<hr size="1"><address style="text-align: right;"><small>Generated on Sat Jan 10 18:19:35 2009 for libircclient by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.7.1 </small></address>
</body>
</html>

View File

@ -0,0 +1,357 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>libircclient: Data Fields</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.7.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="files.html"><span>File&nbsp;List</span></a></li>
<li class="current"><a href="globals.html"><span>Globals</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li class="current"><a href="globals.html"><span>All</span></a></li>
<li><a href="globals_func.html"><span>Functions</span></a></li>
<li><a href="globals_type.html"><span>Typedefs</span></a></li>
<li><a href="globals_defs.html"><span>Defines</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="globals.html#index_i"><span>i</span></a></li>
<li class="current"><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
</ul>
</div>
</div>
<div class="contents">
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
<p>
<h3><a class="anchor" name="index_l">- l -</a></h3><ul>
<li>LIBIRC_ERR_ACCEPT
: <a class="el" href="group__errorcodes.html#gabf548a884eaf6f7f72b62be6f5946d4">libirc_errors.h</a>
<li>LIBIRC_ERR_CLOSED
: <a class="el" href="group__errorcodes.html#gf932ba7fb2e7bf4f6ed970b5cb8e715b">libirc_errors.h</a>
<li>LIBIRC_ERR_CONNECT
: <a class="el" href="group__errorcodes.html#ga3a48839adc6e93968e77bf92606ac07">libirc_errors.h</a>
<li>LIBIRC_ERR_INVAL
: <a class="el" href="group__errorcodes.html#g4b8be458368833c2c72d19cccd33ac34">libirc_errors.h</a>
<li>LIBIRC_ERR_MAX
: <a class="el" href="libirc__errors_8h.html#994ba7b13dca6ba4d1461e84e4356efa">libirc_errors.h</a>
<li>LIBIRC_ERR_NODCCSEND
: <a class="el" href="group__errorcodes.html#g7aebc49be2d25f795ef1e0fe8e96f12f">libirc_errors.h</a>
<li>LIBIRC_ERR_NOIPV6
: <a class="el" href="group__errorcodes.html#g5880d5a307f66aaaaf7df7cbf4c165a6">libirc_errors.h</a>
<li>LIBIRC_ERR_NOMEM
: <a class="el" href="group__errorcodes.html#g1ec9f29808aef1acaf8872d45395764b">libirc_errors.h</a>
<li>LIBIRC_ERR_OK
: <a class="el" href="group__errorcodes.html#g7614d0e18de5a72ac8f64a9435a8c856">libirc_errors.h</a>
<li>LIBIRC_ERR_OPENFILE
: <a class="el" href="group__errorcodes.html#gbb77f834415ae0a332f823540a5b3245">libirc_errors.h</a>
<li>LIBIRC_ERR_READ
: <a class="el" href="group__errorcodes.html#ga276fdc66a5e96ab31b86269775ad681">libirc_errors.h</a>
<li>LIBIRC_ERR_RESOLV
: <a class="el" href="group__errorcodes.html#g8603eb7b72065c7bf48e89ed7aab09cd">libirc_errors.h</a>
<li>LIBIRC_ERR_SOCKET
: <a class="el" href="group__errorcodes.html#gf48bc4c473962372807277dfeb6cf070">libirc_errors.h</a>
<li>LIBIRC_ERR_STATE
: <a class="el" href="group__errorcodes.html#g4d4d45b7610aeacd2a142c078a57d38a">libirc_errors.h</a>
<li>LIBIRC_ERR_TERMINATED
: <a class="el" href="group__errorcodes.html#g18e0ddcfe90da17b27e52e273a5ec1f5">libirc_errors.h</a>
<li>LIBIRC_ERR_TIMEOUT
: <a class="el" href="group__errorcodes.html#gcb3673b06a83b11e915bbe53232f2225">libirc_errors.h</a>
<li>LIBIRC_ERR_WRITE
: <a class="el" href="group__errorcodes.html#g68d74be1d70d3a15df8976c186e4563a">libirc_errors.h</a>
<li>LIBIRC_OPTION_DEBUG
: <a class="el" href="group__options.html#geba7a9cf7f7808a61f945a58c6d780f8">libirc_options.h</a>
<li>LIBIRC_OPTION_STRIPNICKS
: <a class="el" href="group__options.html#g0dd67b0a5373a108d86d911fa5741e72">libirc_options.h</a>
<li>LIBIRC_RFC_ERR_ALREADYREGISTRED
: <a class="el" href="group__rfcnumbers.html#g1701898fa06e1935d9305222c65d66a6">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_BADCHANMASK
: <a class="el" href="group__rfcnumbers.html#g6e40a8054eb0a0c0c6882cd97f344853">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_BADCHANNELKEY
: <a class="el" href="group__rfcnumbers.html#g04a2e9664d25bece875e5c207c6a2697">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_BADMASK
: <a class="el" href="group__rfcnumbers.html#g4b1891745acf0880af1d93d1da71c87b">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_BANLISTFULL
: <a class="el" href="group__rfcnumbers.html#g9090b770689a1b8b2bb8bb3e463cb6ea">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_BANNEDFROMCHAN
: <a class="el" href="group__rfcnumbers.html#gc5bf83f758e914ca36d5f379e5819103">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_CANNOTSENDTOCHAN
: <a class="el" href="group__rfcnumbers.html#g3624990fe128d867c11b213228e62df8">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_CANTKILLSERVER
: <a class="el" href="group__rfcnumbers.html#gf8a5c81b0413911e6120af8b6c51cf06">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_CHANNELISFULL
: <a class="el" href="group__rfcnumbers.html#g8644827c4d45e5669a342b1d70a0904e">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_CHANOPRIVSNEEDED
: <a class="el" href="group__rfcnumbers.html#g45e953e4c730a2f091d74430eeac1d57">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_ERRONEUSNICKNAME
: <a class="el" href="group__rfcnumbers.html#g177a2b46f518e603271b3d55ae2f84ab">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_FILEERROR
: <a class="el" href="group__rfcnumbers.html#g6b69683ac06754b38388a0d25e29b4b6">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_INVITEONLYCHAN
: <a class="el" href="group__rfcnumbers.html#gdfa3659a762a5023cd37615a54f70a2e">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_KEYSET
: <a class="el" href="group__rfcnumbers.html#g43267525d047db03b1c8f402cfe549f3">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_NEEDMOREPARAMS
: <a class="el" href="group__rfcnumbers.html#gb3fc9166c154ed2b99c0294f5ce31777">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_NICKCOLLISION
: <a class="el" href="group__rfcnumbers.html#g929657e2facbf0e46a540aa8e7516774">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_NICKNAMEINUSE
: <a class="el" href="group__rfcnumbers.html#g2dabe26bb4ab3b90974a6a645f7d7545">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_NOADMININFO
: <a class="el" href="group__rfcnumbers.html#gaec4021499b205247f9d4c1ee33ba8f1">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_NOCHANMODES
: <a class="el" href="group__rfcnumbers.html#g281b65b85e248598a7ca0cad7fb1fb42">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_NOLOGIN
: <a class="el" href="group__rfcnumbers.html#g82b53ec1f6a19a95c1d7d376a49f3cac">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_NOMOTD
: <a class="el" href="group__rfcnumbers.html#geeb61823055c58ed089c138b7768b899">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_NONICKNAMEGIVEN
: <a class="el" href="group__rfcnumbers.html#gc754b9522b1f4c4376f809d2e3acbee4">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_NOOPERHOST
: <a class="el" href="group__rfcnumbers.html#gbc83a42c94926342d1149f0572c07767">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_NOORIGIN
: <a class="el" href="group__rfcnumbers.html#g5253a98a0673962ecdf9239c42fd3cfc">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_NOPERMFORHOST
: <a class="el" href="group__rfcnumbers.html#g4a62ec37ba0929b54cc3e77be973ecf1">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_NOPRIVILEGES
: <a class="el" href="group__rfcnumbers.html#g6afd77656919ffebf8468b1aa828be00">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_NORECIPIENT
: <a class="el" href="group__rfcnumbers.html#g73d5c17577fddd176f2d89e15b657c1a">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_NOSUCHCHANNEL
: <a class="el" href="group__rfcnumbers.html#g2c0be54b246f18fb20c2c9edbc671649">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_NOSUCHNICK
: <a class="el" href="group__rfcnumbers.html#g28f90d5f34a3056127516c0edc7c511f">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_NOSUCHSERVER
: <a class="el" href="group__rfcnumbers.html#g8108addfd19326f00eacd71c26809348">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_NOSUCHSERVICE
: <a class="el" href="group__rfcnumbers.html#g6ef41b1c7955888d2d608e6b9213039a">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_NOTEXTTOSEND
: <a class="el" href="group__rfcnumbers.html#gc9851022435108cc6074c8cab2311b58">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_NOTONCHANNEL
: <a class="el" href="group__rfcnumbers.html#gb20af2b80994d5c9d7c1e96d88f2e577">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_NOTOPLEVEL
: <a class="el" href="group__rfcnumbers.html#gfcad763cc97b268aa585311350989dca">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_NOTREGISTERED
: <a class="el" href="group__rfcnumbers.html#g787a41ffa63671e56da644fb32be180a">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_PASSWDMISMATCH
: <a class="el" href="group__rfcnumbers.html#gc6f7ea25e5bdd8b1f7a271232ebafcf2">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_RESTRICTED
: <a class="el" href="group__rfcnumbers.html#g0f12c365aee869c60022e1cfbc6c2158">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_SUMMONDISABLED
: <a class="el" href="group__rfcnumbers.html#gd0834a3cc4431206ac130e604c81803f">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_TOOMANYCHANNELS
: <a class="el" href="group__rfcnumbers.html#g784de3929f568ce298c37c42acb4bfef">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_TOOMANYTARGETS
: <a class="el" href="group__rfcnumbers.html#g807eab621113410281fd574de71236ea">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_UMODEUNKNOWNFLAG
: <a class="el" href="group__rfcnumbers.html#g0c3eb9db119a7f1b9c8c9be9e9b82ae1">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_UNAVAILRESOURCE
: <a class="el" href="group__rfcnumbers.html#gc387f0d26f0df419f744e6e0ea6ce005">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_UNIQOPPRIVSNEEDED
: <a class="el" href="group__rfcnumbers.html#ge567a12bbbaa3d2964a4fe43f5b13fa4">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_UNKNOWNCOMMAND
: <a class="el" href="group__rfcnumbers.html#gc9700c81583082d145a5236748efcbad">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_UNKNOWNMODE
: <a class="el" href="group__rfcnumbers.html#g66d80c7acd49ba08f1a14b8775347ed1">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_USERNOTINCHANNEL
: <a class="el" href="group__rfcnumbers.html#g929d5bc041ad99b161b6685aa05e4f64">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_USERONCHANNEL
: <a class="el" href="group__rfcnumbers.html#gaa927136c2fe8a8d4e45b17dfea70303">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_USERSDISABLED
: <a class="el" href="group__rfcnumbers.html#g4560dabc75ada66f19872b372e4e30cd">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_USERSDONTMATCH
: <a class="el" href="group__rfcnumbers.html#g109b90448c6e8f7e2537a5f4f323745b">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_WASNOSUCHNICK
: <a class="el" href="group__rfcnumbers.html#gf36d875f2f4d88a959aaf75978c8c02e">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_WILDTOPLEVEL
: <a class="el" href="group__rfcnumbers.html#g4cf5ceeec3305180731860436650c955">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_YOUREBANNEDCREEP
: <a class="el" href="group__rfcnumbers.html#ge98bc10404f5961bbdf3747c2e509dc3">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_YOUWILLBEBANNED
: <a class="el" href="group__rfcnumbers.html#g1091fd61652ee8f30df898a9091dac88">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_ADMINEMAIL
: <a class="el" href="group__rfcnumbers.html#geb9af936a2d2c03374417d05ade2cdb3">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_ADMINLOC1
: <a class="el" href="group__rfcnumbers.html#gb7499cdf5c8c4f59e0b1364c03e938c8">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_ADMINLOC2
: <a class="el" href="group__rfcnumbers.html#g0e6696d5d4918c9575956f87c78a2c75">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_ADMINME
: <a class="el" href="group__rfcnumbers.html#ge050978abb7478ab656f4b0b610a4e9c">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_AWAY
: <a class="el" href="group__rfcnumbers.html#g54aa2b97df3fc570572e68fc88647143">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_BANLIST
: <a class="el" href="group__rfcnumbers.html#ga188a0d60499bb3546fdc75b07ee5680">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_BOUNCE
: <a class="el" href="group__rfcnumbers.html#g20089bb4db6f4edf6ad9c55b21f79351">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_CHANNELMODEIS
: <a class="el" href="group__rfcnumbers.html#gce33e328528f4ae2e7843478839301e5">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_CREATED
: <a class="el" href="group__rfcnumbers.html#g457848e59212b9c34b195408b3499e36">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_ENDOFBANLIST
: <a class="el" href="group__rfcnumbers.html#g6040ae147ea3044f201f314fec1a1791">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_ENDOFEXCEPTLIST
: <a class="el" href="group__rfcnumbers.html#g2edbebc4a6ebc19a4cf718785f05cdce">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_ENDOFINFO
: <a class="el" href="group__rfcnumbers.html#g3f7aa466f616bc7645c9deed702ecbfd">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_ENDOFINVITELIST
: <a class="el" href="group__rfcnumbers.html#g897411552f08a25005bc424ba1483f27">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_ENDOFLINKS
: <a class="el" href="group__rfcnumbers.html#g3aca62d5fe10d6acdf37ee24f8d9b76d">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_ENDOFMOTD
: <a class="el" href="group__rfcnumbers.html#gceb2ecc1ff91805c62886c945bf3a200">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_ENDOFNAMES
: <a class="el" href="group__rfcnumbers.html#ged45893cd1a15247dc7200d16a224a76">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_ENDOFSTATS
: <a class="el" href="group__rfcnumbers.html#gaa0efa6298a7b86c61e4b1721c857e71">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_ENDOFUSERS
: <a class="el" href="group__rfcnumbers.html#gc6bbc01052466794fe1998e4d9316bff">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_ENDOFWHO
: <a class="el" href="group__rfcnumbers.html#gaad7e5e89e006bdb5c24ff41cf1eda91">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_ENDOFWHOIS
: <a class="el" href="group__rfcnumbers.html#ge8c2ae654f4d2502eeea46cd6116687f">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_ENDOFWHOWAS
: <a class="el" href="group__rfcnumbers.html#g8eb840d1d812efc90a7dbc2e4c5487a6">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_EXCEPTLIST
: <a class="el" href="group__rfcnumbers.html#g5d238f6d71acb8652de17f1e2178ef83">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_INFO
: <a class="el" href="group__rfcnumbers.html#g25e458084627c7c5cc04846128ce7f99">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_INVITELIST
: <a class="el" href="group__rfcnumbers.html#gc7ccfca1aee7957b59043cd14b4c2199">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_INVITING
: <a class="el" href="group__rfcnumbers.html#g5de83e9710137226a986fdc6aece31da">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_ISON
: <a class="el" href="group__rfcnumbers.html#g27bd750af38efdb964ae3f2dea384469">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_LINKS
: <a class="el" href="group__rfcnumbers.html#gbd1f4f6dd81b23d93a8d8670b52ee75c">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_LIST
: <a class="el" href="group__rfcnumbers.html#g7cd68428c26cc9867a1b35a25b4acb64">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_LISTEND
: <a class="el" href="group__rfcnumbers.html#gb986ca08f325c8113fbada41a99c84bf">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_LUSERCHANNELS
: <a class="el" href="group__rfcnumbers.html#gf479e546cbc0060f38f5475f7a1256ef">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_LUSERCLIENT
: <a class="el" href="group__rfcnumbers.html#g150a28b2e4ce27dbdceadbb1143c1a23">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_LUSERME
: <a class="el" href="group__rfcnumbers.html#gca6a0c4e04579223b005f76e9119cee0">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_LUSEROP
: <a class="el" href="group__rfcnumbers.html#g9c401c244142ef0ac85b84d1e06881e0">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_LUSERUNKNOWN
: <a class="el" href="group__rfcnumbers.html#gb398de728cca589e82df42d6e9a08f50">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_MOTD
: <a class="el" href="group__rfcnumbers.html#gd6008de6ef3a06b3817bb42d8d501d67">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_MOTDSTART
: <a class="el" href="group__rfcnumbers.html#g98acf0bf2e6a0fbf654dbaf4e8b7e674">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_MYINFO
: <a class="el" href="group__rfcnumbers.html#g79965ea78224aaea217c27e8bd2ea565">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_NAMREPLY
: <a class="el" href="group__rfcnumbers.html#g7fc1ff023f7824d91d5f5567997f0fd3">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_NOTOPIC
: <a class="el" href="group__rfcnumbers.html#gf467ce06debba2e77db229b14f5bbe38">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_NOUSERS
: <a class="el" href="group__rfcnumbers.html#g08119bd0358f01a771e4d0f0c2aabb32">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_NOWAWAY
: <a class="el" href="group__rfcnumbers.html#g223f4d11b29fa52405ae2c5c92a6f57c">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_REHASHING
: <a class="el" href="group__rfcnumbers.html#g16341382589ad8a0ea33870690a2eacd">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_SERVLIST
: <a class="el" href="group__rfcnumbers.html#gbcb0ebc54eb0885b1d36ed13474783b6">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_SERVLISTEND
: <a class="el" href="group__rfcnumbers.html#gbd19df966082bf87e63ad541b8297385">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_STATSCOMMANDS
: <a class="el" href="group__rfcnumbers.html#gcfc1bd556f14f42907a45df17a15bd71">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_STATSLINKINFO
: <a class="el" href="group__rfcnumbers.html#g9e11276a19249878b2970d9006534783">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_STATSOLINE
: <a class="el" href="group__rfcnumbers.html#gb5aa35b134c37d012d79b5246259a127">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_STATSUPTIME
: <a class="el" href="group__rfcnumbers.html#gb63dde0b78690895bd2d37d0991dc0b9">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_SUMMONING
: <a class="el" href="group__rfcnumbers.html#g1751c0d93a35da59ede9ea222d543c2a">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_TIME
: <a class="el" href="group__rfcnumbers.html#g0326959553f325f18a6b23ddb0847be6">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_TOPIC
: <a class="el" href="group__rfcnumbers.html#g02d7f6f775a11abd3c09bca16d6cdc59">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_TRACECLASS
: <a class="el" href="group__rfcnumbers.html#g6497ecbb3653fbe3a981a9f0d61ef278">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_TRACECONNECTING
: <a class="el" href="group__rfcnumbers.html#gb5334d2fba02850cb8706d3486fcc31e">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_TRACEEND
: <a class="el" href="group__rfcnumbers.html#g3b2d52ed29933fdb22d79ea342fc2f26">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_TRACEHANDSHAKE
: <a class="el" href="group__rfcnumbers.html#g4a427d0bdd9cac2bae6fb651f791fd8f">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_TRACELINK
: <a class="el" href="group__rfcnumbers.html#g0ef1797805c029473397f07eb0e8e5d0">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_TRACELOG
: <a class="el" href="group__rfcnumbers.html#gf9cdd749cf9d71fa536d81b9d6ef941a">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_TRACENEWTYPE
: <a class="el" href="group__rfcnumbers.html#gb7fb76aadf15893f6e4ebeb881efc929">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_TRACEOPERATOR
: <a class="el" href="group__rfcnumbers.html#g2f1f64dd28787026e6b4f4f5250842ae">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_TRACESERVER
: <a class="el" href="group__rfcnumbers.html#gfa8d1963799e46db6b6a5c724193db32">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_TRACESERVICE
: <a class="el" href="group__rfcnumbers.html#g3e81b657f2ed0d38aee95c2b91da4acc">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_TRACEUNKNOWN
: <a class="el" href="group__rfcnumbers.html#g434485e9f3fa12fa5ab379913002e9ce">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_TRACEUSER
: <a class="el" href="group__rfcnumbers.html#g22db1d704c89691b20346fb683a4b1c4">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_TRYAGAIN
: <a class="el" href="group__rfcnumbers.html#ge5329b95eb3402990675ebf8b705ad66">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_UMODEIS
: <a class="el" href="group__rfcnumbers.html#gdad4d02196dcef34bd0627b428f60863">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_UNAWAY
: <a class="el" href="group__rfcnumbers.html#g8ea7395ce19cbc1e55c6699dab32048a">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_UNIQOPIS
: <a class="el" href="group__rfcnumbers.html#ge7613a900a0aaa5c2a4f9dcf57d20a54">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_USERHOST
: <a class="el" href="group__rfcnumbers.html#gcc4d487e441bc6d2b9186697676d5c83">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_USERS
: <a class="el" href="group__rfcnumbers.html#gf3358e349d5e16e5bc436fc4d2d488e6">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_USERSSTART
: <a class="el" href="group__rfcnumbers.html#g7c9d31c8960d9b510ffb81eff3f0df55">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_VERSION
: <a class="el" href="group__rfcnumbers.html#g4cda85dc41efa4c24e775ea55275b6b6">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_WELCOME
: <a class="el" href="group__rfcnumbers.html#ge7edeafc2c34c3f1e47b47e0c4eec2b4">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_WHOISCHANNELS
: <a class="el" href="group__rfcnumbers.html#g61c0201bfafc1f0b39f49dbadbffe4a9">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_WHOISIDLE
: <a class="el" href="group__rfcnumbers.html#gaf3e96b0ee5bb9b9e3a3e28e2d75f6e4">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_WHOISOPERATOR
: <a class="el" href="group__rfcnumbers.html#g992b1c08e5c48abc86701826d25a2884">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_WHOISSERVER
: <a class="el" href="group__rfcnumbers.html#g7df656c3ce9c9d2e0b9cf84e5672beca">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_WHOISUSER
: <a class="el" href="group__rfcnumbers.html#g401ee0bce20717f8fc20240158d9eed3">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_WHOREPLY
: <a class="el" href="group__rfcnumbers.html#g560c4915ca8d0c28551fac8b879f0c6f">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_WHOWASUSER
: <a class="el" href="group__rfcnumbers.html#gb3daebb8bacf9bf796358f067ae8422c">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_YOUREOPER
: <a class="el" href="group__rfcnumbers.html#ga262842cfa504db62230d71dd60863ae">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_YOURESERVICE
: <a class="el" href="group__rfcnumbers.html#g14f3d0e8389976c395115bc47ab56d1f">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_YOURHOST
: <a class="el" href="group__rfcnumbers.html#g8b051fab649312894ef8a186c3b6b8ff">libirc_rfcnumeric.h</a>
</ul>
</div>
<hr size="1"><address style="text-align: right;"><small>Generated on Sat Jan 10 18:19:35 2009 for libircclient by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.7.1 </small></address>
</body>
</html>

View File

@ -0,0 +1,356 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>libircclient: Data Fields</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.7.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="files.html"><span>File&nbsp;List</span></a></li>
<li class="current"><a href="globals.html"><span>Globals</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="globals.html"><span>All</span></a></li>
<li><a href="globals_func.html"><span>Functions</span></a></li>
<li><a href="globals_type.html"><span>Typedefs</span></a></li>
<li class="current"><a href="globals_defs.html"><span>Defines</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="#index_l"><span>l</span></a></li>
</ul>
</div>
</div>
<div class="contents">
&nbsp;
<p>
<h3><a class="anchor" name="index_l">- l -</a></h3><ul>
<li>LIBIRC_ERR_ACCEPT
: <a class="el" href="group__errorcodes.html#gabf548a884eaf6f7f72b62be6f5946d4">libirc_errors.h</a>
<li>LIBIRC_ERR_CLOSED
: <a class="el" href="group__errorcodes.html#gf932ba7fb2e7bf4f6ed970b5cb8e715b">libirc_errors.h</a>
<li>LIBIRC_ERR_CONNECT
: <a class="el" href="group__errorcodes.html#ga3a48839adc6e93968e77bf92606ac07">libirc_errors.h</a>
<li>LIBIRC_ERR_INVAL
: <a class="el" href="group__errorcodes.html#g4b8be458368833c2c72d19cccd33ac34">libirc_errors.h</a>
<li>LIBIRC_ERR_MAX
: <a class="el" href="libirc__errors_8h.html#994ba7b13dca6ba4d1461e84e4356efa">libirc_errors.h</a>
<li>LIBIRC_ERR_NODCCSEND
: <a class="el" href="group__errorcodes.html#g7aebc49be2d25f795ef1e0fe8e96f12f">libirc_errors.h</a>
<li>LIBIRC_ERR_NOIPV6
: <a class="el" href="group__errorcodes.html#g5880d5a307f66aaaaf7df7cbf4c165a6">libirc_errors.h</a>
<li>LIBIRC_ERR_NOMEM
: <a class="el" href="group__errorcodes.html#g1ec9f29808aef1acaf8872d45395764b">libirc_errors.h</a>
<li>LIBIRC_ERR_OK
: <a class="el" href="group__errorcodes.html#g7614d0e18de5a72ac8f64a9435a8c856">libirc_errors.h</a>
<li>LIBIRC_ERR_OPENFILE
: <a class="el" href="group__errorcodes.html#gbb77f834415ae0a332f823540a5b3245">libirc_errors.h</a>
<li>LIBIRC_ERR_READ
: <a class="el" href="group__errorcodes.html#ga276fdc66a5e96ab31b86269775ad681">libirc_errors.h</a>
<li>LIBIRC_ERR_RESOLV
: <a class="el" href="group__errorcodes.html#g8603eb7b72065c7bf48e89ed7aab09cd">libirc_errors.h</a>
<li>LIBIRC_ERR_SOCKET
: <a class="el" href="group__errorcodes.html#gf48bc4c473962372807277dfeb6cf070">libirc_errors.h</a>
<li>LIBIRC_ERR_STATE
: <a class="el" href="group__errorcodes.html#g4d4d45b7610aeacd2a142c078a57d38a">libirc_errors.h</a>
<li>LIBIRC_ERR_TERMINATED
: <a class="el" href="group__errorcodes.html#g18e0ddcfe90da17b27e52e273a5ec1f5">libirc_errors.h</a>
<li>LIBIRC_ERR_TIMEOUT
: <a class="el" href="group__errorcodes.html#gcb3673b06a83b11e915bbe53232f2225">libirc_errors.h</a>
<li>LIBIRC_ERR_WRITE
: <a class="el" href="group__errorcodes.html#g68d74be1d70d3a15df8976c186e4563a">libirc_errors.h</a>
<li>LIBIRC_OPTION_DEBUG
: <a class="el" href="group__options.html#geba7a9cf7f7808a61f945a58c6d780f8">libirc_options.h</a>
<li>LIBIRC_OPTION_STRIPNICKS
: <a class="el" href="group__options.html#g0dd67b0a5373a108d86d911fa5741e72">libirc_options.h</a>
<li>LIBIRC_RFC_ERR_ALREADYREGISTRED
: <a class="el" href="group__rfcnumbers.html#g1701898fa06e1935d9305222c65d66a6">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_BADCHANMASK
: <a class="el" href="group__rfcnumbers.html#g6e40a8054eb0a0c0c6882cd97f344853">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_BADCHANNELKEY
: <a class="el" href="group__rfcnumbers.html#g04a2e9664d25bece875e5c207c6a2697">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_BADMASK
: <a class="el" href="group__rfcnumbers.html#g4b1891745acf0880af1d93d1da71c87b">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_BANLISTFULL
: <a class="el" href="group__rfcnumbers.html#g9090b770689a1b8b2bb8bb3e463cb6ea">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_BANNEDFROMCHAN
: <a class="el" href="group__rfcnumbers.html#gc5bf83f758e914ca36d5f379e5819103">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_CANNOTSENDTOCHAN
: <a class="el" href="group__rfcnumbers.html#g3624990fe128d867c11b213228e62df8">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_CANTKILLSERVER
: <a class="el" href="group__rfcnumbers.html#gf8a5c81b0413911e6120af8b6c51cf06">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_CHANNELISFULL
: <a class="el" href="group__rfcnumbers.html#g8644827c4d45e5669a342b1d70a0904e">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_CHANOPRIVSNEEDED
: <a class="el" href="group__rfcnumbers.html#g45e953e4c730a2f091d74430eeac1d57">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_ERRONEUSNICKNAME
: <a class="el" href="group__rfcnumbers.html#g177a2b46f518e603271b3d55ae2f84ab">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_FILEERROR
: <a class="el" href="group__rfcnumbers.html#g6b69683ac06754b38388a0d25e29b4b6">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_INVITEONLYCHAN
: <a class="el" href="group__rfcnumbers.html#gdfa3659a762a5023cd37615a54f70a2e">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_KEYSET
: <a class="el" href="group__rfcnumbers.html#g43267525d047db03b1c8f402cfe549f3">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_NEEDMOREPARAMS
: <a class="el" href="group__rfcnumbers.html#gb3fc9166c154ed2b99c0294f5ce31777">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_NICKCOLLISION
: <a class="el" href="group__rfcnumbers.html#g929657e2facbf0e46a540aa8e7516774">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_NICKNAMEINUSE
: <a class="el" href="group__rfcnumbers.html#g2dabe26bb4ab3b90974a6a645f7d7545">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_NOADMININFO
: <a class="el" href="group__rfcnumbers.html#gaec4021499b205247f9d4c1ee33ba8f1">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_NOCHANMODES
: <a class="el" href="group__rfcnumbers.html#g281b65b85e248598a7ca0cad7fb1fb42">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_NOLOGIN
: <a class="el" href="group__rfcnumbers.html#g82b53ec1f6a19a95c1d7d376a49f3cac">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_NOMOTD
: <a class="el" href="group__rfcnumbers.html#geeb61823055c58ed089c138b7768b899">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_NONICKNAMEGIVEN
: <a class="el" href="group__rfcnumbers.html#gc754b9522b1f4c4376f809d2e3acbee4">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_NOOPERHOST
: <a class="el" href="group__rfcnumbers.html#gbc83a42c94926342d1149f0572c07767">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_NOORIGIN
: <a class="el" href="group__rfcnumbers.html#g5253a98a0673962ecdf9239c42fd3cfc">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_NOPERMFORHOST
: <a class="el" href="group__rfcnumbers.html#g4a62ec37ba0929b54cc3e77be973ecf1">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_NOPRIVILEGES
: <a class="el" href="group__rfcnumbers.html#g6afd77656919ffebf8468b1aa828be00">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_NORECIPIENT
: <a class="el" href="group__rfcnumbers.html#g73d5c17577fddd176f2d89e15b657c1a">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_NOSUCHCHANNEL
: <a class="el" href="group__rfcnumbers.html#g2c0be54b246f18fb20c2c9edbc671649">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_NOSUCHNICK
: <a class="el" href="group__rfcnumbers.html#g28f90d5f34a3056127516c0edc7c511f">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_NOSUCHSERVER
: <a class="el" href="group__rfcnumbers.html#g8108addfd19326f00eacd71c26809348">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_NOSUCHSERVICE
: <a class="el" href="group__rfcnumbers.html#g6ef41b1c7955888d2d608e6b9213039a">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_NOTEXTTOSEND
: <a class="el" href="group__rfcnumbers.html#gc9851022435108cc6074c8cab2311b58">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_NOTONCHANNEL
: <a class="el" href="group__rfcnumbers.html#gb20af2b80994d5c9d7c1e96d88f2e577">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_NOTOPLEVEL
: <a class="el" href="group__rfcnumbers.html#gfcad763cc97b268aa585311350989dca">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_NOTREGISTERED
: <a class="el" href="group__rfcnumbers.html#g787a41ffa63671e56da644fb32be180a">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_PASSWDMISMATCH
: <a class="el" href="group__rfcnumbers.html#gc6f7ea25e5bdd8b1f7a271232ebafcf2">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_RESTRICTED
: <a class="el" href="group__rfcnumbers.html#g0f12c365aee869c60022e1cfbc6c2158">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_SUMMONDISABLED
: <a class="el" href="group__rfcnumbers.html#gd0834a3cc4431206ac130e604c81803f">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_TOOMANYCHANNELS
: <a class="el" href="group__rfcnumbers.html#g784de3929f568ce298c37c42acb4bfef">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_TOOMANYTARGETS
: <a class="el" href="group__rfcnumbers.html#g807eab621113410281fd574de71236ea">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_UMODEUNKNOWNFLAG
: <a class="el" href="group__rfcnumbers.html#g0c3eb9db119a7f1b9c8c9be9e9b82ae1">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_UNAVAILRESOURCE
: <a class="el" href="group__rfcnumbers.html#gc387f0d26f0df419f744e6e0ea6ce005">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_UNIQOPPRIVSNEEDED
: <a class="el" href="group__rfcnumbers.html#ge567a12bbbaa3d2964a4fe43f5b13fa4">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_UNKNOWNCOMMAND
: <a class="el" href="group__rfcnumbers.html#gc9700c81583082d145a5236748efcbad">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_UNKNOWNMODE
: <a class="el" href="group__rfcnumbers.html#g66d80c7acd49ba08f1a14b8775347ed1">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_USERNOTINCHANNEL
: <a class="el" href="group__rfcnumbers.html#g929d5bc041ad99b161b6685aa05e4f64">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_USERONCHANNEL
: <a class="el" href="group__rfcnumbers.html#gaa927136c2fe8a8d4e45b17dfea70303">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_USERSDISABLED
: <a class="el" href="group__rfcnumbers.html#g4560dabc75ada66f19872b372e4e30cd">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_USERSDONTMATCH
: <a class="el" href="group__rfcnumbers.html#g109b90448c6e8f7e2537a5f4f323745b">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_WASNOSUCHNICK
: <a class="el" href="group__rfcnumbers.html#gf36d875f2f4d88a959aaf75978c8c02e">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_WILDTOPLEVEL
: <a class="el" href="group__rfcnumbers.html#g4cf5ceeec3305180731860436650c955">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_YOUREBANNEDCREEP
: <a class="el" href="group__rfcnumbers.html#ge98bc10404f5961bbdf3747c2e509dc3">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_ERR_YOUWILLBEBANNED
: <a class="el" href="group__rfcnumbers.html#g1091fd61652ee8f30df898a9091dac88">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_ADMINEMAIL
: <a class="el" href="group__rfcnumbers.html#geb9af936a2d2c03374417d05ade2cdb3">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_ADMINLOC1
: <a class="el" href="group__rfcnumbers.html#gb7499cdf5c8c4f59e0b1364c03e938c8">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_ADMINLOC2
: <a class="el" href="group__rfcnumbers.html#g0e6696d5d4918c9575956f87c78a2c75">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_ADMINME
: <a class="el" href="group__rfcnumbers.html#ge050978abb7478ab656f4b0b610a4e9c">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_AWAY
: <a class="el" href="group__rfcnumbers.html#g54aa2b97df3fc570572e68fc88647143">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_BANLIST
: <a class="el" href="group__rfcnumbers.html#ga188a0d60499bb3546fdc75b07ee5680">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_BOUNCE
: <a class="el" href="group__rfcnumbers.html#g20089bb4db6f4edf6ad9c55b21f79351">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_CHANNELMODEIS
: <a class="el" href="group__rfcnumbers.html#gce33e328528f4ae2e7843478839301e5">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_CREATED
: <a class="el" href="group__rfcnumbers.html#g457848e59212b9c34b195408b3499e36">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_ENDOFBANLIST
: <a class="el" href="group__rfcnumbers.html#g6040ae147ea3044f201f314fec1a1791">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_ENDOFEXCEPTLIST
: <a class="el" href="group__rfcnumbers.html#g2edbebc4a6ebc19a4cf718785f05cdce">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_ENDOFINFO
: <a class="el" href="group__rfcnumbers.html#g3f7aa466f616bc7645c9deed702ecbfd">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_ENDOFINVITELIST
: <a class="el" href="group__rfcnumbers.html#g897411552f08a25005bc424ba1483f27">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_ENDOFLINKS
: <a class="el" href="group__rfcnumbers.html#g3aca62d5fe10d6acdf37ee24f8d9b76d">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_ENDOFMOTD
: <a class="el" href="group__rfcnumbers.html#gceb2ecc1ff91805c62886c945bf3a200">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_ENDOFNAMES
: <a class="el" href="group__rfcnumbers.html#ged45893cd1a15247dc7200d16a224a76">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_ENDOFSTATS
: <a class="el" href="group__rfcnumbers.html#gaa0efa6298a7b86c61e4b1721c857e71">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_ENDOFUSERS
: <a class="el" href="group__rfcnumbers.html#gc6bbc01052466794fe1998e4d9316bff">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_ENDOFWHO
: <a class="el" href="group__rfcnumbers.html#gaad7e5e89e006bdb5c24ff41cf1eda91">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_ENDOFWHOIS
: <a class="el" href="group__rfcnumbers.html#ge8c2ae654f4d2502eeea46cd6116687f">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_ENDOFWHOWAS
: <a class="el" href="group__rfcnumbers.html#g8eb840d1d812efc90a7dbc2e4c5487a6">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_EXCEPTLIST
: <a class="el" href="group__rfcnumbers.html#g5d238f6d71acb8652de17f1e2178ef83">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_INFO
: <a class="el" href="group__rfcnumbers.html#g25e458084627c7c5cc04846128ce7f99">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_INVITELIST
: <a class="el" href="group__rfcnumbers.html#gc7ccfca1aee7957b59043cd14b4c2199">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_INVITING
: <a class="el" href="group__rfcnumbers.html#g5de83e9710137226a986fdc6aece31da">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_ISON
: <a class="el" href="group__rfcnumbers.html#g27bd750af38efdb964ae3f2dea384469">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_LINKS
: <a class="el" href="group__rfcnumbers.html#gbd1f4f6dd81b23d93a8d8670b52ee75c">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_LIST
: <a class="el" href="group__rfcnumbers.html#g7cd68428c26cc9867a1b35a25b4acb64">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_LISTEND
: <a class="el" href="group__rfcnumbers.html#gb986ca08f325c8113fbada41a99c84bf">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_LUSERCHANNELS
: <a class="el" href="group__rfcnumbers.html#gf479e546cbc0060f38f5475f7a1256ef">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_LUSERCLIENT
: <a class="el" href="group__rfcnumbers.html#g150a28b2e4ce27dbdceadbb1143c1a23">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_LUSERME
: <a class="el" href="group__rfcnumbers.html#gca6a0c4e04579223b005f76e9119cee0">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_LUSEROP
: <a class="el" href="group__rfcnumbers.html#g9c401c244142ef0ac85b84d1e06881e0">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_LUSERUNKNOWN
: <a class="el" href="group__rfcnumbers.html#gb398de728cca589e82df42d6e9a08f50">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_MOTD
: <a class="el" href="group__rfcnumbers.html#gd6008de6ef3a06b3817bb42d8d501d67">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_MOTDSTART
: <a class="el" href="group__rfcnumbers.html#g98acf0bf2e6a0fbf654dbaf4e8b7e674">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_MYINFO
: <a class="el" href="group__rfcnumbers.html#g79965ea78224aaea217c27e8bd2ea565">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_NAMREPLY
: <a class="el" href="group__rfcnumbers.html#g7fc1ff023f7824d91d5f5567997f0fd3">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_NOTOPIC
: <a class="el" href="group__rfcnumbers.html#gf467ce06debba2e77db229b14f5bbe38">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_NOUSERS
: <a class="el" href="group__rfcnumbers.html#g08119bd0358f01a771e4d0f0c2aabb32">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_NOWAWAY
: <a class="el" href="group__rfcnumbers.html#g223f4d11b29fa52405ae2c5c92a6f57c">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_REHASHING
: <a class="el" href="group__rfcnumbers.html#g16341382589ad8a0ea33870690a2eacd">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_SERVLIST
: <a class="el" href="group__rfcnumbers.html#gbcb0ebc54eb0885b1d36ed13474783b6">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_SERVLISTEND
: <a class="el" href="group__rfcnumbers.html#gbd19df966082bf87e63ad541b8297385">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_STATSCOMMANDS
: <a class="el" href="group__rfcnumbers.html#gcfc1bd556f14f42907a45df17a15bd71">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_STATSLINKINFO
: <a class="el" href="group__rfcnumbers.html#g9e11276a19249878b2970d9006534783">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_STATSOLINE
: <a class="el" href="group__rfcnumbers.html#gb5aa35b134c37d012d79b5246259a127">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_STATSUPTIME
: <a class="el" href="group__rfcnumbers.html#gb63dde0b78690895bd2d37d0991dc0b9">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_SUMMONING
: <a class="el" href="group__rfcnumbers.html#g1751c0d93a35da59ede9ea222d543c2a">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_TIME
: <a class="el" href="group__rfcnumbers.html#g0326959553f325f18a6b23ddb0847be6">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_TOPIC
: <a class="el" href="group__rfcnumbers.html#g02d7f6f775a11abd3c09bca16d6cdc59">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_TRACECLASS
: <a class="el" href="group__rfcnumbers.html#g6497ecbb3653fbe3a981a9f0d61ef278">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_TRACECONNECTING
: <a class="el" href="group__rfcnumbers.html#gb5334d2fba02850cb8706d3486fcc31e">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_TRACEEND
: <a class="el" href="group__rfcnumbers.html#g3b2d52ed29933fdb22d79ea342fc2f26">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_TRACEHANDSHAKE
: <a class="el" href="group__rfcnumbers.html#g4a427d0bdd9cac2bae6fb651f791fd8f">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_TRACELINK
: <a class="el" href="group__rfcnumbers.html#g0ef1797805c029473397f07eb0e8e5d0">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_TRACELOG
: <a class="el" href="group__rfcnumbers.html#gf9cdd749cf9d71fa536d81b9d6ef941a">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_TRACENEWTYPE
: <a class="el" href="group__rfcnumbers.html#gb7fb76aadf15893f6e4ebeb881efc929">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_TRACEOPERATOR
: <a class="el" href="group__rfcnumbers.html#g2f1f64dd28787026e6b4f4f5250842ae">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_TRACESERVER
: <a class="el" href="group__rfcnumbers.html#gfa8d1963799e46db6b6a5c724193db32">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_TRACESERVICE
: <a class="el" href="group__rfcnumbers.html#g3e81b657f2ed0d38aee95c2b91da4acc">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_TRACEUNKNOWN
: <a class="el" href="group__rfcnumbers.html#g434485e9f3fa12fa5ab379913002e9ce">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_TRACEUSER
: <a class="el" href="group__rfcnumbers.html#g22db1d704c89691b20346fb683a4b1c4">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_TRYAGAIN
: <a class="el" href="group__rfcnumbers.html#ge5329b95eb3402990675ebf8b705ad66">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_UMODEIS
: <a class="el" href="group__rfcnumbers.html#gdad4d02196dcef34bd0627b428f60863">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_UNAWAY
: <a class="el" href="group__rfcnumbers.html#g8ea7395ce19cbc1e55c6699dab32048a">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_UNIQOPIS
: <a class="el" href="group__rfcnumbers.html#ge7613a900a0aaa5c2a4f9dcf57d20a54">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_USERHOST
: <a class="el" href="group__rfcnumbers.html#gcc4d487e441bc6d2b9186697676d5c83">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_USERS
: <a class="el" href="group__rfcnumbers.html#gf3358e349d5e16e5bc436fc4d2d488e6">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_USERSSTART
: <a class="el" href="group__rfcnumbers.html#g7c9d31c8960d9b510ffb81eff3f0df55">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_VERSION
: <a class="el" href="group__rfcnumbers.html#g4cda85dc41efa4c24e775ea55275b6b6">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_WELCOME
: <a class="el" href="group__rfcnumbers.html#ge7edeafc2c34c3f1e47b47e0c4eec2b4">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_WHOISCHANNELS
: <a class="el" href="group__rfcnumbers.html#g61c0201bfafc1f0b39f49dbadbffe4a9">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_WHOISIDLE
: <a class="el" href="group__rfcnumbers.html#gaf3e96b0ee5bb9b9e3a3e28e2d75f6e4">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_WHOISOPERATOR
: <a class="el" href="group__rfcnumbers.html#g992b1c08e5c48abc86701826d25a2884">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_WHOISSERVER
: <a class="el" href="group__rfcnumbers.html#g7df656c3ce9c9d2e0b9cf84e5672beca">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_WHOISUSER
: <a class="el" href="group__rfcnumbers.html#g401ee0bce20717f8fc20240158d9eed3">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_WHOREPLY
: <a class="el" href="group__rfcnumbers.html#g560c4915ca8d0c28551fac8b879f0c6f">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_WHOWASUSER
: <a class="el" href="group__rfcnumbers.html#gb3daebb8bacf9bf796358f067ae8422c">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_YOUREOPER
: <a class="el" href="group__rfcnumbers.html#ga262842cfa504db62230d71dd60863ae">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_YOURESERVICE
: <a class="el" href="group__rfcnumbers.html#g14f3d0e8389976c395115bc47ab56d1f">libirc_rfcnumeric.h</a>
<li>LIBIRC_RFC_RPL_YOURHOST
: <a class="el" href="group__rfcnumbers.html#g8b051fab649312894ef8a186c3b6b8ff">libirc_rfcnumeric.h</a>
</ul>
</div>
<hr size="1"><address style="text-align: right;"><small>Generated on Sat Jan 10 18:19:35 2009 for libircclient by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.7.1 </small></address>
</body>
</html>

View File

@ -0,0 +1,138 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>libircclient: Data Fields</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.7.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="files.html"><span>File&nbsp;List</span></a></li>
<li class="current"><a href="globals.html"><span>Globals</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="globals.html"><span>All</span></a></li>
<li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
<li><a href="globals_type.html"><span>Typedefs</span></a></li>
<li><a href="globals_defs.html"><span>Defines</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="#index_i"><span>i</span></a></li>
</ul>
</div>
</div>
<div class="contents">
&nbsp;
<p>
<h3><a class="anchor" name="index_i">- i -</a></h3><ul>
<li>irc_add_select_descriptors()
: <a class="el" href="group__running.html#g75d2af4209ad2edbdbff77b0cfcabcab">libircclient.h</a>
<li>irc_cmd_channel_mode()
: <a class="el" href="group__ircmd__ch.html#g63489434dcf78d454389b7744624c1e7">libircclient.h</a>
<li>irc_cmd_ctcp_reply()
: <a class="el" href="group__ctcp.html#g62cba0ecb13b0d602403e77bbe78550e">libircclient.h</a>
<li>irc_cmd_ctcp_request()
: <a class="el" href="group__ctcp.html#gd3eb9e56b5988f157e6f4a9b73145382">libircclient.h</a>
<li>irc_cmd_invite()
: <a class="el" href="group__ircmd__ch.html#g77e2b2c46c8883a7986180f36ca17247">libircclient.h</a>
<li>irc_cmd_join()
: <a class="el" href="group__ircmd__ch.html#g4960c546c2a077e8fb01fc7aa5ae7add">libircclient.h</a>
<li>irc_cmd_kick()
: <a class="el" href="group__ircmd__ch.html#g47a6c7a2b3f96c9fe41e7df82f0dbd7c">libircclient.h</a>
<li>irc_cmd_list()
: <a class="el" href="group__ircmd__ch.html#g1f49929bca3afb8d95b2986dfb480d42">libircclient.h</a>
<li>irc_cmd_me()
: <a class="el" href="group__ircmd__msg.html#g09c7e471bf4062b57df10d31ee275fc5">libircclient.h</a>
<li>irc_cmd_msg()
: <a class="el" href="group__ircmd__msg.html#g8c2ec03f1a9ce7c739e11b64fd088ae5">libircclient.h</a>
<li>irc_cmd_names()
: <a class="el" href="group__ircmd__ch.html#g9b5d3f07ca8a44f0772fc48f677e5bdd">libircclient.h</a>
<li>irc_cmd_nick()
: <a class="el" href="group__ircmd__oth.html#g19ae1ad61caf031e5c2dc950e24b7370">libircclient.h</a>
<li>irc_cmd_notice()
: <a class="el" href="group__ircmd__msg.html#gf537698d7ec582701fa3473a2dd6775f">libircclient.h</a>
<li>irc_cmd_part()
: <a class="el" href="group__ircmd__ch.html#gdb50b9a3a78693266fb0a257b997831b">libircclient.h</a>
<li>irc_cmd_quit()
: <a class="el" href="group__ircmd__oth.html#ga89bd6efb6dacf53f25ca5518a5aa4ee">libircclient.h</a>
<li>irc_cmd_topic()
: <a class="el" href="group__ircmd__ch.html#ge088b8e83e3482875ea3d3f970dbb9a2">libircclient.h</a>
<li>irc_cmd_user_mode()
: <a class="el" href="group__ircmd__oth.html#g71b0c8a534600d2b354be35e28735513">libircclient.h</a>
<li>irc_cmd_whois()
: <a class="el" href="group__ircmd__oth.html#g7cfe0b48a060c5291ef1d59a3ea79b4f">libircclient.h</a>
<li>irc_color_convert_from_mirc()
: <a class="el" href="group__colors.html#gbb894bace7c39c70b5582bcdb4052bea">libircclient.h</a>
<li>irc_color_convert_to_mirc()
: <a class="el" href="group__colors.html#g7a9a3490741e2883695759ba5f4adc1e">libircclient.h</a>
<li>irc_color_strip_from_mirc()
: <a class="el" href="group__colors.html#g2b94751f30cf4cdf444345808fe4ed6c">libircclient.h</a>
<li>irc_connect()
: <a class="el" href="group__conndisc.html#g121b23c9e131da651175ae779e1b6851">libircclient.h</a>
<li>irc_connect6()
: <a class="el" href="group__conndisc.html#g5729f584833d55510ae114c8ac3d8e99">libircclient.h</a>
<li>irc_create_session()
: <a class="el" href="group__initclose.html#gc5dada35ee77795d8bb77b6701853b98">libircclient.h</a>
<li>irc_dcc_accept()
: <a class="el" href="group__dccstuff.html#g43f747d3b2252109f9d811ea8414745b">libircclient.h</a>
<li>irc_dcc_chat()
: <a class="el" href="group__dccstuff.html#gd6958aac6d67f595966949d1ec5ae4a0">libircclient.h</a>
<li>irc_dcc_decline()
: <a class="el" href="group__dccstuff.html#g3ff4ca78d346b7acf847cf28a7211bf4">libircclient.h</a>
<li>irc_dcc_destroy()
: <a class="el" href="group__dccstuff.html#g8b8aa3363ee93cc395bc89ac5cc9501c">libircclient.h</a>
<li>irc_dcc_msg()
: <a class="el" href="group__dccstuff.html#gb98b7ea58a36d7649c2dca6c4b3c8a7d">libircclient.h</a>
<li>irc_dcc_sendfile()
: <a class="el" href="group__dccstuff.html#gf9e8a307113cd27d08e082fda6264262">libircclient.h</a>
<li>irc_destroy_session()
: <a class="el" href="group__initclose.html#g30c6cea4f149632d1905b097a3a573f7">libircclient.h</a>
<li>irc_disconnect()
: <a class="el" href="group__conndisc.html#ga5f6dd73d3f0bdecb53f53362e253aab">libircclient.h</a>
<li>irc_errno()
: <a class="el" href="group__errors.html#g3a18336093ee74751244d996bc32247d">libircclient.h</a>
<li>irc_get_ctx()
: <a class="el" href="group__contexts.html#g341a8954613f29c7ff5a92413398ce7d">libircclient.h</a>
<li>irc_get_version()
: <a class="el" href="group__common.html#gebc090ad2392569b1998d7e2354c7bc7">libircclient.h</a>
<li>irc_is_connected()
: <a class="el" href="group__conndisc.html#g90f826583118cb2e34135cb0e9b26cf8">libircclient.h</a>
<li>irc_option_reset()
: <a class="el" href="group__options.html#gf56687ccad2045204ae23f70d2f54860">libircclient.h</a>
<li>irc_option_set()
: <a class="el" href="group__options.html#gc5d81f651f1441690f3f59c3ddccaa48">libircclient.h</a>
<li>irc_process_select_descriptors()
: <a class="el" href="group__running.html#g4526d10056559eac7bd777437d440170">libircclient.h</a>
<li>irc_run()
: <a class="el" href="group__running.html#g112631b75eb9997868d73fede17440d0">libircclient.h</a>
<li>irc_send_raw()
: <a class="el" href="group__ircmd__oth.html#gd69addf9c9e45d888a71d6295429e05c">libircclient.h</a>
<li>irc_set_ctx()
: <a class="el" href="group__contexts.html#ge0cf439a36aafce4abab8f4cce5ac5ff">libircclient.h</a>
<li>irc_strerror()
: <a class="el" href="group__errors.html#gfdc70ca04626818d2fd9a55da0b90e5f">libircclient.h</a>
<li>irc_target_get_host()
: <a class="el" href="group__nnparse.html#g5929f96c251be831d1de66e6bba6299c">libircclient.h</a>
<li>irc_target_get_nick()
: <a class="el" href="group__nnparse.html#g217df7c7c7dc5e60678dd14e24e41f03">libircclient.h</a>
</ul>
</div>
<hr size="1"><address style="text-align: right;"><small>Generated on Sat Jan 10 18:19:35 2009 for libircclient by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.7.1 </small></address>
</body>
</html>

View File

@ -0,0 +1,59 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>libircclient: Data Fields</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.7.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="files.html"><span>File&nbsp;List</span></a></li>
<li class="current"><a href="globals.html"><span>Globals</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="globals.html"><span>All</span></a></li>
<li><a href="globals_func.html"><span>Functions</span></a></li>
<li class="current"><a href="globals_type.html"><span>Typedefs</span></a></li>
<li><a href="globals_defs.html"><span>Defines</span></a></li>
</ul>
</div>
</div>
<div class="contents">
&nbsp;
<p>
<ul>
<li>irc_dcc_callback_t
: <a class="el" href="group__dccstuff.html#g92d4d3f7866bd8c4f1d6df8f05d939f9">libircclient.h</a>
<li>irc_dcc_session_t
: <a class="el" href="libircclient_8h.html#25dc31f3073d8dffd01f659d19c76e5e">libircclient.h</a>
<li>irc_dcc_t
: <a class="el" href="libircclient_8h.html#4136d52803e88f369d728e1e3b0e70f7">libircclient.h</a>
<li>irc_event_callback_t
: <a class="el" href="group__events.html#gc472d3e37df8f172fed3d75e649fac14">libirc_events.h</a>
<li>irc_event_dcc_chat_t
: <a class="el" href="group__events.html#g8c3ddaa55e5ded002b5054f0b926381c">libirc_events.h</a>
<li>irc_event_dcc_send_t
: <a class="el" href="group__events.html#g5f4b1d95f2d6619041f993ba748544cf">libirc_events.h</a>
<li>irc_eventcode_callback_t
: <a class="el" href="group__events.html#gb6000d309e87cfb727dcad0136fcb79f">libirc_events.h</a>
<li>irc_session_t
: <a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">libircclient.h</a>
</ul>
</div>
<hr size="1"><address style="text-align: right;"><small>Generated on Sat Jan 10 18:19:35 2009 for libircclient by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.7.1 </small></address>
</body>
</html>

View File

@ -0,0 +1,137 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>libircclient: Messages colors manipulation</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.7.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
</div>
<div class="contents">
<h1>Messages colors manipulation</h1><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__colors.html#g2b94751f30cf4cdf444345808fe4ed6c">irc_color_strip_from_mirc</a> (const char *message)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Removes all the color codes and format options. <a href="#g2b94751f30cf4cdf444345808fe4ed6c"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__colors.html#gbb894bace7c39c70b5582bcdb4052bea">irc_color_convert_from_mirc</a> (const char *message)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Converts all the color codes and format options to libircclient colors. <a href="#gbb894bace7c39c70b5582bcdb4052bea"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__colors.html#g7a9a3490741e2883695759ba5f4adc1e">irc_color_convert_to_mirc</a> (const char *message)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Converts all the color codes from libircclient format to mIRC. <a href="#g7a9a3490741e2883695759ba5f4adc1e"></a><br></td></tr>
</table>
<hr><h2>Function Documentation</h2>
<a class="anchor" name="gbb894bace7c39c70b5582bcdb4052bea"></a><!-- doxytag: member="libircclient.h::irc_color_convert_from_mirc" ref="gbb894bace7c39c70b5582bcdb4052bea" args="(const char *message)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">char * irc_color_convert_from_mirc </td>
<td>(</td>
<td class="paramtype">const char *&nbsp;</td>
<td class="paramname"> <em>message</em> </td>
<td>&nbsp;)&nbsp;</td>
<td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Converts all the color codes and format options to libircclient colors.
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>message</em>&nbsp;</td><td>A message from IRC</td></tr>
</table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>Returns a new message with converted mIRC color codes and format options. See the <a class="el" href="group__colors.html#g7a9a3490741e2883695759ba5f4adc1e" title="Converts all the color codes from libircclient format to mIRC.">irc_color_convert_to_mirc()</a> help to see how the colors are converted.<br>
Note that the memory for the new message is allocated using malloc(), so you should free it using free() when it is not used anymore. If memory allocation failed, returns 0.</dd></dl>
<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="group__colors.html#g2b94751f30cf4cdf444345808fe4ed6c" title="Removes all the color codes and format options.">irc_color_strip_from_mirc</a> <a class="el" href="group__colors.html#g7a9a3490741e2883695759ba5f4adc1e" title="Converts all the color codes from libircclient format to mIRC.">irc_color_convert_to_mirc</a> </dd></dl>
</div>
</div><p>
<a class="anchor" name="g7a9a3490741e2883695759ba5f4adc1e"></a><!-- doxytag: member="libircclient.h::irc_color_convert_to_mirc" ref="g7a9a3490741e2883695759ba5f4adc1e" args="(const char *message)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">char * irc_color_convert_to_mirc </td>
<td>(</td>
<td class="paramtype">const char *&nbsp;</td>
<td class="paramname"> <em>message</em> </td>
<td>&nbsp;)&nbsp;</td>
<td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Converts all the color codes from libircclient format to mIRC.
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>message</em>&nbsp;</td><td>A message with color codes</td></tr>
</table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>Returns a new message with converted color codes and format options, or 0 if memory could not be allocated. Note that the memory for the new message is allocated using malloc(), so you should free it using free() when it is not used anymore.</dd></dl>
The color system of libircclient is designed to be easy to use, and portable between different IRC clients. Every color or format option is described using plain text commands written between square brackets. The possible codes are:<ul>
<li>[B] ... [/B] - bold format mode. Everything between [B] and [/B] is written in <b>bold</b>.</li><li>[I] ... [/I] - italic/reverse format mode. Everything between [I] and [/I] is written in <code>italic</code>, or reversed (however, because some clients are incapable of rendering italic text, most clients display this as normal text with the background and foreground colors swapped).</li><li>[U] ... [/U] - underline format mode. Everything between [U] and [/U] is written underlined.</li><li>[COLOR=RED] ... [/COLOR] - write the text using specified foreground color. The color is set by using the <code>COLOR</code> keyword, and equal sign followed by text color code (see below).</li><li>[COLOR=RED/BLUE] ... [/COLOR] - write the text using specified foreground and background color. The color is set by using the <code>COLOR</code> keyword, an equal sign followed by text foreground color code, a dash and a text background color code.</li></ul>
<p>
The supported text colors are:<ul>
<li>WHITE</li><li>BLACK</li><li>DARKBLUE</li><li>DARKGREEN</li><li>RED</li><li>BROWN</li><li>PURPLE</li><li>OLIVE</li><li>YELLOW</li><li>GREEN</li><li>TEAL</li><li>CYAN</li><li>BLUE</li><li>MAGENTA</li><li>DARKGRAY</li><li>LIGHTGRAY</li></ul>
<p>
Examples of color sequences: <div class="fragment"><pre class="fragment"> Hello, [B]Tim[/B].
[U]Arsenal[/U] got a [COLOR=RED]red card[/COLOR]
The tree[U]s[/U] are [COLOR=GREEN/BLACK]green[/COLOR]
</pre></div><p>
<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="group__colors.html#g2b94751f30cf4cdf444345808fe4ed6c" title="Removes all the color codes and format options.">irc_color_strip_from_mirc</a> <a class="el" href="group__colors.html#gbb894bace7c39c70b5582bcdb4052bea" title="Converts all the color codes and format options to libircclient colors.">irc_color_convert_from_mirc</a> </dd></dl>
</div>
</div><p>
<a class="anchor" name="g2b94751f30cf4cdf444345808fe4ed6c"></a><!-- doxytag: member="libircclient.h::irc_color_strip_from_mirc" ref="g2b94751f30cf4cdf444345808fe4ed6c" args="(const char *message)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">char * irc_color_strip_from_mirc </td>
<td>(</td>
<td class="paramtype">const char *&nbsp;</td>
<td class="paramname"> <em>message</em> </td>
<td>&nbsp;)&nbsp;</td>
<td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Removes all the color codes and format options.
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>message</em>&nbsp;</td><td>A message from IRC</td></tr>
</table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>Returns a new plain text message with stripped mIRC color codes. Note that the memory for the new message is allocated using malloc(), so you should free it using free() when it is not used anymore. If memory allocation failed, returns 0.</dd></dl>
<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="group__colors.html#gbb894bace7c39c70b5582bcdb4052bea" title="Converts all the color codes and format options to libircclient colors.">irc_color_convert_from_mirc</a> <a class="el" href="group__colors.html#g7a9a3490741e2883695759ba5f4adc1e" title="Converts all the color codes from libircclient format to mIRC.">irc_color_convert_to_mirc</a> </dd></dl>
</div>
</div><p>
</div>
<hr size="1"><address style="text-align: right;"><small>Generated on Sat Jan 10 18:19:35 2009 for libircclient by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.7.1 </small></address>
</body>
</html>

View File

@ -0,0 +1,71 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>libircclient: Getting libircclient version.</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.7.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
</div>
<div class="contents">
<h1>Getting libircclient version.</h1><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__common.html#gebc090ad2392569b1998d7e2354c7bc7">irc_get_version</a> (unsigned int *high, unsigned int *low)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Obtains a libircclient version. <a href="#gebc090ad2392569b1998d7e2354c7bc7"></a><br></td></tr>
</table>
<hr><h2>Function Documentation</h2>
<a class="anchor" name="gebc090ad2392569b1998d7e2354c7bc7"></a><!-- doxytag: member="libircclient.h::irc_get_version" ref="gebc090ad2392569b1998d7e2354c7bc7" args="(unsigned int *high, unsigned int *low)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void irc_get_version </td>
<td>(</td>
<td class="paramtype">unsigned int *&nbsp;</td>
<td class="paramname"> <em>high</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int *&nbsp;</td>
<td class="paramname"> <em>low</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Obtains a libircclient version.
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>high</em>&nbsp;</td><td>A pointer to receive the high version part. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>low</em>&nbsp;</td><td>A pointer to receive the low version part.</td></tr>
</table>
</dl>
This function returns the libircclient version. You can use the version either to check whether required options are available, or to output the version. The preferred printf-like format string to output the version is:<p>
printf ("Version: %d.%02d", high, low);
</div>
</div><p>
</div>
<hr size="1"><address style="text-align: right;"><small>Generated on Sat Jan 10 18:19:35 2009 for libircclient by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.7.1 </small></address>
</body>
</html>

View File

@ -0,0 +1,251 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>libircclient: Connecting, disconnecting from IRC server.</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.7.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
</div>
<div class="contents">
<h1>Connecting, disconnecting from IRC server.</h1><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__conndisc.html#g121b23c9e131da651175ae779e1b6851">irc_connect</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, const char *server, unsigned short port, const char *server_password, const char *nick, const char *username, const char *realname)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initiates a connection to IRC server. <a href="#g121b23c9e131da651175ae779e1b6851"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__conndisc.html#g5729f584833d55510ae114c8ac3d8e99">irc_connect6</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, const char *server, unsigned short port, const char *server_password, const char *nick, const char *username, const char *realname)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initiates a connection to IRC server using IPv6. <a href="#g5729f584833d55510ae114c8ac3d8e99"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__conndisc.html#ga5f6dd73d3f0bdecb53f53362e253aab">irc_disconnect</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Disconnects a connection to IRC server. <a href="#ga5f6dd73d3f0bdecb53f53362e253aab"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__conndisc.html#g90f826583118cb2e34135cb0e9b26cf8">irc_is_connected</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Checks whether the session is connecting/connected to the IRC server. <a href="#g90f826583118cb2e34135cb0e9b26cf8"></a><br></td></tr>
</table>
<hr><h2>Function Documentation</h2>
<a class="anchor" name="g121b23c9e131da651175ae779e1b6851"></a><!-- doxytag: member="libircclient.h::irc_connect" ref="g121b23c9e131da651175ae779e1b6851" args="(irc_session_t *session, const char *server, unsigned short port, const char *server_password, const char *nick, const char *username, const char *realname)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int irc_connect </td>
<td>(</td>
<td class="paramtype"><a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *&nbsp;</td>
<td class="paramname"> <em>session</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&nbsp;</td>
<td class="paramname"> <em>server</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned short&nbsp;</td>
<td class="paramname"> <em>port</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&nbsp;</td>
<td class="paramname"> <em>server_password</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&nbsp;</td>
<td class="paramname"> <em>nick</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&nbsp;</td>
<td class="paramname"> <em>username</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&nbsp;</td>
<td class="paramname"> <em>realname</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Initiates a connection to IRC server.
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>session</em>&nbsp;</td><td>A session to initiate connections on. Must not be NULL. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>server</em>&nbsp;</td><td>A domain name or an IP address of the IRC server to connect to. Must not be NULL. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>port</em>&nbsp;</td><td>An IRC server port, usually 6667. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>server_password</em>&nbsp;</td><td>An IRC server password, if the server requires it. May be NULL, in this case password will not be send to the IRC server. Vast majority of IRC servers do not require passwords. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>nick</em>&nbsp;</td><td>A nick, which libircclient will use to login to the IRC server. Must not be NULL. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>username</em>&nbsp;</td><td>A username of the account, which is used to connect to the IRC server. This is for information only, will be shown in "user properties" dialogs and returned by /whois request. May be NULL, in this case 'nobody' will be sent as username. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>realname</em>&nbsp;</td><td>A real name of the person, who connects to the IRC. Usually people put some wide-available information here (URL, small description or something else). This information also will be shown in "user properties" dialogs and returned by /whois request. May be NULL, in this case 'noname' will be sent as username.</td></tr>
</table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>Return code 0 means success. Other value means error, the error code may be obtained through <a class="el" href="group__errors.html#g3a18336093ee74751244d996bc32247d" title="Returns the last error code.">irc_errno()</a>. Any error, generated by the IRC server, is available through <a class="el" href="structirc__callbacks__t.html#85951d45acff22aea37a822bb9c7aef7">irc_callbacks_t::event_numeric</a>.</dd></dl>
This function prepares and initiates a connection to the IRC server. The connection is done asynchronously (see <a class="el" href="structirc__callbacks__t.html#7294e75ca74ba6dc2b5c18ef8e7795a2">irc_callbacks_t::event_connect</a>), so the success return value means that connection was initiated (but not completed!) successfully.<p>
<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="group__running.html#g112631b75eb9997868d73fede17440d0" title="Goes into forever-loop, processing IRC events and generating callbacks.">irc_run</a> </dd></dl>
</div>
</div><p>
<a class="anchor" name="g5729f584833d55510ae114c8ac3d8e99"></a><!-- doxytag: member="libircclient.h::irc_connect6" ref="g5729f584833d55510ae114c8ac3d8e99" args="(irc_session_t *session, const char *server, unsigned short port, const char *server_password, const char *nick, const char *username, const char *realname)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int irc_connect6 </td>
<td>(</td>
<td class="paramtype"><a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *&nbsp;</td>
<td class="paramname"> <em>session</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&nbsp;</td>
<td class="paramname"> <em>server</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned short&nbsp;</td>
<td class="paramname"> <em>port</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&nbsp;</td>
<td class="paramname"> <em>server_password</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&nbsp;</td>
<td class="paramname"> <em>nick</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&nbsp;</td>
<td class="paramname"> <em>username</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&nbsp;</td>
<td class="paramname"> <em>realname</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Initiates a connection to IRC server using IPv6.
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>session</em>&nbsp;</td><td>A session to initiate connections on. Must not be NULL. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>server</em>&nbsp;</td><td>A domain name or an IP address of the IRC server to connect to. Must not be NULL. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>port</em>&nbsp;</td><td>An IRC server port, usually 6667. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>server_password</em>&nbsp;</td><td>An IRC server password, if the server requires it. May be NULL, in this case password will not be send to the IRC server. Vast majority of IRC servers do not require passwords. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>nick</em>&nbsp;</td><td>A nick, which libircclient will use to login to the IRC server. Must not be NULL. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>username</em>&nbsp;</td><td>A username of the account, which is used to connect to the IRC server. This is for information only, will be shown in "user properties" dialogs and returned by /whois request. May be NULL, in this case 'nobody' will be sent as username. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>realname</em>&nbsp;</td><td>A real name of the person, who connects to the IRC. Usually people put some wide-available information here (URL, small description or something else). This information also will be shown in "user properties" dialogs and returned by /whois request. May be NULL, in this case 'noname' will be sent as username.</td></tr>
</table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>Return code 0 means success. Other value means error, the error code may be obtained through <a class="el" href="group__errors.html#g3a18336093ee74751244d996bc32247d" title="Returns the last error code.">irc_errno()</a>. Any error, generated by the IRC server, is available through <a class="el" href="structirc__callbacks__t.html#85951d45acff22aea37a822bb9c7aef7">irc_callbacks_t::event_numeric</a>.</dd></dl>
This function prepares and initiates a connection to the IRC server. The connection is done asynchronously (see <a class="el" href="structirc__callbacks__t.html#7294e75ca74ba6dc2b5c18ef8e7795a2">irc_callbacks_t::event_connect</a>), so the success return value means that connection was initiated (but not completed!) successfully.<p>
<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="group__running.html#g112631b75eb9997868d73fede17440d0" title="Goes into forever-loop, processing IRC events and generating callbacks.">irc_run</a> </dd></dl>
</div>
</div><p>
<a class="anchor" name="ga5f6dd73d3f0bdecb53f53362e253aab"></a><!-- doxytag: member="libircclient.h::irc_disconnect" ref="ga5f6dd73d3f0bdecb53f53362e253aab" args="(irc_session_t *session)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void irc_disconnect </td>
<td>(</td>
<td class="paramtype"><a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *&nbsp;</td>
<td class="paramname"> <em>session</em> </td>
<td>&nbsp;)&nbsp;</td>
<td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Disconnects a connection to IRC server.
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>session</em>&nbsp;</td><td>An IRC session.</td></tr>
</table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>Return code 0 means success. Other value means error, the error code may be obtained through <a class="el" href="group__errors.html#g3a18336093ee74751244d996bc32247d" title="Returns the last error code.">irc_errno()</a>.</dd></dl>
This function closes the IRC connection. After that connection is closed, libircclient automatically leaves irc_run loop.<p>
<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="group__conndisc.html#g121b23c9e131da651175ae779e1b6851" title="Initiates a connection to IRC server.">irc_connect</a> <a class="el" href="group__running.html#g112631b75eb9997868d73fede17440d0" title="Goes into forever-loop, processing IRC events and generating callbacks.">irc_run</a> </dd></dl>
</div>
</div><p>
<a class="anchor" name="g90f826583118cb2e34135cb0e9b26cf8"></a><!-- doxytag: member="libircclient.h::irc_is_connected" ref="g90f826583118cb2e34135cb0e9b26cf8" args="(irc_session_t *session)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int irc_is_connected </td>
<td>(</td>
<td class="paramtype"><a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *&nbsp;</td>
<td class="paramname"> <em>session</em> </td>
<td>&nbsp;)&nbsp;</td>
<td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Checks whether the session is connecting/connected to the IRC server.
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>session</em>&nbsp;</td><td>An initialized IRC session.</td></tr>
</table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>Return code 1 means that session is connecting or connected to the IRC server, zero value means that the session has been disconnected.</dd></dl>
<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="group__conndisc.html#g121b23c9e131da651175ae779e1b6851" title="Initiates a connection to IRC server.">irc_connect</a> <a class="el" href="group__running.html#g112631b75eb9997868d73fede17440d0" title="Goes into forever-loop, processing IRC events and generating callbacks.">irc_run</a> </dd></dl>
</div>
</div><p>
</div>
<hr size="1"><address style="text-align: right;"><small>Generated on Sat Jan 10 18:19:35 2009 for libircclient by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.7.1 </small></address>
</body>
</html>

View File

@ -0,0 +1,104 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>libircclient: Managing contexts.</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.7.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
</div>
<div class="contents">
<h1>Managing contexts.</h1><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__contexts.html#ge0cf439a36aafce4abab8f4cce5ac5ff">irc_set_ctx</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, void *ctx)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets the IRC session context. <a href="#ge0cf439a36aafce4abab8f4cce5ac5ff"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__contexts.html#g341a8954613f29c7ff5a92413398ce7d">irc_get_ctx</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the IRC session context. <a href="#g341a8954613f29c7ff5a92413398ce7d"></a><br></td></tr>
</table>
<hr><h2>Function Documentation</h2>
<a class="anchor" name="g341a8954613f29c7ff5a92413398ce7d"></a><!-- doxytag: member="libircclient.h::irc_get_ctx" ref="g341a8954613f29c7ff5a92413398ce7d" args="(irc_session_t *session)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void * irc_get_ctx </td>
<td>(</td>
<td class="paramtype"><a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *&nbsp;</td>
<td class="paramname"> <em>session</em> </td>
<td>&nbsp;)&nbsp;</td>
<td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Returns the IRC session context.
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>session</em>&nbsp;</td><td>An initiated session.</td></tr>
</table>
</dl>
This function returns the IRC session context, which was set by <a class="el" href="group__contexts.html#ge0cf439a36aafce4abab8f4cce5ac5ff" title="Sets the IRC session context.">irc_set_ctx()</a>. If no context was set, this function returns NULL.<p>
<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="group__contexts.html#ge0cf439a36aafce4abab8f4cce5ac5ff" title="Sets the IRC session context.">irc_set_ctx</a> </dd></dl>
</div>
</div><p>
<a class="anchor" name="ge0cf439a36aafce4abab8f4cce5ac5ff"></a><!-- doxytag: member="libircclient.h::irc_set_ctx" ref="ge0cf439a36aafce4abab8f4cce5ac5ff" args="(irc_session_t *session, void *ctx)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void irc_set_ctx </td>
<td>(</td>
<td class="paramtype"><a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *&nbsp;</td>
<td class="paramname"> <em>session</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void *&nbsp;</td>
<td class="paramname"> <em>ctx</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Sets the IRC session context.
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>session</em>&nbsp;</td><td>An initiated session. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>ctx</em>&nbsp;</td><td>A context.</td></tr>
</table>
</dl>
This function sets the user-defined context for this IRC session. This context is not used by libircclient. Its purpose is to store session-specific user data, which may be obtained later by calling <a class="el" href="group__contexts.html#g341a8954613f29c7ff5a92413398ce7d" title="Returns the IRC session context.">irc_get_ctx()</a>. Note that libircclient just 'carries out' this pointer. If you allocate some memory, and store its address in ctx (most common usage), it is your responsibility to free it before calling <a class="el" href="group__initclose.html#g30c6cea4f149632d1905b097a3a573f7" title="Destroys previously created IRC session.">irc_destroy_session()</a>.<p>
<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="group__contexts.html#g341a8954613f29c7ff5a92413398ce7d" title="Returns the IRC session context.">irc_get_ctx</a> </dd></dl>
</div>
</div><p>
</div>
<hr size="1"><address style="text-align: right;"><small>Generated on Sat Jan 10 18:19:35 2009 for libircclient by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.7.1 </small></address>
</body>
</html>

View File

@ -0,0 +1,135 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>libircclient: CTCP requests and replies.</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.7.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
</div>
<div class="contents">
<h1>CTCP requests and replies.</h1><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__ctcp.html#gd3eb9e56b5988f157e6f4a9b73145382">irc_cmd_ctcp_request</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, const char *nick, const char *request)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Generates a CTCP request. <a href="#gd3eb9e56b5988f157e6f4a9b73145382"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__ctcp.html#g62cba0ecb13b0d602403e77bbe78550e">irc_cmd_ctcp_reply</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, const char *nick, const char *reply)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Generates a reply to the CTCP request. <a href="#g62cba0ecb13b0d602403e77bbe78550e"></a><br></td></tr>
</table>
<hr><h2>Function Documentation</h2>
<a class="anchor" name="g62cba0ecb13b0d602403e77bbe78550e"></a><!-- doxytag: member="libircclient.h::irc_cmd_ctcp_reply" ref="g62cba0ecb13b0d602403e77bbe78550e" args="(irc_session_t *session, const char *nick, const char *reply)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int irc_cmd_ctcp_reply </td>
<td>(</td>
<td class="paramtype"><a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *&nbsp;</td>
<td class="paramname"> <em>session</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&nbsp;</td>
<td class="paramname"> <em>nick</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&nbsp;</td>
<td class="paramname"> <em>reply</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Generates a reply to the CTCP request.
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>session</em>&nbsp;</td><td>An initiated and connected session. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>nick</em>&nbsp;</td><td>A target nick to send request to. Must not be NULL. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>reply</em>&nbsp;</td><td>A reply string. Must not be NULL.</td></tr>
</table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>Return code 0 means success. Other value means error, the error code may be obtained through <a class="el" href="group__errors.html#g3a18336093ee74751244d996bc32247d" title="Returns the last error code.">irc_errno()</a>. Any error, generated by the IRC server, is available through <a class="el" href="structirc__callbacks__t.html#85951d45acff22aea37a822bb9c7aef7">irc_callbacks_t::event_numeric</a>.</dd></dl>
This function is used to send a reply to the CTCP request, generated by <a class="el" href="structirc__callbacks__t.html#5f5d386a4df0d1334ffb96b3c406355f">irc_callbacks_t::event_ctcp_req</a>. Note that you will not receive this event unless you specify your own handler as <code>event_ctcp_req</code> callback during the IRC session initialization.<p>
Possible error responces for this command from the RFC1459:<ul>
<li><a class="el" href="group__rfcnumbers.html#g73d5c17577fddd176f2d89e15b657c1a" title="411 :No recipient given (&lt;command&gt;)">LIBIRC_RFC_ERR_NORECIPIENT</a></li><li><a class="el" href="group__rfcnumbers.html#gc9851022435108cc6074c8cab2311b58" title="412 :No text to send">LIBIRC_RFC_ERR_NOTEXTTOSEND</a></li><li><a class="el" href="group__rfcnumbers.html#g3624990fe128d867c11b213228e62df8" title="404 &lt;channel name&gt; :Cannot send to channel">LIBIRC_RFC_ERR_CANNOTSENDTOCHAN</a></li><li><a class="el" href="group__rfcnumbers.html#gb20af2b80994d5c9d7c1e96d88f2e577" title="442 &lt;channel&gt; :You&#39;re not on that channel">LIBIRC_RFC_ERR_NOTONCHANNEL</a></li><li><a class="el" href="group__rfcnumbers.html#gfcad763cc97b268aa585311350989dca" title="413 &lt;mask&gt; :No toplevel domain specified">LIBIRC_RFC_ERR_NOTOPLEVEL</a></li><li><a class="el" href="group__rfcnumbers.html#g4cf5ceeec3305180731860436650c955" title="414 &lt;mask&gt; :Wildcard in toplevel domain">LIBIRC_RFC_ERR_WILDTOPLEVEL</a></li><li><a class="el" href="group__rfcnumbers.html#g807eab621113410281fd574de71236ea" title="407 &lt;target&gt; :&lt;error code&gt; recipients. &lt;abort message&gt;">LIBIRC_RFC_ERR_TOOMANYTARGETS</a></li><li><a class="el" href="group__rfcnumbers.html#g28f90d5f34a3056127516c0edc7c511f" title="401 &lt;nickname&gt; :No such nick/channel">LIBIRC_RFC_ERR_NOSUCHNICK</a> </li></ul>
</div>
</div><p>
<a class="anchor" name="gd3eb9e56b5988f157e6f4a9b73145382"></a><!-- doxytag: member="libircclient.h::irc_cmd_ctcp_request" ref="gd3eb9e56b5988f157e6f4a9b73145382" args="(irc_session_t *session, const char *nick, const char *request)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int irc_cmd_ctcp_request </td>
<td>(</td>
<td class="paramtype"><a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *&nbsp;</td>
<td class="paramname"> <em>session</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&nbsp;</td>
<td class="paramname"> <em>nick</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&nbsp;</td>
<td class="paramname"> <em>request</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Generates a CTCP request.
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>session</em>&nbsp;</td><td>An initiated and connected session. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>nick</em>&nbsp;</td><td>A target nick to send request to. Must not be NULL. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>request</em>&nbsp;</td><td>A request string. Must not be NULL.</td></tr>
</table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>Return code 0 means success. Other value means error, the error code may be obtained through <a class="el" href="group__errors.html#g3a18336093ee74751244d996bc32247d" title="Returns the last error code.">irc_errno()</a>. Any error, generated by the IRC server, is available through <a class="el" href="structirc__callbacks__t.html#85951d45acff22aea37a822bb9c7aef7">irc_callbacks_t::event_numeric</a>.</dd></dl>
This function is used to send a CTCP request. There are four CTCP requests supported by Mirc: VERSION - get the client software name and version FINGER - get the client username, host and real name. PING - get the client delay. TIME - get the client local time.<p>
A reply to the CTCP request will be sent by the <a class="el" href="structirc__callbacks__t.html#1e967e7534502bce5434dd4d4415bdd8">irc_callbacks_t::event_ctcp_rep</a> callback; be sure to define it.<p>
Possible error responces for this command from the RFC1459:<ul>
<li><a class="el" href="group__rfcnumbers.html#g73d5c17577fddd176f2d89e15b657c1a" title="411 :No recipient given (&lt;command&gt;)">LIBIRC_RFC_ERR_NORECIPIENT</a></li><li><a class="el" href="group__rfcnumbers.html#gc9851022435108cc6074c8cab2311b58" title="412 :No text to send">LIBIRC_RFC_ERR_NOTEXTTOSEND</a></li><li><a class="el" href="group__rfcnumbers.html#g3624990fe128d867c11b213228e62df8" title="404 &lt;channel name&gt; :Cannot send to channel">LIBIRC_RFC_ERR_CANNOTSENDTOCHAN</a></li><li><a class="el" href="group__rfcnumbers.html#gb20af2b80994d5c9d7c1e96d88f2e577" title="442 &lt;channel&gt; :You&#39;re not on that channel">LIBIRC_RFC_ERR_NOTONCHANNEL</a></li><li><a class="el" href="group__rfcnumbers.html#gfcad763cc97b268aa585311350989dca" title="413 &lt;mask&gt; :No toplevel domain specified">LIBIRC_RFC_ERR_NOTOPLEVEL</a></li><li><a class="el" href="group__rfcnumbers.html#g4cf5ceeec3305180731860436650c955" title="414 &lt;mask&gt; :Wildcard in toplevel domain">LIBIRC_RFC_ERR_WILDTOPLEVEL</a></li><li><a class="el" href="group__rfcnumbers.html#g807eab621113410281fd574de71236ea" title="407 &lt;target&gt; :&lt;error code&gt; recipients. &lt;abort message&gt;">LIBIRC_RFC_ERR_TOOMANYTARGETS</a></li><li><a class="el" href="group__rfcnumbers.html#g28f90d5f34a3056127516c0edc7c511f" title="401 &lt;nickname&gt; :No such nick/channel">LIBIRC_RFC_ERR_NOSUCHNICK</a></li></ul>
<p>
<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="structirc__callbacks__t.html#1e967e7534502bce5434dd4d4415bdd8">irc_callbacks_t::event_ctcp_rep</a> <a class="el" href="structirc__callbacks__t.html#85951d45acff22aea37a822bb9c7aef7">irc_callbacks_t::event_numeric</a> </dd></dl>
</div>
</div><p>
</div>
<hr size="1"><address style="text-align: right;"><small>Generated on Sat Jan 10 18:19:35 2009 for libircclient by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.7.1 </small></address>
</body>
</html>

View File

@ -0,0 +1,408 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>libircclient: DCC chat/send requests and replies.</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.7.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
</div>
<div class="contents">
<h1>DCC chat/send requests and replies.</h1><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Typedefs</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef void(*&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dccstuff.html#g92d4d3f7866bd8c4f1d6df8f05d939f9">irc_dcc_callback_t</a> )(<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, <a class="el" href="libircclient_8h.html#4136d52803e88f369d728e1e3b0e70f7">irc_dcc_t</a> id, int status, void *ctx, const char *data, unsigned int length)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A common DCC callback, used to inform you about the current DCC state or event. <a href="#g92d4d3f7866bd8c4f1d6df8f05d939f9"></a><br></td></tr>
<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dccstuff.html#gd6958aac6d67f595966949d1ec5ae4a0">irc_dcc_chat</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, void *ctx, const char *nick, <a class="el" href="group__dccstuff.html#g92d4d3f7866bd8c4f1d6df8f05d939f9">irc_dcc_callback_t</a> callback, <a class="el" href="libircclient_8h.html#4136d52803e88f369d728e1e3b0e70f7">irc_dcc_t</a> *dccid)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initiates a DCC CHAT. <a href="#gd6958aac6d67f595966949d1ec5ae4a0"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dccstuff.html#gb98b7ea58a36d7649c2dca6c4b3c8a7d">irc_dcc_msg</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, <a class="el" href="libircclient_8h.html#4136d52803e88f369d728e1e3b0e70f7">irc_dcc_t</a> dccid, const char *text)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sends the message to the specific DCC CHAT. <a href="#gb98b7ea58a36d7649c2dca6c4b3c8a7d"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dccstuff.html#g43f747d3b2252109f9d811ea8414745b">irc_dcc_accept</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, <a class="el" href="libircclient_8h.html#4136d52803e88f369d728e1e3b0e70f7">irc_dcc_t</a> dccid, void *ctx, <a class="el" href="group__dccstuff.html#g92d4d3f7866bd8c4f1d6df8f05d939f9">irc_dcc_callback_t</a> callback)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Accepts a remote DCC CHAT or DCC RECVFILE request. <a href="#g43f747d3b2252109f9d811ea8414745b"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dccstuff.html#g3ff4ca78d346b7acf847cf28a7211bf4">irc_dcc_decline</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, <a class="el" href="libircclient_8h.html#4136d52803e88f369d728e1e3b0e70f7">irc_dcc_t</a> dccid)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Declines a remote DCC CHAT or DCC RECVFILE request. <a href="#g3ff4ca78d346b7acf847cf28a7211bf4"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dccstuff.html#gf9e8a307113cd27d08e082fda6264262">irc_dcc_sendfile</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, void *ctx, const char *nick, const char *filename, <a class="el" href="group__dccstuff.html#g92d4d3f7866bd8c4f1d6df8f05d939f9">irc_dcc_callback_t</a> callback, <a class="el" href="libircclient_8h.html#4136d52803e88f369d728e1e3b0e70f7">irc_dcc_t</a> *dccid)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sends a file via DCC. <a href="#gf9e8a307113cd27d08e082fda6264262"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dccstuff.html#g8b8aa3363ee93cc395bc89ac5cc9501c">irc_dcc_destroy</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, <a class="el" href="libircclient_8h.html#4136d52803e88f369d728e1e3b0e70f7">irc_dcc_t</a> dccid)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Destroys a DCC session. <a href="#g8b8aa3363ee93cc395bc89ac5cc9501c"></a><br></td></tr>
</table>
<hr><h2>Typedef Documentation</h2>
<a class="anchor" name="g92d4d3f7866bd8c4f1d6df8f05d939f9"></a><!-- doxytag: member="libircclient.h::irc_dcc_callback_t" ref="g92d4d3f7866bd8c4f1d6df8f05d939f9" args=")(irc_session_t *session, irc_dcc_t id, int status, void *ctx, const char *data, unsigned int length)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef void(* <a class="el" href="group__dccstuff.html#g92d4d3f7866bd8c4f1d6df8f05d939f9">irc_dcc_callback_t</a>)(<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, <a class="el" href="libircclient_8h.html#4136d52803e88f369d728e1e3b0e70f7">irc_dcc_t</a> id, int status, void *ctx, const char *data, unsigned int length) </td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
A common DCC callback, used to inform you about the current DCC state or event.
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>session</em>&nbsp;</td><td>An IRC session which generates the callback </td></tr>
<tr><td valign="top"></td><td valign="top"><em>id</em>&nbsp;</td><td>A DCC session id. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>status</em>&nbsp;</td><td>An error status. 0 means no error, otherwise error code. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>ctx</em>&nbsp;</td><td>A user-supplied context. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>data</em>&nbsp;</td><td>Data supplied (if available) </td></tr>
<tr><td valign="top"></td><td valign="top"><em>length</em>&nbsp;</td><td>data length (if available)</td></tr>
</table>
</dl>
This callback is called for all DCC functions when state change occurs.<p>
For DCC CHAT, the callback is called in next circumstances:<ul>
<li><em>status</em> is LIBIRC_ERR_CLOSED: connection is closed by remote peer. After returning from the callback, the DCC session is automatically destroyed.</li><li><em>status</em> is neither 0 nor LIBIRC_ERR_CLOSED: socket I/O error (connect error, accept error, recv error, send error). After returning from the callback, the DCC session is automatically destroyed.</li><li><em>status</em> is 0: new chat message received, <em>data</em> contains the message (null-terminated string), <em>length</em> contains the message length.</li></ul>
<p>
For DCC SEND, while file is sending, callback called in next circumstances:<ul>
<li><em>status</em> is neither 0 nor LIBIRC_ERR_CLOSED: socket I/O error (connect error, accept error, recv error, send error). After returning from the callback, the DCC session is automatically destroyed.</li><li><em>status</em> is 0: new data received, <em>data</em> contains the data received, <em>length</em> contains the amount of data received.</li></ul>
<p>
For DCC RECV, while file is sending, callback called in next circumstances:<ul>
<li><em>status</em> is neither 0 nor LIBIRC_ERR_CLOSED: socket I/O error (connect error, accept error, recv error, send error). After returning from the callback, the DCC session is automatically destroyed.</li><li><em>status</em> is 0, and <em>data</em> is 0: file has been received successfully. After returning from the callback, the DCC session is automatically destroyed.</li><li><em>status</em> is 0, and <em>data</em> is not 0: new data received, <em>data</em> contains the data received, <em>length</em> contains the amount of data received. </li></ul>
</div>
</div><p>
<hr><h2>Function Documentation</h2>
<a class="anchor" name="g43f747d3b2252109f9d811ea8414745b"></a><!-- doxytag: member="libircclient.h::irc_dcc_accept" ref="g43f747d3b2252109f9d811ea8414745b" args="(irc_session_t *session, irc_dcc_t dccid, void *ctx, irc_dcc_callback_t callback)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int irc_dcc_accept </td>
<td>(</td>
<td class="paramtype"><a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *&nbsp;</td>
<td class="paramname"> <em>session</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="libircclient_8h.html#4136d52803e88f369d728e1e3b0e70f7">irc_dcc_t</a>&nbsp;</td>
<td class="paramname"> <em>dccid</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void *&nbsp;</td>
<td class="paramname"> <em>ctx</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__dccstuff.html#g92d4d3f7866bd8c4f1d6df8f05d939f9">irc_dcc_callback_t</a>&nbsp;</td>
<td class="paramname"> <em>callback</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Accepts a remote DCC CHAT or DCC RECVFILE request.
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>session</em>&nbsp;</td><td>An initiated and connected session. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>dccid</em>&nbsp;</td><td>A DCC session ID, returned by appropriate callback. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>ctx</em>&nbsp;</td><td>A user-supplied DCC session context, which will be passed to the DCC callback function. May be NULL. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>callback</em>&nbsp;</td><td>A DCC callback function, which will be called when anything is said by other party. Must not be NULL.</td></tr>
</table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>Return code 0 means success. Other value means error, the error code may be obtained through <a class="el" href="group__errors.html#g3a18336093ee74751244d996bc32247d" title="Returns the last error code.">irc_errno()</a>.</dd></dl>
This function accepts a remote DCC request - either DCC CHAT or DCC FILE. After the request is accepted, the supplied callback will be called, and you can start sending messages or receiving the file.<p>
This function should be called only after either event_dcc_chat_req or event_dcc_send_req events are generated, and should react to them. It is possible not to call irc_dcc_accept or irc_dcc_decline immediately in callback function - you may just return, and call it later. However, to prevent memory leaks, you must call either irc_dcc_decline or irc_dcc_accept for any incoming DCC request.<p>
<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="group__dccstuff.html#g3ff4ca78d346b7acf847cf28a7211bf4" title="Declines a remote DCC CHAT or DCC RECVFILE request.">irc_dcc_decline</a> event_dcc_chat_req event_dcc_send_req </dd></dl>
</div>
</div><p>
<a class="anchor" name="gd6958aac6d67f595966949d1ec5ae4a0"></a><!-- doxytag: member="libircclient.h::irc_dcc_chat" ref="gd6958aac6d67f595966949d1ec5ae4a0" args="(irc_session_t *session, void *ctx, const char *nick, irc_dcc_callback_t callback, irc_dcc_t *dccid)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int irc_dcc_chat </td>
<td>(</td>
<td class="paramtype"><a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *&nbsp;</td>
<td class="paramname"> <em>session</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void *&nbsp;</td>
<td class="paramname"> <em>ctx</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&nbsp;</td>
<td class="paramname"> <em>nick</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__dccstuff.html#g92d4d3f7866bd8c4f1d6df8f05d939f9">irc_dcc_callback_t</a>&nbsp;</td>
<td class="paramname"> <em>callback</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="libircclient_8h.html#4136d52803e88f369d728e1e3b0e70f7">irc_dcc_t</a> *&nbsp;</td>
<td class="paramname"> <em>dccid</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Initiates a DCC CHAT.
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>session</em>&nbsp;</td><td>An initiated and connected session. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>ctx</em>&nbsp;</td><td>A user-supplied DCC session context, which will be passed to the DCC callback function. May be NULL. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>nick</em>&nbsp;</td><td>A nick to DCC CHAT with. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>callback</em>&nbsp;</td><td>A DCC callback function, which will be called when anything is said by other party. Must not be NULL. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>dccid</em>&nbsp;</td><td>On success, DCC session ID will be stored in this var.</td></tr>
</table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>Return code 0 means success. Other value means error, the error code may be obtained through <a class="el" href="group__errors.html#g3a18336093ee74751244d996bc32247d" title="Returns the last error code.">irc_errno()</a>. Any error, generated by the IRC server, is available through <a class="el" href="structirc__callbacks__t.html#85951d45acff22aea37a822bb9c7aef7">irc_callbacks_t::event_numeric</a>.</dd></dl>
This function requests a DCC CHAT between you and other user. For newbies, DCC chat is like private chat, but it goes directly between two users, and bypasses IRC server. DCC CHAT request must be accepted by other side before you can send anything.<p>
When the chat is accepted, terminated, or some data is received, the callback function is called. See the details in irc_dcc_callback_t declaration.<p>
Possible error responces for this command from the RFC1459:<ul>
<li><a class="el" href="group__rfcnumbers.html#g73d5c17577fddd176f2d89e15b657c1a" title="411 :No recipient given (&lt;command&gt;)">LIBIRC_RFC_ERR_NORECIPIENT</a></li><li><a class="el" href="group__rfcnumbers.html#gc9851022435108cc6074c8cab2311b58" title="412 :No text to send">LIBIRC_RFC_ERR_NOTEXTTOSEND</a></li><li><a class="el" href="group__rfcnumbers.html#g3624990fe128d867c11b213228e62df8" title="404 &lt;channel name&gt; :Cannot send to channel">LIBIRC_RFC_ERR_CANNOTSENDTOCHAN</a></li><li><a class="el" href="group__rfcnumbers.html#gb20af2b80994d5c9d7c1e96d88f2e577" title="442 &lt;channel&gt; :You&#39;re not on that channel">LIBIRC_RFC_ERR_NOTONCHANNEL</a></li><li><a class="el" href="group__rfcnumbers.html#gfcad763cc97b268aa585311350989dca" title="413 &lt;mask&gt; :No toplevel domain specified">LIBIRC_RFC_ERR_NOTOPLEVEL</a></li><li><a class="el" href="group__rfcnumbers.html#g4cf5ceeec3305180731860436650c955" title="414 &lt;mask&gt; :Wildcard in toplevel domain">LIBIRC_RFC_ERR_WILDTOPLEVEL</a></li><li><a class="el" href="group__rfcnumbers.html#g807eab621113410281fd574de71236ea" title="407 &lt;target&gt; :&lt;error code&gt; recipients. &lt;abort message&gt;">LIBIRC_RFC_ERR_TOOMANYTARGETS</a></li><li><a class="el" href="group__rfcnumbers.html#g28f90d5f34a3056127516c0edc7c511f" title="401 &lt;nickname&gt; :No such nick/channel">LIBIRC_RFC_ERR_NOSUCHNICK</a></li></ul>
<p>
<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="group__dccstuff.html#g92d4d3f7866bd8c4f1d6df8f05d939f9" title="A common DCC callback, used to inform you about the current DCC state or event.">irc_dcc_callback_t</a> <a class="el" href="group__dccstuff.html#gb98b7ea58a36d7649c2dca6c4b3c8a7d" title="Sends the message to the specific DCC CHAT.">irc_dcc_msg</a> </dd></dl>
</div>
</div><p>
<a class="anchor" name="g3ff4ca78d346b7acf847cf28a7211bf4"></a><!-- doxytag: member="libircclient.h::irc_dcc_decline" ref="g3ff4ca78d346b7acf847cf28a7211bf4" args="(irc_session_t *session, irc_dcc_t dccid)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int irc_dcc_decline </td>
<td>(</td>
<td class="paramtype"><a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *&nbsp;</td>
<td class="paramname"> <em>session</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="libircclient_8h.html#4136d52803e88f369d728e1e3b0e70f7">irc_dcc_t</a>&nbsp;</td>
<td class="paramname"> <em>dccid</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Declines a remote DCC CHAT or DCC RECVFILE request.
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>session</em>&nbsp;</td><td>An initiated and connected session. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>dccid</em>&nbsp;</td><td>A DCC session ID, returned by appropriate callback.</td></tr>
</table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>Return code 0 means success. Other value means error, the error code may be obtained through <a class="el" href="group__errors.html#g3a18336093ee74751244d996bc32247d" title="Returns the last error code.">irc_errno()</a>.</dd></dl>
This function declines a remote DCC request - either DCC CHAT or DCC FILE.<p>
This function should be called only after either event_dcc_chat_req or event_dcc_send_req events are generated, and should react to them. It is possible not to call irc_dcc_accept or irc_dcc_decline immediately in callback function - you may just return, and call it later. However, to prevent memory leaks, you must call either irc_dcc_decline or irc_dcc_accept for any incoming DCC request.<p>
Do not use this function to close the accepted or initiated DCC session. Use irc_dcc_destroy instead.<p>
<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="group__dccstuff.html#g43f747d3b2252109f9d811ea8414745b" title="Accepts a remote DCC CHAT or DCC RECVFILE request.">irc_dcc_accept</a> <a class="el" href="structirc__callbacks__t.html#fbaf019778a64b544093ee29da5b3c81">irc_callbacks_t::event_dcc_chat_req</a> <a class="el" href="structirc__callbacks__t.html#2ac9d08921faee2472ed16d41799887d">irc_callbacks_t::event_dcc_send_req</a> <a class="el" href="group__dccstuff.html#g8b8aa3363ee93cc395bc89ac5cc9501c" title="Destroys a DCC session.">irc_dcc_destroy</a> </dd></dl>
</div>
</div><p>
<a class="anchor" name="g8b8aa3363ee93cc395bc89ac5cc9501c"></a><!-- doxytag: member="libircclient.h::irc_dcc_destroy" ref="g8b8aa3363ee93cc395bc89ac5cc9501c" args="(irc_session_t *session, irc_dcc_t dccid)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int irc_dcc_destroy </td>
<td>(</td>
<td class="paramtype"><a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *&nbsp;</td>
<td class="paramname"> <em>session</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="libircclient_8h.html#4136d52803e88f369d728e1e3b0e70f7">irc_dcc_t</a>&nbsp;</td>
<td class="paramname"> <em>dccid</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Destroys a DCC session.
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>session</em>&nbsp;</td><td>An initiated and connected session. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>dccid</em>&nbsp;</td><td>A DCC session ID.</td></tr>
</table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>Return code 0 means success. Other value means error, the error code may be obtained through <a class="el" href="group__errors.html#g3a18336093ee74751244d996bc32247d" title="Returns the last error code.">irc_errno()</a>.</dd></dl>
This function closes the DCC connection (if available), and destroys the DCC session, freeing the used resources. It can be called in any moment, even from callbacks or from different threads.<p>
Note that when DCC session is finished (either with success or failure), you should not destroy it - it will be destroyed automatically.
</div>
</div><p>
<a class="anchor" name="gb98b7ea58a36d7649c2dca6c4b3c8a7d"></a><!-- doxytag: member="libircclient.h::irc_dcc_msg" ref="gb98b7ea58a36d7649c2dca6c4b3c8a7d" args="(irc_session_t *session, irc_dcc_t dccid, const char *text)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int irc_dcc_msg </td>
<td>(</td>
<td class="paramtype"><a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *&nbsp;</td>
<td class="paramname"> <em>session</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="libircclient_8h.html#4136d52803e88f369d728e1e3b0e70f7">irc_dcc_t</a>&nbsp;</td>
<td class="paramname"> <em>dccid</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&nbsp;</td>
<td class="paramname"> <em>text</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Sends the message to the specific DCC CHAT.
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>session</em>&nbsp;</td><td>An IRC session. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>dccid</em>&nbsp;</td><td>A DCC session ID, which chat request must have been accepted. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>text</em>&nbsp;</td><td>Message text. Must not be NULL.</td></tr>
</table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>Return code 0 means success. Other value means error, the error code may be obtained through <a class="el" href="group__errors.html#g3a18336093ee74751244d996bc32247d" title="Returns the last error code.">irc_errno()</a>.</dd></dl>
This function is used to send the DCC CHAT messages. DCC CHAT request must be initiated and accepted first (or just accepted, if initiated by other side).<p>
<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="group__dccstuff.html#gd6958aac6d67f595966949d1ec5ae4a0" title="Initiates a DCC CHAT.">irc_dcc_chat</a> </dd></dl>
</div>
</div><p>
<a class="anchor" name="gf9e8a307113cd27d08e082fda6264262"></a><!-- doxytag: member="libircclient.h::irc_dcc_sendfile" ref="gf9e8a307113cd27d08e082fda6264262" args="(irc_session_t *session, void *ctx, const char *nick, const char *filename, irc_dcc_callback_t callback, irc_dcc_t *dccid)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int irc_dcc_sendfile </td>
<td>(</td>
<td class="paramtype"><a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *&nbsp;</td>
<td class="paramname"> <em>session</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void *&nbsp;</td>
<td class="paramname"> <em>ctx</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&nbsp;</td>
<td class="paramname"> <em>nick</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&nbsp;</td>
<td class="paramname"> <em>filename</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__dccstuff.html#g92d4d3f7866bd8c4f1d6df8f05d939f9">irc_dcc_callback_t</a>&nbsp;</td>
<td class="paramname"> <em>callback</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="libircclient_8h.html#4136d52803e88f369d728e1e3b0e70f7">irc_dcc_t</a> *&nbsp;</td>
<td class="paramname"> <em>dccid</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Sends a file via DCC.
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>session</em>&nbsp;</td><td>An initiated and connected session. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>ctx</em>&nbsp;</td><td>A user-supplied DCC session context, which will be passed to the DCC callback function. May be NULL. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>nick</em>&nbsp;</td><td>A nick to send file via DCC to. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>filename</em>&nbsp;</td><td>A file name to sent. Must be an existing file. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>callback</em>&nbsp;</td><td>A DCC callback function, which will be called when file sent operation is failed, progressed or completed. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>dccid</em>&nbsp;</td><td>On success, DCC session ID will be stored in this var.</td></tr>
</table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>Return code 0 means success. Other value means error, the error code may be obtained through <a class="el" href="group__errors.html#g3a18336093ee74751244d996bc32247d" title="Returns the last error code.">irc_errno()</a>. Any error, generated by the IRC server, is available through <a class="el" href="structirc__callbacks__t.html#85951d45acff22aea37a822bb9c7aef7">irc_callbacks_t::event_numeric</a>.</dd></dl>
This function generates a DCC SEND request to send the file. When it is accepted, the file is sent to the remote party, and the DCC session is closed. The send operation progress and result can be checked in callback. See the details in irc_dcc_callback_t declaration.<p>
Possible error responces for this command from the RFC1459:<ul>
<li><a class="el" href="group__rfcnumbers.html#g73d5c17577fddd176f2d89e15b657c1a" title="411 :No recipient given (&lt;command&gt;)">LIBIRC_RFC_ERR_NORECIPIENT</a></li><li><a class="el" href="group__rfcnumbers.html#gc9851022435108cc6074c8cab2311b58" title="412 :No text to send">LIBIRC_RFC_ERR_NOTEXTTOSEND</a></li><li><a class="el" href="group__rfcnumbers.html#g3624990fe128d867c11b213228e62df8" title="404 &lt;channel name&gt; :Cannot send to channel">LIBIRC_RFC_ERR_CANNOTSENDTOCHAN</a></li><li><a class="el" href="group__rfcnumbers.html#gb20af2b80994d5c9d7c1e96d88f2e577" title="442 &lt;channel&gt; :You&#39;re not on that channel">LIBIRC_RFC_ERR_NOTONCHANNEL</a></li><li><a class="el" href="group__rfcnumbers.html#gfcad763cc97b268aa585311350989dca" title="413 &lt;mask&gt; :No toplevel domain specified">LIBIRC_RFC_ERR_NOTOPLEVEL</a></li><li><a class="el" href="group__rfcnumbers.html#g4cf5ceeec3305180731860436650c955" title="414 &lt;mask&gt; :Wildcard in toplevel domain">LIBIRC_RFC_ERR_WILDTOPLEVEL</a></li><li><a class="el" href="group__rfcnumbers.html#g807eab621113410281fd574de71236ea" title="407 &lt;target&gt; :&lt;error code&gt; recipients. &lt;abort message&gt;">LIBIRC_RFC_ERR_TOOMANYTARGETS</a></li><li><a class="el" href="group__rfcnumbers.html#g28f90d5f34a3056127516c0edc7c511f" title="401 &lt;nickname&gt; :No such nick/channel">LIBIRC_RFC_ERR_NOSUCHNICK</a></li></ul>
<p>
<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="group__dccstuff.html#g92d4d3f7866bd8c4f1d6df8f05d939f9" title="A common DCC callback, used to inform you about the current DCC state or event.">irc_dcc_callback_t</a> </dd></dl>
</div>
</div><p>
</div>
<hr size="1"><address style="text-align: right;"><small>Generated on Sat Jan 10 18:19:35 2009 for libircclient by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.7.1 </small></address>
</body>
</html>

View File

@ -0,0 +1,353 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>libircclient: Error codes generated by libircclient.</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.7.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
</div>
<div class="contents">
<h1>Error codes generated by libircclient.</h1><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__errorcodes.html#g7614d0e18de5a72ac8f64a9435a8c856">LIBIRC_ERR_OK</a>&nbsp;&nbsp;&nbsp;0</td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__errorcodes.html#g4b8be458368833c2c72d19cccd33ac34">LIBIRC_ERR_INVAL</a>&nbsp;&nbsp;&nbsp;1</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Invalid argument. <a href="#g4b8be458368833c2c72d19cccd33ac34"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__errorcodes.html#g8603eb7b72065c7bf48e89ed7aab09cd">LIBIRC_ERR_RESOLV</a>&nbsp;&nbsp;&nbsp;2</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Could not resolve host. <a href="#g8603eb7b72065c7bf48e89ed7aab09cd"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__errorcodes.html#gf48bc4c473962372807277dfeb6cf070">LIBIRC_ERR_SOCKET</a>&nbsp;&nbsp;&nbsp;3</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Could not create socket. <a href="#gf48bc4c473962372807277dfeb6cf070"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__errorcodes.html#ga3a48839adc6e93968e77bf92606ac07">LIBIRC_ERR_CONNECT</a>&nbsp;&nbsp;&nbsp;4</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Could not connect. <a href="#ga3a48839adc6e93968e77bf92606ac07"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__errorcodes.html#gf932ba7fb2e7bf4f6ed970b5cb8e715b">LIBIRC_ERR_CLOSED</a>&nbsp;&nbsp;&nbsp;5</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Connection closed by remote peer. <a href="#gf932ba7fb2e7bf4f6ed970b5cb8e715b"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__errorcodes.html#g1ec9f29808aef1acaf8872d45395764b">LIBIRC_ERR_NOMEM</a>&nbsp;&nbsp;&nbsp;6</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Out of memory. <a href="#g1ec9f29808aef1acaf8872d45395764b"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__errorcodes.html#gabf548a884eaf6f7f72b62be6f5946d4">LIBIRC_ERR_ACCEPT</a>&nbsp;&nbsp;&nbsp;7</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Could not accept new connection. <a href="#gabf548a884eaf6f7f72b62be6f5946d4"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__errorcodes.html#g7aebc49be2d25f795ef1e0fe8e96f12f">LIBIRC_ERR_NODCCSEND</a>&nbsp;&nbsp;&nbsp;9</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Could not send this. <a href="#g7aebc49be2d25f795ef1e0fe8e96f12f"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__errorcodes.html#ga276fdc66a5e96ab31b86269775ad681">LIBIRC_ERR_READ</a>&nbsp;&nbsp;&nbsp;10</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Could not read DCC file or socket. <a href="#ga276fdc66a5e96ab31b86269775ad681"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__errorcodes.html#g68d74be1d70d3a15df8976c186e4563a">LIBIRC_ERR_WRITE</a>&nbsp;&nbsp;&nbsp;11</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Could not write DCC file or socket. <a href="#g68d74be1d70d3a15df8976c186e4563a"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__errorcodes.html#g4d4d45b7610aeacd2a142c078a57d38a">LIBIRC_ERR_STATE</a>&nbsp;&nbsp;&nbsp;12</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Invalid state. <a href="#g4d4d45b7610aeacd2a142c078a57d38a"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__errorcodes.html#gcb3673b06a83b11e915bbe53232f2225">LIBIRC_ERR_TIMEOUT</a>&nbsp;&nbsp;&nbsp;13</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Operation timed out. <a href="#gcb3673b06a83b11e915bbe53232f2225"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__errorcodes.html#gbb77f834415ae0a332f823540a5b3245">LIBIRC_ERR_OPENFILE</a>&nbsp;&nbsp;&nbsp;14</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Could not open file for DCC send. <a href="#gbb77f834415ae0a332f823540a5b3245"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__errorcodes.html#g18e0ddcfe90da17b27e52e273a5ec1f5">LIBIRC_ERR_TERMINATED</a>&nbsp;&nbsp;&nbsp;15</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">IRC server connection terminated. <a href="#g18e0ddcfe90da17b27e52e273a5ec1f5"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__errorcodes.html#g5880d5a307f66aaaaf7df7cbf4c165a6">LIBIRC_ERR_NOIPV6</a>&nbsp;&nbsp;&nbsp;16</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">IPv6 not supported. <a href="#g5880d5a307f66aaaaf7df7cbf4c165a6"></a><br></td></tr>
</table>
<hr><h2>Define Documentation</h2>
<a class="anchor" name="gabf548a884eaf6f7f72b62be6f5946d4"></a><!-- doxytag: member="libirc_errors.h::LIBIRC_ERR_ACCEPT" ref="gabf548a884eaf6f7f72b62be6f5946d4" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define LIBIRC_ERR_ACCEPT&nbsp;&nbsp;&nbsp;7 </td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Could not accept new connection.
<p>
A DCC chat/send connection from the remote peer could not be accepted. Either the connection was just terminated before it is accepted, or there is a bug in libircclient.
</div>
</div><p>
<a class="anchor" name="gf932ba7fb2e7bf4f6ed970b5cb8e715b"></a><!-- doxytag: member="libirc_errors.h::LIBIRC_ERR_CLOSED" ref="gf932ba7fb2e7bf4f6ed970b5cb8e715b" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define LIBIRC_ERR_CLOSED&nbsp;&nbsp;&nbsp;5 </td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Connection closed by remote peer.
<p>
The IRC connection was closed by the IRC server (which could mean that an IRC operator just have banned you from the server :)), or the DCC connection was closed by remote peer - for example, the other side just quits his mIrc. Usually it is not an error.<p>
<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="group__running.html#g112631b75eb9997868d73fede17440d0" title="Goes into forever-loop, processing IRC events and generating callbacks.">irc_run</a> <a class="el" href="group__conndisc.html#g121b23c9e131da651175ae779e1b6851" title="Initiates a connection to IRC server.">irc_connect</a> <a class="el" href="group__dccstuff.html#g92d4d3f7866bd8c4f1d6df8f05d939f9" title="A common DCC callback, used to inform you about the current DCC state or event.">irc_dcc_callback_t</a> </dd></dl>
</div>
</div><p>
<a class="anchor" name="ga3a48839adc6e93968e77bf92606ac07"></a><!-- doxytag: member="libirc_errors.h::LIBIRC_ERR_CONNECT" ref="ga3a48839adc6e93968e77bf92606ac07" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define LIBIRC_ERR_CONNECT&nbsp;&nbsp;&nbsp;4 </td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Could not connect.
<p>
The socket could not connect to the IRC server, or to the destination DCC part. Usually means that either the IRC server is down or its address is invalid. For DCC the reason usually is the firewall on your or destination computer, which refuses DCC transfer.<p>
<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="group__running.html#g112631b75eb9997868d73fede17440d0" title="Goes into forever-loop, processing IRC events and generating callbacks.">irc_run</a> <a class="el" href="group__conndisc.html#g121b23c9e131da651175ae779e1b6851" title="Initiates a connection to IRC server.">irc_connect</a> </dd></dl>
</div>
</div><p>
<a class="anchor" name="g4b8be458368833c2c72d19cccd33ac34"></a><!-- doxytag: member="libirc_errors.h::LIBIRC_ERR_INVAL" ref="g4b8be458368833c2c72d19cccd33ac34" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define LIBIRC_ERR_INVAL&nbsp;&nbsp;&nbsp;1 </td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Invalid argument.
<p>
An invalid value was given for one of the arguments to a function. For example, supplying the NULL value for <em>channel</em> argument of <a class="el" href="group__ircmd__ch.html#g4960c546c2a077e8fb01fc7aa5ae7add" title="Joins the new IRC channel.">irc_cmd_join()</a> produces LIBIRC_ERR_INVAL error. You should fix the code.
</div>
</div><p>
<a class="anchor" name="g7aebc49be2d25f795ef1e0fe8e96f12f"></a><!-- doxytag: member="libirc_errors.h::LIBIRC_ERR_NODCCSEND" ref="g7aebc49be2d25f795ef1e0fe8e96f12f" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define LIBIRC_ERR_NODCCSEND&nbsp;&nbsp;&nbsp;9 </td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Could not send this.
<p>
A <em>filename</em> supplied to <a class="el" href="group__dccstuff.html#gf9e8a307113cd27d08e082fda6264262" title="Sends a file via DCC.">irc_dcc_sendfile()</a> could not be sent. Either is is not a file (a directory or a socket, for example), or it is not readable. *<p>
<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="group__errorcodes.html#gbb77f834415ae0a332f823540a5b3245" title="Could not open file for DCC send.">LIBIRC_ERR_OPENFILE</a> </dd></dl>
</div>
</div><p>
<a class="anchor" name="g5880d5a307f66aaaaf7df7cbf4c165a6"></a><!-- doxytag: member="libirc_errors.h::LIBIRC_ERR_NOIPV6" ref="g5880d5a307f66aaaaf7df7cbf4c165a6" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define LIBIRC_ERR_NOIPV6&nbsp;&nbsp;&nbsp;16 </td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
IPv6 not supported.
<p>
The function which requires IPv6 support was called, but the IPv6 support was not compiled into the application
</div>
</div><p>
<a class="anchor" name="g1ec9f29808aef1acaf8872d45395764b"></a><!-- doxytag: member="libirc_errors.h::LIBIRC_ERR_NOMEM" ref="g1ec9f29808aef1acaf8872d45395764b" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define LIBIRC_ERR_NOMEM&nbsp;&nbsp;&nbsp;6 </td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Out of memory.
<p>
There are two possible reasons for this error. First is that memory could not be allocated for libircclient use, and this error usually is fatal. Second reason is that the command queue (which keeps command ready to be sent to the IRC server) is full, and could not accept more commands yet. In this case you should just wait, and repeat the command later.
</div>
</div><p>
<a class="anchor" name="g7614d0e18de5a72ac8f64a9435a8c856"></a><!-- doxytag: member="libirc_errors.h::LIBIRC_ERR_OK" ref="g7614d0e18de5a72ac8f64a9435a8c856" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define LIBIRC_ERR_OK&nbsp;&nbsp;&nbsp;0 </td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
brief No error
</div>
</div><p>
<a class="anchor" name="gbb77f834415ae0a332f823540a5b3245"></a><!-- doxytag: member="libirc_errors.h::LIBIRC_ERR_OPENFILE" ref="gbb77f834415ae0a332f823540a5b3245" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define LIBIRC_ERR_OPENFILE&nbsp;&nbsp;&nbsp;14 </td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Could not open file for DCC send.
<p>
The file specified in <a class="el" href="group__dccstuff.html#gf9e8a307113cd27d08e082fda6264262" title="Sends a file via DCC.">irc_dcc_sendfile()</a> could not be opened.
</div>
</div><p>
<a class="anchor" name="ga276fdc66a5e96ab31b86269775ad681"></a><!-- doxytag: member="libirc_errors.h::LIBIRC_ERR_READ" ref="ga276fdc66a5e96ab31b86269775ad681" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define LIBIRC_ERR_READ&nbsp;&nbsp;&nbsp;10 </td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Could not read DCC file or socket.
<p>
Either a DCC file could not be read (for example, was truncated during sending), or a DCC socket returns a read error, which usually means that the network connection is terminated.
</div>
</div><p>
<a class="anchor" name="g8603eb7b72065c7bf48e89ed7aab09cd"></a><!-- doxytag: member="libirc_errors.h::LIBIRC_ERR_RESOLV" ref="g8603eb7b72065c7bf48e89ed7aab09cd" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define LIBIRC_ERR_RESOLV&nbsp;&nbsp;&nbsp;2 </td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Could not resolve host.
<p>
The host name supplied for <a class="el" href="group__conndisc.html#g121b23c9e131da651175ae779e1b6851" title="Initiates a connection to IRC server.">irc_connect()</a> function could not be resolved into valid IP address. Usually means that host name is invalid.
</div>
</div><p>
<a class="anchor" name="gf48bc4c473962372807277dfeb6cf070"></a><!-- doxytag: member="libirc_errors.h::LIBIRC_ERR_SOCKET" ref="gf48bc4c473962372807277dfeb6cf070" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define LIBIRC_ERR_SOCKET&nbsp;&nbsp;&nbsp;3 </td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Could not create socket.
<p>
The new socket could not be created or made non-blocking. Usually means that the server is out of resources, or (rarely :) a bug in libircclient.
</div>
</div><p>
<a class="anchor" name="g4d4d45b7610aeacd2a142c078a57d38a"></a><!-- doxytag: member="libirc_errors.h::LIBIRC_ERR_STATE" ref="g4d4d45b7610aeacd2a142c078a57d38a" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define LIBIRC_ERR_STATE&nbsp;&nbsp;&nbsp;12 </td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Invalid state.
<p>
The function is called when it is not allowed to be called. For example, <a class="el" href="group__ircmd__ch.html#g4960c546c2a077e8fb01fc7aa5ae7add" title="Joins the new IRC channel.">irc_cmd_join()</a> was called before the connection to IRC server succeed, and event_connect is called.
</div>
</div><p>
<a class="anchor" name="g18e0ddcfe90da17b27e52e273a5ec1f5"></a><!-- doxytag: member="libirc_errors.h::LIBIRC_ERR_TERMINATED" ref="g18e0ddcfe90da17b27e52e273a5ec1f5" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define LIBIRC_ERR_TERMINATED&nbsp;&nbsp;&nbsp;15 </td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
IRC server connection terminated.
<p>
The connection to the IRC server was terminated - possibly, by network error. Try to <a class="el" href="group__conndisc.html#g121b23c9e131da651175ae779e1b6851" title="Initiates a connection to IRC server.">irc_connect()</a> again.
</div>
</div><p>
<a class="anchor" name="gcb3673b06a83b11e915bbe53232f2225"></a><!-- doxytag: member="libirc_errors.h::LIBIRC_ERR_TIMEOUT" ref="gcb3673b06a83b11e915bbe53232f2225" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define LIBIRC_ERR_TIMEOUT&nbsp;&nbsp;&nbsp;13 </td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Operation timed out.
<p>
The DCC request is timed out. There is a timer for each DCC request, which tracks connecting, accepting and non-accepted/declined DCC requests. For every request this timer is currently 60 seconds. If the DCC request was not connected, accepted or declined during this time, it will be terminated with this error.
</div>
</div><p>
<a class="anchor" name="g68d74be1d70d3a15df8976c186e4563a"></a><!-- doxytag: member="libirc_errors.h::LIBIRC_ERR_WRITE" ref="g68d74be1d70d3a15df8976c186e4563a" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define LIBIRC_ERR_WRITE&nbsp;&nbsp;&nbsp;11 </td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Could not write DCC file or socket.
<p>
Either a DCC file could not be written (for example, there is no free space on disk), or a DCC socket returns a write error, which usually means that the network connection is terminated.
</div>
</div><p>
</div>
<hr size="1"><address style="text-align: right;"><small>Generated on Sat Jan 10 18:19:35 2009 for libircclient by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.7.1 </small></address>
</body>
</html>

View File

@ -0,0 +1,97 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>libircclient: Obtaining error values and descriptions.</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.7.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
</div>
<div class="contents">
<h1>Obtaining error values and descriptions.</h1><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__errors.html#g3a18336093ee74751244d996bc32247d">irc_errno</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the last error code. <a href="#g3a18336093ee74751244d996bc32247d"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">const char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__errors.html#gfdc70ca04626818d2fd9a55da0b90e5f">irc_strerror</a> (int ircerrno)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the text error message associated with this error code. <a href="#gfdc70ca04626818d2fd9a55da0b90e5f"></a><br></td></tr>
</table>
<hr><h2>Function Documentation</h2>
<a class="anchor" name="g3a18336093ee74751244d996bc32247d"></a><!-- doxytag: member="libircclient.h::irc_errno" ref="g3a18336093ee74751244d996bc32247d" args="(irc_session_t *session)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int irc_errno </td>
<td>(</td>
<td class="paramtype"><a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *&nbsp;</td>
<td class="paramname"> <em>session</em> </td>
<td>&nbsp;)&nbsp;</td>
<td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Returns the last error code.
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>session</em>&nbsp;</td><td>An initiated session.</td></tr>
</table>
</dl>
This function returns the last error code associated with last operation of this IRC session. Possible error codes are defined in <a class="el" href="libirc__errors_8h.html" title="This file defines error codes generated by libircclient.">libirc_errors.h</a><p>
As usual, next errno rules apply:<ul>
<li><a class="el" href="group__errors.html#g3a18336093ee74751244d996bc32247d" title="Returns the last error code.">irc_errno()</a> should be called ONLY if the called function fails;</li><li><a class="el" href="group__errors.html#g3a18336093ee74751244d996bc32247d" title="Returns the last error code.">irc_errno()</a> doesn't return 0 if function succeed; actually, the return value will be undefined.</li><li>you should call <a class="el" href="group__errors.html#g3a18336093ee74751244d996bc32247d" title="Returns the last error code.">irc_errno()</a> IMMEDIATELY after function fails, before calling any other libircclient function.</li></ul>
<p>
<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="group__errors.html#gfdc70ca04626818d2fd9a55da0b90e5f" title="Returns the text error message associated with this error code.">irc_strerror</a> </dd></dl>
</div>
</div><p>
<a class="anchor" name="gfdc70ca04626818d2fd9a55da0b90e5f"></a><!-- doxytag: member="libircclient.h::irc_strerror" ref="gfdc70ca04626818d2fd9a55da0b90e5f" args="(int ircerrno)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">const char * irc_strerror </td>
<td>(</td>
<td class="paramtype">int&nbsp;</td>
<td class="paramname"> <em>ircerrno</em> </td>
<td>&nbsp;)&nbsp;</td>
<td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Returns the text error message associated with this error code.
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>ircerrno</em>&nbsp;</td><td>A numeric error code returned by <a class="el" href="group__errors.html#g3a18336093ee74751244d996bc32247d" title="Returns the last error code.">irc_errno()</a></td></tr>
</table>
</dl>
This function returns the text representation of the given error code.<p>
<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="group__errors.html#g3a18336093ee74751244d996bc32247d" title="Returns the last error code.">irc_errno()</a> </dd></dl>
</div>
</div><p>
</div>
<hr size="1"><address style="text-align: right;"><small>Generated on Sat Jan 10 18:19:35 2009 for libircclient by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.7.1 </small></address>
</body>
</html>

View File

@ -0,0 +1,156 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>libircclient: Handling IRC events.</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.7.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
</div>
<div class="contents">
<h1>Handling IRC events.</h1><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Data Structures</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structirc__callbacks__t.html">irc_callbacks_t</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Event callbacks structure. <a href="structirc__callbacks__t.html#_details">More...</a><br></td></tr>
<tr><td colspan="2"><br><h2>Typedefs</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef void(*&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__events.html#gc472d3e37df8f172fed3d75e649fac14">irc_event_callback_t</a> )(<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, const char *event, const char *origin, const char **params, unsigned int count)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A most common event callback. <a href="#gc472d3e37df8f172fed3d75e649fac14"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef void(*&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__events.html#gb6000d309e87cfb727dcad0136fcb79f">irc_eventcode_callback_t</a> )(<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, unsigned int event, const char *origin, const char **params, unsigned int count)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A numeric event callback. <a href="#gb6000d309e87cfb727dcad0136fcb79f"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef void(*&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__events.html#g8c3ddaa55e5ded002b5054f0b926381c">irc_event_dcc_chat_t</a> )(<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, const char *nick, const char *addr, <a class="el" href="libircclient_8h.html#4136d52803e88f369d728e1e3b0e70f7">irc_dcc_t</a> dccid)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A remote DCC CHAT request callback. <a href="#g8c3ddaa55e5ded002b5054f0b926381c"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef void(*&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__events.html#g5f4b1d95f2d6619041f993ba748544cf">irc_event_dcc_send_t</a> )(<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, const char *nick, const char *addr, const char *filename, unsigned long size, <a class="el" href="libircclient_8h.html#4136d52803e88f369d728e1e3b0e70f7">irc_dcc_t</a> dccid)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A remote DCC CHAT request callback. <a href="#g5f4b1d95f2d6619041f993ba748544cf"></a><br></td></tr>
</table>
<hr><h2>Typedef Documentation</h2>
<a class="anchor" name="gc472d3e37df8f172fed3d75e649fac14"></a><!-- doxytag: member="libirc_events.h::irc_event_callback_t" ref="gc472d3e37df8f172fed3d75e649fac14" args=")(irc_session_t *session, const char *event, const char *origin, const char **params, unsigned int count)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef void(* <a class="el" href="group__events.html#gc472d3e37df8f172fed3d75e649fac14">irc_event_callback_t</a>)(<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, const char *event, const char *origin, const char **params, unsigned int count) </td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
A most common event callback.
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>session</em>&nbsp;</td><td>the session, which generates an event </td></tr>
<tr><td valign="top"></td><td valign="top"><em>event</em>&nbsp;</td><td>the text name of the event. Useful in case you use a single event handler for several events simultaneously. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>origin</em>&nbsp;</td><td>the originator of the event. See the note below. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>params</em>&nbsp;</td><td>a list of event params. Depending on the event nature, it could have zero or more params. The actual number of params is specified in count. None of the params can be NULL, but 'params' pointer itself could be NULL for some events. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>count</em>&nbsp;</td><td>the total number of params supplied.</td></tr>
</table>
</dl>
Every event generates a callback. This callback is generated by most events. Depending on the event nature, it can provide zero or more params. For each event, the number of provided params is fixed, and their meaning is described.<p>
Every event has origin, though the <em>origin</em> variable may be NULL, which means that event origin is unknown. The origin usually looks like nick!host@ircserver, i.e. like tim!home@irc.krasnogorsk.ru. Such origins can not be used in IRC commands, and need to be stripped (i.e. host and server part should be cut off) before using. This can be done either explicitly, by calling <a class="el" href="group__nnparse.html#g217df7c7c7dc5e60678dd14e24e41f03" title="Gets the nick part from the target.">irc_target_get_nick()</a>, or implicitly for all the events - by setting the <a class="el" href="group__options.html#g0dd67b0a5373a108d86d911fa5741e72" title="allows to strip origins automatically.">LIBIRC_OPTION_STRIPNICKS</a> option with <a class="el" href="group__options.html#gc5d81f651f1441690f3f59c3ddccaa48" title="Sets the libircclient option.">irc_option_set()</a>.
</div>
</div><p>
<a class="anchor" name="g8c3ddaa55e5ded002b5054f0b926381c"></a><!-- doxytag: member="libirc_events.h::irc_event_dcc_chat_t" ref="g8c3ddaa55e5ded002b5054f0b926381c" args=")(irc_session_t *session, const char *nick, const char *addr, irc_dcc_t dccid)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef void(* <a class="el" href="group__events.html#g8c3ddaa55e5ded002b5054f0b926381c">irc_event_dcc_chat_t</a>)(<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, const char *nick, const char *addr, <a class="el" href="libircclient_8h.html#4136d52803e88f369d728e1e3b0e70f7">irc_dcc_t</a> dccid) </td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
A remote DCC CHAT request callback.
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>session</em>&nbsp;</td><td>the session, which generates an event </td></tr>
<tr><td valign="top"></td><td valign="top"><em>nick</em>&nbsp;</td><td>the person who requested DCC CHAT with you. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>addr</em>&nbsp;</td><td>the person's IP address in decimal-dot notation. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>dccid</em>&nbsp;</td><td>an id associated with this request. Use it in calls to <a class="el" href="group__dccstuff.html#g43f747d3b2252109f9d811ea8414745b" title="Accepts a remote DCC CHAT or DCC RECVFILE request.">irc_dcc_accept()</a> or <a class="el" href="group__dccstuff.html#g3ff4ca78d346b7acf847cf28a7211bf4" title="Declines a remote DCC CHAT or DCC RECVFILE request.">irc_dcc_decline()</a>.</td></tr>
</table>
</dl>
This callback is called when someone requests DCC CHAT with you. In respond you should call either <a class="el" href="group__dccstuff.html#g43f747d3b2252109f9d811ea8414745b" title="Accepts a remote DCC CHAT or DCC RECVFILE request.">irc_dcc_accept()</a> to accept chat request, or <a class="el" href="group__dccstuff.html#g3ff4ca78d346b7acf847cf28a7211bf4" title="Declines a remote DCC CHAT or DCC RECVFILE request.">irc_dcc_decline()</a> to decline chat request.<p>
<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="group__dccstuff.html#g43f747d3b2252109f9d811ea8414745b" title="Accepts a remote DCC CHAT or DCC RECVFILE request.">irc_dcc_accept</a> or <a class="el" href="group__dccstuff.html#g3ff4ca78d346b7acf847cf28a7211bf4" title="Declines a remote DCC CHAT or DCC RECVFILE request.">irc_dcc_decline</a> </dd></dl>
</div>
</div><p>
<a class="anchor" name="g5f4b1d95f2d6619041f993ba748544cf"></a><!-- doxytag: member="libirc_events.h::irc_event_dcc_send_t" ref="g5f4b1d95f2d6619041f993ba748544cf" args=")(irc_session_t *session, const char *nick, const char *addr, const char *filename, unsigned long size, irc_dcc_t dccid)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef void(* <a class="el" href="group__events.html#g5f4b1d95f2d6619041f993ba748544cf">irc_event_dcc_send_t</a>)(<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, const char *nick, const char *addr, const char *filename, unsigned long size, <a class="el" href="libircclient_8h.html#4136d52803e88f369d728e1e3b0e70f7">irc_dcc_t</a> dccid) </td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
A remote DCC CHAT request callback.
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>session</em>&nbsp;</td><td>the session, which generates an event </td></tr>
<tr><td valign="top"></td><td valign="top"><em>nick</em>&nbsp;</td><td>the person who requested DCC CHAT with you. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>addr</em>&nbsp;</td><td>the person's IP address in decimal-dot notation. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>filename</em>&nbsp;</td><td>the sent filename. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>size</em>&nbsp;</td><td>the filename size. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>dccid</em>&nbsp;</td><td>an id associated with this request. Use it in calls to <a class="el" href="group__dccstuff.html#g43f747d3b2252109f9d811ea8414745b" title="Accepts a remote DCC CHAT or DCC RECVFILE request.">irc_dcc_accept()</a> or <a class="el" href="group__dccstuff.html#g3ff4ca78d346b7acf847cf28a7211bf4" title="Declines a remote DCC CHAT or DCC RECVFILE request.">irc_dcc_decline()</a>.</td></tr>
</table>
</dl>
This callback is called when someone wants to send a file to you using DCC SEND. As with chat, in respond you should call either <a class="el" href="group__dccstuff.html#g43f747d3b2252109f9d811ea8414745b" title="Accepts a remote DCC CHAT or DCC RECVFILE request.">irc_dcc_accept()</a> to accept this request and receive the file, or <a class="el" href="group__dccstuff.html#g3ff4ca78d346b7acf847cf28a7211bf4" title="Declines a remote DCC CHAT or DCC RECVFILE request.">irc_dcc_decline()</a> to decline this request.<p>
<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="group__dccstuff.html#g43f747d3b2252109f9d811ea8414745b" title="Accepts a remote DCC CHAT or DCC RECVFILE request.">irc_dcc_accept</a> or <a class="el" href="group__dccstuff.html#g3ff4ca78d346b7acf847cf28a7211bf4" title="Declines a remote DCC CHAT or DCC RECVFILE request.">irc_dcc_decline</a> </dd></dl>
</div>
</div><p>
<a class="anchor" name="gb6000d309e87cfb727dcad0136fcb79f"></a><!-- doxytag: member="libirc_events.h::irc_eventcode_callback_t" ref="gb6000d309e87cfb727dcad0136fcb79f" args=")(irc_session_t *session, unsigned int event, const char *origin, const char **params, unsigned int count)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef void(* <a class="el" href="group__events.html#gb6000d309e87cfb727dcad0136fcb79f">irc_eventcode_callback_t</a>)(<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, unsigned int event, const char *origin, const char **params, unsigned int count) </td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
A numeric event callback.
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>session</em>&nbsp;</td><td>the session, which generates an event </td></tr>
<tr><td valign="top"></td><td valign="top"><em>event</em>&nbsp;</td><td>the numeric code of the event. Useful in case you use a single event handler for several events simultaneously. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>origin</em>&nbsp;</td><td>the originator of the event. See the note below. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>params</em>&nbsp;</td><td>a list of event params. Depending on the event nature, it could have zero or more params. The actual number of params is specified in count. None of the params can be NULL, but 'params' pointer itself could be NULL for some events. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>count</em>&nbsp;</td><td>the total number of params supplied.</td></tr>
</table>
</dl>
Most times in reply to your actions the IRC server generates numeric callbacks. Most of them are error codes, and some of them mark list start and list stop markers. Every code has its own set of params; for details you can either experiment, or read RFC 1459.<p>
Every event has origin, though the <em>origin</em> variable may be NULL, which means that event origin is unknown. The origin usually looks like nick!host@ircserver, i.e. like tim!home@irc.krasnogorsk.ru. Such origins can not be used in IRC commands, and need to be stripped (i.e. host and server part should be cut off) before using. This can be done either explicitly, by calling <a class="el" href="group__nnparse.html#g217df7c7c7dc5e60678dd14e24e41f03" title="Gets the nick part from the target.">irc_target_get_nick()</a>, or implicitly for all the events - by setting the <a class="el" href="group__options.html#g0dd67b0a5373a108d86d911fa5741e72" title="allows to strip origins automatically.">LIBIRC_OPTION_STRIPNICKS</a> option with <a class="el" href="group__options.html#gc5d81f651f1441690f3f59c3ddccaa48" title="Sets the libircclient option.">irc_option_set()</a>.
</div>
</div><p>
</div>
<hr size="1"><address style="text-align: right;"><small>Generated on Sat Jan 10 18:19:35 2009 for libircclient by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.7.1 </small></address>
</body>
</html>

View File

@ -0,0 +1,100 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>libircclient: Initiating and destroying IRC session.</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.7.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
</div>
<div class="contents">
<h1>Initiating and destroying IRC session.</h1><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__initclose.html#gc5dada35ee77795d8bb77b6701853b98">irc_create_session</a> (<a class="el" href="structirc__callbacks__t.html">irc_callbacks_t</a> *callbacks)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Creates and initiates a new IRC session. <a href="#gc5dada35ee77795d8bb77b6701853b98"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__initclose.html#g30c6cea4f149632d1905b097a3a573f7">irc_destroy_session</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Destroys previously created IRC session. <a href="#g30c6cea4f149632d1905b097a3a573f7"></a><br></td></tr>
</table>
<hr><h2>Function Documentation</h2>
<a class="anchor" name="gc5dada35ee77795d8bb77b6701853b98"></a><!-- doxytag: member="libircclient.h::irc_create_session" ref="gc5dada35ee77795d8bb77b6701853b98" args="(irc_callbacks_t *callbacks)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> * irc_create_session </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structirc__callbacks__t.html">irc_callbacks_t</a> *&nbsp;</td>
<td class="paramname"> <em>callbacks</em> </td>
<td>&nbsp;)&nbsp;</td>
<td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Creates and initiates a new IRC session.
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>callbacks</em>&nbsp;</td><td>A structure, which defines several callbacks, which will be called on appropriate events. Must not be NULL.</td></tr>
</table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>An <a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5" title="A libircclient IRC session.">irc_session_t</a> object, or 0 if creation failed. Usually, failure is caused by out of memory error.</dd></dl>
Every <a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5" title="A libircclient IRC session.">irc_session_t</a> object describes a single IRC session - a connection to an IRC server, and possibly to some DCC clients. Almost every irc_* function requires this object to be passed to, and therefore this function should be called first.<p>
Every session created must be destroyed when it is not needed anymore by calling <a class="el" href="group__initclose.html#g30c6cea4f149632d1905b097a3a573f7" title="Destroys previously created IRC session.">irc_destroy_session()</a>.<p>
The most common function sequence is: <div class="fragment"><pre class="fragment"> ... prepare <a class="code" href="structirc__callbacks__t.html" title="Event callbacks structure.">irc_callbacks_t</a> structure ...
<a class="code" href="group__initclose.html#gc5dada35ee77795d8bb77b6701853b98" title="Creates and initiates a new IRC session.">irc_create_session</a>();
<a class="code" href="group__conndisc.html#g121b23c9e131da651175ae779e1b6851" title="Initiates a connection to IRC server.">irc_connect</a>();
<a class="code" href="group__running.html#g112631b75eb9997868d73fede17440d0" title="Goes into forever-loop, processing IRC events and generating callbacks.">irc_run</a>();
<a class="code" href="group__initclose.html#g30c6cea4f149632d1905b097a3a573f7" title="Destroys previously created IRC session.">irc_destroy_session</a>();
</pre></div><p>
<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="group__initclose.html#g30c6cea4f149632d1905b097a3a573f7" title="Destroys previously created IRC session.">irc_destroy_session</a> </dd></dl>
</div>
</div><p>
<a class="anchor" name="g30c6cea4f149632d1905b097a3a573f7"></a><!-- doxytag: member="libircclient.h::irc_destroy_session" ref="g30c6cea4f149632d1905b097a3a573f7" args="(irc_session_t *session)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void irc_destroy_session </td>
<td>(</td>
<td class="paramtype"><a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *&nbsp;</td>
<td class="paramname"> <em>session</em> </td>
<td>&nbsp;)&nbsp;</td>
<td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Destroys previously created IRC session.
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>session</em>&nbsp;</td><td>A session to destroy. Must not be NULL.</td></tr>
</table>
</dl>
This function should be used to destroy an IRC session, close the connection to the IRC server, and free all the used resources. After calling this function, you should not use this session object anymore.
</div>
</div><p>
</div>
<hr size="1"><address style="text-align: right;"><small>Generated on Sat Jan 10 18:19:35 2009 for libircclient by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.7.1 </small></address>
</body>
</html>

View File

@ -0,0 +1,486 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>libircclient: IRC commands: channel management.</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.7.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
</div>
<div class="contents">
<h1>IRC commands: channel management.</h1><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__ircmd__ch.html#g4960c546c2a077e8fb01fc7aa5ae7add">irc_cmd_join</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, const char *channel, const char *key)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Joins the new IRC channel. <a href="#g4960c546c2a077e8fb01fc7aa5ae7add"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__ircmd__ch.html#gdb50b9a3a78693266fb0a257b997831b">irc_cmd_part</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, const char *channel)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Leaves the IRC channel. <a href="#gdb50b9a3a78693266fb0a257b997831b"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__ircmd__ch.html#g77e2b2c46c8883a7986180f36ca17247">irc_cmd_invite</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, const char *nick, const char *channel)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Invites a user to invite-only channel. <a href="#g77e2b2c46c8883a7986180f36ca17247"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__ircmd__ch.html#g9b5d3f07ca8a44f0772fc48f677e5bdd">irc_cmd_names</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, const char *channel)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Obtains a list of users who're in channel. <a href="#g9b5d3f07ca8a44f0772fc48f677e5bdd"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__ircmd__ch.html#g1f49929bca3afb8d95b2986dfb480d42">irc_cmd_list</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, const char *channel)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Obtains a list of active server channels with their topics. <a href="#g1f49929bca3afb8d95b2986dfb480d42"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__ircmd__ch.html#ge088b8e83e3482875ea3d3f970dbb9a2">irc_cmd_topic</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, const char *channel, const char *topic)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Views or changes the channel topic. <a href="#ge088b8e83e3482875ea3d3f970dbb9a2"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__ircmd__ch.html#g63489434dcf78d454389b7744624c1e7">irc_cmd_channel_mode</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, const char *channel, const char *mode)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Views or changes the channel mode. <a href="#g63489434dcf78d454389b7744624c1e7"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__ircmd__ch.html#g47a6c7a2b3f96c9fe41e7df82f0dbd7c">irc_cmd_kick</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, const char *nick, const char *channel, const char *reason)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Kick some lazy ass out of channel. <a href="#g47a6c7a2b3f96c9fe41e7df82f0dbd7c"></a><br></td></tr>
</table>
<hr><h2>Function Documentation</h2>
<a class="anchor" name="g63489434dcf78d454389b7744624c1e7"></a><!-- doxytag: member="libircclient.h::irc_cmd_channel_mode" ref="g63489434dcf78d454389b7744624c1e7" args="(irc_session_t *session, const char *channel, const char *mode)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int irc_cmd_channel_mode </td>
<td>(</td>
<td class="paramtype"><a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *&nbsp;</td>
<td class="paramname"> <em>session</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&nbsp;</td>
<td class="paramname"> <em>channel</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&nbsp;</td>
<td class="paramname"> <em>mode</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Views or changes the channel mode.
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>session</em>&nbsp;</td><td>An initiated and connected session. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>channel</em>&nbsp;</td><td>A channel name to invite to. Must not be NULL. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>mode</em>&nbsp;</td><td>A channel mode, described below. If NULL, the channel mode is not changed, just the old mode is returned.</td></tr>
</table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>Return code 0 means success. Other value means error, the error code may be obtained through <a class="el" href="group__errors.html#g3a18336093ee74751244d996bc32247d" title="Returns the last error code.">irc_errno()</a>. Any error, generated by the IRC server, is available through <a class="el" href="structirc__callbacks__t.html#85951d45acff22aea37a822bb9c7aef7">irc_callbacks_t::event_numeric</a>.</dd></dl>
The <a class="el" href="group__ircmd__ch.html#g63489434dcf78d454389b7744624c1e7" title="Views or changes the channel mode.">irc_cmd_channel_mode()</a> is used to change or view the channel modes. The <em>channel</em> mode is returned if the <em>mode</em> is NULL. If the <em>mode</em> is not NULL, the mode for the <em>channel</em> will be changed. Note that, only channel operators can change the channel modes.<p>
Channel mode is represended by the letters combination. Every letter has its own meaning in channel modes. Most channel mode letters are boolean (i.e. could only be set or reset), but a few channel mode letters accept a parameter. All channel options are set by adding a plus sign before the letter, and reset by adding a minus sign before the letter.<p>
Here is the list of 'standard' channel modes:<p>
<ul>
<li><em>o</em> <em>nickname</em> - gives (+o nick) or takes (-o nick) the channel operator privileges from a <em>nickname</em>. This mode affects the users in channel, not the channel itself. Examples: "+o tim", "-o watson".</li></ul>
<p>
<ul>
<li><em>p</em> - sets (+p) or resets (-p) private channel flag. Private channels are shown in channel list as 'Prv', without the topic.</li></ul>
<p>
<ul>
<li><em>s</em> - sets (+p) or resets (-p) secret channel flag. Secret channels aren't shown in channel list at all.</li></ul>
<p>
<ul>
<li><em>i</em> - sets (+i) or resets (-i) invite-only channel flag. When the flag is set, only the people who are invited by <a class="el" href="group__ircmd__ch.html#g77e2b2c46c8883a7986180f36ca17247" title="Invites a user to invite-only channel.">irc_cmd_invite()</a>, can join this channel.</li></ul>
<p>
<ul>
<li><em>t</em> - sets (+t) or resets (-t) topic settable by channel operator only flag. When the flag is set, only the channel operators can change the channel topic.</li></ul>
<p>
<ul>
<li><em>n</em> - sets (+n) or resets (-n) the protection from the clients outside the channel. When the <em>+n</em> mode is set, only the clients, who are in channel, can send the messages to the channel.</li></ul>
<p>
<ul>
<li><em>m</em> - sets (+m) or resets (-m) the moderation of the channel. When the moderation mode is set, only channel operators and the users who have the <em>+v</em> user mode can speak in the channel.</li></ul>
<p>
<ul>
<li><em>v</em> <em>nickname</em> - gives (+v nick) or takes (-v nick) from user the ability to speak on a moderated channel. Examples: "+v tim", "-v watson".</li></ul>
<p>
<ul>
<li><em>l</em> <em>number</em> - sets (+l 20) or removes (-l) the restriction of maximum users in channel. When the restriction is set, and there is a number of users in the channel, no one can join the channel anymore.</li></ul>
<p>
<ul>
<li><em>k</em> <em>key</em> - sets (+k secret) or removes (-k) the password from the channel. When the restriction is set, any user joining the channel required to provide a channel key.</li></ul>
<p>
<ul>
<li><em>b</em> <em>mask</em> - sets (+b *!*@*.mil) or removes (-b *!*@*.mil) the ban mask on a user to keep him out of channel. Note that to remove the ban you must specify the ban mask to remove, not just "-b".</li></ul>
<p>
Note that the actual list of channel modes depends on the IRC server, and can be bigger. If you know the popular channel modes, which aren't mentioned here - please contact me at <a href="mailto:tim@krasnogorsk.ru">tim@krasnogorsk.ru</a><p>
Possible error responces for this command from the RFC1459:<ul>
<li><a class="el" href="group__rfcnumbers.html#gb3fc9166c154ed2b99c0294f5ce31777" title="461 &lt;command&gt; :Not enough parameters">LIBIRC_RFC_ERR_NEEDMOREPARAMS</a></li><li><a class="el" href="group__rfcnumbers.html#g45e953e4c730a2f091d74430eeac1d57" title="482 &lt;channel&gt; :You&#39;re not channel operator">LIBIRC_RFC_ERR_CHANOPRIVSNEEDED</a></li><li><a class="el" href="group__rfcnumbers.html#g28f90d5f34a3056127516c0edc7c511f" title="401 &lt;nickname&gt; :No such nick/channel">LIBIRC_RFC_ERR_NOSUCHNICK</a></li><li><a class="el" href="group__rfcnumbers.html#gb20af2b80994d5c9d7c1e96d88f2e577" title="442 &lt;channel&gt; :You&#39;re not on that channel">LIBIRC_RFC_ERR_NOTONCHANNEL</a></li><li><a class="el" href="group__rfcnumbers.html#g43267525d047db03b1c8f402cfe549f3" title="467 &lt;channel&gt; :Channel key already set">LIBIRC_RFC_ERR_KEYSET</a></li><li><a class="el" href="group__rfcnumbers.html#g66d80c7acd49ba08f1a14b8775347ed1" title="472 &lt;char&gt; :is unknown mode char to me for &lt;channel&gt;">LIBIRC_RFC_ERR_UNKNOWNMODE</a></li><li><a class="el" href="group__rfcnumbers.html#g2c0be54b246f18fb20c2c9edbc671649" title="403 &lt;channel name&gt; :No such channel">LIBIRC_RFC_ERR_NOSUCHCHANNEL</a></li></ul>
<p>
And the mode information is given using following reply codes:<ul>
<li><a class="el" href="group__rfcnumbers.html#gce33e328528f4ae2e7843478839301e5" title="324 &lt;channel&gt; &lt;mode&gt; &lt;mode params&gt;">LIBIRC_RFC_RPL_CHANNELMODEIS</a></li><li><a class="el" href="group__rfcnumbers.html#ga188a0d60499bb3546fdc75b07ee5680" title="367 &lt;channel&gt; &lt;banmask&gt;">LIBIRC_RFC_RPL_BANLIST</a></li><li><a class="el" href="group__rfcnumbers.html#g6040ae147ea3044f201f314fec1a1791" title="368 &lt;channel&gt; :End of channel ban list">LIBIRC_RFC_RPL_ENDOFBANLIST</a></li></ul>
<p>
<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="group__ircmd__ch.html#ge088b8e83e3482875ea3d3f970dbb9a2" title="Views or changes the channel topic.">irc_cmd_topic</a> <a class="el" href="group__ircmd__ch.html#g1f49929bca3afb8d95b2986dfb480d42" title="Obtains a list of active server channels with their topics.">irc_cmd_list</a> </dd></dl>
</div>
</div><p>
<a class="anchor" name="g77e2b2c46c8883a7986180f36ca17247"></a><!-- doxytag: member="libircclient.h::irc_cmd_invite" ref="g77e2b2c46c8883a7986180f36ca17247" args="(irc_session_t *session, const char *nick, const char *channel)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int irc_cmd_invite </td>
<td>(</td>
<td class="paramtype"><a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *&nbsp;</td>
<td class="paramname"> <em>session</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&nbsp;</td>
<td class="paramname"> <em>nick</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&nbsp;</td>
<td class="paramname"> <em>channel</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Invites a user to invite-only channel.
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>session</em>&nbsp;</td><td>An initiated and connected session. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>nick</em>&nbsp;</td><td>A nick to invite. Must not be NULL. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>channel</em>&nbsp;</td><td>A channel name to invite to. Must not be NULL.</td></tr>
</table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>Return code 0 means success. Other value means error, the error code may be obtained through <a class="el" href="group__errors.html#g3a18336093ee74751244d996bc32247d" title="Returns the last error code.">irc_errno()</a>. Any error, generated by the IRC server, is available through <a class="el" href="structirc__callbacks__t.html#85951d45acff22aea37a822bb9c7aef7">irc_callbacks_t::event_numeric</a>.</dd></dl>
This function is used to invite someone to invite-only channel. "Invite-only" is a channel mode, which restricts anyone, except invided, to join this channel. After invitation, the user could join this channel. The user, who is invited, will receive the <a class="el" href="structirc__callbacks__t.html#e5f3325ab13c3a36ed84435e3bcf7b61">irc_callbacks_t::event_invite</a> event. Note that you must be a channel operator to INVITE the users.<p>
Possible error responces for this command from the RFC1459:<ul>
<li><a class="el" href="group__rfcnumbers.html#gb3fc9166c154ed2b99c0294f5ce31777" title="461 &lt;command&gt; :Not enough parameters">LIBIRC_RFC_ERR_NEEDMOREPARAMS</a></li><li><a class="el" href="group__rfcnumbers.html#g28f90d5f34a3056127516c0edc7c511f" title="401 &lt;nickname&gt; :No such nick/channel">LIBIRC_RFC_ERR_NOSUCHNICK</a></li><li><a class="el" href="group__rfcnumbers.html#gb20af2b80994d5c9d7c1e96d88f2e577" title="442 &lt;channel&gt; :You&#39;re not on that channel">LIBIRC_RFC_ERR_NOTONCHANNEL</a></li><li>LIBIRC_RFC_ERR_ERR_USERONCHANNEL</li><li>LIBIRC_RFC_ERR_ERR_CHANOPRIVSNEEDED</li></ul>
<p>
And on success one of the following replies returned:<ul>
<li><a class="el" href="group__rfcnumbers.html#g5de83e9710137226a986fdc6aece31da" title="341 &lt;channel&gt; &lt;nick&gt;">LIBIRC_RFC_RPL_INVITING</a></li><li><a class="el" href="group__rfcnumbers.html#g54aa2b97df3fc570572e68fc88647143" title="301 &lt;nick&gt; :&lt;away message&gt;">LIBIRC_RFC_RPL_AWAY</a></li></ul>
<p>
<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="structirc__callbacks__t.html#e5f3325ab13c3a36ed84435e3bcf7b61">irc_callbacks_t::event_invite</a> <a class="el" href="group__ircmd__ch.html#g63489434dcf78d454389b7744624c1e7" title="Views or changes the channel mode.">irc_cmd_channel_mode</a> </dd></dl>
</div>
</div><p>
<a class="anchor" name="g4960c546c2a077e8fb01fc7aa5ae7add"></a><!-- doxytag: member="libircclient.h::irc_cmd_join" ref="g4960c546c2a077e8fb01fc7aa5ae7add" args="(irc_session_t *session, const char *channel, const char *key)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int irc_cmd_join </td>
<td>(</td>
<td class="paramtype"><a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *&nbsp;</td>
<td class="paramname"> <em>session</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&nbsp;</td>
<td class="paramname"> <em>channel</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&nbsp;</td>
<td class="paramname"> <em>key</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Joins the new IRC channel.
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>session</em>&nbsp;</td><td>An initiated and connected session. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>channel</em>&nbsp;</td><td>A channel name to join to. Must not be NULL. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>key</em>&nbsp;</td><td>Channel password. May be NULL.</td></tr>
</table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>Return code 0 means success. Other value means error, the error code may be obtained through <a class="el" href="group__errors.html#g3a18336093ee74751244d996bc32247d" title="Returns the last error code.">irc_errno()</a>. Any error, generated by the IRC server, is available through <a class="el" href="structirc__callbacks__t.html#85951d45acff22aea37a822bb9c7aef7">irc_callbacks_t::event_numeric</a>.</dd></dl>
This function is used to JOIN the IRC channel. If the channel is not exist, it will be automatically created by the IRC server. Note that to JOIN the password-protected channel, you must know the password, and specify it in the <em>key</em> argument.<p>
If join is successful, the <a class="el" href="structirc__callbacks__t.html#8f24c0e2b05425c2308a0106dbaaffec">irc_callbacks_t::event_join</a> is called (with <em>origin</em> == your nickname), then you are sent the channel's topic (using <a class="el" href="group__rfcnumbers.html#g02d7f6f775a11abd3c09bca16d6cdc59" title="332 &lt;channel&gt; :&lt;topic&gt;">LIBIRC_RFC_RPL_TOPIC</a>) and the list of users who are on the channel (using <a class="el" href="group__rfcnumbers.html#g7fc1ff023f7824d91d5f5567997f0fd3" title="353 ( &quot;=">LIBIRC_RFC_RPL_NAMREPLY</a>), which includes the user joining - namely you.<p>
Possible error responces for this command from the RFC1459:<ul>
<li><a class="el" href="group__rfcnumbers.html#gb3fc9166c154ed2b99c0294f5ce31777" title="461 &lt;command&gt; :Not enough parameters">LIBIRC_RFC_ERR_NEEDMOREPARAMS</a></li><li><a class="el" href="group__rfcnumbers.html#gc5bf83f758e914ca36d5f379e5819103" title="474 &lt;channel&gt; :Cannot join channel (+b)">LIBIRC_RFC_ERR_BANNEDFROMCHAN</a></li><li><a class="el" href="group__rfcnumbers.html#gdfa3659a762a5023cd37615a54f70a2e" title="473 &lt;channel&gt; :Cannot join channel (+i)">LIBIRC_RFC_ERR_INVITEONLYCHAN</a></li><li><a class="el" href="group__rfcnumbers.html#g04a2e9664d25bece875e5c207c6a2697" title="475 &lt;channel&gt; :Cannot join channel (+k)">LIBIRC_RFC_ERR_BADCHANNELKEY</a></li><li><a class="el" href="group__rfcnumbers.html#g8644827c4d45e5669a342b1d70a0904e" title="471 &lt;channel&gt; :Cannot join channel (+l)">LIBIRC_RFC_ERR_CHANNELISFULL</a></li><li><a class="el" href="group__rfcnumbers.html#g6e40a8054eb0a0c0c6882cd97f344853" title="476 &lt;channel&gt; :Bad Channel Mask">LIBIRC_RFC_ERR_BADCHANMASK</a></li><li><a class="el" href="group__rfcnumbers.html#g2c0be54b246f18fb20c2c9edbc671649" title="403 &lt;channel name&gt; :No such channel">LIBIRC_RFC_ERR_NOSUCHCHANNEL</a></li><li><a class="el" href="group__rfcnumbers.html#g784de3929f568ce298c37c42acb4bfef" title="405 &lt;channel name&gt; :You have joined too many channels">LIBIRC_RFC_ERR_TOOMANYCHANNELS</a></li></ul>
<p>
And on success the following replies returned:<ul>
<li><a class="el" href="group__rfcnumbers.html#g02d7f6f775a11abd3c09bca16d6cdc59" title="332 &lt;channel&gt; :&lt;topic&gt;">LIBIRC_RFC_RPL_TOPIC</a></li><li><a class="el" href="group__rfcnumbers.html#g7fc1ff023f7824d91d5f5567997f0fd3" title="353 ( &quot;=">LIBIRC_RFC_RPL_NAMREPLY</a> </li></ul>
</div>
</div><p>
<a class="anchor" name="g47a6c7a2b3f96c9fe41e7df82f0dbd7c"></a><!-- doxytag: member="libircclient.h::irc_cmd_kick" ref="g47a6c7a2b3f96c9fe41e7df82f0dbd7c" args="(irc_session_t *session, const char *nick, const char *channel, const char *reason)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int irc_cmd_kick </td>
<td>(</td>
<td class="paramtype"><a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *&nbsp;</td>
<td class="paramname"> <em>session</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&nbsp;</td>
<td class="paramname"> <em>nick</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&nbsp;</td>
<td class="paramname"> <em>channel</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&nbsp;</td>
<td class="paramname"> <em>reason</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Kick some lazy ass out of channel.
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>session</em>&nbsp;</td><td>An initiated and connected session. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>nick</em>&nbsp;</td><td>A nick to kick. Must not be NULL. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>channel</em>&nbsp;</td><td>A channel to kick this nick out of. Must not be NULL. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>reason</em>&nbsp;</td><td>A reason to kick. May be NULL.</td></tr>
</table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>Return code 0 means success. Other value means error, the error code may be obtained through <a class="el" href="group__errors.html#g3a18336093ee74751244d996bc32247d" title="Returns the last error code.">irc_errno()</a>. Any error, generated by the IRC server, is available through <a class="el" href="structirc__callbacks__t.html#85951d45acff22aea37a822bb9c7aef7">irc_callbacks_t::event_numeric</a>.</dd></dl>
This function is used to kick a person out of channel. Note that you must be a channel operator to kick anyone.<p>
Possible error responces for this command from the RFC1459:<ul>
<li><a class="el" href="group__rfcnumbers.html#gb3fc9166c154ed2b99c0294f5ce31777" title="461 &lt;command&gt; :Not enough parameters">LIBIRC_RFC_ERR_NEEDMOREPARAMS</a></li><li><a class="el" href="group__rfcnumbers.html#g6e40a8054eb0a0c0c6882cd97f344853" title="476 &lt;channel&gt; :Bad Channel Mask">LIBIRC_RFC_ERR_BADCHANMASK</a></li><li><a class="el" href="group__rfcnumbers.html#g2c0be54b246f18fb20c2c9edbc671649" title="403 &lt;channel name&gt; :No such channel">LIBIRC_RFC_ERR_NOSUCHCHANNEL</a></li><li><a class="el" href="group__rfcnumbers.html#gb20af2b80994d5c9d7c1e96d88f2e577" title="442 &lt;channel&gt; :You&#39;re not on that channel">LIBIRC_RFC_ERR_NOTONCHANNEL</a></li><li><a class="el" href="group__rfcnumbers.html#g45e953e4c730a2f091d74430eeac1d57" title="482 &lt;channel&gt; :You&#39;re not channel operator">LIBIRC_RFC_ERR_CHANOPRIVSNEEDED</a></li></ul>
<p>
On success the <a class="el" href="structirc__callbacks__t.html#1a8194bfdbf2622e9384fbd1ac1a67d7">irc_callbacks_t::event_kick</a> event will be generated.<p>
<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="structirc__callbacks__t.html#85951d45acff22aea37a822bb9c7aef7">irc_callbacks_t::event_numeric</a> </dd></dl>
</div>
</div><p>
<a class="anchor" name="g1f49929bca3afb8d95b2986dfb480d42"></a><!-- doxytag: member="libircclient.h::irc_cmd_list" ref="g1f49929bca3afb8d95b2986dfb480d42" args="(irc_session_t *session, const char *channel)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int irc_cmd_list </td>
<td>(</td>
<td class="paramtype"><a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *&nbsp;</td>
<td class="paramname"> <em>session</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&nbsp;</td>
<td class="paramname"> <em>channel</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Obtains a list of active server channels with their topics.
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>session</em>&nbsp;</td><td>An initiated and connected session. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>channel</em>&nbsp;</td><td>A channel name(s) to list. May be NULL, in which case all the channels will be listed. It is possible to specify more than a single channel, but several channel names should be separated by a comma.</td></tr>
</table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>Return code 0 means success. Other value means error, the error code may be obtained through <a class="el" href="group__errors.html#g3a18336093ee74751244d996bc32247d" title="Returns the last error code.">irc_errno()</a>. Any error, generated by the IRC server, is available through <a class="el" href="structirc__callbacks__t.html#85951d45acff22aea37a822bb9c7aef7">irc_callbacks_t::event_numeric</a>.</dd></dl>
This function is used to ask the IRC server for the active (existing) channels list. The list will be returned using LIBIRC_RFC_RPL_LISTSTART - <a class="el" href="group__rfcnumbers.html#g7cd68428c26cc9867a1b35a25b4acb64" title="322 &lt;channel&gt; &lt;# visible&gt; :&lt;topic&gt;">LIBIRC_RFC_RPL_LIST</a> - <a class="el" href="group__rfcnumbers.html#gb986ca08f325c8113fbada41a99c84bf" title="323 :End of LIST">LIBIRC_RFC_RPL_LISTEND</a> sequence. Note that "private" channels are listed (without their topics) as channel "Prv" unless the client generating the LIST query is actually on that channel. Likewise, secret channels are not listed at all unless the client is a member of the channel in question.<p>
Possible error responces for this command from the RFC1459:<ul>
<li><a class="el" href="group__rfcnumbers.html#g8108addfd19326f00eacd71c26809348" title="402 &lt;server name&gt; :No such server">LIBIRC_RFC_ERR_NOSUCHSERVER</a></li></ul>
<p>
And the channel list is returned using the following reply codes:<ul>
<li>LIBIRC_RFC_RPL_LISTSTART</li><li><a class="el" href="group__rfcnumbers.html#gb986ca08f325c8113fbada41a99c84bf" title="323 :End of LIST">LIBIRC_RFC_RPL_LISTEND</a></li><li><a class="el" href="group__rfcnumbers.html#g7cd68428c26cc9867a1b35a25b4acb64" title="322 &lt;channel&gt; &lt;# visible&gt; :&lt;topic&gt;">LIBIRC_RFC_RPL_LIST</a> </li></ul>
</div>
</div><p>
<a class="anchor" name="g9b5d3f07ca8a44f0772fc48f677e5bdd"></a><!-- doxytag: member="libircclient.h::irc_cmd_names" ref="g9b5d3f07ca8a44f0772fc48f677e5bdd" args="(irc_session_t *session, const char *channel)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int irc_cmd_names </td>
<td>(</td>
<td class="paramtype"><a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *&nbsp;</td>
<td class="paramname"> <em>session</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&nbsp;</td>
<td class="paramname"> <em>channel</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Obtains a list of users who're in channel.
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>session</em>&nbsp;</td><td>An initiated and connected session. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>channel</em>&nbsp;</td><td>A channel name(s) to obtain user list. Must not be NULL. It is possible to specify more than a single channel, but several channel names should be separated by a comma.</td></tr>
</table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>Return code 0 means success. Other value means error, the error code may be obtained through <a class="el" href="group__errors.html#g3a18336093ee74751244d996bc32247d" title="Returns the last error code.">irc_errno()</a>. Any error, generated by the IRC server, is available through <a class="el" href="structirc__callbacks__t.html#85951d45acff22aea37a822bb9c7aef7">irc_callbacks_t::event_numeric</a>.</dd></dl>
This function is used to ask the IRC server for the list of the users who're in specified channel. You can list all nicknames that are visible to you on any channel that you can see. The list of users will be returned using RPL_NAMREPLY and RPL_ENDOFNAMES numeric codes.<p>
The channel names are returned by <a class="el" href="structirc__callbacks__t.html#85951d45acff22aea37a822bb9c7aef7">irc_callbacks_t::event_numeric</a> using the following reply codes:<ul>
<li><a class="el" href="group__rfcnumbers.html#g7fc1ff023f7824d91d5f5567997f0fd3" title="353 ( &quot;=">LIBIRC_RFC_RPL_NAMREPLY</a></li><li><a class="el" href="group__rfcnumbers.html#ged45893cd1a15247dc7200d16a224a76" title="366 &lt;channel&gt; :End of NAMES list">LIBIRC_RFC_RPL_ENDOFNAMES</a> </li></ul>
</div>
</div><p>
<a class="anchor" name="gdb50b9a3a78693266fb0a257b997831b"></a><!-- doxytag: member="libircclient.h::irc_cmd_part" ref="gdb50b9a3a78693266fb0a257b997831b" args="(irc_session_t *session, const char *channel)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int irc_cmd_part </td>
<td>(</td>
<td class="paramtype"><a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *&nbsp;</td>
<td class="paramname"> <em>session</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&nbsp;</td>
<td class="paramname"> <em>channel</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Leaves the IRC channel.
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>session</em>&nbsp;</td><td>An initiated and connected session. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>channel</em>&nbsp;</td><td>A channel name to leave. Must not be NULL.</td></tr>
</table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>Return code 0 means success. Other value means error, the error code may be obtained through <a class="el" href="group__errors.html#g3a18336093ee74751244d996bc32247d" title="Returns the last error code.">irc_errno()</a>. Any error, generated by the IRC server, is available through <a class="el" href="structirc__callbacks__t.html#85951d45acff22aea37a822bb9c7aef7">irc_callbacks_t::event_numeric</a>.</dd></dl>
This function is used to leave the IRC channel you've already joined to. An attempt to leave the channel you aren't in results a <a class="el" href="group__rfcnumbers.html#gb20af2b80994d5c9d7c1e96d88f2e577" title="442 &lt;channel&gt; :You&#39;re not on that channel">LIBIRC_RFC_ERR_NOTONCHANNEL</a> server error.<p>
Possible error responces for this command from the RFC1459:<ul>
<li><a class="el" href="group__rfcnumbers.html#gb3fc9166c154ed2b99c0294f5ce31777" title="461 &lt;command&gt; :Not enough parameters">LIBIRC_RFC_ERR_NEEDMOREPARAMS</a></li><li><a class="el" href="group__rfcnumbers.html#g2c0be54b246f18fb20c2c9edbc671649" title="403 &lt;channel name&gt; :No such channel">LIBIRC_RFC_ERR_NOSUCHCHANNEL</a></li><li><a class="el" href="group__rfcnumbers.html#gb20af2b80994d5c9d7c1e96d88f2e577" title="442 &lt;channel&gt; :You&#39;re not on that channel">LIBIRC_RFC_ERR_NOTONCHANNEL</a> </li></ul>
</div>
</div><p>
<a class="anchor" name="ge088b8e83e3482875ea3d3f970dbb9a2"></a><!-- doxytag: member="libircclient.h::irc_cmd_topic" ref="ge088b8e83e3482875ea3d3f970dbb9a2" args="(irc_session_t *session, const char *channel, const char *topic)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int irc_cmd_topic </td>
<td>(</td>
<td class="paramtype"><a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *&nbsp;</td>
<td class="paramname"> <em>session</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&nbsp;</td>
<td class="paramname"> <em>channel</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&nbsp;</td>
<td class="paramname"> <em>topic</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Views or changes the channel topic.
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>session</em>&nbsp;</td><td>An initiated and connected session. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>channel</em>&nbsp;</td><td>A channel name to invite to. Must not be NULL. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>topic</em>&nbsp;</td><td>A new topic to change. If NULL, the old topic will be returned, and topic won't changed.</td></tr>
</table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>Return code 0 means success. Other value means error, the error code may be obtained through <a class="el" href="group__errors.html#g3a18336093ee74751244d996bc32247d" title="Returns the last error code.">irc_errno()</a>. Any error, generated by the IRC server, is available through <a class="el" href="structirc__callbacks__t.html#85951d45acff22aea37a822bb9c7aef7">irc_callbacks_t::event_numeric</a>.</dd></dl>
The <a class="el" href="group__ircmd__ch.html#ge088b8e83e3482875ea3d3f970dbb9a2" title="Views or changes the channel topic.">irc_cmd_topic()</a> is used to change or view the topic of a channel. The topic for <em>channel</em> is returned if <em>topic</em> is NULL. If the <em>topic</em> is not NULL, the topic for the <em>channel</em> will be changed. Note that, depending on <em>+t</em> channel mode, you may be required to be a channel operator to change the channel topic.<p>
If the command succeed, the IRC server will generate a RPL_NOTOPIC or RPL_TOPIC message, containing either old or changed topic. Also the IRC server can (but not have to) generate the non-RFC RPL_TOPIC_EXTRA message, containing the nick of person, who's changed the topic, and the time of latest topic change.<p>
Possible error responces for this command from the RFC1459:<ul>
<li><a class="el" href="group__rfcnumbers.html#gb3fc9166c154ed2b99c0294f5ce31777" title="461 &lt;command&gt; :Not enough parameters">LIBIRC_RFC_ERR_NEEDMOREPARAMS</a></li><li><a class="el" href="group__rfcnumbers.html#g45e953e4c730a2f091d74430eeac1d57" title="482 &lt;channel&gt; :You&#39;re not channel operator">LIBIRC_RFC_ERR_CHANOPRIVSNEEDED</a></li><li><a class="el" href="group__rfcnumbers.html#gb20af2b80994d5c9d7c1e96d88f2e577" title="442 &lt;channel&gt; :You&#39;re not on that channel">LIBIRC_RFC_ERR_NOTONCHANNEL</a></li></ul>
<p>
And the topic information is returned using one of following reply codes:<ul>
<li><a class="el" href="group__rfcnumbers.html#gf467ce06debba2e77db229b14f5bbe38" title="331 &lt;channel&gt; :No topic is set">LIBIRC_RFC_RPL_NOTOPIC</a></li><li><a class="el" href="group__rfcnumbers.html#g02d7f6f775a11abd3c09bca16d6cdc59" title="332 &lt;channel&gt; :&lt;topic&gt;">LIBIRC_RFC_RPL_TOPIC</a></li></ul>
<p>
<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="structirc__callbacks__t.html#8a5ab3ffc89e19d5748c58bb675436b5">irc_callbacks_t::event_topic</a> <a class="el" href="group__ircmd__ch.html#g63489434dcf78d454389b7744624c1e7" title="Views or changes the channel mode.">irc_cmd_channel_mode</a> </dd></dl>
</div>
</div><p>
</div>
<hr size="1"><address style="text-align: right;"><small>Generated on Sat Jan 10 18:19:35 2009 for libircclient by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.7.1 </small></address>
</body>
</html>

View File

@ -0,0 +1,191 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>libircclient: IRC commands: sending messages/notices.</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.7.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
</div>
<div class="contents">
<h1>IRC commands: sending messages/notices.</h1><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__ircmd__msg.html#g8c2ec03f1a9ce7c739e11b64fd088ae5">irc_cmd_msg</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, const char *nch, const char *text)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sends the message to the nick or to the channel. <a href="#g8c2ec03f1a9ce7c739e11b64fd088ae5"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__ircmd__msg.html#g09c7e471bf4062b57df10d31ee275fc5">irc_cmd_me</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, const char *nch, const char *text)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sends the /me (CTCP ACTION) message to the nick or to the channel. <a href="#g09c7e471bf4062b57df10d31ee275fc5"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__ircmd__msg.html#gf537698d7ec582701fa3473a2dd6775f">irc_cmd_notice</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, const char *nch, const char *text)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sends the notice to the nick or to the channel. <a href="#gf537698d7ec582701fa3473a2dd6775f"></a><br></td></tr>
</table>
<hr><h2>Function Documentation</h2>
<a class="anchor" name="g09c7e471bf4062b57df10d31ee275fc5"></a><!-- doxytag: member="libircclient.h::irc_cmd_me" ref="g09c7e471bf4062b57df10d31ee275fc5" args="(irc_session_t *session, const char *nch, const char *text)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int irc_cmd_me </td>
<td>(</td>
<td class="paramtype"><a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *&nbsp;</td>
<td class="paramname"> <em>session</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&nbsp;</td>
<td class="paramname"> <em>nch</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&nbsp;</td>
<td class="paramname"> <em>text</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Sends the /me (CTCP ACTION) message to the nick or to the channel.
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>session</em>&nbsp;</td><td>An initiated and connected session. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>nch</em>&nbsp;</td><td>A target nick or channel. Must not be NULL. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>text</em>&nbsp;</td><td>Action message text. Must not be NULL.</td></tr>
</table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>Return code 0 means success. Other value means error, the error code may be obtained through <a class="el" href="group__errors.html#g3a18336093ee74751244d996bc32247d" title="Returns the last error code.">irc_errno()</a>. Any error, generated by the IRC server, is available through <a class="el" href="structirc__callbacks__t.html#85951d45acff22aea37a822bb9c7aef7">irc_callbacks_t::event_numeric</a>.</dd></dl>
This function is used to send the /me message to channel or private. As for irc_cmd_msg, the target is determined by <em>nch</em> argument.<p>
Possible error responces for this command from the RFC1459:<ul>
<li><a class="el" href="group__rfcnumbers.html#g73d5c17577fddd176f2d89e15b657c1a" title="411 :No recipient given (&lt;command&gt;)">LIBIRC_RFC_ERR_NORECIPIENT</a></li><li><a class="el" href="group__rfcnumbers.html#gc9851022435108cc6074c8cab2311b58" title="412 :No text to send">LIBIRC_RFC_ERR_NOTEXTTOSEND</a></li><li><a class="el" href="group__rfcnumbers.html#g3624990fe128d867c11b213228e62df8" title="404 &lt;channel name&gt; :Cannot send to channel">LIBIRC_RFC_ERR_CANNOTSENDTOCHAN</a></li><li><a class="el" href="group__rfcnumbers.html#gb20af2b80994d5c9d7c1e96d88f2e577" title="442 &lt;channel&gt; :You&#39;re not on that channel">LIBIRC_RFC_ERR_NOTONCHANNEL</a></li><li><a class="el" href="group__rfcnumbers.html#gfcad763cc97b268aa585311350989dca" title="413 &lt;mask&gt; :No toplevel domain specified">LIBIRC_RFC_ERR_NOTOPLEVEL</a></li><li><a class="el" href="group__rfcnumbers.html#g4cf5ceeec3305180731860436650c955" title="414 &lt;mask&gt; :Wildcard in toplevel domain">LIBIRC_RFC_ERR_WILDTOPLEVEL</a></li><li><a class="el" href="group__rfcnumbers.html#g807eab621113410281fd574de71236ea" title="407 &lt;target&gt; :&lt;error code&gt; recipients. &lt;abort message&gt;">LIBIRC_RFC_ERR_TOOMANYTARGETS</a></li><li><a class="el" href="group__rfcnumbers.html#g28f90d5f34a3056127516c0edc7c511f" title="401 &lt;nickname&gt; :No such nick/channel">LIBIRC_RFC_ERR_NOSUCHNICK</a></li></ul>
<p>
On success there is NOTHING generated. However, a <a class="el" href="group__rfcnumbers.html#g54aa2b97df3fc570572e68fc88647143" title="301 &lt;nick&gt; :&lt;away message&gt;">LIBIRC_RFC_RPL_AWAY</a> reply can be also generated.<p>
<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="group__ircmd__msg.html#g8c2ec03f1a9ce7c739e11b64fd088ae5" title="Sends the message to the nick or to the channel.">irc_cmd_msg</a> </dd></dl>
</div>
</div><p>
<a class="anchor" name="g8c2ec03f1a9ce7c739e11b64fd088ae5"></a><!-- doxytag: member="libircclient.h::irc_cmd_msg" ref="g8c2ec03f1a9ce7c739e11b64fd088ae5" args="(irc_session_t *session, const char *nch, const char *text)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">irc_cmd_msg </td>
<td>(</td>
<td class="paramtype"><a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *&nbsp;</td>
<td class="paramname"> <em>session</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&nbsp;</td>
<td class="paramname"> <em>nch</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&nbsp;</td>
<td class="paramname"> <em>text</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Sends the message to the nick or to the channel.
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>session</em>&nbsp;</td><td>An initiated and connected session. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>nch</em>&nbsp;</td><td>A target nick or channel. Must not be NULL. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>text</em>&nbsp;</td><td>Message text. Must not be NULL.</td></tr>
</table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>Return code 0 means success. Other value means error, the error code may be obtained through <a class="el" href="group__errors.html#g3a18336093ee74751244d996bc32247d" title="Returns the last error code.">irc_errno()</a>. Any error, generated by the IRC server, is available through <a class="el" href="structirc__callbacks__t.html#85951d45acff22aea37a822bb9c7aef7">irc_callbacks_t::event_numeric</a>.</dd></dl>
This function is used to send the channel or private messages. The target is determined by <em>nch</em> argument: if it describes nick, this will be a private message, if a channel name - public (channel) message. Note that depending on channel modes, you may be required to join the channel to send the channel messages.<p>
Possible error responces for this command from the RFC1459:<ul>
<li><a class="el" href="group__rfcnumbers.html#g73d5c17577fddd176f2d89e15b657c1a" title="411 :No recipient given (&lt;command&gt;)">LIBIRC_RFC_ERR_NORECIPIENT</a></li><li><a class="el" href="group__rfcnumbers.html#gc9851022435108cc6074c8cab2311b58" title="412 :No text to send">LIBIRC_RFC_ERR_NOTEXTTOSEND</a></li><li><a class="el" href="group__rfcnumbers.html#g3624990fe128d867c11b213228e62df8" title="404 &lt;channel name&gt; :Cannot send to channel">LIBIRC_RFC_ERR_CANNOTSENDTOCHAN</a></li><li><a class="el" href="group__rfcnumbers.html#gb20af2b80994d5c9d7c1e96d88f2e577" title="442 &lt;channel&gt; :You&#39;re not on that channel">LIBIRC_RFC_ERR_NOTONCHANNEL</a></li><li><a class="el" href="group__rfcnumbers.html#gfcad763cc97b268aa585311350989dca" title="413 &lt;mask&gt; :No toplevel domain specified">LIBIRC_RFC_ERR_NOTOPLEVEL</a></li><li><a class="el" href="group__rfcnumbers.html#g4cf5ceeec3305180731860436650c955" title="414 &lt;mask&gt; :Wildcard in toplevel domain">LIBIRC_RFC_ERR_WILDTOPLEVEL</a></li><li><a class="el" href="group__rfcnumbers.html#g807eab621113410281fd574de71236ea" title="407 &lt;target&gt; :&lt;error code&gt; recipients. &lt;abort message&gt;">LIBIRC_RFC_ERR_TOOMANYTARGETS</a></li><li><a class="el" href="group__rfcnumbers.html#g28f90d5f34a3056127516c0edc7c511f" title="401 &lt;nickname&gt; :No such nick/channel">LIBIRC_RFC_ERR_NOSUCHNICK</a></li></ul>
<p>
On success there is NOTHING generated.
</div>
</div><p>
<a class="anchor" name="gf537698d7ec582701fa3473a2dd6775f"></a><!-- doxytag: member="libircclient.h::irc_cmd_notice" ref="gf537698d7ec582701fa3473a2dd6775f" args="(irc_session_t *session, const char *nch, const char *text)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int irc_cmd_notice </td>
<td>(</td>
<td class="paramtype"><a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *&nbsp;</td>
<td class="paramname"> <em>session</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&nbsp;</td>
<td class="paramname"> <em>nch</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&nbsp;</td>
<td class="paramname"> <em>text</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Sends the notice to the nick or to the channel.
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>session</em>&nbsp;</td><td>An initiated and connected session. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>nch</em>&nbsp;</td><td>A target nick or channel. Must not be NULL. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>text</em>&nbsp;</td><td>Notice text. Must not be NULL.</td></tr>
</table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>Return code 0 means success. Other value means error, the error code may be obtained through <a class="el" href="group__errors.html#g3a18336093ee74751244d996bc32247d" title="Returns the last error code.">irc_errno()</a>. Any error, generated by the IRC server, is available through <a class="el" href="structirc__callbacks__t.html#85951d45acff22aea37a822bb9c7aef7">irc_callbacks_t::event_numeric</a>.</dd></dl>
This function is used to send the channel or private notices. The target is determined by <em>nch</em> argument: if it describes nick, this will be a private message, if a channel name - public (channel) message. Note that depending on channel modes, you may be required to join the channel to send the channel notices.<p>
The only difference between message and notice is that, according to RFC 1459, you must not automatically reply to NOTICE messages.<p>
Possible error responces for this command from the RFC1459:<ul>
<li><a class="el" href="group__rfcnumbers.html#g73d5c17577fddd176f2d89e15b657c1a" title="411 :No recipient given (&lt;command&gt;)">LIBIRC_RFC_ERR_NORECIPIENT</a></li><li><a class="el" href="group__rfcnumbers.html#gc9851022435108cc6074c8cab2311b58" title="412 :No text to send">LIBIRC_RFC_ERR_NOTEXTTOSEND</a></li><li><a class="el" href="group__rfcnumbers.html#g3624990fe128d867c11b213228e62df8" title="404 &lt;channel name&gt; :Cannot send to channel">LIBIRC_RFC_ERR_CANNOTSENDTOCHAN</a></li><li><a class="el" href="group__rfcnumbers.html#gb20af2b80994d5c9d7c1e96d88f2e577" title="442 &lt;channel&gt; :You&#39;re not on that channel">LIBIRC_RFC_ERR_NOTONCHANNEL</a></li><li><a class="el" href="group__rfcnumbers.html#gfcad763cc97b268aa585311350989dca" title="413 &lt;mask&gt; :No toplevel domain specified">LIBIRC_RFC_ERR_NOTOPLEVEL</a></li><li><a class="el" href="group__rfcnumbers.html#g4cf5ceeec3305180731860436650c955" title="414 &lt;mask&gt; :Wildcard in toplevel domain">LIBIRC_RFC_ERR_WILDTOPLEVEL</a></li><li><a class="el" href="group__rfcnumbers.html#g807eab621113410281fd574de71236ea" title="407 &lt;target&gt; :&lt;error code&gt; recipients. &lt;abort message&gt;">LIBIRC_RFC_ERR_TOOMANYTARGETS</a></li><li><a class="el" href="group__rfcnumbers.html#g28f90d5f34a3056127516c0edc7c511f" title="401 &lt;nickname&gt; :No such nick/channel">LIBIRC_RFC_ERR_NOSUCHNICK</a></li></ul>
<p>
On success there is NOTHING generated. On notices sent to target nick, a <a class="el" href="group__rfcnumbers.html#g54aa2b97df3fc570572e68fc88647143" title="301 &lt;nick&gt; :&lt;away message&gt;">LIBIRC_RFC_RPL_AWAY</a> reply may be generated.<p>
<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="group__ircmd__msg.html#g8c2ec03f1a9ce7c739e11b64fd088ae5" title="Sends the message to the nick or to the channel.">irc_cmd_msg</a> </dd></dl>
</div>
</div><p>
</div>
<hr size="1"><address style="text-align: right;"><small>Generated on Sat Jan 10 18:19:35 2009 for libircclient by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.7.1 </small></address>
</body>
</html>

View File

@ -0,0 +1,275 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>libircclient: IRC commands: other stuff.</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.7.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
</div>
<div class="contents">
<h1>IRC commands: other stuff.</h1><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__ircmd__oth.html#gd69addf9c9e45d888a71d6295429e05c">irc_send_raw</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, const char *format,...)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sends raw data to the IRC server. <a href="#gd69addf9c9e45d888a71d6295429e05c"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__ircmd__oth.html#ga89bd6efb6dacf53f25ca5518a5aa4ee">irc_cmd_quit</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, const char *reason)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sends QUIT command to the IRC server. <a href="#ga89bd6efb6dacf53f25ca5518a5aa4ee"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__ircmd__oth.html#g71b0c8a534600d2b354be35e28735513">irc_cmd_user_mode</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, const char *mode)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Views or changes your own user mode. <a href="#g71b0c8a534600d2b354be35e28735513"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__ircmd__oth.html#g19ae1ad61caf031e5c2dc950e24b7370">irc_cmd_nick</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, const char *newnick)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Changes your nick. <a href="#g19ae1ad61caf031e5c2dc950e24b7370"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__ircmd__oth.html#g7cfe0b48a060c5291ef1d59a3ea79b4f">irc_cmd_whois</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, const char *nick)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Queries the information about the nick. <a href="#g7cfe0b48a060c5291ef1d59a3ea79b4f"></a><br></td></tr>
</table>
<hr><h2>Function Documentation</h2>
<a class="anchor" name="g19ae1ad61caf031e5c2dc950e24b7370"></a><!-- doxytag: member="libircclient.h::irc_cmd_nick" ref="g19ae1ad61caf031e5c2dc950e24b7370" args="(irc_session_t *session, const char *newnick)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int irc_cmd_nick </td>
<td>(</td>
<td class="paramtype"><a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *&nbsp;</td>
<td class="paramname"> <em>session</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&nbsp;</td>
<td class="paramname"> <em>newnick</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Changes your nick.
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>session</em>&nbsp;</td><td>An initiated and connected session. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>newnick</em>&nbsp;</td><td>A new nick. Must not be NULL.</td></tr>
</table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>Return code 0 means success. Other value means error, the error code may be obtained through <a class="el" href="group__errors.html#g3a18336093ee74751244d996bc32247d" title="Returns the last error code.">irc_errno()</a>. Any error, generated by the IRC server, is available through <a class="el" href="structirc__callbacks__t.html#85951d45acff22aea37a822bb9c7aef7">irc_callbacks_t::event_numeric</a>.</dd></dl>
This function is used to change your current nick to another nick. Note that such a change is not always possible; for example you cannot change nick to the existing nick, or (on some servers) to the registered nick.<p>
Possible error responces for this command from the RFC1459:<ul>
<li><a class="el" href="group__rfcnumbers.html#gc754b9522b1f4c4376f809d2e3acbee4" title="431 :No nickname given">LIBIRC_RFC_ERR_NONICKNAMEGIVEN</a></li><li><a class="el" href="group__rfcnumbers.html#g177a2b46f518e603271b3d55ae2f84ab" title="432 &lt;nick&gt; :Erroneous nickname">LIBIRC_RFC_ERR_ERRONEUSNICKNAME</a></li><li><a class="el" href="group__rfcnumbers.html#g2dabe26bb4ab3b90974a6a645f7d7545" title="433 &lt;nick&gt; :Nickname is already in use">LIBIRC_RFC_ERR_NICKNAMEINUSE</a></li><li><a class="el" href="group__rfcnumbers.html#g929657e2facbf0e46a540aa8e7516774" title="436 &lt;nick&gt; :Nickname collision KILL from &lt;user&gt;@&lt;host&gt;">LIBIRC_RFC_ERR_NICKCOLLISION</a> </li></ul>
</div>
</div><p>
<a class="anchor" name="ga89bd6efb6dacf53f25ca5518a5aa4ee"></a><!-- doxytag: member="libircclient.h::irc_cmd_quit" ref="ga89bd6efb6dacf53f25ca5518a5aa4ee" args="(irc_session_t *session, const char *reason)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int irc_cmd_quit </td>
<td>(</td>
<td class="paramtype"><a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *&nbsp;</td>
<td class="paramname"> <em>session</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&nbsp;</td>
<td class="paramname"> <em>reason</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Sends QUIT command to the IRC server.
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>session</em>&nbsp;</td><td>An initiated and connected session. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>reason</em>&nbsp;</td><td>A reason to quit. May be NULL.</td></tr>
</table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>Return code 0 means success. Other value means error, the error code may be obtained through <a class="el" href="group__errors.html#g3a18336093ee74751244d996bc32247d" title="Returns the last error code.">irc_errno()</a>. Any error, generated by the IRC server, is available through <a class="el" href="structirc__callbacks__t.html#85951d45acff22aea37a822bb9c7aef7">irc_callbacks_t::event_numeric</a>.</dd></dl>
This function sends the QUIT command to the IRC server. This command forces the IRC server to close the IRC connection, and terminate the session.
</div>
</div><p>
<a class="anchor" name="g71b0c8a534600d2b354be35e28735513"></a><!-- doxytag: member="libircclient.h::irc_cmd_user_mode" ref="g71b0c8a534600d2b354be35e28735513" args="(irc_session_t *session, const char *mode)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int irc_cmd_user_mode </td>
<td>(</td>
<td class="paramtype"><a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *&nbsp;</td>
<td class="paramname"> <em>session</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&nbsp;</td>
<td class="paramname"> <em>mode</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Views or changes your own user mode.
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>session</em>&nbsp;</td><td>An initiated and connected session. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>mode</em>&nbsp;</td><td>A user mode, described below. If NULL, the user mode is not changed, just the old mode is returned.</td></tr>
</table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>Return code 0 means success. Other value means error, the error code may be obtained through <a class="el" href="group__errors.html#g3a18336093ee74751244d996bc32247d" title="Returns the last error code.">irc_errno()</a>. Any error, generated by the IRC server, is available through <a class="el" href="structirc__callbacks__t.html#85951d45acff22aea37a822bb9c7aef7">irc_callbacks_t::event_numeric</a>.</dd></dl>
The <a class="el" href="group__ircmd__oth.html#g71b0c8a534600d2b354be35e28735513" title="Views or changes your own user mode.">irc_cmd_user_mode()</a> is used to change or view the user modes. Note that, unlike channel modes, not all user modes can be changed. The user mode is returned if the <em>mode</em> is NULL. If the <em>mode</em> is not NULL, the mode for you will be changed, and new mode will be returned.<p>
Like channel mode, user mode is also represended by the letters combination. All the user mode letters are boolean (i.e. could only be set or reset), they are set by adding a plus sign before the letter, and reset by adding a minus sign before the letter.<p>
Here is the list of 'standard' user modes:<p>
<ul>
<li><em>o</em> - represents an IRC operator status. Could not be set directly (but can be reset though), to set it use the IRC <em>OPER</em> command.</li></ul>
<p>
<ul>
<li><em>i</em> - if set, marks a user as 'invisible' - that is, not seen by lookups if the user is not in a channel.</li></ul>
<p>
<ul>
<li><em>w</em> - if set, marks a user as 'receiving wallops' - special messages generated by IRC operators using WALLOPS command.</li></ul>
<p>
<ul>
<li><em>s</em> - if set, marks a user for receipt of server notices.</li></ul>
<p>
<ul>
<li><em>r</em> - NON-STANDARD MODE. If set, user has been authenticated with NICKSERV IRC service.</li></ul>
<p>
<ul>
<li><em>x</em> - NON-STANDARD MODE. If set, user's real IP is hidden by IRC servers, to prevent scriptkiddies to do nasty things to the user's computer.</li></ul>
<p>
Note that the actual list of user modes depends on the IRC server, and can be bigger. If you know the popular user modes, which aren't mentioned here - please contact me at <a href="mailto:tim@krasnogorsk.ru">tim@krasnogorsk.ru</a><p>
Possible error responces for this command from the RFC1459:<ul>
<li><a class="el" href="group__rfcnumbers.html#gb3fc9166c154ed2b99c0294f5ce31777" title="461 &lt;command&gt; :Not enough parameters">LIBIRC_RFC_ERR_NEEDMOREPARAMS</a></li><li><a class="el" href="group__rfcnumbers.html#g28f90d5f34a3056127516c0edc7c511f" title="401 &lt;nickname&gt; :No such nick/channel">LIBIRC_RFC_ERR_NOSUCHNICK</a></li><li><a class="el" href="group__rfcnumbers.html#g66d80c7acd49ba08f1a14b8775347ed1" title="472 &lt;char&gt; :is unknown mode char to me for &lt;channel&gt;">LIBIRC_RFC_ERR_UNKNOWNMODE</a></li><li><a class="el" href="group__rfcnumbers.html#g109b90448c6e8f7e2537a5f4f323745b" title="502 :Cannot change mode for other users">LIBIRC_RFC_ERR_USERSDONTMATCH</a></li><li><a class="el" href="group__rfcnumbers.html#g0c3eb9db119a7f1b9c8c9be9e9b82ae1" title="501 :Unknown MODE flag">LIBIRC_RFC_ERR_UMODEUNKNOWNFLAG</a></li></ul>
<p>
And the mode information is given using reply code <a class="el" href="group__rfcnumbers.html#gdad4d02196dcef34bd0627b428f60863" title="221 &lt;user mode string&gt;">LIBIRC_RFC_RPL_UMODEIS</a>
</div>
</div><p>
<a class="anchor" name="g7cfe0b48a060c5291ef1d59a3ea79b4f"></a><!-- doxytag: member="libircclient.h::irc_cmd_whois" ref="g7cfe0b48a060c5291ef1d59a3ea79b4f" args="(irc_session_t *session, const char *nick)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int irc_cmd_whois </td>
<td>(</td>
<td class="paramtype"><a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *&nbsp;</td>
<td class="paramname"> <em>session</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&nbsp;</td>
<td class="paramname"> <em>nick</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Queries the information about the nick.
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>session</em>&nbsp;</td><td>An initiated and connected session. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>nick</em>&nbsp;</td><td>A nick to query the information abour. Must not be NULL. A comma-separated list of several nicknames may be given.</td></tr>
</table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>Return code 0 means success. Other value means error, the error code may be obtained through <a class="el" href="group__errors.html#g3a18336093ee74751244d996bc32247d" title="Returns the last error code.">irc_errno()</a>. Any error, generated by the IRC server, is available through <a class="el" href="structirc__callbacks__t.html#85951d45acff22aea37a822bb9c7aef7">irc_callbacks_t::event_numeric</a>.</dd></dl>
This function queries various information about the nick: username, real name, the IRC server used, the channels user is in, idle time, away mode and so on.<p>
Possible error responces for this command from the RFC1459:<ul>
<li><a class="el" href="group__rfcnumbers.html#g8108addfd19326f00eacd71c26809348" title="402 &lt;server name&gt; :No such server">LIBIRC_RFC_ERR_NOSUCHSERVER</a></li><li><a class="el" href="group__rfcnumbers.html#g28f90d5f34a3056127516c0edc7c511f" title="401 &lt;nickname&gt; :No such nick/channel">LIBIRC_RFC_ERR_NOSUCHNICK</a></li><li><a class="el" href="group__rfcnumbers.html#gc754b9522b1f4c4376f809d2e3acbee4" title="431 :No nickname given">LIBIRC_RFC_ERR_NONICKNAMEGIVEN</a></li></ul>
<p>
And the information is returned using the following reply codes. The whois query is completed when <a class="el" href="group__rfcnumbers.html#ge8c2ae654f4d2502eeea46cd6116687f" title="318 &lt;nick&gt; :End of WHOIS list">LIBIRC_RFC_RPL_ENDOFWHOIS</a> message is received.<ul>
<li><a class="el" href="group__rfcnumbers.html#g401ee0bce20717f8fc20240158d9eed3" title="311 &lt;nick&gt; &lt;user&gt; &lt;host&gt; * :&lt;real name&gt;">LIBIRC_RFC_RPL_WHOISUSER</a></li><li><a class="el" href="group__rfcnumbers.html#g61c0201bfafc1f0b39f49dbadbffe4a9" title="319 &quot;&lt;nick&gt; :*( ( &quot;@&quot; / &quot;+&quot; ) &lt;channel&gt; &quot;...">LIBIRC_RFC_RPL_WHOISCHANNELS</a></li><li><a class="el" href="group__rfcnumbers.html#g7df656c3ce9c9d2e0b9cf84e5672beca" title="312 &lt;nick&gt; &lt;server&gt; :&lt;server info&gt;">LIBIRC_RFC_RPL_WHOISSERVER</a></li><li><a class="el" href="group__rfcnumbers.html#g54aa2b97df3fc570572e68fc88647143" title="301 &lt;nick&gt; :&lt;away message&gt;">LIBIRC_RFC_RPL_AWAY</a></li><li><a class="el" href="group__rfcnumbers.html#g992b1c08e5c48abc86701826d25a2884" title="313 &lt;nick&gt; :is an IRC operator">LIBIRC_RFC_RPL_WHOISOPERATOR</a></li><li><a class="el" href="group__rfcnumbers.html#gaf3e96b0ee5bb9b9e3a3e28e2d75f6e4" title="317 &lt;nick&gt; &lt;integer&gt; :seconds idle">LIBIRC_RFC_RPL_WHOISIDLE</a></li><li><a class="el" href="group__rfcnumbers.html#ge8c2ae654f4d2502eeea46cd6116687f" title="318 &lt;nick&gt; :End of WHOIS list">LIBIRC_RFC_RPL_ENDOFWHOIS</a> </li></ul>
</div>
</div><p>
<a class="anchor" name="gd69addf9c9e45d888a71d6295429e05c"></a><!-- doxytag: member="libircclient.h::irc_send_raw" ref="gd69addf9c9e45d888a71d6295429e05c" args="(irc_session_t *session, const char *format,...)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int irc_send_raw </td>
<td>(</td>
<td class="paramtype"><a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *&nbsp;</td>
<td class="paramname"> <em>session</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&nbsp;</td>
<td class="paramname"> <em>format</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">&nbsp;</td>
<td class="paramname"> <em>...</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Sends raw data to the IRC server.
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>session</em>&nbsp;</td><td>An initiated and connected session. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>format</em>&nbsp;</td><td>A printf-formatted string, followed by function args.</td></tr>
</table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>Return code 0 means success. Other value means error, the error code may be obtained through <a class="el" href="group__errors.html#g3a18336093ee74751244d996bc32247d" title="Returns the last error code.">irc_errno()</a>. Any error, generated by the IRC server, is available through <a class="el" href="structirc__callbacks__t.html#85951d45acff22aea37a822bb9c7aef7">irc_callbacks_t::event_numeric</a>.</dd></dl>
This function sends the raw data as-is to the IRC server. Use it to generate a server command, which is not (yet) provided by libircclient directly.
</div>
</div><p>
</div>
<hr size="1"><address style="text-align: right;"><small>Generated on Sat Jan 10 18:19:35 2009 for libircclient by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.7.1 </small></address>
</body>
</html>

View File

@ -0,0 +1,124 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>libircclient: Nickname parsing.</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.7.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
</div>
<div class="contents">
<h1>Nickname parsing.</h1><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__nnparse.html#g217df7c7c7dc5e60678dd14e24e41f03">irc_target_get_nick</a> (const char *target, char *nick, size_t size)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Gets the nick part from the target. <a href="#g217df7c7c7dc5e60678dd14e24e41f03"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__nnparse.html#g5929f96c251be831d1de66e6bba6299c">irc_target_get_host</a> (const char *target, char *nick, size_t size)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Gets the host part from the target. <a href="#g5929f96c251be831d1de66e6bba6299c"></a><br></td></tr>
</table>
<hr><h2>Function Documentation</h2>
<a class="anchor" name="g5929f96c251be831d1de66e6bba6299c"></a><!-- doxytag: member="libircclient.h::irc_target_get_host" ref="g5929f96c251be831d1de66e6bba6299c" args="(const char *target, char *nick, size_t size)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void irc_target_get_host </td>
<td>(</td>
<td class="paramtype">const char *&nbsp;</td>
<td class="paramname"> <em>target</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">char *&nbsp;</td>
<td class="paramname"> <em>nick</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&nbsp;</td>
<td class="paramname"> <em>size</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Gets the host part from the target.
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>target</em>&nbsp;</td><td>A nick in common IRC server form like tim!root@mydomain.com </td></tr>
<tr><td valign="top"></td><td valign="top"><em>nick</em>&nbsp;</td><td>A buffer to hold the nickname. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>size</em>&nbsp;</td><td>A buffer size. If nick is longer than buffer size, it will be truncated.</td></tr>
</table>
</dl>
For most events IRC server returns 'origin' (i.e. the person, who generated this event) in i.e. "common" form, like nick!host@domain. I don't know any command, which requires host, but it may be useful :) This function parses this origin, and gets the host, storing it into user-provided buffer.
</div>
</div><p>
<a class="anchor" name="g217df7c7c7dc5e60678dd14e24e41f03"></a><!-- doxytag: member="libircclient.h::irc_target_get_nick" ref="g217df7c7c7dc5e60678dd14e24e41f03" args="(const char *target, char *nick, size_t size)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void irc_target_get_nick </td>
<td>(</td>
<td class="paramtype">const char *&nbsp;</td>
<td class="paramname"> <em>target</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">char *&nbsp;</td>
<td class="paramname"> <em>nick</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&nbsp;</td>
<td class="paramname"> <em>size</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Gets the nick part from the target.
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>target</em>&nbsp;</td><td>A nick in common IRC server form like tim!root@mycomain.com </td></tr>
<tr><td valign="top"></td><td valign="top"><em>nick</em>&nbsp;</td><td>A buffer to hold the nickname. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>size</em>&nbsp;</td><td>A buffer size. If nick is longer than buffer size, it will be truncated.</td></tr>
</table>
</dl>
For most events IRC server returns 'origin' (i.e. the person, who generated this event) in i.e. "common" form, like nick!host@domain. However, all the irc_cmd_* functions require just a nick/ This function parses this origin, and gets the nick, storing it into user-provided buffer. A buffer of size 90 should be enough for most nicks :)
</div>
</div><p>
</div>
<hr size="1"><address style="text-align: right;"><small>Generated on Sat Jan 10 18:19:35 2009 for libircclient by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.7.1 </small></address>
</body>
</html>

View File

@ -0,0 +1,153 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>libircclient: Managing libircclient options.</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.7.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
</div>
<div class="contents">
<h1>Managing libircclient options.</h1><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__options.html#geba7a9cf7f7808a61f945a58c6d780f8">LIBIRC_OPTION_DEBUG</a>&nbsp;&nbsp;&nbsp;(1 &lt;&lt; 1)</td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__options.html#g0dd67b0a5373a108d86d911fa5741e72">LIBIRC_OPTION_STRIPNICKS</a>&nbsp;&nbsp;&nbsp;(1 &lt;&lt; 2)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">allows to strip origins automatically. <a href="#g0dd67b0a5373a108d86d911fa5741e72"></a><br></td></tr>
<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__options.html#gc5d81f651f1441690f3f59c3ddccaa48">irc_option_set</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, unsigned int option)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets the libircclient option. <a href="#gc5d81f651f1441690f3f59c3ddccaa48"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__options.html#gf56687ccad2045204ae23f70d2f54860">irc_option_reset</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, unsigned int option)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Resets the libircclient option. <a href="#gf56687ccad2045204ae23f70d2f54860"></a><br></td></tr>
</table>
<hr><h2>Define Documentation</h2>
<a class="anchor" name="geba7a9cf7f7808a61f945a58c6d780f8"></a><!-- doxytag: member="libirc_options.h::LIBIRC_OPTION_DEBUG" ref="geba7a9cf7f7808a61f945a58c6d780f8" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define LIBIRC_OPTION_DEBUG&nbsp;&nbsp;&nbsp;(1 &lt;&lt; 1) </td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
enables additional debug output
</div>
</div><p>
<a class="anchor" name="g0dd67b0a5373a108d86d911fa5741e72"></a><!-- doxytag: member="libirc_options.h::LIBIRC_OPTION_STRIPNICKS" ref="g0dd67b0a5373a108d86d911fa5741e72" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define LIBIRC_OPTION_STRIPNICKS&nbsp;&nbsp;&nbsp;(1 &lt;&lt; 2) </td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
allows to strip origins automatically.
<p>
For every IRC server event, the event origin is sent in standard form: nick!host@ircserver, i.e. like tim!home@irc.krasnogorsk.ru. Such origins can not be used in IRC commands, and need to be stripped (i.e. host and server part should be cut off) before using. This can be done either explicitly, by calling <a class="el" href="group__nnparse.html#g217df7c7c7dc5e60678dd14e24e41f03" title="Gets the nick part from the target.">irc_target_get_nick()</a>, or implicitly for all the events - by setting this option with <a class="el" href="group__options.html#gc5d81f651f1441690f3f59c3ddccaa48" title="Sets the libircclient option.">irc_option_set()</a>.
</div>
</div><p>
<hr><h2>Function Documentation</h2>
<a class="anchor" name="gf56687ccad2045204ae23f70d2f54860"></a><!-- doxytag: member="libircclient.h::irc_option_reset" ref="gf56687ccad2045204ae23f70d2f54860" args="(irc_session_t *session, unsigned int option)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void irc_option_reset </td>
<td>(</td>
<td class="paramtype"><a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *&nbsp;</td>
<td class="paramname"> <em>session</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int&nbsp;</td>
<td class="paramname"> <em>option</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Resets the libircclient option.
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>session</em>&nbsp;</td><td>An initiated session. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>option</em>&nbsp;</td><td>An option from <a class="el" href="libirc__options_8h.html" title="This file defines the options used in irc_session_options().">libirc_options.h</a></td></tr>
</table>
</dl>
This function removes the previously set libircclient option, changing libircclient behavior. See the option list for the meaning for every option.<p>
<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="group__options.html#gc5d81f651f1441690f3f59c3ddccaa48" title="Sets the libircclient option.">irc_option_set</a> </dd></dl>
</div>
</div><p>
<a class="anchor" name="gc5d81f651f1441690f3f59c3ddccaa48"></a><!-- doxytag: member="libircclient.h::irc_option_set" ref="gc5d81f651f1441690f3f59c3ddccaa48" args="(irc_session_t *session, unsigned int option)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void irc_option_set </td>
<td>(</td>
<td class="paramtype"><a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *&nbsp;</td>
<td class="paramname"> <em>session</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">unsigned int&nbsp;</td>
<td class="paramname"> <em>option</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Sets the libircclient option.
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>session</em>&nbsp;</td><td>An initiated session. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>option</em>&nbsp;</td><td>An option from <a class="el" href="libirc__options_8h.html" title="This file defines the options used in irc_session_options().">libirc_options.h</a></td></tr>
</table>
</dl>
This function sets the libircclient option, changing libircclient behavior. See the option list for the meaning for every option.<p>
<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="group__options.html#gf56687ccad2045204ae23f70d2f54860" title="Resets the libircclient option.">irc_option_reset</a> </dd></dl>
</div>
</div><p>
</div>
<hr size="1"><address style="text-align: right;"><small>Generated on Sat Jan 10 18:19:35 2009 for libircclient by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.7.1 </small></address>
</body>
</html>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,168 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>libircclient: Running IRC session.</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.7.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
</div>
<div class="contents">
<h1>Running IRC session.</h1><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__running.html#g112631b75eb9997868d73fede17440d0">irc_run</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Goes into forever-loop, processing IRC events and generating callbacks. <a href="#g112631b75eb9997868d73fede17440d0"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__running.html#g75d2af4209ad2edbdbff77b0cfcabcab">irc_add_select_descriptors</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, fd_set *in_set, fd_set *out_set, int *maxfd)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Adds IRC socket(s) for the descriptor set to use in select(). <a href="#g75d2af4209ad2edbdbff77b0cfcabcab"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__running.html#g4526d10056559eac7bd777437d440170">irc_process_select_descriptors</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, fd_set *in_set, fd_set *out_set)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Processes the IRC socket(s), which descriptor(s) are set. <a href="#g4526d10056559eac7bd777437d440170"></a><br></td></tr>
</table>
<hr><h2>Function Documentation</h2>
<a class="anchor" name="g75d2af4209ad2edbdbff77b0cfcabcab"></a><!-- doxytag: member="libircclient.h::irc_add_select_descriptors" ref="g75d2af4209ad2edbdbff77b0cfcabcab" args="(irc_session_t *session, fd_set *in_set, fd_set *out_set, int *maxfd)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int irc_add_select_descriptors </td>
<td>(</td>
<td class="paramtype"><a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *&nbsp;</td>
<td class="paramname"> <em>session</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">fd_set *&nbsp;</td>
<td class="paramname"> <em>in_set</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">fd_set *&nbsp;</td>
<td class="paramname"> <em>out_set</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int *&nbsp;</td>
<td class="paramname"> <em>maxfd</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Adds IRC socket(s) for the descriptor set to use in select().
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>session</em>&nbsp;</td><td>An initiated and connected session. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>in_set</em>&nbsp;</td><td>A FD_IN descriptor set for select() </td></tr>
<tr><td valign="top"></td><td valign="top"><em>out_set</em>&nbsp;</td><td>A FD_OUT descriptor set for select() </td></tr>
<tr><td valign="top"></td><td valign="top"><em>maxfd</em>&nbsp;</td><td>A max descriptor found.</td></tr>
</table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>Return code 0 means success. Other value means error, the error code may be obtained through <a class="el" href="group__errors.html#g3a18336093ee74751244d996bc32247d" title="Returns the last error code.">irc_errno()</a>.</dd></dl>
This function should be used when you already have a program with select() based data processing. You prepare your descriptors, call this function to add session's descriptor(s) into set, and then call select(). When it returns, you should call irc_add_select_descriptors, which sends/recvs all available data, parses received data, calls your callbacks(!), and returns. Then you can process your sockets from set. See the example.<p>
<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="group__running.html#g4526d10056559eac7bd777437d440170" title="Processes the IRC socket(s), which descriptor(s) are set.">irc_process_select_descriptors</a> </dd></dl>
</div>
</div><p>
<a class="anchor" name="g4526d10056559eac7bd777437d440170"></a><!-- doxytag: member="libircclient.h::irc_process_select_descriptors" ref="g4526d10056559eac7bd777437d440170" args="(irc_session_t *session, fd_set *in_set, fd_set *out_set)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int irc_process_select_descriptors </td>
<td>(</td>
<td class="paramtype"><a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *&nbsp;</td>
<td class="paramname"> <em>session</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">fd_set *&nbsp;</td>
<td class="paramname"> <em>in_set</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">fd_set *&nbsp;</td>
<td class="paramname"> <em>out_set</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Processes the IRC socket(s), which descriptor(s) are set.
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>session</em>&nbsp;</td><td>An initiated and connected session. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>in_set</em>&nbsp;</td><td>A FD_IN descriptor set for select() </td></tr>
<tr><td valign="top"></td><td valign="top"><em>out_set</em>&nbsp;</td><td>A FD_OUT descriptor set for select()</td></tr>
</table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>Return code 0 means success. Other value means error, the error code may be obtained through <a class="el" href="group__errors.html#g3a18336093ee74751244d996bc32247d" title="Returns the last error code.">irc_errno()</a>.</dd></dl>
This function should be used in pair with irc_add_select_descriptors function. See irc_add_select_descriptors description.<p>
<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="group__running.html#g75d2af4209ad2edbdbff77b0cfcabcab" title="Adds IRC socket(s) for the descriptor set to use in select().">irc_add_select_descriptors</a> </dd></dl>
</div>
</div><p>
<a class="anchor" name="g112631b75eb9997868d73fede17440d0"></a><!-- doxytag: member="libircclient.h::irc_run" ref="g112631b75eb9997868d73fede17440d0" args="(irc_session_t *session)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int irc_run </td>
<td>(</td>
<td class="paramtype"><a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *&nbsp;</td>
<td class="paramname"> <em>session</em> </td>
<td>&nbsp;)&nbsp;</td>
<td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Goes into forever-loop, processing IRC events and generating callbacks.
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>session</em>&nbsp;</td><td>An initiated and connected session.</td></tr>
</table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>Return code 0 means success. Other value means error, the error code may be obtained through <a class="el" href="group__errors.html#g3a18336093ee74751244d996bc32247d" title="Returns the last error code.">irc_errno()</a>.</dd></dl>
This function goes into forever loop, processing the IRC events, and calling appropriate callbacks. This function will not return until the server connection is terminated - either by server, or by calling irc_cmd_quit. This function should be used, if you don't need asynchronous request processing (i.e. your bot just reacts on the events, and doesn't generate it asynchronously). Even in last case, you still can call irc_run, and start the asynchronous thread in event_connect handler. See examples.
</div>
</div><p>
</div>
<hr size="1"><address style="text-align: right;"><small>Generated on Sat Jan 10 18:19:35 2009 for libircclient by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.7.1 </small></address>
</body>
</html>

View File

@ -0,0 +1,415 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>libirc: Sending IRC commands.</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.8 -->
<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
<h1>Sending IRC commands.</h1><table border=0 cellpadding=0 cellspacing=0>
<tr><td></td></tr>
<tr><td colspan=2><br><h2>Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="group__sendcmds.html#ga0">irc_send_raw</a> (<a class="el" href="libircclient_8h.html#a1">irc_session_t</a> *session, const char *format,...)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sends raw data to the IRC server. <a href="#ga0"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="group__sendcmds.html#ga1">irc_cmd_quit</a> (<a class="el" href="libircclient_8h.html#a1">irc_session_t</a> *session, const char *reason)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sends QUIT command to the IRC server. <a href="#ga1"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="group__sendcmds.html#ga2">irc_cmd_join</a> (<a class="el" href="libircclient_8h.html#a1">irc_session_t</a> *session, const char *channel, const char *key)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Joins the new IRC channel. <a href="#ga2"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="group__sendcmds.html#ga3">irc_cmd_msg</a> (<a class="el" href="libircclient_8h.html#a1">irc_session_t</a> *session, const char *nch, const char *text)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sends the message to the nick or to the channel. <a href="#ga3"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="group__sendcmds.html#ga4">irc_cmd_me</a> (<a class="el" href="libircclient_8h.html#a1">irc_session_t</a> *session, const char *nch, const char *text)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sends the /me (CTCP ACTION) message to the nick or to the channel. <a href="#ga4"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="group__sendcmds.html#ga5">irc_cmd_notice</a> (<a class="el" href="libircclient_8h.html#a1">irc_session_t</a> *session, const char *nch, const char *text)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sends the notice to the nick or to the channel. <a href="#ga5"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align=right valign=top>int&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="group__sendcmds.html#ga6">irc_cmd_kick</a> (<a class="el" href="libircclient_8h.html#a1">irc_session_t</a> *session, const char *nick, const char *channel, const char *reason)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Kick some lazy ass out of channel. <a href="#ga6"></a><br></td></tr>
</table>
<hr><h2>Function Documentation</h2>
<a class="anchor" name="ga2" doxytag="libircclient.h::irc_cmd_join" ></a><p>
<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
<tr>
<td class="mdRow">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> int irc_cmd_join </td>
<td class="md" valign="top">(&nbsp;</td>
<td class="md" nowrap valign="top"><a class="el" href="libircclient_8h.html#a1">irc_session_t</a> *&nbsp;</td>
<td class="mdname" nowrap> <em>session</em>, </td>
</tr>
<tr>
<td class="md" nowrap align="right"></td>
<td></td>
<td class="md" nowrap>const char *&nbsp;</td>
<td class="mdname" nowrap> <em>channel</em>, </td>
</tr>
<tr>
<td class="md" nowrap align="right"></td>
<td></td>
<td class="md" nowrap>const char *&nbsp;</td>
<td class="mdname" nowrap> <em>key</em></td>
</tr>
<tr>
<td></td>
<td class="md">)&nbsp;</td>
<td class="md" colspan="2"></td>
</tr>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<tr>
<td>
&nbsp;
</td>
<td>
<p>
Joins the new IRC channel.
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td></td><td valign=top><em>session</em>&nbsp;</td><td>An initiated and connected session. </td></tr>
<tr><td></td><td valign=top><em>channel</em>&nbsp;</td><td>A channel name to join to. Must not be NULL. </td></tr>
<tr><td></td><td valign=top><em>key</em>&nbsp;</td><td>Channel password. May be NULL.</td></tr>
</table>
</dl>
<dl compact><dt><b>Returns:</b></dt><dd>Return code 0 means success. Other value means error, the error code may be obtained through <a class="el" href="group__errors.html#ga0">irc_errno()</a>. Any error, generated by the IRC server, is available through event_numeric.</dd></dl>
This function is used to JOIN the IRC channel. If the channel is not exist, it will be automatically created by the IRC server. Note that to JOIN the password-protected channel, you must know the password, and specify it in the <em>key</em> argument. </td>
</tr>
</table>
<a class="anchor" name="ga6" doxytag="libircclient.h::irc_cmd_kick" ></a><p>
<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
<tr>
<td class="mdRow">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> int irc_cmd_kick </td>
<td class="md" valign="top">(&nbsp;</td>
<td class="md" nowrap valign="top"><a class="el" href="libircclient_8h.html#a1">irc_session_t</a> *&nbsp;</td>
<td class="mdname" nowrap> <em>session</em>, </td>
</tr>
<tr>
<td class="md" nowrap align="right"></td>
<td></td>
<td class="md" nowrap>const char *&nbsp;</td>
<td class="mdname" nowrap> <em>nick</em>, </td>
</tr>
<tr>
<td class="md" nowrap align="right"></td>
<td></td>
<td class="md" nowrap>const char *&nbsp;</td>
<td class="mdname" nowrap> <em>channel</em>, </td>
</tr>
<tr>
<td class="md" nowrap align="right"></td>
<td></td>
<td class="md" nowrap>const char *&nbsp;</td>
<td class="mdname" nowrap> <em>reason</em></td>
</tr>
<tr>
<td></td>
<td class="md">)&nbsp;</td>
<td class="md" colspan="2"></td>
</tr>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<tr>
<td>
&nbsp;
</td>
<td>
<p>
Kick some lazy ass out of channel.
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td></td><td valign=top><em>session</em>&nbsp;</td><td>An initiated and connected session. </td></tr>
<tr><td></td><td valign=top><em>nick</em>&nbsp;</td><td>A nick to kick. Must not be NULL. </td></tr>
<tr><td></td><td valign=top><em>channel</em>&nbsp;</td><td>A channel to kick this nick out of. Must not be NULL. </td></tr>
<tr><td></td><td valign=top><em>reason</em>&nbsp;</td><td>A reason to kick. May be NULL.</td></tr>
</table>
</dl>
<dl compact><dt><b>Returns:</b></dt><dd>Return code 0 means success. Other value means error, the error code may be obtained through <a class="el" href="group__errors.html#ga0">irc_errno()</a>. Any error, generated by the IRC server, is available through ::event_numeric.</dd></dl>
This function is used to kick a person out of channel. Note that you must be a channel operator to kick anyone.<p>
<dl compact><dt><b>See also:</b></dt><dd>event_numeric </dd></dl>
</td>
</tr>
</table>
<a class="anchor" name="ga4" doxytag="libircclient.h::irc_cmd_me" ></a><p>
<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
<tr>
<td class="mdRow">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> int irc_cmd_me </td>
<td class="md" valign="top">(&nbsp;</td>
<td class="md" nowrap valign="top"><a class="el" href="libircclient_8h.html#a1">irc_session_t</a> *&nbsp;</td>
<td class="mdname" nowrap> <em>session</em>, </td>
</tr>
<tr>
<td class="md" nowrap align="right"></td>
<td></td>
<td class="md" nowrap>const char *&nbsp;</td>
<td class="mdname" nowrap> <em>nch</em>, </td>
</tr>
<tr>
<td class="md" nowrap align="right"></td>
<td></td>
<td class="md" nowrap>const char *&nbsp;</td>
<td class="mdname" nowrap> <em>text</em></td>
</tr>
<tr>
<td></td>
<td class="md">)&nbsp;</td>
<td class="md" colspan="2"></td>
</tr>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<tr>
<td>
&nbsp;
</td>
<td>
<p>
Sends the /me (CTCP ACTION) message to the nick or to the channel.
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td></td><td valign=top><em>session</em>&nbsp;</td><td>An initiated and connected session. </td></tr>
<tr><td></td><td valign=top><em>nch</em>&nbsp;</td><td>A target nick or channel. Must not be NULL. </td></tr>
<tr><td></td><td valign=top><em>text</em>&nbsp;</td><td>Action message text. Must not be NULL.</td></tr>
</table>
</dl>
<dl compact><dt><b>Returns:</b></dt><dd>Return code 0 means success. Other value means error, the error code may be obtained through <a class="el" href="group__errors.html#ga0">irc_errno()</a>. Any error, generated by the IRC server, is available through event_numeric.</dd></dl>
This function is used to send the /me message to channel or private. As for irc_cmd_msg, the target is determined by <em>nch</em> argument.<p>
<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="group__sendcmds.html#ga3">irc_cmd_msg</a> </dd></dl>
</td>
</tr>
</table>
<a class="anchor" name="ga3" doxytag="libircclient.h::irc_cmd_msg" ></a><p>
<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
<tr>
<td class="mdRow">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> irc_cmd_msg </td>
<td class="md" valign="top">(&nbsp;</td>
<td class="md" nowrap valign="top"><a class="el" href="libircclient_8h.html#a1">irc_session_t</a> *&nbsp;</td>
<td class="mdname" nowrap> <em>session</em>, </td>
</tr>
<tr>
<td class="md" nowrap align="right"></td>
<td></td>
<td class="md" nowrap>const char *&nbsp;</td>
<td class="mdname" nowrap> <em>nch</em>, </td>
</tr>
<tr>
<td class="md" nowrap align="right"></td>
<td></td>
<td class="md" nowrap>const char *&nbsp;</td>
<td class="mdname" nowrap> <em>text</em></td>
</tr>
<tr>
<td></td>
<td class="md">)&nbsp;</td>
<td class="md" colspan="2"></td>
</tr>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<tr>
<td>
&nbsp;
</td>
<td>
<p>
Sends the message to the nick or to the channel.
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td></td><td valign=top><em>session</em>&nbsp;</td><td>An initiated and connected session. </td></tr>
<tr><td></td><td valign=top><em>nch</em>&nbsp;</td><td>A target nick or channel. Must not be NULL. </td></tr>
<tr><td></td><td valign=top><em>text</em>&nbsp;</td><td>Message text. Must not be NULL.</td></tr>
</table>
</dl>
<dl compact><dt><b>Returns:</b></dt><dd>Return code 0 means success. Other value means error, the error code may be obtained through <a class="el" href="group__errors.html#ga0">irc_errno()</a>. Any error, generated by the IRC server, is available through event_numeric.</dd></dl>
This function is used to send the channel or private messages. The target is determined by <em>nch</em> argument: if it describes nick, this will be a private message, if a channel name - public (channel) message. Note that depending on channel modes, you may be required to join the channel to send the channel messages. </td>
</tr>
</table>
<a class="anchor" name="ga5" doxytag="libircclient.h::irc_cmd_notice" ></a><p>
<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
<tr>
<td class="mdRow">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> int irc_cmd_notice </td>
<td class="md" valign="top">(&nbsp;</td>
<td class="md" nowrap valign="top"><a class="el" href="libircclient_8h.html#a1">irc_session_t</a> *&nbsp;</td>
<td class="mdname" nowrap> <em>session</em>, </td>
</tr>
<tr>
<td class="md" nowrap align="right"></td>
<td></td>
<td class="md" nowrap>const char *&nbsp;</td>
<td class="mdname" nowrap> <em>nch</em>, </td>
</tr>
<tr>
<td class="md" nowrap align="right"></td>
<td></td>
<td class="md" nowrap>const char *&nbsp;</td>
<td class="mdname" nowrap> <em>text</em></td>
</tr>
<tr>
<td></td>
<td class="md">)&nbsp;</td>
<td class="md" colspan="2"></td>
</tr>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<tr>
<td>
&nbsp;
</td>
<td>
<p>
Sends the notice to the nick or to the channel.
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td></td><td valign=top><em>session</em>&nbsp;</td><td>An initiated and connected session. </td></tr>
<tr><td></td><td valign=top><em>nch</em>&nbsp;</td><td>A target nick or channel. Must not be NULL. </td></tr>
<tr><td></td><td valign=top><em>text</em>&nbsp;</td><td>Notice text. Must not be NULL.</td></tr>
</table>
</dl>
<dl compact><dt><b>Returns:</b></dt><dd>Return code 0 means success. Other value means error, the error code may be obtained through <a class="el" href="group__errors.html#ga0">irc_errno()</a>. Any error, generated by the IRC server, is available through event_numeric.</dd></dl>
This function is used to send the channel or private notices. The target is determined by <em>nch</em> argument: if it describes nick, this will be a private message, if a channel name - public (channel) message. Note that depending on channel modes, you may be required to join the channel to send the channel notices.<p>
The only difference between message and notice is that, according to RFC 1459, you must not automatically reply to NOTICE messages.<p>
<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="group__sendcmds.html#ga3">irc_cmd_msg</a> </dd></dl>
</td>
</tr>
</table>
<a class="anchor" name="ga1" doxytag="libircclient.h::irc_cmd_quit" ></a><p>
<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
<tr>
<td class="mdRow">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> int irc_cmd_quit </td>
<td class="md" valign="top">(&nbsp;</td>
<td class="md" nowrap valign="top"><a class="el" href="libircclient_8h.html#a1">irc_session_t</a> *&nbsp;</td>
<td class="mdname" nowrap> <em>session</em>, </td>
</tr>
<tr>
<td class="md" nowrap align="right"></td>
<td></td>
<td class="md" nowrap>const char *&nbsp;</td>
<td class="mdname" nowrap> <em>reason</em></td>
</tr>
<tr>
<td></td>
<td class="md">)&nbsp;</td>
<td class="md" colspan="2"></td>
</tr>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<tr>
<td>
&nbsp;
</td>
<td>
<p>
Sends QUIT command to the IRC server.
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td></td><td valign=top><em>session</em>&nbsp;</td><td>An initiated and connected session. </td></tr>
<tr><td></td><td valign=top><em>reason</em>&nbsp;</td><td>A reason to quit. May be NULL.</td></tr>
</table>
</dl>
<dl compact><dt><b>Returns:</b></dt><dd>Return code 0 means success. Other value means error, the error code may be obtained through <a class="el" href="group__errors.html#ga0">irc_errno()</a>. Any error, generated by the IRC server, is available through event_numeric.</dd></dl>
This function sends the QUIT command to the IRC server. This command forces the IRC server to close the IRC connection, and terminate the session. </td>
</tr>
</table>
<a class="anchor" name="ga0" doxytag="libircclient.h::irc_send_raw" ></a><p>
<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
<tr>
<td class="mdRow">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> int irc_send_raw </td>
<td class="md" valign="top">(&nbsp;</td>
<td class="md" nowrap valign="top"><a class="el" href="libircclient_8h.html#a1">irc_session_t</a> *&nbsp;</td>
<td class="mdname" nowrap> <em>session</em>, </td>
</tr>
<tr>
<td class="md" nowrap align="right"></td>
<td></td>
<td class="md" nowrap>const char *&nbsp;</td>
<td class="mdname" nowrap> <em>format</em>, </td>
</tr>
<tr>
<td class="md" nowrap align="right"></td>
<td></td>
<td class="md" nowrap>&nbsp;</td>
<td class="mdname" nowrap> <em>...</em></td>
</tr>
<tr>
<td></td>
<td class="md">)&nbsp;</td>
<td class="md" colspan="2"></td>
</tr>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<tr>
<td>
&nbsp;
</td>
<td>
<p>
Sends raw data to the IRC server.
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td></td><td valign=top><em>session</em>&nbsp;</td><td>An initiated and connected session. </td></tr>
<tr><td></td><td valign=top><em>format</em>&nbsp;</td><td>A printf-formatted string, followed by function args.</td></tr>
</table>
</dl>
<dl compact><dt><b>Returns:</b></dt><dd>Return code 0 means success. Other value means error, the error code may be obtained through <a class="el" href="group__errors.html#ga0">irc_errno()</a>. Any error, generated by the IRC server, is available through event_numeric.</dd></dl>
This function sends the raw data as-is to the IRC server. Use it to generate a server command, which is not (yet) provided by libirc directly. </td>
</tr>
</table>
<hr size="1"><address style="align: right;"><small>Generated on Thu Sep 30 02:18:10 2004 for libirc by
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border=0 ></a> 1.3.8 </small></address>
</body>
</html>

View File

@ -0,0 +1,50 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>libircclient: libircclient - a IRC library to create IRC clients</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.7.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li class="current"><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
</div>
<div class="contents">
<h1>libircclient - a IRC library to create IRC clients</h1>
<p>
<h3 align="center">1.3 </h3><h2><a class="anchor" name="intro_sec">
Introduction</a></h2>
libircclient is a small but powerful library, which implements client-server IRC protocol. It is designed to be small, fast, portable and compatible to RFC standards, and most IRC clients. libircclient features include:<ul>
<li>Full multi-threading support.</li><li>Single threads handles all the IRC processing.</li><li>Support for single-threaded applications, and socket-based applications, which use select()</li><li>Synchronous and asynchronous interfaces.</li><li>CTCP support with optional build-in reply code.</li><li>Flexible DCC support, including both DCC chat, and DCC file transfer.</li><li>Can both initiate and react to initiated DCC.</li><li>Can accept or decline DCC sessions asynchronously.</li><li>Plain C interface and implementation (possible to use from C++ code, obviously)</li><li>Compatible with RFC 1459 and most IRC clients.</li><li>Free, licensed under LGPL license.</li><li>Good documentation and examples available.</li></ul>
<h2><a class="anchor" name="install_sec">
Compilation on Unix</a></h2>
To compile libircclient, unpack the distribution, and do the standard mantra: <div class="fragment"><pre class="fragment"><span class="preprocessor"> # ./configure</span>
<span class="preprocessor"></span><span class="preprocessor"> # make</span>
<span class="preprocessor"> # make install</span>
</pre></div><h2><a class="anchor" name="install_secw">
Compilation under MS Windows</a></h2>
To compile libircclient under MS Windows:<ul>
<li>open the src/win32/libircclient.dsw file;</li><li>select the appropriate library linkage (static or dynamic), and debug/release version;</li><li>do 'Make build'</li></ul>
<p>
You can also build the example using spammer.dsp project file. Here you can see how to integrate libircclient into your own project.<h2><a class="anchor" name="doc">
Documentation</a></h2>
Documentation is not installed with <em>make</em> <em>install</em>; you should copy it somewhere by hand. There is html documentation (in <em>doc/html</em>) and manual pages (<em>doc/man</em>). It is also recommended to check the <em>examples</em> directory, there are a few examples, they'll help you.<h2><a class="anchor" name="cocoa">
Cocoa Support</a></h2>
There is an experimental Cocoa framework wrapper around libircclient, called <a href="../../cocoa/doc/html/index.html">IRCClient</a>. You can find the Xcode project and source in the cocoa/ directory in the current trunk.<h2><a class="anchor" name="author">
Author, copyright, support.</a></h2>
If you have any questions, bug reports, suggestions regarding libircclient - please send them to <a href="mailto:gyunaev@ulduzsoft.com">gyunaev@ulduzsoft.com</a>.<p>
Copyright (C) 2004-2009 Georgy Yunaev <a href="mailto:gyunaev@ulduzsoft.com">gyunaev@ulduzsoft.com</a><p>
This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.<p>
This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. </div>
<hr size="1"><address style="text-align: right;"><small>Generated on Sat Jan 10 18:19:35 2009 for libircclient by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.7.1 </small></address>
</body>
</html>

View File

@ -0,0 +1,43 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>libircclient: libirc_doc.h File Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.7.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="files.html"><span>File&nbsp;List</span></a></li>
<li><a href="globals.html"><span>Globals</span></a></li>
</ul>
</div>
</div>
<div class="contents">
<h1>libirc_doc.h File Reference</h1>This file contains Doxygen modules.
<a href="#_details">More...</a>
<p>
<table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
This file contains Doxygen modules.
<p>
<dl class="author" compact><dt><b>Author:</b></dt><dd>Georgy Yunaev </dd></dl>
<dl class="version" compact><dt><b>Version:</b></dt><dd>1.0 </dd></dl>
<dl class="date" compact><dt><b>Date:</b></dt><dd>09.2004 </dd></dl>
</div>
<hr size="1"><address style="text-align: right;"><small>Generated on Sat Jan 10 18:19:35 2009 for libircclient by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.7.1 </small></address>
</body>
</html>

View File

@ -0,0 +1,43 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>libircclient: libirc_doc_faq.h File Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.7.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="files.html"><span>File&nbsp;List</span></a></li>
<li><a href="globals.html"><span>Globals</span></a></li>
</ul>
</div>
</div>
<div class="contents">
<h1>libirc_doc_faq.h File Reference</h1>This file contains libircclient FAQ.
<a href="#_details">More...</a>
<p>
<table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
This file contains libircclient FAQ.
<p>
<dl class="author" compact><dt><b>Author:</b></dt><dd>Georgy Yunaev </dd></dl>
<dl class="version" compact><dt><b>Version:</b></dt><dd>1.0 </dd></dl>
<dl class="date" compact><dt><b>Date:</b></dt><dd>09.2004 </dd></dl>
</div>
<hr size="1"><address style="text-align: right;"><small>Generated on Sat Jan 10 18:19:35 2009 for libircclient by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.7.1 </small></address>
</body>
</html>

View File

@ -0,0 +1,109 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>libircclient: libirc_errors.h File Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.7.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="files.html"><span>File&nbsp;List</span></a></li>
<li><a href="globals.html"><span>Globals</span></a></li>
</ul>
</div>
</div>
<div class="contents">
<h1>libirc_errors.h File Reference</h1>This file defines error codes generated by libircclient.
<a href="#_details">More...</a>
<p>
<table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__errorcodes.html#g7614d0e18de5a72ac8f64a9435a8c856">LIBIRC_ERR_OK</a>&nbsp;&nbsp;&nbsp;0</td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__errorcodes.html#g4b8be458368833c2c72d19cccd33ac34">LIBIRC_ERR_INVAL</a>&nbsp;&nbsp;&nbsp;1</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Invalid argument. <a href="group__errorcodes.html#g4b8be458368833c2c72d19cccd33ac34"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__errorcodes.html#g8603eb7b72065c7bf48e89ed7aab09cd">LIBIRC_ERR_RESOLV</a>&nbsp;&nbsp;&nbsp;2</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Could not resolve host. <a href="group__errorcodes.html#g8603eb7b72065c7bf48e89ed7aab09cd"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__errorcodes.html#gf48bc4c473962372807277dfeb6cf070">LIBIRC_ERR_SOCKET</a>&nbsp;&nbsp;&nbsp;3</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Could not create socket. <a href="group__errorcodes.html#gf48bc4c473962372807277dfeb6cf070"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__errorcodes.html#ga3a48839adc6e93968e77bf92606ac07">LIBIRC_ERR_CONNECT</a>&nbsp;&nbsp;&nbsp;4</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Could not connect. <a href="group__errorcodes.html#ga3a48839adc6e93968e77bf92606ac07"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__errorcodes.html#gf932ba7fb2e7bf4f6ed970b5cb8e715b">LIBIRC_ERR_CLOSED</a>&nbsp;&nbsp;&nbsp;5</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Connection closed by remote peer. <a href="group__errorcodes.html#gf932ba7fb2e7bf4f6ed970b5cb8e715b"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__errorcodes.html#g1ec9f29808aef1acaf8872d45395764b">LIBIRC_ERR_NOMEM</a>&nbsp;&nbsp;&nbsp;6</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Out of memory. <a href="group__errorcodes.html#g1ec9f29808aef1acaf8872d45395764b"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__errorcodes.html#gabf548a884eaf6f7f72b62be6f5946d4">LIBIRC_ERR_ACCEPT</a>&nbsp;&nbsp;&nbsp;7</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Could not accept new connection. <a href="group__errorcodes.html#gabf548a884eaf6f7f72b62be6f5946d4"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__errorcodes.html#g7aebc49be2d25f795ef1e0fe8e96f12f">LIBIRC_ERR_NODCCSEND</a>&nbsp;&nbsp;&nbsp;9</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Could not send this. <a href="group__errorcodes.html#g7aebc49be2d25f795ef1e0fe8e96f12f"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__errorcodes.html#ga276fdc66a5e96ab31b86269775ad681">LIBIRC_ERR_READ</a>&nbsp;&nbsp;&nbsp;10</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Could not read DCC file or socket. <a href="group__errorcodes.html#ga276fdc66a5e96ab31b86269775ad681"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__errorcodes.html#g68d74be1d70d3a15df8976c186e4563a">LIBIRC_ERR_WRITE</a>&nbsp;&nbsp;&nbsp;11</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Could not write DCC file or socket. <a href="group__errorcodes.html#g68d74be1d70d3a15df8976c186e4563a"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__errorcodes.html#g4d4d45b7610aeacd2a142c078a57d38a">LIBIRC_ERR_STATE</a>&nbsp;&nbsp;&nbsp;12</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Invalid state. <a href="group__errorcodes.html#g4d4d45b7610aeacd2a142c078a57d38a"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__errorcodes.html#gcb3673b06a83b11e915bbe53232f2225">LIBIRC_ERR_TIMEOUT</a>&nbsp;&nbsp;&nbsp;13</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Operation timed out. <a href="group__errorcodes.html#gcb3673b06a83b11e915bbe53232f2225"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__errorcodes.html#gbb77f834415ae0a332f823540a5b3245">LIBIRC_ERR_OPENFILE</a>&nbsp;&nbsp;&nbsp;14</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Could not open file for DCC send. <a href="group__errorcodes.html#gbb77f834415ae0a332f823540a5b3245"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__errorcodes.html#g18e0ddcfe90da17b27e52e273a5ec1f5">LIBIRC_ERR_TERMINATED</a>&nbsp;&nbsp;&nbsp;15</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">IRC server connection terminated. <a href="group__errorcodes.html#g18e0ddcfe90da17b27e52e273a5ec1f5"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__errorcodes.html#g5880d5a307f66aaaaf7df7cbf4c165a6">LIBIRC_ERR_NOIPV6</a>&nbsp;&nbsp;&nbsp;16</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">IPv6 not supported. <a href="group__errorcodes.html#g5880d5a307f66aaaaf7df7cbf4c165a6"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="libirc__errors_8h.html#994ba7b13dca6ba4d1461e84e4356efa">LIBIRC_ERR_MAX</a>&nbsp;&nbsp;&nbsp;17</td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
This file defines error codes generated by libircclient.
<p>
<dl class="author" compact><dt><b>Author:</b></dt><dd>Georgy Yunaev </dd></dl>
<dl class="version" compact><dt><b>Version:</b></dt><dd>1.0 </dd></dl>
<dl class="date" compact><dt><b>Date:</b></dt><dd>09.2004 </dd></dl>
<hr><h2>Define Documentation</h2>
<a class="anchor" name="994ba7b13dca6ba4d1461e84e4356efa"></a><!-- doxytag: member="libirc_errors.h::LIBIRC_ERR_MAX" ref="994ba7b13dca6ba4d1461e84e4356efa" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define LIBIRC_ERR_MAX&nbsp;&nbsp;&nbsp;17 </td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
brief Internal max error value count
</div>
</div><p>
</div>
<hr size="1"><address style="text-align: right;"><small>Generated on Sat Jan 10 18:19:35 2009 for libircclient by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.7.1 </small></address>
</body>
</html>

View File

@ -0,0 +1,60 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>libircclient: libirc_events.h File Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.7.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="files.html"><span>File&nbsp;List</span></a></li>
<li><a href="globals.html"><span>Globals</span></a></li>
</ul>
</div>
</div>
<div class="contents">
<h1>libirc_events.h File Reference</h1>Describes event callbacks generated by libircclient.
<a href="#_details">More...</a>
<p>
<table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Data Structures</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structirc__callbacks__t.html">irc_callbacks_t</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Event callbacks structure. <a href="structirc__callbacks__t.html#_details">More...</a><br></td></tr>
<tr><td colspan="2"><br><h2>Typedefs</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef void(*&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__events.html#gc472d3e37df8f172fed3d75e649fac14">irc_event_callback_t</a> )(<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, const char *event, const char *origin, const char **params, unsigned int count)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A most common event callback. <a href="group__events.html#gc472d3e37df8f172fed3d75e649fac14"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef void(*&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__events.html#gb6000d309e87cfb727dcad0136fcb79f">irc_eventcode_callback_t</a> )(<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, unsigned int event, const char *origin, const char **params, unsigned int count)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A numeric event callback. <a href="group__events.html#gb6000d309e87cfb727dcad0136fcb79f"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef void(*&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__events.html#g8c3ddaa55e5ded002b5054f0b926381c">irc_event_dcc_chat_t</a> )(<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, const char *nick, const char *addr, <a class="el" href="libircclient_8h.html#4136d52803e88f369d728e1e3b0e70f7">irc_dcc_t</a> dccid)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A remote DCC CHAT request callback. <a href="group__events.html#g8c3ddaa55e5ded002b5054f0b926381c"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef void(*&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__events.html#g5f4b1d95f2d6619041f993ba748544cf">irc_event_dcc_send_t</a> )(<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, const char *nick, const char *addr, const char *filename, unsigned long size, <a class="el" href="libircclient_8h.html#4136d52803e88f369d728e1e3b0e70f7">irc_dcc_t</a> dccid)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A remote DCC CHAT request callback. <a href="group__events.html#g5f4b1d95f2d6619041f993ba748544cf"></a><br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
Describes event callbacks generated by libircclient.
<p>
<dl class="author" compact><dt><b>Author:</b></dt><dd>Georgy Yunaev </dd></dl>
<dl class="version" compact><dt><b>Version:</b></dt><dd>1.0 </dd></dl>
<dl class="date" compact><dt><b>Date:</b></dt><dd>09.2004 This file should not be included directly. Include <a class="el" href="libircclient_8h.html" title="This file defines all prototypes and functions to use libircclient.">libircclient.h</a> instead. </dd></dl>
</div>
<hr size="1"><address style="text-align: right;"><small>Generated on Sat Jan 10 18:19:35 2009 for libircclient by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.7.1 </small></address>
</body>
</html>

View File

@ -0,0 +1,49 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>libircclient: libirc_options.h File Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.7.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="files.html"><span>File&nbsp;List</span></a></li>
<li><a href="globals.html"><span>Globals</span></a></li>
</ul>
</div>
</div>
<div class="contents">
<h1>libirc_options.h File Reference</h1>This file defines the options used in irc_session_options().
<a href="#_details">More...</a>
<p>
<table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__options.html#geba7a9cf7f7808a61f945a58c6d780f8">LIBIRC_OPTION_DEBUG</a>&nbsp;&nbsp;&nbsp;(1 &lt;&lt; 1)</td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__options.html#g0dd67b0a5373a108d86d911fa5741e72">LIBIRC_OPTION_STRIPNICKS</a>&nbsp;&nbsp;&nbsp;(1 &lt;&lt; 2)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">allows to strip origins automatically. <a href="group__options.html#g0dd67b0a5373a108d86d911fa5741e72"></a><br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
This file defines the options used in irc_session_options().
<p>
<dl class="author" compact><dt><b>Author:</b></dt><dd>Georgy Yunaev </dd></dl>
<dl class="version" compact><dt><b>Version:</b></dt><dd>1.0 </dd></dl>
<dl class="date" compact><dt><b>Date:</b></dt><dd>09.2004 </dd></dl>
</div>
<hr size="1"><address style="text-align: right;"><small>Generated on Sat Jan 10 18:19:35 2009 for libircclient by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.7.1 </small></address>
</body>
</html>

View File

@ -0,0 +1,449 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>libircclient: libirc_rfcnumeric.h File Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.7.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="files.html"><span>File&nbsp;List</span></a></li>
<li><a href="globals.html"><span>Globals</span></a></li>
</ul>
</div>
</div>
<div class="contents">
<h1>libirc_rfcnumeric.h File Reference</h1>This file defines RFC numeric reply codes, which should be used in event_numeric callback. Every code also has a comment regarding its arguments.
<a href="#_details">More...</a>
<p>
<table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#ge7edeafc2c34c3f1e47b47e0c4eec2b4">LIBIRC_RFC_RPL_WELCOME</a>&nbsp;&nbsp;&nbsp;001</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">001 Welcome to the Internet Relay Network &lt;nick&gt;!&lt;user&gt;@&lt;host&gt; <a href="group__rfcnumbers.html#ge7edeafc2c34c3f1e47b47e0c4eec2b4"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g8b051fab649312894ef8a186c3b6b8ff">LIBIRC_RFC_RPL_YOURHOST</a>&nbsp;&nbsp;&nbsp;002</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">002 Your host is &lt;servername&gt;, running version &lt;ver&gt; <a href="group__rfcnumbers.html#g8b051fab649312894ef8a186c3b6b8ff"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g457848e59212b9c34b195408b3499e36">LIBIRC_RFC_RPL_CREATED</a>&nbsp;&nbsp;&nbsp;003</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">003 This server was created &lt;date&gt; <a href="group__rfcnumbers.html#g457848e59212b9c34b195408b3499e36"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g79965ea78224aaea217c27e8bd2ea565">LIBIRC_RFC_RPL_MYINFO</a>&nbsp;&nbsp;&nbsp;004</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">004 &lt;servername&gt; &lt;version&gt; &lt;available user modes&gt; &lt;available channel modes&gt; <a href="group__rfcnumbers.html#g79965ea78224aaea217c27e8bd2ea565"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g20089bb4db6f4edf6ad9c55b21f79351">LIBIRC_RFC_RPL_BOUNCE</a>&nbsp;&nbsp;&nbsp;005</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">005 Try server &lt;server name&gt;, port &lt;port number&gt; <a href="group__rfcnumbers.html#g20089bb4db6f4edf6ad9c55b21f79351"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#gcc4d487e441bc6d2b9186697676d5c83">LIBIRC_RFC_RPL_USERHOST</a>&nbsp;&nbsp;&nbsp;302</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">302 :*1&lt;reply&gt; *( <a href="group__rfcnumbers.html#gcc4d487e441bc6d2b9186697676d5c83"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g27bd750af38efdb964ae3f2dea384469">LIBIRC_RFC_RPL_ISON</a>&nbsp;&nbsp;&nbsp;303</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">303 :*1&lt;nick&gt; *( <a href="group__rfcnumbers.html#g27bd750af38efdb964ae3f2dea384469"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g54aa2b97df3fc570572e68fc88647143">LIBIRC_RFC_RPL_AWAY</a>&nbsp;&nbsp;&nbsp;301</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">301 &lt;nick&gt; :&lt;away message&gt; <a href="group__rfcnumbers.html#g54aa2b97df3fc570572e68fc88647143"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g8ea7395ce19cbc1e55c6699dab32048a">LIBIRC_RFC_RPL_UNAWAY</a>&nbsp;&nbsp;&nbsp;305</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">305 :You are no longer marked as being away <a href="group__rfcnumbers.html#g8ea7395ce19cbc1e55c6699dab32048a"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g223f4d11b29fa52405ae2c5c92a6f57c">LIBIRC_RFC_RPL_NOWAWAY</a>&nbsp;&nbsp;&nbsp;306</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">306 :You have been marked as being away <a href="group__rfcnumbers.html#g223f4d11b29fa52405ae2c5c92a6f57c"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g401ee0bce20717f8fc20240158d9eed3">LIBIRC_RFC_RPL_WHOISUSER</a>&nbsp;&nbsp;&nbsp;311</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">311 &lt;nick&gt; &lt;user&gt; &lt;host&gt; * :&lt;real name&gt; <a href="group__rfcnumbers.html#g401ee0bce20717f8fc20240158d9eed3"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g7df656c3ce9c9d2e0b9cf84e5672beca">LIBIRC_RFC_RPL_WHOISSERVER</a>&nbsp;&nbsp;&nbsp;312</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">312 &lt;nick&gt; &lt;server&gt; :&lt;server info&gt; <a href="group__rfcnumbers.html#g7df656c3ce9c9d2e0b9cf84e5672beca"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g992b1c08e5c48abc86701826d25a2884">LIBIRC_RFC_RPL_WHOISOPERATOR</a>&nbsp;&nbsp;&nbsp;313</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">313 &lt;nick&gt; :is an IRC operator <a href="group__rfcnumbers.html#g992b1c08e5c48abc86701826d25a2884"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#gaf3e96b0ee5bb9b9e3a3e28e2d75f6e4">LIBIRC_RFC_RPL_WHOISIDLE</a>&nbsp;&nbsp;&nbsp;317</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">317 &lt;nick&gt; &lt;integer&gt; :seconds idle <a href="group__rfcnumbers.html#gaf3e96b0ee5bb9b9e3a3e28e2d75f6e4"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#ge8c2ae654f4d2502eeea46cd6116687f">LIBIRC_RFC_RPL_ENDOFWHOIS</a>&nbsp;&nbsp;&nbsp;318</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">318 &lt;nick&gt; :End of WHOIS list <a href="group__rfcnumbers.html#ge8c2ae654f4d2502eeea46cd6116687f"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g61c0201bfafc1f0b39f49dbadbffe4a9">LIBIRC_RFC_RPL_WHOISCHANNELS</a>&nbsp;&nbsp;&nbsp;319</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">319 "&lt;nick&gt; :*( ( "@" / "+" ) &lt;channel&gt; " " )" <a href="group__rfcnumbers.html#g61c0201bfafc1f0b39f49dbadbffe4a9"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#gb3daebb8bacf9bf796358f067ae8422c">LIBIRC_RFC_RPL_WHOWASUSER</a>&nbsp;&nbsp;&nbsp;314</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">314 &lt;nick&gt; &lt;user&gt; &lt;host&gt; * :&lt;real name&gt; <a href="group__rfcnumbers.html#gb3daebb8bacf9bf796358f067ae8422c"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g8eb840d1d812efc90a7dbc2e4c5487a6">LIBIRC_RFC_RPL_ENDOFWHOWAS</a>&nbsp;&nbsp;&nbsp;369</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">369 &lt;nick&gt; :End of WHOWAS <a href="group__rfcnumbers.html#g8eb840d1d812efc90a7dbc2e4c5487a6"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g7cd68428c26cc9867a1b35a25b4acb64">LIBIRC_RFC_RPL_LIST</a>&nbsp;&nbsp;&nbsp;322</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">322 &lt;channel&gt; &lt;# visible&gt; :&lt;topic&gt; <a href="group__rfcnumbers.html#g7cd68428c26cc9867a1b35a25b4acb64"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#gb986ca08f325c8113fbada41a99c84bf">LIBIRC_RFC_RPL_LISTEND</a>&nbsp;&nbsp;&nbsp;323</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">323 :End of LIST <a href="group__rfcnumbers.html#gb986ca08f325c8113fbada41a99c84bf"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#ge7613a900a0aaa5c2a4f9dcf57d20a54">LIBIRC_RFC_RPL_UNIQOPIS</a>&nbsp;&nbsp;&nbsp;325</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">325 &lt;channel&gt; &lt;nickname&gt; <a href="group__rfcnumbers.html#ge7613a900a0aaa5c2a4f9dcf57d20a54"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#gce33e328528f4ae2e7843478839301e5">LIBIRC_RFC_RPL_CHANNELMODEIS</a>&nbsp;&nbsp;&nbsp;324</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">324 &lt;channel&gt; &lt;mode&gt; &lt;mode params&gt; <a href="group__rfcnumbers.html#gce33e328528f4ae2e7843478839301e5"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#gf467ce06debba2e77db229b14f5bbe38">LIBIRC_RFC_RPL_NOTOPIC</a>&nbsp;&nbsp;&nbsp;331</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">331 &lt;channel&gt; :No topic is set <a href="group__rfcnumbers.html#gf467ce06debba2e77db229b14f5bbe38"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g02d7f6f775a11abd3c09bca16d6cdc59">LIBIRC_RFC_RPL_TOPIC</a>&nbsp;&nbsp;&nbsp;332</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">332 &lt;channel&gt; :&lt;topic&gt; <a href="group__rfcnumbers.html#g02d7f6f775a11abd3c09bca16d6cdc59"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g5de83e9710137226a986fdc6aece31da">LIBIRC_RFC_RPL_INVITING</a>&nbsp;&nbsp;&nbsp;341</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">341 &lt;channel&gt; &lt;nick&gt; <a href="group__rfcnumbers.html#g5de83e9710137226a986fdc6aece31da"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g1751c0d93a35da59ede9ea222d543c2a">LIBIRC_RFC_RPL_SUMMONING</a>&nbsp;&nbsp;&nbsp;342</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">342 &lt;user&gt; :Summoning user to IRC <a href="group__rfcnumbers.html#g1751c0d93a35da59ede9ea222d543c2a"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#gc7ccfca1aee7957b59043cd14b4c2199">LIBIRC_RFC_RPL_INVITELIST</a>&nbsp;&nbsp;&nbsp;346</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">346 &lt;channel&gt; &lt;invitemask&gt; <a href="group__rfcnumbers.html#gc7ccfca1aee7957b59043cd14b4c2199"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g897411552f08a25005bc424ba1483f27">LIBIRC_RFC_RPL_ENDOFINVITELIST</a>&nbsp;&nbsp;&nbsp;347</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">347 &lt;channel&gt; :End of channel invite list <a href="group__rfcnumbers.html#g897411552f08a25005bc424ba1483f27"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g5d238f6d71acb8652de17f1e2178ef83">LIBIRC_RFC_RPL_EXCEPTLIST</a>&nbsp;&nbsp;&nbsp;348</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">348 &lt;channel&gt; &lt;exceptionmask&gt; <a href="group__rfcnumbers.html#g5d238f6d71acb8652de17f1e2178ef83"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g2edbebc4a6ebc19a4cf718785f05cdce">LIBIRC_RFC_RPL_ENDOFEXCEPTLIST</a>&nbsp;&nbsp;&nbsp;349</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">349 &lt;channel&gt; :End of channel exception list <a href="group__rfcnumbers.html#g2edbebc4a6ebc19a4cf718785f05cdce"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g4cda85dc41efa4c24e775ea55275b6b6">LIBIRC_RFC_RPL_VERSION</a>&nbsp;&nbsp;&nbsp;351</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">351 &lt;version&gt;.&lt;debuglevel&gt; &lt;server&gt; :&lt;comments&gt; <a href="group__rfcnumbers.html#g4cda85dc41efa4c24e775ea55275b6b6"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g560c4915ca8d0c28551fac8b879f0c6f">LIBIRC_RFC_RPL_WHOREPLY</a>&nbsp;&nbsp;&nbsp;352</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">352 &lt;channel&gt; &lt;user&gt; &lt;host&gt; &lt;server&gt; &lt;nick&gt; ( "H <a href="group__rfcnumbers.html#g560c4915ca8d0c28551fac8b879f0c6f"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#gaad7e5e89e006bdb5c24ff41cf1eda91">LIBIRC_RFC_RPL_ENDOFWHO</a>&nbsp;&nbsp;&nbsp;315</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">315 &lt;name&gt; :End of WHO list <a href="group__rfcnumbers.html#gaad7e5e89e006bdb5c24ff41cf1eda91"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g7fc1ff023f7824d91d5f5567997f0fd3">LIBIRC_RFC_RPL_NAMREPLY</a>&nbsp;&nbsp;&nbsp;353</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">353 ( "= <a href="group__rfcnumbers.html#g7fc1ff023f7824d91d5f5567997f0fd3"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#ged45893cd1a15247dc7200d16a224a76">LIBIRC_RFC_RPL_ENDOFNAMES</a>&nbsp;&nbsp;&nbsp;366</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">366 &lt;channel&gt; :End of NAMES list <a href="group__rfcnumbers.html#ged45893cd1a15247dc7200d16a224a76"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#gbd1f4f6dd81b23d93a8d8670b52ee75c">LIBIRC_RFC_RPL_LINKS</a>&nbsp;&nbsp;&nbsp;364</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">364 &lt;mask&gt; &lt;server&gt; :&lt;hopcount&gt; &lt;server info&gt; <a href="group__rfcnumbers.html#gbd1f4f6dd81b23d93a8d8670b52ee75c"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g3aca62d5fe10d6acdf37ee24f8d9b76d">LIBIRC_RFC_RPL_ENDOFLINKS</a>&nbsp;&nbsp;&nbsp;365</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">365 &lt;mask&gt; :End of LINKS list <a href="group__rfcnumbers.html#g3aca62d5fe10d6acdf37ee24f8d9b76d"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#ga188a0d60499bb3546fdc75b07ee5680">LIBIRC_RFC_RPL_BANLIST</a>&nbsp;&nbsp;&nbsp;367</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">367 &lt;channel&gt; &lt;banmask&gt; <a href="group__rfcnumbers.html#ga188a0d60499bb3546fdc75b07ee5680"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g6040ae147ea3044f201f314fec1a1791">LIBIRC_RFC_RPL_ENDOFBANLIST</a>&nbsp;&nbsp;&nbsp;368</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">368 &lt;channel&gt; :End of channel ban list <a href="group__rfcnumbers.html#g6040ae147ea3044f201f314fec1a1791"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g25e458084627c7c5cc04846128ce7f99">LIBIRC_RFC_RPL_INFO</a>&nbsp;&nbsp;&nbsp;371</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">371 :&lt;string&gt; <a href="group__rfcnumbers.html#g25e458084627c7c5cc04846128ce7f99"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g3f7aa466f616bc7645c9deed702ecbfd">LIBIRC_RFC_RPL_ENDOFINFO</a>&nbsp;&nbsp;&nbsp;374</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">374 :End of INFO list <a href="group__rfcnumbers.html#g3f7aa466f616bc7645c9deed702ecbfd"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g98acf0bf2e6a0fbf654dbaf4e8b7e674">LIBIRC_RFC_RPL_MOTDSTART</a>&nbsp;&nbsp;&nbsp;375</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">375 :- &lt;server&gt; Message of the day - <a href="group__rfcnumbers.html#g98acf0bf2e6a0fbf654dbaf4e8b7e674"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#gd6008de6ef3a06b3817bb42d8d501d67">LIBIRC_RFC_RPL_MOTD</a>&nbsp;&nbsp;&nbsp;372</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">372 :- &lt;text&gt; <a href="group__rfcnumbers.html#gd6008de6ef3a06b3817bb42d8d501d67"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#gceb2ecc1ff91805c62886c945bf3a200">LIBIRC_RFC_RPL_ENDOFMOTD</a>&nbsp;&nbsp;&nbsp;376</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">376 :End of MOTD command <a href="group__rfcnumbers.html#gceb2ecc1ff91805c62886c945bf3a200"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#ga262842cfa504db62230d71dd60863ae">LIBIRC_RFC_RPL_YOUREOPER</a>&nbsp;&nbsp;&nbsp;381</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">381 :You are now an IRC operator <a href="group__rfcnumbers.html#ga262842cfa504db62230d71dd60863ae"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g16341382589ad8a0ea33870690a2eacd">LIBIRC_RFC_RPL_REHASHING</a>&nbsp;&nbsp;&nbsp;382</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">382 &lt;config file&gt; :Rehashing <a href="group__rfcnumbers.html#g16341382589ad8a0ea33870690a2eacd"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g14f3d0e8389976c395115bc47ab56d1f">LIBIRC_RFC_RPL_YOURESERVICE</a>&nbsp;&nbsp;&nbsp;383</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">383 You are service &lt;servicename&gt; <a href="group__rfcnumbers.html#g14f3d0e8389976c395115bc47ab56d1f"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g0326959553f325f18a6b23ddb0847be6">LIBIRC_RFC_RPL_TIME</a>&nbsp;&nbsp;&nbsp;391</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">391 &lt;server&gt; :&lt;string showing server's local time&gt; <a href="group__rfcnumbers.html#g0326959553f325f18a6b23ddb0847be6"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g7c9d31c8960d9b510ffb81eff3f0df55">LIBIRC_RFC_RPL_USERSSTART</a>&nbsp;&nbsp;&nbsp;392</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">392 :UserID Terminal Host <a href="group__rfcnumbers.html#g7c9d31c8960d9b510ffb81eff3f0df55"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#gf3358e349d5e16e5bc436fc4d2d488e6">LIBIRC_RFC_RPL_USERS</a>&nbsp;&nbsp;&nbsp;393</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">393 :&lt;username&gt; &lt;ttyline&gt; &lt;hostname&gt; <a href="group__rfcnumbers.html#gf3358e349d5e16e5bc436fc4d2d488e6"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#gc6bbc01052466794fe1998e4d9316bff">LIBIRC_RFC_RPL_ENDOFUSERS</a>&nbsp;&nbsp;&nbsp;394</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">394 :End of users <a href="group__rfcnumbers.html#gc6bbc01052466794fe1998e4d9316bff"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g08119bd0358f01a771e4d0f0c2aabb32">LIBIRC_RFC_RPL_NOUSERS</a>&nbsp;&nbsp;&nbsp;395</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">395 :Nobody logged in <a href="group__rfcnumbers.html#g08119bd0358f01a771e4d0f0c2aabb32"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g0ef1797805c029473397f07eb0e8e5d0">LIBIRC_RFC_RPL_TRACELINK</a>&nbsp;&nbsp;&nbsp;200</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">200 Link &lt;version &amp; debug level&gt; &lt;destination&gt; &lt;next server&gt; V&lt;protocol version&gt; &lt;link uptime in seconds&gt; &lt;backstream sendq&gt; &lt;upstream sendq&gt; <a href="group__rfcnumbers.html#g0ef1797805c029473397f07eb0e8e5d0"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#gb5334d2fba02850cb8706d3486fcc31e">LIBIRC_RFC_RPL_TRACECONNECTING</a>&nbsp;&nbsp;&nbsp;201</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">201 Try. &lt;class&gt; &lt;server&gt; <a href="group__rfcnumbers.html#gb5334d2fba02850cb8706d3486fcc31e"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g4a427d0bdd9cac2bae6fb651f791fd8f">LIBIRC_RFC_RPL_TRACEHANDSHAKE</a>&nbsp;&nbsp;&nbsp;202</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">202 H.S. &lt;class&gt; &lt;server&gt; <a href="group__rfcnumbers.html#g4a427d0bdd9cac2bae6fb651f791fd8f"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g434485e9f3fa12fa5ab379913002e9ce">LIBIRC_RFC_RPL_TRACEUNKNOWN</a>&nbsp;&nbsp;&nbsp;203</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">203 ???? &lt;class&gt; [&lt;client IP address in dot form&gt;] <a href="group__rfcnumbers.html#g434485e9f3fa12fa5ab379913002e9ce"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g2f1f64dd28787026e6b4f4f5250842ae">LIBIRC_RFC_RPL_TRACEOPERATOR</a>&nbsp;&nbsp;&nbsp;204</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">204 Oper &lt;class&gt; &lt;nick&gt; <a href="group__rfcnumbers.html#g2f1f64dd28787026e6b4f4f5250842ae"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g22db1d704c89691b20346fb683a4b1c4">LIBIRC_RFC_RPL_TRACEUSER</a>&nbsp;&nbsp;&nbsp;205</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">205 User &lt;class&gt; &lt;nick&gt; <a href="group__rfcnumbers.html#g22db1d704c89691b20346fb683a4b1c4"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#gfa8d1963799e46db6b6a5c724193db32">LIBIRC_RFC_RPL_TRACESERVER</a>&nbsp;&nbsp;&nbsp;206</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">206 Serv &lt;class&gt; &lt;int&gt;S &lt;int&gt;C &lt;server&gt; &lt;nick!user|*!*&gt;@&lt;host|server&gt; V&lt;protocol version&gt; <a href="group__rfcnumbers.html#gfa8d1963799e46db6b6a5c724193db32"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g3e81b657f2ed0d38aee95c2b91da4acc">LIBIRC_RFC_RPL_TRACESERVICE</a>&nbsp;&nbsp;&nbsp;207</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">207 Service &lt;class&gt; &lt;name&gt; &lt;type&gt; &lt;active type&gt; <a href="group__rfcnumbers.html#g3e81b657f2ed0d38aee95c2b91da4acc"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#gb7fb76aadf15893f6e4ebeb881efc929">LIBIRC_RFC_RPL_TRACENEWTYPE</a>&nbsp;&nbsp;&nbsp;208</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">208 &lt;newtype&gt; 0 &lt;client name&gt; <a href="group__rfcnumbers.html#gb7fb76aadf15893f6e4ebeb881efc929"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g6497ecbb3653fbe3a981a9f0d61ef278">LIBIRC_RFC_RPL_TRACECLASS</a>&nbsp;&nbsp;&nbsp;209</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">209 Class &lt;class&gt; &lt;count&gt; <a href="group__rfcnumbers.html#g6497ecbb3653fbe3a981a9f0d61ef278"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#gf9cdd749cf9d71fa536d81b9d6ef941a">LIBIRC_RFC_RPL_TRACELOG</a>&nbsp;&nbsp;&nbsp;261</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">261 File &lt;logfile&gt; &lt;debug level&gt; <a href="group__rfcnumbers.html#gf9cdd749cf9d71fa536d81b9d6ef941a"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g3b2d52ed29933fdb22d79ea342fc2f26">LIBIRC_RFC_RPL_TRACEEND</a>&nbsp;&nbsp;&nbsp;262</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">262 &lt;server name&gt; &lt;version &amp; debug level&gt; :End of TRACE <a href="group__rfcnumbers.html#g3b2d52ed29933fdb22d79ea342fc2f26"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g9e11276a19249878b2970d9006534783">LIBIRC_RFC_RPL_STATSLINKINFO</a>&nbsp;&nbsp;&nbsp;211</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">211 &lt;linkname&gt; &lt;sendq&gt; &lt;sent messages&gt; &lt;sent Kbytes&gt; &lt;received messages&gt; &lt;received Kbytes&gt; &lt;time open&gt; <a href="group__rfcnumbers.html#g9e11276a19249878b2970d9006534783"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#gcfc1bd556f14f42907a45df17a15bd71">LIBIRC_RFC_RPL_STATSCOMMANDS</a>&nbsp;&nbsp;&nbsp;212</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">212 &lt;command&gt; &lt;count&gt; &lt;byte count&gt; &lt;remote count&gt; <a href="group__rfcnumbers.html#gcfc1bd556f14f42907a45df17a15bd71"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#gaa0efa6298a7b86c61e4b1721c857e71">LIBIRC_RFC_RPL_ENDOFSTATS</a>&nbsp;&nbsp;&nbsp;219</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">219 &lt;stats letter&gt; :End of STATS report <a href="group__rfcnumbers.html#gaa0efa6298a7b86c61e4b1721c857e71"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#gb63dde0b78690895bd2d37d0991dc0b9">LIBIRC_RFC_RPL_STATSUPTIME</a>&nbsp;&nbsp;&nbsp;242</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">242 :Server Up d days d:02d:02d <a href="group__rfcnumbers.html#gb63dde0b78690895bd2d37d0991dc0b9"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#gb5aa35b134c37d012d79b5246259a127">LIBIRC_RFC_RPL_STATSOLINE</a>&nbsp;&nbsp;&nbsp;243</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">243 O &lt;hostmask&gt; * &lt;name&gt; <a href="group__rfcnumbers.html#gb5aa35b134c37d012d79b5246259a127"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#gdad4d02196dcef34bd0627b428f60863">LIBIRC_RFC_RPL_UMODEIS</a>&nbsp;&nbsp;&nbsp;221</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">221 &lt;user mode string&gt; <a href="group__rfcnumbers.html#gdad4d02196dcef34bd0627b428f60863"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#gbcb0ebc54eb0885b1d36ed13474783b6">LIBIRC_RFC_RPL_SERVLIST</a>&nbsp;&nbsp;&nbsp;234</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">234 &lt;name&gt; &lt;server&gt; &lt;mask&gt; &lt;type&gt; &lt;hopcount&gt; &lt;info&gt; <a href="group__rfcnumbers.html#gbcb0ebc54eb0885b1d36ed13474783b6"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#gbd19df966082bf87e63ad541b8297385">LIBIRC_RFC_RPL_SERVLISTEND</a>&nbsp;&nbsp;&nbsp;235</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">235 &lt;mask&gt; &lt;type&gt; :End of service listing <a href="group__rfcnumbers.html#gbd19df966082bf87e63ad541b8297385"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g150a28b2e4ce27dbdceadbb1143c1a23">LIBIRC_RFC_RPL_LUSERCLIENT</a>&nbsp;&nbsp;&nbsp;251</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">251 :There are &lt;integer&gt; users and &lt;integer&gt; services on &lt;integer&gt; servers <a href="group__rfcnumbers.html#g150a28b2e4ce27dbdceadbb1143c1a23"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g9c401c244142ef0ac85b84d1e06881e0">LIBIRC_RFC_RPL_LUSEROP</a>&nbsp;&nbsp;&nbsp;252</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">252 &lt;integer&gt; :operator(s) online <a href="group__rfcnumbers.html#g9c401c244142ef0ac85b84d1e06881e0"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#gb398de728cca589e82df42d6e9a08f50">LIBIRC_RFC_RPL_LUSERUNKNOWN</a>&nbsp;&nbsp;&nbsp;253</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">253 &lt;integer&gt; :unknown connection(s) <a href="group__rfcnumbers.html#gb398de728cca589e82df42d6e9a08f50"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#gf479e546cbc0060f38f5475f7a1256ef">LIBIRC_RFC_RPL_LUSERCHANNELS</a>&nbsp;&nbsp;&nbsp;254</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">254 &lt;integer&gt; :channels formed <a href="group__rfcnumbers.html#gf479e546cbc0060f38f5475f7a1256ef"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#gca6a0c4e04579223b005f76e9119cee0">LIBIRC_RFC_RPL_LUSERME</a>&nbsp;&nbsp;&nbsp;255</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">255 :I have &lt;integer&gt; clients and &lt;integer&gt; servers <a href="group__rfcnumbers.html#gca6a0c4e04579223b005f76e9119cee0"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#ge050978abb7478ab656f4b0b610a4e9c">LIBIRC_RFC_RPL_ADMINME</a>&nbsp;&nbsp;&nbsp;256</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">256 &lt;server&gt; :Administrative info <a href="group__rfcnumbers.html#ge050978abb7478ab656f4b0b610a4e9c"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#gb7499cdf5c8c4f59e0b1364c03e938c8">LIBIRC_RFC_RPL_ADMINLOC1</a>&nbsp;&nbsp;&nbsp;257</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">257 :&lt;admin info&gt; <a href="group__rfcnumbers.html#gb7499cdf5c8c4f59e0b1364c03e938c8"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g0e6696d5d4918c9575956f87c78a2c75">LIBIRC_RFC_RPL_ADMINLOC2</a>&nbsp;&nbsp;&nbsp;258</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">258 :&lt;admin info&gt; <a href="group__rfcnumbers.html#g0e6696d5d4918c9575956f87c78a2c75"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#geb9af936a2d2c03374417d05ade2cdb3">LIBIRC_RFC_RPL_ADMINEMAIL</a>&nbsp;&nbsp;&nbsp;259</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">259 :&lt;admin info&gt; <a href="group__rfcnumbers.html#geb9af936a2d2c03374417d05ade2cdb3"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#ge5329b95eb3402990675ebf8b705ad66">LIBIRC_RFC_RPL_TRYAGAIN</a>&nbsp;&nbsp;&nbsp;263</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">263 &lt;command&gt; :Please wait a while and try again. <a href="group__rfcnumbers.html#ge5329b95eb3402990675ebf8b705ad66"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g28f90d5f34a3056127516c0edc7c511f">LIBIRC_RFC_ERR_NOSUCHNICK</a>&nbsp;&nbsp;&nbsp;401</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">401 &lt;nickname&gt; :No such nick/channel <a href="group__rfcnumbers.html#g28f90d5f34a3056127516c0edc7c511f"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g8108addfd19326f00eacd71c26809348">LIBIRC_RFC_ERR_NOSUCHSERVER</a>&nbsp;&nbsp;&nbsp;402</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">402 &lt;server name&gt; :No such server <a href="group__rfcnumbers.html#g8108addfd19326f00eacd71c26809348"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g2c0be54b246f18fb20c2c9edbc671649">LIBIRC_RFC_ERR_NOSUCHCHANNEL</a>&nbsp;&nbsp;&nbsp;403</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">403 &lt;channel name&gt; :No such channel <a href="group__rfcnumbers.html#g2c0be54b246f18fb20c2c9edbc671649"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g3624990fe128d867c11b213228e62df8">LIBIRC_RFC_ERR_CANNOTSENDTOCHAN</a>&nbsp;&nbsp;&nbsp;404</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">404 &lt;channel name&gt; :Cannot send to channel <a href="group__rfcnumbers.html#g3624990fe128d867c11b213228e62df8"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g784de3929f568ce298c37c42acb4bfef">LIBIRC_RFC_ERR_TOOMANYCHANNELS</a>&nbsp;&nbsp;&nbsp;405</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">405 &lt;channel name&gt; :You have joined too many channels <a href="group__rfcnumbers.html#g784de3929f568ce298c37c42acb4bfef"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#gf36d875f2f4d88a959aaf75978c8c02e">LIBIRC_RFC_ERR_WASNOSUCHNICK</a>&nbsp;&nbsp;&nbsp;406</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">406 &lt;nickname&gt; :There was no such nickname <a href="group__rfcnumbers.html#gf36d875f2f4d88a959aaf75978c8c02e"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g807eab621113410281fd574de71236ea">LIBIRC_RFC_ERR_TOOMANYTARGETS</a>&nbsp;&nbsp;&nbsp;407</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">407 &lt;target&gt; :&lt;error code&gt; recipients. &lt;abort message&gt; <a href="group__rfcnumbers.html#g807eab621113410281fd574de71236ea"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g6ef41b1c7955888d2d608e6b9213039a">LIBIRC_RFC_ERR_NOSUCHSERVICE</a>&nbsp;&nbsp;&nbsp;408</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">408 &lt;service name&gt; :No such service <a href="group__rfcnumbers.html#g6ef41b1c7955888d2d608e6b9213039a"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g5253a98a0673962ecdf9239c42fd3cfc">LIBIRC_RFC_ERR_NOORIGIN</a>&nbsp;&nbsp;&nbsp;409</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">409 :No origin specified <a href="group__rfcnumbers.html#g5253a98a0673962ecdf9239c42fd3cfc"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g73d5c17577fddd176f2d89e15b657c1a">LIBIRC_RFC_ERR_NORECIPIENT</a>&nbsp;&nbsp;&nbsp;411</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">411 :No recipient given (&lt;command&gt;) <a href="group__rfcnumbers.html#g73d5c17577fddd176f2d89e15b657c1a"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#gc9851022435108cc6074c8cab2311b58">LIBIRC_RFC_ERR_NOTEXTTOSEND</a>&nbsp;&nbsp;&nbsp;412</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">412 :No text to send <a href="group__rfcnumbers.html#gc9851022435108cc6074c8cab2311b58"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#gfcad763cc97b268aa585311350989dca">LIBIRC_RFC_ERR_NOTOPLEVEL</a>&nbsp;&nbsp;&nbsp;413</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">413 &lt;mask&gt; :No toplevel domain specified <a href="group__rfcnumbers.html#gfcad763cc97b268aa585311350989dca"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g4cf5ceeec3305180731860436650c955">LIBIRC_RFC_ERR_WILDTOPLEVEL</a>&nbsp;&nbsp;&nbsp;414</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">414 &lt;mask&gt; :Wildcard in toplevel domain <a href="group__rfcnumbers.html#g4cf5ceeec3305180731860436650c955"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g4b1891745acf0880af1d93d1da71c87b">LIBIRC_RFC_ERR_BADMASK</a>&nbsp;&nbsp;&nbsp;415</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">415 &lt;mask&gt; :Bad Server/host mask <a href="group__rfcnumbers.html#g4b1891745acf0880af1d93d1da71c87b"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#gc9700c81583082d145a5236748efcbad">LIBIRC_RFC_ERR_UNKNOWNCOMMAND</a>&nbsp;&nbsp;&nbsp;421</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">421 &lt;command&gt; :Unknown command <a href="group__rfcnumbers.html#gc9700c81583082d145a5236748efcbad"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#geeb61823055c58ed089c138b7768b899">LIBIRC_RFC_ERR_NOMOTD</a>&nbsp;&nbsp;&nbsp;422</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">422 :MOTD File is missing <a href="group__rfcnumbers.html#geeb61823055c58ed089c138b7768b899"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#gaec4021499b205247f9d4c1ee33ba8f1">LIBIRC_RFC_ERR_NOADMININFO</a>&nbsp;&nbsp;&nbsp;423</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">423 &lt;server&gt; :No administrative info available <a href="group__rfcnumbers.html#gaec4021499b205247f9d4c1ee33ba8f1"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g6b69683ac06754b38388a0d25e29b4b6">LIBIRC_RFC_ERR_FILEERROR</a>&nbsp;&nbsp;&nbsp;424</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">424 :File error doing &lt;file op&gt; on &lt;file&gt; <a href="group__rfcnumbers.html#g6b69683ac06754b38388a0d25e29b4b6"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#gc754b9522b1f4c4376f809d2e3acbee4">LIBIRC_RFC_ERR_NONICKNAMEGIVEN</a>&nbsp;&nbsp;&nbsp;431</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">431 :No nickname given <a href="group__rfcnumbers.html#gc754b9522b1f4c4376f809d2e3acbee4"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g177a2b46f518e603271b3d55ae2f84ab">LIBIRC_RFC_ERR_ERRONEUSNICKNAME</a>&nbsp;&nbsp;&nbsp;432</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">432 &lt;nick&gt; :Erroneous nickname <a href="group__rfcnumbers.html#g177a2b46f518e603271b3d55ae2f84ab"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g2dabe26bb4ab3b90974a6a645f7d7545">LIBIRC_RFC_ERR_NICKNAMEINUSE</a>&nbsp;&nbsp;&nbsp;433</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">433 &lt;nick&gt; :Nickname is already in use <a href="group__rfcnumbers.html#g2dabe26bb4ab3b90974a6a645f7d7545"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g929657e2facbf0e46a540aa8e7516774">LIBIRC_RFC_ERR_NICKCOLLISION</a>&nbsp;&nbsp;&nbsp;436</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">436 &lt;nick&gt; :Nickname collision KILL from &lt;user&gt;@&lt;host&gt; <a href="group__rfcnumbers.html#g929657e2facbf0e46a540aa8e7516774"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#gc387f0d26f0df419f744e6e0ea6ce005">LIBIRC_RFC_ERR_UNAVAILRESOURCE</a>&nbsp;&nbsp;&nbsp;437</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">437 &lt;nick/channel&gt; :Nick/channel is temporarily unavailable <a href="group__rfcnumbers.html#gc387f0d26f0df419f744e6e0ea6ce005"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g929d5bc041ad99b161b6685aa05e4f64">LIBIRC_RFC_ERR_USERNOTINCHANNEL</a>&nbsp;&nbsp;&nbsp;441</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">441 &lt;nick&gt; &lt;channel&gt; :They aren't on that channel <a href="group__rfcnumbers.html#g929d5bc041ad99b161b6685aa05e4f64"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#gb20af2b80994d5c9d7c1e96d88f2e577">LIBIRC_RFC_ERR_NOTONCHANNEL</a>&nbsp;&nbsp;&nbsp;442</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">442 &lt;channel&gt; :You're not on that channel <a href="group__rfcnumbers.html#gb20af2b80994d5c9d7c1e96d88f2e577"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#gaa927136c2fe8a8d4e45b17dfea70303">LIBIRC_RFC_ERR_USERONCHANNEL</a>&nbsp;&nbsp;&nbsp;443</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">443 &lt;user&gt; &lt;channel&gt; :is already on channel <a href="group__rfcnumbers.html#gaa927136c2fe8a8d4e45b17dfea70303"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g82b53ec1f6a19a95c1d7d376a49f3cac">LIBIRC_RFC_ERR_NOLOGIN</a>&nbsp;&nbsp;&nbsp;444</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">444 &lt;user&gt; :User not logged in <a href="group__rfcnumbers.html#g82b53ec1f6a19a95c1d7d376a49f3cac"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#gd0834a3cc4431206ac130e604c81803f">LIBIRC_RFC_ERR_SUMMONDISABLED</a>&nbsp;&nbsp;&nbsp;445</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">445 :SUMMON has been disabled <a href="group__rfcnumbers.html#gd0834a3cc4431206ac130e604c81803f"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g4560dabc75ada66f19872b372e4e30cd">LIBIRC_RFC_ERR_USERSDISABLED</a>&nbsp;&nbsp;&nbsp;446</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">446 :USERS has been disabled <a href="group__rfcnumbers.html#g4560dabc75ada66f19872b372e4e30cd"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g787a41ffa63671e56da644fb32be180a">LIBIRC_RFC_ERR_NOTREGISTERED</a>&nbsp;&nbsp;&nbsp;451</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">451 :You have not registered <a href="group__rfcnumbers.html#g787a41ffa63671e56da644fb32be180a"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#gb3fc9166c154ed2b99c0294f5ce31777">LIBIRC_RFC_ERR_NEEDMOREPARAMS</a>&nbsp;&nbsp;&nbsp;461</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">461 &lt;command&gt; :Not enough parameters <a href="group__rfcnumbers.html#gb3fc9166c154ed2b99c0294f5ce31777"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g1701898fa06e1935d9305222c65d66a6">LIBIRC_RFC_ERR_ALREADYREGISTRED</a>&nbsp;&nbsp;&nbsp;462</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">462 :Unauthorized command (already registered) <a href="group__rfcnumbers.html#g1701898fa06e1935d9305222c65d66a6"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g4a62ec37ba0929b54cc3e77be973ecf1">LIBIRC_RFC_ERR_NOPERMFORHOST</a>&nbsp;&nbsp;&nbsp;463</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">463 :Your host isn't among the privileged <a href="group__rfcnumbers.html#g4a62ec37ba0929b54cc3e77be973ecf1"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#gc6f7ea25e5bdd8b1f7a271232ebafcf2">LIBIRC_RFC_ERR_PASSWDMISMATCH</a>&nbsp;&nbsp;&nbsp;464</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">464 :Password incorrect <a href="group__rfcnumbers.html#gc6f7ea25e5bdd8b1f7a271232ebafcf2"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#ge98bc10404f5961bbdf3747c2e509dc3">LIBIRC_RFC_ERR_YOUREBANNEDCREEP</a>&nbsp;&nbsp;&nbsp;465</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">465 :You are banned from this server <a href="group__rfcnumbers.html#ge98bc10404f5961bbdf3747c2e509dc3"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g1091fd61652ee8f30df898a9091dac88">LIBIRC_RFC_ERR_YOUWILLBEBANNED</a>&nbsp;&nbsp;&nbsp;466</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">466 :You will be banned from this server <a href="group__rfcnumbers.html#g1091fd61652ee8f30df898a9091dac88"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g43267525d047db03b1c8f402cfe549f3">LIBIRC_RFC_ERR_KEYSET</a>&nbsp;&nbsp;&nbsp;467</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">467 &lt;channel&gt; :Channel key already set <a href="group__rfcnumbers.html#g43267525d047db03b1c8f402cfe549f3"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g8644827c4d45e5669a342b1d70a0904e">LIBIRC_RFC_ERR_CHANNELISFULL</a>&nbsp;&nbsp;&nbsp;471</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">471 &lt;channel&gt; :Cannot join channel (+l) <a href="group__rfcnumbers.html#g8644827c4d45e5669a342b1d70a0904e"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g66d80c7acd49ba08f1a14b8775347ed1">LIBIRC_RFC_ERR_UNKNOWNMODE</a>&nbsp;&nbsp;&nbsp;472</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">472 &lt;char&gt; :is unknown mode char to me for &lt;channel&gt; <a href="group__rfcnumbers.html#g66d80c7acd49ba08f1a14b8775347ed1"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#gdfa3659a762a5023cd37615a54f70a2e">LIBIRC_RFC_ERR_INVITEONLYCHAN</a>&nbsp;&nbsp;&nbsp;473</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">473 &lt;channel&gt; :Cannot join channel (+i) <a href="group__rfcnumbers.html#gdfa3659a762a5023cd37615a54f70a2e"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#gc5bf83f758e914ca36d5f379e5819103">LIBIRC_RFC_ERR_BANNEDFROMCHAN</a>&nbsp;&nbsp;&nbsp;474</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">474 &lt;channel&gt; :Cannot join channel (+b) <a href="group__rfcnumbers.html#gc5bf83f758e914ca36d5f379e5819103"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g04a2e9664d25bece875e5c207c6a2697">LIBIRC_RFC_ERR_BADCHANNELKEY</a>&nbsp;&nbsp;&nbsp;475</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">475 &lt;channel&gt; :Cannot join channel (+k) <a href="group__rfcnumbers.html#g04a2e9664d25bece875e5c207c6a2697"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g6e40a8054eb0a0c0c6882cd97f344853">LIBIRC_RFC_ERR_BADCHANMASK</a>&nbsp;&nbsp;&nbsp;476</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">476 &lt;channel&gt; :Bad Channel Mask <a href="group__rfcnumbers.html#g6e40a8054eb0a0c0c6882cd97f344853"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g281b65b85e248598a7ca0cad7fb1fb42">LIBIRC_RFC_ERR_NOCHANMODES</a>&nbsp;&nbsp;&nbsp;477</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">477 &lt;channel&gt; :Channel doesn't support modes <a href="group__rfcnumbers.html#g281b65b85e248598a7ca0cad7fb1fb42"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g9090b770689a1b8b2bb8bb3e463cb6ea">LIBIRC_RFC_ERR_BANLISTFULL</a>&nbsp;&nbsp;&nbsp;478</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">478 &lt;channel&gt; &lt;char&gt; :Channel list is full <a href="group__rfcnumbers.html#g9090b770689a1b8b2bb8bb3e463cb6ea"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g6afd77656919ffebf8468b1aa828be00">LIBIRC_RFC_ERR_NOPRIVILEGES</a>&nbsp;&nbsp;&nbsp;481</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">481 :Permission Denied- You're not an IRC operator <a href="group__rfcnumbers.html#g6afd77656919ffebf8468b1aa828be00"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g45e953e4c730a2f091d74430eeac1d57">LIBIRC_RFC_ERR_CHANOPRIVSNEEDED</a>&nbsp;&nbsp;&nbsp;482</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">482 &lt;channel&gt; :You're not channel operator <a href="group__rfcnumbers.html#g45e953e4c730a2f091d74430eeac1d57"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#gf8a5c81b0413911e6120af8b6c51cf06">LIBIRC_RFC_ERR_CANTKILLSERVER</a>&nbsp;&nbsp;&nbsp;483</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">483 :You can't kill a server! <a href="group__rfcnumbers.html#gf8a5c81b0413911e6120af8b6c51cf06"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g0f12c365aee869c60022e1cfbc6c2158">LIBIRC_RFC_ERR_RESTRICTED</a>&nbsp;&nbsp;&nbsp;484</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">484 :Your connection is restricted! <a href="group__rfcnumbers.html#g0f12c365aee869c60022e1cfbc6c2158"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#ge567a12bbbaa3d2964a4fe43f5b13fa4">LIBIRC_RFC_ERR_UNIQOPPRIVSNEEDED</a>&nbsp;&nbsp;&nbsp;485</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">485 :You're not the original channel operator <a href="group__rfcnumbers.html#ge567a12bbbaa3d2964a4fe43f5b13fa4"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#gbc83a42c94926342d1149f0572c07767">LIBIRC_RFC_ERR_NOOPERHOST</a>&nbsp;&nbsp;&nbsp;491</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">491 :No O-lines for your host <a href="group__rfcnumbers.html#gbc83a42c94926342d1149f0572c07767"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g0c3eb9db119a7f1b9c8c9be9e9b82ae1">LIBIRC_RFC_ERR_UMODEUNKNOWNFLAG</a>&nbsp;&nbsp;&nbsp;501</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">501 :Unknown MODE flag <a href="group__rfcnumbers.html#g0c3eb9db119a7f1b9c8c9be9e9b82ae1"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rfcnumbers.html#g109b90448c6e8f7e2537a5f4f323745b">LIBIRC_RFC_ERR_USERSDONTMATCH</a>&nbsp;&nbsp;&nbsp;502</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">502 :Cannot change mode for other users <a href="group__rfcnumbers.html#g109b90448c6e8f7e2537a5f4f323745b"></a><br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
This file defines RFC numeric reply codes, which should be used in event_numeric callback. Every code also has a comment regarding its arguments.
<p>
<dl class="author" compact><dt><b>Author:</b></dt><dd>Georgy Yunaev </dd></dl>
<dl class="version" compact><dt><b>Version:</b></dt><dd>1.0 </dd></dl>
<dl class="date" compact><dt><b>Date:</b></dt><dd>09.2004 </dd></dl>
</div>
<hr size="1"><address style="text-align: right;"><small>Generated on Sat Jan 10 18:19:35 2009 for libircclient by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.7.1 </small></address>
</body>
</html>

View File

@ -0,0 +1,251 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>libircclient: libircclient.h File Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.7.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="files.html"><span>File&nbsp;List</span></a></li>
<li><a href="globals.html"><span>Globals</span></a></li>
</ul>
</div>
</div>
<div class="contents">
<h1>libircclient.h File Reference</h1>This file defines all prototypes and functions to use libircclient.
<a href="#_details">More...</a>
<p>
<code>#include &lt;sys/select.h&gt;</code><br>
<code>#include &quot;<a class="el" href="libirc__errors_8h.html">libirc_errors.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="libirc__rfcnumeric_8h.html">libirc_rfcnumeric.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="libirc__events_8h.html">libirc_events.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="libirc__options_8h.html">libirc_options.h</a>&quot;</code><br>
<table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Typedefs</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef struct irc_session_s&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A libircclient IRC session. <a href="#0030a976ab3e6a247d57e30fd5979cd5"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef struct irc_dcc_session_s&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="libircclient_8h.html#25dc31f3073d8dffd01f659d19c76e5e">irc_dcc_session_t</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A libircclient DCC session. <a href="#25dc31f3073d8dffd01f659d19c76e5e"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef unsigned int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="libircclient_8h.html#4136d52803e88f369d728e1e3b0e70f7">irc_dcc_t</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A DCC session identifier. <a href="#4136d52803e88f369d728e1e3b0e70f7"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef void(*&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dccstuff.html#g92d4d3f7866bd8c4f1d6df8f05d939f9">irc_dcc_callback_t</a> )(<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, <a class="el" href="libircclient_8h.html#4136d52803e88f369d728e1e3b0e70f7">irc_dcc_t</a> id, int status, void *ctx, const char *data, unsigned int length)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A common DCC callback, used to inform you about the current DCC state or event. <a href="group__dccstuff.html#g92d4d3f7866bd8c4f1d6df8f05d939f9"></a><br></td></tr>
<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__initclose.html#gc5dada35ee77795d8bb77b6701853b98">irc_create_session</a> (<a class="el" href="structirc__callbacks__t.html">irc_callbacks_t</a> *callbacks)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Creates and initiates a new IRC session. <a href="group__initclose.html#gc5dada35ee77795d8bb77b6701853b98"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__initclose.html#g30c6cea4f149632d1905b097a3a573f7">irc_destroy_session</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Destroys previously created IRC session. <a href="group__initclose.html#g30c6cea4f149632d1905b097a3a573f7"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__conndisc.html#g121b23c9e131da651175ae779e1b6851">irc_connect</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, const char *server, unsigned short port, const char *server_password, const char *nick, const char *username, const char *realname)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initiates a connection to IRC server. <a href="group__conndisc.html#g121b23c9e131da651175ae779e1b6851"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__conndisc.html#g5729f584833d55510ae114c8ac3d8e99">irc_connect6</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, const char *server, unsigned short port, const char *server_password, const char *nick, const char *username, const char *realname)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initiates a connection to IRC server using IPv6. <a href="group__conndisc.html#g5729f584833d55510ae114c8ac3d8e99"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__conndisc.html#ga5f6dd73d3f0bdecb53f53362e253aab">irc_disconnect</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Disconnects a connection to IRC server. <a href="group__conndisc.html#ga5f6dd73d3f0bdecb53f53362e253aab"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__conndisc.html#g90f826583118cb2e34135cb0e9b26cf8">irc_is_connected</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Checks whether the session is connecting/connected to the IRC server. <a href="group__conndisc.html#g90f826583118cb2e34135cb0e9b26cf8"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__running.html#g112631b75eb9997868d73fede17440d0">irc_run</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Goes into forever-loop, processing IRC events and generating callbacks. <a href="group__running.html#g112631b75eb9997868d73fede17440d0"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__running.html#g75d2af4209ad2edbdbff77b0cfcabcab">irc_add_select_descriptors</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, fd_set *in_set, fd_set *out_set, int *maxfd)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Adds IRC socket(s) for the descriptor set to use in select(). <a href="group__running.html#g75d2af4209ad2edbdbff77b0cfcabcab"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__running.html#g4526d10056559eac7bd777437d440170">irc_process_select_descriptors</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, fd_set *in_set, fd_set *out_set)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Processes the IRC socket(s), which descriptor(s) are set. <a href="group__running.html#g4526d10056559eac7bd777437d440170"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__ircmd__oth.html#gd69addf9c9e45d888a71d6295429e05c">irc_send_raw</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, const char *format,...)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sends raw data to the IRC server. <a href="group__ircmd__oth.html#gd69addf9c9e45d888a71d6295429e05c"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__ircmd__oth.html#ga89bd6efb6dacf53f25ca5518a5aa4ee">irc_cmd_quit</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, const char *reason)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sends QUIT command to the IRC server. <a href="group__ircmd__oth.html#ga89bd6efb6dacf53f25ca5518a5aa4ee"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__ircmd__ch.html#g4960c546c2a077e8fb01fc7aa5ae7add">irc_cmd_join</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, const char *channel, const char *key)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Joins the new IRC channel. <a href="group__ircmd__ch.html#g4960c546c2a077e8fb01fc7aa5ae7add"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__ircmd__ch.html#gdb50b9a3a78693266fb0a257b997831b">irc_cmd_part</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, const char *channel)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Leaves the IRC channel. <a href="group__ircmd__ch.html#gdb50b9a3a78693266fb0a257b997831b"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__ircmd__ch.html#g77e2b2c46c8883a7986180f36ca17247">irc_cmd_invite</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, const char *nick, const char *channel)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Invites a user to invite-only channel. <a href="group__ircmd__ch.html#g77e2b2c46c8883a7986180f36ca17247"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__ircmd__ch.html#g9b5d3f07ca8a44f0772fc48f677e5bdd">irc_cmd_names</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, const char *channel)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Obtains a list of users who're in channel. <a href="group__ircmd__ch.html#g9b5d3f07ca8a44f0772fc48f677e5bdd"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__ircmd__ch.html#g1f49929bca3afb8d95b2986dfb480d42">irc_cmd_list</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, const char *channel)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Obtains a list of active server channels with their topics. <a href="group__ircmd__ch.html#g1f49929bca3afb8d95b2986dfb480d42"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__ircmd__ch.html#ge088b8e83e3482875ea3d3f970dbb9a2">irc_cmd_topic</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, const char *channel, const char *topic)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Views or changes the channel topic. <a href="group__ircmd__ch.html#ge088b8e83e3482875ea3d3f970dbb9a2"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__ircmd__ch.html#g63489434dcf78d454389b7744624c1e7">irc_cmd_channel_mode</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, const char *channel, const char *mode)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Views or changes the channel mode. <a href="group__ircmd__ch.html#g63489434dcf78d454389b7744624c1e7"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__ircmd__oth.html#g71b0c8a534600d2b354be35e28735513">irc_cmd_user_mode</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, const char *mode)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Views or changes your own user mode. <a href="group__ircmd__oth.html#g71b0c8a534600d2b354be35e28735513"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__ircmd__oth.html#g19ae1ad61caf031e5c2dc950e24b7370">irc_cmd_nick</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, const char *newnick)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Changes your nick. <a href="group__ircmd__oth.html#g19ae1ad61caf031e5c2dc950e24b7370"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__ircmd__oth.html#g7cfe0b48a060c5291ef1d59a3ea79b4f">irc_cmd_whois</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, const char *nick)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Queries the information about the nick. <a href="group__ircmd__oth.html#g7cfe0b48a060c5291ef1d59a3ea79b4f"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__ircmd__msg.html#g8c2ec03f1a9ce7c739e11b64fd088ae5">irc_cmd_msg</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, const char *nch, const char *text)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sends the message to the nick or to the channel. <a href="group__ircmd__msg.html#g8c2ec03f1a9ce7c739e11b64fd088ae5"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__ircmd__msg.html#g09c7e471bf4062b57df10d31ee275fc5">irc_cmd_me</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, const char *nch, const char *text)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sends the /me (CTCP ACTION) message to the nick or to the channel. <a href="group__ircmd__msg.html#g09c7e471bf4062b57df10d31ee275fc5"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__ircmd__msg.html#gf537698d7ec582701fa3473a2dd6775f">irc_cmd_notice</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, const char *nch, const char *text)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sends the notice to the nick or to the channel. <a href="group__ircmd__msg.html#gf537698d7ec582701fa3473a2dd6775f"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__ircmd__ch.html#g47a6c7a2b3f96c9fe41e7df82f0dbd7c">irc_cmd_kick</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, const char *nick, const char *channel, const char *reason)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Kick some lazy ass out of channel. <a href="group__ircmd__ch.html#g47a6c7a2b3f96c9fe41e7df82f0dbd7c"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__ctcp.html#gd3eb9e56b5988f157e6f4a9b73145382">irc_cmd_ctcp_request</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, const char *nick, const char *request)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Generates a CTCP request. <a href="group__ctcp.html#gd3eb9e56b5988f157e6f4a9b73145382"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__ctcp.html#g62cba0ecb13b0d602403e77bbe78550e">irc_cmd_ctcp_reply</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, const char *nick, const char *reply)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Generates a reply to the CTCP request. <a href="group__ctcp.html#g62cba0ecb13b0d602403e77bbe78550e"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__nnparse.html#g217df7c7c7dc5e60678dd14e24e41f03">irc_target_get_nick</a> (const char *target, char *nick, size_t size)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Gets the nick part from the target. <a href="group__nnparse.html#g217df7c7c7dc5e60678dd14e24e41f03"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__nnparse.html#g5929f96c251be831d1de66e6bba6299c">irc_target_get_host</a> (const char *target, char *nick, size_t size)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Gets the host part from the target. <a href="group__nnparse.html#g5929f96c251be831d1de66e6bba6299c"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dccstuff.html#gd6958aac6d67f595966949d1ec5ae4a0">irc_dcc_chat</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, void *ctx, const char *nick, <a class="el" href="group__dccstuff.html#g92d4d3f7866bd8c4f1d6df8f05d939f9">irc_dcc_callback_t</a> callback, <a class="el" href="libircclient_8h.html#4136d52803e88f369d728e1e3b0e70f7">irc_dcc_t</a> *dccid)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initiates a DCC CHAT. <a href="group__dccstuff.html#gd6958aac6d67f595966949d1ec5ae4a0"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dccstuff.html#gb98b7ea58a36d7649c2dca6c4b3c8a7d">irc_dcc_msg</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, <a class="el" href="libircclient_8h.html#4136d52803e88f369d728e1e3b0e70f7">irc_dcc_t</a> dccid, const char *text)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sends the message to the specific DCC CHAT. <a href="group__dccstuff.html#gb98b7ea58a36d7649c2dca6c4b3c8a7d"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dccstuff.html#g43f747d3b2252109f9d811ea8414745b">irc_dcc_accept</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, <a class="el" href="libircclient_8h.html#4136d52803e88f369d728e1e3b0e70f7">irc_dcc_t</a> dccid, void *ctx, <a class="el" href="group__dccstuff.html#g92d4d3f7866bd8c4f1d6df8f05d939f9">irc_dcc_callback_t</a> callback)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Accepts a remote DCC CHAT or DCC RECVFILE request. <a href="group__dccstuff.html#g43f747d3b2252109f9d811ea8414745b"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dccstuff.html#g3ff4ca78d346b7acf847cf28a7211bf4">irc_dcc_decline</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, <a class="el" href="libircclient_8h.html#4136d52803e88f369d728e1e3b0e70f7">irc_dcc_t</a> dccid)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Declines a remote DCC CHAT or DCC RECVFILE request. <a href="group__dccstuff.html#g3ff4ca78d346b7acf847cf28a7211bf4"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dccstuff.html#gf9e8a307113cd27d08e082fda6264262">irc_dcc_sendfile</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, void *ctx, const char *nick, const char *filename, <a class="el" href="group__dccstuff.html#g92d4d3f7866bd8c4f1d6df8f05d939f9">irc_dcc_callback_t</a> callback, <a class="el" href="libircclient_8h.html#4136d52803e88f369d728e1e3b0e70f7">irc_dcc_t</a> *dccid)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sends a file via DCC. <a href="group__dccstuff.html#gf9e8a307113cd27d08e082fda6264262"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dccstuff.html#g8b8aa3363ee93cc395bc89ac5cc9501c">irc_dcc_destroy</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, <a class="el" href="libircclient_8h.html#4136d52803e88f369d728e1e3b0e70f7">irc_dcc_t</a> dccid)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Destroys a DCC session. <a href="group__dccstuff.html#g8b8aa3363ee93cc395bc89ac5cc9501c"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__common.html#gebc090ad2392569b1998d7e2354c7bc7">irc_get_version</a> (unsigned int *high, unsigned int *low)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Obtains a libircclient version. <a href="group__common.html#gebc090ad2392569b1998d7e2354c7bc7"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__contexts.html#ge0cf439a36aafce4abab8f4cce5ac5ff">irc_set_ctx</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, void *ctx)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets the IRC session context. <a href="group__contexts.html#ge0cf439a36aafce4abab8f4cce5ac5ff"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__contexts.html#g341a8954613f29c7ff5a92413398ce7d">irc_get_ctx</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the IRC session context. <a href="group__contexts.html#g341a8954613f29c7ff5a92413398ce7d"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__errors.html#g3a18336093ee74751244d996bc32247d">irc_errno</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the last error code. <a href="group__errors.html#g3a18336093ee74751244d996bc32247d"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">const char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__errors.html#gfdc70ca04626818d2fd9a55da0b90e5f">irc_strerror</a> (int ircerrno)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the text error message associated with this error code. <a href="group__errors.html#gfdc70ca04626818d2fd9a55da0b90e5f"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__options.html#gc5d81f651f1441690f3f59c3ddccaa48">irc_option_set</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, unsigned int option)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets the libircclient option. <a href="group__options.html#gc5d81f651f1441690f3f59c3ddccaa48"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__options.html#gf56687ccad2045204ae23f70d2f54860">irc_option_reset</a> (<a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> *session, unsigned int option)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Resets the libircclient option. <a href="group__options.html#gf56687ccad2045204ae23f70d2f54860"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__colors.html#g2b94751f30cf4cdf444345808fe4ed6c">irc_color_strip_from_mirc</a> (const char *message)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Removes all the color codes and format options. <a href="group__colors.html#g2b94751f30cf4cdf444345808fe4ed6c"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__colors.html#gbb894bace7c39c70b5582bcdb4052bea">irc_color_convert_from_mirc</a> (const char *message)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Converts all the color codes and format options to libircclient colors. <a href="group__colors.html#gbb894bace7c39c70b5582bcdb4052bea"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__colors.html#g7a9a3490741e2883695759ba5f4adc1e">irc_color_convert_to_mirc</a> (const char *message)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Converts all the color codes from libircclient format to mIRC. <a href="group__colors.html#g7a9a3490741e2883695759ba5f4adc1e"></a><br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
This file defines all prototypes and functions to use libircclient.
<p>
<dl class="author" compact><dt><b>Author:</b></dt><dd>Georgy Yunaev </dd></dl>
<dl class="version" compact><dt><b>Version:</b></dt><dd>1.0 </dd></dl>
<dl class="date" compact><dt><b>Date:</b></dt><dd>09.2004 libircclient is a small but powerful library, which implements client-server IRC protocol. It is designed to be small, fast, portable and compatible to RFC standards, and most IRC clients. libircclient features include:<ul>
<li>Full multi-threading support.</li><li>Single threads handles all the IRC processing.</li><li>Support for single-threaded applications, and socket-based applications, which use select()</li><li>Synchronous and asynchronous interfaces.</li><li>CTCP support with optional build-in reply code.</li><li>Flexible DCC support, including both DCC chat, and DCC file transfer.</li><li>Can both initiate and react to initiated DCC.</li><li>Can accept or decline DCC sessions asynchronously.</li><li>Plain C interface and implementation (possible to use from C++ code, obviously)</li><li>Compatible with RFC 1459 and most IRC clients.</li><li>Free, licensed under LGPL license.</li></ul>
</dd></dl>
Note that to use libircclient, only <a class="el" href="libircclient_8h.html" title="This file defines all prototypes and functions to use libircclient.">libircclient.h</a> should be included into your program. Do not include other libirc_* headers. <hr><h2>Typedef Documentation</h2>
<a class="anchor" name="25dc31f3073d8dffd01f659d19c76e5e"></a><!-- doxytag: member="libircclient.h::irc_dcc_session_t" ref="25dc31f3073d8dffd01f659d19c76e5e" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef struct irc_dcc_session_s <a class="el" href="libircclient_8h.html#25dc31f3073d8dffd01f659d19c76e5e">irc_dcc_session_t</a> </td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
A libircclient DCC session.
<p>
This structure describes a DCC session used by libircclient. Its members are internal to libircclient, and should not be used directly.
</div>
</div><p>
<a class="anchor" name="4136d52803e88f369d728e1e3b0e70f7"></a><!-- doxytag: member="libircclient.h::irc_dcc_t" ref="4136d52803e88f369d728e1e3b0e70f7" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef unsigned int <a class="el" href="libircclient_8h.html#4136d52803e88f369d728e1e3b0e70f7">irc_dcc_t</a> </td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
A DCC session identifier.
<p>
The irc_dcc_t type is a DCC session identifier, used to identify the DCC sessions in callbacks and various functions.
</div>
</div><p>
<a class="anchor" name="0030a976ab3e6a247d57e30fd5979cd5"></a><!-- doxytag: member="libircclient.h::irc_session_t" ref="0030a976ab3e6a247d57e30fd5979cd5" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef struct irc_session_s <a class="el" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5">irc_session_t</a> </td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
A libircclient IRC session.
<p>
This structure describes an IRC session. Its members are internal to libircclient, and should not be used directly.
</div>
</div><p>
</div>
<hr size="1"><address style="text-align: right;"><small>Generated on Sat Jan 10 18:19:35 2009 for libircclient by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.7.1 </small></address>
</body>
</html>

View File

@ -0,0 +1,44 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>libircclient: Module Index</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.7.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
<li class="current"><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
</div>
<div class="contents">
<h1>Modules</h1>Here is a list of all modules:<ul>
<li><a class="el" href="group__initclose.html">Initiating and destroying IRC session.</a>
<li><a class="el" href="group__conndisc.html">Connecting, disconnecting from IRC server.</a>
<li><a class="el" href="group__running.html">Running IRC session.</a>
<li><a class="el" href="group__ircmd__ch.html">IRC commands: channel management.</a>
<li><a class="el" href="group__ircmd__msg.html">IRC commands: sending messages/notices.</a>
<li><a class="el" href="group__ircmd__oth.html">IRC commands: other stuff.</a>
<li><a class="el" href="group__ctcp.html">CTCP requests and replies.</a>
<li><a class="el" href="group__nnparse.html">Nickname parsing.</a>
<li><a class="el" href="group__dccstuff.html">DCC chat/send requests and replies.</a>
<li><a class="el" href="group__events.html">Handling IRC events.</a>
<li><a class="el" href="group__errors.html">Obtaining error values and descriptions.</a>
<li><a class="el" href="group__errorcodes.html">Error codes generated by libircclient.</a>
<li><a class="el" href="group__contexts.html">Managing contexts.</a>
<li><a class="el" href="group__common.html">Getting libircclient version.</a>
<li><a class="el" href="group__options.html">Managing libircclient options.</a>
<li><a class="el" href="group__rfcnumbers.html">Numeric reply codes from RFC1459</a>
<li><a class="el" href="group__colors.html">Messages colors manipulation</a>
</ul>
</div>
<hr size="1"><address style="text-align: right;"><small>Generated on Sat Jan 10 18:19:35 2009 for libircclient by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.7.1 </small></address>
</body>
</html>

View File

@ -0,0 +1,76 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>libircclient: Frequently Asked Questions</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.7.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li class="current"><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
</div>
<div class="contents">
<h1><a class="anchor" name="pagefaq">Frequently Asked Questions </a></h1><h2><a class="anchor" name="faq">
FAQ</a></h2>
<h3><a class="anchor" name="faq1">
Why the IRC server generates all these event_numeric events, and what is their meaning?</a></h3>
The IRC protocol itself is asynchronous and server-driven. For you, this means the following:<ul>
<li>For any IRC command, it is not possible to obtain an immediate response whether the command succeed or not. Instead the server will send the reply in a short (or long) period of time.</li><li>For some IRC command there is no 'success' response at all. For example, when you send a text message, IRC server will not send anything to confirm that the message is already sent.</li><li>You can send several commands to the IRC server, and then receive several replies regarding every command. The order of the replies you receive is generally undefined.</li><li>A lot of IRC events sent to you is generated by other users, or the IRC server itself, and are sent to you just when they are generated.</li><li>Long lists (for example, channel lists) are also sent as events. Moreover, these events could be separated by other events (message or notices). And it is your responsibility to separate the data (using event codes), and use some sort of data structure that will hold it until the data is complete. It is not possible to simply query the list of channels, and expect that its content will immediately arrive.</li><li>IRC protocol is event-based, not request-based. This means that if you send JOIN request asking to join a channel, you cannot assume that you have joined it until the server tells you so with JOIN event. Also it is possible for server to "JOIN" you to a specific channel implicitly, without even sending a join request.</li><li>You should be prepared to expect the unexpected from the IRC server. For example, the server can change your nick (seen on most servers, which use <em>nickserv</em> authentication. You can be "forced" to join the channel, to say something, to leave a channel, to change your usermode and so on. Listen what IRC server tells you, and do so.</li></ul>
<h3><a class="anchor" name="faq2">
Why the irc_cmd_... functions does not return an error if the IRC server reports it? For example, why irc_cmd_join() returns success when I attempt to join a password-protected channel, and then the IRC server sends an error?</a></h3>
The irc_cmd_... functions return success when the command is sent to the IRC server. The asynchronous nature of IRC makes it impossible to obtain the command result immediately. Please read <a class="el" href="pagefaq.html#faq1">Why the IRC server generates all these event_numeric events, and what is their meaning?</a>.<h3><a class="anchor" name="faq3">
How to register/auth with NICKSERV?</a></h3>
There is no 'standard' way. However, knowing that all NICKSERV messages are sent via <a class="el" href="structirc__callbacks__t.html#92a5b22ba900f06fa04ea9e79462ffc6">irc_callbacks_t::event_notice</a>, you can use following algorithm: <div class="fragment"><pre class="fragment"><span class="keyword">static</span> <span class="keywordtype">void</span> event_notice (<a class="code" href="libircclient_8h.html#0030a976ab3e6a247d57e30fd5979cd5" title="A libircclient IRC session.">irc_session_t</a> * session, <span class="keyword">const</span> <span class="keywordtype">char</span> * event,
<span class="keyword">const</span> <span class="keywordtype">char</span> * origin, <span class="keyword">const</span> <span class="keywordtype">char</span> ** params, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> count)
{
<span class="keywordtype">char</span> buf[256];
<span class="keywordflow">if</span> ( !origin )
<span class="keywordflow">return</span>;
<span class="keywordflow">if</span> ( strcasecmp (origin, <span class="stringliteral">"nickserv"</span>) )
<span class="keywordflow">return</span>;
<span class="keywordflow">if</span> ( strstr (params[1], <span class="stringliteral">"This nick is not registered"</span>) == params[1] )
{
sprintf (buf, <span class="stringliteral">"REGISTER %s NOMAIL"</span>, gCfg.irc_nickserv_password);
<a class="code" href="group__ircmd__msg.html#g8c2ec03f1a9ce7c739e11b64fd088ae5" title="Sends the message to the nick or to the channel.">irc_cmd_msg</a> (session, <span class="stringliteral">"nickserv"</span>, buf);
}
<span class="keywordflow">else</span> <span class="keywordflow">if</span> ( strstr (params[1], <span class="stringliteral">"This nickname is registered and protected"</span>)
== params[1] )
{
sprintf (buf, <span class="stringliteral">"IDENTIFY %s"</span>, gCfg.irc_nickserv_password);
<a class="code" href="group__ircmd__msg.html#g8c2ec03f1a9ce7c739e11b64fd088ae5" title="Sends the message to the nick or to the channel.">irc_cmd_msg</a> (session, <span class="stringliteral">"nickserv"</span>, buf);
}
<span class="keywordflow">else</span> <span class="keywordflow">if</span> ( strstr (params[1], <span class="stringliteral">"Password accepted - you are now recognized"</span>)
== params[1] )
printf (<span class="stringliteral">"Nickserv authentication succeed."</span>);
}
</pre></div><p>
The idea is to parse the messages sent from NICKSERV, and if they're matched the specific patterns, react on them appropriately.<h3><a class="anchor" name="faq4">
What is CTCP, and why do I need my own handler?</a></h3>
CTCP abbreviature is deciphered as "Client-to-Client Protocol". It is used between the IRC clients to query the remote client for some data, or to send some information - for example, /me messages are sent via CTCP. There is no standard list of possible CTCP requests, and different IRC clients often add their own CTCP codes. The built-in handler reacts on TIME, VERSION, PING and FINGER CTCP queries. If you need to react on other queries, you'll have to write your own CTCP handler. See the source code of libirc_event_ctcp_internal to get an idea how to write it.<h3><a class="anchor" name="faq5">
Why don't I receive event_umode when I am made +o (a channel operator)?</a></h3>
Because this is a channel mode, not a user mode. The user mode <code>+o</code> means that this user is an IRC network operator, not just a channel operator.<h3><a class="anchor" name="faq6">
Why do I get a LIBIRC_ERR_SOCKET error while using static library under Win32?</a></h3>
Because if you use static library, you have to initialize Winsock manually:<p>
<div class="fragment"><pre class="fragment">WORD wVersionRequested = MAKEWORD (1, 1);
WSADATA wsaData;
<span class="keywordflow">if</span> ( WSAStartup (wVersionRequested, &amp;wsaData) != 0 )
<span class="comment">// report an error</span>
<span class="comment">// And now we can use libircclient</span>
</pre></div> </div>
<hr size="1"><address style="text-align: right;"><small>Generated on Sat Jan 10 18:19:35 2009 for libircclient by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.7.1 </small></address>
</body>
</html>

View File

@ -0,0 +1,29 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>libircclient: Page Index</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.7.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li class="current"><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
</div>
<div class="contents">
<h1>Related Pages</h1>Here is a list of all related documentation pages:<ul>
<li><a class="el" href="pagefaq.html">Frequently Asked Questions</a>
</ul>
</div>
<hr size="1"><address style="text-align: right;"><small>Generated on Sat Jan 10 18:19:35 2009 for libircclient by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.7.1 </small></address>
</body>
</html>

View File

@ -0,0 +1,537 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>libircclient: irc_callbacks_t Struct Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.7.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li class="current"><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li><a href="functions.html"><span>Data&nbsp;Fields</span></a></li>
</ul>
</div>
</div>
<div class="contents">
<h1>irc_callbacks_t Struct Reference<br>
<small>
[<a class="el" href="group__events.html">Handling IRC events.</a>]</small>
</h1><!-- doxytag: class="irc_callbacks_t" -->Event callbacks structure.
<a href="#_details">More...</a>
<p>
<code>#include &lt;libirc_events.h&gt;</code>
<p>
<table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="group__events.html#gc472d3e37df8f172fed3d75e649fac14">irc_event_callback_t</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structirc__callbacks__t.html#7294e75ca74ba6dc2b5c18ef8e7795a2">event_connect</a></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="group__events.html#gc472d3e37df8f172fed3d75e649fac14">irc_event_callback_t</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structirc__callbacks__t.html#6151296f8a888132bd25d7db67ff70a5">event_nick</a></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="group__events.html#gc472d3e37df8f172fed3d75e649fac14">irc_event_callback_t</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structirc__callbacks__t.html#a4a728c3926384c3781aa65a18ebeb7a">event_quit</a></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="group__events.html#gc472d3e37df8f172fed3d75e649fac14">irc_event_callback_t</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structirc__callbacks__t.html#8f24c0e2b05425c2308a0106dbaaffec">event_join</a></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="group__events.html#gc472d3e37df8f172fed3d75e649fac14">irc_event_callback_t</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structirc__callbacks__t.html#0076faaabcf638dba3f08c2048956621">event_part</a></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="group__events.html#gc472d3e37df8f172fed3d75e649fac14">irc_event_callback_t</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structirc__callbacks__t.html#3d7add398f78ad0a3c5d96133411d60a">event_mode</a></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="group__events.html#gc472d3e37df8f172fed3d75e649fac14">irc_event_callback_t</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structirc__callbacks__t.html#a92693d9acb2013f6f4b54301ee54d61">event_umode</a></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="group__events.html#gc472d3e37df8f172fed3d75e649fac14">irc_event_callback_t</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structirc__callbacks__t.html#8a5ab3ffc89e19d5748c58bb675436b5">event_topic</a></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="group__events.html#gc472d3e37df8f172fed3d75e649fac14">irc_event_callback_t</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structirc__callbacks__t.html#1a8194bfdbf2622e9384fbd1ac1a67d7">event_kick</a></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="group__events.html#gc472d3e37df8f172fed3d75e649fac14">irc_event_callback_t</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structirc__callbacks__t.html#87d4401073ce8dba9a43fcbcaa20d341">event_channel</a></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="group__events.html#gc472d3e37df8f172fed3d75e649fac14">irc_event_callback_t</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structirc__callbacks__t.html#f0fe4e42f9d675f0d844fc3c58b2dc5d">event_privmsg</a></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="group__events.html#gc472d3e37df8f172fed3d75e649fac14">irc_event_callback_t</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structirc__callbacks__t.html#92a5b22ba900f06fa04ea9e79462ffc6">event_notice</a></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="group__events.html#gc472d3e37df8f172fed3d75e649fac14">irc_event_callback_t</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structirc__callbacks__t.html#ce284026a0e082bcdc13a6dae26dd90b">event_channel_notice</a></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="group__events.html#gc472d3e37df8f172fed3d75e649fac14">irc_event_callback_t</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structirc__callbacks__t.html#e5f3325ab13c3a36ed84435e3bcf7b61">event_invite</a></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="group__events.html#gc472d3e37df8f172fed3d75e649fac14">irc_event_callback_t</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structirc__callbacks__t.html#5f5d386a4df0d1334ffb96b3c406355f">event_ctcp_req</a></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="group__events.html#gc472d3e37df8f172fed3d75e649fac14">irc_event_callback_t</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structirc__callbacks__t.html#1e967e7534502bce5434dd4d4415bdd8">event_ctcp_rep</a></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="group__events.html#gc472d3e37df8f172fed3d75e649fac14">irc_event_callback_t</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structirc__callbacks__t.html#522d1cf8dc01b66efc03d31e3787e11f">event_ctcp_action</a></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="group__events.html#gc472d3e37df8f172fed3d75e649fac14">irc_event_callback_t</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structirc__callbacks__t.html#765b4f0a622cedf2c26c1a615414a3a4">event_unknown</a></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="group__events.html#gb6000d309e87cfb727dcad0136fcb79f">irc_eventcode_callback_t</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structirc__callbacks__t.html#85951d45acff22aea37a822bb9c7aef7">event_numeric</a></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="group__events.html#g8c3ddaa55e5ded002b5054f0b926381c">irc_event_dcc_chat_t</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structirc__callbacks__t.html#fbaf019778a64b544093ee29da5b3c81">event_dcc_chat_req</a></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="group__events.html#g5f4b1d95f2d6619041f993ba748544cf">irc_event_dcc_send_t</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structirc__callbacks__t.html#2ac9d08921faee2472ed16d41799887d">event_dcc_send_req</a></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
Event callbacks structure.
<p>
All the communication with the IRC network is based on events. Generally speaking, event is anything generated by someone else in the network, or by the IRC server itself. "Someone sends you a message", "Someone has joined the channel", "Someone has quits IRC" - all these messages are events.<p>
Every event has its own event handler, which is called when the appropriate event is received. You don't have to define all the event handlers; define only the handlers for the events you need to intercept.<p>
Most event callbacks are the types of <a class="el" href="group__events.html#gc472d3e37df8f172fed3d75e649fac14" title="A most common event callback.">irc_event_callback_t</a>. There are also events, which generate <a class="el" href="group__events.html#gb6000d309e87cfb727dcad0136fcb79f" title="A numeric event callback.">irc_eventcode_callback_t</a>, <a class="el" href="group__events.html#g8c3ddaa55e5ded002b5054f0b926381c" title="A remote DCC CHAT request callback.">irc_event_dcc_chat_t</a> and <a class="el" href="group__events.html#g5f4b1d95f2d6619041f993ba748544cf" title="A remote DCC CHAT request callback.">irc_event_dcc_send_t</a> callbacks. <hr><h2>Field Documentation</h2>
<a class="anchor" name="87d4401073ce8dba9a43fcbcaa20d341"></a><!-- doxytag: member="irc_callbacks_t::event_channel" ref="87d4401073ce8dba9a43fcbcaa20d341" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__events.html#gc472d3e37df8f172fed3d75e649fac14">irc_event_callback_t</a> <a class="el" href="structirc__callbacks__t.html#87d4401073ce8dba9a43fcbcaa20d341">irc_callbacks_t::event_channel</a> </td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
The "channel" event is triggered upon receipt of a PRIVMSG message to an entire channel, which means that someone on a channel with the client has said something aloud. Your own messages don't trigger PRIVMSG event.<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>origin</em>&nbsp;</td><td>the person, who generates the message. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>params[0]</em>&nbsp;</td><td>mandatory, contains the channel name. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>params[1]</em>&nbsp;</td><td>optional, contains the message text </td></tr>
</table>
</dl>
</div>
</div><p>
<a class="anchor" name="ce284026a0e082bcdc13a6dae26dd90b"></a><!-- doxytag: member="irc_callbacks_t::event_channel_notice" ref="ce284026a0e082bcdc13a6dae26dd90b" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__events.html#gc472d3e37df8f172fed3d75e649fac14">irc_event_callback_t</a> <a class="el" href="structirc__callbacks__t.html#ce284026a0e082bcdc13a6dae26dd90b">irc_callbacks_t::event_channel_notice</a> </td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
The "channel_notice" event is triggered upon receipt of a NOTICE message which means that someone has sent the client a public notice. According to RFC 1459, the only difference between NOTICE and PRIVMSG is that you should NEVER automatically reply to NOTICE messages. Unfortunately, this rule is frequently violated by IRC servers itself - for example, NICKSERV messages require reply, and are NOTICEs.<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>origin</em>&nbsp;</td><td>the person, who generates the message. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>params[0]</em>&nbsp;</td><td>mandatory, contains the channel name. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>params[1]</em>&nbsp;</td><td>optional, contains the message text </td></tr>
</table>
</dl>
</div>
</div><p>
<a class="anchor" name="7294e75ca74ba6dc2b5c18ef8e7795a2"></a><!-- doxytag: member="irc_callbacks_t::event_connect" ref="7294e75ca74ba6dc2b5c18ef8e7795a2" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__events.html#gc472d3e37df8f172fed3d75e649fac14">irc_event_callback_t</a> <a class="el" href="structirc__callbacks__t.html#7294e75ca74ba6dc2b5c18ef8e7795a2">irc_callbacks_t::event_connect</a> </td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
The "on_connect" event is triggered when the client successfully connects to the server, and could send commands to the server. No extra params supplied; <em>params</em> is 0.
</div>
</div><p>
<a class="anchor" name="522d1cf8dc01b66efc03d31e3787e11f"></a><!-- doxytag: member="irc_callbacks_t::event_ctcp_action" ref="522d1cf8dc01b66efc03d31e3787e11f" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__events.html#gc472d3e37df8f172fed3d75e649fac14">irc_event_callback_t</a> <a class="el" href="structirc__callbacks__t.html#522d1cf8dc01b66efc03d31e3787e11f">irc_callbacks_t::event_ctcp_action</a> </td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
The "action" event is triggered when the client receives the CTCP ACTION message. These messages usually looks like:<br>
<div class="fragment"><pre class="fragment"> [23:32:55] * Tim gonna sleep.
</pre></div><p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>origin</em>&nbsp;</td><td>the person, who generates the message. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>params[0]</em>&nbsp;</td><td>mandatory, the ACTION message. </td></tr>
</table>
</dl>
</div>
</div><p>
<a class="anchor" name="1e967e7534502bce5434dd4d4415bdd8"></a><!-- doxytag: member="irc_callbacks_t::event_ctcp_rep" ref="1e967e7534502bce5434dd4d4415bdd8" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__events.html#gc472d3e37df8f172fed3d75e649fac14">irc_event_callback_t</a> <a class="el" href="structirc__callbacks__t.html#1e967e7534502bce5434dd4d4415bdd8">irc_callbacks_t::event_ctcp_rep</a> </td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
The "ctcp" event is triggered when the client receives the CTCP reply.<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>origin</em>&nbsp;</td><td>the person, who generates the message. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>params[0]</em>&nbsp;</td><td>mandatory, the CTCP message itself with its arguments. </td></tr>
</table>
</dl>
</div>
</div><p>
<a class="anchor" name="5f5d386a4df0d1334ffb96b3c406355f"></a><!-- doxytag: member="irc_callbacks_t::event_ctcp_req" ref="5f5d386a4df0d1334ffb96b3c406355f" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__events.html#gc472d3e37df8f172fed3d75e649fac14">irc_event_callback_t</a> <a class="el" href="structirc__callbacks__t.html#5f5d386a4df0d1334ffb96b3c406355f">irc_callbacks_t::event_ctcp_req</a> </td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
The "ctcp" event is triggered when the client receives the CTCP request. By default, the built-in CTCP request handler is used. The build-in handler automatically replies on most CTCP messages, so you will rarely need to override it.<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>origin</em>&nbsp;</td><td>the person, who generates the message. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>params[0]</em>&nbsp;</td><td>mandatory, the complete CTCP message, including its arguments.</td></tr>
</table>
</dl>
Mirc generates PING, FINGER, VERSION, TIME and ACTION messages, check the source code of <code>libirc_event_ctcp_internal</code> function to see how to write your own CTCP request handler. Also you may find useful this question in FAQ: <a class="el" href="pagefaq.html#faq4">What is CTCP, and why do I need my own handler?</a>
</div>
</div><p>
<a class="anchor" name="fbaf019778a64b544093ee29da5b3c81"></a><!-- doxytag: member="irc_callbacks_t::event_dcc_chat_req" ref="fbaf019778a64b544093ee29da5b3c81" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__events.html#g8c3ddaa55e5ded002b5054f0b926381c">irc_event_dcc_chat_t</a> <a class="el" href="structirc__callbacks__t.html#fbaf019778a64b544093ee29da5b3c81">irc_callbacks_t::event_dcc_chat_req</a> </td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
The "dcc chat" event is triggered when someone requests a DCC CHAT from you.<p>
See the params in <a class="el" href="group__events.html#g8c3ddaa55e5ded002b5054f0b926381c" title="A remote DCC CHAT request callback.">irc_event_dcc_chat_t</a> specification.
</div>
</div><p>
<a class="anchor" name="2ac9d08921faee2472ed16d41799887d"></a><!-- doxytag: member="irc_callbacks_t::event_dcc_send_req" ref="2ac9d08921faee2472ed16d41799887d" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__events.html#g5f4b1d95f2d6619041f993ba748544cf">irc_event_dcc_send_t</a> <a class="el" href="structirc__callbacks__t.html#2ac9d08921faee2472ed16d41799887d">irc_callbacks_t::event_dcc_send_req</a> </td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
The "dcc chat" event is triggered when someone wants to send a file to you via DCC SEND request.<p>
See the params in <a class="el" href="group__events.html#g5f4b1d95f2d6619041f993ba748544cf" title="A remote DCC CHAT request callback.">irc_event_dcc_send_t</a> specification.
</div>
</div><p>
<a class="anchor" name="e5f3325ab13c3a36ed84435e3bcf7b61"></a><!-- doxytag: member="irc_callbacks_t::event_invite" ref="e5f3325ab13c3a36ed84435e3bcf7b61" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__events.html#gc472d3e37df8f172fed3d75e649fac14">irc_event_callback_t</a> <a class="el" href="structirc__callbacks__t.html#e5f3325ab13c3a36ed84435e3bcf7b61">irc_callbacks_t::event_invite</a> </td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
The "invite" event is triggered upon receipt of an INVITE message, which means that someone is permitting the client's entry into a +i channel.<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>origin</em>&nbsp;</td><td>the person, who INVITEs you. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>params[0]</em>&nbsp;</td><td>mandatory, contains your nick. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>params[1]</em>&nbsp;</td><td>mandatory, contains the channel name you're invited into.</td></tr>
</table>
</dl>
<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="group__ircmd__ch.html#g77e2b2c46c8883a7986180f36ca17247" title="Invites a user to invite-only channel.">irc_cmd_invite</a> irc_cmd_chanmode_invite </dd></dl>
</div>
</div><p>
<a class="anchor" name="8f24c0e2b05425c2308a0106dbaaffec"></a><!-- doxytag: member="irc_callbacks_t::event_join" ref="8f24c0e2b05425c2308a0106dbaaffec" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__events.html#gc472d3e37df8f172fed3d75e649fac14">irc_event_callback_t</a> <a class="el" href="structirc__callbacks__t.html#8f24c0e2b05425c2308a0106dbaaffec">irc_callbacks_t::event_join</a> </td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
The "join" event is triggered upon receipt of a JOIN message, which means that someone has entered a channel that the client is on.<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>origin</em>&nbsp;</td><td>the person, who joins the channel. By comparing it with your own nickname, you can check whether your JOIN command succeed. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>params[0]</em>&nbsp;</td><td>mandatory, contains the channel name. </td></tr>
</table>
</dl>
</div>
</div><p>
<a class="anchor" name="1a8194bfdbf2622e9384fbd1ac1a67d7"></a><!-- doxytag: member="irc_callbacks_t::event_kick" ref="1a8194bfdbf2622e9384fbd1ac1a67d7" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__events.html#gc472d3e37df8f172fed3d75e649fac14">irc_event_callback_t</a> <a class="el" href="structirc__callbacks__t.html#1a8194bfdbf2622e9384fbd1ac1a67d7">irc_callbacks_t::event_kick</a> </td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
The "kick" event is triggered upon receipt of a KICK message, which means that someone on a channel with the client (or possibly the client itself!) has been forcibly ejected.<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>origin</em>&nbsp;</td><td>the person, who kicked the poor. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>params[0]</em>&nbsp;</td><td>mandatory, contains the channel name. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>params[0]</em>&nbsp;</td><td>optional, contains the nick of kicked person. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>params[1]</em>&nbsp;</td><td>optional, contains the kick text </td></tr>
</table>
</dl>
</div>
</div><p>
<a class="anchor" name="3d7add398f78ad0a3c5d96133411d60a"></a><!-- doxytag: member="irc_callbacks_t::event_mode" ref="3d7add398f78ad0a3c5d96133411d60a" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__events.html#gc472d3e37df8f172fed3d75e649fac14">irc_event_callback_t</a> <a class="el" href="structirc__callbacks__t.html#3d7add398f78ad0a3c5d96133411d60a">irc_callbacks_t::event_mode</a> </td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
The "mode" event is triggered upon receipt of a channel MODE message, which means that someone on a channel with the client has changed the channel's parameters.<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>origin</em>&nbsp;</td><td>the person, who changed the channel mode. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>params[0]</em>&nbsp;</td><td>mandatory, contains the channel name. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>params[1]</em>&nbsp;</td><td>mandatory, contains the changed channel mode, like '+t', '-i' and so on. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>params[2]</em>&nbsp;</td><td>optional, contains the mode argument (for example, a key for +k mode, or user who got the channel operator status for +o mode) </td></tr>
</table>
</dl>
</div>
</div><p>
<a class="anchor" name="6151296f8a888132bd25d7db67ff70a5"></a><!-- doxytag: member="irc_callbacks_t::event_nick" ref="6151296f8a888132bd25d7db67ff70a5" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__events.html#gc472d3e37df8f172fed3d75e649fac14">irc_event_callback_t</a> <a class="el" href="structirc__callbacks__t.html#6151296f8a888132bd25d7db67ff70a5">irc_callbacks_t::event_nick</a> </td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
The "nick" event is triggered when the client receives a NICK message, meaning that someone (including you) on a channel with the client has changed their nickname.<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>origin</em>&nbsp;</td><td>the person, who changes the nick. Note that it can be you! </td></tr>
<tr><td valign="top"></td><td valign="top"><em>params[0]</em>&nbsp;</td><td>mandatory, contains the new nick. </td></tr>
</table>
</dl>
</div>
</div><p>
<a class="anchor" name="92a5b22ba900f06fa04ea9e79462ffc6"></a><!-- doxytag: member="irc_callbacks_t::event_notice" ref="92a5b22ba900f06fa04ea9e79462ffc6" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__events.html#gc472d3e37df8f172fed3d75e649fac14">irc_event_callback_t</a> <a class="el" href="structirc__callbacks__t.html#92a5b22ba900f06fa04ea9e79462ffc6">irc_callbacks_t::event_notice</a> </td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
The "notice" event is triggered upon receipt of a NOTICE message which means that someone has sent the client a public or private notice. According to RFC 1459, the only difference between NOTICE and PRIVMSG is that you should NEVER automatically reply to NOTICE messages. Unfortunately, this rule is frequently violated by IRC servers itself - for example, NICKSERV messages require reply, and are NOTICEs.<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>origin</em>&nbsp;</td><td>the person, who generates the message. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>params[0]</em>&nbsp;</td><td>mandatory, contains the target nick name. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>params[1]</em>&nbsp;</td><td>optional, contains the message text </td></tr>
</table>
</dl>
</div>
</div><p>
<a class="anchor" name="85951d45acff22aea37a822bb9c7aef7"></a><!-- doxytag: member="irc_callbacks_t::event_numeric" ref="85951d45acff22aea37a822bb9c7aef7" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__events.html#gb6000d309e87cfb727dcad0136fcb79f">irc_eventcode_callback_t</a> <a class="el" href="structirc__callbacks__t.html#85951d45acff22aea37a822bb9c7aef7">irc_callbacks_t::event_numeric</a> </td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
The "numeric" event is triggered upon receipt of any numeric response from the server. There is a lot of such responses, see the full list here: <a class="el" href="group__rfcnumbers.html">Numeric reply codes from RFC1459</a>.<p>
See the params in <a class="el" href="group__events.html#gb6000d309e87cfb727dcad0136fcb79f" title="A numeric event callback.">irc_eventcode_callback_t</a> specification.
</div>
</div><p>
<a class="anchor" name="0076faaabcf638dba3f08c2048956621"></a><!-- doxytag: member="irc_callbacks_t::event_part" ref="0076faaabcf638dba3f08c2048956621" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__events.html#gc472d3e37df8f172fed3d75e649fac14">irc_event_callback_t</a> <a class="el" href="structirc__callbacks__t.html#0076faaabcf638dba3f08c2048956621">irc_callbacks_t::event_part</a> </td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
The "part" event is triggered upon receipt of a PART message, which means that someone has left a channel that the client is on.<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>origin</em>&nbsp;</td><td>the person, who leaves the channel. By comparing it with your own nickname, you can check whether your PART command succeed. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>params[0]</em>&nbsp;</td><td>mandatory, contains the channel name. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>params[1]</em>&nbsp;</td><td>optional, contains the reason message (user-defined). </td></tr>
</table>
</dl>
</div>
</div><p>
<a class="anchor" name="f0fe4e42f9d675f0d844fc3c58b2dc5d"></a><!-- doxytag: member="irc_callbacks_t::event_privmsg" ref="f0fe4e42f9d675f0d844fc3c58b2dc5d" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__events.html#gc472d3e37df8f172fed3d75e649fac14">irc_event_callback_t</a> <a class="el" href="structirc__callbacks__t.html#f0fe4e42f9d675f0d844fc3c58b2dc5d">irc_callbacks_t::event_privmsg</a> </td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
The "privmsg" event is triggered upon receipt of a PRIVMSG message which is addressed to one or more clients, which means that someone is sending the client a private message.<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>origin</em>&nbsp;</td><td>the person, who generates the message. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>params[0]</em>&nbsp;</td><td>mandatory, contains your nick. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>params[1]</em>&nbsp;</td><td>optional, contains the message text </td></tr>
</table>
</dl>
</div>
</div><p>
<a class="anchor" name="a4a728c3926384c3781aa65a18ebeb7a"></a><!-- doxytag: member="irc_callbacks_t::event_quit" ref="a4a728c3926384c3781aa65a18ebeb7a" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__events.html#gc472d3e37df8f172fed3d75e649fac14">irc_event_callback_t</a> <a class="el" href="structirc__callbacks__t.html#a4a728c3926384c3781aa65a18ebeb7a">irc_callbacks_t::event_quit</a> </td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
The "quit" event is triggered upon receipt of a QUIT message, which means that someone on a channel with the client has disconnected.<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>origin</em>&nbsp;</td><td>the person, who is disconnected </td></tr>
<tr><td valign="top"></td><td valign="top"><em>params[0]</em>&nbsp;</td><td>optional, contains the reason message (user-specified). </td></tr>
</table>
</dl>
</div>
</div><p>
<a class="anchor" name="8a5ab3ffc89e19d5748c58bb675436b5"></a><!-- doxytag: member="irc_callbacks_t::event_topic" ref="8a5ab3ffc89e19d5748c58bb675436b5" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__events.html#gc472d3e37df8f172fed3d75e649fac14">irc_event_callback_t</a> <a class="el" href="structirc__callbacks__t.html#8a5ab3ffc89e19d5748c58bb675436b5">irc_callbacks_t::event_topic</a> </td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
The "topic" event is triggered upon receipt of a TOPIC message, which means that someone on a channel with the client has changed the channel's topic.<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>origin</em>&nbsp;</td><td>the person, who changes the channel topic. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>params[0]</em>&nbsp;</td><td>mandatory, contains the channel name. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>params[1]</em>&nbsp;</td><td>optional, contains the new topic. </td></tr>
</table>
</dl>
</div>
</div><p>
<a class="anchor" name="a92693d9acb2013f6f4b54301ee54d61"></a><!-- doxytag: member="irc_callbacks_t::event_umode" ref="a92693d9acb2013f6f4b54301ee54d61" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__events.html#gc472d3e37df8f172fed3d75e649fac14">irc_event_callback_t</a> <a class="el" href="structirc__callbacks__t.html#a92693d9acb2013f6f4b54301ee54d61">irc_callbacks_t::event_umode</a> </td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
The "umode" event is triggered upon receipt of a user MODE message, which means that your user mode has been changed.<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>origin</em>&nbsp;</td><td>the person, who changed the channel mode. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>params[0]</em>&nbsp;</td><td>mandatory, contains the user changed mode, like '+t', '-i' and so on. </td></tr>
</table>
</dl>
</div>
</div><p>
<a class="anchor" name="765b4f0a622cedf2c26c1a615414a3a4"></a><!-- doxytag: member="irc_callbacks_t::event_unknown" ref="765b4f0a622cedf2c26c1a615414a3a4" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__events.html#gc472d3e37df8f172fed3d75e649fac14">irc_event_callback_t</a> <a class="el" href="structirc__callbacks__t.html#765b4f0a622cedf2c26c1a615414a3a4">irc_callbacks_t::event_unknown</a> </td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
The "unknown" event is triggered upon receipt of any number of unclassifiable miscellaneous messages, which aren't handled by the library.
</div>
</div><p>
<hr>The documentation for this struct was generated from the following file:<ul>
<li><a class="el" href="libirc__events_8h.html">libirc_events.h</a></ul>
</div>
<hr size="1"><address style="text-align: right;"><small>Generated on Sat Jan 10 18:19:35 2009 for libircclient by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.7.1 </small></address>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 706 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@ -0,0 +1,102 @@
/* tabs styles, based on http://www.alistapart.com/articles/slidingdoors */
DIV.tabs
{
float : left;
width : 100%;
background : url("tab_b.gif") repeat-x bottom;
margin-bottom : 4px;
}
DIV.tabs UL
{
margin : 0px;
padding-left : 10px;
list-style : none;
}
DIV.tabs LI, DIV.tabs FORM
{
display : inline;
margin : 0px;
padding : 0px;
}
DIV.tabs FORM
{
float : right;
}
DIV.tabs A
{
float : left;
background : url("tab_r.gif") no-repeat right top;
border-bottom : 1px solid #84B0C7;
font-size : 8px;
font-weight : bold;
text-decoration : none;
}
DIV.tabs A:hover
{
background-position: 100% -150px;
}
DIV.tabs A:link, DIV.tabs A:visited,
DIV.tabs A:active, DIV.tabs A:hover
{
color: #1A419D;
}
DIV.tabs SPAN
{
float : left;
display : block;
background : url("tab_l.gif") no-repeat left top;
padding : 5px 9px;
white-space : nowrap;
}
DIV.tabs INPUT
{
float : right;
display : inline;
font-size : 1em;
}
DIV.tabs TD
{
font-size : 8px;
font-weight : bold;
text-decoration : none;
}
/* Commented Backslash Hack hides rule from IE5-Mac \*/
DIV.tabs SPAN {float : none;}
/* End IE5-Mac hack */
DIV.tabs A:hover SPAN
{
background-position: 0% -150px;
}
DIV.tabs LI.current A
{
background-position: 100% -150px;
border-width : 0px;
}
DIV.tabs LI.current SPAN
{
background-position: 0% -150px;
padding-bottom : 6px;
}
DIV.navpath
{
background : none;
border : none;
border-bottom : 1px solid #84B0C7;
}

View File

@ -0,0 +1,194 @@
/*
* Copyright (C) 2004-2009 Georgy Yunaev gyunaev@ulduzsoft.com
*
* This example is free, and not covered by LGPL license. There is no
* restriction applied to their modification, redistribution, using and so on.
* You can study them, modify them, use them in your own program - either
* completely or partially. By using it you may give me some credits in your
* program, but you don't have to.
*
*
* This example 'guards' the channel against using abusive language. When
* someone says a bad word, it takes some action against him/her, taking
* in account the number of times the person uses it. The first time, it just
* warns the person through a private message, the second time it warns him
* publically in channel, and after the second time it will kicks the insolent
* out of the channel.
*
* To keep it simple, this example reacts only on 'fuck' word, however
* is is easy to add more.
*
* Features used:
* - nickname parsing;
* - handling 'channel' event to track the messages;
* - handling 'nick' event to track nickname changes;
* - generating channel and private messages, and kicking.
*/
#include <map>
#include <string>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#if !defined (WIN32)
#include <unistd.h>
#endif
#include "libircclient.h"
/*
* We store data in IRC session context.
*/
typedef struct
{
char * channel;
char * nick;
std::map <std::string, unsigned int> insolents;
} irc_ctx_t;
void event_connect (irc_session_t * session, const char * event, const char * origin, const char ** params, unsigned int count)
{
irc_ctx_t * ctx = (irc_ctx_t *) irc_get_ctx (session);
irc_cmd_join (session, ctx->channel, 0);
}
void event_nick (irc_session_t * session, const char * event, const char * origin, const char ** params, unsigned int count)
{
char nickbuf[128];
irc_ctx_t * ctx = (irc_ctx_t *) irc_get_ctx (session);
if ( !origin || count != 1 )
return;
irc_target_get_nick (origin, nickbuf, sizeof(nickbuf));
if ( ctx->insolents.find(nickbuf) != ctx->insolents.end() )
{
printf ("%s has changed its nick to %s to prevent penalties - no way!\n",
nickbuf, params[0]);
ctx->insolents[params[0]] = ctx->insolents[nickbuf];
ctx->insolents.erase (nickbuf);
}
}
void event_channel (irc_session_t * session, const char * event, const char * origin, const char ** params, unsigned int count)
{
irc_ctx_t * ctx = (irc_ctx_t *) irc_get_ctx (session);
if ( !origin || count != 2 )
return;
if ( strstr (params[1], "fuck") == 0 )
return;
char nickbuf[128], text[256];
irc_target_get_nick (origin, nickbuf, sizeof(nickbuf));
if ( ctx->insolents.find(nickbuf) == ctx->insolents.end() )
ctx->insolents[nickbuf] = 0;
ctx->insolents[nickbuf]++;
printf ("'%s' swears in the channel '%s' %d times\n",
nickbuf,
params[1],
ctx->insolents[nickbuf]);
switch (ctx->insolents[nickbuf])
{
case 1:
// Send a private message
sprintf (text, "%s, please do not swear in this channel.", nickbuf);
irc_cmd_msg (session, nickbuf, text);
break;
case 2:
// Send a channel message
sprintf (text, "%s, do not swear in this channel, or you'll leave it.", nickbuf);
irc_cmd_msg (session, params[0], text);
break;
default:
// Send a channel notice, and kick the insolent
sprintf (text, "kicked %s from %s for swearing.", nickbuf, params[0]);
irc_cmd_me (session, params[0], text);
irc_cmd_kick (session, nickbuf, params[0], "swearing");
break;
}
}
void event_numeric (irc_session_t * session, unsigned int event, const char * origin, const char ** params, unsigned int count)
{
if ( event > 400 )
{
std::string fulltext;
for ( unsigned int i = 0; i < count; i++ )
{
if ( i > 0 )
fulltext += " ";
fulltext += params[i];
}
printf ("ERROR %d: %s: %s\n", event, origin ? origin : "?", fulltext.c_str());
}
}
int main (int argc, char **argv)
{
irc_callbacks_t callbacks;
irc_ctx_t ctx;
if ( argc != 4 )
{
printf ("Usage: %s <server> <nick> <channel>\n", argv[0]);
return 1;
}
// Initialize the callbacks
memset (&callbacks, 0, sizeof(callbacks));
// Set up the callbacks we will use
callbacks.event_connect = event_connect;
callbacks.event_channel = event_channel;
callbacks.event_nick = event_nick;
callbacks.event_numeric = event_numeric;
// And create the IRC session; 0 means error
irc_session_t * s = irc_create_session (&callbacks);
if ( !s )
{
printf ("Could not create IRC session\n");
return 1;
}
ctx.channel = argv[3];
ctx.nick = argv[2];
irc_set_ctx (s, &ctx);
// Initiate the IRC server connection
if ( irc_connect (s, argv[1], 6667, 0, argv[2], 0, 0) )
{
printf ("Could not connect: %s\n", irc_strerror (irc_errno(s)));
return 1;
}
// and run into forever loop, generating events
irc_run (s);
return 1;
}

View File

@ -0,0 +1,143 @@
/*
* Copyright (C) 2004-2009 Georgy Yunaev gyunaev@ulduzsoft.com
*
* This example is free, and not covered by LGPL license. There is no
* restriction applied to their modification, redistribution, using and so on.
* You can study them, modify them, use them in your own program - either
* completely or partially. By using it you may give me some credits in your
* program, but you don't have to.
*
*
* This program will test automatic color replacement features. It uses the
* colors itself, generates colored string in reaction to 'test' word, and
* dumps the de-colored messages.
*/
#include <string>
#include <stdio.h>
#include <stdarg.h>
#include <string.h>
#include <stdlib.h>
#include "libircclient.h"
/*
* We store data in IRC session context.
*/
typedef struct
{
char * channel;
char * nick;
} irc_ctx_t;
void event_join (irc_session_t * session, const char * event, const char * origin, const char ** params, unsigned int count)
{
char * str = irc_color_convert_to_mirc ("[B]Hi[/B] [U]all[/U]");
irc_cmd_msg (session, params[0], str);
free (str);
}
void event_connect (irc_session_t * session, const char * event, const char * origin, const char ** params, unsigned int count)
{
irc_ctx_t * ctx = (irc_ctx_t *) irc_get_ctx (session);
irc_cmd_join (session, ctx->channel, 0);
}
void event_channel (irc_session_t * session, const char * event, const char * origin, const char ** params, unsigned int count)
{
printf ("'%s' said in channel %s: %s\n",
origin ? origin : "someone",
params[0], params[1] );
char * stripped = irc_color_strip_from_mirc (params[1]);
irc_cmd_msg (session, params[0], stripped);
free (stripped);
stripped = irc_color_convert_from_mirc (params[1]);
irc_cmd_msg (session, params[0], stripped);
free (stripped);
if ( !strcmp (params[1], "test") )
{
char * str = irc_color_convert_to_mirc ("normal, [B]bold[/B], [I]reverse[/I], [U]underline[/U], [COLOR=RED]red on white[/COLOR], [COLOR=YELLOW/BLACK]yellow on black[/COLOR]");
irc_cmd_msg (session, params[0], str);
free (str);
}
if ( strstr (params[1], "testme") == params[1] )
{
char * str = irc_color_convert_to_mirc (params[1] + 7);
irc_cmd_msg (session, params[0], str);
free (str);
}
}
void event_numeric (irc_session_t * session, unsigned int event, const char * origin, const char ** params, unsigned int count)
{
if ( event > 400 )
{
std::string fulltext;
for ( unsigned int i = 0; i < count; i++ )
{
if ( i > 0 )
fulltext += " ";
fulltext += params[i];
}
printf ("ERROR %d: %s: %s\n", event, origin ? origin : "?", fulltext.c_str());
}
}
int main (int argc, char **argv)
{
irc_callbacks_t callbacks;
irc_ctx_t ctx;
irc_session_t * s;
if ( argc != 4 )
{
printf ("Usage: %s <server> <nick> <channel>\n", argv[0]);
return 1;
}
memset (&callbacks, 0, sizeof(callbacks));
callbacks.event_connect = event_connect;
callbacks.event_join = event_join;
callbacks.event_channel = event_channel;
callbacks.event_numeric = event_numeric;
s = irc_create_session (&callbacks);
if ( !s )
{
printf ("Could not create session\n");
return 1;
}
ctx.channel = argv[3];
ctx.nick = argv[2];
irc_set_ctx (s, &ctx);
if ( irc_connect (s, argv[1], 6667, 0, argv[2], 0, 0) )
{
printf ("Could not connect: %s\n", irc_strerror (irc_errno(s)));
return 1;
}
irc_run (s);
return 1;
}

View File

@ -0,0 +1,172 @@
/*
* Copyright (C) 2004-2009 Georgy Yunaev gyunaev@ulduzsoft.com
*
* This example is free, and not covered by LGPL license. There is no
* restriction applied to their modification, redistribution, using and so on.
* You can study them, modify them, use them in your own program - either
* completely or partially. By using it you may give me some credits in your
* program, but you don't have to.
*
*
* This example emulates a simple file server. Only 'list' and 'get' commands
* are supported.
*
* Features used:
* - automatic nickname parsing using LIBIRC_OPTION_STRIPNICKS;
* - handling privmsg events to parse commands;
* - generating listings and DCC file transfer;
*
* $Id: ircftp.cpp 73 2009-01-03 11:14:59Z gyunaev $
*/
#include <map>
#include <string>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include <dirent.h>
#include "libircclient.h"
#define FILES_DIR "."
/*
* We store data in IRC session context.
*/
typedef struct
{
std::string channel;
std::string nick;
} irc_ctx_t;
void dcc_callback (irc_session_t * session, irc_dcc_t id, int status, void * ctx, const char * data, unsigned int length)
{
if ( status == 0 && length == 0 )
{
printf ("File sent successfully\n");
}
else if ( status )
{
printf ("File sent error: %s (%d)\n", irc_strerror(status), status);
}
else
{
printf ("File sent progress: %d\n", length);
}
}
void event_connect (irc_session_t * session, const char * event, const char * origin, const char ** params, unsigned int count)
{
irc_ctx_t * ctx = (irc_ctx_t *) irc_get_ctx (session);
irc_cmd_join (session, ctx->channel.c_str(), 0);
}
void event_privmsg (irc_session_t * session, const char * event, const char * origin, const char ** params, unsigned int count)
{
if ( !origin || count != 2 )
return;
if ( !strcasecmp (params[1], "list") )
{
dirent *d;
DIR *dir = opendir(FILES_DIR);
if ( !dir )
return;
while ( (d = readdir (dir)) != 0 )
{
if ( !strcmp (d->d_name, ".") )
continue;
irc_cmd_msg (session, origin, d->d_name);
}
closedir (dir);
}
else if ( strstr (params[1], "get ") == params[1] )
{
irc_dcc_t dccid;
if ( irc_dcc_sendfile (session, 0, origin, params[1] + 4, dcc_callback, &dccid) )
irc_cmd_msg (session, origin, "Could not send this file");
}
else
{
irc_cmd_msg (session, origin, "Commands: send | list");
}
}
void event_numeric (irc_session_t * session, unsigned int event, const char * origin, const char ** params, unsigned int count)
{
if ( event > 400 )
{
std::string fulltext;
for ( unsigned int i = 0; i < count; i++ )
{
if ( i > 0 )
fulltext += " ";
fulltext += params[i];
}
printf ("ERROR %d: %s: %s\n", event, origin ? origin : "?", fulltext.c_str());
}
}
int main (int argc, char **argv)
{
irc_callbacks_t callbacks;
irc_ctx_t ctx;
if ( argc != 4 )
{
printf ("Usage: %s <server> <nick> <channel>\n", argv[0]);
return 1;
}
// Initialize the callbacks
memset (&callbacks, 0, sizeof(callbacks));
// Set up the callbacks we will use
callbacks.event_connect = event_connect;
callbacks.event_privmsg = event_privmsg;
callbacks.event_numeric = event_numeric;
// And create the IRC session; 0 means error
irc_session_t * s = irc_create_session (&callbacks);
if ( !s )
{
printf ("Could not create IRC session\n");
return 1;
}
ctx.channel = argv[3];
ctx.nick = argv[2];
irc_set_ctx (s, &ctx);
irc_option_set (s, LIBIRC_OPTION_STRIPNICKS);
// Initiate the IRC server connection
if ( irc_connect (s, argv[1], 6667, 0, argv[2], 0, 0) )
{
printf ("Could not connect: %s\n", irc_strerror (irc_errno(s)));
return 1;
}
// and run into forever loop, generating events
irc_run (s);
return 1;
}

View File

@ -0,0 +1,322 @@
/*
* Copyright (C) 2004-2009 Georgy Yunaev gyunaev@ulduzsoft.com
*
* This example is free, and not covered by LGPL license. There is no
* restriction applied to their modification, redistribution, using and so on.
* You can study them, modify them, use them in your own program - either
* completely or partially. By using it you may give me some credits in your
* program, but you don't have to.
*
*
* This example tests most features of libirc. It can join the specific
* channel, welcoming all the people there, and react on some messages -
* 'help', 'quit', 'dcc chat', 'dcc send', 'ctcp'. Also it can reply to
* CTCP requests, receive DCC files and accept DCC chats.
*
* Features used:
* - nickname parsing;
* - handling 'channel' event to track the messages;
* - handling dcc and ctcp events;
* - using internal ctcp rely procedure;
* - generating channel messages;
* - handling dcc send and dcc chat events;
* - initiating dcc send and dcc chat.
*
* $Id: irctest.c 73 2009-01-03 11:14:59Z gyunaev $
*/
#include <stdio.h>
#include <stdarg.h>
#include <string.h>
#include <stdlib.h>
#include "libircclient.h"
/*
* We store data in IRC session context.
*/
typedef struct
{
char * channel;
char * nick;
} irc_ctx_t;
void addlog (const char * fmt, ...)
{
FILE * fp;
char buf[1024];
va_list va_alist;
va_start (va_alist, fmt);
#if defined (WIN32)
_vsnprintf (buf, sizeof(buf), fmt, va_alist);
#else
vsnprintf (buf, sizeof(buf), fmt, va_alist);
#endif
va_end (va_alist);
printf ("%s\n", buf);
if ( (fp = fopen ("irctest.log", "ab")) != 0 )
{
fprintf (fp, "%s\n", buf);
fclose (fp);
}
}
void dump_event (irc_session_t * session, const char * event, const char * origin, const char ** params, unsigned int count)
{
char buf[512];
int cnt;
buf[0] = '\0';
for ( cnt = 0; cnt < count; cnt++ )
{
if ( cnt )
strcat (buf, "|");
strcat (buf, params[cnt]);
}
addlog ("Event \"%s\", origin: \"%s\", params: %d [%s]", event, origin ? origin : "NULL", cnt, buf);
}
void event_join (irc_session_t * session, const char * event, const char * origin, const char ** params, unsigned int count)
{
dump_event (session, event, origin, params, count);
irc_cmd_user_mode (session, "+i");
irc_cmd_msg (session, params[0], "Hi all");
}
void event_connect (irc_session_t * session, const char * event, const char * origin, const char ** params, unsigned int count)
{
irc_ctx_t * ctx = (irc_ctx_t *) irc_get_ctx (session);
dump_event (session, event, origin, params, count);
irc_cmd_join (session, ctx->channel, 0);
}
void event_privmsg (irc_session_t * session, const char * event, const char * origin, const char ** params, unsigned int count)
{
dump_event (session, event, origin, params, count);
printf ("'%s' said me (%s): %s\n",
origin ? origin : "someone",
params[0], params[1] );
}
void dcc_recv_callback (irc_session_t * session, irc_dcc_t id, int status, void * ctx, const char * data, unsigned int length)
{
static int count = 1;
char buf[12];
switch (status)
{
case LIBIRC_ERR_CLOSED:
printf ("DCC %d: chat closed\n", id);
break;
case 0:
if ( !data )
{
printf ("DCC %d: chat connected\n", id);
irc_dcc_msg (session, id, "Hehe");
}
else
{
printf ("DCC %d: %s\n", id, data);
sprintf (buf, "DCC [%d]: %d", id, count++);
irc_dcc_msg (session, id, buf);
}
break;
default:
printf ("DCC %d: error %s\n", id, irc_strerror(status));
break;
}
}
void dcc_file_recv_callback (irc_session_t * session, irc_dcc_t id, int status, void * ctx, const char * data, unsigned int length)
{
if ( status == 0 && length == 0 )
{
printf ("File sent successfully\n");
if ( ctx )
fclose ((FILE*) ctx);
}
else if ( status )
{
printf ("File sent error: %d\n", status);
if ( ctx )
fclose ((FILE*) ctx);
}
else
{
if ( ctx )
fwrite (data, 1, length, (FILE*) ctx);
printf ("File sent progress: %d\n", length);
}
}
void event_channel (irc_session_t * session, const char * event, const char * origin, const char ** params, unsigned int count)
{
char nickbuf[128];
if ( count != 2 )
return;
printf ("'%s' said in channel %s: %s\n",
origin ? origin : "someone",
params[0], params[1] );
if ( !origin )
return;
irc_target_get_nick (origin, nickbuf, sizeof(nickbuf));
if ( !strcmp (params[1], "quit") )
irc_cmd_quit (session, "of course, Master!");
if ( !strcmp (params[1], "help") )
{
irc_cmd_msg (session, params[0], "quit, help, dcc chat, dcc send, ctcp");
}
if ( !strcmp (params[1], "ctcp") )
{
irc_cmd_ctcp_request (session, nickbuf, "PING 223");
irc_cmd_ctcp_request (session, nickbuf, "FINGER");
irc_cmd_ctcp_request (session, nickbuf, "VERSION");
irc_cmd_ctcp_request (session, nickbuf, "TIME");
}
if ( !strcmp (params[1], "dcc chat") )
{
irc_dcc_t dccid;
irc_dcc_chat (session, 0, nickbuf, dcc_recv_callback, &dccid);
printf ("DCC chat ID: %d\n", dccid);
}
if ( !strcmp (params[1], "dcc send") )
{
irc_dcc_t dccid;
irc_dcc_sendfile (session, 0, nickbuf, "irctest.c", dcc_file_recv_callback, &dccid);
printf ("DCC send ID: %d\n", dccid);
}
if ( !strcmp (params[1], "topic") )
irc_cmd_topic (session, params[0], 0);
else if ( strstr (params[1], "topic ") == params[1] )
irc_cmd_topic (session, params[0], params[1] + 6);
if ( strstr (params[1], "mode ") == params[1] )
irc_cmd_channel_mode (session, params[0], params[1] + 5);
if ( strstr (params[1], "nick ") == params[1] )
irc_cmd_nick (session, params[1] + 5);
if ( strstr (params[1], "whois ") == params[1] )
irc_cmd_whois (session, params[1] + 5);
}
void irc_event_dcc_chat (irc_session_t * session, const char * nick, const char * addr, irc_dcc_t dccid)
{
printf ("DCC chat [%d] requested from '%s' (%s)\n", dccid, nick, addr);
irc_dcc_accept (session, dccid, 0, dcc_recv_callback);
}
void irc_event_dcc_send (irc_session_t * session, const char * nick, const char * addr, const char * filename, unsigned long size, irc_dcc_t dccid)
{
FILE * fp;
printf ("DCC send [%d] requested from '%s' (%s): %s (%lu bytes)\n", dccid, nick, addr, filename, size);
if ( (fp = fopen ("file", "wb")) == 0 )
abort();
irc_dcc_accept (session, dccid, fp, dcc_file_recv_callback);
}
void event_numeric (irc_session_t * session, unsigned int event, const char * origin, const char ** params, unsigned int count)
{
char buf[24];
sprintf (buf, "%d", event);
dump_event (session, buf, origin, params, count);
}
int main (int argc, char **argv)
{
irc_callbacks_t callbacks;
irc_ctx_t ctx;
irc_session_t * s;
if ( argc != 4 )
{
printf ("Usage: %s <server> <nick> <channel>\n", argv[0]);
return 1;
}
memset (&callbacks, 0, sizeof(callbacks));
callbacks.event_connect = event_connect;
callbacks.event_join = event_join;
callbacks.event_nick = dump_event;
callbacks.event_quit = dump_event;
callbacks.event_part = dump_event;
callbacks.event_mode = dump_event;
callbacks.event_topic = dump_event;
callbacks.event_kick = dump_event;
callbacks.event_channel = event_channel;
callbacks.event_privmsg = event_privmsg;
callbacks.event_notice = dump_event;
callbacks.event_invite = dump_event;
callbacks.event_umode = dump_event;
callbacks.event_ctcp_rep = dump_event;
callbacks.event_ctcp_action = dump_event;
callbacks.event_unknown = dump_event;
callbacks.event_numeric = event_numeric;
callbacks.event_dcc_chat_req = irc_event_dcc_chat;
callbacks.event_dcc_send_req = irc_event_dcc_send;
s = irc_create_session (&callbacks);
if ( !s )
{
printf ("Could not create session\n");
return 1;
}
ctx.channel = argv[3];
ctx.nick = argv[2];
irc_set_ctx (s, &ctx);
if ( irc_connect (s, argv[1], 6667, 0, argv[2], 0, 0) )
{
printf ("Could not connect: %s\n", irc_strerror (irc_errno(s)));
return 1;
}
irc_run (s);
return 1;
}

View File

@ -0,0 +1,194 @@
/*
* Copyright (C) 2004-2009 Georgy Yunaev gyunaev@ulduzsoft.com
*
* This example is free, and not covered by LGPL license. There is no
* restriction applied to their modification, redistribution, using and so on.
* You can study them, modify them, use them in your own program - either
* completely or partially. By using it you may give me some credits in your
* program, but you don't have to.
*
*
* This example spams the specified channels with words 'HAHA', 'HEHE' and
* 'HUHU' using three threads. Its main purpose is to test multithreading
* support of libircclient.
*/
#include <stdio.h>
#include <errno.h>
#include <string.h>
#if defined (WIN32)
#include <windows.h>
#define CREATE_THREAD(id,func,param) (CreateThread(0, 0, func, param, 0, id) == 0)
#define THREAD_FUNCTION(funcname) static DWORD WINAPI funcname (LPVOID arg)
#define thread_id_t DWORD
#define sleep(a) Sleep (a*1000)
#else
#include <unistd.h>
#include <pthread.h>
#define CREATE_THREAD(id,func,param) (pthread_create (id, 0, func, (void *) param) != 0)
#define THREAD_FUNCTION(funcname) static void * funcname (void * arg)
#define thread_id_t pthread_t
#endif
#include "libircclient.h"
/*
* We store data in IRC session context.
*/
typedef struct
{
char * channel;
char * nick;
} irc_ctx_t;
/*
* Params that we give to our threads.
*/
typedef struct
{
irc_session_t * session;
const char * phrase;
const char * channel;
int timer;
} spam_params_t;
THREAD_FUNCTION(gen_spam)
{
spam_params_t * sp = (spam_params_t *) arg;
while ( 1 )
{
if ( irc_cmd_msg (sp->session, sp->channel, sp->phrase) )
break;
sleep(sp->timer);
}
return 0;
}
void event_join (irc_session_t * session, const char * event, const char * origin, const char ** params, unsigned int count)
{
irc_ctx_t * ctx = (irc_ctx_t *) irc_get_ctx (session);
if ( !origin )
return;
// We need to know whether WE are joining the channel, or someone else.
// To do this, we compare the origin with our nick.
// Note that we have set LIBIRC_OPTION_STRIPNICKS to obtain 'parsed' nicks.
if ( !strcmp(origin, ctx->nick) )
{
static spam_params_t spam1;
static spam_params_t spam2;
static spam_params_t spam3;
thread_id_t tid;
spam1.session = spam2.session = spam3.session = session;
spam1.channel = spam2.channel = spam3.channel = ctx->channel;
spam1.phrase = "HEHE";
spam2.phrase = "HAHA";
spam3.phrase = "HUHU";
spam1.timer = 2;
spam2.timer = 3;
spam3.timer = 4;
printf ("We just joined the channel %s; starting the spam threads\n", params[1]);
if ( CREATE_THREAD (&tid, gen_spam, &spam1)
|| CREATE_THREAD (&tid, gen_spam, &spam2)
|| CREATE_THREAD (&tid, gen_spam, &spam3) )
printf ("CREATE_THREAD failed: %s\n", strerror(errno));
else
printf ("Spammer thread was started successfully.\n");
}
else
{
char textbuf[168];
sprintf (textbuf, "Hey, %s, hi!", origin);
irc_cmd_msg (session, params[0], textbuf);
}
}
void event_connect (irc_session_t * session, const char * event, const char * origin, const char ** params, unsigned int count)
{
irc_ctx_t * ctx = (irc_ctx_t *) irc_get_ctx (session);
irc_cmd_join (session, ctx->channel, 0);
}
void event_numeric (irc_session_t * session, unsigned int event, const char * origin, const char ** params, unsigned int count)
{
if ( event > 400 )
{
printf ("ERROR %d: %s: %s %s %s %s\n",
event,
origin ? origin : "unknown",
params[0],
count > 1 ? params[1] : "",
count > 2 ? params[2] : "",
count > 3 ? params[3] : "");
}
}
int main (int argc, char **argv)
{
irc_callbacks_t callbacks;
irc_ctx_t ctx;
irc_session_t * s;
if ( argc != 4 )
{
printf ("Usage: %s <server> <nick> <channel>\n", argv[0]);
return 1;
}
// Initialize the callbacks
memset (&callbacks, 0, sizeof(callbacks));
// Set up the callbacks we will use
callbacks.event_connect = event_connect;
callbacks.event_join = event_join;
callbacks.event_numeric = event_numeric;
ctx.channel = argv[3];
ctx.nick = argv[2];
// And create the IRC session; 0 means error
s = irc_create_session (&callbacks);
if ( !s )
{
printf ("Could not create IRC session\n");
return 1;
}
irc_set_ctx (s, &ctx);
irc_option_set (s, LIBIRC_OPTION_STRIPNICKS);
// Initiate the IRC server connection
if ( irc_connect (s, argv[1], 6667, 0, argv[2], 0, 0) )
{
printf ("Could not connect: %s\n", irc_strerror (irc_errno(s)));
return 1;
}
// and run into forever loop, generating events
irc_run (s);
return 1;
}

View File

@ -0,0 +1,96 @@
# Microsoft Developer Studio Project File - Name="spammer" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Console Application" 0x0103
CFG=spammer - Win32 Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "spammer.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "spammer.mak" CFG="spammer - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "spammer - Win32 Release" (based on "Win32 (x86) Console Application")
!MESSAGE "spammer - Win32 Debug" (based on "Win32 (x86) Console Application")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
RSC=rc.exe
!IF "$(CFG)" == "spammer - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "Release"
# PROP BASE Intermediate_Dir "Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release"
# PROP Intermediate_Dir "Release"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD CPP /nologo /W3 /GX /O2 /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x419 /d "NDEBUG"
# ADD RSC /l 0x419 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 libdynamic-release/libircclient.lib /nologo /subsystem:console /machine:I386
!ELSEIF "$(CFG)" == "spammer - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Debug"
# PROP BASE Intermediate_Dir "Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
# ADD BASE RSC /l 0x419 /d "_DEBUG"
# ADD RSC /l 0x419 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 libdynamic-release/libircclient.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
!ENDIF
# Begin Target
# Name "spammer - Win32 Release"
# Name "spammer - Win32 Debug"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=..\..\examples\spammer.c
# ADD CPP /I "../../include"
# SUBTRACT CPP /I "../include"
# End Source File
# End Group
# End Target
# End Project

View File

@ -0,0 +1,208 @@
/*
* Copyright (C) 2004-2009 Georgy Yunaev gyunaev@ulduzsoft.com
*
* This library is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
* License for more details.
*/
/*!
* \file libirc_errors.h
* \author Georgy Yunaev
* \version 1.0
* \date 09.2004
* \brief This file defines error codes generated by libircclient.
*/
#ifndef INCLUDE_IRC_ERRORS_H
#define INCLUDE_IRC_ERRORS_H
#ifndef IN_INCLUDE_LIBIRC_H
#error This file should not be included directly, include just libircclient.h
#endif
/*! brief No error
* \ingroup errorcodes
*/
#define LIBIRC_ERR_OK 0
/*! \brief Invalid argument
*
* An invalid value was given for one of the arguments to a function.
* For example, supplying the NULL value for \a channel argument of
* irc_cmd_join() produces LIBIRC_ERR_INVAL error. You should fix the code.
*
* \ingroup errorcodes
*/
#define LIBIRC_ERR_INVAL 1
/*! \brief Could not resolve host.
*
* The host name supplied for irc_connect() function could not be resolved
* into valid IP address. Usually means that host name is invalid.
*
* \ingroup errorcodes
*/
#define LIBIRC_ERR_RESOLV 2
/*! \brief Could not create socket.
*
* The new socket could not be created or made non-blocking. Usually means
* that the server is out of resources, or (rarely :) a bug in libircclient.
*
* \ingroup errorcodes
*/
#define LIBIRC_ERR_SOCKET 3
/*! \brief Could not connect.
*
* The socket could not connect to the IRC server, or to the destination DCC
* part. Usually means that either the IRC server is down or its address is
* invalid. For DCC the reason usually is the firewall on your or destination
* computer, which refuses DCC transfer.
*
* \sa irc_run irc_connect
* \ingroup errorcodes
*/
#define LIBIRC_ERR_CONNECT 4
/*! \brief Connection closed by remote peer.
*
* The IRC connection was closed by the IRC server (which could mean that an
* IRC operator just have banned you from the server :)), or the DCC connection
* was closed by remote peer - for example, the other side just quits his mIrc.
* Usually it is not an error.
*
* \sa irc_run irc_connect irc_dcc_callback_t
* \ingroup errorcodes
*/
#define LIBIRC_ERR_CLOSED 5
/*! \brief Out of memory
*
* There are two possible reasons for this error. First is that memory could
* not be allocated for libircclient use, and this error usually is fatal.
* Second reason is that the command queue (which keeps command ready to be
* sent to the IRC server) is full, and could not accept more commands yet.
* In this case you should just wait, and repeat the command later.
*
* \ingroup errorcodes
*/
#define LIBIRC_ERR_NOMEM 6
/*! \brief Could not accept new connection
*
* A DCC chat/send connection from the remote peer could not be accepted.
* Either the connection was just terminated before it is accepted, or there
* is a bug in libircclient.
*
* \ingroup errorcodes
*/
#define LIBIRC_ERR_ACCEPT 7
/*! \brief Could not send this
*
* A \a filename supplied to irc_dcc_sendfile() could not be sent. Either is
* is not a file (a directory or a socket, for example), or it is not readable. *
*
* \sa LIBIRC_ERR_OPENFILE
* \ingroup errorcodes
*/
#define LIBIRC_ERR_NODCCSEND 9
/*! \brief Could not read DCC file or socket
*
* Either a DCC file could not be read (for example, was truncated during
* sending), or a DCC socket returns a read error, which usually means that
* the network connection is terminated.
*
* \ingroup errorcodes
*/
#define LIBIRC_ERR_READ 10
/*! \brief Could not write DCC file or socket
*
* Either a DCC file could not be written (for example, there is no free space
* on disk), or a DCC socket returns a write error, which usually means that
* the network connection is terminated.
*
* \ingroup errorcodes
*/
#define LIBIRC_ERR_WRITE 11
/*! \brief Invalid state
*
* The function is called when it is not allowed to be called. For example,
* irc_cmd_join() was called before the connection to IRC server succeed, and
* ::event_connect is called.
*
* \ingroup errorcodes
*/
#define LIBIRC_ERR_STATE 12
/*! \brief Operation timed out
*
* The DCC request is timed out.
* There is a timer for each DCC request, which tracks connecting, accepting
* and non-accepted/declined DCC requests. For every request this timer
* is currently 60 seconds. If the DCC request was not connected, accepted
* or declined during this time, it will be terminated with this error.
*
* \ingroup errorcodes
*/
#define LIBIRC_ERR_TIMEOUT 13
/*! \brief Could not open file for DCC send
*
* The file specified in irc_dcc_sendfile() could not be opened.
*
* \ingroup errorcodes
*/
#define LIBIRC_ERR_OPENFILE 14
/*! \brief IRC server connection terminated
*
* The connection to the IRC server was terminated - possibly, by network
* error. Try to irc_connect() again.
*
* \ingroup errorcodes
*/
#define LIBIRC_ERR_TERMINATED 15
/*! \brief IPv6 not supported
*
* The function which requires IPv6 support was called, but the IPv6 support was not compiled
* into the application
*
* \ingroup errorcodes
*/
#define LIBIRC_ERR_NOIPV6 16
/*! brief Internal max error value count
*/
#define LIBIRC_ERR_MAX 17
#endif /* INCLUDE_IRC_ERRORS_H */

View File

@ -0,0 +1,398 @@
/*
* Copyright (C) 2004-2009 Georgy Yunaev gyunaev@ulduzsoft.com
*
* This library is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
* License for more details.
*/
/*!
* \file libirc_events.h
* \author Georgy Yunaev
* \version 1.0
* \date 09.2004
* \brief Describes event callbacks generated by libircclient.
*
* This file should not be included directly. Include libircclient.h instead.
*/
#ifndef INCLUDE_IRC_EVENTS_H
#define INCLUDE_IRC_EVENTS_H
#ifndef IN_INCLUDE_LIBIRC_H
#error This file should not be included directly, include just libircclient.h
#endif
/*!
* \fn typedef void (*irc_event_callback_t) (irc_session_t * session, const char * event, const char * origin, const char ** params, unsigned int count)
* \brief A most common event callback
*
* \param session the session, which generates an event
* \param event the text name of the event. Useful in case you use a single
* event handler for several events simultaneously.
* \param origin the originator of the event. See the note below.
* \param params a list of event params. Depending on the event nature, it
* could have zero or more params. The actual number of params
* is specified in count. None of the params can be NULL, but
* 'params' pointer itself could be NULL for some events.
* \param count the total number of params supplied.
*
* Every event generates a callback. This callback is generated by most events.
* Depending on the event nature, it can provide zero or more params. For each
* event, the number of provided params is fixed, and their meaning is
* described.
*
* Every event has origin, though the \a origin variable may be NULL, which
* means that event origin is unknown. The origin usually looks like
* nick!host\@ircserver, i.e. like tim!home\@irc.krasnogorsk.ru. Such origins
* can not be used in IRC commands, and need to be stripped (i.e. host and
* server part should be cut off) before using. This can be done either
* explicitly, by calling irc_target_get_nick(), or implicitly for all the
* events - by setting the #LIBIRC_OPTION_STRIPNICKS option with irc_option_set().
*
* \ingroup events
*/
typedef void (*irc_event_callback_t) (irc_session_t * session, const char * event, const char * origin, const char ** params, unsigned int count);
/*!
* \fn typedef void (*irc_eventcode_callback_t) (irc_session_t * session, unsigned int event, const char * origin, const char ** params, unsigned int count)
* \brief A numeric event callback
*
* \param session the session, which generates an event
* \param event the numeric code of the event. Useful in case you use a
* single event handler for several events simultaneously.
* \param origin the originator of the event. See the note below.
* \param params a list of event params. Depending on the event nature, it
* could have zero or more params. The actual number of params
* is specified in count. None of the params can be NULL, but
* 'params' pointer itself could be NULL for some events.
* \param count the total number of params supplied.
*
* Most times in reply to your actions the IRC server generates numeric
* callbacks. Most of them are error codes, and some of them mark list start
* and list stop markers. Every code has its own set of params; for details
* you can either experiment, or read RFC 1459.
*
* Every event has origin, though the \a origin variable may be NULL, which
* means that event origin is unknown. The origin usually looks like
* nick!host\@ircserver, i.e. like tim!home\@irc.krasnogorsk.ru. Such origins
* can not be used in IRC commands, and need to be stripped (i.e. host and
* server part should be cut off) before using. This can be done either
* explicitly, by calling irc_target_get_nick(), or implicitly for all the
* events - by setting the #LIBIRC_OPTION_STRIPNICKS option with irc_option_set().
*
* \ingroup events
*/
typedef void (*irc_eventcode_callback_t) (irc_session_t * session, unsigned int event, const char * origin, const char ** params, unsigned int count);
/*!
* \fn typedef void (*irc_event_dcc_chat_t) (irc_session_t * session, const char * nick, const char * addr, irc_dcc_t dccid)
* \brief A remote DCC CHAT request callback
*
* \param session the session, which generates an event
* \param nick the person who requested DCC CHAT with you.
* \param addr the person's IP address in decimal-dot notation.
* \param dccid an id associated with this request. Use it in calls to
* irc_dcc_accept() or irc_dcc_decline().
*
* This callback is called when someone requests DCC CHAT with you. In respond
* you should call either irc_dcc_accept() to accept chat request, or
* irc_dcc_decline() to decline chat request.
*
* \sa irc_dcc_accept or irc_dcc_decline
* \ingroup events
*/
typedef void (*irc_event_dcc_chat_t) (irc_session_t * session, const char * nick, const char * addr, irc_dcc_t dccid);
/*!
* \fn typedef void (*irc_event_dcc_send_t) (irc_session_t * session, const char * nick, const char * addr, const char * filename, unsigned long size, irc_dcc_t dccid)
* \brief A remote DCC CHAT request callback
*
* \param session the session, which generates an event
* \param nick the person who requested DCC CHAT with you.
* \param addr the person's IP address in decimal-dot notation.
* \param filename the sent filename.
* \param size the filename size.
* \param dccid an id associated with this request. Use it in calls to
* irc_dcc_accept() or irc_dcc_decline().
*
* This callback is called when someone wants to send a file to you using
* DCC SEND. As with chat, in respond you should call either irc_dcc_accept()
* to accept this request and receive the file, or irc_dcc_decline() to
* decline this request.
*
* \sa irc_dcc_accept or irc_dcc_decline
* \ingroup events
*/
typedef void (*irc_event_dcc_send_t) (irc_session_t * session, const char * nick, const char * addr, const char * filename, unsigned long size, irc_dcc_t dccid);
/*! \brief Event callbacks structure.
*
* All the communication with the IRC network is based on events. Generally
* speaking, event is anything generated by someone else in the network,
* or by the IRC server itself. "Someone sends you a message", "Someone
* has joined the channel", "Someone has quits IRC" - all these messages
* are events.
*
* Every event has its own event handler, which is called when the
* appropriate event is received. You don't have to define all the event
* handlers; define only the handlers for the events you need to intercept.
*
* Most event callbacks are the types of ::irc_event_callback_t. There are
* also events, which generate ::irc_eventcode_callback_t,
* ::irc_event_dcc_chat_t and ::irc_event_dcc_send_t callbacks.
*
* \ingroup events
*/
typedef struct
{
/*!
* The "on_connect" event is triggered when the client successfully
* connects to the server, and could send commands to the server.
* No extra params supplied; \a params is 0.
*/
irc_event_callback_t event_connect;
/*!
* The "nick" event is triggered when the client receives a NICK message,
* meaning that someone (including you) on a channel with the client has
* changed their nickname.
*
* \param origin the person, who changes the nick. Note that it can be you!
* \param params[0] mandatory, contains the new nick.
*/
irc_event_callback_t event_nick;
/*!
* The "quit" event is triggered upon receipt of a QUIT message, which
* means that someone on a channel with the client has disconnected.
*
* \param origin the person, who is disconnected
* \param params[0] optional, contains the reason message (user-specified).
*/
irc_event_callback_t event_quit;
/*!
* The "join" event is triggered upon receipt of a JOIN message, which
* means that someone has entered a channel that the client is on.
*
* \param origin the person, who joins the channel. By comparing it with
* your own nickname, you can check whether your JOIN
* command succeed.
* \param params[0] mandatory, contains the channel name.
*/
irc_event_callback_t event_join;
/*!
* The "part" event is triggered upon receipt of a PART message, which
* means that someone has left a channel that the client is on.
*
* \param origin the person, who leaves the channel. By comparing it with
* your own nickname, you can check whether your PART
* command succeed.
* \param params[0] mandatory, contains the channel name.
* \param params[1] optional, contains the reason message (user-defined).
*/
irc_event_callback_t event_part;
/*!
* The "mode" event is triggered upon receipt of a channel MODE message,
* which means that someone on a channel with the client has changed the
* channel's parameters.
*
* \param origin the person, who changed the channel mode.
* \param params[0] mandatory, contains the channel name.
* \param params[1] mandatory, contains the changed channel mode, like
* '+t', '-i' and so on.
* \param params[2] optional, contains the mode argument (for example, a
* key for +k mode, or user who got the channel operator status for
* +o mode)
*/
irc_event_callback_t event_mode;
/*!
* The "umode" event is triggered upon receipt of a user MODE message,
* which means that your user mode has been changed.
*
* \param origin the person, who changed the channel mode.
* \param params[0] mandatory, contains the user changed mode, like
* '+t', '-i' and so on.
*/
irc_event_callback_t event_umode;
/*!
* The "topic" event is triggered upon receipt of a TOPIC message, which
* means that someone on a channel with the client has changed the
* channel's topic.
*
* \param origin the person, who changes the channel topic.
* \param params[0] mandatory, contains the channel name.
* \param params[1] optional, contains the new topic.
*/
irc_event_callback_t event_topic;
/*!
* The "kick" event is triggered upon receipt of a KICK message, which
* means that someone on a channel with the client (or possibly the
* client itself!) has been forcibly ejected.
*
* \param origin the person, who kicked the poor.
* \param params[0] mandatory, contains the channel name.
* \param params[0] optional, contains the nick of kicked person.
* \param params[1] optional, contains the kick text
*/
irc_event_callback_t event_kick;
/*!
* The "channel" event is triggered upon receipt of a PRIVMSG message
* to an entire channel, which means that someone on a channel with
* the client has said something aloud. Your own messages don't trigger
* PRIVMSG event.
*
* \param origin the person, who generates the message.
* \param params[0] mandatory, contains the channel name.
* \param params[1] optional, contains the message text
*/
irc_event_callback_t event_channel;
/*!
* The "privmsg" event is triggered upon receipt of a PRIVMSG message
* which is addressed to one or more clients, which means that someone
* is sending the client a private message.
*
* \param origin the person, who generates the message.
* \param params[0] mandatory, contains your nick.
* \param params[1] optional, contains the message text
*/
irc_event_callback_t event_privmsg;
/*!
* The "notice" event is triggered upon receipt of a NOTICE message
* which means that someone has sent the client a public or private
* notice. According to RFC 1459, the only difference between NOTICE
* and PRIVMSG is that you should NEVER automatically reply to NOTICE
* messages. Unfortunately, this rule is frequently violated by IRC
* servers itself - for example, NICKSERV messages require reply, and
* are NOTICEs.
*
* \param origin the person, who generates the message.
* \param params[0] mandatory, contains the target nick name.
* \param params[1] optional, contains the message text
*/
irc_event_callback_t event_notice;
/*!
* The "channel_notice" event is triggered upon receipt of a NOTICE
* message which means that someone has sent the client a public
* notice. According to RFC 1459, the only difference between NOTICE
* and PRIVMSG is that you should NEVER automatically reply to NOTICE
* messages. Unfortunately, this rule is frequently violated by IRC
* servers itself - for example, NICKSERV messages require reply, and
* are NOTICEs.
*
* \param origin the person, who generates the message.
* \param params[0] mandatory, contains the channel name.
* \param params[1] optional, contains the message text
*/
irc_event_callback_t event_channel_notice;
/*!
* The "invite" event is triggered upon receipt of an INVITE message,
* which means that someone is permitting the client's entry into a +i
* channel.
*
* \param origin the person, who INVITEs you.
* \param params[0] mandatory, contains your nick.
* \param params[1] mandatory, contains the channel name you're invited into.
*
* \sa irc_cmd_invite irc_cmd_chanmode_invite
*/
irc_event_callback_t event_invite;
/*!
* The "ctcp" event is triggered when the client receives the CTCP
* request. By default, the built-in CTCP request handler is used. The
* build-in handler automatically replies on most CTCP messages, so you
* will rarely need to override it.
*
* \param origin the person, who generates the message.
* \param params[0] mandatory, the complete CTCP message, including its
* arguments.
*
* Mirc generates PING, FINGER, VERSION, TIME and ACTION messages,
* check the source code of \c libirc_event_ctcp_internal function to
* see how to write your own CTCP request handler. Also you may find
* useful this question in FAQ: \ref faq4
*/
irc_event_callback_t event_ctcp_req;
/*!
* The "ctcp" event is triggered when the client receives the CTCP reply.
*
* \param origin the person, who generates the message.
* \param params[0] mandatory, the CTCP message itself with its arguments.
*/
irc_event_callback_t event_ctcp_rep;
/*!
* The "action" event is triggered when the client receives the CTCP
* ACTION message. These messages usually looks like:\n
* \code
* [23:32:55] * Tim gonna sleep.
* \endcode
*
* \param origin the person, who generates the message.
* \param params[0] mandatory, the ACTION message.
*/
irc_event_callback_t event_ctcp_action;
/*!
* The "unknown" event is triggered upon receipt of any number of
* unclassifiable miscellaneous messages, which aren't handled by the
* library.
*/
irc_event_callback_t event_unknown;
/*!
* The "numeric" event is triggered upon receipt of any numeric response
* from the server. There is a lot of such responses, see the full list
* here: \ref rfcnumbers.
*
* See the params in ::irc_eventcode_callback_t specification.
*/
irc_eventcode_callback_t event_numeric;
/*!
* The "dcc chat" event is triggered when someone requests a DCC CHAT from
* you.
*
* See the params in ::irc_event_dcc_chat_t specification.
*/
irc_event_dcc_chat_t event_dcc_chat_req;
/*!
* The "dcc chat" event is triggered when someone wants to send a file
* to you via DCC SEND request.
*
* See the params in ::irc_event_dcc_send_t specification.
*/
irc_event_dcc_send_t event_dcc_send_req;
} irc_callbacks_t;
#endif /* INCLUDE_IRC_EVENTS_H */

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,95 @@
2009-01-03 Georgy Yunaev
* libircclient 1.3 released.
* Added IPv6 support (thanks Lothar May)
* Now provides more information about ACTION (thx chromerium)
* Updated contact info and copyrights.
* Removed ircmud sample as it never worked anyway.
2006-08-29 Georgy Yunaev
* libircclient 1.2 released.
* Windows: added missed expored functions from .def file.
2005-03-10 Georgy Yunaev
* libircclient 1.1 released.
* Fixed DCC buffer size which resulted extra callback on DCC tranfers
(thanks flohimself).
2004-11-12 Georgy Yunaev
* libircclient 1.0 released.
* Fixed compilation on FreeBSD.
2004-10-31 Georgy Yunaev
* When more than one DCC chat sessions were active, only the latest
generated callbacks.
* libircclient 0.8 released.
2004-10-17 Georgy Yunaev
* libircclient 0.7 released.
* Fixed DCC chat lockup in multithread programs (thanks olifozzy).
2004-10-15 Georgy Yunaev
* Win32 static library does not have dllmain anymore (thanks olifozzy).
* DCC chat crashed if there were several DCC session, and one of them was
closed (thanks olifozzy).
* DCC chat speed increased when several messages are stored in buffer.
2004-10-10 Georgy Yunaev
* libircclient 0.6 released.
* Added color support.
2004-10-07 Georgy Yunaev
* CTCP TIME reply was malformed on some platforms with buggy locales.
* Socket stuff rewritten to be signal-safe and more portable.
* Data and commands are now sent faster to IRC server.
* event_umode now works.
2004-10-06 Georgy Yunaev
* CHANGED BEHAVIOR: the built-in CTCP handler is used if not set.
Therefore, irc_event_ctcp_internal() is not public anymore.
* Added a small (as yet) FAQ.
* Add extra numeric codes from RFC2812.
2004-10-03 Georgy Yunaev
* Libircclient error codes are now well-documented.
* Modules documentation is extended.
* Added new methods: irc_cmd_part, irc_cmd_invite, irc_cmd_names,
irc_cmd_list, irc_cmd_topic, irc_cmd_channel_mode, irc_cmd_user_mode,
irc_cmd_nick, irc_cmd_whois.
* Added the improved error handling for NULL pointers to all the irc_cmd*
methods.
* Fixed the nickname tracking bug (after the nickname changing, all
privmsgs were treaten as channel messages).
* All the numeric reply codes from RFC1459 are now documented.
* Numeric reply codes for every command are now described.
2004-09-30 Georgy Yunaev
* libircclient 0.4 released
* exported an irc_is_connected method.
* fixed error output in examples.
* fixed several errors in Win32 build (there were no multithread support)
* add a Win32 dsp/dsw to build the library from VC6/7
* add a .dsp for an example.
2004-09-14 Georgy Yunaev
* libircclient 0.3 released
* Fix CTCP time bug.
* Added working Win32 Visual Studio build, and libs.
* Added ircmud example, which allows people to play MUD through IRC client.
* Some stuff rewritten in more portable way.
2004-09-13 Georgy Yunaev
* Fix solaris x86/sparc compilation.
2004-09-12 Georgy Yunaev
* libircclient 0.2 released
* select() timeout decreased to 0.25sec (was 1 sec). The reason: when
the output buffer is empty, and server doesn't send anything, but a
command was asynchronously added, it will be processed only after
select() timeout.
* Fixed bug in DCC sessions - all DCC sessions requested by bots were
terminated in 60 secs with TIMEOUT error.
* Add DCC error description in irctest example.
2004-09-08 Georgy Yunaev
* libircclient 0.1 released

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,482 @@
GNU LIBRARY GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1991 Free Software Foundation, Inc.
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
[This is the first released version of the library GPL. It is
numbered 2 because it goes with version 2 of the ordinary GPL.]
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
Licenses are intended to guarantee your freedom to share and change
free software--to make sure the software is free for all its users.
This license, the Library General Public License, applies to some
specially designated Free Software Foundation software, and to any
other libraries whose authors decide to use it. You can use it for
your libraries, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if
you distribute copies of the library, or if you modify it.
For example, if you distribute copies of the library, whether gratis
or for a fee, you must give the recipients all the rights that we gave
you. You must make sure that they, too, receive or can get the source
code. If you link a program with the library, you must provide
complete object files to the recipients so that they can relink them
with the library, after making changes to the library and recompiling
it. And you must show them these terms so they know their rights.
Our method of protecting your rights has two steps: (1) copyright
the library, and (2) offer you this license which gives you legal
permission to copy, distribute and/or modify the library.
Also, for each distributor's protection, we want to make certain
that everyone understands that there is no warranty for this free
library. If the library is modified by someone else and passed on, we
want its recipients to know that what they have is not the original
version, so that any problems introduced by others will not reflect on
the original authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that companies distributing free
software will individually obtain patent licenses, thus in effect
transforming the program into proprietary software. To prevent this,
we have made it clear that any patent must be licensed for everyone's
free use or not licensed at all.
Most GNU software, including some libraries, is covered by the ordinary
GNU General Public License, which was designed for utility programs. This
license, the GNU Library General Public License, applies to certain
designated libraries. This license is quite different from the ordinary
one; be sure to read it in full, and don't assume that anything in it is
the same as in the ordinary license.
The reason we have a separate public license for some libraries is that
they blur the distinction we usually make between modifying or adding to a
program and simply using it. Linking a program with a library, without
changing the library, is in some sense simply using the library, and is
analogous to running a utility program or application program. However, in
a textual and legal sense, the linked executable is a combined work, a
derivative of the original library, and the ordinary General Public License
treats it as such.
Because of this blurred distinction, using the ordinary General
Public License for libraries did not effectively promote software
sharing, because most developers did not use the libraries. We
concluded that weaker conditions might promote sharing better.
However, unrestricted linking of non-free programs would deprive the
users of those programs of all benefit from the free status of the
libraries themselves. This Library General Public License is intended to
permit developers of non-free programs to use free libraries, while
preserving your freedom as a user of such programs to change the free
libraries that are incorporated in them. (We have not seen how to achieve
this as regards changes in header files, but we have achieved it as regards
changes in the actual functions of the Library.) The hope is that this
will lead to faster development of free libraries.
The precise terms and conditions for copying, distribution and
modification follow. Pay close attention to the difference between a
"work based on the library" and a "work that uses the library". The
former contains code derived from the library, while the latter only
works together with the library.
Note that it is possible for a library to be covered by the ordinary
General Public License rather than by this special one.
GNU LIBRARY GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License Agreement applies to any software library which
contains a notice placed by the copyright holder or other authorized
party saying it may be distributed under the terms of this Library
General Public License (also called "this License"). Each licensee is
addressed as "you".
A "library" means a collection of software functions and/or data
prepared so as to be conveniently linked with application programs
(which use some of those functions and data) to form executables.
The "Library", below, refers to any such software library or work
which has been distributed under these terms. A "work based on the
Library" means either the Library or any derivative work under
copyright law: that is to say, a work containing the Library or a
portion of it, either verbatim or with modifications and/or translated
straightforwardly into another language. (Hereinafter, translation is
included without limitation in the term "modification".)
"Source code" for a work means the preferred form of the work for
making modifications to it. For a library, complete source code means
all the source code for all modules it contains, plus any associated
interface definition files, plus the scripts used to control compilation
and installation of the library.
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running a program using the Library is not restricted, and output from
such a program is covered only if its contents constitute a work based
on the Library (independent of the use of the Library in a tool for
writing it). Whether that is true depends on what the Library does
and what the program that uses the Library does.
1. You may copy and distribute verbatim copies of the Library's
complete source code as you receive it, in any medium, provided that
you conspicuously and appropriately publish on each copy an
appropriate copyright notice and disclaimer of warranty; keep intact
all the notices that refer to this License and to the absence of any
warranty; and distribute a copy of this License along with the
Library.
You may charge a fee for the physical act of transferring a copy,
and you may at your option offer warranty protection in exchange for a
fee.
2. You may modify your copy or copies of the Library or any portion
of it, thus forming a work based on the Library, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) The modified work must itself be a software library.
b) You must cause the files modified to carry prominent notices
stating that you changed the files and the date of any change.
c) You must cause the whole of the work to be licensed at no
charge to all third parties under the terms of this License.
d) If a facility in the modified Library refers to a function or a
table of data to be supplied by an application program that uses
the facility, other than as an argument passed when the facility
is invoked, then you must make a good faith effort to ensure that,
in the event an application does not supply such function or
table, the facility still operates, and performs whatever part of
its purpose remains meaningful.
(For example, a function in a library to compute square roots has
a purpose that is entirely well-defined independent of the
application. Therefore, Subsection 2d requires that any
application-supplied function or table used by this function must
be optional: if the application does not supply it, the square
root function must still compute square roots.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Library,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Library, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote
it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Library.
In addition, mere aggregation of another work not based on the Library
with the Library (or with a work based on the Library) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may opt to apply the terms of the ordinary GNU General Public
License instead of this License to a given copy of the Library. To do
this, you must alter all the notices that refer to this License, so
that they refer to the ordinary GNU General Public License, version 2,
instead of to this License. (If a newer version than version 2 of the
ordinary GNU General Public License has appeared, then you can specify
that version instead if you wish.) Do not make any other change in
these notices.
Once this change is made in a given copy, it is irreversible for
that copy, so the ordinary GNU General Public License applies to all
subsequent copies and derivative works made from that copy.
This option is useful when you wish to copy part of the code of
the Library into a program that is not a library.
4. You may copy and distribute the Library (or a portion or
derivative of it, under Section 2) in object code or executable form
under the terms of Sections 1 and 2 above provided that you accompany
it with the complete corresponding machine-readable source code, which
must be distributed under the terms of Sections 1 and 2 above on a
medium customarily used for software interchange.
If distribution of object code is made by offering access to copy
from a designated place, then offering equivalent access to copy the
source code from the same place satisfies the requirement to
distribute the source code, even though third parties are not
compelled to copy the source along with the object code.
5. A program that contains no derivative of any portion of the
Library, but is designed to work with the Library by being compiled or
linked with it, is called a "work that uses the Library". Such a
work, in isolation, is not a derivative work of the Library, and
therefore falls outside the scope of this License.
However, linking a "work that uses the Library" with the Library
creates an executable that is a derivative of the Library (because it
contains portions of the Library), rather than a "work that uses the
library". The executable is therefore covered by this License.
Section 6 states terms for distribution of such executables.
When a "work that uses the Library" uses material from a header file
that is part of the Library, the object code for the work may be a
derivative work of the Library even though the source code is not.
Whether this is true is especially significant if the work can be
linked without the Library, or if the work is itself a library. The
threshold for this to be true is not precisely defined by law.
If such an object file uses only numerical parameters, data
structure layouts and accessors, and small macros and small inline
functions (ten lines or less in length), then the use of the object
file is unrestricted, regardless of whether it is legally a derivative
work. (Executables containing this object code plus portions of the
Library will still fall under Section 6.)
Otherwise, if the work is a derivative of the Library, you may
distribute the object code for the work under the terms of Section 6.
Any executables containing that work also fall under Section 6,
whether or not they are linked directly with the Library itself.
6. As an exception to the Sections above, you may also compile or
link a "work that uses the Library" with the Library to produce a
work containing portions of the Library, and distribute that work
under terms of your choice, provided that the terms permit
modification of the work for the customer's own use and reverse
engineering for debugging such modifications.
You must give prominent notice with each copy of the work that the
Library is used in it and that the Library and its use are covered by
this License. You must supply a copy of this License. If the work
during execution displays copyright notices, you must include the
copyright notice for the Library among them, as well as a reference
directing the user to the copy of this License. Also, you must do one
of these things:
a) Accompany the work with the complete corresponding
machine-readable source code for the Library including whatever
changes were used in the work (which must be distributed under
Sections 1 and 2 above); and, if the work is an executable linked
with the Library, with the complete machine-readable "work that
uses the Library", as object code and/or source code, so that the
user can modify the Library and then relink to produce a modified
executable containing the modified Library. (It is understood
that the user who changes the contents of definitions files in the
Library will not necessarily be able to recompile the application
to use the modified definitions.)
b) Accompany the work with a written offer, valid for at
least three years, to give the same user the materials
specified in Subsection 6a, above, for a charge no more
than the cost of performing this distribution.
c) If distribution of the work is made by offering access to copy
from a designated place, offer equivalent access to copy the above
specified materials from the same place.
d) Verify that the user has already received a copy of these
materials or that you have already sent this user a copy.
For an executable, the required form of the "work that uses the
Library" must include any data and utility programs needed for
reproducing the executable from it. However, as a special exception,
the source code distributed need not include anything that is normally
distributed (in either source or binary form) with the major
components (compiler, kernel, and so on) of the operating system on
which the executable runs, unless that component itself accompanies
the executable.
It may happen that this requirement contradicts the license
restrictions of other proprietary libraries that do not normally
accompany the operating system. Such a contradiction means you cannot
use both them and the Library together in an executable that you
distribute.
7. You may place library facilities that are a work based on the
Library side-by-side in a single library together with other library
facilities not covered by this License, and distribute such a combined
library, provided that the separate distribution of the work based on
the Library and of the other library facilities is otherwise
permitted, and provided that you do these two things:
a) Accompany the combined library with a copy of the same work
based on the Library, uncombined with any other library
facilities. This must be distributed under the terms of the
Sections above.
b) Give prominent notice with the combined library of the fact
that part of it is a work based on the Library, and explaining
where to find the accompanying uncombined form of the same work.
8. You may not copy, modify, sublicense, link with, or distribute
the Library except as expressly provided under this License. Any
attempt otherwise to copy, modify, sublicense, link with, or
distribute the Library is void, and will automatically terminate your
rights under this License. However, parties who have received copies,
or rights, from you under this License will not have their licenses
terminated so long as such parties remain in full compliance.
9. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Library or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Library (or any work based on the
Library), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Library or works based on it.
10. Each time you redistribute the Library (or any work based on the
Library), the recipient automatically receives a license from the
original licensor to copy, distribute, link with or modify the Library
subject to these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
11. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Library at all. For example, if a patent
license would not permit royalty-free redistribution of the Library by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Library.
If any portion of this section is held invalid or unenforceable under any
particular circumstance, the balance of the section is intended to apply,
and the section as a whole is intended to apply in other circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
12. If the distribution and/or use of the Library is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Library under this License may add
an explicit geographical distribution limitation excluding those countries,
so that distribution is permitted only in or among countries not thus
excluded. In such case, this License incorporates the limitation as if
written in the body of this License.
13. The Free Software Foundation may publish revised and/or new
versions of the Library General Public License from time to time.
Such new versions will be similar in spirit to the present version,
but may differ in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the Library
specifies a version number of this License which applies to it and
"any later version", you have the option of following the terms and
conditions either of that version or of any later version published by
the Free Software Foundation. If the Library does not specify a
license version number, you may choose any version ever published by
the Free Software Foundation.
14. If you wish to incorporate parts of the Library into other free
programs whose distribution conditions are incompatible with these,
write to the author to ask for permission. For software which is
copyrighted by the Free Software Foundation, write to the Free
Software Foundation; we sometimes make exceptions for this. Our
decision will be guided by the two goals of preserving the free status
of all derivatives of our free software and of promoting the sharing
and reuse of software generally.
NO WARRANTY
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES.
END OF TERMS AND CONDITIONS
Appendix: How to Apply These Terms to Your New Libraries
If you develop a new library, and you want it to be of the greatest
possible use to the public, we recommend making it free software that
everyone can redistribute and change. You can do so by permitting
redistribution under these terms (or, alternatively, under the terms of the
ordinary General Public License).
To apply these terms, attach the following notices to the library. It is
safest to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least the
"copyright" line and a pointer to where the full notice is found.
<one line to give the library's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
MA 02111-1307, USA
Also add information on how to contact you by electronic and paper mail.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the library, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the
library `Frob' (a library for tweaking knobs) written by James Random Hacker.
<signature of Ty Coon>, 1 April 1990
Ty Coon, President of Vice
That's all there is to it!

View File

@ -0,0 +1,26 @@
# $Id: Makefile 84 2009-01-10 01:37:29Z chromerium $
SUBDIRS = src examples
all:
for subdir in $(SUBDIRS); do \
$(MAKE) -C $$subdir || exit 1; \
done
clean:
-for subdir in $(SUBDIRS); do \
$(MAKE) -C $$subdir clean || exit 1; \
done
-rm -f core
distclean:
-for subdir in $(SUBDIRS); do \
$(MAKE) -C $$subdir distclean || exit 1; \
done
-rm -f include/config.h config.cache config.status config.log core
distro: distclean
(cd .. && tar zcf libircclient-1.2.tar.gz libircclient-1.2)
install: all
-cd src && make install

View File

@ -0,0 +1,44 @@
# You must have mingw installed.
BUILD=build/
SRCDIR=$(BUILD)/source
LIBDIR=$(BUILD)/lib
OBJS=src/libircclient.obj
all: prep static dynamic package-win32 package-linux
prep:
mkdir -p $(LIBDIR)
$(OBJS) : src/colors.c src/dcc.c src/errors.c src/libircclient.c src/portable.c src/sockets.c src/utils.c Makefile.mingw
src/libircclient.obj: src/libircclient.c
i586-mingw32msvc-gcc -Iinclude -O2 -s -Isrc -DWIN32 -c -o src/libircclient.obj src/libircclient.c
static: $(OBJS)
i586-mingw32msvc-ar cr $(LIBDIR)/libircclient-static.lib $(OBJS)
i586-mingw32msvc-ranlib $(LIBDIR)/libircclient-static.lib
dynamic: $(OBJS)
i586-mingw32msvc-gcc -s -shared $(OBJS) src/libircclient.def -o $(LIBDIR)/libircclient.dll -Wl,-out-implib,$(LIBDIR)/libircclient.lib -lkernel32 -lwsock32
docs:
doxygen Doxyfile
package-win32:
mkdir -p $(BUILD)/doc
mkdir -p $(BUILD)/include
mkdir -p $(BUILD)/examples
cp include/libircclient.h include/libirc_errors.h include/libirc_events.h $(BUILD)/include/
cp include/libircclient.h include/libirc_errors.h include/libirc_events.h $(BUILD)/include/
cp examples/*.cpp examples/*.c $(BUILD)/examples/
cp src/win32/spammer.dsp $(BUILD)/examples/
cp doc/html/* $(BUILD)/doc/
rm -f libircclient-win32.zip
(cd $(BUILD) && zip -r ../libircclient-win32.zip .)
package-linux:
mkdir -p $(SRCDIR)
rm -rf $(SRCDIR)/libircclient
svn export . $(SRCDIR)/libircclient
(cd $(SRCDIR) && tar zcf ../../libircclient.tar.gz libircclient)

View File

@ -0,0 +1 @@
See doc/html/index.html

View File

@ -0,0 +1,4 @@
I'd like to thank those people, who greatly helped to develop libircclient:
- olifozzy (olifozzy@users.sourceforge.net) for great bug reports.
- Lothar May for adding and testing IPv6 support.

View File

@ -0,0 +1,114 @@
/*
* Copyright (c) 2007-2008 Dave Dribin
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use, copy,
* modify, merge, publish, distribute, sublicense, and/or sell copies
* of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
/*
* This class is based on CInvocationGrabber:
*
* Copyright (c) 2007, Toxic Software
* All rights reserved.
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* * Neither the name of the Toxic Software nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*
*/
#import <Foundation/Foundation.h>
/*
* @class DDInvocationGrabber
* @discussion DDInvocationGrabber is a helper object that makes it very easy to construct instances of NSInvocation for later use. The object is inspired by NSUndoManager's prepareWithInvocationTarget method. To use a DDInvocationGrabber object, you set its target to some object, then send it a message as if it were the target object (the DDInvocationGrabber object acts as a proxy), if the target message understands the message the DDInvocationGrabber object stores the message invocation.
DDInvocationGrabber *theGrabber = [DDInvocationGrabber invocationGrabber];
[theGrabber setTarget:someObject]
[theGrabber doSomethingWithParameter:someParameter]; // Send messages to 'theGrabber' as if it were 'someObject'
NSInvocation *theInvocation = [theGrabber invocation];
A slightly more concise version (using the covenience category) follows:
DDInvocationGrabber *theGrabber = [DDInvocationGrabber invocationGrabber];
[[theGrabber prepareWithInvocationTarget:someObject] doSomethingWithParameter:someParameter];
NSInvocation *theInvocation = [theGrabber invocation];
*/
@interface DDInvocationGrabber : NSProxy
{
id _target;
NSInvocation * _invocation;
BOOL _forwardInvokesOnMainThread;
BOOL _waitUntilDone;
}
/*
* @method invocationGrabber
* @abstract Returns a newly allocated, inited, autoreleased DDInvocationGrabber object.
*/
+ (id)invocationGrabber;
- (id)target;
- (void)setTarget:(id)inTarget;
- (NSInvocation *)invocation;
- (void)setInvocation:(NSInvocation *)inInvocation;
- (BOOL)forwardInvokesOnMainThread;
- (void)setForwardInvokesOnMainThread:(BOOL)forwardInvokesOnMainThread;
- (BOOL)waitUntilDone;
- (void)setWaitUntilDone:(BOOL)waitUntilDone;
@end
@interface DDInvocationGrabber (DDInvocationGrabber_Conveniences)
/*
* @method prepareWithInvocationTarget:
* @abstract Sets the target object of the receiver and returns itself. The sender can then send a message to the
*/
- (id)prepareWithInvocationTarget:(id)inTarget;
@end

View File

@ -0,0 +1,171 @@
/*
* Copyright (c) 2007-2008 Dave Dribin
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use, copy,
* modify, merge, publish, distribute, sublicense, and/or sell copies
* of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
/*
* This class is based on CInvocationGrabber:
*
* Copyright (c) 2007, Toxic Software
* All rights reserved.
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* * Neither the name of the Toxic Software nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*
*/
#import "DDInvocationGrabber.h"
@implementation DDInvocationGrabber
+ (id)invocationGrabber
{
return([[[self alloc] init] autorelease]);
}
- (id)init
{
_target = nil;
_invocation = nil;
_forwardInvokesOnMainThread = NO;
_waitUntilDone = NO;
return self;
}
- (void)dealloc
{
[self setTarget:NULL];
[self setInvocation:NULL];
//
[super dealloc];
}
#pragma mark -
- (id)target
{
return _target;
}
- (void)setTarget:(id)inTarget
{
if (_target != inTarget)
{
[_target autorelease];
_target = [inTarget retain];
}
}
- (NSInvocation *)invocation
{
return _invocation;
}
- (void)setInvocation:(NSInvocation *)inInvocation
{
if (_invocation != inInvocation)
{
[_invocation autorelease];
_invocation = [inInvocation retain];
}
}
- (BOOL)forwardInvokesOnMainThread;
{
return _forwardInvokesOnMainThread;
}
- (void)setForwardInvokesOnMainThread:(BOOL)forwardInvokesOnMainThread;
{
_forwardInvokesOnMainThread = forwardInvokesOnMainThread;
}
- (BOOL)waitUntilDone;
{
return _waitUntilDone;
}
- (void)setWaitUntilDone:(BOOL)waitUntilDone;
{
_waitUntilDone = waitUntilDone;
}
#pragma mark -
- (NSMethodSignature *)methodSignatureForSelector:(SEL)selector
{
return [[self target] methodSignatureForSelector:selector];
}
- (void)forwardInvocation:(NSInvocation *)ioInvocation
{
[ioInvocation setTarget:[self target]];
[self setInvocation:ioInvocation];
if (_forwardInvokesOnMainThread)
{
if (!_waitUntilDone)
[_invocation retainArguments];
[_invocation performSelectorOnMainThread:@selector(invoke)
withObject:nil
waitUntilDone:_waitUntilDone];
}
}
@end
#pragma mark -
@implementation DDInvocationGrabber (DDnvocationGrabber_Conveniences)
- (id)prepareWithInvocationTarget:(id)inTarget
{
[self setTarget:inTarget];
return(self);
}
@end

View File

@ -0,0 +1,153 @@
/*
* Copyright (C) 2009 Nathan Ollerenshaw chrome@stupendous.net
*
* This library is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
* License for more details.
*/
/**
* @file IRCClientChannel.h
* @author Nathan Ollerenshaw
* @version 1.0
* @date 01.2009
* @brief Represents a connected IRC Channel.
*/
#import <Cocoa/Cocoa.h>
#import <IRCClient/IRCClientChannelDelegate.h>
/** \class IRCClientChannel
* @brief Represents a connected IRC Channel.
*
* IRCClientChannel objects are created by the IRCClientSession object
* for a given session when the client joins an IRC channel. At that time
* you are expected to register event handlers for each of the delegate
* methods described in the IRCClientChannelDelegate interface.
*/
@class IRCClientSession;
@interface IRCClientChannel : NSObject {
id delegate;
NSString *name;
NSStringEncoding encoding;
IRCClientSession *session;
NSString *topic;
NSString *modes;
NSMutableArray *names;
}
/** Delegate to send events to */
@property (assign) id delegate;
/** Name of the channel */
@property (copy) NSString *name;
/** Encoding used by this channel */
@property (assign) NSStringEncoding encoding;
/** Associated IRCClientSession object */
@property (assign) IRCClientSession *session;
/** Topic of the channel */
@property (copy) NSString *topic;
/** Mode of the channel */
@property (copy) NSString *modes;
/** An array of nicknames stored as NSStrings that list the connected users
for the channel */
@property (assign, readonly) NSMutableArray *names;
/** initWithName:
*
* Returns an initialised IRCClientChannel with a given channel name. You
* are not expected to initialise your own IRCClientChannel objects; if you
* wish to join a channel you should send a [IRCClientSession join:key:] message
* to your IRCClientSession object.
*
* @param aName Name of the channel.
*/
- (id)initWithName:(NSString *)aName;
/** Parts the channel.
*/
- (int)part;
/** Invites another IRC client to the channel.
*
* @param nick the nickname of the client to invite.
*/
- (int)invite:(NSString *)nick;
/** Sets the topic of the channel.
*
* Note that not all users on a channel have permission to change the topic; if you fail
* to set the topic, then you will not see an onTopic event on the IRCClientChannelDelegate.
*
* @param aTopic the topic the client wishes to set for the channel.
*/
- (void)setTopic:(NSString *)aTopic;
/** Sets the mode of the channel.
*
* Note that not all users on a channel have permission to change the mode; if you fail
* to set the mode, then you will not see an onMode event on the IRCClientChannelDelegate.
*
* @param mode the mode to set the channel to
* @param params paramaters for the mode, if it requires parameters.
*/
- (int)setMode:(NSString *)mode params:(NSString *)params;
/** Sends a public PRIVMSG to the channel. If you try to send more than can fit on an IRC
* buffer, it will be truncated.
*
* @param message the message to send to the channel.
*/
- (int)message:(NSString *)message;
/** Sends a public CTCP ACTION to the channel.
*
* @param action action to send to the channel.
*/
- (int)action:(NSString *)action;
/** Sends a public NOTICE to the channel.
*
* @param notice message to send to the channel.
*/
- (int)notice:(NSString *)notice;
/** Kicks someone from a channel.
*
* @param nick the IRC client to kick from the channel.
* @param reason the message to give to the channel and the IRC client for the kick.
*/
- (int)kick:(NSString *)nick reason:(NSString *)reason;
/** Sends a CTCP request to the channel.
*
* It is perfectly legal to send a CTCP request to an IRC channel, however many clients
* decline to respond to them, and often they are percieved as annoying.
*
* @param request the string of the request, in CTCP format.
*/
- (int)ctcpRequest:(NSString *)request;
@end

View File

@ -0,0 +1,157 @@
/*
* Copyright (C) 2009 Nathan Ollerenshaw chrome@stupendous.net
*
* This library is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
* License for more details.
*/
#import "IRCClientChannel.h"
#import "IRCClientSession.h"
#import "NSObject+DDExtensions.h"
@implementation IRCClientChannel
@synthesize delegate;
@synthesize name;
@synthesize encoding;
@synthesize session;
@synthesize topic;
@synthesize modes;
@synthesize names;
-(id)init
{
return [self initWithName:nil];
}
-(id)initWithName:(NSString *)aName
{
if ((self = [super init])) {
[self setName:aName];
topic = [[NSString alloc] init];
encoding = NSASCIIStringEncoding;
}
return self;
}
-(void)dealloc
{
[super dealloc];
}
- (int)part
{
return irc_cmd_part([session session], [name cStringUsingEncoding:NSASCIIStringEncoding]);
}
- (int)invite:(NSString *)nick
{
return irc_cmd_invite([session session], [nick cStringUsingEncoding:NSASCIIStringEncoding], [name cStringUsingEncoding:NSASCIIStringEncoding]);
}
- (int)refreshNames
{
return irc_cmd_names([session session], [name cStringUsingEncoding:NSASCIIStringEncoding]);
}
- (void)setTopic:(NSString *)aTopic
{
irc_cmd_topic([session session], [name cStringUsingEncoding:NSASCIIStringEncoding], [topic cStringUsingEncoding:encoding]);
}
- (int)setMode:(NSString *)mode params:(NSString *)params
{
return irc_cmd_channel_mode([session session], [name cStringUsingEncoding:NSASCIIStringEncoding], [mode cStringUsingEncoding:NSASCIIStringEncoding]);
}
- (int)message:(NSString *)message
{
return irc_cmd_msg([session session], [name cStringUsingEncoding:NSASCIIStringEncoding], [message cStringUsingEncoding:encoding]);
}
- (int)action:(NSString *)action
{
return irc_cmd_me([session session], [name cStringUsingEncoding:NSASCIIStringEncoding], [action cStringUsingEncoding:encoding]);
}
- (int)notice:(NSString *)notice
{
return irc_cmd_notice([session session], [name cStringUsingEncoding:NSASCIIStringEncoding], [notice cStringUsingEncoding:encoding]);
}
- (int)kick:(NSString *)nick reason:(NSString *)reason
{
return irc_cmd_kick([session session], [nick cStringUsingEncoding:NSASCIIStringEncoding], [name cStringUsingEncoding:NSASCIIStringEncoding], [reason cStringUsingEncoding:encoding]);
}
- (int)ctcpRequest:(NSString *)request
{
return irc_cmd_ctcp_request([session session], [name cStringUsingEncoding:NSASCIIStringEncoding], [request cStringUsingEncoding:encoding]);
}
// event handlers
//
// These farm events out to the delegate on the main thread.
- (void)onJoin:(NSString *)nick
{
if ([delegate respondsToSelector:@selector(onJoin:)])
[[delegate dd_invokeOnMainThread] onJoin:nick];
}
- (void)onPart:(NSString *)nick reason:(NSString *)reason
{
if ([delegate respondsToSelector:@selector(onPart:reason:)])
[[delegate dd_invokeOnMainThread] onPart:nick reason:reason];
}
- (void)onMode:(NSString *)mode params:(NSString *)params nick:(NSString *)nick
{
if ([delegate respondsToSelector:@selector(onMode:params:nick:)])
[[delegate dd_invokeOnMainThread] onMode:mode params:params nick:nick];
}
- (void)onTopic:(NSString *)aTopic nick:(NSString *)nick
{
[topic release];
topic = [NSString stringWithString:aTopic];
if ([delegate respondsToSelector:@selector(onTopic:nick:)])
[[delegate dd_invokeOnMainThread] onTopic:aTopic nick:nick];
}
- (void)onKick:(NSString *)nick reason:(NSString *)reason byNick:(NSString *)byNick
{
if ([delegate respondsToSelector:@selector(onKick:reason:byNick:)])
[[delegate dd_invokeOnMainThread] onKick:nick reason:reason byNick:byNick];
}
- (void)onPrivmsg:(NSString *)message nick:(NSString *)nick
{
if ([delegate respondsToSelector:@selector(onPrivmsg:nick:)])
[[delegate dd_invokeOnMainThread] onPrivmsg:message nick:nick];
}
- (void)onNotice:(NSString *)notice nick:(NSString *)nick
{
if ([delegate respondsToSelector:@selector(onNotice:nick:)])
[[delegate dd_invokeOnMainThread] onNotice:notice nick:nick];
}
- (void)onAction:(NSString *)action nick:(NSString *)nick
{
if ([delegate respondsToSelector:@selector(onAction:nick:)])
[[delegate dd_invokeOnMainThread] onAction:action nick:nick];
}
@end

View File

@ -0,0 +1,116 @@
/*
* Copyright (C) 2009 Nathan Ollerenshaw chrome@stupendous.net
*
* This library is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
* License for more details.
*/
/**
* @file IRCClientChannelDelegate.h
* @author Nathan Ollerenshaw
* @version 1.0
* @date 01.2009
* @brief Receives delegate messages from an IRCClientChannel.
* @protocol IRCClientChannelDelegate
*/
#import <Cocoa/Cocoa.h>
/** @brief Receives delegate messages from an IRCClientChannel.
*
* Each IRCClientChannel object needs a delegate. Delegate methods are called
* for each event that occurs on an IRC channel that the client is current on.
*
* Note that for any given parameter, it may be optional, in which case a nil
* object may be supplied instead of the given parameter.
*/
@interface NSObject (IRCClientChannelDelegate)
/** When a client joins this channel, the onJoin event is fired. Note that
* the nickname is most likely in nick!user\@host format, but may simply be a
* nickname, depending on the server implementation.
*
* You should also expect to see this event when the client first joins a channel,
* with a parameter of the client's nickname.
*
* @param nick The nickname of the user that joined the channel.
*/
- (void)onJoin:(NSString *)nick;
/** When an IRC client parts a channel you are connect to, you will see
* an onPart event. You will also see this event when you part a channel.
*
* @param nick (required) The nickname of the user that left the channel.
* @param reason (optional) The reason, if any, that the user gave for leaving.
*/
- (void)onPart:(NSString *)nick reason:(NSString *)reason;
/** Received when an IRC client changes the channel mode. What modes are available
* for a given channel is an implementation detail for each server.
*
* @param mode the new channel mode.
* @param params any parameters with the mode (such as channel key).
* @param nick the nickname of the IRC client that changed the mode.
*/
- (void)onMode:(NSString *)mode params:(NSString *)params nick:(NSString *)nick;
/** Received when the topic is changed for the channel.
*
* @param aTopic The new topic of the channel.
* @param nick Nickname of the IRC client that changed the topic.
*/
- (void)onTopic:(NSString *)aTopic nick:(NSString *)nick;
/** Received when an IRC client is kicked from a channel.
*
* @param nick nickname of the client that was kicked
* @param reason reason message given for the kick
* @param byNick nickname of the client that performed the kick command
*/
- (void)onKick:(NSString *)nick reason:(NSString *)reason byNick:(NSString *)byNick;
/** Received when an IRC client sends a public PRIVMSG to the channel. Note that the
* user may not necessarily be required to be on the channel to send a message
* to it.
*
* @param message the message sent to the channel.
* @param nick the nickname of the IRC client that sent the message.
*/
- (void)onPrivmsg:(NSString *)message nick:(NSString *)nick;
/** Received when an IRC client sends a public NOTICE to the channel. Note that
* the user may not necessarily be required to be on the channel to send a notice to
* it. Furthermore, the RFC states that the only difference between PRIVMSG and
* NOTICE is that a NOTICE may never be responded to automatically.
*
* @param notice the notice sent to the channel.
* @param nick the nickname of the IRC client that sent the notice.
*/
- (void)onNotice:(NSString *)notice nick:(NSString *)nick;
/** Received when an IRC client sends a CTCP ACTION message to the channel.
* used by lamers with no life to pretend that they are playing some form of
* MMORPG.
*
* @param action the action message sent to the channel.
* @param nick the nickname of the IRC client that sent the message.
*/
- (void)onAction:(NSString *)action nick:(NSString *)nick;
@end

View File

@ -0,0 +1,264 @@
/*! \mainpage IRCClient - a Cocoa IRC Framework to create IRC clients
*
* \section intro_sec Introduction
*
* IRCClient is a Cocoa Framework that uses the excellent libircclient library
* written by Georgy Yunaev.
*
* \section usage Basic Usage
*
* To use this framework, you will need to write an IRCClientSessionDelegate to
* handle all of the events generated by the server, and an IRCClientChannelDelegate
* to handle all of the events generated by channels on that server.
*
* You then create an IRCClientSession object in your code, assign the required
* properties, and call connect: to connect to the server and run: to create
* the new thread and start receiving events. For example:
*
* \code
* IRCClientSession *session = [[IRCClientSession alloc] init];
* MyIRCClientSessionDelegate *controller = [[MyIRCClientSessionDelegate alloc] init];
*
* [session setDelegate:controller];
* [controller setSession:session];
*
* [session setServer:@"irc.dal.net"];
* [session setPort:@"6667"];
* [session setNickname:@"test"];
* [session setUsername:@"test"];
* [session setRealname:@"test"];
* [session connect];
*
* [session run]; //starts the thread
* \endcode
*
* \section author Author, copyright, support.
*
* If you have any questions, bug reports, suggestions regarding libircclient
* or the IRCClient framework, please visit http://libircclient.sourceforge.net
*
* <PRE>
* libircclient Copyright (C) 2004-2009 Georgy Yunaev gyunaev@ulduzsoft.com
* IRCClient Copyright (C) 2009 Nathan Ollerenshaw chrome@stupendous.net
*
* This library is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
* License for more details.
* </PRE>
*/
/**
* @file IRCClientSession.h
* @author Nathan Ollerenshaw
* @version 1.0
* @date 01.2009
* @brief Represents a connected IRC Session.
*/
#import <Cocoa/Cocoa.h>
#import <IRCClient/IRCClientSessionDelegate.h>
#include <IRCClient/libircclient.h>
/** @class IRCClientSession
* @brief Represents a connected IRC Session.
*
* IRCClientSession represents a single connection to an IRC server. On initialising
* the object, and setting the delegate, server, port, password, nickname, username and realname
* properties, you call the connect: and run: methods to connect to the IRC server
* and start a new thread.
*
* This thread then sends messages back to the main runloop to the IRC server delegate,
* or to the IRCClientChannel delegate as required.
*/
@class IRCClientChannel;
@interface IRCClientSession : NSObject {
id delegate;
irc_callbacks_t callbacks;
irc_session_t *session;
NSThread *thread;
NSString *version;
NSString *server;
NSString *port;
NSString *password;
NSString *nickname;
NSString *username;
NSString *realname;
NSMutableDictionary *channels;
NSMutableDictionary *nicks;
NSStringEncoding encoding;
}
/** delegate to send events to. */
@property (assign) id delegate;
/** The underlying libircclient handle */
@property (assign) irc_session_t *session;
/** The version string for the client to send back on CTCP VERSION requests */
@property (copy) NSString *version;
/** IRC server to connect to */
@property (copy) NSString *server;
/** IRC port to connect to */
@property (copy) NSString *port;
/** Server password to provide on connect (may be left empty or nil) */
@property (copy) NSString *password;
/** Nickname of the connected client. Note that setting this after connection will
not result in the client renaming on IRC. You need to send a nick: message instead.
*/
@property (copy) NSString *nickname;
/** Username of the connected client. Also known as the ident.
Setting this after connection does nothing.
*/
@property (copy) NSString *username;
/** Realname of the connected client.
Setting this after connection does nothing. */
@property (copy) NSString *realname;
/** An NSMutableDictionary of channels that the client is currently connected to.
You should not modify this. */
@property (assign,readonly) NSMutableDictionary *channels;
/** The default text encoding for messages on this server.
This affects messages received via PRIVMSG and NOTICE, and TOPIC in a channel.
You may change this at any time.
*/
@property (assign) NSStringEncoding encoding;
/** Connect to the IRC server.
Note that this performs the initial DNS lookup and the TCP connection, so if
there are any problems you will be notified via the return code of the message.
Look at the libircclient documentation for the different return codes. */
- (int)connect;
/** Disconnect from the IRC server.
This always works, as it simply shuts down the socket. If you want to disconnect
in a friendly way, you should use the quit: message. */
- (void)disconnect;
/** returns YES if the server is currently connected successfully, and NO if
it is not. */
- (bool)isConnected;
/** Starts a new thread and starts the libircclient runloop, processing events and
firing messages back to the main runloop as required. Calling this again will
do nothing other than raise a warning in your logs. */
- (void)run;
/** Sends a raw message to the IRC server. Please consult rfc1459 for the format
of IRC commands. */
- (int)sendRawWithFormat:(NSString *)format, ...;
/** quits the IRC server with the given reason. On success, an onQuit event will be
sent to the IRCClientSessionDelegate with the nickname of the IRC client.
The format is a standard NSString format string, followed by optional arguments.
*/
- (int)quit:(NSString *)reason;
/** Joins a channel with a given name and key
@param channel the channel to join
@param key they key for the channel (may be nil)
*/
- (int)join:(NSString *)channel key:(NSString *)key;
/** lists channels on the IRC server.
@param channel a channel name or string to pass to the LIST command. Implementation specific.
*/
- (int)list:(NSString *)channel;
/** sets the user mode for the IRC client
@param mode string to set
*/
- (int)userMode:(NSString *)mode;
/** sets the IRC client nickname. On success, an onNick event will be sent to the delegate
@param newnick new nickname to set.
*/
- (int)nick:(NSString *)newnick;
/** sends a WHOIS request to the IRC server
@param nick nickname of the irc client to whois.
*/
- (int)whois:(NSString *)nick;
/** send a PRIVMSG to another IRC client
@param message message to send
@param target the other IRC client to send the message to.
*/
- (int)message:(NSString *)message to:(NSString *)target;
/** send a CTCP ACTION to another IRC client
@param action the action message to send
@param target the nickname of the irc client to send the message to.
*/
- (int)action:(NSString *)action to:(NSString *)target;
/** send a NOTICE to another IRC client
@param notice the message text to send
@param target the nickname of the irc client to send the notice to.
*/
- (int)notice:(NSString *)notice to:(NSString *)target;
/** send a CTCP request to another IRC client
@param request the CTCP request string to send
@param target the nickname of the IRC client to send the request to.
*/
- (int)ctcpRequest:(NSString *)request target:(NSString *)target;
/** send a CTCP reply to another IRC client
@param reply the CTCP reply string to send
@param target the nickname of the IRC client to send the reply to.
*/
- (int)ctcpReply:(NSString *)reply target:(NSString *)target;
@end

View File

@ -0,0 +1,744 @@
/*
* Copyright (C) 2009 Nathan Ollerenshaw chrome@stupendous.net
*
* This library is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
* License for more details.
*/
#define IRCCLIENTVERSION "1.0"
#import "IRCClientSession.h"
#import "NSObject+DDExtensions.h"
#import "IRCClientChannel.h"
#include "string.h"
static void onConnect(irc_session_t *session, const char *event, const char *origin, const char **params, unsigned int count);
static void onNick(irc_session_t *session, const char *event, const char *origin, const char **params, unsigned int count);
static void onQuit(irc_session_t *session, const char *event, const char *origin, const char **params, unsigned int count);
static void onJoinChannel(irc_session_t *session, const char *event, const char *origin, const char **params, unsigned int count);
static void onPartChannel(irc_session_t *session, const char *event, const char *origin, const char **params, unsigned int count);
static void onMode(irc_session_t *session, const char *event, const char *origin, const char **params, unsigned int count);
static void onUserMode(irc_session_t *session, const char *event, const char *origin, const char **params, unsigned int count);
static void onTopic(irc_session_t *session, const char *event, const char *origin, const char **params, unsigned int count);
static void onKick(irc_session_t *session, const char *event, const char *origin, const char **params, unsigned int count);
static void onChannelPrvmsg(irc_session_t *session, const char *event, const char *origin, const char **params, unsigned int count);
static void onPrivmsg(irc_session_t *session, const char *event, const char *origin, const char **params, unsigned int count);
static void onNotice(irc_session_t *session, const char *event, const char *origin, const char **params, unsigned int count);
static void onInvite(irc_session_t *session, const char *event, const char *origin, const char **params, unsigned int count);
static void onCtcpRequest(irc_session_t *session, const char *event, const char *origin, const char **params, unsigned int count);
static void onCtcpReply(irc_session_t *session, const char *event, const char *origin, const char **params, unsigned int count);
static void onCtcpAction(irc_session_t *session, const char *event, const char *origin, const char **params, unsigned int count);
static void onUnknownEvent(irc_session_t *session, const char *event, const char *origin, const char **params, unsigned int count);
static void onNumericEvent(irc_session_t * session, unsigned int event, const char * origin, const char ** params, unsigned int count);
@implementation IRCClientSession
@synthesize delegate;
@synthesize session;
@synthesize version;
@synthesize server;
@synthesize port;
@synthesize password;
@synthesize nickname;
@synthesize username;
@synthesize realname;
@synthesize channels;
@synthesize encoding;
-(id)init
{
if ((self = [super init])) {
callbacks.event_connect = onConnect;
callbacks.event_nick = onNick;
callbacks.event_quit = onQuit;
callbacks.event_join = onJoinChannel;
callbacks.event_part = onPartChannel;
callbacks.event_mode = onMode;
callbacks.event_umode = onUserMode;
callbacks.event_topic = onTopic;
callbacks.event_kick = onKick;
callbacks.event_channel = onChannelPrvmsg;
callbacks.event_privmsg = onPrivmsg;
callbacks.event_notice = onNotice;
callbacks.event_invite = onInvite;
callbacks.event_ctcp_req = onCtcpRequest;
callbacks.event_ctcp_rep = onCtcpReply;
callbacks.event_ctcp_action = onCtcpAction;
callbacks.event_unknown = onUnknownEvent;
callbacks.event_numeric = onNumericEvent;
callbacks.event_dcc_chat_req = NULL;
callbacks.event_dcc_send_req = NULL;
session = irc_create_session(&callbacks);
if (!session) {
NSLog(@"Could not create irc_session.");
return nil;
}
irc_set_ctx(session, self);
unsigned int high, low;
irc_get_version (&high, &low);
[self setVersion:[NSString stringWithFormat:@"IRCClient Framework v%s (Nathan Ollerenshaw) - libirc v%d.%d (Georgy Yunaev)", IRCCLIENTVERSION, high, low]];
channels = [[[NSMutableDictionary alloc] init] retain];
encoding = NSASCIIStringEncoding;
}
return self;
}
-(void)dealloc
{
if (irc_is_connected(session))
NSLog(@"Warning: IRC Session is not disconnected on dealloc");
irc_destroy_session(session);
[channels release];
[super dealloc];
}
- (int)connect;
{
unsigned short sPort = [port intValue];
return irc_connect(session, [server cStringUsingEncoding:encoding], sPort, [password length] > 0 ? [password cStringUsingEncoding:encoding] : NULL , [nickname cStringUsingEncoding:encoding], [username cStringUsingEncoding:encoding], [realname cStringUsingEncoding:encoding]);
}
- (void)disconnect
{
irc_disconnect(session);
}
- (bool)isConnected
{
return irc_is_connected(session);
}
- (void)startThread
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
irc_run(session);
[pool drain];
}
- (void)run
{
if (thread) {
NSLog(@"Thread already running!");
return;
}
thread = [[NSThread alloc] initWithTarget:self selector:@selector(startThread) object:nil];
[thread retain];
[thread start];
}
- (int)sendRawWithFormat:(NSString *)format, ...
{
va_list ap;
va_start(ap, format);
NSString *line = [[NSString alloc] initWithFormat:format arguments:ap];
va_end(ap);
return irc_send_raw(session, [line cStringUsingEncoding:encoding]);
}
- (int)quit:(NSString *)reason
{
return irc_cmd_quit(session, [reason cStringUsingEncoding:encoding]);
}
- (int)join:(NSString *)channel key:(NSString *)key
{
NSLog(@"Joining %@", channel);
if (!key || ![key length] > 0)
return irc_cmd_join(session, [channel cStringUsingEncoding:encoding], NULL);
return irc_cmd_join(session, [channel cStringUsingEncoding:encoding], [key cStringUsingEncoding:encoding]);
}
- (int)list:(NSString *)channel
{
return irc_cmd_list(session, [channel cStringUsingEncoding:encoding]);
}
- (int)userMode:(NSString *)mode
{
return irc_cmd_user_mode(session, [mode cStringUsingEncoding:encoding]);
}
- (int)nick:(NSString *)newnick
{
return irc_cmd_nick(session, [newnick cStringUsingEncoding:encoding]);
}
- (int)whois:(NSString *)nick
{
return irc_cmd_whois(session, [nick cStringUsingEncoding:encoding]);
}
- (int)message:(NSString *)message to:(NSString *)target
{
return irc_cmd_msg(session, [target cStringUsingEncoding:encoding], [message cStringUsingEncoding:encoding]);
}
- (int)action:(NSString *)action to:(NSString *)target
{
return irc_cmd_me(session, [target cStringUsingEncoding:encoding], [action cStringUsingEncoding:encoding]);
}
- (int)notice:(NSString *)notice to:(NSString *)target
{
return irc_cmd_notice(session, [target cStringUsingEncoding:encoding], [notice cStringUsingEncoding:encoding]);
}
- (int)ctcpRequest:(NSString *)request target:(NSString *)target
{
return irc_cmd_ctcp_request(session, [target cStringUsingEncoding:encoding], [request cStringUsingEncoding:encoding]);
}
- (int)ctcpReply:(NSString *)reply target:(NSString *)target
{
return irc_cmd_ctcp_reply(session, [target cStringUsingEncoding:encoding], [reply cStringUsingEncoding:encoding]);
}
@end
NSString *
getNickFromNickUserHost(NSString *nuh)
{
NSArray *nuhArray = [nuh componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"!@"]];
if ([nuhArray count] == 3)
return [NSString stringWithString:[nuhArray objectAtIndex:0]];
else
return [NSString stringWithString:nuh];
}
NSString *
getUserFromNickUserHost(NSString *nuh)
{
NSArray *nuhArray = [nuh componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"!@"]];
if ([nuhArray count] == 3)
return [NSString stringWithString:[nuhArray objectAtIndex:1]];
else
return nil;
}
NSString *
getHostFromNickUserHost(NSString *nuh)
{
NSArray *nuhArray = [nuh componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"!@"]];
if ([nuhArray count] == 3)
return [NSString stringWithString:[nuhArray objectAtIndex:2]];
else
return nil;
}
/*!
* The "on_connect" event is triggered when the client successfully
* connects to the server, and could send commands to the server.
* No extra params supplied; \a params is 0.
*/
static void onConnect(irc_session_t *session, const char *event, const char *origin, const char **params, unsigned int count)
{
IRCClientSession *client = (IRCClientSession *) irc_get_ctx(session);
if ([[client delegate] respondsToSelector:@selector(onConnect)])
[[[client delegate] dd_invokeOnMainThread] onConnect];
}
/*!
* The "nick" event is triggered when the client receives a NICK message,
* meaning that someone (including you) on a channel with the client has
* changed their nickname.
*
* \param origin the person, who changes the nick. Note that it can be you!
* \param params[0] mandatory, contains the new nick.
*/
static void onNick(irc_session_t *session, const char *event, const char *origin, const char **params, unsigned int count)
{
IRCClientSession *client = (IRCClientSession *) irc_get_ctx(session);
NSString *nick = [NSString stringWithCString:params[0] encoding:NSASCIIStringEncoding];
NSString *oldNick = [NSString stringWithCString:origin encoding:NSASCIIStringEncoding];
if ([[client nickname] compare:oldNick] == NSOrderedSame) {
[client setNickname:nick];
}
if ([[client delegate] respondsToSelector:@selector(onNick:oldNick:)])
[[[client delegate] dd_invokeOnMainThread] onNick:nick oldNick:oldNick];
}
/*!
* The "quit" event is triggered upon receipt of a QUIT message, which
* means that someone on a channel with the client has disconnected.
*
* \param origin the person, who is disconnected
* \param params[0] optional, contains the reason message (user-specified).
*/
static void onQuit(irc_session_t *session, const char *event, const char *origin, const char **params, unsigned int count)
{
IRCClientSession *client = (IRCClientSession *) irc_get_ctx(session);
NSString *nick = [NSString stringWithCString:origin encoding:NSASCIIStringEncoding];
NSString *reason = [NSString stringWithCString:params[0] encoding:[client encoding]];
if ([[client delegate] respondsToSelector:@selector(onQuit:reason:)])
[[[client delegate] dd_invokeOnMainThread] onQuit:nick reason:reason];
}
/*!
* The "join" event is triggered upon receipt of a JOIN message, which
* means that someone has entered a channel that the client is on.
*
* \param origin the person, who joins the channel. By comparing it with
* your own nickname, you can check whether your JOIN
* command succeed.
* \param params[0] mandatory, contains the channel name.
*/
static void onJoinChannel(irc_session_t *session, const char *event, const char *origin, const char **params, unsigned int count)
{
IRCClientSession *client = (IRCClientSession *) irc_get_ctx(session);
NSString *nick = [NSString stringWithCString:origin encoding:NSASCIIStringEncoding];
NSString *channel = [NSString stringWithCString:params[0] encoding:NSASCIIStringEncoding];
NSString *nickOnly = getNickFromNickUserHost(nick);
if ([[client nickname] compare:nickOnly] == NSOrderedSame) {
// We just joined a channel; allocate an IRCClientChannel object and send it
// to the main thread.
IRCClientChannel *newChannel = [[IRCClientChannel alloc] initWithName:channel];
[[client channels] setObject:newChannel forKey:channel];
if ([[client delegate] respondsToSelector:@selector(onJoinChannel:)])
[[[client delegate] dd_invokeOnMainThread] onJoinChannel:newChannel];
} else {
// Someone joined a channel we're on.
IRCClientChannel *currentChannel = [[client channels] objectForKey:channel];
[currentChannel onJoin:nick];
}
}
/*!
* The "part" event is triggered upon receipt of a PART message, which
* means that someone has left a channel that the client is on.
*
* \param origin the person, who leaves the channel. By comparing it with
* your own nickname, you can check whether your PART
* command succeed.
* \param params[0] mandatory, contains the channel name.
* \param params[1] optional, contains the reason message (user-defined).
*/
static void onPartChannel(irc_session_t *session, const char *event, const char *origin, const char **params, unsigned int count)
{
IRCClientSession *client = (IRCClientSession *) irc_get_ctx(session);
NSString *nick = [NSString stringWithCString:origin encoding:NSASCIIStringEncoding];
NSString *channel = [NSString stringWithCString:params[0] encoding:NSASCIIStringEncoding];
NSData *reason = nil;
IRCClientChannel *currentChannel = nil;
if (count > 1)
reason = [NSData dataWithBytes:params[1] length:strlen(params[1])];
if ([[client nickname] compare:nick] == NSOrderedSame) {
// We just left a channel; remove it from the channels dict.
currentChannel = [[client channels] objectForKey:channel];
[[client channels] removeObjectForKey:channel];
} else {
// Someone left a channel we're on.
currentChannel = [[client channels] objectForKey:channel];
}
[currentChannel onPart:nick reason:[[NSString alloc] initWithData:reason encoding:[currentChannel encoding]]];
}
/*!
* The "mode" event is triggered upon receipt of a channel MODE message,
* which means that someone on a channel with the client has changed the
* channel's parameters.
*
* \param origin the person, who changed the channel mode.
* \param params[0] mandatory, contains the channel name.
* \param params[1] mandatory, contains the changed channel mode, like
* '+t', '-i' and so on.
* \param params[2] optional, contains the mode argument (for example, a
* key for +k mode, or user who got the channel operator status for
* +o mode)
*/
static void onMode(irc_session_t *session, const char *event, const char *origin, const char **params, unsigned int count)
{
IRCClientSession *client = (IRCClientSession *) irc_get_ctx(session);
NSString *nick = [NSString stringWithCString:origin encoding:NSASCIIStringEncoding];
NSString *channel = [NSString stringWithCString:params[0] encoding:NSASCIIStringEncoding];
NSString *mode = [NSString stringWithCString:params[1] encoding:NSASCIIStringEncoding];
NSString *modeParams = nil;
if (count > 2)
modeParams = [NSString stringWithCString:params[2] encoding:NSASCIIStringEncoding];
IRCClientChannel *currentChannel = [[client channels] objectForKey:channel];
[currentChannel onMode:mode params:modeParams nick:nick];
}
/*!
* The "umode" event is triggered upon receipt of a user MODE message,
* which means that your user mode has been changed.
*
* \param origin the person, who changed the channel mode.
* \param params[0] mandatory, contains the user changed mode, like
* '+t', '-i' and so on.
*/
static void onUserMode(irc_session_t *session, const char *event, const char *origin, const char **params, unsigned int count)
{
IRCClientSession *client = (IRCClientSession *) irc_get_ctx(session);
NSString *mode = [NSString stringWithCString:params[0] encoding:NSASCIIStringEncoding];
if ([[client delegate] respondsToSelector:@selector(onMode:)])
[[[client delegate] dd_invokeOnMainThread] onMode:mode];
}
/*!
* The "topic" event is triggered upon receipt of a TOPIC message, which
* means that someone on a channel with the client has changed the
* channel's topic.
*
* \param origin the person, who changes the channel topic.
* \param params[0] mandatory, contains the channel name.
* \param params[1] optional, contains the new topic.
*/
static void onTopic(irc_session_t *session, const char *event, const char *origin, const char **params, unsigned int count)
{
IRCClientSession *client = (IRCClientSession *) irc_get_ctx(session);
NSString *nick = [NSString stringWithCString:origin encoding:NSASCIIStringEncoding];
NSString *channel = [NSString stringWithCString:params[0] encoding:NSASCIIStringEncoding];
NSData *topic = nil;
if (count > 1)
topic = [NSData dataWithBytes:params[1] length:strlen(params[1])];
IRCClientChannel *currentChannel = [[client channels] objectForKey:channel];
[currentChannel onTopic:[[NSString alloc] initWithData:topic encoding:[currentChannel encoding]] nick:nick];
}
/*!
* The "kick" event is triggered upon receipt of a KICK message, which
* means that someone on a channel with the client (or possibly the
* client itself!) has been forcibly ejected.
*
* \param origin the person, who kicked the poor.
* \param params[0] mandatory, contains the channel name.
* \param params[1] optional, contains the nick of kicked person.
* \param params[2] optional, contains the kick text
*/
static void onKick(irc_session_t *session, const char *event, const char *origin, const char **params, unsigned int count)
{
IRCClientSession *client = (IRCClientSession *) irc_get_ctx(session);
NSString *byNick = [NSString stringWithCString:origin encoding:NSASCIIStringEncoding];
NSString *channel = [NSString stringWithCString:params[0] encoding:NSASCIIStringEncoding];
NSString *nick = nil;
NSData *reason = nil;
if (count > 1)
nick = [NSString stringWithCString:params[1] encoding:NSASCIIStringEncoding];
if (count > 2)
reason = [NSData dataWithBytes:params[2] length:strlen(params[2])];
if (nick == nil) {
// we got kicked
IRCClientChannel *currentChannel = [[client channels] objectForKey:channel];
[[client channels] removeObjectForKey:channel];
[currentChannel onKick:[client nickname] reason:[[NSString alloc] initWithData:reason encoding:[currentChannel encoding]] byNick:byNick];
} else {
// someone else got booted
IRCClientChannel *currentChannel = [[client channels] objectForKey:channel];
[currentChannel onKick:nick reason:[[NSString alloc] initWithData:reason encoding:[currentChannel encoding]] byNick:byNick];
}
}
/*!
* The "channel" event is triggered upon receipt of a PRIVMSG message
* to an entire channel, which means that someone on a channel with
* the client has said something aloud. Your own messages don't trigger
* PRIVMSG event.
*
* \param origin the person, who generates the message.
* \param params[0] mandatory, contains the channel name.
* \param params[1] optional, contains the message text
*/
static void onChannelPrvmsg(irc_session_t *session, const char *event, const char *origin, const char **params, unsigned int count)
{
IRCClientSession *client = (IRCClientSession *) irc_get_ctx(session);
NSString *nick = [NSString stringWithCString:origin encoding:NSASCIIStringEncoding];
NSString *channel = [NSString stringWithCString:params[0] encoding:NSASCIIStringEncoding];
NSData *message = nil;
if (count > 1) {
message = [NSData dataWithBytes:params[1] length:strlen(params[1])];
IRCClientChannel *currentChannel = [[client channels] objectForKey:channel];
[currentChannel onPrivmsg:[[NSString alloc] initWithData:message encoding:[currentChannel encoding]] nick:nick];
}
}
/*!
* The "privmsg" event is triggered upon receipt of a PRIVMSG message
* which is addressed to one or more clients, which means that someone
* is sending the client a private message.
*
* \param origin the person, who generates the message.
* \param params[0] mandatory, contains your nick.
* \param params[1] optional, contains the message text
*/
static void onPrivmsg(irc_session_t *session, const char *event, const char *origin, const char **params, unsigned int count)
{
IRCClientSession *client = (IRCClientSession *) irc_get_ctx(session);
NSString *nick = [NSString stringWithCString:origin encoding:NSASCIIStringEncoding];
NSData *message = nil;
if (count > 1) {
message = [NSData dataWithBytes:params[1] length:strlen(params[1])];
if ([[client delegate] respondsToSelector:@selector(onPrivmsg:nick:)])
[[[client delegate] dd_invokeOnMainThread] onPrivmsg:message nick:nick];
}
// we eat privmsgs with no message
}
/*!
* The "notice" event is triggered upon receipt of a NOTICE message
* which means that someone has sent the client a public or private
* notice. According to RFC 1459, the only difference between NOTICE
* and PRIVMSG is that you should NEVER automatically reply to NOTICE
* messages. Unfortunately, this rule is frequently violated by IRC
* servers itself - for example, NICKSERV messages require reply, and
* are NOTICEs.
*
* \param origin the person, who generates the message.
* \param params[0] mandatory, contains the channel name.
* \param params[1] optional, contains the message text
*/
static void onNotice(irc_session_t *session, const char *event, const char *origin, const char **params, unsigned int count)
{
IRCClientSession *client = (IRCClientSession *) irc_get_ctx(session);
NSString *nick = [NSString stringWithCString:origin encoding:NSASCIIStringEncoding];
NSString *target = [NSString stringWithCString:params[0] encoding:NSASCIIStringEncoding];
NSData *notice = nil;
IRCClientChannel *currentChannel = [[client channels] objectForKey:target];
if (count > 1) {
notice = [NSData dataWithBytes:params[1] length:strlen(params[1])];
if (currentChannel != nil) {
[currentChannel onNotice:[[NSString alloc] initWithData:notice encoding:[currentChannel encoding]] nick:nick];
} else {
if ([[client delegate] respondsToSelector:@selector(onNotice:nick:)])
[[[client delegate] dd_invokeOnMainThread] onNotice:notice nick:nick];
}
}
// we eat notices with no message
}
/*!
* The "invite" event is triggered upon receipt of an INVITE message,
* which means that someone is permitting the client's entry into a +i
* channel.
*
* \param origin the person, who INVITEs you.
* \param params[0] mandatory, contains your nick.
* \param params[1] mandatory, contains the channel name you're invited into.
*
* \sa irc_cmd_invite irc_cmd_chanmode_invite
*/
static void onInvite(irc_session_t *session, const char *event, const char *origin, const char **params, unsigned int count)
{
IRCClientSession *client = (IRCClientSession *) irc_get_ctx(session);
NSString *nick = [NSString stringWithCString:origin encoding:NSASCIIStringEncoding];
NSString *channel = [NSString stringWithCString:params[1] encoding:NSASCIIStringEncoding];
if ([[client delegate] respondsToSelector:@selector(onInvite:nick:)])
[[[client delegate] dd_invokeOnMainThread] onInvite:channel nick:nick];
}
/*!
* The "ctcp" event is triggered when the client receives the CTCP
* request. By default, the built-in CTCP request handler is used. The
* build-in handler automatically replies on most CTCP messages, so you
* will rarely need to override it.
*
* \param origin the person, who generates the message.
* \param params[0] mandatory, the complete CTCP message, including its
* arguments.
*
* Mirc generates PING, FINGER, VERSION, TIME and ACTION messages,
* check the source code of \c libirc_event_ctcp_internal function to
* see how to write your own CTCP request handler. Also you may find
* useful this question in FAQ: \ref faq4
*/
static void onCtcpRequest(irc_session_t *session, const char *event, const char *origin, const char **params, unsigned int count)
{
IRCClientSession *client = (IRCClientSession *) irc_get_ctx(session);
NSString *nick = [NSString stringWithCString:origin encoding:NSASCIIStringEncoding];
if ( origin )
{
char nickbuf[128];
irc_target_get_nick (origin, nickbuf, sizeof(nickbuf));
if ( strstr (params[0], "PING") == params[0] ) {
irc_cmd_ctcp_reply (session, nickbuf, params[0]);
}
else if ( !strcmp (params[0], "VERSION") )
{
irc_cmd_ctcp_reply (session, nickbuf, [[NSString stringWithFormat:@"VERSION %@", [client version]] UTF8String]);
}
else if ( !strcmp (params[0], "FINGER") )
{
irc_cmd_ctcp_reply (session, nickbuf, [[NSString stringWithFormat:@"FINGER %@ (%@) Idle 0 seconds", [client username], [client realname]] UTF8String]);
}
else if ( !strcmp (params[0], "TIME") )
{
irc_cmd_ctcp_reply(session, nickbuf, [[[NSDate dateWithTimeIntervalSinceNow:0] descriptionWithCalendarFormat:@"TIME %a %b %e %H:%M:%S %Z %Y" timeZone:nil locale:[[NSUserDefaults standardUserDefaults] dictionaryRepresentation]] UTF8String]);
} else {
if ([[client delegate] respondsToSelector:@selector(onCtcpRequest:type:nick:)]) {
NSString *requestString = [[NSString alloc] initWithData:[NSData dataWithBytes:params[0] length:strlen(params[0])] encoding:[client encoding]];
NSRange firstSpace = [requestString rangeOfString:@" "];
NSString *type = [requestString substringToIndex:firstSpace.location];
NSString *request = [requestString substringFromIndex:(firstSpace.location + 1)];
[[[client delegate] dd_invokeOnMainThread] onCtcpRequest:request type:type nick:nick];
}
}
}
}
/*!
* The "ctcp" event is triggered when the client receives the CTCP reply.
*
* \param origin the person, who generates the message.
* \param params[0] mandatory, the CTCP message itself with its arguments.
*/
static void onCtcpReply(irc_session_t *session, const char *event, const char *origin, const char **params, unsigned int count)
{
IRCClientSession *client = (IRCClientSession *) irc_get_ctx(session);
NSString *nick = [NSString stringWithCString:origin encoding:NSASCIIStringEncoding];
NSData *reply = [NSData dataWithBytes:params[0] length:strlen(params[0])];
if ([[client delegate] respondsToSelector:@selector(onCtcpReply:nick:)])
[[[client delegate] dd_invokeOnMainThread] onCtcpReply:reply nick:nick];
}
/*!
* The "action" event is triggered when the client receives the CTCP
* ACTION message. These messages usually looks like:\n
* \code
* [23:32:55] * Tim gonna sleep.
* \endcode
*
* \param origin the person, who generates the message.
* \param params[0] mandatory, the target of the message.
* \param params[1] mandatory, the ACTION message.
*/
static void onCtcpAction(irc_session_t *session, const char *event, const char *origin, const char **params, unsigned int count)
{
IRCClientSession *client = (IRCClientSession *) irc_get_ctx(session);
NSString *nick = [NSString stringWithCString:origin encoding:NSASCIIStringEncoding];
NSString *target = [NSString stringWithCString:params[0] encoding:NSASCIIStringEncoding];
NSData *action = [NSData dataWithBytes:params[1] length:strlen(params[1])];
IRCClientChannel *currentChannel = [[client channels] objectForKey:target];
if (currentChannel) {
// An action on a channel we're on
[currentChannel onAction:[[NSString alloc] initWithData:action encoding:[currentChannel encoding]] nick:nick];
} else {
// An action in a private message
if ([[client delegate] respondsToSelector:@selector(onAction:nick:)])
[[[client delegate] dd_invokeOnMainThread] onAction:action nick:nick];
}
}
/*!
* The "unknown" event is triggered upon receipt of any number of
* unclassifiable miscellaneous messages, which aren't handled by the
* library.
*/
static void onUnknownEvent(irc_session_t *session, const char *event, const char *origin, const char **params, unsigned int count)
{
IRCClientSession *client = (IRCClientSession *) irc_get_ctx(session);
NSString *eventString = [NSString stringWithCString:event encoding:NSASCIIStringEncoding];
NSString *sender = nil;
if (origin != NULL)
sender = [NSString stringWithCString:origin encoding:NSASCIIStringEncoding];
NSMutableArray *paramsArray = [[NSMutableArray alloc] init];
for (unsigned int i = 0; i < count; i++)
[paramsArray addObject:[[NSString alloc] initWithData:[NSData dataWithBytes:params[i] length:strlen(params[i])] encoding:[client encoding]]];
if ([[client delegate] respondsToSelector:@selector(onUnknownEvent:origin:params:)])
[[[client delegate] dd_invokeOnMainThread] onUnknownEvent:eventString origin:sender params:paramsArray];
}
/*!
* The "numeric" event is triggered upon receipt of any numeric response
* from the server. There is a lot of such responses, see the full list
* here: \ref rfcnumbers.
*
* See the params in ::irc_eventcode_callback_t specification.
*/
static void onNumericEvent(irc_session_t * session, unsigned int event, const char * origin, const char ** params, unsigned int count)
{
IRCClientSession *client = (IRCClientSession *) irc_get_ctx(session);
NSUInteger eventNumber = event;
NSString *originString = [NSString stringWithCString:origin encoding:NSASCIIStringEncoding];
NSMutableArray *paramsArray = [[NSMutableArray alloc] init];
for (unsigned int i = 0; i < count; i++)
[paramsArray addObject:[[NSString alloc] initWithData:[NSData dataWithBytes:params[i] length:strlen(params[i])] encoding:[client encoding]]];
if ([[client delegate] respondsToSelector:@selector(onNumericEvent:origin:params:)])
[[[client delegate] dd_invokeOnMainThread] onNumericEvent:eventNumber origin:originString params:paramsArray];
}

View File

@ -0,0 +1,152 @@
/*
* Copyright (C) 2009 Nathan Ollerenshaw chrome@stupendous.net
*
* This library is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
* License for more details.
*/
#import <Cocoa/Cocoa.h>
#include <IRCClient/libircclient.h>
/**
* @file IRCClientChannelDelegate.h
* @author Nathan Ollerenshaw
* @version 1.0
* @date 01.2009
* @brief Receives delegate messages from an IRCClientSession.
* @protocol IRCClientSessionDelegate
*/
@class IRCClientChannel;
/** @brief Receives delegate messages from an IRCClientSession.
*
* Each IRCClientSession object needs a single delegate. Methods are called
* for each event that occurs on an IRC server that the client is connected to.
*
* Note that for any given parameter, it may be optional, in which case a nil
* object may be supplied instead of the given parameter.
*/
@interface NSObject (IRCClientSessionDelegate)
/** The client has successfully connected to the IRC server. */
- (void)onConnect;
/** An IRC client on a channel that this client is connected to has changed nickname,
* or this IRC client has changed nicknames.
*
* @param nick the new nickname
* @param oldNick the old nickname
*/
- (void)onNick:(NSString *)nick oldNick:(NSString *)oldNick;
/** An IRC client on a channel that this client is connected to has quit IRC.
*
* @param nick the nickname of the client that quit.
* @param reason (optional) the quit message, if any.
*/
- (void)onQuit:(NSString *)nick reason:(NSString *)reason;
/** The IRC client has joined (connected) successfully to a new channel. This
* event creates an IRCClientChannel object, which you are expected to asign a
* delegate to, to handle events from the channel.
*
* For example, on receipt of this message, a graphical IRC client would most
* likely open a new window, create an IRCClientChannelDelegate for the window,
* set the new IRCClientChannel's delegate to the new delegate, and then hook
* it up so that new events sent to the IRCClientChannelDelegate are sent to
* the window.
*
* @param channel the IRCClientChannel object for the newly joined channel.
*/
- (void)onJoinChannel:(IRCClientChannel *)channel;
/** The client has changed it's user mode.
*
* @param mode the new mode.
*/
- (void)onMode:(NSString *)mode;
/** The client has received a private PRIVMSG from another IRC client.
*
* @param message the text of the message
* @param nick the other IRC Client that sent the message.
*/
- (void)onPrivmsg:(NSData *)message nick:(NSString *)nick;
/** The client has received a private NOTICE from another client.
*
* @param notice the text of the message
* @param nick the nickname of the other IRC client that sent the message.
*/
- (void)onNotice:(NSData *)notice nick:(NSString *)nick;
/** The IRC client has been invited to a channel.
*
* @param channel the channel for the invitation.
* @param nick the nickname of the user that sent the invitation.
*/
- (void)onInvite:(NSString *)channel nick:(NSString *)nick;
/** A private CTCP request was sent to the IRC client.
*
* @param request the CTCP request string (after the type)
* @param type the CTCP request type
* @param nick the nickname of the user that sent the request.
*/
- (void)onCtcpRequest:(NSString *)request type:(NSString *)type nick:(NSString *)nick;
/** A private CTCP reply was sent to the IRC client.
*
* @param reply an NSData containing the raw C string of the reply.
* @param nick the nickname of the user that sent the reply.
*/
- (void)onCtcpReply:(NSData *)reply nick:(NSString *)nick;
/** A private CTCP ACTION was sent to the IRC client.
*
* CTCP ACTION is not limited to channels; it may also be sent directly to other users.
*
* @param action the action message text.
* @param nick the nickname of the client that sent the action.
*/
- (void)onAction:(NSData *)action nick:(NSString *)nick;
/** An unhandled event was received from the IRC server.
*
* @param event the unknown event name
* @param origin the sender of the event
* @param params an NSArray of NSData objects that are the raw C strings of the event.
*/
- (void)onUnknownEvent:(NSString *)event origin:(NSString *)origin params:(NSArray *)params;
/** An unhandled numeric was received from the IRC server
*
* @param event the unknown event number
* @param origin the sender of the event
* @param params an NSArray of NSData objects that are the raw C strings of the event.
*/
- (void)onNumericEvent:(NSUInteger)event origin:(NSString *)origin params:(NSArray *)params;
@end

View File

@ -0,0 +1,35 @@
/*
* Copyright (c) 2007-2008 Dave Dribin
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use, copy,
* modify, merge, publish, distribute, sublicense, and/or sell copies
* of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
#import <Foundation/Foundation.h>
@interface NSObject (DDExtensions)
- (id)dd_invokeOnMainThread;
- (id)dd_invokeOnMainThreadAndWaitUntilDone:(BOOL)waitUntilDone;
@end
#define ddsynthesize(_X_) @synthesize _X_ = _##_X_

View File

@ -0,0 +1,43 @@
/*
* Copyright (c) 2007-2008 Dave Dribin
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use, copy,
* modify, merge, publish, distribute, sublicense, and/or sell copies
* of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
#import "NSObject+DDExtensions.h"
#import "DDInvocationGrabber.h"
@implementation NSObject (DDExtensions)
- (id)dd_invokeOnMainThread;
{
return [self dd_invokeOnMainThreadAndWaitUntilDone:NO];
}
- (id)dd_invokeOnMainThreadAndWaitUntilDone:(BOOL)waitUntilDone;
{
DDInvocationGrabber * grabber = [DDInvocationGrabber invocationGrabber];
[grabber setForwardInvokesOnMainThread:YES];
[grabber setWaitUntilDone:waitUntilDone];
return [grabber prepareWithInvocationTarget:self];
}
@end

View File

@ -0,0 +1,293 @@
# Doxyfile 1.5.7.1
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
DOXYFILE_ENCODING = UTF-8
PROJECT_NAME = IRCClient
PROJECT_NUMBER = 1.0
OUTPUT_DIRECTORY = doc
CREATE_SUBDIRS = NO
OUTPUT_LANGUAGE = English
BRIEF_MEMBER_DESC = YES
REPEAT_BRIEF = YES
ABBREVIATE_BRIEF = "The $name class" \
"The $name widget" \
"The $name file" \
is \
provides \
specifies \
contains \
represents \
a \
an \
the
ALWAYS_DETAILED_SEC = NO
INLINE_INHERITED_MEMB = NO
FULL_PATH_NAMES = NO
STRIP_FROM_PATH = /Extra/
STRIP_FROM_INC_PATH =
SHORT_NAMES = NO
JAVADOC_AUTOBRIEF = NO
QT_AUTOBRIEF = NO
MULTILINE_CPP_IS_BRIEF = NO
INHERIT_DOCS = YES
SEPARATE_MEMBER_PAGES = NO
TAB_SIZE = 8
ALIASES =
OPTIMIZE_OUTPUT_FOR_C = NO
OPTIMIZE_OUTPUT_JAVA = NO
OPTIMIZE_FOR_FORTRAN = NO
OPTIMIZE_OUTPUT_VHDL = NO
BUILTIN_STL_SUPPORT = NO
CPP_CLI_SUPPORT = NO
SIP_SUPPORT = NO
IDL_PROPERTY_SUPPORT = YES
DISTRIBUTE_GROUP_DOC = NO
SUBGROUPING = YES
TYPEDEF_HIDES_STRUCT = NO
SYMBOL_CACHE_SIZE = 0
#---------------------------------------------------------------------------
# Build related configuration options
#---------------------------------------------------------------------------
EXTRACT_ALL = NO
EXTRACT_PRIVATE = NO
EXTRACT_STATIC = NO
EXTRACT_LOCAL_CLASSES = NO
EXTRACT_LOCAL_METHODS = NO
EXTRACT_ANON_NSPACES = NO
HIDE_UNDOC_MEMBERS = YES
HIDE_UNDOC_CLASSES = NO
HIDE_FRIEND_COMPOUNDS = NO
HIDE_IN_BODY_DOCS = NO
INTERNAL_DOCS = NO
CASE_SENSE_NAMES = NO
HIDE_SCOPE_NAMES = NO
SHOW_INCLUDE_FILES = YES
INLINE_INFO = YES
SORT_MEMBER_DOCS = YES
SORT_BRIEF_DOCS = NO
SORT_GROUP_NAMES = NO
SORT_BY_SCOPE_NAME = NO
GENERATE_TODOLIST = YES
GENERATE_TESTLIST = YES
GENERATE_BUGLIST = YES
GENERATE_DEPRECATEDLIST= YES
ENABLED_SECTIONS =
MAX_INITIALIZER_LINES = 30
SHOW_USED_FILES = YES
SHOW_DIRECTORIES = NO
SHOW_FILES = YES
SHOW_NAMESPACES = YES
FILE_VERSION_FILTER =
LAYOUT_FILE =
#---------------------------------------------------------------------------
# configuration options related to warning and progress messages
#---------------------------------------------------------------------------
QUIET = NO
WARNINGS = YES
WARN_IF_UNDOCUMENTED = NO
WARN_IF_DOC_ERROR = YES
WARN_NO_PARAMDOC = NO
WARN_FORMAT = "$file:$line: $text"
WARN_LOGFILE =
#---------------------------------------------------------------------------
# configuration options related to the input files
#---------------------------------------------------------------------------
INPUT = Classes
INPUT_ENCODING = UTF-8
FILE_PATTERNS = *.c \
*.cc \
*.cxx \
*.cpp \
*.c++ \
*.d \
*.java \
*.ii \
*.ixx \
*.ipp \
*.i++ \
*.inl \
*.h \
*.hh \
*.hxx \
*.hpp \
*.h++ \
*.idl \
*.odl \
*.cs \
*.php \
*.php3 \
*.inc \
*.m \
*.mm \
*.dox \
*.py \
*.f90 \
*.f \
*.vhd \
*.vhdl
RECURSIVE = NO
EXCLUDE =
EXCLUDE_SYMLINKS = NO
EXCLUDE_PATTERNS =
EXCLUDE_SYMBOLS =
EXAMPLE_PATH =
EXAMPLE_PATTERNS = *
EXAMPLE_RECURSIVE = NO
IMAGE_PATH =
INPUT_FILTER =
FILTER_PATTERNS =
FILTER_SOURCE_FILES = NO
#---------------------------------------------------------------------------
# configuration options related to source browsing
#---------------------------------------------------------------------------
SOURCE_BROWSER = NO
INLINE_SOURCES = NO
STRIP_CODE_COMMENTS = YES
REFERENCED_BY_RELATION = NO
REFERENCES_RELATION = NO
REFERENCES_LINK_SOURCE = YES
USE_HTAGS = NO
VERBATIM_HEADERS = YES
#---------------------------------------------------------------------------
# configuration options related to the alphabetical class index
#---------------------------------------------------------------------------
ALPHABETICAL_INDEX = NO
COLS_IN_ALPHA_INDEX = 5
IGNORE_PREFIX =
#---------------------------------------------------------------------------
# configuration options related to the HTML output
#---------------------------------------------------------------------------
GENERATE_HTML = YES
HTML_OUTPUT = html
HTML_FILE_EXTENSION = .html
HTML_HEADER =
HTML_FOOTER =
HTML_STYLESHEET =
HTML_ALIGN_MEMBERS = YES
HTML_DYNAMIC_SECTIONS = NO
GENERATE_DOCSET = NO
DOCSET_FEEDNAME = "Doxygen generated docs"
DOCSET_BUNDLE_ID = org.doxygen.Project
GENERATE_HTMLHELP = NO
CHM_FILE =
HHC_LOCATION =
GENERATE_CHI = NO
CHM_INDEX_ENCODING =
BINARY_TOC = NO
TOC_EXPAND = NO
GENERATE_QHP = NO
QCH_FILE =
QHP_NAMESPACE = org.doxygen.Project
QHP_VIRTUAL_FOLDER = doc
QHG_LOCATION =
DISABLE_INDEX = NO
ENUM_VALUES_PER_LINE = 4
GENERATE_TREEVIEW = NONE
TREEVIEW_WIDTH = 250
FORMULA_FONTSIZE = 10
#---------------------------------------------------------------------------
# configuration options related to the LaTeX output
#---------------------------------------------------------------------------
GENERATE_LATEX = NO
LATEX_OUTPUT = latex
LATEX_CMD_NAME = latex
MAKEINDEX_CMD_NAME = makeindex
COMPACT_LATEX = NO
PAPER_TYPE = a4wide
EXTRA_PACKAGES =
LATEX_HEADER =
PDF_HYPERLINKS = YES
USE_PDFLATEX = YES
LATEX_BATCHMODE = NO
LATEX_HIDE_INDICES = NO
#---------------------------------------------------------------------------
# configuration options related to the RTF output
#---------------------------------------------------------------------------
GENERATE_RTF = NO
RTF_OUTPUT = rtf
COMPACT_RTF = NO
RTF_HYPERLINKS = NO
RTF_STYLESHEET_FILE =
RTF_EXTENSIONS_FILE =
#---------------------------------------------------------------------------
# configuration options related to the man page output
#---------------------------------------------------------------------------
GENERATE_MAN = NO
MAN_OUTPUT = man
MAN_EXTENSION = .3
MAN_LINKS = NO
#---------------------------------------------------------------------------
# configuration options related to the XML output
#---------------------------------------------------------------------------
GENERATE_XML = NO
XML_OUTPUT = xml
XML_SCHEMA =
XML_DTD =
XML_PROGRAMLISTING = YES
#---------------------------------------------------------------------------
# configuration options for the AutoGen Definitions output
#---------------------------------------------------------------------------
GENERATE_AUTOGEN_DEF = NO
#---------------------------------------------------------------------------
# configuration options related to the Perl module output
#---------------------------------------------------------------------------
GENERATE_PERLMOD = NO
PERLMOD_LATEX = NO
PERLMOD_PRETTY = YES
PERLMOD_MAKEVAR_PREFIX =
#---------------------------------------------------------------------------
# Configuration options related to the preprocessor
#---------------------------------------------------------------------------
ENABLE_PREPROCESSING = YES
MACRO_EXPANSION = NO
EXPAND_ONLY_PREDEF = NO
SEARCH_INCLUDES = YES
INCLUDE_PATH =
INCLUDE_FILE_PATTERNS =
PREDEFINED =
EXPAND_AS_DEFINED =
SKIP_FUNCTION_MACROS = YES
#---------------------------------------------------------------------------
# Configuration::additions related to external references
#---------------------------------------------------------------------------
TAGFILES =
GENERATE_TAGFILE =
ALLEXTERNALS = NO
EXTERNAL_GROUPS = YES
PERL_PATH = /usr/bin/perl
#---------------------------------------------------------------------------
# Configuration options related to the dot tool
#---------------------------------------------------------------------------
CLASS_DIAGRAMS = YES
MSCGEN_PATH = /Extra/Doxygen.app/Contents/Resources/
HIDE_UNDOC_RELATIONS = YES
HAVE_DOT = NO
DOT_FONTNAME = FreeSans
DOT_FONTSIZE = 10
DOT_FONTPATH =
CLASS_GRAPH = YES
COLLABORATION_GRAPH = YES
GROUP_GRAPHS = YES
UML_LOOK = NO
TEMPLATE_RELATIONS = NO
INCLUDE_GRAPH = YES
INCLUDED_BY_GRAPH = YES
CALL_GRAPH = NO
CALLER_GRAPH = NO
GRAPHICAL_HIERARCHY = YES
DIRECTORY_GRAPH = YES
DOT_IMAGE_FORMAT = png
DOT_PATH = /usr/local/bin
DOTFILE_DIRS =
DOT_GRAPH_MAX_NODES = 50
MAX_DOT_GRAPH_DEPTH = 1000
DOT_TRANSPARENT = NO
DOT_MULTI_TARGETS = NO
GENERATE_LEGEND = YES
DOT_CLEANUP = YES
#---------------------------------------------------------------------------
# Configuration::additions related to the search engine
#---------------------------------------------------------------------------
SEARCHENGINE = NO

View File

@ -0,0 +1,408 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 45;
objects = {
/* Begin PBXBuildFile section */
693CA3360F188B3400BF8670 /* libircclient.c in Sources */ = {isa = PBXBuildFile; fileRef = 693CA3350F188B3400BF8670 /* libircclient.c */; };
694762D30F10AAAE002C0318 /* DDInvocationGrabber.h in Headers */ = {isa = PBXBuildFile; fileRef = 694762CB0F10AAAE002C0318 /* DDInvocationGrabber.h */; settings = {ATTRIBUTES = (Public, ); }; };
694762D40F10AAAE002C0318 /* DDInvocationGrabber.m in Sources */ = {isa = PBXBuildFile; fileRef = 694762CC0F10AAAE002C0318 /* DDInvocationGrabber.m */; };
694762D50F10AAAE002C0318 /* NSObject+DDExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = 694762CD0F10AAAE002C0318 /* NSObject+DDExtensions.h */; settings = {ATTRIBUTES = (Public, ); }; };
694762D60F10AAAE002C0318 /* NSObject+DDExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 694762CE0F10AAAE002C0318 /* NSObject+DDExtensions.m */; };
694762D70F10AAAE002C0318 /* IRCClientChannel.h in Headers */ = {isa = PBXBuildFile; fileRef = 694762CF0F10AAAE002C0318 /* IRCClientChannel.h */; settings = {ATTRIBUTES = (Public, ); }; };
694762D80F10AAAE002C0318 /* IRCClientChannel.m in Sources */ = {isa = PBXBuildFile; fileRef = 694762D00F10AAAE002C0318 /* IRCClientChannel.m */; };
694762D90F10AAAE002C0318 /* IRCClientSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 694762D10F10AAAE002C0318 /* IRCClientSession.h */; settings = {ATTRIBUTES = (Public, ); }; };
694762DA0F10AAAE002C0318 /* IRCClientSession.m in Sources */ = {isa = PBXBuildFile; fileRef = 694762D20F10AAAE002C0318 /* IRCClientSession.m */; };
6947631E0F10AE32002C0318 /* LICENSE in Resources */ = {isa = PBXBuildFile; fileRef = 6947631D0F10AE32002C0318 /* LICENSE */; };
694763200F10AE46002C0318 /* README in Resources */ = {isa = PBXBuildFile; fileRef = 6947631F0F10AE46002C0318 /* README */; };
6989EABC0F1861FB0083030A /* IRCClientChannelDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 6989EABA0F1861FB0083030A /* IRCClientChannelDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; };
6989EAC00F1862090083030A /* IRCClientSessionDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 6989EABE0F1862090083030A /* IRCClientSessionDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; };
6989EADD0F18810C0083030A /* Doxyfile in Resources */ = {isa = PBXBuildFile; fileRef = 6989EADC0F18810C0083030A /* Doxyfile */; };
69B1CAAC0F1F2F1B00EF6DE2 /* config.h in Headers */ = {isa = PBXBuildFile; fileRef = 69B1CAA10F1F2F1B00EF6DE2 /* config.h */; settings = {ATTRIBUTES = (Public, ); }; };
69B1CAAD0F1F2F1B00EF6DE2 /* libirc_dcc.h in Headers */ = {isa = PBXBuildFile; fileRef = 69B1CAA20F1F2F1B00EF6DE2 /* libirc_dcc.h */; settings = {ATTRIBUTES = (Public, ); }; };
69B1CAAE0F1F2F1B00EF6DE2 /* libirc_doc.h in Headers */ = {isa = PBXBuildFile; fileRef = 69B1CAA30F1F2F1B00EF6DE2 /* libirc_doc.h */; settings = {ATTRIBUTES = (Public, ); }; };
69B1CAAF0F1F2F1B00EF6DE2 /* libirc_doc_faq.h in Headers */ = {isa = PBXBuildFile; fileRef = 69B1CAA40F1F2F1B00EF6DE2 /* libirc_doc_faq.h */; settings = {ATTRIBUTES = (Public, ); }; };
69B1CAB00F1F2F1B00EF6DE2 /* libirc_errors.h in Headers */ = {isa = PBXBuildFile; fileRef = 69B1CAA50F1F2F1B00EF6DE2 /* libirc_errors.h */; settings = {ATTRIBUTES = (Public, ); }; };
69B1CAB10F1F2F1B00EF6DE2 /* libirc_events.h in Headers */ = {isa = PBXBuildFile; fileRef = 69B1CAA60F1F2F1B00EF6DE2 /* libirc_events.h */; settings = {ATTRIBUTES = (Public, ); }; };
69B1CAB20F1F2F1B00EF6DE2 /* libirc_options.h in Headers */ = {isa = PBXBuildFile; fileRef = 69B1CAA70F1F2F1B00EF6DE2 /* libirc_options.h */; settings = {ATTRIBUTES = (Public, ); }; };
69B1CAB30F1F2F1B00EF6DE2 /* libirc_params.h in Headers */ = {isa = PBXBuildFile; fileRef = 69B1CAA80F1F2F1B00EF6DE2 /* libirc_params.h */; settings = {ATTRIBUTES = (Public, ); }; };
69B1CAB40F1F2F1B00EF6DE2 /* libirc_rfcnumeric.h in Headers */ = {isa = PBXBuildFile; fileRef = 69B1CAA90F1F2F1B00EF6DE2 /* libirc_rfcnumeric.h */; settings = {ATTRIBUTES = (Public, ); }; };
69B1CAB50F1F2F1B00EF6DE2 /* libirc_session.h in Headers */ = {isa = PBXBuildFile; fileRef = 69B1CAAA0F1F2F1B00EF6DE2 /* libirc_session.h */; settings = {ATTRIBUTES = (Public, ); }; };
69B1CAB60F1F2F1B00EF6DE2 /* libircclient.h in Headers */ = {isa = PBXBuildFile; fileRef = 69B1CAAB0F1F2F1B00EF6DE2 /* libircclient.h */; settings = {ATTRIBUTES = (Public, ); }; };
8DC2EF530486A6940098B216 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C1666FE841158C02AAC07 /* InfoPlist.strings */; };
8DC2EF570486A6940098B216 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7B1FEA5585E11CA2CBB /* Cocoa.framework */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
0867D69BFE84028FC02AAC07 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; };
0867D6A5FE840307C02AAC07 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = "<absolute>"; };
089C1667FE841158C02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = "<group>"; };
1058C7B1FEA5585E11CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; };
32DBCF5E0370ADEE00C91783 /* IRCClient_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IRCClient_Prefix.pch; sourceTree = "<group>"; };
693CA3350F188B3400BF8670 /* libircclient.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = libircclient.c; path = ../src/libircclient.c; sourceTree = SOURCE_ROOT; };
694762CB0F10AAAE002C0318 /* DDInvocationGrabber.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDInvocationGrabber.h; sourceTree = "<group>"; };
694762CC0F10AAAE002C0318 /* DDInvocationGrabber.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDInvocationGrabber.m; sourceTree = "<group>"; };
694762CD0F10AAAE002C0318 /* NSObject+DDExtensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSObject+DDExtensions.h"; sourceTree = "<group>"; };
694762CE0F10AAAE002C0318 /* NSObject+DDExtensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSObject+DDExtensions.m"; sourceTree = "<group>"; };
694762CF0F10AAAE002C0318 /* IRCClientChannel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IRCClientChannel.h; sourceTree = "<group>"; };
694762D00F10AAAE002C0318 /* IRCClientChannel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IRCClientChannel.m; sourceTree = "<group>"; };
694762D10F10AAAE002C0318 /* IRCClientSession.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IRCClientSession.h; sourceTree = "<group>"; };
694762D20F10AAAE002C0318 /* IRCClientSession.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IRCClientSession.m; sourceTree = "<group>"; };
6947631D0F10AE32002C0318 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = SOURCE_ROOT; };
6947631F0F10AE46002C0318 /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README; sourceTree = "<group>"; };
6989EABA0F1861FB0083030A /* IRCClientChannelDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IRCClientChannelDelegate.h; sourceTree = "<group>"; };
6989EABE0F1862090083030A /* IRCClientSessionDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IRCClientSessionDelegate.h; sourceTree = "<group>"; };
6989EADC0F18810C0083030A /* Doxyfile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Doxyfile; sourceTree = SOURCE_ROOT; };
69B1CAA10F1F2F1B00EF6DE2 /* config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = config.h; path = ../include/config.h; sourceTree = SOURCE_ROOT; };
69B1CAA20F1F2F1B00EF6DE2 /* libirc_dcc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = libirc_dcc.h; path = ../include/libirc_dcc.h; sourceTree = SOURCE_ROOT; };
69B1CAA30F1F2F1B00EF6DE2 /* libirc_doc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = libirc_doc.h; path = ../include/libirc_doc.h; sourceTree = SOURCE_ROOT; };
69B1CAA40F1F2F1B00EF6DE2 /* libirc_doc_faq.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = libirc_doc_faq.h; path = ../include/libirc_doc_faq.h; sourceTree = SOURCE_ROOT; };
69B1CAA50F1F2F1B00EF6DE2 /* libirc_errors.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = libirc_errors.h; path = ../include/libirc_errors.h; sourceTree = SOURCE_ROOT; };
69B1CAA60F1F2F1B00EF6DE2 /* libirc_events.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = libirc_events.h; path = ../include/libirc_events.h; sourceTree = SOURCE_ROOT; };
69B1CAA70F1F2F1B00EF6DE2 /* libirc_options.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = libirc_options.h; path = ../include/libirc_options.h; sourceTree = SOURCE_ROOT; };
69B1CAA80F1F2F1B00EF6DE2 /* libirc_params.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = libirc_params.h; path = ../include/libirc_params.h; sourceTree = SOURCE_ROOT; };
69B1CAA90F1F2F1B00EF6DE2 /* libirc_rfcnumeric.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = libirc_rfcnumeric.h; path = ../include/libirc_rfcnumeric.h; sourceTree = SOURCE_ROOT; };
69B1CAAA0F1F2F1B00EF6DE2 /* libirc_session.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = libirc_session.h; path = ../include/libirc_session.h; sourceTree = SOURCE_ROOT; };
69B1CAAB0F1F2F1B00EF6DE2 /* libircclient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = libircclient.h; path = ../include/libircclient.h; sourceTree = SOURCE_ROOT; };
8DC2EF5A0486A6940098B216 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
8DC2EF5B0486A6940098B216 /* IRCClient.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = IRCClient.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D2F7E79907B2D74100F64583 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = "<absolute>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
8DC2EF560486A6940098B216 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
8DC2EF570486A6940098B216 /* Cocoa.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
034768DFFF38A50411DB9C8B /* Products */ = {
isa = PBXGroup;
children = (
8DC2EF5B0486A6940098B216 /* IRCClient.framework */,
);
name = Products;
sourceTree = "<group>";
};
0867D691FE84028FC02AAC07 /* IRCClient */ = {
isa = PBXGroup;
children = (
6947632B0F10AFD3002C0318 /* doc */,
6947631F0F10AE46002C0318 /* README */,
6947631D0F10AE32002C0318 /* LICENSE */,
6989EADC0F18810C0083030A /* Doxyfile */,
08FB77AEFE84172EC02AAC07 /* Classes */,
32C88DFF0371C24200C91783 /* Other Sources */,
089C1665FE841158C02AAC07 /* Resources */,
0867D69AFE84028FC02AAC07 /* External Frameworks and Libraries */,
034768DFFF38A50411DB9C8B /* Products */,
);
name = IRCClient;
sourceTree = "<group>";
};
0867D69AFE84028FC02AAC07 /* External Frameworks and Libraries */ = {
isa = PBXGroup;
children = (
1058C7B0FEA5585E11CA2CBB /* Linked Frameworks */,
1058C7B2FEA5585E11CA2CBB /* Other Frameworks */,
);
name = "External Frameworks and Libraries";
sourceTree = "<group>";
};
089C1665FE841158C02AAC07 /* Resources */ = {
isa = PBXGroup;
children = (
8DC2EF5A0486A6940098B216 /* Info.plist */,
089C1666FE841158C02AAC07 /* InfoPlist.strings */,
);
name = Resources;
sourceTree = "<group>";
};
08FB77AEFE84172EC02AAC07 /* Classes */ = {
isa = PBXGroup;
children = (
694762CB0F10AAAE002C0318 /* DDInvocationGrabber.h */,
694762CC0F10AAAE002C0318 /* DDInvocationGrabber.m */,
694762CD0F10AAAE002C0318 /* NSObject+DDExtensions.h */,
694762CE0F10AAAE002C0318 /* NSObject+DDExtensions.m */,
6989EABA0F1861FB0083030A /* IRCClientChannelDelegate.h */,
694762CF0F10AAAE002C0318 /* IRCClientChannel.h */,
694762D00F10AAAE002C0318 /* IRCClientChannel.m */,
6989EABE0F1862090083030A /* IRCClientSessionDelegate.h */,
694762D10F10AAAE002C0318 /* IRCClientSession.h */,
694762D20F10AAAE002C0318 /* IRCClientSession.m */,
);
path = Classes;
sourceTree = "<group>";
};
1058C7B0FEA5585E11CA2CBB /* Linked Frameworks */ = {
isa = PBXGroup;
children = (
1058C7B1FEA5585E11CA2CBB /* Cocoa.framework */,
);
name = "Linked Frameworks";
sourceTree = "<group>";
};
1058C7B2FEA5585E11CA2CBB /* Other Frameworks */ = {
isa = PBXGroup;
children = (
0867D6A5FE840307C02AAC07 /* AppKit.framework */,
D2F7E79907B2D74100F64583 /* CoreData.framework */,
0867D69BFE84028FC02AAC07 /* Foundation.framework */,
);
name = "Other Frameworks";
sourceTree = "<group>";
};
32C88DFF0371C24200C91783 /* Other Sources */ = {
isa = PBXGroup;
children = (
69B1CAA10F1F2F1B00EF6DE2 /* config.h */,
69B1CAA20F1F2F1B00EF6DE2 /* libirc_dcc.h */,
69B1CAA30F1F2F1B00EF6DE2 /* libirc_doc.h */,
69B1CAA40F1F2F1B00EF6DE2 /* libirc_doc_faq.h */,
69B1CAA50F1F2F1B00EF6DE2 /* libirc_errors.h */,
69B1CAA60F1F2F1B00EF6DE2 /* libirc_events.h */,
69B1CAA70F1F2F1B00EF6DE2 /* libirc_options.h */,
69B1CAA80F1F2F1B00EF6DE2 /* libirc_params.h */,
69B1CAA90F1F2F1B00EF6DE2 /* libirc_rfcnumeric.h */,
69B1CAAA0F1F2F1B00EF6DE2 /* libirc_session.h */,
69B1CAAB0F1F2F1B00EF6DE2 /* libircclient.h */,
32DBCF5E0370ADEE00C91783 /* IRCClient_Prefix.pch */,
693CA3350F188B3400BF8670 /* libircclient.c */,
);
name = "Other Sources";
sourceTree = "<group>";
};
6947632B0F10AFD3002C0318 /* doc */ = {
isa = PBXGroup;
children = (
);
path = doc;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXHeadersBuildPhase section */
8DC2EF500486A6940098B216 /* Headers */ = {
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
694762D30F10AAAE002C0318 /* DDInvocationGrabber.h in Headers */,
694762D50F10AAAE002C0318 /* NSObject+DDExtensions.h in Headers */,
694762D70F10AAAE002C0318 /* IRCClientChannel.h in Headers */,
694762D90F10AAAE002C0318 /* IRCClientSession.h in Headers */,
6989EABC0F1861FB0083030A /* IRCClientChannelDelegate.h in Headers */,
6989EAC00F1862090083030A /* IRCClientSessionDelegate.h in Headers */,
69B1CAAC0F1F2F1B00EF6DE2 /* config.h in Headers */,
69B1CAAD0F1F2F1B00EF6DE2 /* libirc_dcc.h in Headers */,
69B1CAAE0F1F2F1B00EF6DE2 /* libirc_doc.h in Headers */,
69B1CAAF0F1F2F1B00EF6DE2 /* libirc_doc_faq.h in Headers */,
69B1CAB00F1F2F1B00EF6DE2 /* libirc_errors.h in Headers */,
69B1CAB10F1F2F1B00EF6DE2 /* libirc_events.h in Headers */,
69B1CAB20F1F2F1B00EF6DE2 /* libirc_options.h in Headers */,
69B1CAB30F1F2F1B00EF6DE2 /* libirc_params.h in Headers */,
69B1CAB40F1F2F1B00EF6DE2 /* libirc_rfcnumeric.h in Headers */,
69B1CAB50F1F2F1B00EF6DE2 /* libirc_session.h in Headers */,
69B1CAB60F1F2F1B00EF6DE2 /* libircclient.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXHeadersBuildPhase section */
/* Begin PBXNativeTarget section */
8DC2EF4F0486A6940098B216 /* IRCClient */ = {
isa = PBXNativeTarget;
buildConfigurationList = 1DEB91AD08733DA50010E9CD /* Build configuration list for PBXNativeTarget "IRCClient" */;
buildPhases = (
8DC2EF500486A6940098B216 /* Headers */,
8DC2EF520486A6940098B216 /* Resources */,
8DC2EF540486A6940098B216 /* Sources */,
8DC2EF560486A6940098B216 /* Frameworks */,
);
buildRules = (
);
dependencies = (
);
name = IRCClient;
productInstallPath = "$(HOME)/Library/Frameworks";
productName = IRCClient;
productReference = 8DC2EF5B0486A6940098B216 /* IRCClient.framework */;
productType = "com.apple.product-type.framework";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
0867D690FE84028FC02AAC07 /* Project object */ = {
isa = PBXProject;
buildConfigurationList = 1DEB91B108733DA50010E9CD /* Build configuration list for PBXProject "IRCClient" */;
compatibilityVersion = "Xcode 3.1";
hasScannedForEncodings = 1;
mainGroup = 0867D691FE84028FC02AAC07 /* IRCClient */;
productRefGroup = 034768DFFF38A50411DB9C8B /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
8DC2EF4F0486A6940098B216 /* IRCClient */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
8DC2EF520486A6940098B216 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
8DC2EF530486A6940098B216 /* InfoPlist.strings in Resources */,
6947631E0F10AE32002C0318 /* LICENSE in Resources */,
694763200F10AE46002C0318 /* README in Resources */,
6989EADD0F18810C0083030A /* Doxyfile in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
8DC2EF540486A6940098B216 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
694762D40F10AAAE002C0318 /* DDInvocationGrabber.m in Sources */,
694762D60F10AAAE002C0318 /* NSObject+DDExtensions.m in Sources */,
694762D80F10AAAE002C0318 /* IRCClientChannel.m in Sources */,
694762DA0F10AAAE002C0318 /* IRCClientSession.m in Sources */,
693CA3360F188B3400BF8670 /* libircclient.c in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXVariantGroup section */
089C1666FE841158C02AAC07 /* InfoPlist.strings */ = {
isa = PBXVariantGroup;
children = (
089C1667FE841158C02AAC07 /* English */,
);
name = InfoPlist.strings;
sourceTree = "<group>";
};
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
1DEB91AE08733DA50010E9CD /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
COPY_PHASE_STRIP = NO;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
FRAMEWORK_VERSION = A;
GCC_DYNAMIC_NO_PIC = NO;
GCC_ENABLE_FIX_AND_CONTINUE = YES;
GCC_MODEL_TUNING = G5;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = IRCClient_Prefix.pch;
HEADER_SEARCH_PATHS = (
../src,
../include,
);
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(HOME)/Library/Frameworks";
LD_DYLIB_INSTALL_NAME = "@executable_path/../Frameworks/$(EXECUTABLE_PATH)";
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
../libircclient/trunk/src,
"\"$(SRCROOT)/../src\"",
);
PRODUCT_NAME = IRCClient;
WRAPPER_EXTENSION = framework;
};
name = Debug;
};
1DEB91AF08733DA50010E9CD /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
FRAMEWORK_VERSION = A;
GCC_MODEL_TUNING = G5;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = IRCClient_Prefix.pch;
HEADER_SEARCH_PATHS = (
../src,
../include,
);
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(HOME)/Library/Frameworks";
LD_DYLIB_INSTALL_NAME = "../Frameworks/$(EXECUTABLE_PATH)";
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
../libircclient/trunk/src,
"\"$(SRCROOT)/../src\"",
);
PRODUCT_NAME = IRCClient;
WRAPPER_EXTENSION = framework;
};
name = Release;
};
1DEB91B208733DA50010E9CD /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
GCC_C_LANGUAGE_STANDARD = c99;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
ONLY_ACTIVE_ARCH = YES;
PREBINDING = NO;
SDKROOT = macosx10.5;
};
name = Debug;
};
1DEB91B308733DA50010E9CD /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
GCC_C_LANGUAGE_STANDARD = c99;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
PREBINDING = NO;
SDKROOT = macosx10.5;
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
1DEB91AD08733DA50010E9CD /* Build configuration list for PBXNativeTarget "IRCClient" */ = {
isa = XCConfigurationList;
buildConfigurations = (
1DEB91AE08733DA50010E9CD /* Debug */,
1DEB91AF08733DA50010E9CD /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
1DEB91B108733DA50010E9CD /* Build configuration list for PBXProject "IRCClient" */ = {
isa = XCConfigurationList;
buildConfigurations = (
1DEB91B208733DA50010E9CD /* Debug */,
1DEB91B308733DA50010E9CD /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 0867D690FE84028FC02AAC07 /* Project object */;
}

View File

@ -0,0 +1,7 @@
//
// Prefix header for all source files of the 'IRCClient' target in the 'IRCClient' project.
//
#ifdef __OBJC__
#import <Cocoa/Cocoa.h>
#endif

Some files were not shown because too many files have changed in this diff Show More