summaryrefslogtreecommitdiff
path: root/src/plugins/scripts
diff options
context:
space:
mode:
authorSebastien Helleu <flashcode@flashtux.org>2008-11-23 23:04:52 +0100
committerSebastien Helleu <flashcode@flashtux.org>2008-11-23 23:04:52 +0100
commit2e52e54a3afa953e12e1e009b19a66202f0674a6 (patch)
tree08fa64e1c2b89498977ae33004f62c1757288910 /src/plugins/scripts
parent09bed16dbd39791b43f86a1c00279c7fdb5cbb58 (diff)
downloadweechat-2e52e54a3afa953e12e1e009b19a66202f0674a6.zip
Add support for more than one proxy, with proxy selection for each IRC server (task #6859)
Diffstat (limited to 'src/plugins/scripts')
-rw-r--r--src/plugins/scripts/lua/weechat-lua-api.c13
-rw-r--r--src/plugins/scripts/perl/weechat-perl-api.c18
-rw-r--r--src/plugins/scripts/python/weechat-python-api.c10
-rw-r--r--src/plugins/scripts/ruby/weechat-ruby-api.c24
-rw-r--r--src/plugins/scripts/script-api.c9
-rw-r--r--src/plugins/scripts/script-api.h1
-rw-r--r--src/plugins/scripts/tcl/weechat-tcl-api.c18
7 files changed, 54 insertions, 39 deletions
diff --git a/src/plugins/scripts/lua/weechat-lua-api.c b/src/plugins/scripts/lua/weechat-lua-api.c
index 77d1432e6..30b6577d9 100644
--- a/src/plugins/scripts/lua/weechat-lua-api.c
+++ b/src/plugins/scripts/lua/weechat-lua-api.c
@@ -2752,7 +2752,7 @@ weechat_lua_api_hook_connect_cb (void *data, int status, const char *ip_address)
static int
weechat_lua_api_hook_connect (lua_State *L)
{
- const char *address, *local_hostname, *function;
+ const char *proxy, *address, *local_hostname, *function;
int n, port, sock, ipv6;
char *result;
@@ -2764,7 +2764,8 @@ weechat_lua_api_hook_connect (lua_State *L)
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("hook_connect");
LUA_RETURN_EMPTY;
}
-
+
+ proxy = NULL;
address = NULL;
port = 0;
sock = 0;
@@ -2773,13 +2774,14 @@ weechat_lua_api_hook_connect (lua_State *L)
function = NULL;
n = lua_gettop (lua_current_interpreter);
-
- if (n < 6)
+
+ if (n < 7)
{
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("hook_connect");
LUA_RETURN_EMPTY;
}
-
+
+ proxy = lua_tostring (lua_current_interpreter, -7);
address = lua_tostring (lua_current_interpreter, -6);
port = lua_tonumber (lua_current_interpreter, -5);
sock = lua_tonumber (lua_current_interpreter, -4);
@@ -2789,6 +2791,7 @@ weechat_lua_api_hook_connect (lua_State *L)
result = script_ptr2str (script_api_hook_connect (weechat_lua_plugin,
lua_current_script,
+ proxy,
address,
port,
sock,
diff --git a/src/plugins/scripts/perl/weechat-perl-api.c b/src/plugins/scripts/perl/weechat-perl-api.c
index 5e6dfd17e..5507136a1 100644
--- a/src/plugins/scripts/perl/weechat-perl-api.c
+++ b/src/plugins/scripts/perl/weechat-perl-api.c
@@ -2299,7 +2299,7 @@ weechat_perl_api_hook_connect_cb (void *data, int status,
static XS (XS_weechat_api_hook_connect)
{
- char *address, *local_hostname, *result;
+ char *proxy, *address, *local_hostname, *result;
dXSARGS;
/* make C compiler happy */
@@ -2311,25 +2311,27 @@ static XS (XS_weechat_api_hook_connect)
PERL_RETURN_EMPTY;
}
- if (items < 6)
+ if (items < 7)
{
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("hook_connect");
PERL_RETURN_EMPTY;
}
- address = SvPV (ST (0), PL_na);
- local_hostname = SvPV (ST (4), PL_na);
+ proxy = SvPV (ST (0), PL_na);
+ address = SvPV (ST (1), PL_na);
+ local_hostname = SvPV (ST (5), PL_na);
result = script_ptr2str (script_api_hook_connect (weechat_perl_plugin,
perl_current_script,
+ proxy,
address,
- SvIV (ST (1)), /* port */
- SvIV (ST (2)), /* sock */
- SvIV (ST (3)), /* ipv6 */
+ SvIV (ST (2)), /* port */
+ SvIV (ST (3)), /* sock */
+ SvIV (ST (4)), /* ipv6 */
NULL, /* gnutls session */
local_hostname,
&weechat_perl_api_hook_connect_cb,
- SvPV (ST (5), PL_na))); /* perl function */
+ SvPV (ST (6), PL_na))); /* perl function */
PERL_RETURN_STRING_FREE(result);
}
diff --git a/src/plugins/scripts/python/weechat-python-api.c b/src/plugins/scripts/python/weechat-python-api.c
index 872c3cbbd..ab629def6 100644
--- a/src/plugins/scripts/python/weechat-python-api.c
+++ b/src/plugins/scripts/python/weechat-python-api.c
@@ -2453,7 +2453,7 @@ weechat_python_api_hook_connect_cb (void *data, int status,
static PyObject *
weechat_python_api_hook_connect (PyObject *self, PyObject *args)
{
- char *address, *local_hostname, *function, *result;
+ char *proxy, *address, *local_hostname, *function, *result;
int port, sock, ipv6;
PyObject *object;
@@ -2465,7 +2465,8 @@ weechat_python_api_hook_connect (PyObject *self, PyObject *args)
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("hook_connect");
PYTHON_RETURN_EMPTY;
}
-
+
+ proxy = NULL;
address = NULL;
port = 0;
sock = 0;
@@ -2473,8 +2474,8 @@ weechat_python_api_hook_connect (PyObject *self, PyObject *args)
local_hostname = NULL;
function = NULL;
- if (!PyArg_ParseTuple (args, "siiiss", &address, &port, &sock, &ipv6,
- &local_hostname, &function))
+ if (!PyArg_ParseTuple (args, "ssiiiss", &proxy, &address, &port, &sock,
+ &ipv6, &local_hostname, &function))
{
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("hook_connect");
PYTHON_RETURN_EMPTY;
@@ -2482,6 +2483,7 @@ weechat_python_api_hook_connect (PyObject *self, PyObject *args)
result = script_ptr2str (script_api_hook_connect (weechat_python_plugin,
python_current_script,
+ proxy,
address,
port,
sock,
diff --git a/src/plugins/scripts/ruby/weechat-ruby-api.c b/src/plugins/scripts/ruby/weechat-ruby-api.c
index f2433becb..2e1209e71 100644
--- a/src/plugins/scripts/ruby/weechat-ruby-api.c
+++ b/src/plugins/scripts/ruby/weechat-ruby-api.c
@@ -2816,11 +2816,11 @@ weechat_ruby_api_hook_connect_cb (void *data, int status,
*/
static VALUE
-weechat_ruby_api_hook_connect (VALUE class, VALUE address, VALUE port,
- VALUE sock, VALUE ipv6, VALUE local_hostname,
- VALUE function)
+weechat_ruby_api_hook_connect (VALUE class, VALUE proxy, VALUE address,
+ VALUE port, VALUE sock, VALUE ipv6,
+ VALUE local_hostname, VALUE function)
{
- char *c_address, *c_local_hostname, *c_function, *result;
+ char *c_proxy, *c_address, *c_local_hostname, *c_function, *result;
int c_port, c_sock, c_ipv6;
VALUE return_value;
@@ -2832,7 +2832,8 @@ weechat_ruby_api_hook_connect (VALUE class, VALUE address, VALUE port,
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("hook_connect");
RUBY_RETURN_EMPTY;
}
-
+
+ c_proxy = NULL;
c_address = NULL;
c_port = 0;
c_sock = 0;
@@ -2840,20 +2841,22 @@ weechat_ruby_api_hook_connect (VALUE class, VALUE address, VALUE port,
c_local_hostname = NULL;
c_function = NULL;
- if (NIL_P (address) || NIL_P (port) || NIL_P (sock) || NIL_P (ipv6)
- || NIL_P (local_hostname) || NIL_P (function))
+ if (NIL_P (proxy) || NIL_P (address) || NIL_P (port) || NIL_P (sock)
+ || NIL_P (ipv6) || NIL_P (local_hostname) || NIL_P (function))
{
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("hook_connect");
RUBY_RETURN_EMPTY;
}
-
+
+ Check_Type (proxy, T_STRING);
Check_Type (address, T_STRING);
Check_Type (port, T_FIXNUM);
Check_Type (sock, T_FIXNUM);
Check_Type (ipv6, T_FIXNUM);
Check_Type (local_hostname, T_STRING);
Check_Type (function, T_STRING);
-
+
+ c_proxy = STR2CSTR (proxy);
c_address = STR2CSTR (address);
c_port = FIX2INT (port);
c_sock = FIX2INT (sock);
@@ -2863,6 +2866,7 @@ weechat_ruby_api_hook_connect (VALUE class, VALUE address, VALUE port,
result = script_ptr2str (script_api_hook_connect (weechat_ruby_plugin,
ruby_current_script,
+ c_proxy,
c_address,
c_port,
c_sock,
@@ -5633,7 +5637,7 @@ weechat_ruby_api_init (VALUE ruby_mWeechat)
rb_define_module_function (ruby_mWeechat, "hook_command", &weechat_ruby_api_hook_command, 6);
rb_define_module_function (ruby_mWeechat, "hook_timer", &weechat_ruby_api_hook_timer, 4);
rb_define_module_function (ruby_mWeechat, "hook_fd", &weechat_ruby_api_hook_fd, 5);
- rb_define_module_function (ruby_mWeechat, "hook_connect", &weechat_ruby_api_hook_connect, 6);
+ rb_define_module_function (ruby_mWeechat, "hook_connect", &weechat_ruby_api_hook_connect, 7);
rb_define_module_function (ruby_mWeechat, "hook_print", &weechat_ruby_api_hook_print, 5);
rb_define_module_function (ruby_mWeechat, "hook_signal", &weechat_ruby_api_hook_signal, 2);
rb_define_module_function (ruby_mWeechat, "hook_signal_send", &weechat_ruby_api_hook_signal_send, 3);
diff --git a/src/plugins/scripts/script-api.c b/src/plugins/scripts/script-api.c
index c1b17bb60..40434ed62 100644
--- a/src/plugins/scripts/script-api.c
+++ b/src/plugins/scripts/script-api.c
@@ -744,8 +744,9 @@ script_api_hook_fd (struct t_weechat_plugin *weechat_plugin,
struct t_hook *
script_api_hook_connect (struct t_weechat_plugin *weechat_plugin,
struct t_plugin_script *script,
- const char *address, int port, int sock, int ipv6,
- void *gnutls_sess, const char *local_hostname,
+ const char *proxy, const char *address, int port,
+ int sock, int ipv6, void *gnutls_sess,
+ const char *local_hostname,
int (*callback)(void *data, int status, const char *ip_address),
const char *function)
{
@@ -756,8 +757,8 @@ script_api_hook_connect (struct t_weechat_plugin *weechat_plugin,
if (!new_script_callback)
return NULL;
- new_hook = weechat_hook_connect (address, port, sock, ipv6, gnutls_sess,
- local_hostname, callback,
+ new_hook = weechat_hook_connect (proxy, address, port, sock, ipv6,
+ gnutls_sess, local_hostname, callback,
new_script_callback);
if (!new_hook)
{
diff --git a/src/plugins/scripts/script-api.h b/src/plugins/scripts/script-api.h
index 2b7da7c2a..a3dafe8af 100644
--- a/src/plugins/scripts/script-api.h
+++ b/src/plugins/scripts/script-api.h
@@ -121,6 +121,7 @@ extern struct t_hook *script_api_hook_fd (struct t_weechat_plugin *weechat_plugi
const char *function);
extern struct t_hook *script_api_hook_connect (struct t_weechat_plugin *weechat_plugin,
struct t_plugin_script *script,
+ const char *proxy,
const char *address,
int port,
int sock,
diff --git a/src/plugins/scripts/tcl/weechat-tcl-api.c b/src/plugins/scripts/tcl/weechat-tcl-api.c
index 5d5818b02..382d0b5f5 100644
--- a/src/plugins/scripts/tcl/weechat-tcl-api.c
+++ b/src/plugins/scripts/tcl/weechat-tcl-api.c
@@ -2663,7 +2663,7 @@ weechat_tcl_api_hook_connect (ClientData clientData, Tcl_Interp *interp,
int objc, Tcl_Obj *CONST objv[])
{
Tcl_Obj *objp;
- char *address, *local_hostname, *result;
+ char *proxy, *address, *local_hostname, *result;
int i, port, sock, ipv6;
/* make C compiler happy */
@@ -2675,25 +2675,27 @@ weechat_tcl_api_hook_connect (ClientData clientData, Tcl_Interp *interp,
TCL_RETURN_EMPTY;
}
- if (objc < 6)
+ if (objc < 7)
{
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("hook_connect");
TCL_RETURN_EMPTY;
}
- if ((Tcl_GetIntFromObj (interp, objv[2], &port) != TCL_OK)
- || (Tcl_GetIntFromObj (interp, objv[3], &sock) != TCL_OK)
- || (Tcl_GetIntFromObj (interp, objv[4], &ipv6) != TCL_OK))
+ if ((Tcl_GetIntFromObj (interp, objv[3], &port) != TCL_OK)
+ || (Tcl_GetIntFromObj (interp, objv[4], &sock) != TCL_OK)
+ || (Tcl_GetIntFromObj (interp, objv[5], &ipv6) != TCL_OK))
{
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("hook_connect");
TCL_RETURN_EMPTY;
}
- address = Tcl_GetStringFromObj (objv[1], &i);
- local_hostname = Tcl_GetStringFromObj (objv[5], &i);
+ proxy = Tcl_GetStringFromObj (objv[1], &i);
+ address = Tcl_GetStringFromObj (objv[2], &i);
+ local_hostname = Tcl_GetStringFromObj (objv[6], &i);
result = script_ptr2str (script_api_hook_connect (weechat_tcl_plugin,
tcl_current_script,
+ proxy,
address,
port,
sock,
@@ -2701,7 +2703,7 @@ weechat_tcl_api_hook_connect (ClientData clientData, Tcl_Interp *interp,
NULL, /* gnutls session */
local_hostname,
&weechat_tcl_api_hook_connect_cb,
- Tcl_GetStringFromObj (objv[6], &i))); /* tcl function */
+ Tcl_GetStringFromObj (objv[7], &i))); /* tcl function */
TCL_RETURN_STRING_FREE(result);
}