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 }