summaryrefslogtreecommitdiffstats
path: root/src/perl/irc/Server.xs
diff options
context:
space:
mode:
Diffstat (limited to 'src/perl/irc/Server.xs')
-rw-r--r--src/perl/irc/Server.xs175
1 files changed, 175 insertions, 0 deletions
diff --git a/src/perl/irc/Server.xs b/src/perl/irc/Server.xs
new file mode 100644
index 0000000..63e3111
--- /dev/null
+++ b/src/perl/irc/Server.xs
@@ -0,0 +1,175 @@
+#define PERL_NO_GET_CONTEXT
+#include "module.h"
+#include <irssi/src/core/misc.h>
+
+static GSList *register_hash2list(HV *hv)
+{
+ HE *he;
+ GSList *list;
+
+ if (hv == NULL)
+ return NULL;
+
+ list = NULL;
+ hv_iterinit(hv);
+ while ((he = hv_iternext(hv)) != NULL) {
+ I32 len;
+ char *key = hv_iterkey(he, &len);
+ int value = (int)SvIV(HeVAL(he));
+
+ list = g_slist_append(list, g_strdup(key));
+ list = g_slist_append(list, GINT_TO_POINTER(value));
+ }
+ return list;
+}
+
+static GSList *event_hash2list(HV *hv)
+{
+ HE *he;
+ GSList *list;
+
+ if (hv == NULL)
+ return NULL;
+
+ list = NULL;
+ hv_iterinit(hv);
+ while ((he = hv_iternext(hv)) != NULL) {
+ I32 len;
+ char *key = hv_iterkey(he, &len);
+ char *value = SvPV_nolen(HeVAL(he));
+
+ list = g_slist_append(list, g_strdup(key));
+ list = g_slist_append(list, g_strdup(value));
+ }
+ return list;
+}
+
+MODULE = Irssi::Irc::Server PACKAGE = Irssi::Irc::Server PREFIX = irc_server_
+PROTOTYPES: ENABLE
+
+void
+irc_server_get_channels(server, rejoin_channels_mode = "")
+ Irssi::Irc::Server server
+ char *rejoin_channels_mode
+PREINIT:
+ char *ret;
+ int mode;
+ SETTINGS_REC *setting;
+PPCODE:
+ setting = settings_get_record("rejoin_channels_on_reconnect");
+ mode = strarray_find(setting->choices, rejoin_channels_mode);
+ if (mode < 0)
+ mode = setting->default_value.v_int;
+
+ ret = irc_server_get_channels(server, mode);
+ XPUSHs(sv_2mortal(new_pv(ret)));
+ g_free(ret);
+
+void
+send_raw(server, cmd)
+ Irssi::Irc::Server server
+ char *cmd
+CODE:
+ irc_send_cmd(server, cmd);
+
+void
+send_raw_now(server, cmd)
+ Irssi::Irc::Server server
+ char *cmd
+CODE:
+ irc_send_cmd_now(server, cmd);
+
+void
+send_raw_first(server, cmd)
+ Irssi::Irc::Server server
+ char *cmd
+CODE:
+ irc_send_cmd_first(server, cmd);
+
+void
+send_raw_later(server, cmd)
+ Irssi::Irc::Server server
+ char *cmd
+CODE:
+ irc_send_cmd_later(server, cmd);
+
+void
+send_raw_split(server, cmd, nickarg, max_nicks)
+ Irssi::Irc::Server server
+ char *cmd
+ int nickarg
+ int max_nicks
+CODE:
+ irc_send_cmd_split(server, cmd, nickarg, max_nicks);
+
+MODULE = Irssi::Irc::Server PACKAGE = Irssi::Irc::Server PREFIX = server_
+
+void
+server_redirect_register(command, remote, timeout, start, stop, opt)
+ char *command
+ int remote
+ int timeout
+ SV *start
+ SV *stop
+ SV *opt
+CODE:
+ server_redirect_register_list(command, remote, timeout, register_hash2list(hvref(start)),
+ register_hash2list(hvref(stop)),
+ register_hash2list(hvref(opt)), 1);
+
+void
+server_redirect_event(server, command, count, arg, remote, failure_signal, signals)
+ Irssi::Irc::Server server
+ char *command
+ int count
+ char *arg
+ int remote
+ char *failure_signal
+ SV *signals
+CODE:
+ server_redirect_event_list(server, command, count, *arg == '\0' ? NULL : arg, remote,
+ *failure_signal == '\0' ? NULL : failure_signal,
+ event_hash2list(hvref(signals)));
+
+char *
+server_redirect_get_signal(server, prefix, event, args)
+ Irssi::Irc::Server server
+ char *prefix
+ char *event
+ char *args
+CODE:
+ RETVAL = (char *) server_redirect_get_signal(server, prefix, event, args);
+OUTPUT:
+ RETVAL
+
+char *
+server_redirect_peek_signal(server, prefix, event, args)
+ Irssi::Irc::Server server
+ char *prefix
+ char *event
+ char *args
+PREINIT:
+ int redirection;
+CODE:
+ RETVAL = (char *) server_redirect_peek_signal(server, prefix, event, args, &redirection);
+OUTPUT:
+ RETVAL
+
+char *
+server_isupport(server, name)
+ Irssi::Irc::Server server
+ char *name
+CODE:
+ RETVAL = (char *) g_hash_table_lookup(server->isupport, name);
+OUTPUT:
+ RETVAL
+
+int
+irc_server_cap_toggle(server, cap, enable)
+ Irssi::Irc::Server server
+ char *cap
+ int enable
+CODE:
+ RETVAL = irc_cap_toggle(server, cap, enable);
+OUTPUT:
+ RETVAL