From 5a94ff859c1a3800a2c842ca9ec8a617823b8c23 Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Fri, 9 Jun 2000 17:29:12 +0000 Subject: [PATCH] Added Irssi::Dcc::values(), updated a few other DCC things too. git-svn-id: http://svn.irssi.org/repos/irssi/trunk@306 dbcabf3a-b0e7-0310-adc4-f8d773084564 --- docs/perl.txt | 53 +++++++++++++++++++++++++------------ src/irc/dcc/dcc.h | 2 ++ src/perl/xs/Irssi-dcc.xs | 56 ++++++++++++++++++++++++++++++++++------ 3 files changed, 87 insertions(+), 24 deletions(-) diff --git a/docs/perl.txt b/docs/perl.txt index 94b83e11..9f702354 100644 --- a/docs/perl.txt +++ b/docs/perl.txt @@ -360,15 +360,9 @@ Channel::values() "kicked" - You was just kicked out of the channel (for "channel destroyed" event) -Channel Server::channel_create(channel, type, automatic) - Create new channel with name `channel'. `type' is one of: - (FIXME: export these to perl somehow) - CHANNEL_TYPE_CHANNEL 0 - CHANNEL_TYPE_QUERY 1 - CHANNEL_TYPE_DCC_CHAT 2 - CHANNEL_TYPE_EMPTY 3 - `automatic' means that channel is created "automatically" and - Irssi will NOT change the active window to it. +Channel Server::channel_create(type, automatic) + Create new channel with name `channel'. `automatic' means that channel is + created "automatically", Irssi won't change the active window to it. Channel::destroy() Destroy channel. @@ -456,21 +450,48 @@ Channel::nicklist_getnicks(channel) *** DCC -Dcc:destroy() +Dcc::values() + Get some information about nick. This function returns a reference to + hash table. Hash table has keys: + "type" - Type of the DCC: chat, send, get + "created" - Unix time stamp when the DCC record was created + + "server" - Server where the DCC was initiated. + "chat" - DCC chat record if the request came through DCC chat + "ircnet" - IRC network where the DCC was initiated. + "mynick" - Our nick to use in DCC chat. + + "nick" - Other side's nick name. + "addr" - Other side's IP address. + "port" - Port we're connecting in. + + "arg" - Given argument .. file name usually + "file" - The real file name which we use. + + "size" - File size + "transfd" - Bytes transferred + "skipped" - Bytes skipped from start (resuming file) + "starttime" - Unix time stamp when the DCC transfer was started + +Dcc::destroy() Destroy DCC connection. (!!) -dcc_type2str(type) - DCC type number to string - -dcc_str2type(type) - DCC type string to number - Dcc dcc_find_item(type, nick, arg) Find DCC connection. Dcc dcc_find_by_port(nick, port) Find DCC connection by port. +dcc_ctcp_message(target, server, chat, notice, msg) + Send a CTCP message/notify to target. Send the CTCP via DCC chat if + `chat' is specified. + +Dcc::dcc_chat_send(data) + Send `data' to dcc chat. + +Dcc item_get_dcc(item) + If window item `item' is a query of a =nick, return DCC chat record + of nick. *** Reconnects diff --git a/src/irc/dcc/dcc.h b/src/irc/dcc/dcc.h index 7fe5e9ee..eee5a069 100644 --- a/src/irc/dcc/dcc.h +++ b/src/irc/dcc/dcc.h @@ -81,6 +81,8 @@ void dcc_make_address(IPADDR *ip, char *host); DCC_REC *dcc_create(int type, int handle, const char *nick, const char *arg, IRC_SERVER_REC *server, DCC_REC *chat); void dcc_destroy(DCC_REC *dcc); +/* Send a CTCP message/notify to target. Send the CTCP via DCC chat if + `chat' is specified. */ void dcc_ctcp_message(const char *target, IRC_SERVER_REC *server, DCC_REC *chat, int notice, const char *msg); /* Send `data' to dcc chat. */ diff --git a/src/perl/xs/Irssi-dcc.xs b/src/perl/xs/Irssi-dcc.xs index 900c475e..971cc465 100644 --- a/src/perl/xs/Irssi-dcc.xs +++ b/src/perl/xs/Irssi-dcc.xs @@ -22,15 +22,17 @@ dcc_find_by_port(nick, port) char *nick int port -char * -dcc_type2str(type) - int type -CODE: - RETVAL = (char *) dcc_type2str(type); +void +dcc_ctcp_message(target, server, chat, notice, msg) + char *target + Irssi::Server server + Irssi::Dcc chat + int notice + char *msg -int -dcc_str2type(type) - char *type +Irssi::Dcc +item_get_dcc(item) + void *item #******************************* MODULE = Irssi PACKAGE = Irssi::Dcc PREFIX = dcc_ @@ -39,3 +41,41 @@ MODULE = Irssi PACKAGE = Irssi::Dcc PREFIX = dcc_ void dcc_destroy(dcc) Irssi::Dcc dcc + +void +dcc_chat_send(dcc, data) + Irssi::Dcc dcc + char *data + +void +values(dcc) + Irssi::Dcc dcc +PREINIT: + HV *hv, *stash; +PPCODE: + hv = newHV(); + hv_store(hv, "type", 4, new_pv((char *) dcc_type2str(dcc->type)), 0); + hv_store(hv, "created", 7, newSViv(dcc->created), 0); + + stash = gv_stashpv("Irssi::Server", 0); + hv_store(hv, "server", 6, sv_bless(newRV_noinc(newSViv(GPOINTER_TO_INT(dcc->server))), stash), 0); + hv_store(hv, "nick", 4, new_pv(dcc->nick), 0); + + stash = gv_stashpv("Irssi::Dcc", 0); + hv_store(hv, "chat", 4, sv_bless(newRV_noinc(newSViv(GPOINTER_TO_INT(dcc->chat))), stash), 0); + + hv_store(hv, "ircnet", 6, new_pv(dcc->ircnet), 0); + hv_store(hv, "mynick", 6, new_pv(dcc->mynick), 0); + + hv_store(hv, "arg", 3, new_pv(dcc->arg), 0); + hv_store(hv, "file", 4, new_pv(dcc->file), 0); + + hv_store(hv, "addr", 4, new_pv(dcc->addrstr), 0); + hv_store(hv, "port", 4, newSViv(dcc->port), 0); + + hv_store(hv, "size", 4, newSViv(dcc->size), 0); + hv_store(hv, "transfd", 7, newSViv(dcc->transfd), 0); + hv_store(hv, "skipped", 7, newSViv(dcc->skipped), 0); + hv_store(hv, "starttime", 9, newSViv(dcc->starttime), 0); + XPUSHs(sv_2mortal(newRV_noinc((SV*)hv))); +