00001 #include <eggdrop/eggdrop.h>
00002
00003 #include "proxy.h"
00004
00005 EXPORT_SCOPE int proxy_LTX_start(egg_module_t *modinfo);
00006 static int proxy_close(int why);
00007
00008 proxy_config_t proxy_config = {0};
00009 static config_var_t proxy_config_vars[] = {
00010 {"username", &proxy_config.username, CONFIG_STRING},
00011 {"password", &proxy_config.password, CONFIG_STRING},
00012 {"host", &proxy_config.host, CONFIG_STRING},
00013 {"port", &proxy_config.port, CONFIG_INT},
00014 {"type", &proxy_config.type, CONFIG_STRING},
00015 {0}
00016 };
00017
00018 static egg_proxy_t http_proxy_handler = {
00019 "http",
00020 NULL,
00021 http_reconnect
00022 };
00023
00024 static egg_proxy_t socks5_proxy_handler = {
00025 "socks5",
00026 NULL,
00027 socks5_reconnect
00028 };
00029
00030 static int on_proxy_set(char *setting, char *val)
00031 {
00032 if (val) putlog(LOG_MISC, "*", "Using proxy '%s'.", val);
00033 else putlog(LOG_MISC, "*", "Disabling proxy.");
00034 egg_proxy_set_default(val);
00035 return(0);
00036 }
00037
00038 static int proxy_init()
00039 {
00040 void *config_root;
00041
00042 memset(&proxy_config, 0, sizeof(proxy_config));
00043 config_root = config_get_root("eggdrop");
00044 config_link_table(proxy_config_vars, config_root, "proxy", 0, NULL);
00045
00046 egg_proxy_add(&http_proxy_handler);
00047 egg_proxy_add(&socks5_proxy_handler);
00048 if (proxy_config.type) egg_proxy_set_default(proxy_config.type);
00049
00050 bind_add_simple("config_str", NULL, "proxy.type", on_proxy_set);
00051
00052 return(0);
00053 }
00054
00055 static int proxy_close(int why)
00056 {
00057 void *config_root;
00058
00059 config_root = config_get_root("eggdrop");
00060 config_unlink_table(proxy_config_vars, config_root, "proxy", 0, NULL);
00061
00062 return(0);
00063 }
00064
00065 int proxy_LTX_start(egg_module_t *modinfo)
00066 {
00067 http_owner.module = socks5_owner.module = modinfo;
00068 modinfo->name = "proxy";
00069 modinfo->author = "eggdev";
00070 modinfo->version = "1.0.0";
00071 modinfo->description = "proxy support (http, socks4, socks5)";
00072 modinfo->close_func = proxy_close;
00073
00074 proxy_init();
00075 return(0);
00076 }