2000-10-01 16:48:48 -04:00
|
|
|
#include "module.h"
|
|
|
|
|
2005-03-07 10:37:31 -05:00
|
|
|
static int initialized = FALSE;
|
|
|
|
|
2000-12-09 15:54:47 -05:00
|
|
|
static void perl_irc_connect_fill_hash(HV *hv, IRC_SERVER_CONNECT_REC *conn)
|
|
|
|
{
|
|
|
|
perl_connect_fill_hash(hv, (SERVER_CONNECT_REC *) conn);
|
|
|
|
hv_store(hv, "alternate_nick", 14, new_pv(conn->alternate_nick), 0);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void perl_irc_server_fill_hash(HV *hv, IRC_SERVER_REC *server)
|
|
|
|
{
|
2002-11-07 12:40:05 -05:00
|
|
|
perl_server_fill_hash(hv, (SERVER_REC *) server);
|
2000-12-09 15:54:47 -05:00
|
|
|
|
|
|
|
hv_store(hv, "real_address", 12, new_pv(server->real_address), 0);
|
|
|
|
hv_store(hv, "usermode", 8, new_pv(server->usermode), 0);
|
|
|
|
hv_store(hv, "userhost", 8, new_pv(server->userhost), 0);
|
2001-12-06 16:14:06 -05:00
|
|
|
|
2001-12-08 19:41:33 -05:00
|
|
|
hv_store(hv, "max_cmds_at_once", 16, newSViv(server->max_cmds_at_once), 0);
|
|
|
|
hv_store(hv, "cmd_queue_speed", 15, newSViv(server->cmd_queue_speed), 0);
|
|
|
|
hv_store(hv, "max_query_chans", 15, newSViv(server->max_query_chans), 0);
|
2001-12-06 16:14:06 -05:00
|
|
|
|
|
|
|
hv_store(hv, "max_kicks_in_cmd", 16, newSViv(server->max_kicks_in_cmd), 0);
|
|
|
|
hv_store(hv, "max_msgs_in_cmd", 15, newSViv(server->max_msgs_in_cmd), 0);
|
|
|
|
hv_store(hv, "max_modes_in_cmd", 16, newSViv(server->max_modes_in_cmd), 0);
|
|
|
|
hv_store(hv, "max_whois_in_cmd", 16, newSViv(server->max_whois_in_cmd), 0);
|
2004-01-20 05:57:57 -05:00
|
|
|
hv_store(hv, "isupport_sent", 13, newSViv(server->isupport_sent), 0);
|
2000-12-09 15:54:47 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
static void perl_ban_fill_hash(HV *hv, BAN_REC *ban)
|
|
|
|
{
|
|
|
|
hv_store(hv, "ban", 3, new_pv(ban->ban), 0);
|
|
|
|
hv_store(hv, "setby", 5, new_pv(ban->setby), 0);
|
|
|
|
hv_store(hv, "time", 4, newSViv(ban->time), 0);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void perl_dcc_fill_hash(HV *hv, DCC_REC *dcc)
|
|
|
|
{
|
2001-02-19 21:37:01 -05:00
|
|
|
hv_store(hv, "type", 4, new_pv(dcc_type2str(dcc->type)), 0);
|
|
|
|
hv_store(hv, "orig_type", 9, new_pv(dcc_type2str(dcc->orig_type)), 0);
|
2000-12-09 15:54:47 -05:00
|
|
|
hv_store(hv, "created", 7, newSViv(dcc->created), 0);
|
|
|
|
|
2001-11-19 14:36:21 -05:00
|
|
|
hv_store(hv, "server", 6, iobject_bless(dcc->server), 0);
|
2001-02-12 11:31:33 -05:00
|
|
|
hv_store(hv, "servertag", 9, new_pv(dcc->servertag), 0);
|
|
|
|
hv_store(hv, "mynick", 6, new_pv(dcc->mynick), 0);
|
2000-12-09 15:54:47 -05:00
|
|
|
hv_store(hv, "nick", 4, new_pv(dcc->nick), 0);
|
|
|
|
|
2001-11-19 14:36:21 -05:00
|
|
|
hv_store(hv, "chat", 4, simple_iobject_bless(dcc->chat), 0);
|
2001-02-12 11:31:33 -05:00
|
|
|
hv_store(hv, "target", 6, new_pv(dcc->target), 0);
|
2000-12-09 15:54:47 -05:00
|
|
|
hv_store(hv, "arg", 3, new_pv(dcc->arg), 0);
|
|
|
|
|
|
|
|
hv_store(hv, "addr", 4, new_pv(dcc->addrstr), 0);
|
|
|
|
hv_store(hv, "port", 4, newSViv(dcc->port), 0);
|
|
|
|
|
|
|
|
hv_store(hv, "starttime", 9, newSViv(dcc->starttime), 0);
|
2001-02-12 11:31:33 -05:00
|
|
|
hv_store(hv, "transfd", 7, newSViv(dcc->transfd), 0);
|
2000-12-09 15:54:47 -05:00
|
|
|
}
|
|
|
|
|
2001-02-19 21:37:01 -05:00
|
|
|
static void perl_dcc_chat_fill_hash(HV *hv, CHAT_DCC_REC *dcc)
|
|
|
|
{
|
|
|
|
perl_dcc_fill_hash(hv, (DCC_REC *) dcc);
|
|
|
|
|
|
|
|
hv_store(hv, "id", 2, new_pv(dcc->id), 0);
|
|
|
|
hv_store(hv, "mirc_ctcp", 9, newSViv(dcc->mirc_ctcp), 0);
|
|
|
|
hv_store(hv, "connection_lost", 15, newSViv(dcc->connection_lost), 0);
|
|
|
|
}
|
|
|
|
|
2001-06-29 16:41:35 -04:00
|
|
|
static void perl_dcc_file_fill_hash(HV *hv, FILE_DCC_REC *dcc)
|
2001-02-19 21:37:01 -05:00
|
|
|
{
|
|
|
|
perl_dcc_fill_hash(hv, (DCC_REC *) dcc);
|
|
|
|
|
2001-06-29 16:41:35 -04:00
|
|
|
hv_store(hv, "size", 4, newSViv(dcc->size), 0);
|
|
|
|
hv_store(hv, "skipped", 7, newSViv(dcc->skipped), 0);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void perl_dcc_get_fill_hash(HV *hv, GET_DCC_REC *dcc)
|
|
|
|
{
|
|
|
|
perl_dcc_file_fill_hash(hv, (FILE_DCC_REC *) dcc);
|
|
|
|
|
2001-02-19 21:37:01 -05:00
|
|
|
hv_store(hv, "get_type", 8, newSViv(dcc->get_type), 0);
|
|
|
|
hv_store(hv, "file", 4, new_pv(dcc->file), 0);
|
|
|
|
hv_store(hv, "file_quoted", 11, newSViv(dcc->file_quoted), 0);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void perl_dcc_send_fill_hash(HV *hv, SEND_DCC_REC *dcc)
|
|
|
|
{
|
2001-06-29 16:41:35 -04:00
|
|
|
perl_dcc_file_fill_hash(hv, (FILE_DCC_REC *) dcc);
|
2001-02-19 21:37:01 -05:00
|
|
|
|
|
|
|
hv_store(hv, "file_quoted", 11, newSViv(dcc->file_quoted), 0);
|
|
|
|
hv_store(hv, "waitforend", 10, newSViv(dcc->waitforend), 0);
|
|
|
|
hv_store(hv, "gotalldata", 10, newSViv(dcc->gotalldata), 0);
|
|
|
|
}
|
|
|
|
|
2000-12-09 15:54:47 -05:00
|
|
|
static void perl_netsplit_fill_hash(HV *hv, NETSPLIT_REC *netsplit)
|
|
|
|
{
|
2001-01-07 04:54:21 -05:00
|
|
|
AV *av;
|
|
|
|
GSList *tmp;
|
2000-12-09 15:54:47 -05:00
|
|
|
|
|
|
|
hv_store(hv, "nick", 4, new_pv(netsplit->nick), 0);
|
|
|
|
hv_store(hv, "address", 7, new_pv(netsplit->address), 0);
|
|
|
|
hv_store(hv, "destroy", 7, newSViv(netsplit->destroy), 0);
|
|
|
|
|
2001-06-26 13:01:42 -04:00
|
|
|
hv_store(hv, "server", 6,
|
|
|
|
plain_bless(netsplit->server,
|
|
|
|
"Irssi::Irc::Netsplitserver"), 0);
|
2001-01-07 04:54:21 -05:00
|
|
|
|
|
|
|
av = newAV();
|
|
|
|
for (tmp = netsplit->channels; tmp != NULL; tmp = tmp->next) {
|
2001-06-26 13:01:42 -04:00
|
|
|
av_push(av, plain_bless(tmp->data,
|
|
|
|
"Irssi::Irc::Netsplitchannel"));
|
2001-01-07 04:54:21 -05:00
|
|
|
}
|
2002-04-28 09:24:27 -04:00
|
|
|
hv_store(hv, "channels", 8, newRV_noinc((SV*)av), 0);
|
2000-12-09 15:54:47 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
static void perl_netsplit_server_fill_hash(HV *hv, NETSPLIT_SERVER_REC *rec)
|
|
|
|
{
|
|
|
|
hv_store(hv, "server", 6, new_pv(rec->server), 0);
|
|
|
|
hv_store(hv, "destserver", 10, new_pv(rec->destserver), 0);
|
|
|
|
hv_store(hv, "count", 5, newSViv(rec->count), 0);
|
|
|
|
}
|
|
|
|
|
2001-01-07 04:59:21 -05:00
|
|
|
static void perl_netsplit_channel_fill_hash(HV *hv, NETSPLIT_CHAN_REC *rec)
|
2001-01-07 04:54:21 -05:00
|
|
|
{
|
|
|
|
hv_store(hv, "name", 4, new_pv(rec->name), 0);
|
2001-12-10 18:32:46 -05:00
|
|
|
hv_store(hv, "op", 2, newSViv(rec->op), 0);
|
|
|
|
hv_store(hv, "halfop", 6, newSViv(rec->halfop), 0);
|
|
|
|
hv_store(hv, "voice", 5, newSViv(rec->voice), 0);
|
2001-01-07 04:54:21 -05:00
|
|
|
}
|
|
|
|
|
2000-12-09 15:54:47 -05:00
|
|
|
static void perl_notifylist_fill_hash(HV *hv, NOTIFYLIST_REC *notify)
|
|
|
|
{
|
|
|
|
AV *av;
|
|
|
|
char **tmp;
|
|
|
|
|
|
|
|
hv_store(hv, "mask", 4, new_pv(notify->mask), 0);
|
|
|
|
hv_store(hv, "away_check", 10, newSViv(notify->away_check), 0);
|
|
|
|
hv_store(hv, "idle_check_time", 15, newSViv(notify->idle_check_time), 0);
|
|
|
|
|
|
|
|
av = newAV();
|
2003-07-06 10:10:42 -04:00
|
|
|
if (notify->ircnets != NULL) {
|
|
|
|
for (tmp = notify->ircnets; *tmp != NULL; tmp++) {
|
|
|
|
av_push(av, new_pv(*tmp));
|
|
|
|
}
|
2000-12-09 15:54:47 -05:00
|
|
|
}
|
|
|
|
hv_store(hv, "ircnets", 7, newRV_noinc((SV*)av), 0);
|
|
|
|
}
|
|
|
|
|
|
|
|
static PLAIN_OBJECT_INIT_REC irc_plains[] = {
|
|
|
|
{ "Irssi::Irc::Ban", (PERL_OBJECT_FUNC) perl_ban_fill_hash },
|
|
|
|
{ "Irssi::Irc::Dcc", (PERL_OBJECT_FUNC) perl_dcc_fill_hash },
|
|
|
|
{ "Irssi::Irc::Netsplit", (PERL_OBJECT_FUNC) perl_netsplit_fill_hash },
|
|
|
|
{ "Irssi::Irc::Netsplitserver", (PERL_OBJECT_FUNC) perl_netsplit_server_fill_hash },
|
2001-01-07 04:54:21 -05:00
|
|
|
{ "Irssi::Irc::Netsplitchannel", (PERL_OBJECT_FUNC) perl_netsplit_channel_fill_hash },
|
2000-12-09 15:54:47 -05:00
|
|
|
{ "Irssi::Irc::Notifylist", (PERL_OBJECT_FUNC) perl_notifylist_fill_hash },
|
|
|
|
|
|
|
|
{ NULL, NULL }
|
|
|
|
};
|
|
|
|
|
2000-10-01 16:48:48 -04:00
|
|
|
MODULE = Irssi::Irc PACKAGE = Irssi::Irc
|
|
|
|
|
|
|
|
PROTOTYPES: ENABLE
|
|
|
|
|
2000-12-09 15:54:47 -05:00
|
|
|
void
|
|
|
|
init()
|
|
|
|
PREINIT:
|
|
|
|
int chat_type;
|
|
|
|
CODE:
|
|
|
|
if (initialized) return;
|
2001-10-20 09:19:25 -04:00
|
|
|
perl_api_version_check("Irssi::Irc");
|
2000-12-09 15:54:47 -05:00
|
|
|
initialized = TRUE;
|
|
|
|
|
|
|
|
chat_type = chat_protocol_lookup("IRC");
|
|
|
|
|
|
|
|
irssi_add_object(module_get_uniq_id("SERVER CONNECT", 0),
|
|
|
|
chat_type, "Irssi::Irc::Connect",
|
|
|
|
(PERL_OBJECT_FUNC) perl_irc_connect_fill_hash);
|
|
|
|
irssi_add_object(module_get_uniq_id("SERVER", 0),
|
|
|
|
chat_type, "Irssi::Irc::Server",
|
|
|
|
(PERL_OBJECT_FUNC) perl_irc_server_fill_hash);
|
2001-02-19 21:37:01 -05:00
|
|
|
irssi_add_object(module_get_uniq_id_str("DCC", "CHAT"),
|
|
|
|
0, "Irssi::Irc::Dcc::Chat",
|
|
|
|
(PERL_OBJECT_FUNC) perl_dcc_chat_fill_hash);
|
|
|
|
irssi_add_object(module_get_uniq_id_str("DCC", "GET"),
|
|
|
|
0, "Irssi::Irc::Dcc::Get",
|
|
|
|
(PERL_OBJECT_FUNC) perl_dcc_get_fill_hash);
|
|
|
|
irssi_add_object(module_get_uniq_id_str("DCC", "SEND"),
|
|
|
|
0, "Irssi::Irc::Dcc::Send",
|
|
|
|
(PERL_OBJECT_FUNC) perl_dcc_send_fill_hash);
|
2003-12-10 17:59:45 -05:00
|
|
|
irssi_add_object(module_get_uniq_id_str("DCC", "SERVER"),
|
|
|
|
0, "Irssi::Irc::Dcc::Server",
|
|
|
|
(PERL_OBJECT_FUNC) perl_dcc_send_fill_hash);
|
2000-12-09 15:54:47 -05:00
|
|
|
irssi_add_plains(irc_plains);
|
2001-02-19 21:37:01 -05:00
|
|
|
perl_eval_pv("@Irssi::Irc::Dcc::Chat::ISA = qw(Irssi::Irc::Dcc);\n"
|
|
|
|
"@Irssi::Irc::Dcc::Get::ISA = qw(Irssi::Irc::Dcc);\n"
|
2003-12-10 17:59:45 -05:00
|
|
|
"@Irssi::Irc::Dcc::Send::ISA = qw(Irssi::Irc::Dcc);\n"
|
|
|
|
"@Irssi::Irc::Dcc::Server::ISA = qw(Irssi::Irc::Dcc);\n",
|
2001-02-19 21:37:01 -05:00
|
|
|
TRUE);
|
|
|
|
|
2001-10-20 15:52:07 -04:00
|
|
|
void
|
|
|
|
deinit()
|
|
|
|
CODE:
|
2005-03-07 10:37:31 -05:00
|
|
|
initialized = FALSE;
|
2001-10-20 15:52:07 -04:00
|
|
|
|
|
|
|
BOOT:
|
|
|
|
irssi_boot(Irc__Channel);
|
2001-11-18 16:36:11 -05:00
|
|
|
irssi_boot(Irc__Ctcp);
|
2001-10-20 15:52:07 -04:00
|
|
|
irssi_boot(Irc__Dcc);
|
|
|
|
irssi_boot(Irc__Modes);
|
|
|
|
irssi_boot(Irc__Netsplit);
|
|
|
|
irssi_boot(Irc__Notifylist);
|
|
|
|
irssi_boot(Irc__Query);
|
|
|
|
irssi_boot(Irc__Server);
|