summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTimo Sirainen <cras@irssi.org>2000-06-09 17:29:12 +0000
committercras <cras@dbcabf3a-b0e7-0310-adc4-f8d773084564>2000-06-09 17:29:12 +0000
commit5a94ff859c1a3800a2c842ca9ec8a617823b8c23 (patch)
treebfedfe288c9d99aa8647a9ce3230fd37f5954acf
parent3fd3a03402c41f9e31bff05120e9c668cf3c2dc2 (diff)
downloadirssi-5a94ff859c1a3800a2c842ca9ec8a617823b8c23.zip
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
-rw-r--r--docs/perl.txt51
-rw-r--r--src/irc/dcc/dcc.h2
-rw-r--r--src/perl/xs/Irssi-dcc.xs56
3 files changed, 86 insertions, 23 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,14 +450,31 @@ Channel::nicklist_getnicks(channel)
*** DCC
-Dcc:destroy()
- Destroy DCC connection. (!!)
+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.
-dcc_type2str(type)
- DCC type number to string
+ "arg" - Given argument .. file name usually
+ "file" - The real file name which we use.
-dcc_str2type(type)
- DCC type string to number
+ "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 dcc_find_item(type, nick, arg)
Find DCC connection.
@@ -471,6 +482,16 @@ Dcc dcc_find_item(type, nick, arg)
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)));
+