Definition in file dcc.cpp.
#include <vector>
#include <string>
#include <time.h>
#include <stdio.h>
#include <list>
#include <stdlib.h>
#include <sys/stat.h>
#include "sock.h"
#include "log.h"
#include "irc.h"
#include "lang.h"
#include "md5.h"
#include "conf.h"
#include "botnet.h"
#include "shared.h"
#include "filesys.h"
#include "stats.h"
#include "ssl.h"
#include "exec.h"
#include "match.h"
#include "dcc.h"
#include "params.h"
Include dependency graph for dcc.cpp:
Go to the source code of this file.
Classes | |
struct | s_dcc_client |
Stores DCC state of user. More... | |
struct | s_dcc_client::s_dcc_client_send |
Stores data about temporary file being uploaded via DCC SEND. More... | |
struct | s_dcc_client::s_fs |
Stores data about file from the filesystem. More... | |
struct | s_dcc_client_to_resume |
Stores temporary resume information for DCC. More... | |
struct | s_dcc_send_file |
Stores informations about DCC SEND-ing file. More... | |
struct | s_dcc_server |
Stores DCC server's parameters. More... | |
struct | s_session |
Stores temporary data for counting amount of sessions. More... | |
struct | s_telnet_server |
Stores telnet server's parameters. More... | |
struct | s_user_to_lag |
Stores information about usage of DCC requests for users. Used for flood protection. More... | |
Defines | |
#define | FILE_SLASH "/" |
#define | NEW_INSTANCE_TIMEOUT_AFTER_LAST_JOIN 3*60 |
Number of seconds as timeout after .upgrade command, and after last new instance's join to kill myself. | |
Functions | |
void | dcc_apply (string who) |
Called after .apply. Applies new configuration to all connected users on DCC/telnet (also BOTNET) connections. | |
void | dcc_broadcast (string msg) |
Broatcasts the message to all connected users on DCC/telnet connection (used for kill message). | |
bool | dcc_can_unassign (vector< s_dcc_client >::iterator i, string &eol, string proc_name) |
Check wheter user can unassign procedure for event (has access_usage_procedure right). | |
void | dcc_check_for_filesystem (string user_name) |
Check filesystem for new files for user. | |
void | dcc_check_limit () |
Check for maximum connection limit rule, and drop some. | |
void | dcc_close_all () |
Closes all DCC/telnet connections. | |
void | dcc_close_servers () |
Closes listening sockets. | |
void | dcc_file_has_been_read (string public_name, string nick) |
Called to set the READ-"ed" flag and notify OWNER(s) if needed. | |
void | dcc_flush_all () |
Flushes all pending DCC/telnet connection caches. | |
string | dcc_get_line (string &buff) |
Extracts one line from buffer. | |
int | dcc_get_num_of_transfers () |
Retrieves number of concurrent DCC trtansfers. | |
string | dcc_get_password (string user) |
Gets MD5-encoded password for user. | |
string | dcc_get_string (string msg, int &dcc_group) |
Constructs response to "dcc" or "dcc <group_number>" PRIVMSG. | |
void | dcc_loop () |
Check for pending connections and handles existing ones. | |
void | dcc_loop_edit_chan (vector< s_dcc_client >::iterator i, string &eol) |
Should be called in a loop to process edit channel definitions commands in DCC CHAT/telnet connections. | |
void | dcc_loop_edit_dynbans (vector< s_dcc_client >::iterator i, string &eol) |
Should be called in a loop to process edit channel's dynamic bans in DCC CHAT/telnet connections. | |
void | dcc_loop_edit_proc (vector< s_dcc_client >::iterator i, string &eol) |
Should be called in a loop to process new / edit procedure commands in DCC CHAT/telnet connections. | |
void | dcc_loop_edit_rproc (vector< s_dcc_client >::iterator i, string &eol) |
Should be called in a loop to process edit remote procedure call ability (.rproc) command in DCC CHAT/telnet connections. | |
void | dcc_loop_edit_user1 (vector< s_dcc_client >::iterator i, string &eol) |
Should be called in a loop to process edit user / new user commands in DCC CHAT/telnet connections. | |
void | dcc_loop_edit_user2 (vector< s_dcc_client >::iterator i, string &eol) |
Should be called in a loop to process edit user / new user commands in DCC CHAT/telnet connections. | |
void | dcc_loop_filesystem (vector< s_dcc_client >::iterator i, string &eol) |
Should be called in a loop to process filesystem commands in DCC CHAT/telnet connections. | |
string | dcc_loop_filesystem_disp_rights (string lang, s_access &access, string eol) |
Returns access rights to file. | |
void | dcc_loop_get_rights (vector< s_dcc_client >::iterator i) |
Gets/resets user's access rights. | |
void | dcc_loop_language (vector< s_dcc_client >::iterator i, string &eol) |
Should be called in a loop to process .lang commands in DCC CHAT/telnet connections. | |
void | dcc_loop_msg (vector< s_dcc_client >::iterator i, string &eol) |
Should be called in a loop to process message/filesystem commands in DCC CHAT/telnet connections. | |
void | dcc_loop_new_user (vector< s_dcc_client >::iterator i, string &eol) |
Should be called in a loop to process new user commands in DCC CHAT/telnet connections. | |
void | dcc_loop_private (vector< s_dcc_client >::iterator i, string &eol) |
Should be called in a loop to .private command. | |
void | dcc_loop_replication (vector< s_dcc_client >::iterator i, string &eol) |
Should be called in a loop to process .replication commands in DCC CHAT/telnet connections. | |
void | dcc_loop_terminator (vector< s_dcc_client >::iterator i, string &eol) |
Should be called in a loop to process .terminator commands in DCC CHAT/telnet connections. | |
void | dcc_make_server (int ipv, int group, const char *bind_ip, unsigned short bind_port, string server_type) |
Binds DCC server. | |
void | dcc_make_telnet_server (int ipv, const char *bind_ip, unsigned short bind_port) |
Binds telnet server. | |
void | dcc_notify (string user, int reason, string incomplete_file) |
Notifies user about filesystem events. | |
void | dcc_partyline_message (string channel, string message) |
Message for partyline channel distribution. | |
string | dcc_put_multiple_lines (string msg, string eol) |
Parses message, replaces new line signs. | |
void | dcc_rehashed (string who) |
Called from logic.cpp after rehashing. Applies new configuration to all connected users on DCC/telnet (also BOTNET) connections. | |
int | dcc_send_file (bool from_dcc, string public_name, string nick, int dcc_group) |
Sends file to remote host. | |
void | dcc_send_msg (s_socket &socket, string msg, int &ec) |
Sends a message to DCC CHAT / telnet connection and updates statistics. | |
void | dcc_set_password (string user, string md5pass) |
Sets password for user. | |
void | dcc_upgrade (vector< s_dcc_client >::iterator i, string &eol, string new_file_name) |
Tries to upgrade bot. | |
void | dcc_upgrade_bot_join (string nick, string ident, string host, string fullname, string channel) |
Called in UPGRADE state, to inform user who initiated .upgrade command that another instance is on channel. | |
void | dcc_upgrade_bot_mode (string nick, string ident, string host, string fullname, string channel, string mode) |
Called in UPGRADE state, to inform user who initiated .upgrade command that another instance on some channel gets some mode. | |
void | dcc_upgrade_bot_nick (string nick, string ident, string host, string fullname, string new_nick) |
Called in UPGRADE state, to inform user who initiated .upgrade command that another instance changed its nick. | |
void | dcc_user_pong (string time_, string user, string origin_bot) |
Message for partyline user's pong. | |
void | irc_quoted_callback (const char *str, const char *nick, const char *host_mask) |
Called when 0x01-quoted PRIVMSG has been received to initialise DCC CHAT or DCC SEND connection. | |
void | logic_partyline_access (string user, vector< string > &access_to_users, vector< string > &access_to_groups, vector< string > &access_grant_groups, vector< string > &access_to_proc_groups, vector< string > &access_grant_proc_groups, vector< string > &access_grant_proc, vector< string > &access_to_channel, vector< string > &access_grant_channel, bool &access_grant_partyline, vector< string > &access_to_procs, bool &access_to_backup, bool &access_grant_backup, bool &access_to_rehash, bool &access_grant_rehash, bool &access_to_plususer, bool &access_grant_plususer, bool &access_to_plusproc, bool &access_grant_plusproc, s_flood &partyline_msg_flood, bool &access_to_replication, bool &access_grant_replication, vector< string > &access_to_chan_defs, bool &access_to_restart, bool &access_grant_restart, bool &access_to_die, bool &access_grant_die, bool &access_to_filesystem, bool &access_grant_filesystem, bool &access_to_private, bool &access_grant_private, bool &access_to_can_send_all_users, bool &access_grant_can_send_all_users, bool &access_to_can_send_unknown_users, bool &access_grant_can_send_unknown_users, vector< string > &access_usage_proc, vector< string > &access_usage_proc_groups, bool &access_to_upgrade, bool &access_grant_upgrade, bool &access_to_apply, bool &access_grant_apply) |
Retrieves access rights of user on partyline. | |
bool | logic_partyline_add_channel_def (s_channel_def &chd) |
Adds a channel definition. | |
void | logic_partyline_add_user (s_user &user, vector< s_channel > &channels) |
Adds an user with channels definition. | |
bool | logic_partyline_get_channel_def (string channel_name, s_channel_def &chd) |
Gets channel definition. | |
void | logic_partyline_get_user (string user_name, s_user &user, vector< s_channel > &channels) |
Retrieves an user with channels. | |
void | logic_partyline_get_user_template (string user_name, s_user &user, vector< s_channel > &channels) |
Retrieves an user template with channels. | |
void | logic_partyline_remove_channel_def (string channel_name) |
Deletes channel definition. | |
char * | ltoa (long value, char *buffer, int radix) |
ltoa() emulation for compiler which doesn't have it | |
void | sleep (int ms) |
Sleeps. | |
Variables | |
vector< s_dcc_send_file > | dcc_awaiting_send |
List of files that are awaiting to send (DCC SEND) to remote host. | |
vector< s_dcc_awaiting_user > | dcc_awaiting_users |
Stores users who are waiting for DCC connection. | |
vector< s_dcc_client > | dcc_clients |
List of DCC clients. | |
string | dcc_killing_user_eol |
EOL string for user (DCC/telnet) who is killing the bot (.die/.restart). | |
string | dcc_killing_user_lang |
Language code string for user (DCC/telnet) who is killing the bot (.die/.restart). | |
s_socket * | dcc_killing_user_socket = NULL |
Socket of DCC/telnet user who is killing the bot (.die/.restart), or NULL; (will be sent log to it). | |
vector< s_dcc_request_whois > | dcc_request_whois |
Array, that stores DCC requests that are pending to establis, and waiting for whois result. | |
vector< s_dcc_server > | dcc_servers |
List of DCC servers. | |
vector< s_dcc_client_to_resume > | dcc_to_resume |
Temporary array for user who wants to resume. | |
vector< s_user_to_lock_out > | dcc_users_to_lock_out |
Users to lock out due to bad log in. | |
bool | dcc_want_to_die = false |
Set to true if .die command wants to kill the bot. | |
bool | dcc_want_to_restart = false |
Set to true if .restart command wants to restart the bot. | |
bool | dcc_want_to_upgrade = false |
Set to true if .upgrade command wants to upgrade the bot. | |
string | dcc_who_is_killing |
Name of user (from "logic.txt") who invoked .restart/.die command. | |
vector< s_online_channel > | irc_channels |
List of channels we are on. | |
char | irc_nick [512] |
Bot's current nick. | |
time_t | last_new_instance_join |
After .upgrade command, there is timestamp of last new instance's join some channel. | |
vector< s_group > | r_all_groups |
List of all groups for real usage (not temporary / compilation!). | |
vector< s_channel_def > | r_channel_defs |
List of real channel definitions (not temporary / compilation!). | |
vector< s_channel > | r_channel_templates |
List of channel templates for real usage (not temporary / compilation!). | |
vector< s_channel > | r_channels |
List of channels for real usage (not temporary / compilation!). | |
s_private | r_private |
Informations about procedures when someone sends query message (not temporary / compilation!). | |
vector< s_procedure > | r_procedures |
List of procedures for real usage (not temporary / compilation!). | |
vector< s_user > | r_user_templates |
List of users templates for real usage (not temporary / compilation!). | |
vector< s_user > | r_users |
List of users for real usage (not temporary / compilation!). | |
s_ssl_conf | ssl_conf |
Configuration of SSL. | |
vector< s_telnet_server > | telnet_servers |
List of telnet servers. | |
vector< s_user_to_lag > | users_to_lag |
Array of DCC requests statistics (for flood protection). |
|
|
Number of seconds as timeout after .upgrade command, and after last new instance's join to kill myself.
Definition at line 94 of file dcc.cpp. Referenced by dcc_loop(). |
|
Called after .apply. Applies new configuration to all connected users on DCC/telnet (also BOTNET) connections.
Definition at line 16307 of file dcc.cpp. References dcc_clients, dcc_loop_get_rights(), dcc_send_msg(), lang_get_string(), and lang_subst(). Referenced by dcc_loop(). 16308 { 16309 vector<s_dcc_client>::iterator i; 16310 char dcc_eol[4]="\n\0"; 16311 char telnet_eol[4]="\r\n\0"; 16312 for(i=dcc_clients.begin(); i!=dcc_clients.end(); i++) { 16313 if((*i).got_passwd!=3) 16314 continue; 16315 dcc_loop_get_rights(i); 16316 if((*i).send) 16317 continue; 16318 if((*i).send_from_filesystem) 16319 continue; 16320 if((*i).replication_partner) 16321 continue; 16322 if((*i).ssl_connection) 16323 continue; 16324 if(!(*i).chat) 16325 continue; 16326 string eol=(*i).telnet?telnet_eol:dcc_eol; 16327 string disp=lang_subst(lang_get_string(1,(*i).lang,687),who)+eol; 16328 int ec=0; 16329 dcc_send_msg((*i).socket,disp,ec); 16330 } 16331 }
Here is the call graph for this function: ![]() |
|
Broatcasts the message to all connected users on DCC/telnet connection (used for kill message).
Definition at line 19203 of file dcc.cpp. References dcc_clients, dcc_send_msg(), sock_flush_later(), and sock_send_cache(). Referenced by botnet_partyline_event(), dcc_upgrade(), logic_exec(), and main(). 19204 { 19205 vector<s_dcc_client>::iterator i; 19206 char dcc_eol[4]="\n\0"; 19207 char telnet_eol[4]="\r\n\0"; 19208 for(i=dcc_clients.begin(); i!=dcc_clients.end(); i++) { 19209 if((*i).got_passwd!=3) 19210 continue; 19211 if((*i).send) 19212 continue; 19213 if((*i).send_from_filesystem) 19214 continue; 19215 if((*i).replication_partner) 19216 continue; 19217 if((*i).ssl_connection) 19218 continue; 19219 if(!(*i).chat) 19220 continue; 19221 string eol=(*i).telnet?telnet_eol:dcc_eol; 19222 string disp=msg+eol; 19223 int ec=0; 19224 dcc_send_msg((*i).socket,disp,ec); 19225 sock_send_cache(); 19226 sock_flush_later((*i).socket); 19227 } 19228 }
Here is the call graph for this function: ![]() |
|
Check wheter user can unassign procedure for event (has access_usage_procedure right).
Definition at line 2738 of file dcc.cpp. Referenced by dcc_loop(), dcc_loop_edit_chan(), dcc_loop_edit_user1(), dcc_loop_edit_user2(), dcc_loop_new_user(), and dcc_loop_private(). 02739 { 02740 if(proc_name.empty()) 02741 return true; 02742 02743 if(proc_name.find("(",0)!=string::npos) 02744 proc_name.erase(proc_name.find("(",0),proc_name.length()-proc_name.find("(",0)); 02745 02746 vector<string>::iterator i1; 02747 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++) { 02748 if(!(*i1).compare("*")) 02749 return true; 02750 02751 string name_only=*i1; 02752 if(name_only.find("(",0)!=string::npos) 02753 name_only.erase(name_only.find("(",0),name_only.length()-name_only.find("(",0)); 02754 02755 if(!name_only.compare(proc_name)) 02756 return true; 02757 } 02758 02759 return false; 02760 }
|
|
Check filesystem for new files for user.
Definition at line 19104 of file dcc.cpp. References dcc_clients, dcc_put_multiple_lines(), dcc_send_msg(), filesys_dcc_check_for_notifies(), filesys_dcc_drop_notifies(), and lang_get_string(). Referenced by dcc_loop(), and dcc_notify(). 19105 { 19106 char dcc_eol[4]="\n\0"; 19107 char telnet_eol[4]="\r\n\0"; 19108 19109 bool got=false; 19110 19111 vector<s_dcc_client>::iterator i; 19112 for(i=dcc_clients.begin(); i!=dcc_clients.end(); i++) { 19113 if((*i).got_passwd!=3) 19114 continue; 19115 if(!(*i).chat) 19116 continue; 19117 if((*i).as_in_logic.compare(user_name)) 19118 continue; 19119 string eol=(*i).telnet?telnet_eol:dcc_eol; 19120 19121 got=true; 19122 19123 string disp; 19124 { 19125 vector<s_dcc_notify> notifies; 19126 filesys_dcc_check_for_notifies((*i).as_in_logic,(*i).u,(*i).chs,"",notifies,true,(*i).lang,eol); 19127 filesys_dcc_drop_notifies((*i).as_in_logic,false); 19128 vector<s_dcc_notify>::iterator i1; 19129 bool unpublished=false; 19130 //bool incomplete=false; 19131 string incomplete_files; 19132 for(i1=notifies.begin(); i1!=notifies.end(); i1++) { 19133 if(!unpublished && (*i1).unpublished) { 19134 string msg=lang_get_string(1,(*i).lang,274); // 331 19135 disp+=dcc_put_multiple_lines(msg,eol); 19136 unpublished=true; 19137 } 19138 if((*i1).incomplete) { 19139 if(!incomplete_files.empty()) 19140 incomplete_files+=", "; 19141 incomplete_files+="\""; 19142 incomplete_files+=(*i1).name; 19143 incomplete_files+="\""; 19144 } 19145 if((*i1).notify_owner || (*i1).notify_user || (*i1).secure_notify_owner || (*i1).secure_notify_user) { 19146 string msg=(*i1).message; 19147 disp+=dcc_put_multiple_lines(msg,eol); 19148 } 19149 } 19150 if(!incomplete_files.empty()) { 19151 disp+=dcc_put_multiple_lines(lang_get_string(1,(*i).lang,402),eol); 19152 disp+=dcc_put_multiple_lines(incomplete_files,eol); 19153 } 19154 } 19155 19156 if(!disp.empty()) { 19157 int ec=0; 19158 dcc_send_msg((*i).socket,disp,ec); 19159 } 19160 } 19161 }
Here is the call graph for this function: ![]() |
|
Check for maximum connection limit rule, and drop some.
Definition at line 16228 of file dcc.cpp. References conf_getvar(), dcc_clients, dcc_send_msg(), s_socket::handle, s_dcc_client::lang, lang_get_string(), s_dcc_client::last_input, sock_close(), s_dcc_client::socket, and s_dcc_client::telnet. Referenced by dcc_loop(), and irc_quoted_callback(). 16229 { 16230 if(atol(conf_getvar("dcc_max_sessions_per_ip").c_str())==0) 16231 return; 16232 16233 map<string,s_session> sessions; 16234 16235 vector<s_dcc_client>::iterator i1; 16236 for(i1=dcc_clients.begin(); i1!=dcc_clients.end(); i1++) { 16237 if(!(*i1).replication_partner && (*i1).chat && !(*i1).remote.empty()) { 16238 pair<string,s_session> p; 16239 p.first=(*i1).remote; 16240 p.second.num=1; 16241 p.second.c.clear(); 16242 p.second.c.push_back(&(*i1)); 16243 16244 map<string,s_session>::iterator i2; 16245 bool got=false; 16246 for(i2=sessions.begin(); i2!=sessions.end(); i2++) { 16247 if(!(*i2).first.compare(p.first)) { 16248 got=true; 16249 (*i2).second.num++; 16250 break; 16251 } 16252 } 16253 if(!got) 16254 sessions.insert(p); 16255 } 16256 } 16257 map<string,s_session>::iterator i2; 16258 for(i2=sessions.begin(); i2!=sessions.end(); i2++) { 16259 if((*i2).second.num>atol(conf_getvar("dcc_max_sessions_per_ip").c_str())) { 16260 s_dcc_client* max_idle=NULL; 16261 16262 vector<s_dcc_client*>::iterator i3; 16263 for(i3=(*i2).second.c.begin(); i3!=(*i2).second.c.end(); i3++) { 16264 if(max_idle==NULL) { 16265 max_idle=*i3; 16266 continue; 16267 } 16268 if((*i3)->last_input<max_idle->last_input) 16269 max_idle=*i3; 16270 } 16271 if(max_idle==NULL) // huh?! just in case... ;-) 16272 continue; 16273 16274 string lang=max_idle->lang; 16275 if(lang.empty()) 16276 lang="en"; 16277 16278 char dcc_eol[4]="\n\0"; 16279 char telnet_eol[4]="\r\n\0"; 16280 string eol=max_idle->telnet?telnet_eol:dcc_eol; 16281 16282 vector<s_dcc_client>::iterator i4; 16283 for(i4=dcc_clients.begin(); i4!=dcc_clients.end(); i4++) 16284 if((*i4).socket==max_idle->socket) { 16285 dcc_clients.erase(i4); 16286 break; 16287 } 16288 16289 if(dcc_killing_user_socket && max_idle->socket.handle==dcc_killing_user_socket->handle) { 16290 } else { 16291 string disp=lang_get_string(1,lang,620)+eol; 16292 int ec=0; 16293 dcc_send_msg(max_idle->socket,disp,ec); 16294 sock_close(max_idle->socket); 16295 } 16296 } 16297 } 16298 }
Here is the call graph for this function: ![]() |
|
Closes all DCC/telnet connections.
Definition at line 19314 of file dcc.cpp. References dcc_clients, and sock_close(). Referenced by main(). 19315 { 19316 vector<s_dcc_client>::iterator i; 19317 for(i=dcc_clients.begin(); i!=dcc_clients.end(); i++) 19318 sock_close((*i).socket); 19319 }
Here is the call graph for this function: ![]() |
|
Closes listening sockets.
Definition at line 805 of file dcc.cpp. References dcc_servers, sock_close(), and telnet_servers. Referenced by dcc_upgrade(), and main(). 00806 { 00807 { 00808 vector<s_dcc_server>::iterator i1; 00809 again_a: 00810 for(i1=dcc_servers.begin(); i1!=dcc_servers.end(); i1++) { 00811 sock_close((*i1).socket); 00812 dcc_servers.erase(i1); 00813 goto again_a; 00814 } 00815 } 00816 { 00817 vector<s_telnet_server>::iterator i1; 00818 again_b: 00819 for(i1=telnet_servers.begin(); i1!=telnet_servers.end(); i1++) { 00820 sock_close((*i1).socket); 00821 telnet_servers.erase(i1); 00822 goto again_b; 00823 } 00824 } 00825 }
Here is the call graph for this function: ![]() |
|
Called to set the READ-"ed" flag and notify OWNER(s) if needed.
Definition at line 1271 of file dcc.cpp. References s_file::access, s_event::clear(), conf_getvar(), dcc_get_num_of_transfers(), s_file::events, files, filesys_dcc_filelist(), filesys_dcc_set_file_attrs(), s_event::first, s_event::has_read, irc_get_fullname(), irc_get_host(), irc_get_ident(), irc_is_ircop(), logic_access_to_filesystem(), logic_find_user(), s_event::owner_notified, sock_resolve(), s_event::user_name, and s_event::user_notified. Referenced by irc_loop_process_input(). 01272 { 01273 if(dcc_get_num_of_transfers()>=atol(conf_getvar("dcc_max_transfers").c_str())) { 01274 return; 01275 } 01276 01277 string ident=irc_get_ident(nick); 01278 string host=irc_get_host(nick); 01279 string full_name=irc_get_fullname(nick); 01280 in_addr ip=sock_resolve(host.c_str(),NULL); 01281 #ifdef _WIN32 01282 if(!ip.S_un.S_addr) 01283 #else 01284 if(!ip.s_addr) 01285 #endif 01286 return; 01287 01288 string user_name=logic_find_user(nick,ident,host,full_name,irc_is_ircop(nick)); 01289 01290 if(!logic_access_to_filesystem(user_name)) 01291 return; 01292 01293 vector<s_file> files; 01294 filesys_dcc_filelist(user_name,files,false); 01295 01296 s_file f; 01297 01298 bool got=false; 01299 01300 vector<s_file>::iterator i1; 01301 for(i1=files.begin(); i1!=files.end(); i1++) { 01302 if(!(*i1).public_name.compare(public_name)) { 01303 got=true; 01304 f=*i1; 01305 } 01306 } 01307 01308 if(!got) 01309 return; 01310 01311 got=false; 01312 vector<s_access>::iterator i2; 01313 for(i2=f.access.begin(); i2!=f.access.end(); i2++) 01314 if((*i2).all_users || !(*i2).user_name.compare(user_name)) 01315 if((*i2).read) { 01316 if((*i2).notify_owner) { 01317 vector<s_event>::iterator i3; 01318 bool has_read=false; 01319 for(i3=f.events.begin(); i3!=f.events.end(); i3++) { 01320 if(!(*i3).user_name.compare(user_name)) { 01321 if((*i3).has_read) 01322 has_read=true; 01323 break; 01324 } 01325 } 01326 if(!has_read) { 01327 s_event e; 01328 e.clear(); 01329 e.has_read=true; 01330 e.owner_notified=false; 01331 e.user_name=user_name; 01332 e.user_notified=false; 01333 e.first=time(NULL); 01334 01335 f.events.push_back(e); 01336 filesys_dcc_set_file_attrs(f); 01337 } 01338 break; 01339 } 01340 got=true; 01341 break; 01342 } 01343 if(!got) 01344 return; 01345 }
Here is the call graph for this function: ![]() |
|
Flushes all pending DCC/telnet connection caches.
Definition at line 19300 of file dcc.cpp. References dcc_clients, sock_flush_later(), and sock_send_cache(). Referenced by main(). 19301 { 19302 sock_send_cache(); 19303 vector<s_dcc_client>::iterator i; 19304 for(i=dcc_clients.begin(); i!=dcc_clients.end(); i++) 19305 sock_flush_later((*i).socket); 19306 }
Here is the call graph for this function: ![]() |
|
Extracts one line from buffer.
Definition at line 2107 of file dcc.cpp. Referenced by dcc_loop(), dcc_loop_edit_chan(), dcc_loop_edit_dynbans(), dcc_loop_edit_proc(), dcc_loop_edit_rproc(), dcc_loop_edit_user1(), dcc_loop_edit_user2(), dcc_loop_filesystem(), dcc_loop_language(), dcc_loop_msg(), dcc_loop_new_user(), dcc_loop_private(), dcc_loop_replication(), and dcc_loop_terminator(). 02108 { 02109 string res; 02110 bool got_eol=false; 02111 unsigned int i1; 02112 for(i1=0; i1<buff.length(); i1++) { 02113 if(buff[i1]=='\n') { 02114 got_eol=true; 02115 break; 02116 } 02117 res+=buff[i1]; 02118 } 02119 02120 if(got_eol) 02121 buff.erase(0,i1+1); 02122 else 02123 return ""; 02124 02125 if(res.length()>0 && res[res.length()-1]=='\r') 02126 res.erase(res.length()-1,1); 02127 if(res.length()>0 && res[res.length()-1]=='\n') 02128 res.erase(res.length()-1,1); 02129 if(res.length()>0 && res[res.length()-1]=='\r') 02130 res.erase(res.length()-1,1); 02131 if(res.length()>0 && res[res.length()-1]=='\n') 02132 res.erase(res.length()-1,1); 02133 02134 // erase backspace's 02135 l: 02136 for(i1=0; i1<res.length(); i1++) 02137 if(res[i1]==8) { 02138 if(i1==0) { 02139 res.erase(0,1); 02140 goto l; 02141 } 02142 res.erase(i1-1,2); 02143 goto l; 02144 } 02145 02146 return res; 02147 }
|
|
Retrieves number of concurrent DCC trtansfers.
Definition at line 1025 of file dcc.cpp. References dcc_clients. Referenced by dcc_file_has_been_read(), and irc_quoted_callback(). 01026 { 01027 int num=0; 01028 vector<s_dcc_client>::iterator i1; 01029 for(i1=dcc_clients.begin(); i1!=dcc_clients.end(); i1++) 01030 if((*i1).send || (*i1).send_from_filesystem) 01031 num++; 01032 01033 return num; 01034 }
|
|
Gets MD5-encoded password for user.
Definition at line 1356 of file dcc.cpp. Referenced by botnet_loop(), botnet_received_data_from_telnet(), dcc_loop(), and logic_exec(). 01357 { 01358 FILE* in=fopen("pass.txt","r"); 01359 if(!in) 01360 return ""; 01361 char ln[10240+1]; 01362 while(!feof(in)) { 01363 if(fgets(ln,1024*10-1,in)==NULL) 01364 break; 01365 ln[10240]=0; 01366 if(ln[strlen(ln)-1]=='\r') 01367 ln[strlen(ln)-1]=0; 01368 if(ln[strlen(ln)-1]=='\n') 01369 ln[strlen(ln)-1]=0; 01370 if(ln[strlen(ln)-1]=='\r') 01371 ln[strlen(ln)-1]=0; 01372 if(ln[strlen(ln)-1]=='\n') 01373 ln[strlen(ln)-1]=0; 01374 01375 string name, pswd; 01376 int pos=0; 01377 for(unsigned int i1=0; i1<strlen(ln); i1++) { 01378 if(pos==0 && ln[i1]=='=') { 01379 pos++; 01380 continue; 01381 } 01382 if(pos==0) 01383 name+=ln[i1]; 01384 if(pos==1) 01385 pswd+=ln[i1]; 01386 } 01387 01388 if(!name.compare(user)) { 01389 fclose(in); 01390 return pswd; 01391 } 01392 } 01393 fclose(in); 01394 return ""; 01395 }
|
|
Constructs response to "dcc" or "dcc <group_number>" PRIVMSG.
Definition at line 18869 of file dcc.cpp. References dcc_servers, and ltoa(). Referenced by irc_loop_process_input(), and irc_RPL_ENDOFWHOIS(). 18870 { 18871 if(msg.length()>=3 && msg[0]=='d' && msg[1]=='c' && msg[2]=='c') { 18872 string group; 18873 for(unsigned int i1=3; i1<msg.length(); i1++) 18874 group+=msg[i1]; 18875 if(!group.compare("")) 18876 group="0"; 18877 dcc_group=atol(group.c_str()); 18878 vector<s_dcc_server>::iterator i2; 18879 for(i2=dcc_servers.begin(); i2!=dcc_servers.end(); i2++) { 18880 if((*i2).group==dcc_group) 18881 break; 18882 } 18883 if(i2==dcc_servers.end()) 18884 return ""; 18885 18886 unsigned int ip_=0; 18887 if(!(*i2).using_ipv6) { 18888 { 18889 char tmp[4]; 18890 memcpy(tmp,&(*i2).dcc_addr,4); 18891 18892 #if !defined(HIGHFIRST) 18893 // switch bytes: BIG endian (network byte order) 18894 char x; 18895 18896 x=tmp[0]; 18897 tmp[0]=tmp[3]; 18898 tmp[3]=x; 18899 // 18900 x=tmp[1]; 18901 tmp[1]=tmp[2]; 18902 tmp[2]=x; 18903 #endif 18904 18905 memcpy(&ip_,tmp,4); 18906 } 18907 } 18908 18909 string res="DCC CHAT chat "; 18910 char tmp[64]; 18911 if(!(*i2).using_ipv6) { 18912 sprintf(tmp,"%u",ip_); 18913 res+=tmp; 18914 } else { 18915 string ip6=(*i2).bind_ip; 18916 if(ip6.find("%",0)!=string::npos) 18917 ip6.erase(ip6.find("%",0),ip6.length()-ip6.find("%",0)); 18918 res+=ip6; 18919 } 18920 res+=" "; 18921 ltoa((*i2).port,tmp,10); 18922 res+=tmp; 18923 //res+=" "; 18924 return res; 18925 } 18926 return ""; 18927 }
Here is the call graph for this function: ![]() |
|
Check for pending connections and handles existing ones.
Definition at line 16339 of file dcc.cpp. References s_dcc_awaiting_user::addr4, s_dcc_awaiting_user::addr6, s_dcc_client::as_in_logic, botnet_partyline_join_channel(), botnet_partyline_leave_channel(), botnet_partyline_message(), botnet_received_data_from_telnet(), botnet_showbots(), s_flood_history::bytes, s_dcc_client::chat, s_socket::clear(), s_socket::cmp(), cmp_strings_case_insensitive(), conf_getvar(), conf_rehash(), DCC_ACCESS_DENIED, dcc_apply(), dcc_awaiting_send, dcc_awaiting_users, dcc_can_unassign(), dcc_check_for_filesystem(), dcc_check_limit(), dcc_clients, dcc_get_line(), dcc_get_password(), DCC_IO_ERROR, dcc_killing_user_eol, dcc_killing_user_lang, dcc_loop_edit_chan(), dcc_loop_edit_dynbans(), dcc_loop_edit_proc(), dcc_loop_edit_rproc(), dcc_loop_edit_user1(), dcc_loop_edit_user2(), dcc_loop_filesystem(), dcc_loop_get_rights(), dcc_loop_language(), dcc_loop_msg(), dcc_loop_new_user(), dcc_loop_private(), dcc_loop_replication(), dcc_loop_terminator(), DCC_NO_SUCH_FILE, s_dcc_client::dcc_send, dcc_send_file(), dcc_send_msg(), dcc_servers, dcc_set_password(), dcc_to_resume, dcc_upgrade(), dcc_users_to_lock_out, dcc_want_to_die, dcc_want_to_restart, dcc_want_to_upgrade, dcc_who_is_killing, s_dcc_client::edit_user, s_dcc_client_to_resume::file_name, s_dcc_client_to_resume::file_size, FILE_SLASH, files, filesys_add_file_raw(), filesys_check_add_file_raw(), filesys_dcc_check_for_notifies(), filesys_dcc_drop_notifies(), filesys_dcc_get_resume_info(), filesys_set_file_was_read(), s_dcc_client::filesystem, s_dcc_client::fullname, s_dcc_awaiting_user::fullname, s_dcc_client::got_passwd, s_dcc_client::got_user_name, s_socket::handle, s_dcc_client::host, s_socket::host, s_dcc_awaiting_user::host, s_dcc_client::ident, s_dcc_awaiting_user::ident, inet_ntop(), inet_pton(), s_dcc_client_to_resume::ip_addr4, s_dcc_client_to_resume::ip_addr6, irc_channels, irc_get_fullname(), irc_get_host(), irc_get_ident(), irc_get_mode(), irc_get_nick(), irc_is_ircop(), irc_join(), irc_nick, irc_part(), irc_rehashed(), s_dcc_client::s_dcc_client_send::is_file_server_proto, s_dcc_client::lang, lang_get_string(), lang_rehash(), lang_subst(), last_new_instance_join, log_bot(), log_debug(), log_free_locks(), log_socket(), logic_access_to_filesystem(), logic_access_to_partyline(), logic_eval(), logic_execute(), logic_filesys_got_new(), logic_find_user(), logic_is_replication_partner(), logic_on_internal_event(), logic_partyline_backup(), logic_partyline_get_user(), logic_partyline_rehash(), logic_partyline_whois(), ltoa(), match(), MD5Final(), MD5Init(), MD5Update(), s_flood_history::msg, s_group::name, NEW_INSTANCE_TIMEOUT_AFTER_LAST_JOIN, s_dcc_client::new_user, s_dcc_client::nick, s_dcc_awaiting_user::nick, s_dcc_client::s_dcc_client_send::original_name, s_dcc_client_to_resume::port, PRIVATE_EVENT_SEVERITY_CODE_INFORMATIONAL, r_all_groups, s_user_to_lock_out::remote, s_dcc_client::remote, s_dcc_client::replication_partner, s_dcc_client::resume_pos, s_dcc_client::send, s_dcc_client::send_file, s_dcc_client::send_from_filesystem, s_ssl_conf::server_cert, s_ssl_conf::server_key, s_dcc_client::server_socket, s_dcc_client::s_dcc_client_send::size, sock_accept(), sock_accept6(), sock_async(), sock_cancel_caching(), sock_close(), sock_connect(), sock_error(), sock_flush_later(), sock_get_last_io(), sock_get_receive_size(), sock_get_remote_addr(), sock_read(), sock_send(), sock_set_blocking(), s_dcc_client::socket, s_ssl_conf::ssl_bots, ssl_close(), ssl_server_accept(), ssl_server_connection(), s_dcc_awaiting_user::start_time, stats_dcc_chat_bytes_received(), stats_dcc_chat_bytes_sent(), stats_dcc_chat_new_connection(), stats_dcc_send_bytes_received(), stats_dcc_send_bytes_sent(), stats_dcc_send_new_connection(), stats_display(), s_dcc_client::telnet, telnet_servers, s_flood_history::time, s_user_to_lock_out::timestamp, s_dcc_client_to_resume::user_name, s_dcc_awaiting_user::user_name_as_in_logic, s_dcc_client_to_resume::using_ipv6, s_dcc_awaiting_user::using_ipv6, and VERSION. Referenced by irc_loop_process_input(), logic_exec(), and sleep(). 16340 { 16341 if(dcc_want_to_upgrade && last_new_instance_join+NEW_INSTANCE_TIMEOUT_AFTER_LAST_JOIN<time(NULL)) { 16342 dcc_want_to_upgrade=false; 16343 dcc_want_to_die=true; 16344 } 16345 16346 { 16347 vector<s_dcc_client_to_resume>::iterator i1; 16348 again__: 16349 for(i1=dcc_to_resume.begin(); i1!=dcc_to_resume.end(); i1++) { 16350 if((*i1).start_time+10<time(NULL)) { 16351 // client probably doesn't support resume 16352 // so connect 16353 16354 s_dcc_client_to_resume res=*i1; 16355 dcc_to_resume.erase(i1); 16356 16357 string ip_addr; 16358 if(!res.using_ipv6) 16359 ip_addr=res.ip_addr4; 16360 else 16361 ip_addr=res.ip_addr6; 16362 unsigned short port=res.port; 16363 16364 string dcc_bind_ip=conf_getvar("dcc_bind_ip"); 16365 if(dcc_bind_ip.empty()) 16366 dcc_bind_ip="0.0.0.0"; 16367 string dcc_bind_ip6=conf_getvar("dcc_bind_ip6"); 16368 if(dcc_bind_ip6.empty()) 16369 dcc_bind_ip6="::"; 16370 16371 int ec=0; 16372 s_socket s; 16373 if(!res.using_ipv6) 16374 s=sock_connect((char*)dcc_bind_ip.c_str(),(char*)ip_addr.c_str(),port,ec,true); 16375 else 16376 s=sock_connect((char*)dcc_bind_ip6.c_str(),(char*)ip_addr.c_str(),port,ec,true); 16377 if(s.cmp()==false || ec) { 16378 log_socket(ec,sock_error(ec),"while calling sock_connect in file " __FILE__ " in function " __FUNC__); 16379 goto again__; 16380 } 16381 16382 s_dcc_client c; 16383 16384 c.nick=(*i1).nick; 16385 c.ident=irc_get_ident((*i1).nick); 16386 c.host=irc_get_host((*i1).nick); 16387 c.fullname=irc_get_fullname((*i1).nick); 16388 16389 c.resume_pos=0; 16390 16391 c.chat=false; 16392 c.send=true; 16393 c.send_from_filesystem=false; 16394 c.socket=s; 16395 16396 c.server_socket.clear(); 16397 c.telnet=false; 16398 c.got_passwd=0; 16399 c.new_user=0; 16400 c.edit_user=0; 16401 c.filesystem=0; 16402 c.as_in_logic=res.user_name; 16403 c.got_user_name=(c.as_in_logic.empty()?false:true); 16404 16405 c.dcc_send.size=res.file_size; 16406 c.dcc_send.original_name=res.file_name; 16407 c.dcc_send.is_file_server_proto=false; 16408 16409 dcc_clients.push_back(c); 16410 dcc_check_limit(); 16411 16412 goto again__; 16413 } 16414 } 16415 } 16416 16417 vector<s_dcc_client>::iterator i; 16418 char dcc_eol[4]="\n\0"; 16419 char telnet_eol[4]="\r\n\0"; 16420 again: 16421 for(i=dcc_clients.begin(); i!=dcc_clients.end(); i++) { 16422 if((*i).replication_partner) { 16423 if(!(*i).telnet_botnet_called) { 16424 if((*i).telnet_buffer_pos) { 16425 unsigned int i1; 16426 for(i1=0; i1<(*i).telnet_buffer_pos; i1++) 16427 if((*i).telnet_buffer[i1]=='\r' || (*i).telnet_buffer[i1]=='\n') 16428 break; 16429 if((*i).telnet_buffer[i1]=='\r' || (*i).telnet_buffer[i1]=='\n') 16430 i1++; 16431 if((*i).telnet_buffer[i1]=='\r' || (*i).telnet_buffer[i1]=='\n') 16432 i1++; 16433 unsigned int begin=i1; 16434 (*i).telnet_buffer_pos-=begin; 16435 16436 botnet_received_data_from_telnet((*i).socket,(*i).as_in_logic,&(*i).telnet_buffer[begin],(*i).telnet_buffer_pos,(*i).ssl_connection?(*i).ssl:NULL,(*i).remote); 16437 (*i).telnet_buffer_pos=0; 16438 (*i).telnet_botnet_called=true; 16439 } else { 16440 botnet_received_data_from_telnet((*i).socket,(*i).as_in_logic,NULL,0,(*i).ssl_connection?(*i).ssl:NULL,(*i).remote); 16441 (*i).telnet_botnet_called=true; 16442 } 16443 if((*i).ssl_connection) { 16444 if(!ssl_server_accept((*i).ssl,&((*i).socket))) { 16445 continue; 16446 } 16447 } 16448 } 16449 if((*i).socket.cmp()==false) { 16450 if((*i).ssl_connection) { 16451 ssl_close((*i).ssl,&((*i).socket)); 16452 } 16453 dcc_clients.erase(i); 16454 goto again; 16455 } 16456 continue; 16457 } 16458 16459 string eol=(*i).telnet?telnet_eol:dcc_eol; 16460 if((*i).chat) { 16461 if((*i).lang.empty()) 16462 (*i).lang="en"; 16463 16464 long dcc_always_want_nick=atol(conf_getvar("dcc_always_want_nick").c_str()); 16465 if(dcc_always_want_nick && (*i).got_user_name) { 16466 (*i).got_user_name=false; 16467 (*i).supposed_to_be=(*i).as_in_logic; 16468 (*i).as_in_logic=""; 16469 16470 string disp=lang_get_string(1,(*i).lang,167)+eol; 16471 int ec=0; 16472 size_t sent=sock_send((*i).socket,disp.c_str(),disp.length(),ec); 16473 stats_dcc_chat_bytes_sent(sent); 16474 } 16475 if(!dcc_always_want_nick) 16476 (*i).supposed_to_be=(*i).as_in_logic; 16477 16478 { 16479 int ec=0; 16480 char buff[5*1024+1]; 16481 bool closed; 16482 int max_len=sizeof(buff)-1; 16483 if((*i).got_passwd<=1 && (*i).telnet) { 16484 max_len=1; 16485 if((*i).in_buff.length()>128) { 16486 // drop 16487 sock_close((*i).socket); 16488 dcc_clients.erase(i); 16489 goto again; 16490 } 16491 } 16492 size_t len=sock_read((*i).socket,buff,max_len,ec,closed); 16493 if(ec==0) { 16494 buff[len]=0; 16495 stats_dcc_chat_bytes_received(len); 16496 } 16497 if(closed || ec) { 16498 if((*i).partyline_channel.compare("")) 16499 botnet_partyline_leave_channel((*i).as_in_logic,(*i).partyline_channel); 16500 (*i).partyline_channel=""; 16501 if(dcc_killing_user_socket && (*i).socket.handle==dcc_killing_user_socket->handle) 16502 dcc_killing_user_socket=NULL; 16503 sock_close((*i).socket); 16504 dcc_clients.erase(i); 16505 goto again; 16506 } 16507 if(len) { 16508 (*i).last_input=time(NULL); 16509 if((*i).got_passwd==1) { 16510 string disp; 16511 unsigned int i1; 16512 for(i1=0; i1<len; i1++) 16513 disp+="\x08"; 16514 for(i1=0; i1<len; i1++) 16515 disp+=" "; 16516 for(i1=0; i1<len; i1++) 16517 disp+="\x08"; 16518 int ec=0; 16519 if((*i).telnet) 16520 dcc_send_msg((*i).socket,disp,ec); 16521 } 16522 (*i).in_buff+=buff; 16523 (*i).telnet_buffer_pos=len; 16524 if((*i).telnet_buffer_pos>sizeof((*i).telnet_buffer)) 16525 (*i).telnet_buffer_pos=sizeof((*i).telnet_buffer); 16526 memcpy((*i).telnet_buffer,buff,(*i).telnet_buffer_pos); 16527 } 16528 } 16529 16530 if((*i).as_in_logic.empty()) { 16531 string ln=dcc_get_line((*i).in_buff); 16532 if(!ln.empty() && match("### *",(char*)ln.c_str())) { 16533 (*i).as_in_logic=ln; 16534 (*i).got_passwd=0; 16535 16536 string pswd=dcc_get_password((*i).as_in_logic); 16537 if(pswd.empty()) { 16538 // do not hav password set yet 16539 if((*i).supposed_to_be.compare((*i).as_in_logic)) { 16540 // it is different user! SPOOFING! 16541 string disp=lang_get_string(1,"en",698)+eol; 16542 int ec=0; 16543 dcc_send_msg((*i).socket,disp,ec); 16544 sock_close((*i).socket); 16545 dcc_clients.erase(i); 16546 break; 16547 } 16548 } 16549 } 16550 } 16551 if((*i).got_passwd==0) { 16552 { 16553 int secs=atol(conf_getvar("lockout_duration").c_str()); 16554 vector<s_user_to_lock_out>::iterator i1; 16555 lock_a: 16556 for(i1=dcc_users_to_lock_out.begin(); i1!=dcc_users_to_lock_out.end(); i1++) 16557 if((*i1).timestamp+secs<time(NULL)) { 16558 dcc_users_to_lock_out.erase(i1); 16559 goto lock_a; 16560 } 16561 int num=0; 16562 for(i1=dcc_users_to_lock_out.begin(); i1!=dcc_users_to_lock_out.end(); i1++) 16563 if(!(*i1).remote.compare((*i).remote)) 16564 num++; 16565 int max=atol(conf_getvar("lockout_count").c_str()); 16566 if(max!=0 && num>=max) { 16567 string disp=lang_get_string(1,"en",612)+eol; 16568 int ec=0; 16569 dcc_send_msg((*i).socket,disp,ec); 16570 sock_close((*i).socket); 16571 dcc_clients.erase(i); 16572 break; 16573 } 16574 } 16575 16576 (*i).new_user=0; 16577 (*i).edit_user=0; 16578 (*i).edit_proc=0; 16579 (*i).edit_chan=0; 16580 (*i).filesystem=0; 16581 (*i).edit_proc=0; 16582 (*i).edit_chan=0; 16583 (*i).filesystem=0; 16584 (*i).msg=0; 16585 (*i).private_edit=0; 16586 (*i).replication=0; 16587 (*i).terminator=0; 16588 (*i).language=0; 16589 16590 if(logic_is_replication_partner((*i).as_in_logic)) { 16591 (*i).chat=false; 16592 (*i).replication_partner=true; 16593 (*i).telnet_botnet_called=false; 16594 vector<s_ssl_bot>::iterator i1; 16595 for(i1=ssl_conf.ssl_bots.begin(); i1!=ssl_conf.ssl_bots.end(); i1++) { 16596 if(!(*i).as_in_logic.compare((*i1).botname)) { 16597 sock_cancel_caching((*i).socket); 16598 (*i).replication_partner=true; 16599 (*i).ssl_connection=true; 16600 char err_str[1024]; 16601 size_t len; 16602 sock_set_blocking((*i).socket,true); 16603 do 16604 len=recv((*i).socket.handle,err_str,sizeof(err_str),0); 16605 while((signed)len>0); 16606 16607 int ec=0; 16608 bool closed=false; 16609 do 16610 len=sock_read((*i).socket,err_str,sizeof(err_str),ec,closed); 16611 while((signed)len>0); 16612 16613 if(ssl_server_connection((*i).ssl,&((*i).socket),err_str,(char*)ssl_conf.server_cert.c_str(),(char*)ssl_conf.server_key.c_str(),(char*)(*i1).cert.c_str())) { 16614 sock_close((*i).socket); 16615 dcc_clients.erase(i); 16616 goto again; 16617 } 16618 botnet_received_data_from_telnet((*i).socket,(*i).as_in_logic,(*i).telnet_buffer,0,(*i).ssl,(*i).remote); 16619 (*i).telnet_buffer_pos=0; 16620 (*i).telnet_botnet_called=true; 16621 char tmp=0x01; 16622 send((*i).socket.handle,&tmp,1,0); 16623 dcc_clients.erase(i); 16624 16625 sock_set_blocking((*i).socket,true); 16626 16627 goto again; 16628 } 16629 } 16630 continue; 16631 } 16632 16633 if((*i).as_in_logic.empty()) 16634 continue; 16635 16636 string pswd=dcc_get_password((*i).as_in_logic); 16637 (*i).lang="en"; 16638 string disp=lang_subst(lang_get_string(1,(*i).lang,1),conf_getvar("botname"))+eol+lang_subst(lang_get_string(1,(*i).lang,640),VERSION)+eol+lang_subst(lang_get_string(1,(*i).lang,2),conf_getvar("admin"))+eol; 16639 int ec=0; 16640 dcc_send_msg((*i).socket,disp,ec); 16641 if(!pswd.compare("")) 16642 disp=lang_get_string(1,(*i).lang,3)+eol; 16643 else 16644 disp=lang_get_string(1,(*i).lang,4)+eol; 16645 dcc_send_msg((*i).socket,disp,ec); 16646 (*i).got_passwd++; 16647 (*i).in_buff=""; 16648 continue; // very important 16649 } 16650 if((*i).got_passwd==1) { 16651 string pswd=dcc_get_password((*i).as_in_logic); 16652 string p=dcc_get_line((*i).in_buff); 16653 if(p.empty() || !match("### *",(char*)p.c_str())) 16654 continue; 16655 string disp=eol; 16656 int ec=0; 16657 dcc_send_msg((*i).socket,disp,ec); 16658 16659 if(!logic_access_to_partyline((*i).as_in_logic)) { 16660 s_user_to_lock_out u; 16661 u.timestamp=time(NULL); 16662 u.remote=(*i).remote; 16663 dcc_users_to_lock_out.push_back(u); 16664 16665 string disp=lang_get_string(1,(*i).lang,5)+eol; 16666 int ec=0; 16667 dcc_send_msg((*i).socket,disp,ec); 16668 sock_close((*i).socket); 16669 dcc_clients.erase(i); 16670 goto again; 16671 } 16672 16673 unsigned char signature[16]; 16674 16675 MD5Context md5c; 16676 MD5Init(&md5c); 16677 MD5Update(&md5c,(unsigned char *)p.c_str(),(unsigned int)p.length()); 16678 MD5Final(signature,&md5c); 16679 16680 char sig[128]; 16681 sig[0]=0; 16682 for(int i1=0; i1<16; i1++) { 16683 char tmp[16]; 16684 sprintf(tmp,"%02X",signature[i1]); 16685 strcat(sig,tmp); 16686 } 16687 16688 if(cmp_strings_case_insensitive(pswd,sig)!=0 && pswd.compare("")) { 16689 s_user_to_lock_out u; 16690 u.timestamp=time(NULL); 16691 u.remote=(*i).remote; 16692 dcc_users_to_lock_out.push_back(u); 16693 16694 string disp=lang_get_string(1,(*i).lang,5)+eol; 16695 int ec=0; 16696 dcc_send_msg((*i).socket,disp,ec); 16697 sock_close((*i).socket); 16698 dcc_clients.erase(i); 16699 break; 16700 } 16701 16702 if(!pswd.compare("")) { 16703 // we got a new password set now! 16704 if((*i).telnet) { 16705 string disp=lang_subst(lang_get_string(1,(*i).lang,689),conf_getvar("admin"))+eol; 16706 int ec=0; 16707 dcc_send_msg((*i).socket,disp,ec); 16708 sock_close((*i).socket); 16709 dcc_clients.erase(i); 16710 break; 16711 } else { 16712 if(dcc_want_to_upgrade) { 16713 string disp=lang_get_string(1,(*i).lang,642)+eol; 16714 int ec=0; 16715 dcc_send_msg((*i).socket,disp,ec); 16716 } else 16717 dcc_set_password((*i).as_in_logic,sig); 16718 } 16719 } 16720 16721 (*i).got_passwd++; 16722 } 16723 if((*i).got_passwd==2) { 16724 FILE* in=fopen("motd.txt","r"); 16725 char ln[10240+1]; 16726 while(in && !feof(in)) { 16727 if(fgets(ln,1024*10-1,in)==NULL) 16728 break; 16729 ln[10240]=0; 16730 if(ln[strlen(ln)-1]=='\r') 16731 ln[strlen(ln)-1]=0; 16732 if(ln[strlen(ln)-1]=='\n') 16733 ln[strlen(ln)-1]=0; 16734 if(ln[strlen(ln)-1]=='\r') 16735 ln[strlen(ln)-1]=0; 16736 if(ln[strlen(ln)-1]=='\n') 16737 ln[strlen(ln)-1]=0; 16738 string disp=(string)ln+eol; 16739 int ec=0; 16740 dcc_send_msg((*i).socket,disp,ec); 16741 } 16742 if(in) 16743 fclose(in); 16744 (*i).got_passwd++; 16745 dcc_loop_get_rights(i); 16746 16747 dcc_check_for_filesystem((*i).as_in_logic); 16748 16749 /*vector<s_dcc_notify> notify; 16750 filesys_dcc_check_for_notifies((*i).as_in_logic,notify); 16751 16752 string files; 16753 16754 vector<s_dcc_notify>::iterator i1; 16755 for(i1=notify.begin(); i1!=notify.end(); i1++) { 16756 if((*i1).unpublished) { 16757 if(!files.empty()) 16758 files+=", "; 16759 files+=(*i1).name; 16760 } 16761 } 16762 16763 if(!files.empty()) { 16764 string disp=lang_get_string(1,(*i).lang,274)+eol; 16765 int ec=0; 16766 dcc_send_msg((*i).socket,disp,ec); 16767 }*/ 16768 16769 (*i).partyline_channel=""; 16770 } 16771 16772 if((*i).got_passwd!=3) 16773 continue; 16774 16775 dcc_loop_new_user(i,eol); 16776 16777 dcc_loop_edit_user1(i,eol); 16778 dcc_loop_edit_user2(i,eol); 16779 16780 dcc_loop_edit_rproc(i,eol); 16781 16782 dcc_loop_edit_proc(i,eol); 16783 16784 dcc_loop_edit_chan(i,eol); 16785 16786 dcc_loop_filesystem(i,eol); 16787 16788 dcc_loop_msg(i,eol); 16789 16790 dcc_loop_private(i,eol); 16791 16792 dcc_loop_replication(i,eol); 16793 16794 dcc_loop_terminator(i,eol); 16795 16796 dcc_loop_language(i,eol); 16797 16798 dcc_loop_edit_dynbans(i,eol); 16799 16800 { 16801 int dcc_chat_ping_interval=atol(conf_getvar("dcc_chat_ping_interval").c_str()); 16802 if(dcc_chat_ping_interval && sock_get_last_io((*i).socket)+dcc_chat_ping_interval<=time(NULL)) { 16803 time_t last_read=sock_get_last_io((*i).socket,'r'); 16804 16805 string disp=lang_get_string(1,(*i).lang,611); 16806 16807 time_t diff=time(NULL)-last_read; 16808 time_t days=diff/(24*60*60); 16809 diff%=24*60*60; 16810 time_t hrs=diff/(60*60); 16811 diff%=60*60; 16812 time_t mins=diff/(60); 16813 diff%=60; 16814 time_t secs=diff; 16815 16816 string idle=lang_get_string(1,(*i).lang,695); 16817 char tmp[128]; 16818 idle=lang_subst(idle,ltoa((long)days,tmp,10)); 16819 idle=lang_subst(idle,ltoa((long)hrs,tmp,10)); 16820 idle=lang_subst(idle,ltoa((long)mins,tmp,10)); 16821 idle=lang_subst(idle,ltoa((long)secs,tmp,10)); 16822 16823 disp+=" "; 16824 disp+=idle; 16825 disp+=eol; 16826 16827 { 16828 time_t now=time(NULL); 16829 char* t1=ctime(&now); 16830 char t2[128]; 16831 strcpy(t2,t1); 16832 t2[strlen(t2)-1]=0; // get rid of \n 16833 string ts="["; 16834 ts+=t2; 16835 ts+="] "; 16836 disp=ts+disp; 16837 } 16838 16839 int ec=0; 16840 dcc_send_msg((*i).socket,disp,ec); 16841 } 16842 } 16843 16844 if((*i).last_filesys_lookup==0 || (*i).last_filesys_lookup+30<time(NULL)) { 16845 time(&(*i).last_filesys_lookup); 16846 vector<s_dcc_notify> notify; 16847 filesys_dcc_check_for_notifies((*i).as_in_logic,(*i).u,(*i).chs,"",notify,true,(*i).lang,eol); 16848 if(!notify.empty()) { 16849 filesys_dcc_drop_notifies((*i).as_in_logic,false); 16850 16851 string files; 16852 string msgs; 16853 string incomplete_files; 16854 16855 vector<s_dcc_notify>::iterator i1; 16856 for(i1=notify.begin(); i1!=notify.end(); i1++) { 16857 if((*i1).unpublished) { 16858 if(!files.empty()) 16859 files+=", "; 16860 files+="\""; 16861 files+=(*i1).name; 16862 files+="\""; 16863 } 16864 if((*i1).incomplete) { 16865 if(!incomplete_files.empty()) 16866 incomplete_files+=", "; 16867 incomplete_files+="\""; 16868 incomplete_files+=(*i1).name; 16869 incomplete_files+="\""; 16870 } 16871 if((*i1).notify_owner || (*i1).notify_user || (*i1).secure_notify_owner || (*i1).secure_notify_user) 16872 msgs+=(*i1).message; 16873 } 16874 // do not abuse user every time about incomplete files 16875 /*string disp=lang_get_string(1,(*i).lang,279)+eol; 16876 disp+=files; 16877 disp+=eol; 16878 disp+=lang_get_string(1,(*i).lang,401)+eol; 16879 disp+=incomplete_files; 16880 disp+=eol; 16881 disp+=lang_get_string(1,(*i).lang,324)+eol; 16882 disp+=lang_get_string(1,(*i).lang,280)+eol; 16883 disp+=lang_get_string(1,(*i).lang,281)+eol; 16884 disp+=msgs; 16885 disp+=lang_get_string(1,(*i).lang,469)+eol;*/ 16886 if(!msgs.empty()) { 16887 string disp=msgs+eol; 16888 int ec=0; 16889 dcc_send_msg((*i).socket,disp,ec); 16890 } 16891 } 16892 } 16893 16894 if((*i).new_user || 16895 (*i).edit_user || 16896 (*i).edit_proc || 16897 (*i).edit_chan || 16898 (*i).filesystem || 16899 (*i).msg || 16900 (*i).private_edit || 16901 (*i).replication || 16902 (*i).terminator || 16903 (*i).language) 16904 continue; 16905 16906 string c=dcc_get_line((*i).in_buff); 16907 string cmd, param1, param2; 16908 int pos=0; 16909 for(unsigned int i1=0; i1<c.length(); i1++) { 16910 if((pos==0 || pos==1 || pos==2) && c[i1]==0x20) { 16911 pos++; 16912 continue; 16913 } 16914 if(pos==0) 16915 cmd+=c[i1]; 16916 if(pos==1) 16917 param1+=c[i1]; 16918 if(pos==2) 16919 param2+=c[i1]; 16920 } 16921 16922 bool got_cmd=false; 16923 16924 if(!cmd.compare(".whois")) { 16925 got_cmd=true; 16926 if(!param1.compare("") || param2.compare("")) { 16927 string disp=lang_get_string(1,(*i).lang,8)+eol; 16928 int ec=0; 16929 dcc_send_msg((*i).socket,disp,ec); 16930 } else { 16931 string disp=lang_subst(lang_get_string(1,(*i).lang,6),param1)+eol; 16932 int ec=0; 16933 dcc_send_msg((*i).socket,disp,ec); 16934 16935 list<string> lines; 16936 int num=logic_partyline_whois((*i).lang,param1,lines); 16937 list<string>::iterator i1; 16938 for(i1=lines.begin(); i1!=lines.end(); i1++) { 16939 dcc_send_msg((*i).socket,*i1,ec); 16940 dcc_send_msg((*i).socket,eol,ec); 16941 } 16942 16943 char tmp[64]; 16944 ltoa(num,tmp,10); 16945 disp=lang_subst(lang_get_string(1,(*i).lang,7),tmp)+eol; 16946 disp=lang_subst(disp,param1); 16947 dcc_send_msg((*i).socket,disp,ec); 16948 } 16949 } 16950 if(!cmd.compare(".+user")) { 16951 got_cmd=true; 16952 if((*i).access_to_plususer) { 16953 if(param1.compare("") || param2.compare("")) { 16954 string disp=lang_get_string(1,(*i).lang,29)+eol; 16955 int ec=0; 16956 dcc_send_msg((*i).socket,disp,ec); 16957 } else { 16958 string disp=lang_get_string(1,(*i).lang,32)+eol; 16959 int ec=0; 16960 dcc_send_msg((*i).socket,disp,ec); 16961 (*i).new_user=1; 16962 } 16963 } else { 16964 string disp=lang_get_string(1,(*i).lang,183)+eol; 16965 int ec=0; 16966 dcc_send_msg((*i).socket,disp,ec); 16967 } 16968 } 16969 if(!cmd.compare(".edituser")) { 16970 got_cmd=true; 16971 if(param1.compare("") || param2.compare("")) { 16972 string disp=lang_get_string(1,(*i).lang,87)+eol; 16973 int ec=0; 16974 dcc_send_msg((*i).socket,disp,ec); 16975 } else { 16976 string disp=lang_get_string(1,(*i).lang,88)+eol; 16977 int ec=0; 16978 dcc_send_msg((*i).socket,disp,ec); 16979 16980 vector<string>::iterator i1; 16981 for(i1=(*i).access_to_users.begin(); i1!=(*i).access_to_users.end(); i1++) { 16982 if(!(*i1).compare("*")) 16983 continue; 16984 disp=*i1+eol; 16985 dcc_send_msg((*i).socket,disp,ec); 16986 } 16987 16988 disp=lang_get_string(1,(*i).lang,89)+eol; 16989 dcc_send_msg((*i).socket,disp,ec); 16990 16991 (*i).edit_user=1; 16992 } 16993 } 16994 if(!cmd.compare(".+proc")) { 16995 got_cmd=true; 16996 if((*i).access_to_plusproc) { 16997 if(param1.compare("") || param2.compare("")) { 16998 string disp=lang_get_string(1,(*i).lang,377)+eol; 16999 int ec=0; 17000 dcc_send_msg((*i).socket,disp,ec); 17001 } else { 17002 (*i).edit_proc=1000; 17003 } 17004 } else { 17005 string disp=lang_get_string(1,(*i).lang,192)+eol; 17006 int ec=0; 17007 dcc_send_msg((*i).socket,disp,ec); 17008 } 17009 } 17010 if(!cmd.compare(".editproc")) { 17011 got_cmd=true; 17012 if(param1.compare("") || param2.compare("")) { 17013 string disp=lang_get_string(1,(*i).lang,134)+eol; 17014 int ec=0; 17015 dcc_send_msg((*i).socket,disp,ec); 17016 } else { 17017 string disp=lang_get_string(1,(*i).lang,135)+eol; 17018 int ec=0; 17019 dcc_send_msg((*i).socket,disp,ec); 17020 17021 vector<string>::iterator i1; 17022 for(i1=(*i).access_to_procs.begin(); i1!=(*i).access_to_procs.end(); i1++) { 17023 if(!(*i1).compare("*")) 17024 continue; 17025 disp=*i1+eol; 17026 dcc_send_msg((*i).socket,disp,ec); 17027 } 17028 17029 disp=lang_get_string(1,(*i).lang,136)+eol; 17030 dcc_send_msg((*i).socket,disp,ec); 17031 17032 (*i).edit_proc=1; 17033 } 17034 } 17035 if(!cmd.compare(".editchan")) { 17036 got_cmd=true; 17037 if(param1.compare("") || param2.compare("")) { 17038 string disp=lang_get_string(1,(*i).lang,220)+eol; 17039 int ec=0; 17040 dcc_send_msg((*i).socket,disp,ec); 17041 } else { 17042 (*i).edit_chan=1; 17043 } 17044 } 17045 if(!cmd.compare(".+chan")) { 17046 got_cmd=true; 17047 if(param1.compare("") || param2.compare("")) { 17048 string disp=lang_get_string(1,(*i).lang,235)+eol; 17049 int ec=0; 17050 dcc_send_msg((*i).socket,disp,ec); 17051 } else { 17052 (*i).edit_chan=100; 17053 } 17054 } 17055 if(!cmd.compare(".quit")) { 17056 got_cmd=true; 17057 if((*i).partyline_channel.compare("")) 17058 botnet_partyline_leave_channel((*i).as_in_logic,(*i).partyline_channel); 17059 (*i).partyline_channel=""; 17060 string disp=lang_get_string(1,(*i).lang,71)+eol; 17061 int ec=0; 17062 dcc_send_msg((*i).socket,disp,ec); 17063 if(dcc_killing_user_socket && (*i).socket.handle==dcc_killing_user_socket->handle) 17064 dcc_killing_user_socket=NULL; 17065 sock_close((*i).socket); 17066 dcc_clients.erase(i); 17067 goto again; 17068 } 17069 if(!cmd.compare(".backup")) { 17070 got_cmd=true; 17071 if((*i).access_to_backup) { 17072 logic_partyline_backup((*i).as_in_logic); 17073 if(dcc_want_to_upgrade) { 17074 string disp=lang_get_string(1,(*i).lang,641)+eol; 17075 int ec=0; 17076 dcc_send_msg((*i).socket,disp,ec); 17077 } else { 17078 string disp=lang_get_string(1,(*i).lang,74)+eol; 17079 int ec=0; 17080 dcc_send_msg((*i).socket,disp,ec); 17081 } 17082 } else { 17083 string disp=lang_get_string(1,(*i).lang,188)+eol; 17084 int ec=0; 17085 dcc_send_msg((*i).socket,disp,ec); 17086 } 17087 } 17088 if(!cmd.compare(".rehash")) { 17089 got_cmd=true; 17090 if((*i).access_to_rehash) { 17091 string disp=lang_get_string(1,(*i).lang,348)+eol; 17092 int ec=0; 17093 dcc_send_msg((*i).socket,disp,ec); 17094 sock_flush_later((*i).socket); 17095 lang_rehash(); 17096 conf_rehash(); 17097 disp=logic_partyline_rehash((*i).lang,eol,(*i).as_in_logic); 17098 ec=0; 17099 dcc_send_msg((*i).socket,disp,ec); 17100 } else { 17101 string disp=lang_get_string(1,(*i).lang,347)+eol; 17102 int ec=0; 17103 dcc_send_msg((*i).socket,disp,ec); 17104 } 17105 } 17106 if(!cmd.compare(".apply")) { 17107 got_cmd=true; 17108 if((*i).access_to_apply) { 17109 irc_rehashed(); 17110 dcc_apply((*i).as_in_logic); 17111 17112 logic_on_internal_event("@apply@",(*i).as_in_logic,"","","",PRIVATE_EVENT_SEVERITY_CODE_INFORMATIONAL,"",""); 17113 } else { 17114 string disp=lang_get_string(1,(*i).lang,682)+eol; 17115 int ec=0; 17116 dcc_send_msg((*i).socket,disp,ec); 17117 } 17118 } 17119 if(!cmd.compare(".filesystem")) { 17120 got_cmd=true; 17121 if(param1.compare("") || param2.compare("")) { 17122 string disp=lang_get_string(1,(*i).lang,628)+eol; 17123 int ec=0; 17124 dcc_send_msg((*i).socket,disp,ec); 17125 } else { 17126 if((*i).access_to_filesystem) { 17127 (*i).filesystem=1; 17128 } else { 17129 string disp=lang_get_string(1,(*i).lang,275)+eol; 17130 int ec=0; 17131 dcc_send_msg((*i).socket,disp,ec); 17132 } 17133 } 17134 } 17135 if(!cmd.compare(".upgrade")) { 17136 got_cmd=true; 17137 if(!param1.compare("") || param2.compare("")) { 17138 string disp=lang_get_string(1,(*i).lang,629)+eol; 17139 int ec=0; 17140 dcc_send_msg((*i).socket,disp,ec); 17141 } else { 17142 if((*i).access_to_upgrade) { 17143 bool ok=true; 17144 for(unsigned int i1=0; i1<param1.length(); i1++) { 17145 bool ok2=false; 17146 if(param1[i1]>='a' && param1[i1]<='z') 17147 ok2=true; 17148 if(param1[i1]>='A' && param1[i1]<='Z') 17149 ok2=true; 17150 if(param1[i1]>='0' && param1[i1]<='9') 17151 ok2=true; 17152 if(param1[i1]=='.' || param1[i1]=='_' || param1[i1]=='-') 17153 ok2=true; 17154 if(!ok2) { 17155 ok=false; 17156 break; 17157 } 17158 } 17159 if(ok) 17160 dcc_upgrade(i,eol,param1); 17161 else { 17162 string disp=lang_get_string(1,(*i).lang,665)+eol; 17163 int ec=0; 17164 dcc_send_msg((*i).socket,disp,ec); 17165 } 17166 } else { 17167 string disp=lang_get_string(1,(*i).lang,627)+eol; 17168 int ec=0; 17169 dcc_send_msg((*i).socket,disp,ec); 17170 } 17171 } 17172 } 17173 if(!cmd.compare(".msg")) { 17174 got_cmd=true; 17175 (*i).msg=1; 17176 } 17177 if(!cmd.compare(".rproc")) { 17178 got_cmd=true; 17179 if(param1.compare("") || param2.compare("")) { 17180 string disp=lang_get_string(1,(*i).lang,614)+eol; 17181 int ec=0; 17182 dcc_send_msg((*i).socket,disp,ec); 17183 } else { 17184 string disp=lang_get_string(1,(*i).lang,135)+eol; 17185 int ec=0; 17186 dcc_send_msg((*i).socket,disp,ec); 17187 17188 vector<string>::iterator i1; 17189 for(i1=(*i).access_to_procs.begin(); i1!=(*i).access_to_procs.end(); i1++) { 17190 if(!(*i1).compare("*")) 17191 continue; 17192 disp=*i1+eol; 17193 dcc_send_msg((*i).socket,disp,ec); 17194 } 17195 17196 disp=lang_get_string(1,(*i).lang,616)+eol; 17197 dcc_send_msg((*i).socket,disp,ec); 17198 17199 (*i).edit_rproc=1; 17200 } 17201 } 17202 if(!cmd.compare(".getfile")) { 17203 got_cmd=true; 17204 if((*i).access_to_filesystem) { 17205 int dcc_group=atol(param2.c_str()); 17206 int res=dcc_send_file(true,param1,irc_get_nick((*i).as_in_logic),dcc_group); 17207 string disp; 17208 switch(res) { 17209 case DCC_NO_SUCH_FILE: 17210 disp=lang_get_string(1,"en",334); 17211 break; 17212 case DCC_ACCESS_DENIED: 17213 disp=lang_get_string(1,"en",335); 17214 break; 17215 case DCC_IO_ERROR: 17216 disp=lang_get_string(1,"en",336); 17217 break; 17218 } 17219 if(!disp.empty()) { 17220 disp+=eol; 17221 int ec=0; 17222 dcc_send_msg((*i).socket,disp,ec); 17223 } 17224 } else { 17225 string disp=lang_get_string(1,(*i).lang,275)+eol; 17226 int ec=0; 17227 dcc_send_msg((*i).socket,disp,ec); 17228 } 17229 } 17230 if(!cmd.compare(".partyline")) { 17231 got_cmd=true; 17232 if(param2.compare("")) { 17233 string disp=lang_get_string(1,(*i).lang,203)+eol; 17234 int ec=0; 17235 dcc_send_msg((*i).socket,disp,ec); 17236 } else { 17237 string chan=param1; 17238 if(!chan.compare("")) 17239 chan="partyline"; 17240 if(chan.compare((*i).partyline_channel)) { 17241 if((*i).partyline_channel.compare("")) 17242 botnet_partyline_leave_channel((*i).as_in_logic,(*i).partyline_channel); 17243 (*i).partyline_channel=chan; 17244 string users=botnet_partyline_join_channel((*i).as_in_logic,(*i).partyline_channel); 17245 users=lang_get_string(1,(*i).lang,206)+" "+users+eol; 17246 int ec=0; 17247 dcc_send_msg((*i).socket,users,ec); 17248 } 17249 } 17250 } 17251 if(!cmd.compare(".leave")) { 17252 got_cmd=true; 17253 if(param1.compare("") || param2.compare("")) { 17254 string disp=lang_get_string(1,(*i).lang,204)+eol; 17255 int ec=0; 17256 dcc_send_msg((*i).socket,disp,ec); 17257 } else { 17258 if((*i).partyline_channel.compare("")) { 17259 botnet_partyline_leave_channel((*i).as_in_logic,(*i).partyline_channel); 17260 (*i).partyline_channel=""; 17261 } else { 17262 string disp=lang_get_string(1,(*i).lang,205)+eol; 17263 int ec=0; 17264 dcc_send_msg((*i).socket,disp,ec); 17265 } 17266 } 17267 } 17268 if(!cmd.compare(".restart")) { 17269 got_cmd=true; 17270 if(param1.compare("") || param2.compare("")) { 17271 string disp=lang_get_string(1,(*i).lang,270)+eol; 17272 int ec=0; 17273 dcc_send_msg((*i).socket,disp,ec); 17274 } else { 17275 if((*i).access_to_restart) { 17276 dcc_killing_user_eol=eol; 17277 dcc_killing_user_socket=&((*i).socket); 17278 17279 char* tmp=new char[(*i).as_in_logic.length()+128]; 17280 sprintf(tmp,"%s%s","RESTART by ",(*i).as_in_logic.c_str()); 17281 log_bot(tmp); 17282 17283 logic_on_internal_event("@restart@",(*i).as_in_logic,"","","",PRIVATE_EVENT_SEVERITY_CODE_INFORMATIONAL,"",""); 17284 17285 string disp=(string)tmp; 17286 disp+=eol; 17287 int ec=0; 17288 dcc_send_msg((*i).socket,disp,ec); 17289 delete[] tmp; 17290 tmp=NULL; 17291 17292 dcc_who_is_killing=(*i).as_in_logic; 17293 dcc_killing_user_lang=(*i).lang; 17294 dcc_want_to_restart=true; 17295 17296 log_free_locks(); 17297 17298 logic_partyline_backup((*i).as_in_logic); 17299 } else { 17300 string disp=lang_get_string(1,(*i).lang,272)+eol; 17301 int ec=0; 17302 dcc_send_msg((*i).socket,disp,ec); 17303 } 17304 } 17305 } 17306 if(!cmd.compare(".die")) { 17307 got_cmd=true; 17308 if(param1.compare("") || param2.compare("")) { 17309 string disp=lang_get_string(1,(*i).lang,271)+eol; 17310 int ec=0; 17311 dcc_send_msg((*i).socket,disp,ec); 17312 } else { 17313 if((*i).access_to_die) { 17314 dcc_killing_user_eol=eol; 17315 dcc_killing_user_socket=&((*i).socket); 17316 17317 char* tmp=new char[(*i).as_in_logic.length()+128]; 17318 sprintf(tmp,"%s%s","DIE by ",(*i).as_in_logic.c_str()); 17319 log_bot(tmp); 17320 17321 logic_on_internal_event("@die@",(*i).as_in_logic,"","","",PRIVATE_EVENT_SEVERITY_CODE_INFORMATIONAL,"",""); 17322 17323 string disp=(string)tmp; 17324 disp+=eol; 17325 int ec=0; 17326 dcc_send_msg((*i).socket,disp,ec); 17327 delete[] tmp; 17328 tmp=NULL; 17329 17330 dcc_who_is_killing=(*i).as_in_logic; 17331 dcc_killing_user_lang=(*i).lang; 17332 dcc_want_to_die=true; 17333 17334 logic_partyline_backup((*i).as_in_logic); 17335 } else { 17336 string disp=lang_get_string(1,(*i).lang,273)+eol; 17337 int ec=0; 17338 dcc_send_msg((*i).socket,disp,ec); 17339 } 17340 } 17341 } 17342 if(!cmd.compare(".help")) { 17343 got_cmd=true; 17344 if(param1.compare("") || param2.compare("")) { 17345 string disp=lang_get_string(1,(*i).lang,372)+eol; 17346 int ec=0; 17347 dcc_send_msg((*i).socket,disp,ec); 17348 } else { 17349 string disp; 17350 for(int ii=354; ii<=371; ii++) // !!! 17351 disp+=lang_get_string(1,(*i).lang,ii)+eol; 17352 disp+=lang_get_string(1,(*i).lang,396)+eol; 17353 disp+=lang_get_string(1,(*i).lang,410)+eol; 17354 disp+=lang_get_string(1,(*i).lang,418)+eol; 17355 disp+=lang_get_string(1,(*i).lang,454)+eol; 17356 disp+=lang_get_string(1,(*i).lang,453)+eol; 17357 disp+=lang_get_string(1,(*i).lang,535)+eol; 17358 disp+=lang_get_string(1,(*i).lang,566)+eol; 17359 disp+=lang_get_string(1,(*i).lang,571)+eol; 17360 disp+=lang_get_string(1,(*i).lang,579)+eol; 17361 disp+=lang_get_string(1,(*i).lang,615)+eol; 17362 disp+=lang_get_string(1,(*i).lang,636)+eol; 17363 disp+=lang_get_string(1,(*i).lang,643)+eol; 17364 disp+=lang_get_string(1,(*i).lang,645)+eol; 17365 disp+=lang_get_string(1,(*i).lang,679)+eol; 17366 int ec=0; 17367 dcc_send_msg((*i).socket,disp,ec); 17368 } 17369 } 17370 if(!cmd.compare(".showbots")) { 17371 got_cmd=true; 17372 if(param1.compare("") || param2.compare("")) { 17373 string disp=lang_get_string(1,(*i).lang,644)+eol; 17374 int ec=0; 17375 dcc_send_msg((*i).socket,disp,ec); 17376 } else { 17377 string disp=botnet_showbots((*i).lang,eol); 17378 int ec=0; 17379 dcc_send_msg((*i).socket,disp,ec); 17380 } 17381 } 17382 if(!cmd.compare(".broadcastping")) { 17383 got_cmd=true; 17384 if(param1.compare("") || param2.compare("")) { 17385 string disp=lang_get_string(1,(*i).lang,646)+eol; 17386 int ec=0; 17387 dcc_send_msg((*i).socket,disp,ec); 17388 } else { 17389 time_t now; 17390 time(&now); 17391 17392 string c="\x01" "BROADCAST_PING\x01 "; 17393 char tmp[128]; 17394 c+=ltoa((long)now,tmp,10); 17395 c+=" "; 17396 c+=(*i).as_in_logic; 17397 17398 // clean up flood buffers 17399 vector<s_flood_history>::iterator i4; 17400 l_flood: 17401 for(i4=(*i).msg_flood_hist.begin(); i4!=(*i).msg_flood_hist.end(); i4++) 17402 if(now-(*i4).time>(*i).partyline_msg_flood.seconds) { 17403 (*i).msg_flood_hist.erase(i4); 17404 goto l_flood; 17405 } 17406 17407 s_flood_history entry; 17408 entry.time=now; 17409 entry.bytes=c.length(); 17410 entry.msg=c; 17411 17412 (*i).msg_flood_hist.push_back(entry); 17413 unsigned int entries=0; 17414 for(i4=(*i).msg_flood_hist.begin(); i4!=(*i).msg_flood_hist.end(); i4++) 17415 entries++; 17416 if((*i).partyline_msg_flood.lines!=0 && entries>=(*i).partyline_msg_flood.lines) { 17417 char tmp[64]; 17418 ltoa((long)(*i).partyline_msg_flood.seconds,tmp,10); 17419 string disp=lang_subst(lang_get_string(1,(*i).lang,207),tmp)+eol; 17420 int ec=0; 17421 dcc_send_msg((*i).socket,disp,ec); 17422 } else { 17423 string disp=lang_get_string(1,(*i).lang,647); 17424 disp+=" "; 17425 disp+=ctime(&now); 17426 if(disp.length() && disp[disp.length()-1]=='\n') 17427 disp.erase(disp.length()-1,1); 17428 if(disp.length() && disp[disp.length()-1]=='\r') 17429 disp.erase(disp.length()-1,1); 17430 if(disp.length() && disp[disp.length()-1]=='\n') 17431 disp.erase(disp.length()-1,1); 17432 if(disp.length() && disp[disp.length()-1]=='\r') 17433 disp.erase(disp.length()-1,1); 17434 disp+=eol; 17435 int ec=0; 17436 dcc_send_msg((*i).socket,disp,ec); 17437 botnet_partyline_message((*i).as_in_logic,"",c); 17438 } 17439 } 17440 } 17441 if(!cmd.compare(".execute")) { 17442 got_cmd=true; 17443 if(param1.empty() || c.find(" ",0)==string::npos) { 17444 string disp=lang_get_string(1,(*i).lang,653)+eol; 17445 int ec=0; 17446 dcc_send_msg((*i).socket,disp,ec); 17447 } else { 17448 string proc=c; 17449 proc.erase(0,proc.find(" ",0)+1); 17450 if(dcc_can_unassign(i,eol,proc)) { 17451 map<string,string> vars; 17452 logic_execute(proc,vars); 17453 } else { 17454 string disp=lang_get_string(1,(*i).lang,654)+eol; 17455 int ec=0; 17456 dcc_send_msg((*i).socket,disp,ec); 17457 } 17458 } 17459 } 17460 if(!cmd.compare(".replication")) { 17461 got_cmd=true; 17462 if(param1.compare("") || param2.compare("")) { 17463 string disp=lang_get_string(1,(*i).lang,419)+eol; 17464 int ec=0; 17465 dcc_send_msg((*i).socket,disp,ec); 17466 } else { 17467 if((*i).access_to_replication) { 17468 (*i).replication=1; 17469 } else { 17470 string disp=lang_get_string(1,(*i).lang,420)+eol; 17471 int ec=0; 17472 dcc_send_msg((*i).socket,disp,ec); 17473 } 17474 } 17475 } 17476 if(!cmd.compare(".chpass")) { 17477 got_cmd=true; 17478 if(!param1.compare("") || !param2.compare("")) { 17479 string disp=lang_get_string(1,(*i).lang,637)+eol; 17480 int ec=0; 17481 dcc_send_msg((*i).socket,disp,ec); 17482 } else { 17483 unsigned char signature[16]; 17484 17485 MD5Context md5c; 17486 MD5Init(&md5c); 17487 MD5Update(&md5c,(unsigned char *)param2.c_str(),(unsigned int)param2.length()); 17488 MD5Final(signature,&md5c); 17489 17490 char sig[128]; 17491 sig[0]=0; 17492 for(int i1=0; i1<16; i1++) { 17493 char tmp[16]; 17494 sprintf(tmp,"%02X",signature[i1]); 17495 strcat(sig,tmp); 17496 } 17497 17498 bool got=false; 17499 if((*i).as_in_logic.compare(param1)) { 17500 vector<string>::iterator i1; 17501 for(i1=(*i).access_to_users.begin(); i1!=(*i).access_to_users.end(); i1++) { 17502 if(!(*i1).compare(param1)) { 17503 got=true; 17504 if(dcc_want_to_upgrade) { 17505 string disp=lang_get_string(1,(*i).lang,642)+eol; 17506 int ec=0; 17507 dcc_send_msg((*i).socket,disp,ec); 17508 } else 17509 dcc_set_password(param1,sig); 17510 break; 17511 } 17512 } 17513 } else { 17514 got=true; 17515 if(dcc_want_to_upgrade) { 17516 string disp=lang_get_string(1,(*i).lang,642)+eol; 17517 int ec=0; 17518 dcc_send_msg((*i).socket,disp,ec); 17519 } else 17520 dcc_set_password(param1,sig); 17521 } 17522 if(!got) { 17523 string disp=lang_get_string(1,(*i).lang,638)+eol; 17524 int ec=0; 17525 dcc_send_msg((*i).socket,disp,ec); 17526 } else { 17527 string disp=lang_get_string(1,(*i).lang,639)+eol; 17528 int ec=0; 17529 dcc_send_msg((*i).socket,disp,ec); 17530 } 17531 } 17532 } 17533 if(!cmd.compare(".terminator")) { 17534 got_cmd=true; 17535 if(param1.compare("") || param2.compare("")) { 17536 string disp=lang_get_string(1,(*i).lang,455)+eol; 17537 int ec=0; 17538 dcc_send_msg((*i).socket,disp,ec); 17539 } else { 17540 (*i).terminator=1; 17541 } 17542 } 17543 if(!cmd.compare(".+group")) { 17544 got_cmd=true; 17545 if(!param1.compare("") || param2.compare("")) { 17546 string disp=lang_get_string(1,(*i).lang,397)+eol; 17547 int ec=0; 17548 dcc_send_msg((*i).socket,disp,ec); 17549 } else { 17550 vector<s_group>::iterator i1; 17551 bool got=false; 17552 map<string,string> vars; 17553 for(i1=r_all_groups.begin(); i1!=r_all_groups.end(); i1++) { 17554 if(!logic_eval((*i1).name,vars).compare(param1)) { 17555 got=true; 17556 string disp=lang_get_string(1,(*i).lang,398)+eol; 17557 int ec=0; 17558 dcc_send_msg((*i).socket,disp,ec); 17559 break; 17560 } 17561 } 17562 if(!got) { 17563 s_group g; 17564 g.name=param1; 17565 g.name="\""+g.name+"\""; 17566 r_all_groups.push_back(g); 17567 string disp=lang_get_string(1,(*i).lang,399)+eol; 17568 int ec=0; 17569 dcc_send_msg((*i).socket,disp,ec); 17570 } 17571 } 17572 } 17573 if(!cmd.compare(".private")) { 17574 got_cmd=true; 17575 if(param1.compare("") || param2.compare("")) { 17576 string disp=lang_get_string(1,(*i).lang,411)+eol; 17577 int ec=0; 17578 dcc_send_msg((*i).socket,disp,ec); 17579 } else { 17580 if(!(*i).access_to_private) { 17581 string disp=lang_get_string(1,(*i).lang,412)+eol; 17582 int ec=0; 17583 dcc_send_msg((*i).socket,disp,ec); 17584 } else { 17585 (*i).private_edit=1; 17586 } 17587 } 17588 } 17589 if(!cmd.compare(".lang")) { 17590 got_cmd=true; 17591 if(param1.compare("") || param2.compare("")) { 17592 string disp=lang_get_string(1,(*i).lang,450)+eol; 17593 int ec=0; 17594 dcc_send_msg((*i).socket,disp,ec); 17595 } else { 17596 (*i).language=1; 17597 } 17598 } 17599 if(!cmd.compare(".stat")) { 17600 got_cmd=true; 17601 if(param1.compare("") || param2.compare("")) { 17602 string disp=lang_get_string(1,(*i).lang,534)+eol; 17603 int ec=0; 17604 dcc_send_msg((*i).socket,disp,ec); 17605 } else { 17606 list<string> lines; 17607 stats_display(lines,(*i).lang); 17608 list<string>::iterator i1; 17609 string disp; 17610 for(i1=lines.begin(); i1!=lines.end(); i1++) { 17611 disp+=*i1; 17612 disp+=eol; 17613 } 17614 disp+=eol; 17615 vector<s_online_channel>::iterator i2; 17616 for(i2=irc_channels.begin(); i2!=irc_channels.end(); i2++) { 17617 disp+=lang_subst(lang_subst(lang_get_string(1,(*i).lang,539),irc_get_mode((*i2).name,irc_nick)),(*i2).name)+eol; 17618 vector<s_online_user>::iterator i3; 17619 for(i3=(*i2).users.begin(); i3!=(*i2).users.end(); i3++) { 17620 disp+=" "; 17621 disp+=lang_subst(lang_get_string(1,(*i).lang,540),(*i3).mode); 17622 disp+=(*i3).nick; 17623 disp+=" = "; 17624 if((*i3).got_whois) 17625 disp+=(*i3).in_logic_as; 17626 else 17627 disp+=lang_get_string(1,(*i).lang,557); 17628 disp+=eol; 17629 17630 // display dynamic modes 17631 s_user u; 17632 vector<s_channel> chs; 17633 logic_partyline_get_user((*i3).in_logic_as,u,chs); 17634 vector<s_channel>::iterator i4; 17635 for(i4=chs.begin(); i4!=chs.end(); i4++) 17636 if(!cmp_strings_case_insensitive((*i4).channel_name,(*i2).name)) { 17637 if(!(*i4).dynamic_plus_modes.empty()) { 17638 disp+=" "; 17639 disp+=lang_get_string(1,(*i).lang,550); 17640 disp+=(*i4).dynamic_plus_modes; 17641 disp+=eol; 17642 } 17643 if(!(*i4).dynamic_minus_modes.empty()) { 17644 disp+=" "; 17645 disp+=lang_get_string(1,(*i).lang,551); 17646 disp+=(*i4).dynamic_minus_modes; 17647 disp+=eol; 17648 } 17649 break; 17650 } 17651 } 17652 } 17653 int ec=0; 17654 dcc_send_msg((*i).socket,disp,ec); 17655 } 17656 } 17657 if(!cmd.compare(".part")) { 17658 got_cmd=true; 17659 if(!param1.compare("")) { 17660 string disp=lang_get_string(1,(*i).lang,567)+eol; 17661 int ec=0; 17662 dcc_send_msg((*i).socket,disp,ec); 17663 } else { 17664 vector<string>::iterator i1; 17665 bool got=false; 17666 for(i1=(*i).access_to_channel.begin(); i1!=(*i).access_to_channel.end(); i1++) 17667 if(!cmp_strings_case_insensitive(param1,*i1)) { 17668 got=true; 17669 break; 17670 } 17671 if(!got) { 17672 string disp=lang_get_string(1,(*i).lang,568)+eol; 17673 int ec=0; 17674 dcc_send_msg((*i).socket,disp,ec); 17675 } else { 17676 got=false; 17677 vector<s_online_channel>::iterator i1; 17678 for(i1=irc_channels.begin(); i1!=irc_channels.end(); i1++) 17679 if(!cmp_strings_case_insensitive(param1,(*i1).name)) { 17680 got=true; 17681 irc_channels.erase(i1); 17682 string reason=param2; 17683 if(reason.compare("")) 17684 reason+=(string)" - "; 17685 reason+=(*i).as_in_logic; 17686 irc_part(param1.c_str(),reason.c_str()); 17687 break; 17688 } 17689 string disp; 17690 if(!got) { 17691 disp=lang_get_string(1,(*i).lang,569)+eol; 17692 } else { 17693 disp=lang_get_string(1,(*i).lang,570)+eol; 17694 } 17695 int ec=0; 17696 dcc_send_msg((*i).socket,disp,ec); 17697 } 17698 } 17699 } 17700 if(!cmd.compare(".join")) { 17701 got_cmd=true; 17702 if(!param1.compare("")) { 17703 string disp=lang_get_string(1,(*i).lang,572)+eol; 17704 int ec=0; 17705 dcc_send_msg((*i).socket,disp,ec); 17706 } else { 17707 vector<string>::iterator i1; 17708 bool got=false; 17709 for(i1=(*i).access_to_channel.begin(); i1!=(*i).access_to_channel.end(); i1++) 17710 if(!cmp_strings_case_insensitive(param1,*i1)) { 17711 got=true; 17712 break; 17713 } 17714 if(!got) { 17715 string disp=lang_get_string(1,(*i).lang,568)+eol; 17716 int ec=0; 17717 dcc_send_msg((*i).socket,disp,ec); 17718 } else { 17719 got=false; 17720 vector<s_online_channel>::iterator i1; 17721 for(i1=irc_channels.begin(); i1!=irc_channels.end(); i1++) 17722 if(!cmp_strings_case_insensitive(param1,(*i1).name)) { 17723 got=true; 17724 break; 17725 } 17726 string disp; 17727 if(!got) { 17728 irc_join(param1.c_str(),param2.c_str()); 17729 disp=lang_get_string(1,(*i).lang,574)+eol; 17730 } else { 17731 disp=lang_get_string(1,(*i).lang,573)+eol; 17732 } 17733 int ec=0; 17734 dcc_send_msg((*i).socket,disp,ec); 17735 } 17736 } 17737 } 17738 if(!cmd.compare(".dynbans")) { 17739 got_cmd=true; 17740 if(!param1.compare("") || !param2.empty()) { 17741 string disp=lang_get_string(1,(*i).lang,580)+eol; 17742 int ec=0; 17743 dcc_send_msg((*i).socket,disp,ec); 17744 } else { 17745 (*i).dynbans_channel=param1; 17746 (*i).dynbans=1; 17747 // the privilege check will be done in loop function 17748 } 17749 } 17750 if(!got_cmd && c.length()>0 && (c[0]=='.' || !(*i).partyline_channel.compare(""))) { 17751 string disp=lang_get_string(1,(*i).lang,449)+eol; 17752 int ec=0; 17753 dcc_send_msg((*i).socket,disp,ec); 17754 } 17755 if(c.length()>0 && c[0]!='.' && (*i).partyline_channel.compare("") && (*i).new_user==0 && (*i).edit_user==0 && (*i).edit_proc==0 && ((*i).chat || (*i).telnet) && !(*i).replication_partner && (*i).got_passwd==3) { 17756 time_t now; 17757 time(&now); 17758 // clean up flood buffers 17759 vector<s_flood_history>::iterator i4; 17760 l_flood2: 17761 for(i4=(*i).msg_flood_hist.begin(); i4!=(*i).msg_flood_hist.end(); i4++) 17762 if(now-(*i4).time>(*i).partyline_msg_flood.seconds) { 17763 (*i).msg_flood_hist.erase(i4); 17764 goto l_flood2; 17765 } 17766 17767 s_flood_history entry; 17768 entry.time=now; 17769 entry.bytes=c.length(); 17770 entry.msg=c; 17771 17772 (*i).msg_flood_hist.push_back(entry); 17773 unsigned int entries=0; 17774 for(i4=(*i).msg_flood_hist.begin(); i4!=(*i).msg_flood_hist.end(); i4++) 17775 entries++; 17776 if((*i).partyline_msg_flood.lines!=0 && entries>=(*i).partyline_msg_flood.lines) { 17777 char tmp[64]; 17778 ltoa((long)(*i).partyline_msg_flood.seconds,tmp,10); 17779 string disp=lang_subst(lang_get_string(1,(*i).lang,207),tmp)+eol; 17780 int ec=0; 17781 dcc_send_msg((*i).socket,disp,ec); 17782 } else { 17783 // don't allow users to send magic control messages 17784 if(c.length() && c[0]<0x20) // if it begins with character code lower than 0x20 17785 c=(string)" "+c; // prepend it by SPACE 17786 17787 if(!c.empty()) 17788 botnet_partyline_message((*i).as_in_logic,(*i).partyline_channel,c); 17789 } 17790 } 17791 } 17792 if((*i).send) { 17793 int ec=0; 17794 char buff[1024*10]; 17795 bool closed=false; 17796 size_t len=0; 17797 if((*i).dcc_send.f || (*i).dcc_send.is_file_server_proto) { 17798 len=sock_read((*i).socket,buff,sizeof(buff),ec,closed); 17799 stats_dcc_send_bytes_received(len); 17800 } 17801 17802 bool timeout=false; 17803 if((*i).dcc_send.last_packet==0) 17804 time(&(*i).dcc_send.last_packet); 17805 if((*i).dcc_send.last_packet+atol(conf_getvar("dcc_send_timeout").c_str())<time(NULL)) 17806 timeout=true; 17807 if(closed || ec || timeout) { 17808 sock_close((*i).socket); 17809 dcc_clients.erase(i); 17810 goto again; 17811 } 17812 17813 if((*i).dcc_send.is_file_server_proto && len>0) { 17814 (*i).dcc_send.is_file_server_proto=false; 17815 // 120 clientnickname filesize filename 17816 string msg; 17817 size_t i1; 17818 for(i1=0; i1<sizeof(buff) && i1<len && buff[i1]!=0 && buff[i1]!='\n' && buff[i1]!='\r'; i1++) 17819 msg+=buff[i1]; 17820 string code, nick, size, name; 17821 int pos=0; 17822 for(i1=0; i1<msg.length(); i1++) { 17823 if(msg[i1]==0x20 && pos!=3) { 17824 pos++; 17825 continue; 17826 } 17827 if(pos==0) 17828 code+=msg[i1]; 17829 if(pos==1) 17830 nick+=msg[i1]; 17831 if(pos==2) 17832 size+=msg[i1]; 17833 if(pos==3) 17834 name+=msg[i1]; 17835 } 17836 string user_name=logic_find_user(nick,irc_get_ident(nick),irc_get_host(nick),irc_get_fullname(nick),irc_is_ircop(nick)); 17837 if(code.compare("120") || !logic_access_to_filesystem(user_name)) { 17838 sock_close((*i).socket); 17839 dcc_clients.erase(i); 17840 goto again; 17841 } 17842 (*i).dcc_send.original_name=name; 17843 (*i).dcc_send.size=atol(size.c_str()); 17844 if(filesys_check_add_file_raw(name,user_name)!=0) { 17845 sock_close((*i).socket); 17846 dcc_clients.erase(i); 17847 goto again; 17848 } 17849 string resp="121 "; 17850 resp+=irc_nick; 17851 resp+=" 0\n"; 17852 int ec=0; 17853 dcc_send_msg((*i).socket,resp,ec); 17854 continue; 17855 } 17856 if((*i).dcc_send.is_file_server_proto && len==0) 17857 continue; 17858 if(closed || ec || timeout || ((*i).dcc_send.received+(*i).resume_pos)==(*i).dcc_send.size) { 17859 sock_close((*i).socket); 17860 if(ec) 17861 log_socket(ec,sock_error(ec),"while calling sock_read in file " __FILE__ " in function " __FUNC__); 17862 17863 if((*i).dcc_send.f!=NULL) { 17864 fclose((*i).dcc_send.f); 17865 (*i).dcc_send.f=NULL; 17866 17867 if(((*i).dcc_send.received+(*i).resume_pos)!=(*i).dcc_send.size) { 17868 string fn=(*i).dcc_send.tmp_file_name; 17869 while(fn.find("/",0)!=string::npos) 17870 fn.erase(0,fn.find("/",0)+1); 17871 while(fn.find("\\",0)!=string::npos) 17872 fn.erase(0,fn.find("\\",0)+1); 17873 17874 filesys_add_file_raw(fn,(*i).dcc_send.original_name,(*i).as_in_logic,false,(*i).resume_pos!=0); 17875 logic_filesys_got_new((*i).as_in_logic,(*i).nick,(*i).ident,(*i).host,fn); 17876 } else { 17877 string fn=(*i).dcc_send.tmp_file_name; 17878 while(fn.find("/",0)!=string::npos) 17879 fn.erase(0,fn.find("/",0)+1); 17880 while(fn.find("\\",0)!=string::npos) 17881 fn.erase(0,fn.find("\\",0)+1); 17882 17883 filesys_add_file_raw(fn,(*i).dcc_send.original_name,(*i).as_in_logic,true,(*i).resume_pos!=0); 17884 logic_filesys_got_new((*i).as_in_logic,(*i).nick,(*i).ident,(*i).host,fn); 17885 } 17886 } 17887 17888 dcc_clients.erase(i); 17889 goto again; 17890 } 17891 (*i).dcc_send.received+=len; 17892 if((*i).dcc_send.f==NULL && (*i).resume_pos==0) { 17893 char fn[1024]; 17894 time_t now=time(NULL); 17895 sprintf(fn,"%s",ctime(&now)); 17896 for(unsigned int i1=0; i1<strlen(fn); i1++) { 17897 bool ok=false; 17898 if(fn[i1]>='a' && fn[i1]<='z') 17899 ok=true; 17900 if(fn[i1]>='A' && fn[i1]<='Z') 17901 ok=true; 17902 if(fn[i1]>='0' && fn[i1]<='9') 17903 ok=true; 17904 if(!ok) 17905 fn[i1]='_'; 17906 } 17907 string new_fn="." FILE_SLASH "filesystem" FILE_SLASH; 17908 new_fn+=fn; 17909 new_fn+="_"; 17910 new_fn+=(*i).as_in_logic; 17911 new_fn+=".dat"; 17912 strcpy((*i).dcc_send.tmp_file_name,new_fn.c_str()); 17913 (*i).dcc_send.f=fopen((*i).dcc_send.tmp_file_name,"wb"); 17914 if(!(*i).dcc_send.f) { 17915 sock_close((*i).socket); 17916 dcc_clients.erase(i); 17917 goto again; 17918 } 17919 } else 17920 if((*i).dcc_send.f==NULL && (*i).resume_pos!=0) { 17921 string internal; 17922 filesys_dcc_get_resume_info((*i).as_in_logic,(*i).dcc_send.original_name,internal); 17923 if(internal.empty()) { 17924 // error! 17925 string err="Internal error while trying to DCC RESUME (receive file): function filesys_dcc_get_resume_info() returned an emty string as internal name of file. Closing DCC SEND connection. in file " __FILE__ " in function " __FUNC__; 17926 log_debug(err.c_str()); 17927 sock_close((*i).socket); 17928 dcc_clients.erase(i); 17929 goto again; 17930 } 17931 string new_fn="." FILE_SLASH "filesystem" FILE_SLASH; 17932 new_fn+=internal; 17933 strcpy((*i).dcc_send.tmp_file_name,new_fn.c_str()); 17934 (*i).dcc_send.f=fopen((*i).dcc_send.tmp_file_name,"ab"); 17935 if(!(*i).dcc_send.f) { 17936 sock_close((*i).socket); 17937 dcc_clients.erase(i); 17938 goto again; 17939 } 17940 fseek((*i).dcc_send.f,(long)(*i).resume_pos,SEEK_SET); 17941 } else { 17942 time_t now=time(NULL); 17943 if(len) 17944 (*i).dcc_send.last_packet=now; 17945 if(len) 17946 (*i).dcc_send.response_sent=false; 17947 size_t in_queue=sock_get_receive_size((*i).socket); 17948 if((in_queue==0 && len==0 && (*i).dcc_send.received%512==0 && !(*i).dcc_send.response_sent) || ((*i).dcc_send.received+(*i).resume_pos)==(*i).dcc_send.size) { 17949 (*i).dcc_send.response_sent=true; 17950 size_t s=(*i).dcc_send.received+(*i).resume_pos; 17951 17952 char tmp[4]; 17953 memcpy(tmp,&s,4); 17954 17955 #if !defined(HIGHFIRST) 17956 // switch bytes: BIG endian (network byte order) 17957 char x; 17958 17959 x=tmp[0]; 17960 tmp[0]=tmp[3]; 17961 tmp[3]=x; 17962 // 17963 x=tmp[1]; 17964 tmp[1]=tmp[2]; 17965 tmp[2]=x; 17966 #endif 17967 size_t sent=sock_send((*i).socket,tmp,4,ec); 17968 stats_dcc_send_bytes_sent(sent); 17969 } 17970 if(((*i).dcc_send.received+(*i).resume_pos)==(*i).dcc_send.size) { 17971 if(len) 17972 fwrite(buff,1,len,(*i).dcc_send.f); 17973 17974 fclose((*i).dcc_send.f); 17975 (*i).dcc_send.f=NULL; 17976 17977 string fn=(*i).dcc_send.tmp_file_name; 17978 while(fn.find("/",0)!=string::npos) 17979 fn.erase(0,fn.find("/",0)+1); 17980 while(fn.find("\\",0)!=string::npos) 17981 fn.erase(0,fn.find("\\",0)+1); 17982 17983 filesys_add_file_raw(fn,(*i).dcc_send.original_name,(*i).as_in_logic,true,(*i).resume_pos!=0); 17984 logic_filesys_got_new((*i).as_in_logic,(*i).nick,(*i).ident,(*i).host,fn); 17985 17986 sock_close((*i).socket); 17987 dcc_clients.erase(i); 17988 goto again; 17989 } 17990 } 17991 if(len) 17992 fwrite(buff,1,len,(*i).dcc_send.f); 17993 } 17994 17995 if((*i).send_from_filesystem) { 17996 if((*i).dcc_send.f==NULL) { 17997 (*i).dcc_send.f=fopen((*i).send_file.file_name.c_str(),"rb"); 17998 if((*i).dcc_send.f==NULL) { 17999 string str="in file " __FILE__ " in function " __FUNC__ " occurred error: "; 18000 str+="cannot open filesystem file to send. Filename: "; 18001 str+=(*i).send_file.file_name; 18002 log_debug(str.c_str()); 18003 18004 sock_close((*i).socket); 18005 dcc_clients.erase(i); 18006 goto again; 18007 } 18008 if((*i).resume_pos!=0) { 18009 fseek((*i).dcc_send.f,(long)(*i).resume_pos,SEEK_SET); 18010 (*i).dcc_send.response_sent=true; // there is "response_sent" used as if response were received 18011 } 18012 } 18013 // there is "response_sent" used as if response were received 18014 send_next: 18015 if((*i).dcc_send.response_sent || ftell((*i).dcc_send.f)==0) { 18016 (*i).dcc_send.response_sent=false; 18017 int ec=0; 18018 char buff[1024]; 18019 size_t len=fread(buff,1,1024,(*i).dcc_send.f); 18020 size_t sent=sock_send((*i).socket,buff,len,ec); 18021 stats_dcc_send_bytes_sent(sent); 18022 (*i).dcc_send.received+=len; 18023 if(len) 18024 time(&(*i).dcc_send.last_packet); 18025 if(ec) { 18026 sock_close((*i).socket); 18027 log_socket(ec,sock_error(ec),"while calling sock_send in file " __FILE__ " in function " __FUNC__); 18028 if((*i).dcc_send.f) 18029 fclose((*i).dcc_send.f); 18030 (*i).dcc_send.f=NULL; 18031 dcc_clients.erase(i); 18032 goto again; 18033 } 18034 } else { 18035 int ec=0; 18036 char tmp[4]; 18037 bool closed=false; 18038 size_t len=sock_read((*i).socket,tmp,sizeof(tmp),ec,closed); 18039 if(len) { 18040 time(&(*i).dcc_send.last_packet); 18041 stats_dcc_send_bytes_received(len); 18042 } 18043 if(ec || closed) { 18044 sock_close((*i).socket); 18045 log_socket(ec,sock_error(ec),"while calling sock_read in file " __FILE__ " in function " __FUNC__); 18046 if((*i).dcc_send.f) 18047 fclose((*i).dcc_send.f); 18048 (*i).dcc_send.f=NULL; 18049 dcc_clients.erase(i); 18050 goto again; 18051 } 18052 if(len==4) { 18053 #if !defined(HIGHFIRST) 18054 // switch bytes: BIG endian (network byte order) 18055 char x; 18056 18057 x=tmp[0]; 18058 tmp[0]=tmp[3]; 18059 tmp[3]=x; 18060 // 18061 x=tmp[1]; 18062 tmp[1]=tmp[2]; 18063 tmp[2]=x; 18064 #endif 18065 18066 unsigned int pos; 18067 memcpy(&pos,tmp,4); 18068 18069 if(pos!=ftell((*i).dcc_send.f)) { 18070 sock_close((*i).socket); 18071 if((*i).dcc_send.f) 18072 fclose((*i).dcc_send.f); 18073 (*i).dcc_send.f=NULL; 18074 dcc_clients.erase(i); 18075 goto again; 18076 } 18077 18078 if(pos==(*i).send_file.size) { 18079 filesys_set_file_was_read((*i).as_in_logic,(*i).send_file.public_name); 18080 sock_close((*i).socket); 18081 if((*i).dcc_send.f) 18082 fclose((*i).dcc_send.f); 18083 (*i).dcc_send.f=NULL; 18084 dcc_clients.erase(i); 18085 goto again; 18086 } 18087 18088 (*i).dcc_send.response_sent=true; 18089 goto send_next; 18090 } 18091 } 18092 if((*i).dcc_send.last_packet==0) 18093 time(&(*i).dcc_send.last_packet); 18094 if((*i).dcc_send.last_packet+atol(conf_getvar("dcc_send_timeout").c_str())<time(NULL)) { 18095 // timeout 18096 if((*i).dcc_send.f!=NULL) 18097 fclose((*i).dcc_send.f); 18098 filesys_set_file_was_read((*i).as_in_logic,(*i).send_file.public_name); 18099 sock_close((*i).socket); 18100 if((*i).dcc_send.f) 18101 fclose((*i).dcc_send.f); 18102 (*i).dcc_send.f=NULL; 18103 dcc_clients.erase(i); 18104 goto again; 18105 } 18106 } 18107 } 18108 18109 vector<s_dcc_server>::iterator i2; 18110 for(i2=dcc_servers.begin(); i2!=dcc_servers.end(); i2++) { 18111 if((*i2).socket.cmp()) { 18112 s_socket s; 18113 if(!(*i2).using_ipv6) 18114 s=sock_accept((*i2).socket); 18115 else 18116 s=sock_accept6((*i2).socket); 18117 if(s.cmp()) { 18118 if(!(*i2).server_type.compare("chat")) 18119 stats_dcc_chat_new_connection(); 18120 if(!(*i2).server_type.compare("send")) 18121 stats_dcc_send_new_connection(); 18122 if((*i2).server_type.empty()) 18123 stats_dcc_chat_new_connection(); 18124 18125 sock_async(s); 18126 18127 int ec=0; 18128 in_addr addr; 18129 #ifdef _WIN32 18130 addr.S_un.S_addr=(unsigned long)-1; 18131 #else 18132 addr.s_addr=(unsigned long)-1; 18133 #endif 18134 in_addr6_ addr6; 18135 memset(&addr6,0,sizeof(addr6)); 18136 ec=0; 18137 if(!(*i2).using_ipv6) 18138 addr=sock_get_remote_addr(s,ec); 18139 else 18140 inet_pton(AF_INET6,s.host,&addr6); 18141 if(!ec) { 18142 bool awaiting_send=false; 18143 { 18144 vector<s_dcc_send_file>::iterator i; 18145 for(i=dcc_awaiting_send.begin(); i!=dcc_awaiting_send.end(); i++) { 18146 if(!(*i).using_ipv6) { 18147 #ifdef _WIN32 18148 if(addr.S_un.S_un_b.s_b1==(*i).remote_ip.S_un.S_un_b.s_b1 && addr.S_un.S_un_b.s_b2==(*i).remote_ip.S_un.S_un_b.s_b2 && addr.S_un.S_un_b.s_b3==(*i).remote_ip.S_un.S_un_b.s_b3 && addr.S_un.S_un_b.s_b4==(*i).remote_ip.S_un.S_un_b.s_b4) { 18149 #else 18150 if(((char*)&addr.s_addr)[0]==((char*)&(*i).remote_ip.s_addr)[0] && ((char*)&addr.s_addr)[1]==((char*)&(*i).remote_ip.s_addr)[1] && ((char*)&addr.s_addr)[2]==((char*)&(*i).remote_ip.s_addr)[2] && ((char*)&addr.s_addr)[3]==((char*)&(*i).remote_ip.s_addr)[3]) { 18151 #endif 18152 awaiting_send=true; 18153 break; 18154 } 18155 } else { 18156 bool equal=true; 18157 for(unsigned i1=0; i1<sizeof((*i).remote_ip6); i1++) { 18158 if(((unsigned char*)&(*i).remote_ip6)[i1]!=((unsigned char*)&addr6)[i1]) { 18159 equal=false; 18160 break; 18161 } 18162 } 18163 if(equal) { 18164 awaiting_send=true; 18165 break; 18166 } 18167 } 18168 } 18169 } 18170 18171 bool got=false; 18172 if(!awaiting_send) { 18173 vector<s_dcc_awaiting_user>::iterator i; 18174 if(!(*i2).using_ipv6) { 18175 #ifdef _WIN32 18176 if(addr.S_un.S_un_b.s_b1==127 && addr.S_un.S_un_b.s_b2==0 && addr.S_un.S_un_b.s_b3==0 && addr.S_un.S_un_b.s_b4==1) { 18177 #else 18178 if(((char*)&addr.s_addr)[0]==127 && ((char*)&addr.s_addr)[1]==0 && ((char*)&addr.s_addr)[2]==0 && ((char*)&addr.s_addr)[3]==1) { 18179 #endif 18180 s_dcc_awaiting_user user; 18181 18182 user.nick=""; 18183 user.ident=""; 18184 user.host="127.0.0.1"; 18185 user.fullname=""; 18186 18187 user.using_ipv6=false; 18188 user.addr4=addr; 18189 time(&user.start_time); 18190 strcpy(user.user_name_as_in_logic,conf_getvar("127.0.0.1_dcc_user").c_str()); 18191 dcc_awaiting_users.push_back(user); 18192 } 18193 } else { 18194 if(addr6.bytes[0]==0 && addr6.bytes[1]==0 && addr6.bytes[2]==0 && addr6.bytes[3]==0 && 18195 addr6.bytes[4]==0 && addr6.bytes[5]==0 && addr6.bytes[6]==0 && addr6.bytes[7]==0 && 18196 addr6.bytes[8]==0 && addr6.bytes[9]==0 && addr6.bytes[10]==0 && addr6.bytes[11]==0 && 18197 addr6.bytes[12]==0 && addr6.bytes[13]==0 && addr6.bytes[14]==0 && addr6.bytes[15]==1) { 18198 s_dcc_awaiting_user user; 18199 18200 user.nick=""; 18201 user.ident=""; 18202 user.host="::1"; 18203 user.fullname=""; 18204 18205 user.using_ipv6=true; 18206 #ifdef _WIN32 18207 user.addr4.S_un.S_addr=(unsigned long)-1; 18208 #else 18209 user.addr4.s_addr=(unsigned long)-1; 18210 #endif 18211 memcpy(&user.addr6,&addr6,sizeof(user.addr6)); 18212 time(&user.start_time); 18213 strcpy(user.user_name_as_in_logic,conf_getvar("127.0.0.1_dcc_user").c_str()); 18214 dcc_awaiting_users.push_back(user); 18215 } 18216 } 18217 l1: 18218 for(i=dcc_awaiting_users.begin(); i!=dcc_awaiting_users.end(); i++) { 18219 time_t now; 18220 time(&now); 18221 if((*i).start_time+20<=now) { 18222 dcc_awaiting_users.erase(i); 18223 goto l1; 18224 } 18225 if(!(*i).using_ipv6 && !(*i2).using_ipv6) { 18226 #ifdef _WIN32 18227 if((*i).addr4.S_un.S_addr==addr.S_un.S_addr) { 18228 #else 18229 if((*i).addr4.s_addr==addr.s_addr) { 18230 #endif 18231 s_dcc_client c; 18232 c.server_socket=(*i2).socket; 18233 18234 char tmp[256]; 18235 #ifdef _WIN32 18236 inet_ntop(AF_INET,&(addr.S_un.S_addr),tmp,sizeof(tmp)-1); 18237 #else 18238 inet_ntop(AF_INET,&(addr.s_addr),tmp,sizeof(tmp)-1); 18239 #endif 18240 c.remote=tmp; 18241 18242 c.nick=(*i).nick; 18243 c.ident=irc_get_ident((*i).nick); 18244 c.host=irc_get_host((*i).nick); 18245 c.fullname=irc_get_fullname((*i).nick); 18246 18247 c.chat=true; 18248 c.send=false; 18249 c.telnet=false; 18250 c.send_from_filesystem=false; 18251 c.socket=s; 18252 c.got_passwd=0; 18253 c.new_user=0; 18254 c.edit_user=0; 18255 c.filesystem=0; 18256 c.as_in_logic=(*i).user_name_as_in_logic; 18257 c.got_user_name=(c.as_in_logic.empty()?false:true); 18258 if(!(*i2).server_type.empty()) { 18259 if(!(*i2).server_type.compare("chat")) { 18260 string gr="101 "; 18261 gr+=irc_nick; 18262 gr+="\n"; 18263 int ec=0; 18264 size_t sent=sock_send(c.socket,gr.c_str(),gr.length(),ec); 18265 stats_dcc_chat_bytes_sent(sent); 18266 } 18267 if(!(*i2).server_type.compare("send")) { 18268 c.dcc_send.is_file_server_proto=true; 18269 c.chat=false; 18270 c.send=true; 18271 } 18272 } 18273 dcc_clients.push_back(c); 18274 dcc_check_limit(); 18275 got=true; 18276 dcc_awaiting_users.erase(i); 18277 goto l1; 18278 } 18279 } else if((*i).using_ipv6 && (*i2).using_ipv6) { 18280 if((*i).addr6.bytes[0]==addr6.bytes[0] && (*i).addr6.bytes[1]==addr6.bytes[1] && 18281 (*i).addr6.bytes[2]==addr6.bytes[2] && (*i).addr6.bytes[3]==addr6.bytes[3] && 18282 (*i).addr6.bytes[4]==addr6.bytes[4] && (*i).addr6.bytes[5]==addr6.bytes[5] && 18283 (*i).addr6.bytes[6]==addr6.bytes[6] && (*i).addr6.bytes[7]==addr6.bytes[7] && 18284 (*i).addr6.bytes[8]==addr6.bytes[8] && (*i).addr6.bytes[9]==addr6.bytes[9] && 18285 (*i).addr6.bytes[10]==addr6.bytes[10] &&(*i).addr6.bytes[11]==addr6.bytes[11] && 18286 (*i).addr6.bytes[12]==addr6.bytes[12] &&(*i).addr6.bytes[13]==addr6.bytes[13] && 18287 (*i).addr6.bytes[14]==addr6.bytes[14] &&(*i).addr6.bytes[15]==addr6.bytes[15]) { 18288 s_dcc_client c; 18289 c.server_socket=(*i2).socket; 18290 18291 char tmp[256]; 18292 inet_ntop(AF_INET6,&addr6,tmp,sizeof(tmp)-1); 18293 c.remote=tmp; 18294 18295 c.chat=true; 18296 c.send=false; 18297 c.telnet=false; 18298 c.send_from_filesystem=false; 18299 c.socket=s; 18300 c.got_passwd=0; 18301 c.new_user=0; 18302 c.edit_user=0; 18303 c.filesystem=0; 18304 c.as_in_logic=(*i).user_name_as_in_logic; 18305 c.got_user_name=(c.as_in_logic.empty()?false:true); 18306 if(!(*i2).server_type.empty()) { 18307 if(!(*i2).server_type.compare("chat")) { 18308 string gr="101 "; 18309 gr+=irc_nick; 18310 gr+="\n"; 18311 int ec=0; 18312 size_t sent=sock_send(c.socket,gr.c_str(),gr.length(),ec); 18313 stats_dcc_chat_bytes_sent(sent); 18314 } 18315 if(!(*i2).server_type.compare("send")) { 18316 c.dcc_send.is_file_server_proto=true; 18317 c.chat=false; 18318 c.send=true; 18319 } 18320 } 18321 dcc_clients.push_back(c); 18322 dcc_check_limit(); 18323 got=true; 18324 dcc_awaiting_users.erase(i); 18325 goto l1; 18326 } 18327 } 18328 } 18329 } else { 18330 got=false; 18331 } 18332 if(!got) { 18333 vector<s_dcc_send_file>::iterator i; 18334 got=false; 18335 l2: 18336 for(i=dcc_awaiting_send.begin(); i!=dcc_awaiting_send.end(); i++) { 18337 time_t now; 18338 time(&now); 18339 if((*i).start_time+20<=now) { 18340 dcc_awaiting_send.erase(i); 18341 goto l2; 18342 } 18343 if(!(*i).using_ipv6 && !(*i2).using_ipv6) { 18344 #ifdef _WIN32 18345 if((*i).remote_ip.S_un.S_addr==addr.S_un.S_addr) { 18346 #else 18347 if((*i).remote_ip.s_addr==addr.s_addr) { 18348 #endif 18349 s_dcc_client c; 18350 c.server_socket=(*i2).socket; 18351 18352 char tmp[256]; 18353 #ifdef _WIN32 18354 inet_ntop(AF_INET,&(addr.S_un.S_addr),tmp,sizeof(tmp)-1); 18355 #else 18356 inet_ntop(AF_INET,&(addr.s_addr),tmp,sizeof(tmp)-1); 18357 #endif 18358 c.remote=tmp; 18359 18360 c.chat=false; 18361 c.send=false; 18362 c.telnet=false; 18363 c.send_file=*i; 18364 c.send_from_filesystem=true; 18365 c.socket=s; 18366 c.got_passwd=0; 18367 c.new_user=0; 18368 c.edit_user=0; 18369 c.filesystem=0; 18370 c.as_in_logic=(*i).user_name_as_in_logic; 18371 c.got_user_name=(c.as_in_logic.empty()?false:true); 18372 c.resume_pos=(*i).resume_pos; 18373 dcc_clients.push_back(c); 18374 dcc_check_limit(); 18375 got=true; 18376 dcc_awaiting_send.erase(i); 18377 goto l2; 18378 } 18379 } else if((*i).using_ipv6 && (*i2).using_ipv6) { 18380 if((*i).remote_ip6.bytes[0]==addr6.bytes[0] && (*i).remote_ip6.bytes[1]==addr6.bytes[1] && 18381 (*i).remote_ip6.bytes[2]==addr6.bytes[2] && (*i).remote_ip6.bytes[3]==addr6.bytes[3] && 18382 (*i).remote_ip6.bytes[4]==addr6.bytes[4] && (*i).remote_ip6.bytes[5]==addr6.bytes[5] && 18383 (*i).remote_ip6.bytes[6]==addr6.bytes[6] && (*i).remote_ip6.bytes[7]==addr6.bytes[7] && 18384 (*i).remote_ip6.bytes[8]==addr6.bytes[8] && (*i).remote_ip6.bytes[9]==addr6.bytes[9] && 18385 (*i).remote_ip6.bytes[10]==addr6.bytes[10] &&(*i).remote_ip6.bytes[11]==addr6.bytes[11] && 18386 (*i).remote_ip6.bytes[12]==addr6.bytes[12] &&(*i).remote_ip6.bytes[13]==addr6.bytes[13] && 18387 (*i).remote_ip6.bytes[14]==addr6.bytes[14] &&(*i).remote_ip6.bytes[15]==addr6.bytes[15]) { 18388 s_dcc_client c; 18389 c.server_socket=(*i2).socket; 18390 18391 char tmp[256]; 18392 inet_ntop(AF_INET6,&addr6,tmp,sizeof(tmp)-1); 18393 c.remote=tmp; 18394 18395 c.chat=false; 18396 c.send=false; 18397 c.telnet=false; 18398 c.send_file=*i; 18399 c.send_from_filesystem=true; 18400 c.socket=s; 18401 c.got_passwd=0; 18402 c.new_user=0; 18403 c.edit_user=0; 18404 c.filesystem=0; 18405 c.as_in_logic=(*i).user_name_as_in_logic; 18406 c.got_user_name=(c.as_in_logic.empty()?false:true); 18407 c.resume_pos=(*i).resume_pos; 18408 dcc_clients.push_back(c); 18409 dcc_check_limit(); 18410 got=true; 18411 dcc_awaiting_send.erase(i); 18412 goto l2; 18413 } 18414 } 18415 } 18416 } 18417 if(!got) 18418 sock_close(s); 18419 } 18420 } 18421 } 18422 } 18423 18424 vector<s_telnet_server>::iterator i3; 18425 for(i3=telnet_servers.begin(); i3!=telnet_servers.end(); i3++) { 18426 if((*i3).socket.cmp()) { 18427 s_socket s; 18428 s.clear(); 18429 if((*i3).telnet_addr!=-1) 18430 s=sock_accept((*i3).socket); 18431 else 18432 s=sock_accept6((*i3).socket); 18433 if(s.cmp()) { 18434 stats_dcc_chat_new_connection(); 18435 18436 sock_async(s); 18437 18438 int ec=0; 18439 //in_addr addr=sock_get_remote_addr(s,ec); 18440 s_dcc_client c; 18441 c.server_socket=(*i3).socket; 18442 18443 { 18444 int ec=0; 18445 in_addr addr; 18446 #ifdef _WIN32 18447 addr.S_un.S_addr=(unsigned long)-1; 18448 #else 18449 addr.s_addr=(unsigned long)-1; 18450 #endif 18451 in_addr6_ addr6; 18452 memset(&addr6,0,sizeof(addr6)); 18453 ec=0; 18454 if((*i3).telnet_addr!=-1) 18455 addr=sock_get_remote_addr(s,ec); 18456 else 18457 inet_pton(AF_INET6,s.host,&addr6); 18458 18459 char tmp[256]; 18460 #ifdef _WIN32 18461 inet_ntop(AF_INET,&(addr.S_un.S_addr),tmp,sizeof(tmp)-1); 18462 #else 18463 inet_ntop(AF_INET,&(addr.s_addr),tmp,sizeof(tmp)-1); 18464 #endif 18465 c.remote=tmp; 18466 } 18467 18468 c.chat=true; 18469 c.send=false; 18470 c.telnet=true; 18471 c.send_from_filesystem=false; 18472 c.socket=s; 18473 c.got_passwd=0; 18474 c.new_user=0; 18475 c.edit_user=0; 18476 c.filesystem=0; 18477 c.as_in_logic=""; 18478 c.got_user_name=false; 18479 c.replication_partner=false; 18480 18481 c.lang="en"; 18482 string disp=lang_get_string(1,c.lang,167)+"\r\n"; // always telnet! so \r\n 18483 size_t sent=sock_send(c.socket,disp.c_str(),disp.length(),ec); 18484 stats_dcc_chat_bytes_sent(sent); 18485 18486 dcc_clients.push_back(c); 18487 dcc_check_limit(); 18488 } 18489 } 18490 } 18491 }
Here is the call graph for this function: ![]() |
|
Should be called in a loop to process edit channel definitions commands in DCC CHAT/telnet connections.
Definition at line 14796 of file dcc.cpp. References dcc_can_unassign(), dcc_get_line(), dcc_send_msg(), lang_get_string(), logic_eval(), logic_partyline_add_channel_def(), logic_partyline_get_channel_def(), logic_partyline_remove_channel_def(), ltoa(), and s_group::name. Referenced by dcc_loop(). 14797 { 14798 if((*i).edit_chan==1) { 14799 string disp=lang_get_string(1,(*i).lang,232)+eol; 14800 int ec=0; 14801 dcc_send_msg((*i).socket,disp,ec); 14802 vector<string>::iterator i1; 14803 for(i1=(*i).access_to_chan_defs.begin(); i1!=(*i).access_to_chan_defs.end(); i1++) { 14804 if(!(*i1).compare("*")) 14805 continue; 14806 disp=*i1+eol; 14807 dcc_send_msg((*i).socket,disp,ec); 14808 } 14809 disp=lang_get_string(1,(*i).lang,233)+eol; 14810 dcc_send_msg((*i).socket,disp,ec); 14811 (*i).edit_chan++; 14812 } 14813 if((*i).edit_chan==2) { 14814 string p=dcc_get_line((*i).in_buff); 14815 if(!p.compare("")) 14816 return; 14817 14818 if(!p.compare(".")) { 14819 (*i).edit_chan=0; 14820 return; 14821 } 14822 14823 bool got=false; 14824 vector<string>::iterator i1; 14825 for(i1=(*i).access_to_chan_defs.begin(); i1!=(*i).access_to_chan_defs.end(); i1++) { 14826 if(!p.compare(*i1)) { 14827 got=logic_partyline_get_channel_def(*i1,(*i).user_channel_def); 14828 break; 14829 } 14830 } 14831 14832 if(!got) { 14833 string disp=lang_get_string(1,(*i).lang,234)+eol; 14834 int ec=0; 14835 dcc_send_msg((*i).socket,disp,ec); 14836 (*i).edit_chan=1; 14837 } else 14838 (*i).edit_chan=10; 14839 } 14840 14841 // on_mode 14842 if((*i).edit_chan==10) { 14843 string disp; 14844 int ec=0; 14845 14846 disp=lang_get_string(1,(*i).lang,223)+eol; // !!! 14847 dcc_send_msg((*i).socket,disp,ec); 14848 14849 vector<string>::iterator i3; 14850 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) { 14851 disp=*i3+eol; 14852 dcc_send_msg((*i).socket,disp,ec); 14853 } 14854 14855 disp=(string)"----------------"+eol; 14856 dcc_send_msg((*i).socket,disp,ec); 14857 14858 disp=lang_get_string(1,(*i).lang,224)+eol; // !!! 14859 dcc_send_msg((*i).socket,disp,ec); 14860 14861 disp=lang_get_string(1,(*i).lang,225)+eol; 14862 dcc_send_msg((*i).socket,disp,ec); 14863 14864 (*i).edit_chan++; 14865 } 14866 if((*i).edit_chan==11) { 14867 if(!dcc_can_unassign(i,eol,(*i).user_channel_def.on_mode)) { 14868 int ec=0; 14869 string disp=lang_get_string(1,(*i).lang,592)+eol; 14870 dcc_send_msg((*i).socket,disp,ec); 14871 (*i).edit_chan++; 14872 return; 14873 } 14874 14875 string p=dcc_get_line((*i).in_buff); 14876 if(!p.compare("")) 14877 return; 14878 vector<string>::iterator i1; 14879 bool got=false; 14880 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++) 14881 if(!(*i1).compare(p)) 14882 got=true; 14883 if(!p.compare("..")) { 14884 got=true; 14885 string disp=lang_get_string(1,(*i).lang,132)+eol; 14886 int ec=0; 14887 dcc_send_msg((*i).socket,disp,ec); 14888 (*i).user_channel_def.on_mode=""; 14889 (*i).edit_chan++; 14890 } else 14891 if(!p.compare(".")) { 14892 got=true; 14893 string disp=lang_get_string(1,(*i).lang,57)+eol; 14894 int ec=0; 14895 dcc_send_msg((*i).socket,disp,ec); 14896 (*i).edit_chan++; 14897 } else { 14898 string disp; 14899 if(got) 14900 disp=lang_get_string(1,(*i).lang,57)+eol; 14901 else 14902 disp=lang_get_string(1,(*i).lang,58)+eol; 14903 int ec=0; 14904 dcc_send_msg((*i).socket,disp,ec); 14905 if(got) 14906 (*i).user_channel_def.on_mode=p; 14907 else { 14908 (*i).edit_chan--; 14909 return; 14910 } 14911 (*i).edit_chan++; 14912 } 14913 } 14914 // on_key 14915 if((*i).edit_chan==12) { 14916 string disp; 14917 int ec=0; 14918 14919 disp=lang_get_string(1,(*i).lang,240)+eol; // !!! 14920 dcc_send_msg((*i).socket,disp,ec); 14921 14922 vector<string>::iterator i3; 14923 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) { 14924 disp=*i3+eol; 14925 dcc_send_msg((*i).socket,disp,ec); 14926 } 14927 14928 disp=(string)"----------------"+eol; 14929 dcc_send_msg((*i).socket,disp,ec); 14930 14931 disp=lang_get_string(1,(*i).lang,241)+eol; // !!! 14932 dcc_send_msg((*i).socket,disp,ec); 14933 14934 disp=lang_get_string(1,(*i).lang,225)+eol; 14935 dcc_send_msg((*i).socket,disp,ec); 14936 14937 (*i).edit_chan++; 14938 } 14939 if((*i).edit_chan==13) { 14940 if(!dcc_can_unassign(i,eol,(*i).user_channel_def.on_key)) { 14941 int ec=0; 14942 string disp=lang_get_string(1,(*i).lang,592)+eol; 14943 dcc_send_msg((*i).socket,disp,ec); 14944 (*i).edit_chan++; 14945 return; 14946 } 14947 14948 string p=dcc_get_line((*i).in_buff); 14949 if(!p.compare("")) 14950 return; 14951 vector<string>::iterator i1; 14952 bool got=false; 14953 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++) 14954 if(!(*i1).compare(p)) 14955 got=true; 14956 if(!p.compare("..")) { 14957 got=true; 14958 string disp=lang_get_string(1,(*i).lang,132)+eol; 14959 int ec=0; 14960 dcc_send_msg((*i).socket,disp,ec); 14961 (*i).user_channel_def.on_key=""; 14962 (*i).edit_chan++; 14963 } else 14964 if(!p.compare(".")) { 14965 got=true; 14966 string disp=lang_get_string(1,(*i).lang,57)+eol; 14967 int ec=0; 14968 dcc_send_msg((*i).socket,disp,ec); 14969 (*i).edit_chan++; 14970 } else { 14971 string disp; 14972 if(got) 14973 disp=lang_get_string(1,(*i).lang,57)+eol; 14974 else 14975 disp=lang_get_string(1,(*i).lang,58)+eol; 14976 int ec=0; 14977 dcc_send_msg((*i).socket,disp,ec); 14978 if(got) 14979 (*i).user_channel_def.on_key=p; 14980 else { 14981 (*i).edit_chan--; 14982 return; 14983 } 14984 (*i).edit_chan++; 14985 } 14986 } 14987 // on_limit 14988 if((*i).edit_chan==14) { 14989 string disp; 14990 int ec=0; 14991 14992 disp=lang_get_string(1,(*i).lang,242)+eol; // !!! 14993 dcc_send_msg((*i).socket,disp,ec); 14994 14995 vector<string>::iterator i3; 14996 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) { 14997 disp=*i3+eol; 14998 dcc_send_msg((*i).socket,disp,ec); 14999 } 15000 15001 disp=(string)"----------------"+eol; 15002 dcc_send_msg((*i).socket,disp,ec); 15003 15004 disp=lang_get_string(1,(*i).lang,243)+eol; // !!! 15005 dcc_send_msg((*i).socket,disp,ec); 15006 15007 disp=lang_get_string(1,(*i).lang,225)+eol; 15008 dcc_send_msg((*i).socket,disp,ec); 15009 15010 (*i).edit_chan++; 15011 } 15012 if((*i).edit_chan==15) { 15013 if(!dcc_can_unassign(i,eol,(*i).user_channel_def.on_limit)) { 15014 int ec=0; 15015 string disp=lang_get_string(1,(*i).lang,592)+eol; 15016 dcc_send_msg((*i).socket,disp,ec); 15017 (*i).edit_chan++; 15018 return; 15019 } 15020 15021 string p=dcc_get_line((*i).in_buff); 15022 if(!p.compare("")) 15023 return; 15024 vector<string>::iterator i1; 15025 bool got=false; 15026 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++) 15027 if(!(*i1).compare(p)) 15028 got=true; 15029 if(!p.compare("..")) { 15030 got=true; 15031 string disp=lang_get_string(1,(*i).lang,132)+eol; 15032 int ec=0; 15033 dcc_send_msg((*i).socket,disp,ec); 15034 (*i).user_channel_def.on_limit=""; 15035 (*i).edit_chan=200; 15036 } else 15037 if(!p.compare(".")) { 15038 got=true; 15039 string disp=lang_get_string(1,(*i).lang,57)+eol; 15040 int ec=0; 15041 dcc_send_msg((*i).socket,disp,ec); 15042 (*i).edit_chan++; 15043 } else { 15044 string disp; 15045 if(got) 15046 disp=lang_get_string(1,(*i).lang,57)+eol; 15047 else 15048 disp=lang_get_string(1,(*i).lang,58)+eol; 15049 int ec=0; 15050 dcc_send_msg((*i).socket,disp,ec); 15051 if(got) 15052 (*i).user_channel_def.on_limit=p; 15053 else { 15054 (*i).edit_chan--; 15055 return; 15056 } 15057 (*i).edit_chan++; 15058 } 15059 } 15060 // on_topic 15061 if((*i).edit_chan==16) { 15062 string disp; 15063 int ec=0; 15064 15065 disp=lang_get_string(1,(*i).lang,244)+eol; // !!! 15066 dcc_send_msg((*i).socket,disp,ec); 15067 15068 vector<string>::iterator i3; 15069 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) { 15070 disp=*i3+eol; 15071 dcc_send_msg((*i).socket,disp,ec); 15072 } 15073 15074 disp=(string)"----------------"+eol; 15075 dcc_send_msg((*i).socket,disp,ec); 15076 15077 disp=lang_get_string(1,(*i).lang,245)+eol; // !!! 15078 dcc_send_msg((*i).socket,disp,ec); 15079 15080 disp=lang_get_string(1,(*i).lang,225)+eol; 15081 dcc_send_msg((*i).socket,disp,ec); 15082 15083 (*i).edit_chan++; 15084 } 15085 if((*i).edit_chan==17) { 15086 if(!dcc_can_unassign(i,eol,(*i).user_channel_def.on_topic)) { 15087 int ec=0; 15088 string disp=lang_get_string(1,(*i).lang,592)+eol; 15089 dcc_send_msg((*i).socket,disp,ec); 15090 (*i).edit_chan=500; 15091 return; 15092 } 15093 15094 string p=dcc_get_line((*i).in_buff); 15095 if(!p.compare("")) 15096 return; 15097 vector<string>::iterator i1; 15098 bool got=false; 15099 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++) 15100 if(!(*i1).compare(p)) 15101 got=true; 15102 if(!p.compare("..")) { 15103 got=true; 15104 string disp=lang_get_string(1,(*i).lang,132)+eol; 15105 int ec=0; 15106 dcc_send_msg((*i).socket,disp,ec); 15107 (*i).user_channel_def.on_topic=""; 15108 (*i).edit_chan=500; 15109 } else 15110 if(!p.compare(".")) { 15111 got=true; 15112 string disp=lang_get_string(1,(*i).lang,57)+eol; 15113 int ec=0; 15114 dcc_send_msg((*i).socket,disp,ec); 15115 (*i).edit_chan=500; 15116 } else { 15117 string disp; 15118 if(got) 15119 disp=lang_get_string(1,(*i).lang,57)+eol; 15120 else 15121 disp=lang_get_string(1,(*i).lang,58)+eol; 15122 int ec=0; 15123 dcc_send_msg((*i).socket,disp,ec); 15124 if(got) 15125 (*i).user_channel_def.on_topic=p; 15126 else { 15127 (*i).edit_chan--; 15128 return; 15129 } 15130 (*i).edit_chan=500; 15131 } 15132 } 15133 15134 // allow_dynamic 15135 if((*i).edit_chan==20) { 15136 string disp=lang_get_string(1,(*i).lang,226)+eol; 15137 int ec=0; 15138 dcc_send_msg((*i).socket,disp,ec); 15139 disp=""; 15140 int i2=1; 15141 vector<s_dynamic_rule>::iterator i1; 15142 for(i1=(*i).user_channel_def.allow_dynamic.begin(); i1!=(*i).user_channel_def.allow_dynamic.end(); i1++, i2++) { 15143 char tmp[64]; 15144 ltoa(i2,tmp,10); 15145 disp+=lang_get_string(1,(*i).lang,593); 15146 if(i2<10) 15147 disp+="0"; 15148 if(i2<100) 15149 disp+="0"; 15150 disp+=(string)tmp+": "+(*i1).group+";"+(*i1).plus_modes+";"+(*i1).minus_modes+eol; 15151 } 15152 dcc_send_msg((*i).socket,disp,ec); 15153 disp=lang_get_string(1,(*i).lang,227)+eol; 15154 dcc_send_msg((*i).socket,disp,ec); 15155 (*i).edit_chan++; 15156 } 15157 if((*i).edit_chan==21) { 15158 string p=dcc_get_line((*i).in_buff); 15159 if(!p.compare("")) 15160 return; 15161 bool got=false; 15162 if(!p.compare(".")) { 15163 got=true; 15164 (*i).edit_chan=600; 15165 return; 15166 } 15167 if(!p.compare(".add")) { 15168 got=true; 15169 string disp=lang_get_string(1,(*i).lang,211)+eol; 15170 int ec=0; 15171 dcc_send_msg((*i).socket,disp,ec); 15172 15173 vector<string>::iterator i1; 15174 for(i1=(*i).access_grant_groups.begin(); i1!=(*i).access_grant_groups.end(); i1++) { 15175 disp=(*i1)+eol; 15176 dcc_send_msg((*i).socket,disp,ec); 15177 } 15178 15179 (*i).user_channel_allow_dynamic.group=""; 15180 (*i).user_channel_allow_dynamic.plus_modes=""; 15181 (*i).user_channel_allow_dynamic.minus_modes=""; 15182 15183 (*i).edit_chan=22; 15184 } 15185 string p1, p2; 15186 int pos=0; 15187 for(unsigned int i1=0; i1<p.length(); i1++) { 15188 if(p[i1]==0x20) { 15189 pos=1; 15190 continue; 15191 } 15192 if(pos==0) 15193 p1+=p[i1]; 15194 if(pos==1) 15195 p2+=p[i1]; 15196 } 15197 if(!p1.compare(".remove")) { 15198 got=true; 15199 int line=atol(p2.c_str()); 15200 15201 int i2=1; 15202 vector<s_dynamic_rule>::iterator i1; 15203 for(i1=(*i).user_channel.allow_dynamic.begin(); i1!=(*i).user_channel.allow_dynamic.end(); i1++, i2++) 15204 if(i2==line) { 15205 bool access=false; 15206 map<string,string> vars; 15207 vector<string>::iterator i3; 15208 for(i3=(*i).access_grant_groups.begin(); i3!=(*i).access_grant_groups.end(); i3++) 15209 if(!(*i3).compare(logic_eval((*i1).group,vars))) { 15210 access=true; 15211 break; 15212 } 15213 if(access) 15214 (*i).user_channel.allow_dynamic.erase(i1); 15215 else { 15216 string disp=lang_get_string(1,(*i).lang,121)+eol; 15217 int ec=0; 15218 dcc_send_msg((*i).socket,disp,ec); 15219 } 15220 break; 15221 } 15222 (*i).edit_chan=20; 15223 } 15224 if(!got) { 15225 string disp=lang_get_string(1,(*i).lang,227)+eol; 15226 int ec=0; 15227 dcc_send_msg((*i).socket,disp,ec); 15228 15229 (*i).edit_chan=20; 15230 } 15231 } 15232 if((*i).edit_chan==22) { 15233 string p=dcc_get_line((*i).in_buff); 15234 if(!p.compare("")) 15235 return; 15236 15237 vector<string>::iterator i1; 15238 bool got=false; 15239 for(i1=(*i).access_grant_groups.begin(); i1!=(*i).access_grant_groups.end(); i1++) 15240 if(!(*i1).compare(p)) 15241 got=true; 15242 string disp; 15243 if(got) 15244 disp=lang_get_string(1,(*i).lang,228)+eol; 15245 else 15246 disp=lang_get_string(1,(*i).lang,214)+eol; 15247 int ec=0; 15248 dcc_send_msg((*i).socket,disp,ec); 15249 p=(string)"\""+p+"\""; 15250 if(got) 15251 (*i).user_channel_allow_dynamic.group=p; 15252 15253 (*i).edit_chan++; 15254 } 15255 if((*i).edit_chan==23) { 15256 string p=dcc_get_line((*i).in_buff); 15257 if(!p.compare("")) 15258 return; 15259 if(!p.compare(".")) 15260 p=""; 15261 p=(string)"\""+p+"\""; 15262 (*i).user_channel_allow_dynamic.plus_modes=p; 15263 15264 string disp; 15265 int ec=0; 15266 15267 disp=lang_get_string(1,(*i).lang,238)+eol; // !!! 15268 dcc_send_msg((*i).socket,disp,ec); 15269 (*i).edit_chan++; 15270 } 15271 if((*i).edit_chan==24) { 15272 string p=dcc_get_line((*i).in_buff); 15273 if(!p.compare("")) 15274 return; 15275 if(!p.compare(".")) 15276 p=""; 15277 p=(string)"\""+p+"\""; 15278 (*i).user_channel_allow_dynamic.minus_modes=p; 15279 15280 (*i).user_channel_def.allow_dynamic.push_back((*i).user_channel_allow_dynamic); 15281 15282 (*i).edit_chan=20; 15283 } 15284 15285 if((*i).edit_chan==50) { 15286 string disp=lang_get_string(1,(*i).lang,229)+eol; 15287 int ec=0; 15288 dcc_send_msg((*i).socket,disp,ec); 15289 15290 (*i).edit_chan++; 15291 } 15292 if((*i).edit_chan==51) { 15293 string p=dcc_get_line((*i).in_buff); 15294 if(!p.compare("")) 15295 return; 15296 15297 if(p.compare("y") && p.compare("n") && p.compare("Y") && p.compare("N")) { 15298 string disp=lang_get_string(1,(*i).lang,229)+eol; 15299 int ec=0; 15300 dcc_send_msg((*i).socket,disp,ec); 15301 } else { 15302 if(!p.compare("n") || !p.compare("N")) { 15303 (*i).edit_chan=0; 15304 string disp=lang_get_string(1,(*i).lang,230)+eol; 15305 int ec=0; 15306 dcc_send_msg((*i).socket,disp,ec); 15307 } else { 15308 logic_partyline_remove_channel_def((*i).user_channel_def.channel_name); 15309 vector<s_group>::iterator i1; 15310 for(i1=(*i).user_channel_def.groups.begin(); i1!=(*i).user_channel_def.groups.end(); i1++) 15311 if((*i1).name.length()>0 && (*i1).name[0]!='\"') 15312 (*i1).name=(string)"\""+(*i1).name+"\""; 15313 (*i).user_channel_def.last_changed=time(NULL); 15314 logic_partyline_add_channel_def((*i).user_channel_def); 15315 15316 string disp=lang_get_string(1,(*i).lang,231)+eol; 15317 int ec=0; 15318 dcc_send_msg((*i).socket,disp,ec); 15319 } 15320 (*i).edit_chan=0; 15321 } 15322 } 15323 15324 if((*i).edit_chan==100) { 15325 string disp=lang_get_string(1,(*i).lang,236)+eol; 15326 int ec=0; 15327 dcc_send_msg((*i).socket,disp,ec); 15328 (*i).edit_chan++; 15329 } 15330 if((*i).edit_chan==101) { 15331 string p=dcc_get_line((*i).in_buff); 15332 if(!p.compare("")) 15333 return; 15334 15335 if(!p.compare(".")) { 15336 (*i).edit_chan=0; 15337 return; 15338 } 15339 15340 bool got=logic_partyline_get_channel_def(p,(*i).user_channel_def); 15341 15342 if(got) { 15343 string disp=lang_get_string(1,(*i).lang,237)+eol; 15344 int ec=0; 15345 dcc_send_msg((*i).socket,disp,ec); 15346 (*i).edit_chan=0; 15347 } else { 15348 (*i).user_channel_def.channel_name=p; 15349 (*i).user_channel_def.on_mode=""; 15350 (*i).user_channel_def.on_key=""; 15351 (*i).user_channel_def.on_limit=""; 15352 (*i).user_channel_def.allow_dynamic.clear(); 15353 (*i).user_channel_def.dynamic_plus_modes=""; 15354 (*i).user_channel_def.dynamic_minus_modes=""; 15355 (*i).user_channel_def.groups.clear(); 15356 15357 (*i).edit_chan=10; 15358 return; 15359 } 15360 } 15361 15362 if((*i).edit_chan==200) { 15363 string disp=lang_get_string(1,(*i).lang,239)+eol; 15364 int ec=0; 15365 dcc_send_msg((*i).socket,disp,ec); 15366 disp=""; 15367 int i2=1; 15368 vector<s_group>::iterator i1; 15369 for(i1=(*i).user_channel_def.groups.begin(); i1!=(*i).user_channel_def.groups.end(); i1++, i2++) { 15370 char tmp[64]; 15371 ltoa(i2,tmp,10); 15372 disp+=lang_get_string(1,(*i).lang,593); 15373 if(i2<10) 15374 disp+="0"; 15375 if(i2<100) 15376 disp+="0"; 15377 bool access=false; 15378 vector<string>::iterator i3; 15379 map<string,string> vars; 15380 for(i3=(*i).access_grant_groups.begin(); i3!=(*i).access_grant_groups.end(); i3++) { 15381 if(!(*i3).compare(logic_eval((*i1).name,vars)) || !(*i3).compare("*")) { 15382 access=true; 15383 break; 15384 } 15385 } 15386 char tmp2[128]; 15387 if(access) 15388 strcpy(tmp2,lang_get_string(1,(*i).lang,120).c_str()); 15389 else 15390 strcpy(tmp2,lang_get_string(1,(*i).lang,121).c_str()); 15391 disp+=(string)tmp+": "+(*i1).name+" = "+tmp2+eol; 15392 } 15393 dcc_send_msg((*i).socket,disp,ec); 15394 disp=lang_get_string(1,(*i).lang,122)+eol; 15395 dcc_send_msg((*i).socket,disp,ec); 15396 (*i).edit_chan++; 15397 } 15398 if((*i).edit_chan==201) { 15399 string p=dcc_get_line((*i).in_buff); 15400 if(!p.compare("")) 15401 return; 15402 bool got=false; 15403 if(!p.compare(".")) { 15404 got=true; 15405 (*i).edit_chan=20; 15406 } 15407 if(!p.compare(".add")) { 15408 got=true; 15409 string disp=lang_get_string(1,(*i).lang,124)+eol; 15410 int ec=0; 15411 dcc_send_msg((*i).socket,disp,ec); 15412 15413 disp=""; 15414 vector<string>::iterator i3; 15415 for(i3=(*i).access_grant_groups.begin(); i3!=(*i).access_grant_groups.end(); i3++) 15416 disp+=*i3+eol; 15417 if((*i).access_grant_groups.begin()==(*i).access_grant_groups.end()) { 15418 disp=lang_get_string(1,(*i).lang,124)+eol; 15419 dcc_send_msg((*i).socket,disp,ec); 15420 (*i).edit_chan=200; 15421 } else { 15422 dcc_send_msg((*i).socket,disp,ec); 15423 disp=lang_get_string(1,(*i).lang,125)+eol; 15424 dcc_send_msg((*i).socket,disp,ec); 15425 (*i).edit_chan=202; 15426 } 15427 } 15428 string p1, p2; 15429 int pos=0; 15430 for(unsigned int i1=0; i1<p.length(); i1++) { 15431 if(p[i1]==0x20) { 15432 pos=1; 15433 continue; 15434 } 15435 if(pos==0) 15436 p1+=p[i1]; 15437 if(pos==1) 15438 p2+=p[i1]; 15439 } 15440 if(!p1.compare(".remove")) { 15441 got=true; 15442 int line=atol(p2.c_str()); 15443 15444 int i2=1; 15445 map<string,string> vars; 15446 vector<s_group>::iterator i1; 15447 bool access=false; 15448 for(i1=(*i).user_channel_def.groups.begin(); i1!=(*i).user_channel_def.groups.end(); i1++, i2++) { 15449 vector<string>::iterator i3; 15450 for(i3=(*i).access_grant_groups.begin(); i3!=(*i).access_grant_groups.end(); i3++) { 15451 if((!(*i3).compare(logic_eval((*i1).name,vars)) || !(*i3).compare("*")) && i2==line) { 15452 access=true; 15453 (*i).user_channel_def.groups.erase(i1); 15454 break; 15455 } 15456 } 15457 if(access) 15458 break; 15459 } 15460 if(!access) { 15461 string disp=lang_get_string(1,(*i).lang,123)+eol; 15462 int ec=0; 15463 dcc_send_msg((*i).socket,disp,ec); 15464 } 15465 (*i).edit_chan=200; 15466 } 15467 if(!got) { 15468 string disp=lang_get_string(1,(*i).lang,122)+eol; 15469 int ec=0; 15470 dcc_send_msg((*i).socket,disp,ec); 15471 } 15472 } 15473 if((*i).edit_chan==202) { 15474 string p=dcc_get_line((*i).in_buff); 15475 if(!p.compare("")) 15476 return; 15477 vector<string>::iterator i3; 15478 bool access=false; 15479 for(i3=(*i).access_grant_groups.begin(); i3!=(*i).access_grant_groups.end(); i3++) 15480 if(!(*i3).compare(p) || !(*i3).compare("*")) { 15481 access=true; 15482 break; 15483 } 15484 if(p.compare("*")) 15485 p=(string)"\""+p+"\""; 15486 if(!access) { 15487 string disp=lang_get_string(1,(*i).lang,123)+eol; 15488 int ec=0; 15489 dcc_send_msg((*i).socket,disp,ec); 15490 } else { 15491 s_group g; 15492 g.name=p; 15493 (*i).user_channel_def.groups.push_back(g); 15494 } 15495 (*i).edit_chan=200; 15496 return; 15497 } 15498 15499 // on_ircop 15500 if((*i).edit_chan==500) { 15501 string disp; 15502 int ec=0; 15503 15504 disp=lang_get_string(1,(*i).lang,447)+eol; // !!! 15505 dcc_send_msg((*i).socket,disp,ec); 15506 15507 vector<string>::iterator i3; 15508 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) { 15509 disp=*i3+eol; 15510 dcc_send_msg((*i).socket,disp,ec); 15511 } 15512 15513 disp=(string)"----------------"+eol; 15514 dcc_send_msg((*i).socket,disp,ec); 15515 15516 disp=lang_get_string(1,(*i).lang,448)+eol; // !!! 15517 dcc_send_msg((*i).socket,disp,ec); 15518 15519 disp=lang_get_string(1,(*i).lang,225)+eol; 15520 dcc_send_msg((*i).socket,disp,ec); 15521 15522 (*i).edit_chan++; 15523 } 15524 if((*i).edit_chan==501) { 15525 if(!dcc_can_unassign(i,eol,(*i).user_channel_def.on_ircop)) { 15526 int ec=0; 15527 string disp=lang_get_string(1,(*i).lang,592)+eol; 15528 dcc_send_msg((*i).socket,disp,ec); 15529 (*i).edit_chan++; 15530 return; 15531 } 15532 15533 string p=dcc_get_line((*i).in_buff); 15534 if(!p.compare("")) 15535 return; 15536 vector<string>::iterator i1; 15537 bool got=false; 15538 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++) 15539 if(!(*i1).compare(p)) 15540 got=true; 15541 if(!p.compare("..")) { 15542 got=true; 15543 string disp=lang_get_string(1,(*i).lang,132)+eol; 15544 int ec=0; 15545 dcc_send_msg((*i).socket,disp,ec); 15546 (*i).user_channel_def.on_ircop=""; 15547 (*i).edit_chan++; 15548 } else 15549 if(!p.compare(".")) { 15550 got=true; 15551 string disp=lang_get_string(1,(*i).lang,57)+eol; 15552 int ec=0; 15553 dcc_send_msg((*i).socket,disp,ec); 15554 (*i).edit_chan++; 15555 } else { 15556 string disp; 15557 if(got) 15558 disp=lang_get_string(1,(*i).lang,57)+eol; 15559 else 15560 disp=lang_get_string(1,(*i).lang,58)+eol; 15561 int ec=0; 15562 dcc_send_msg((*i).socket,disp,ec); 15563 if(got) 15564 (*i).user_channel_def.on_ircop=p; 15565 else { 15566 (*i).edit_chan--; 15567 return; 15568 } 15569 (*i).edit_chan++; 15570 } 15571 } 15572 15573 // on_privmsg 15574 if((*i).edit_chan==502) { 15575 string disp; 15576 int ec=0; 15577 15578 disp=lang_get_string(1,(*i).lang,575)+eol; // !!! 15579 dcc_send_msg((*i).socket,disp,ec); 15580 15581 vector<string>::iterator i3; 15582 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) { 15583 disp=*i3+eol; 15584 dcc_send_msg((*i).socket,disp,ec); 15585 } 15586 15587 disp=(string)"----------------"+eol; 15588 dcc_send_msg((*i).socket,disp,ec); 15589 15590 disp=lang_get_string(1,(*i).lang,576)+eol; // !!! 15591 dcc_send_msg((*i).socket,disp,ec); 15592 15593 disp=lang_get_string(1,(*i).lang,225)+eol; 15594 dcc_send_msg((*i).socket,disp,ec); 15595 15596 (*i).edit_chan++; 15597 } 15598 if((*i).edit_chan==503) { 15599 if(!dcc_can_unassign(i,eol,(*i).user_channel_def.on_privmsg)) { 15600 int ec=0; 15601 string disp=lang_get_string(1,(*i).lang,592)+eol; 15602 dcc_send_msg((*i).socket,disp,ec); 15603 (*i).edit_chan++; 15604 return; 15605 } 15606 15607 string p=dcc_get_line((*i).in_buff); 15608 if(!p.compare("")) 15609 return; 15610 vector<string>::iterator i1; 15611 bool got=false; 15612 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++) 15613 if(!(*i1).compare(p)) 15614 got=true; 15615 if(!p.compare("..")) { 15616 got=true; 15617 string disp=lang_get_string(1,(*i).lang,132)+eol; 15618 int ec=0; 15619 dcc_send_msg((*i).socket,disp,ec); 15620 (*i).user_channel_def.on_privmsg=""; 15621 (*i).edit_chan++; 15622 } else 15623 if(!p.compare(".")) { 15624 got=true; 15625 string disp=lang_get_string(1,(*i).lang,57)+eol; 15626 int ec=0; 15627 dcc_send_msg((*i).socket,disp,ec); 15628 (*i).edit_chan++; 15629 } else { 15630 string disp; 15631 if(got) 15632 disp=lang_get_string(1,(*i).lang,57)+eol; 15633 else 15634 disp=lang_get_string(1,(*i).lang,58)+eol; 15635 int ec=0; 15636 dcc_send_msg((*i).socket,disp,ec); 15637 if(got) 15638 (*i).user_channel_def.on_privmsg=p; 15639 else { 15640 (*i).edit_chan--; 15641 return; 15642 } 15643 (*i).edit_chan++; 15644 } 15645 } 15646 15647 // on_notice 15648 if((*i).edit_chan==504) { 15649 string disp; 15650 int ec=0; 15651 15652 disp=lang_get_string(1,(*i).lang,603)+eol; // !!! 15653 dcc_send_msg((*i).socket,disp,ec); 15654 15655 vector<string>::iterator i3; 15656 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) { 15657 disp=*i3+eol; 15658 dcc_send_msg((*i).socket,disp,ec); 15659 } 15660 15661 disp=(string)"----------------"+eol; 15662 dcc_send_msg((*i).socket,disp,ec); 15663 15664 disp=lang_get_string(1,(*i).lang,604)+eol; // !!! 15665 dcc_send_msg((*i).socket,disp,ec); 15666 15667 disp=lang_get_string(1,(*i).lang,225)+eol; 15668 dcc_send_msg((*i).socket,disp,ec); 15669 15670 (*i).edit_chan++; 15671 } 15672 if((*i).edit_chan==505) { 15673 if(!dcc_can_unassign(i,eol,(*i).user_channel_def.on_notice)) { 15674 int ec=0; 15675 string disp=lang_get_string(1,(*i).lang,592)+eol; 15676 dcc_send_msg((*i).socket,disp,ec); 15677 (*i).edit_chan++; 15678 return; 15679 } 15680 15681 string p=dcc_get_line((*i).in_buff); 15682 if(!p.compare("")) 15683 return; 15684 vector<string>::iterator i1; 15685 bool got=false; 15686 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++) 15687 if(!(*i1).compare(p)) 15688 got=true; 15689 if(!p.compare("..")) { 15690 got=true; 15691 string disp=lang_get_string(1,(*i).lang,132)+eol; 15692 int ec=0; 15693 dcc_send_msg((*i).socket,disp,ec); 15694 (*i).user_channel_def.on_notice=""; 15695 (*i).edit_chan++; 15696 } else 15697 if(!p.compare(".")) { 15698 got=true; 15699 string disp=lang_get_string(1,(*i).lang,57)+eol; 15700 int ec=0; 15701 dcc_send_msg((*i).socket,disp,ec); 15702 (*i).edit_chan++; 15703 } else { 15704 string disp; 15705 if(got) 15706 disp=lang_get_string(1,(*i).lang,57)+eol; 15707 else 15708 disp=lang_get_string(1,(*i).lang,58)+eol; 15709 int ec=0; 15710 dcc_send_msg((*i).socket,disp,ec); 15711 if(got) 15712 (*i).user_channel_def.on_notice=p; 15713 else { 15714 (*i).edit_chan--; 15715 return; 15716 } 15717 (*i).edit_chan++; 15718 } 15719 } 15720 15721 // on_part 15722 if((*i).edit_chan==506) { 15723 string disp; 15724 int ec=0; 15725 15726 disp=lang_get_string(1,(*i).lang,577)+eol; // !!! 15727 dcc_send_msg((*i).socket,disp,ec); 15728 15729 vector<string>::iterator i3; 15730 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) { 15731 disp=*i3+eol; 15732 dcc_send_msg((*i).socket,disp,ec); 15733 } 15734 15735 disp=(string)"----------------"+eol; 15736 dcc_send_msg((*i).socket,disp,ec); 15737 15738 disp=lang_get_string(1,(*i).lang,578)+eol; // !!! 15739 dcc_send_msg((*i).socket,disp,ec); 15740 15741 disp=lang_get_string(1,(*i).lang,225)+eol; 15742 dcc_send_msg((*i).socket,disp,ec); 15743 15744 (*i).edit_chan++; 15745 } 15746 if((*i).edit_chan==507) { 15747 if(!dcc_can_unassign(i,eol,(*i).user_channel_def.on_part)) { 15748 int ec=0; 15749 string disp=lang_get_string(1,(*i).lang,592)+eol; 15750 dcc_send_msg((*i).socket,disp,ec); 15751 (*i).edit_chan++; 15752 return; 15753 } 15754 15755 string p=dcc_get_line((*i).in_buff); 15756 if(!p.compare("")) 15757 return; 15758 vector<string>::iterator i1; 15759 bool got=false; 15760 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++) 15761 if(!(*i1).compare(p)) 15762 got=true; 15763 if(!p.compare("..")) { 15764 got=true; 15765 string disp=lang_get_string(1,(*i).lang,132)+eol; 15766 int ec=0; 15767 dcc_send_msg((*i).socket,disp,ec); 15768 (*i).user_channel_def.on_part=""; 15769 (*i).edit_chan++; 15770 } else 15771 if(!p.compare(".")) { 15772 got=true; 15773 string disp=lang_get_string(1,(*i).lang,57)+eol; 15774 int ec=0; 15775 dcc_send_msg((*i).socket,disp,ec); 15776 (*i).edit_chan++; 15777 } else { 15778 string disp; 15779 if(got) 15780 disp=lang_get_string(1,(*i).lang,57)+eol; 15781 else 15782 disp=lang_get_string(1,(*i).lang,58)+eol; 15783 int ec=0; 15784 dcc_send_msg((*i).socket,disp,ec); 15785 if(got) 15786 (*i).user_channel_def.on_part=p; 15787 else { 15788 (*i).edit_chan--; 15789 return; 15790 } 15791 (*i).edit_chan++; 15792 } 15793 } 15794 15795 // on_ctcp 15796 if((*i).edit_chan==508) { 15797 string disp; 15798 int ec=0; 15799 15800 disp=lang_get_string(1,(*i).lang,608)+eol; // !!! 15801 dcc_send_msg((*i).socket,disp,ec); 15802 15803 vector<string>::iterator i3; 15804 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) { 15805 disp=*i3+eol; 15806 dcc_send_msg((*i).socket,disp,ec); 15807 } 15808 15809 disp=(string)"----------------"+eol; 15810 dcc_send_msg((*i).socket,disp,ec); 15811 15812 disp=lang_get_string(1,(*i).lang,609)+eol; // !!! 15813 dcc_send_msg((*i).socket,disp,ec); 15814 15815 disp=lang_get_string(1,(*i).lang,225)+eol; 15816 dcc_send_msg((*i).socket,disp,ec); 15817 15818 (*i).edit_chan++; 15819 } 15820 if((*i).edit_chan==509) { 15821 if(!dcc_can_unassign(i,eol,(*i).user_channel_def.on_ctcp)) { 15822 int ec=0; 15823 string disp=lang_get_string(1,(*i).lang,592)+eol; 15824 dcc_send_msg((*i).socket,disp,ec); 15825 (*i).edit_chan++; 15826 return; 15827 } 15828 15829 string p=dcc_get_line((*i).in_buff); 15830 if(!p.compare("")) 15831 return; 15832 vector<string>::iterator i1; 15833 bool got=false; 15834 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++) 15835 if(!(*i1).compare(p)) 15836 got=true; 15837 if(!p.compare("..")) { 15838 got=true; 15839 string disp=lang_get_string(1,(*i).lang,132)+eol; 15840 int ec=0; 15841 dcc_send_msg((*i).socket,disp,ec); 15842 (*i).user_channel_def.on_ctcp=""; 15843 (*i).edit_chan++; 15844 } else 15845 if(!p.compare(".")) { 15846 got=true; 15847 string disp=lang_get_string(1,(*i).lang,57)+eol; 15848 int ec=0; 15849 dcc_send_msg((*i).socket,disp,ec); 15850 (*i).edit_chan++; 15851 } else { 15852 string disp; 15853 if(got) 15854 disp=lang_get_string(1,(*i).lang,57)+eol; 15855 else 15856 disp=lang_get_string(1,(*i).lang,58)+eol; 15857 int ec=0; 15858 dcc_send_msg((*i).socket,disp,ec); 15859 if(got) 15860 (*i).user_channel_def.on_ctcp=p; 15861 else { 15862 (*i).edit_chan--; 15863 return; 15864 } 15865 (*i).edit_chan++; 15866 } 15867 } 15868 15869 // on_dynamic_ban 15870 if((*i).edit_chan==510) { 15871 string disp; 15872 int ec=0; 15873 15874 disp=lang_get_string(1,(*i).lang,675)+eol; // !!! 15875 dcc_send_msg((*i).socket,disp,ec); 15876 15877 vector<string>::iterator i3; 15878 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) { 15879 disp=*i3+eol; 15880 dcc_send_msg((*i).socket,disp,ec); 15881 } 15882 15883 disp=(string)"----------------"+eol; 15884 dcc_send_msg((*i).socket,disp,ec); 15885 15886 disp=lang_get_string(1,(*i).lang,676)+eol; // !!! 15887 dcc_send_msg((*i).socket,disp,ec); 15888 15889 disp=lang_get_string(1,(*i).lang,225)+eol; 15890 dcc_send_msg((*i).socket,disp,ec); 15891 15892 (*i).edit_chan++; 15893 } 15894 if((*i).edit_chan==511) { 15895 if(!dcc_can_unassign(i,eol,(*i).user_channel_def.on_dynamic_ban)) { 15896 int ec=0; 15897 string disp=lang_get_string(1,(*i).lang,592)+eol; 15898 dcc_send_msg((*i).socket,disp,ec); 15899 (*i).edit_chan++; 15900 return; 15901 } 15902 15903 string p=dcc_get_line((*i).in_buff); 15904 if(!p.compare("")) 15905 return; 15906 vector<string>::iterator i1; 15907 bool got=false; 15908 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++) 15909 if(!(*i1).compare(p)) 15910 got=true; 15911 if(!p.compare("..")) { 15912 got=true; 15913 string disp=lang_get_string(1,(*i).lang,132)+eol; 15914 int ec=0; 15915 dcc_send_msg((*i).socket,disp,ec); 15916 (*i).user_channel_def.on_dynamic_ban=""; 15917 (*i).edit_chan++; 15918 } else 15919 if(!p.compare(".")) { 15920 got=true; 15921 string disp=lang_get_string(1,(*i).lang,57)+eol; 15922 int ec=0; 15923 dcc_send_msg((*i).socket,disp,ec); 15924 (*i).edit_chan++; 15925 } else { 15926 string disp; 15927 if(got) 15928 disp=lang_get_string(1,(*i).lang,57)+eol; 15929 else 15930 disp=lang_get_string(1,(*i).lang,58)+eol; 15931 int ec=0; 15932 dcc_send_msg((*i).socket,disp,ec); 15933 if(got) 15934 (*i).user_channel_def.on_dynamic_ban=p; 15935 else { 15936 (*i).edit_chan--; 15937 return; 15938 } 15939 (*i).edit_chan++; 15940 } 15941 } 15942 15943 // on_server_msg 15944 if((*i).edit_chan==512) { 15945 string disp; 15946 int ec=0; 15947 15948 disp=lang_get_string(1,(*i).lang,677)+eol; // !!! 15949 dcc_send_msg((*i).socket,disp,ec); 15950 15951 vector<string>::iterator i3; 15952 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) { 15953 disp=*i3+eol; 15954 dcc_send_msg((*i).socket,disp,ec); 15955 } 15956 15957 disp=(string)"----------------"+eol; 15958 dcc_send_msg((*i).socket,disp,ec); 15959 15960 disp=lang_get_string(1,(*i).lang,678)+eol; // !!! 15961 dcc_send_msg((*i).socket,disp,ec); 15962 15963 disp=lang_get_string(1,(*i).lang,225)+eol; 15964 dcc_send_msg((*i).socket,disp,ec); 15965 15966 (*i).edit_chan++; 15967 } 15968 if((*i).edit_chan==513) { 15969 if(!dcc_can_unassign(i,eol,(*i).user_channel_def.on_server_msg)) { 15970 int ec=0; 15971 string disp=lang_get_string(1,(*i).lang,592)+eol; 15972 dcc_send_msg((*i).socket,disp,ec); 15973 (*i).edit_chan++; 15974 return; 15975 } 15976 15977 string p=dcc_get_line((*i).in_buff); 15978 if(!p.compare("")) 15979 return; 15980 vector<string>::iterator i1; 15981 bool got=false; 15982 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++) 15983 if(!(*i1).compare(p)) 15984 got=true; 15985 if(!p.compare("..")) { 15986 got=true; 15987 string disp=lang_get_string(1,(*i).lang,132)+eol; 15988 int ec=0; 15989 dcc_send_msg((*i).socket,disp,ec); 15990 (*i).user_channel_def.on_server_msg=""; 15991 (*i).edit_chan++; 15992 } else 15993 if(!p.compare(".")) { 15994 got=true; 15995 string disp=lang_get_string(1,(*i).lang,57)+eol; 15996 int ec=0; 15997 dcc_send_msg((*i).socket,disp,ec); 15998 (*i).edit_chan++; 15999 } else { 16000 string disp; 16001 if(got) 16002 disp=lang_get_string(1,(*i).lang,57)+eol; 16003 else 16004 disp=lang_get_string(1,(*i).lang,58)+eol; 16005 int ec=0; 16006 dcc_send_msg((*i).socket,disp,ec); 16007 if(got) 16008 (*i).user_channel_def.on_server_msg=p; 16009 else { 16010 (*i).edit_chan--; 16011 return; 16012 } 16013 (*i).edit_chan++; 16014 } 16015 } 16016 16017 if((*i).edit_chan==514) { 16018 (*i).edit_chan=200; 16019 return; 16020 } 16021 16022 // dynamic bans editors 16023 if((*i).edit_chan==600) { 16024 string disp=lang_get_string(1,(*i).lang,587)+eol; 16025 int ec=0; 16026 dcc_send_msg((*i).socket,disp,ec); 16027 disp=""; 16028 int i2=1; 16029 vector<string>::iterator i1; 16030 for(i1=(*i).user_channel_def.dynbans_editors.begin(); i1!=(*i).user_channel_def.dynbans_editors.end(); i1++, i2++) { 16031 char tmp[64]; 16032 ltoa(i2,tmp,10); 16033 disp+=lang_get_string(1,(*i).lang,593); 16034 if(i2<10) 16035 disp+="0"; 16036 if(i2<100) 16037 disp+="0"; 16038 disp+=(string)tmp+": "+(*i1); 16039 disp+=" ("; 16040 vector<string>::iterator i3; 16041 bool access=false; 16042 map<string,string> vars; 16043 for(i3=(*i).access_grant_groups.begin(); i3!=(*i).access_grant_groups.end(); i3++) 16044 if(!(*i3).compare(logic_eval(*i1,vars))) { 16045 access=true; 16046 break; 16047 } 16048 disp+=access?lang_get_string(1,(*i).lang,120):lang_get_string(1,(*i).lang,121); 16049 disp+=")"; 16050 disp+=eol; 16051 } 16052 dcc_send_msg((*i).socket,disp,ec); 16053 disp=lang_get_string(1,(*i).lang,588)+eol; 16054 dcc_send_msg((*i).socket,disp,ec); 16055 (*i).edit_chan++; 16056 return; 16057 } 16058 if((*i).edit_chan==601) { 16059 string p=dcc_get_line((*i).in_buff); 16060 if(!p.compare("")) 16061 return; 16062 bool got=false; 16063 if(!p.compare(".")) { 16064 got=true; 16065 (*i).edit_chan=50; 16066 } 16067 if(!p.compare(".add")) { 16068 got=true; 16069 string disp=lang_get_string(1,(*i).lang,211)+eol; 16070 int ec=0; 16071 dcc_send_msg((*i).socket,disp,ec); 16072 16073 vector<string>::iterator i1; 16074 for(i1=(*i).access_grant_groups.begin(); i1!=(*i).access_grant_groups.end(); i1++) { 16075 disp=(*i1)+eol; 16076 dcc_send_msg((*i).socket,disp,ec); 16077 } 16078 16079 (*i).edit_chan=602; 16080 return; 16081 } 16082 string p1, p2; 16083 int pos=0; 16084 for(unsigned int i1=0; i1<p.length(); i1++) { 16085 if(p[i1]==0x20) { 16086 pos=1; 16087 continue; 16088 } 16089 if(pos==0) 16090 p1+=p[i1]; 16091 if(pos==1) 16092 p2+=p[i1]; 16093 } 16094 if(!p1.compare(".remove")) { 16095 got=true; 16096 int line=atol(p2.c_str()); 16097 16098 int i2=1; 16099 vector<string>::iterator i1; 16100 for(i1=(*i).user_channel_def.dynbans_editors.begin(); i1!=(*i).user_channel_def.dynbans_editors.end(); i1++, i2++) 16101 if(i2==line) { 16102 bool access=false; 16103 map<string,string> vars; 16104 vector<string>::iterator i3; 16105 for(i3=(*i).access_grant_groups.begin(); i3!=(*i).access_grant_groups.end(); i3++) 16106 if(!(*i3).compare(logic_eval(*i1,vars))) { 16107 access=true; 16108 break; 16109 } 16110 if(access) 16111 (*i).user_channel_def.dynbans_editors.erase(i1); 16112 else { 16113 string disp=lang_get_string(1,(*i).lang,121)+eol; 16114 int ec=0; 16115 dcc_send_msg((*i).socket,disp,ec); 16116 } 16117 break; 16118 } 16119 (*i).edit_chan=600; 16120 } 16121 if(!got) { 16122 string disp=lang_get_string(1,(*i).lang,588)+eol; 16123 int ec=0; 16124 dcc_send_msg((*i).socket,disp,ec); 16125 (*i).edit_chan=600; 16126 } 16127 } 16128 if((*i).edit_chan==602) { 16129 string p=dcc_get_line((*i).in_buff); 16130 if(!p.compare("")) 16131 return; 16132 16133 vector<string>::iterator i1; 16134 bool got=false; 16135 for(i1=(*i).access_grant_groups.begin(); i1!=(*i).access_grant_groups.end(); i1++) 16136 if(!(*i1).compare(p)) 16137 got=true; 16138 string disp; 16139 if(got) 16140 disp=lang_get_string(1,(*i).lang,228)+eol; 16141 else 16142 disp=lang_get_string(1,(*i).lang,214)+eol; 16143 int ec=0; 16144 dcc_send_msg((*i).socket,disp,ec); 16145 p=(string)"\""+p+"\""; 16146 if(got) 16147 (*i).user_channel_def.dynbans_editors.push_back(p); 16148 16149 (*i).edit_chan=600; 16150 } 16151 }
Here is the call graph for this function: ![]() |
|
Should be called in a loop to process edit channel's dynamic bans in DCC CHAT/telnet connections.
Definition at line 14633 of file dcc.cpp. References cmp_strings_case_insensitive(), dcc_get_line(), dcc_send_msg(), s_channel_def::dynamic_bans, s_channel_def::dynbans_editors, lang_get_string(), logic_eval(), logic_partyline_get_channel_def(), r_channel_defs, and r_users. Referenced by dcc_loop(). 14634 { 14635 int ec=0; 14636 14637 map<string,string> vars; 14638 if((*i).dynbans==1) { 14639 s_channel_def chd; 14640 bool got=logic_partyline_get_channel_def((*i).dynbans_channel,chd); 14641 bool access=false; 14642 if(got) { 14643 vector<string>::iterator i1; 14644 for(i1=chd.dynbans_editors.begin(); i1!=chd.dynbans_editors.end(); i1++) { 14645 vector<s_user>::iterator i2; 14646 for(i2=r_users.begin(); i2!=r_users.end(); i2++) { 14647 if(!(*i2).name.compare((*i).as_in_logic)) { 14648 vector<s_group>::iterator i3; 14649 for(i3=(*i2).groups.begin(); i3!=(*i2).groups.end(); i3++) { 14650 if(!logic_eval(*i1,vars).compare(logic_eval((*i3).name,vars))) { 14651 access=true; 14652 break; 14653 } 14654 } 14655 } 14656 if(access) 14657 break; 14658 } 14659 if(access) 14660 break; 14661 } 14662 } 14663 if(!got || !access) { 14664 (*i).dynbans=0; 14665 string disp=lang_get_string(1,(*i).lang,581)+eol; 14666 int ec=0; 14667 dcc_send_msg((*i).socket,disp,ec); 14668 return; 14669 } 14670 14671 (*i).dynbans++; 14672 return; 14673 } 14674 14675 if((*i).dynbans==2) { 14676 s_channel_def chd; 14677 bool got=logic_partyline_get_channel_def((*i).dynbans_channel,chd); 14678 if(!got) { 14679 // huh?! 14680 (*i).dynbans=0; 14681 return; 14682 } 14683 14684 string disp=lang_get_string(1,(*i).lang,582)+eol; 14685 map<string,string>::iterator i1; 14686 for(i1=chd.dynamic_bans.begin(); i1!=chd.dynamic_bans.end(); i1++) { 14687 disp+=lang_get_string(1,(*i).lang,583); 14688 disp+=" "; 14689 disp+=(*i1).first; 14690 disp+=" "; 14691 disp+=lang_get_string(1,(*i).lang,584); 14692 disp+=(*i1).second; 14693 disp+=eol; 14694 } 14695 disp+=lang_get_string(1,(*i).lang,585); 14696 dcc_send_msg((*i).socket,disp,ec); 14697 (*i).dynbans++; 14698 return; 14699 } 14700 14701 if((*i).dynbans==3) { 14702 string p=dcc_get_line((*i).in_buff); 14703 if(!p.compare("")) 14704 return; 14705 14706 bool got=false; 14707 14708 vector<s_channel_def>::iterator iii; 14709 for(iii=r_channel_defs.begin(); iii!=r_channel_defs.end(); iii++) { 14710 if(!cmp_strings_case_insensitive((*iii).channel_name,(*i).dynbans_channel)) { 14711 got=true; 14712 break; 14713 } 14714 } 14715 14716 if(!got) { 14717 // huh?! 14718 (*i).dynbans=0; 14719 return; 14720 } 14721 14722 if(p.length()>=3 && p[0]=='.' && p[1]=='-' && p[2]==0x20) { 14723 string mask=p; 14724 if(mask.find(" ",0)!=string::npos) 14725 mask.erase(0,mask.find(" ",0)+1); 14726 14727 mask=(string)"\""+mask+"\""; 14728 14729 map<string,string>::iterator i1; 14730 erase_again: 14731 for(i1=(*iii).dynamic_bans.begin(); i1!=(*iii).dynamic_bans.end(); i1++) { 14732 if(!(*i1).first.compare(mask)) { 14733 (*iii).dynamic_bans.erase(i1); 14734 goto erase_again; 14735 } 14736 } 14737 14738 (*i).dynbans=2; 14739 return; 14740 } 14741 14742 if(p.length()>=3 && p[0]=='.' && p[1]=='+' && p[2]==0x20) { 14743 string mask=p; 14744 if(mask.find(" ",0)!=string::npos) 14745 mask.erase(0,mask.find(" ",0)+1); 14746 14747 if(mask.find(" ",0)==string::npos) 14748 mask+=" "; 14749 14750 string reason=mask; 14751 if(mask.find(" ",0)!=string::npos) 14752 mask.erase(mask.find(" ",0),mask.length()-mask.find(" ",0)); 14753 if(reason.find(" ",0)!=string::npos) 14754 reason.erase(0,reason.find(" ",0)+1); 14755 14756 mask=(string)"\""+mask+"\""; 14757 14758 map<string,string>::iterator i1; 14759 erase_ban_again: 14760 for(i1=(*iii).dynamic_bans.begin(); i1!=(*iii).dynamic_bans.end(); i1++) { 14761 if(!(*i1).first.compare(mask)) { 14762 (*iii).dynamic_bans.erase(i1); 14763 goto erase_ban_again; 14764 } 14765 } 14766 14767 pair<string,string> p; 14768 p.first=mask; 14769 p.second=(string)"\""+reason+"\""; 14770 (*iii).dynamic_bans.insert(p); 14771 14772 (*i).dynbans=2; 14773 return; 14774 } 14775 14776 if(!p.compare(".")) { 14777 string disp=lang_get_string(1,(*i).lang,586)+eol; 14778 dcc_send_msg((*i).socket,disp,ec); 14779 (*i).dynbans=0; 14780 return; 14781 } 14782 14783 (*i).dynbans=2; 14784 return; 14785 } 14786 }
Here is the call graph for this function: ![]() |
|
Should be called in a loop to process new / edit procedure commands in DCC CHAT/telnet connections.
Definition at line 14120 of file dcc.cpp. References dcc_get_line(), dcc_send_msg(), lang_get_string(), lang_subst(), logic_eval(), logic_list_proc(), logic_parse_proc(), ltoa(), and r_procedures. Referenced by dcc_loop(). 14121 { 14122 if((*i).edit_proc==1) { 14123 (*i).edit_proc_addbefore_line=-1; 14124 (*i).edit_proc_addafter_line=-1; 14125 (*i).proc_error=""; 14126 (*i).proc_to_delete=""; 14127 (*i).plus_proc=false; 14128 14129 string p=dcc_get_line((*i).in_buff); 14130 if(!p.compare("")) 14131 return; 14132 vector<string>::iterator i1; 14133 bool got=false; 14134 for(i1=(*i).access_to_procs.begin(); i1!=(*i).access_to_procs.end(); i1++) 14135 if(!(*i1).compare(p)) 14136 got=true; 14137 if(!got) { 14138 string disp=lang_get_string(1,(*i).lang,137)+eol; 14139 int ec=0; 14140 dcc_send_msg((*i).socket,disp,ec); 14141 return; 14142 } 14143 (*i).proc_name=p; 14144 logic_list_proc((*i).proc_name,(*i).proc_commands,(*i).proc_decl,(*i).proc_groups); 14145 vector<string>::iterator i3; 14146 map<string,string> vars; 14147 for(i3=(*i).proc_groups.begin(); i3!=(*i).proc_groups.end(); i3++) 14148 *i3=logic_eval(*i3,vars); 14149 list<string>::iterator i2=(*i).proc_commands.end(); 14150 i2--; 14151 if(i2!=(*i).proc_commands.begin()) 14152 (*i).proc_commands.erase(i2); // erase trailing "}" 14153 (*i).edit_proc++; 14154 } 14155 if((*i).edit_proc==2) { 14156 string disp=lang_get_string(1,(*i).lang,138)+eol; 14157 disp=lang_subst(disp,(*i).proc_name); 14158 int ec=0; 14159 dcc_send_msg((*i).socket,disp,ec); 14160 disp=""; 14161 int i2=1; 14162 list<string>::iterator i1; 14163 for(i1=(*i).proc_commands.begin(); i1!=(*i).proc_commands.end(); i1++, i2++) { 14164 char tmp[64]; 14165 ltoa(i2,tmp,10); 14166 disp+=lang_get_string(1,(*i).lang,593); 14167 if(i2<10) 14168 disp+="0"; 14169 if(i2<100) 14170 disp+="0"; 14171 disp+=(string)tmp+": "+*i1+eol; 14172 } 14173 dcc_send_msg((*i).socket,disp,ec); 14174 disp=lang_get_string(1,(*i).lang,139)+eol; 14175 dcc_send_msg((*i).socket,disp,ec); 14176 if((*i).proc_error.compare("")) { 14177 disp=(*i).proc_error; 14178 (*i).proc_error=""; 14179 dcc_send_msg((*i).socket,disp,ec); 14180 } 14181 (*i).edit_proc++; 14182 } 14183 if((*i).edit_proc==3) { 14184 string p=dcc_get_line((*i).in_buff); 14185 if(!p.compare("")) 14186 return; 14187 bool got=false; 14188 if(!p.compare(".")) { 14189 got=true; 14190 (*i).edit_proc=6; 14191 return; 14192 } 14193 14194 string p1, p2; 14195 int pos=0; 14196 for(unsigned int i1=0; i1<p.length(); i1++) { 14197 if(p[i1]==0x20) { 14198 pos=1; 14199 continue; 14200 } 14201 if(pos==0) 14202 p1+=p[i1]; 14203 if(pos==1) 14204 p2+=p[i1]; 14205 } 14206 14207 if(!p1.compare(".addbefore")) { 14208 got=true; 14209 int line=atol(p2.c_str()); 14210 (*i).edit_proc_addbefore_line=line; 14211 14212 string disp=lang_get_string(1,(*i).lang,140)+eol; 14213 char tmp[64]; 14214 ltoa(line,tmp,10); 14215 disp=lang_subst(disp,tmp); 14216 int ec=0; 14217 dcc_send_msg((*i).socket,disp,ec); 14218 14219 (*i).edit_proc++; 14220 } 14221 if(!p1.compare(".addafter")) { 14222 got=true; 14223 int line=atol(p2.c_str()); 14224 (*i).edit_proc_addafter_line=line; 14225 14226 string disp=lang_get_string(1,(*i).lang,141)+eol; 14227 char tmp[64]; 14228 ltoa(line,tmp,10); 14229 disp=lang_subst(disp,tmp); 14230 int ec=0; 14231 dcc_send_msg((*i).socket,disp,ec); 14232 14233 (*i).edit_proc++; 14234 } 14235 if(!p1.compare(".remove")) { 14236 got=true; 14237 int line=atol(p2.c_str()); 14238 14239 int i2=1; 14240 list<string>::iterator i1; 14241 for(i1=(*i).proc_commands.begin(); i1!=(*i).proc_commands.end(); i1++, i2++) { 14242 if(i2==line) { 14243 (*i).proc_commands.erase(i1); 14244 break; 14245 } 14246 } 14247 (*i).edit_proc=2; 14248 } 14249 if(!p1.compare(".replace")) { 14250 got=true; 14251 int line=atol(p2.c_str()); 14252 (*i).edit_proc_replace_line=line; 14253 14254 string disp=lang_get_string(1,(*i).lang,141)+eol; 14255 char tmp[64]; 14256 ltoa(line,tmp,10); 14257 disp=lang_subst(disp,tmp); 14258 int ec=0; 14259 dcc_send_msg((*i).socket,disp,ec); 14260 14261 (*i).edit_proc=5; 14262 } 14263 if(!p.compare(".groups")) { 14264 got=true; 14265 14266 (*i).edit_proc=7; 14267 } 14268 if(!got) { 14269 string disp=lang_get_string(1,(*i).lang,139)+eol; 14270 int ec=0; 14271 dcc_send_msg((*i).socket,disp,ec); 14272 } 14273 } 14274 if((*i).edit_proc==4) { 14275 string p=dcc_get_line((*i).in_buff); 14276 if(!p.compare("")) 14277 return; 14278 bool before=(*i).edit_proc_addbefore_line!=-1; 14279 int line; 14280 if(before) 14281 line=(*i).edit_proc_addbefore_line; 14282 else 14283 line=(*i).edit_proc_addafter_line; 14284 int i2=1; 14285 list<string>::iterator i1; 14286 bool got=false; 14287 for(i1=(*i).proc_commands.begin(); i1!=(*i).proc_commands.end(); i1++, i2++) { 14288 if(before && i2==line) { 14289 (*i).proc_commands.insert(i1,p); 14290 got=true; 14291 break; 14292 } 14293 if(!before && i2==line+1) { 14294 (*i).proc_commands.insert(i1,p); 14295 got=true; 14296 break; 14297 } 14298 } 14299 if(!got) 14300 (*i).proc_commands.push_back(p); 14301 (*i).edit_proc=2; 14302 } 14303 if((*i).edit_proc==5) { 14304 string p=dcc_get_line((*i).in_buff); 14305 if(!p.compare("")) 14306 return; 14307 int line=(*i).edit_proc_replace_line; 14308 int i2=1; 14309 list<string>::iterator i1; 14310 for(i1=(*i).proc_commands.begin(); i1!=(*i).proc_commands.end(); i1++, i2++) { 14311 if(i2==line) { 14312 *i1=p; 14313 break; 14314 } 14315 } 14316 (*i).edit_proc=2; 14317 } 14318 if((*i).edit_proc==6) { 14319 string disp=lang_get_string(1,(*i).lang,142)+eol; 14320 disp=lang_subst(disp,(*i).proc_name); 14321 int ec=0; 14322 dcc_send_msg((*i).socket,disp,ec); 14323 14324 int error_line; 14325 const char* error_reason=NULL; 14326 logic_parse_proc(error_reason,error_line,(*i).proc_commands,false,(*i).proc_decl,(*i).proc_groups); 14327 14328 if(error_line!=0) { 14329 disp=lang_get_string(1,(*i).lang,143)+eol; 14330 char tmp[64]; 14331 ltoa(error_line,tmp,10); 14332 disp=lang_subst(disp,tmp); 14333 if(error_reason!=NULL) { 14334 string d=lang_get_string(1,(*i).lang,144)+eol; 14335 disp+=lang_subst(d,error_reason); 14336 } 14337 (*i).proc_error=disp; 14338 (*i).edit_proc=2; 14339 } else { 14340 { 14341 // for .+proc 14342 if(!(*i).proc_to_delete.empty()) { 14343 vector<s_procedure>::iterator i1; 14344 for(i1=r_procedures.begin(); i1!=r_procedures.end(); i1++) 14345 if(!(*i1).name.compare((*i).proc_to_delete)) { 14346 r_procedures.erase(i1); 14347 break; 14348 } 14349 } 14350 } 14351 14352 /*if(!(*i).plus_proc) 14353 (*i).proc_commands.push_back("}"); // add removed bracket*/ 14354 time_t now; 14355 time(&now); 14356 char tmp[128]; 14357 ltoa((long)now,tmp,10); 14358 (*i).proc_commands.push_front((string)"last_changed "+tmp); 14359 { 14360 vector<string>::iterator i1; 14361 for(i1=(*i).proc_groups.begin(); i1!=(*i).proc_groups.end(); i1++) 14362 (*i1)=(string)"\""+(*i1)+"\""; 14363 } 14364 logic_parse_proc(error_reason,error_line,(*i).proc_commands,true,(*i).proc_decl,(*i).proc_groups); 14365 disp=lang_get_string(1,(*i).lang,73)+eol; 14366 dcc_send_msg((*i).socket,disp,ec); 14367 (*i).edit_proc=0; 14368 } 14369 } 14370 // groups 14371 if((*i).edit_proc==7) { 14372 string disp=lang_get_string(1,(*i).lang,119)+eol; 14373 int ec=0; 14374 dcc_send_msg((*i).socket,disp,ec); 14375 disp=""; 14376 int i2=1; 14377 vector<string>::iterator i1; 14378 for(i1=(*i).proc_groups.begin(); i1!=(*i).proc_groups.end(); i1++, i2++) { 14379 char tmp[64]; 14380 ltoa(i2,tmp,10); 14381 disp+=lang_get_string(1,(*i).lang,593); 14382 if(i2<10) 14383 disp+="0"; 14384 if(i2<100) 14385 disp+="0"; 14386 bool access=false; 14387 vector<string>::iterator i3; 14388 for(i3=(*i).access_grant_groups.begin(); i3!=(*i).access_grant_groups.end(); i3++) { 14389 if(!(*i3).compare(*i1) || !(*i3).compare("*")) { 14390 access=true; 14391 break; 14392 } 14393 } 14394 char tmp2[128]; 14395 if(access) 14396 strcpy(tmp2,lang_get_string(1,(*i).lang,120).c_str()); 14397 else 14398 strcpy(tmp2,lang_get_string(1,(*i).lang,121).c_str()); 14399 disp+=(string)tmp+": "+*i1+" = "+tmp2+eol; 14400 } 14401 dcc_send_msg((*i).socket,disp,ec); 14402 disp=lang_get_string(1,(*i).lang,122)+eol; 14403 dcc_send_msg((*i).socket,disp,ec); 14404 (*i).edit_proc++; 14405 } 14406 if((*i).edit_proc==8) { 14407 string p=dcc_get_line((*i).in_buff); 14408 if(!p.compare("")) 14409 return; 14410 bool got=false; 14411 if(!p.compare(".")) { 14412 got=true; 14413 (*i).edit_proc=2; 14414 return; 14415 } 14416 if(!p.compare(".add")) { 14417 got=true; 14418 string disp=lang_get_string(1,(*i).lang,124)+eol; 14419 int ec=0; 14420 dcc_send_msg((*i).socket,disp,ec); 14421 14422 disp=""; 14423 vector<string>::iterator i3; 14424 for(i3=(*i).access_grant_groups.begin(); i3!=(*i).access_grant_groups.end(); i3++) 14425 disp+=*i3+eol; 14426 if((*i).access_grant_groups.begin()==(*i).access_grant_groups.end()) { 14427 disp=lang_get_string(1,(*i).lang,124)+eol; 14428 dcc_send_msg((*i).socket,disp,ec); 14429 (*i).edit_proc=2; 14430 } else { 14431 dcc_send_msg((*i).socket,disp,ec); 14432 disp=lang_get_string(1,(*i).lang,125)+eol; 14433 dcc_send_msg((*i).socket,disp,ec); 14434 (*i).edit_proc=9; 14435 } 14436 } 14437 string p1, p2; 14438 int pos=0; 14439 for(unsigned int i1=0; i1<p.length(); i1++) { 14440 if(p[i1]==0x20) { 14441 pos=1; 14442 continue; 14443 } 14444 if(pos==0) 14445 p1+=p[i1]; 14446 if(pos==1) 14447 p2+=p[i1]; 14448 } 14449 if(!p1.compare(".remove")) { 14450 got=true; 14451 int line=atol(p2.c_str()); 14452 14453 int i2=1; 14454 vector<string>::iterator i1; 14455 bool access=false; 14456 for(i1=(*i).proc_groups.begin(); i1!=(*i).proc_groups.end(); i1++, i2++) { 14457 vector<string>::iterator i3; 14458 for(i3=(*i).access_grant_groups.begin(); i3!=(*i).access_grant_groups.end(); i3++) { 14459 if((!(*i3).compare(*i1) || !(*i3).compare("*")) && i2==line) { 14460 access=true; 14461 (*i).proc_groups.erase(i1); 14462 break; 14463 } 14464 } 14465 if(access) 14466 break; 14467 } 14468 if(!access) { 14469 string disp=lang_get_string(1,(*i).lang,123)+eol; 14470 int ec=0; 14471 dcc_send_msg((*i).socket,disp,ec); 14472 } 14473 (*i).edit_proc=2; 14474 } 14475 if(!got) { 14476 string disp=lang_get_string(1,(*i).lang,122)+eol; 14477 int ec=0; 14478 dcc_send_msg((*i).socket,disp,ec); 14479 } 14480 } 14481 if((*i).edit_proc==9) { 14482 string p=dcc_get_line((*i).in_buff); 14483 if(!p.compare("")) 14484 return; 14485 vector<string>::iterator i3; 14486 bool access=false; 14487 for(i3=(*i).access_grant_groups.begin(); i3!=(*i).access_grant_groups.end(); i3++) 14488 if(!(*i3).compare(p) || !(*i3).compare("*")) { 14489 access=true; 14490 break; 14491 } 14492 if(p.compare("*")) 14493 p=(string)"\""+p+"\""; 14494 if(!access) { 14495 string disp=lang_get_string(1,(*i).lang,123)+eol; 14496 int ec=0; 14497 dcc_send_msg((*i).socket,disp,ec); 14498 } else { 14499 (*i).proc_groups.push_back(p); 14500 } 14501 (*i).edit_proc=2; 14502 } 14503 14504 // .+proc 14505 if((*i).edit_proc==1000) { 14506 (*i).edit_proc_addbefore_line=-1; 14507 (*i).edit_proc_addafter_line=-1; 14508 (*i).proc_error=""; 14509 (*i).proc_to_delete=""; 14510 (*i).proc_name=""; 14511 (*i).proc_decl=""; 14512 (*i).plus_proc=true; 14513 string disp=lang_get_string(1,(*i).lang,373)+eol; 14514 int ec=0; 14515 dcc_send_msg((*i).socket,disp,ec); 14516 (*i).edit_proc++; 14517 return; 14518 } 14519 if((*i).edit_proc==1001) { 14520 string p=dcc_get_line((*i).in_buff); 14521 if(!p.compare("")) 14522 return; 14523 14524 (*i).proc_name=p; 14525 (*i).proc_decl=p; 14526 14527 string wo_decl=p; 14528 if(wo_decl.find("(",0)!=string::npos) 14529 wo_decl.erase(wo_decl.find("(",0),wo_decl.length()-wo_decl.find("(",0)); 14530 else { 14531 string disp=lang_get_string(1,(*i).lang,374)+eol; 14532 int ec=0; 14533 dcc_send_msg((*i).socket,disp,ec); 14534 (*i).edit_proc=1000; 14535 return; 14536 } 14537 14538 vector<s_procedure>::iterator i1; 14539 bool got=false; 14540 for(i1=r_procedures.begin(); i1!=r_procedures.end(); i1++) { 14541 string pn=(*i1).name; 14542 if(pn.find("(",0)!=string::npos) 14543 pn.erase(pn.find("(",0),pn.length()-pn.find("(",0)); 14544 if(!pn.compare(wo_decl)) { 14545 got=true; 14546 break; 14547 } 14548 } 14549 14550 if(got) { 14551 bool access=false; 14552 vector<string>::iterator i3; 14553 for(i3=(*i).access_to_procs.begin(); i3!=(*i).access_to_procs.end(); i3++) { 14554 string pn=*i3; 14555 if(pn.find("(",0)!=string::npos) 14556 pn.erase(pn.find("(",0),pn.length()-pn.find("(",0)); 14557 14558 if(!(*i3).compare(wo_decl) || !(*i3).compare("*")) { 14559 access=true; 14560 break; 14561 } 14562 } 14563 if(!access) { 14564 string disp=lang_get_string(1,(*i).lang,123)+eol; 14565 int ec=0; 14566 dcc_send_msg((*i).socket,disp,ec); 14567 (*i).edit_proc=0; 14568 return; 14569 } else { 14570 (*i).proc_to_delete=(*i1).name; 14571 string disp=lang_subst(lang_get_string(1,(*i).lang,375),(*i).proc_to_delete)+eol; 14572 int ec=0; 14573 dcc_send_msg((*i).socket,disp,ec); 14574 (*i).edit_proc=1500; 14575 return; 14576 } 14577 } else 14578 (*i).edit_proc++; 14579 return; 14580 } 14581 14582 if((*i).edit_proc==1002) { 14583 string disp=lang_get_string(1,(*i).lang,376)+eol; 14584 int ec=0; 14585 dcc_send_msg((*i).socket,disp,ec); 14586 (*i).edit_proc++; 14587 14588 (*i).proc_commands.clear(); 14589 return; 14590 } 14591 if((*i).edit_proc==1003) { 14592 string p=dcc_get_line((*i).in_buff); 14593 if(!p.compare("")) 14594 return; 14595 14596 if(p.compare(".")) 14597 (*i).proc_commands.push_back(p); 14598 else { 14599 (*i).edit_proc=2; 14600 return; 14601 } 14602 } 14603 14604 if((*i).edit_proc==1500) { 14605 string p=dcc_get_line((*i).in_buff); 14606 if(!p.compare("")) 14607 return; 14608 14609 if(p.compare("y") && p.compare("n") && p.compare("Y") && p.compare("N")) { 14610 string disp=lang_subst(lang_get_string(1,(*i).lang,375),(*i).proc_name)+eol; 14611 int ec=0; 14612 dcc_send_msg((*i).socket,disp,ec); 14613 } else { 14614 if(!p.compare("n") || !p.compare("N")) { 14615 (*i).edit_proc=0; 14616 return; 14617 } else { 14618 (*i).edit_proc=1002; 14619 return; 14620 } 14621 } 14622 } 14623 }
Here is the call graph for this function: ![]() |
|
Should be called in a loop to process edit remote procedure call ability (.rproc) command in DCC CHAT/telnet connections.
Definition at line 13906 of file dcc.cpp. References dcc_get_line(), dcc_send_msg(), lang_get_string(), lang_subst(), ltoa(), r_procedures, r_users, and s_rproc::remote_bot. Referenced by dcc_loop(). 13907 { 13908 if((*i).edit_rproc==1) { 13909 string p=dcc_get_line((*i).in_buff); 13910 if(!p.compare("")) 13911 return; 13912 vector<string>::iterator i1; 13913 bool got=false; 13914 for(i1=(*i).access_to_procs.begin(); i1!=(*i).access_to_procs.end(); i1++) 13915 if(!(*i1).compare(p)) { 13916 got=true; 13917 (*i).proc_name=*i1; 13918 break; 13919 } 13920 if(!got) { 13921 string disp=lang_get_string(1,(*i).lang,137)+eol; 13922 int ec=0; 13923 dcc_send_msg((*i).socket,disp,ec); 13924 return; 13925 } 13926 (*i).rproc.clear(); 13927 vector<s_procedure>::iterator i2; 13928 for(i2=r_procedures.begin(); i2!=r_procedures.end(); i2++) { 13929 if(!(*i2).name.compare((*i).proc_name)) { 13930 (*i).rproc=(*i2).rproc; 13931 break; 13932 } 13933 } 13934 (*i).edit_rproc++; 13935 } 13936 if((*i).edit_rproc==2) { 13937 string disp=lang_get_string(1,(*i).lang,617)+eol; 13938 disp=lang_subst(disp,(*i).proc_name); 13939 int ec=0; 13940 dcc_send_msg((*i).socket,disp,ec); 13941 disp=""; 13942 int i2=1; 13943 vector<s_rproc>::iterator i1; 13944 for(i1=(*i).rproc.begin(); i1!=(*i).rproc.end(); i1++, i2++) { 13945 char tmp[64]; 13946 ltoa(i2,tmp,10); 13947 disp+=lang_get_string(1,(*i).lang,593); 13948 if(i2<10) 13949 disp+="0"; 13950 if(i2<100) 13951 disp+="0"; 13952 disp+=(string)tmp+": "+(*i1).remote_bot+eol; 13953 } 13954 dcc_send_msg((*i).socket,disp,ec); 13955 disp=lang_get_string(1,(*i).lang,618)+eol; 13956 dcc_send_msg((*i).socket,disp,ec); 13957 (*i).edit_rproc++; 13958 } 13959 if((*i).edit_rproc==3) { 13960 string p=dcc_get_line((*i).in_buff); 13961 if(!p.compare("")) 13962 return; 13963 13964 if(!p.compare(".")) { 13965 string disp=lang_get_string(1,(*i).lang,426)+eol; 13966 int ec=0; 13967 dcc_send_msg((*i).socket,disp,ec); 13968 (*i).edit_rproc=100; 13969 return; 13970 } 13971 13972 if(!p.compare(".add")) { 13973 string disp=lang_get_string(1,(*i).lang,619)+eol; 13974 13975 vector<s_user>::iterator i1; 13976 for(i1=r_users.begin(); i1!=r_users.end(); i1++) 13977 disp+=(*i1).name+eol; 13978 13979 disp+=lang_get_string(1,(*i).lang,429)+eol; 13980 13981 int ec=0; 13982 dcc_send_msg((*i).socket,disp,ec); 13983 (*i).edit_rproc=200; 13984 return; 13985 } 13986 13987 string p1, p2; 13988 { 13989 int pos=0; 13990 for(unsigned int i1=0; i1<p.length(); i1++) { 13991 if(p[i1]==0x20) { 13992 pos=1; 13993 continue; 13994 } 13995 if(pos==0) 13996 p1+=p[i1]; 13997 if(pos==1) 13998 p2+=p[i1]; 13999 } 14000 } 14001 if(!p1.compare(".remove")) { 14002 int line=0; 14003 14004 vector<s_rproc>::iterator i1; 14005 for(i1=(*i).rproc.begin(); i1!=(*i).rproc.end(); i1++) 14006 if(++line==atol(p2.c_str())) { 14007 (*i).rproc.erase(i1); 14008 break; 14009 } 14010 (*i).edit_rproc=2; 14011 return; 14012 } 14013 14014 (*i).edit_rproc=2; 14015 return; 14016 } 14017 14018 // commmit? 14019 if((*i).edit_rproc==100) { 14020 string p=dcc_get_line((*i).in_buff); 14021 if(!p.compare("")) 14022 return; 14023 14024 if(p.compare("y") && p.compare("n") && p.compare("Y") && p.compare("N")) { 14025 string disp=lang_get_string(1,(*i).lang,426)+eol; 14026 int ec=0; 14027 dcc_send_msg((*i).socket,disp,ec); 14028 } else { 14029 if(!p.compare("n") || !p.compare("N")) { 14030 string disp=lang_get_string(1,(*i).lang,70)+eol; 14031 int ec=0; 14032 dcc_send_msg((*i).socket,disp,ec); 14033 14034 (*i).proc_name=""; 14035 (*i).rproc.clear(); 14036 (*i).edit_rproc=0; 14037 return; 14038 } else { 14039 vector<string>::iterator i1; 14040 bool got=false; 14041 for(i1=(*i).access_to_procs.begin(); i1!=(*i).access_to_procs.end(); i1++) 14042 if(!(*i1).compare((*i).proc_name)) { 14043 got=true; 14044 break; 14045 } 14046 if(!got) { 14047 string disp=lang_get_string(1,(*i).lang,121)+eol; 14048 int ec=0; 14049 dcc_send_msg((*i).socket,disp,ec); 14050 } else { 14051 vector<s_procedure>::iterator i2; 14052 for(i2=r_procedures.begin(); i2!=r_procedures.end(); i2++) { 14053 if(!(*i2).name.compare((*i).proc_name)) { 14054 (*i2).rproc=(*i).rproc; 14055 break; 14056 } 14057 } 14058 14059 string disp=lang_get_string(1,(*i).lang,427)+eol; 14060 int ec=0; 14061 dcc_send_msg((*i).socket,disp,ec); 14062 } 14063 14064 (*i).proc_name=""; 14065 (*i).rproc.clear(); 14066 (*i).edit_rproc=0; 14067 return; 14068 } 14069 (*i).edit_rproc=0; 14070 return; 14071 } 14072 } 14073 14074 // .add 14075 if((*i).edit_rproc==200) { 14076 string p=dcc_get_line((*i).in_buff); 14077 if(!p.compare("")) 14078 return; 14079 14080 bool got=false; 14081 vector<s_user>::iterator i1; 14082 for(i1=r_users.begin(); i1!=r_users.end(); i1++) { 14083 if(!(*i1).name.compare(p)) { 14084 got=true; 14085 break; 14086 } 14087 } 14088 14089 if(!got) { 14090 string disp=lang_get_string(1,(*i).lang,428)+eol; 14091 14092 vector<s_user>::iterator i1; 14093 for(i1=r_users.begin(); i1!=r_users.end(); i1++) 14094 disp+=(*i1).name+eol; 14095 14096 disp+=lang_get_string(1,(*i).lang,429)+eol; 14097 14098 int ec=0; 14099 dcc_send_msg((*i).socket,disp,ec); 14100 return; 14101 } 14102 14103 s_rproc r; 14104 r.remote_bot=p; 14105 (*i).rproc.push_back(r); 14106 14107 (*i).edit_rproc=2; 14108 return; 14109 } 14110 }
Here is the call graph for this function: ![]() |
|
Should be called in a loop to process edit user / new user commands in DCC CHAT/telnet connections.
Definition at line 9380 of file dcc.cpp. References s_user::access_grant_apply, s_user::access_grant_backup, s_user::access_grant_can_send_all_users, s_user::access_grant_can_send_unknown_users, s_user::access_grant_channel, s_user::access_grant_die, s_user::access_grant_filesystem, s_user::access_grant_group, s_user::access_grant_partyline, s_user::access_grant_plusproc, s_user::access_grant_plususer, s_user::access_grant_private, s_user::access_grant_procedure, s_user::access_grant_rehash, s_user::access_grant_replication, s_user::access_grant_restart, s_user::access_grant_upgrade, s_user::access_to_apply, s_user::access_to_backup, s_user::access_to_can_send_all_users, s_user::access_to_can_send_unknown_users, s_user::access_to_channel, s_user::access_to_die, s_user::access_to_filesystem, s_user::access_to_group, s_user::access_to_partyline, s_user::access_to_plusproc, s_user::access_to_plususer, s_user::access_to_private, s_user::access_to_proc, s_user::access_to_rehash, s_user::access_to_replication, s_user::access_to_restart, s_user::access_to_upgrade, s_user::access_usage_procedure, s_channel::allow_dynamic, s_channel::can_send_unknown_users, s_channel::channel_name, cmp_strings_case_insensitive(), s_channel::configured, s_channel::ctcp_flood, dcc_can_unassign(), dcc_get_line(), s_user::dcc_hosts, dcc_send_msg(), s_user::fullname, s_user::groups, s_user::host_bot, s_user::host_unknown, s_user::hostmask, s_user::is_template, s_channel::join_flood, lang_get_string(), lang_subst(), s_user::last_changed, s_flood::lines, log_debug(), logic_eval(), logic_partyline_add_user(), logic_partyline_get_user(), logic_partyline_remove_user(), ltoa(), s_user::meta, s_channel::mode_flood, s_channel::msg_flood, s_group::name, s_user::name, s_channel::nick_flood, s_channel::notice_flood, s_channel::on_ban, s_channel::on_banned, s_channel::on_creator, s_channel::on_decreator, s_channel::on_deop, s_channel::on_devoice, s_channel::on_except, s_channel::on_flood, s_channel::on_invite, s_channel::on_join, s_channel::on_kick, s_channel::on_not_in_reop, s_channel::on_not_invited, s_channel::on_notice, s_channel::on_op, s_channel::on_other_mode, s_channel::on_privmsg, s_channel::on_unban, s_channel::on_unexcept, s_channel::on_uninvite, s_channel::on_voice, s_user::partyline_msg_flood, r_channels, s_channel::repeat_flood, and s_channel::username. Referenced by dcc_loop(). 09381 { 09382 if((*i).edit_user==1) { 09383 (*i).edit_user=-100; 09384 } 09385 if((*i).edit_user==-100) { 09386 string p=dcc_get_line((*i).in_buff); 09387 if(!p.compare("")) 09388 return; 09389 vector<string>::iterator i1; 09390 bool got=false; 09391 for(i1=(*i).access_to_users.begin(); i1!=(*i).access_to_users.end(); i1++) 09392 if(!p.compare(*i1)) { 09393 got=true; 09394 break; 09395 } 09396 if(!got) { 09397 string disp=lang_get_string(1,(*i).lang,90)+eol; 09398 int ec=0; 09399 dcc_send_msg((*i).socket,disp,ec); 09400 } else { 09401 (*i).user_name=p; 09402 s_user u; 09403 vector<s_channel> chs; 09404 logic_partyline_get_user(p,u,chs); 09405 09406 vector<s_group>::iterator i1; 09407 09408 { 09409 (*i).user_member_of.clear(); 09410 (*i).user_hosts.clear(); 09411 (*i).user_dcc_hosts.clear(); 09412 (*i).user_fullnames.clear(); 09413 (*i).user_meta.clear(); 09414 (*i).user_access_to_groups.clear(); 09415 (*i).user_access_grant_groups.clear(); 09416 (*i).user_access_to_proc_groups.clear(); 09417 (*i).user_access_grant_proc_groups.clear(); 09418 (*i).user_access_usage_proc_groups.clear(); 09419 (*i).user_access_to_channel.clear(); 09420 (*i).user_access_grant_channel.clear(); 09421 (*i).user_channels.clear(); 09422 } 09423 09424 for(i1=u.groups.begin(); i1!=u.groups.begin(); i1++) 09425 (*i).user_member_of.push_back((*i1).name); 09426 09427 vector<string>::iterator i2; 09428 for(i2=u.hostmask.begin(); i2!=u.hostmask.end(); i2++) 09429 (*i).user_hosts.push_back(*i2); 09430 09431 vector<s_dcc_host>::iterator i3; 09432 for(i3=u.dcc_hosts.begin(); i3!=u.dcc_hosts.end(); i3++) { 09433 (*i).user_dcc_hosts.push_back(*i3); 09434 } 09435 09436 for(i2=u.fullname.begin(); i2!=u.fullname.end(); i2++) 09437 (*i).user_fullnames.push_back(*i2); 09438 09439 map<string,string>::iterator i6; 09440 for(i6=u.meta.begin(); i6!=u.meta.end(); i6++) 09441 (*i).user_meta.insert(*i6); 09442 09443 for(i2=u.access_to_group.begin(); i2!=u.access_to_group.end(); i2++) 09444 (*i).user_access_to_groups.push_back(*i2); 09445 09446 for(i2=u.access_grant_group.begin(); i2!=u.access_grant_group.end(); i2++) 09447 (*i).user_access_grant_groups.push_back(*i2); 09448 09449 for(i2=u.access_to_proc.begin(); i2!=u.access_to_proc.end(); i2++) 09450 (*i).user_access_to_proc_groups.push_back(*i2); 09451 09452 for(i2=u.access_grant_procedure.begin(); i2!=u.access_grant_procedure.end(); i2++) 09453 (*i).user_access_grant_proc_groups.push_back(*i2); 09454 09455 for(i2=u.access_usage_procedure.begin(); i2!=u.access_usage_procedure.end(); i2++) 09456 (*i).user_access_usage_proc_groups.push_back(*i2); 09457 09458 for(i2=u.access_to_channel.begin(); i2!=u.access_to_channel.end(); i2++) 09459 (*i).user_access_to_channel.push_back(*i2); 09460 09461 for(i2=u.access_grant_channel.begin(); i2!=u.access_grant_channel.end(); i2++) 09462 (*i).user_access_grant_channel.push_back(*i2); 09463 09464 (*i).user_channels.clear(); 09465 vector<s_channel>::iterator i4; 09466 for(i4=chs.begin(); i4!=chs.end(); i4++) 09467 (*i).user_channels.push_back(*i4); 09468 09469 (*i).user_partyline_msg_flood=u.partyline_msg_flood; 09470 09471 (*i).user_access_to_backup=u.access_to_backup; 09472 (*i).user_access_to_die=u.access_to_die; 09473 (*i).user_access_to_filesystem=u.access_to_filesystem; 09474 (*i).user_access_to_partyline=u.access_to_partyline; 09475 (*i).user_access_to_plusproc=u.access_to_plusproc; 09476 (*i).user_access_to_plususer=u.access_to_plususer; 09477 (*i).user_access_to_rehash=u.access_to_rehash; 09478 (*i).user_access_to_restart=u.access_to_restart; 09479 (*i).user_access_grant_backup=u.access_grant_backup; 09480 (*i).user_access_grant_die=u.access_grant_die; 09481 (*i).user_access_grant_filesystem=u.access_grant_filesystem; 09482 (*i).user_access_grant_partyline=u.access_grant_partyline; 09483 (*i).user_access_grant_plusproc=u.access_grant_plusproc; 09484 (*i).user_access_grant_plususer=u.access_grant_plususer; 09485 (*i).user_access_grant_rehash=u.access_grant_rehash; 09486 (*i).user_access_to_replication=u.access_to_replication; 09487 (*i).user_access_grant_replication=u.access_grant_replication; 09488 (*i).user_access_grant_restart=u.access_grant_restart; 09489 09490 (*i).user_access_grant_private=u.access_grant_private; 09491 (*i).user_access_to_private=u.access_to_private; 09492 09493 (*i).user_access_to_upgrade=u.access_to_upgrade; 09494 (*i).user_access_grant_upgrade=u.access_grant_upgrade; 09495 09496 (*i).user_access_to_apply=u.access_to_apply; 09497 (*i).user_access_grant_apply=u.access_grant_apply; 09498 09499 (*i).user_access_to_can_send_all_users=u.access_to_can_send_all_users; 09500 (*i).user_access_grant_can_send_all_users=u.access_grant_can_send_all_users; 09501 09502 vector<s_group>::iterator i5; 09503 for(i5=u.groups.begin(); i5!=u.groups.end(); i5++) 09504 (*i).user_member_of.push_back((*i5).name); 09505 09506 (*i).edit_user++; 09507 } 09508 } 09509 if((*i).edit_user==-99) { 09510 vector<s_channel>::iterator i1; 09511 for(i1=r_channels.begin(); i1!=r_channels.end(); i1++) { 09512 vector<s_channel>::iterator i2; 09513 bool got=false; 09514 for(i2=(*i).user_channels.begin(); i2!=(*i).user_channels.end(); i2++) { 09515 if(!cmp_strings_case_insensitive((*i2).channel_name,(*i1).channel_name)) { 09516 got=true; 09517 break; 09518 } 09519 } 09520 if(!got) { 09521 s_channel ch; 09522 ch.channel_name=(*i1).channel_name; 09523 ch.username=(*i).user_name; 09524 ch.on_deop=""; 09525 ch.on_ban=""; 09526 ch.on_unban=""; 09527 ch.on_kick=""; 09528 ch.on_op=""; 09529 ch.on_voice=""; 09530 ch.on_devoice=""; 09531 ch.on_creator=""; 09532 ch.on_decreator=""; 09533 ch.on_join=""; 09534 ch.on_banned=""; 09535 ch.on_flood=""; 09536 ch.on_privmsg=""; 09537 ch.on_notice=""; 09538 ch.on_except=""; 09539 ch.on_unexcept=""; 09540 ch.on_invite=""; 09541 ch.on_uninvite=""; 09542 ch.on_not_invited=""; 09543 ch.on_not_in_reop=""; 09544 ch.on_other_mode=""; 09545 ch.msg_flood.lines=0; 09546 ch.notice_flood.lines=0; 09547 ch.repeat_flood.lines=0; 09548 ch.nick_flood.lines=0; 09549 ch.join_flood.lines=0; 09550 ch.mode_flood.lines=0; 09551 ch.ctcp_flood.lines=0; 09552 ch.allow_dynamic.clear(); 09553 ch.configured=false; 09554 ch.can_send_unknown_users=false; 09555 (*i).user_channels.push_back(ch); 09556 } 09557 } 09558 09559 (*i).edit_user=2; 09560 return; 09561 } 09562 09563 // Type ".groups" if you want to edit group membership 09564 if((*i).edit_user==1200) { 09565 string disp=lang_get_string(1,(*i).lang,485)+eol; 09566 int ec=0; 09567 dcc_send_msg((*i).socket,disp,ec); 09568 disp=""; 09569 int i2=1; 09570 vector<string>::iterator i1; 09571 for(i1=(*i).user_member_of.begin(); i1!=(*i).user_member_of.end(); i1++, i2++) { 09572 char tmp[64]; 09573 ltoa(i2,tmp,10); 09574 disp+=lang_get_string(1,(*i).lang,593); 09575 if(i2<10) 09576 disp+="0"; 09577 if(i2<100) 09578 disp+="0"; 09579 disp+=(string)tmp+": "+*i1; 09580 disp+=" ("; 09581 vector<string>::iterator i3; 09582 bool access=false; 09583 map<string,string> vars; 09584 for(i3=(*i).access_grant_groups.begin(); i3!=(*i).access_grant_groups.end(); i3++) 09585 if(!(*i3).compare(logic_eval(*i1,vars))) { 09586 access=true; 09587 break; 09588 } 09589 disp+=access?lang_get_string(1,(*i).lang,120):lang_get_string(1,(*i).lang,121); 09590 disp+=")"; 09591 disp+=eol; 09592 } 09593 dcc_send_msg((*i).socket,disp,ec); 09594 disp=lang_get_string(1,(*i).lang,484)+eol; 09595 dcc_send_msg((*i).socket,disp,ec); 09596 (*i).edit_user++; 09597 return; 09598 } 09599 if((*i).edit_user==1201) { 09600 string p=dcc_get_line((*i).in_buff); 09601 if(!p.compare("")) 09602 return; 09603 bool got=false; 09604 if(!p.compare(".")) { 09605 got=true; 09606 (*i).edit_user=2; 09607 return; 09608 } 09609 if(!p.compare(".add")) { 09610 got=true; 09611 string disp=lang_get_string(1,(*i).lang,486)+eol; 09612 vector<string>::iterator i1; 09613 for(i1=(*i).access_grant_groups.begin(); i1!=(*i).access_grant_groups.end(); i1++) 09614 disp+=(*i1)+eol; 09615 int ec=0; 09616 dcc_send_msg((*i).socket,disp,ec); 09617 (*i).edit_user=1202; 09618 return; 09619 } 09620 string p1, p2; 09621 int pos=0; 09622 for(unsigned int i1=0; i1<p.length(); i1++) { 09623 if(p[i1]==0x20) { 09624 pos=1; 09625 continue; 09626 } 09627 if(pos==0) 09628 p1+=p[i1]; 09629 if(pos==1) 09630 p2+=p[i1]; 09631 } 09632 if(!p1.compare(".remove")) { 09633 got=true; 09634 int line=atol(p2.c_str()); 09635 09636 int i2=1; 09637 vector<string>::iterator i1; 09638 for(i1=(*i).user_member_of.begin(); i1!=(*i).user_member_of.end(); i1++, i2++) 09639 if(i2==line) { 09640 vector<string>::iterator i3; 09641 bool access=false; 09642 map<string,string> vars; 09643 for(i3=(*i).access_grant_groups.begin(); i3!=(*i).access_grant_groups.end(); i3++) 09644 if(!(*i3).compare(logic_eval(*i1,vars))) { 09645 access=true; 09646 break; 09647 } 09648 if(!access) { 09649 string disp=lang_get_string(1,(*i).lang,121)+eol; 09650 int ec=0; 09651 dcc_send_msg((*i).socket,disp,ec); 09652 (*i).edit_user=1200; 09653 return; 09654 } 09655 (*i).user_member_of.erase(i1); 09656 break; 09657 } 09658 (*i).edit_user=1200; 09659 return; 09660 } 09661 if(!got) { 09662 string disp=lang_get_string(1,(*i).lang,484)+eol; 09663 int ec=0; 09664 dcc_send_msg((*i).socket,disp,ec); 09665 } 09666 } 09667 if((*i).edit_user==1202) { 09668 string p=dcc_get_line((*i).in_buff); 09669 if(!p.compare("")) 09670 return; 09671 09672 vector<string>::iterator i1; 09673 bool got=false; 09674 for(i1=(*i).access_grant_groups.begin(); i1!=(*i).access_grant_groups.end(); i1++) 09675 if(!(*i1).compare(p)) { 09676 got=true; 09677 break; 09678 } 09679 09680 if(got) { 09681 p=(string)"\""+p+"\""; 09682 (*i).user_member_of.push_back(p); 09683 } else { 09684 string disp=lang_get_string(1,(*i).lang,487)+eol; 09685 int ec=0; 09686 dcc_send_msg((*i).socket,disp,ec); 09687 } 09688 (*i).edit_user=1200; 09689 return; 09690 } 09691 09692 // Type ".meta" 09693 if((*i).edit_user==1300) { 09694 string disp=lang_get_string(1,(*i).lang,561)+eol; 09695 int ec=0; 09696 dcc_send_msg((*i).socket,disp,ec); 09697 disp=""; 09698 int i2=1; 09699 map<string,string> vars; 09700 09701 map<string,string>::iterator i1; 09702 for(i1=(*i).user_meta.begin(); i1!=(*i).user_meta.end(); i1++, i2++) { 09703 char tmp[64]; 09704 ltoa(i2,tmp,10); 09705 disp+=lang_get_string(1,(*i).lang,593); 09706 if(i2<10) 09707 disp+="0"; 09708 if(i2<100) 09709 disp+="0"; 09710 disp+=(string)tmp+": "; 09711 disp+=logic_eval((*i1).first,vars); 09712 disp+="="; 09713 disp+=logic_eval((*i1).second,vars); 09714 disp+=eol; 09715 } 09716 dcc_send_msg((*i).socket,disp,ec); 09717 disp=lang_get_string(1,(*i).lang,562)+eol; 09718 dcc_send_msg((*i).socket,disp,ec); 09719 (*i).edit_user++; 09720 } 09721 if((*i).edit_user==1301) { 09722 string p=dcc_get_line((*i).in_buff); 09723 if(!p.compare("")) 09724 return; 09725 bool got=false; 09726 if(!p.compare(".")) { 09727 got=true; 09728 (*i).edit_user=2; 09729 } 09730 if(!p.compare(".add")) { 09731 got=true; 09732 string disp=lang_get_string(1,(*i).lang,563)+eol; 09733 int ec=0; 09734 dcc_send_msg((*i).socket,disp,ec); 09735 (*i).edit_user=1302; 09736 } 09737 string p1, p2; 09738 int pos=0; 09739 for(unsigned int i1=0; i1<p.length(); i1++) { 09740 if(p[i1]==0x20) { 09741 pos=1; 09742 continue; 09743 } 09744 if(pos==0) 09745 p1+=p[i1]; 09746 if(pos==1) 09747 p2+=p[i1]; 09748 } 09749 if(!p1.compare(".remove")) { 09750 got=true; 09751 int line=atol(p2.c_str()); 09752 09753 int i2=1; 09754 map<string,string>::iterator i1; 09755 for(i1=(*i).user_meta.begin(); i1!=(*i).user_meta.end(); i1++, i2++) 09756 if(i2==line) { 09757 (*i).user_meta.erase(i1); 09758 break; 09759 } 09760 (*i).edit_user=1300; 09761 } 09762 if(!got) { 09763 string disp=lang_get_string(1,(*i).lang,562)+eol; 09764 int ec=0; 09765 dcc_send_msg((*i).socket,disp,ec); 09766 } 09767 } 09768 if((*i).edit_user==1302) { 09769 string p=dcc_get_line((*i).in_buff); 09770 if(!p.compare("")) 09771 return; 09772 pair<string,string> pr; 09773 bool equal=false; 09774 for(unsigned int i1=0; i1<p.length(); i1++) { 09775 if(!equal && p[i1]=='=') { 09776 equal=true; 09777 continue; 09778 } 09779 if(!equal) 09780 pr.first+=p[i1]; 09781 else 09782 pr.second+=p[i1]; 09783 } 09784 pr.first=(string)"\""+pr.first+"\""; 09785 pr.second=(string)"\""+pr.second+"\""; 09786 (*i).user_meta.insert(pr); 09787 (*i).edit_user=1300; 09788 } 09789 09790 if((*i).edit_user==2) { 09791 string disp=""; 09792 int ec=0; 09793 09794 for(int iii=91; iii<=98; iii++) 09795 disp+=lang_get_string(1,(*i).lang,iii)+eol; 09796 09797 disp+=lang_get_string(1,(*i).lang,591)+eol; 09798 09799 for(int iii=99; iii<=100; iii++) 09800 disp+=lang_get_string(1,(*i).lang,iii)+eol; 09801 09802 disp+=lang_get_string(1,(*i).lang,172)+eol; 09803 disp+=lang_get_string(1,(*i).lang,483)+eol; 09804 disp+=lang_get_string(1,(*i).lang,560)+eol; 09805 09806 dcc_send_msg((*i).socket,disp,ec); 09807 09808 int i3=1; 09809 vector<s_channel>::iterator i2; 09810 for(i2=(*i).user_channels.begin(); i2!=(*i).user_channels.end(); i2++, i3++) { 09811 disp=lang_get_string(1,(*i).lang,101)+eol; 09812 char tmp[64]; 09813 ltoa(i3,tmp,10); 09814 disp=lang_subst(disp,tmp); 09815 disp=lang_subst(disp,(*i2).channel_name); 09816 vector<string>::iterator i3; 09817 bool access=false; 09818 map<string,string> vars; 09819 for(i3=(*i).access_to_channel.begin(); i3!=(*i).access_to_channel.end(); i3++) 09820 if(!cmp_strings_case_insensitive(*i3,logic_eval((*i2).channel_name,vars))) { 09821 access=true; 09822 break; 09823 } 09824 disp+=" "; 09825 if(access) 09826 disp+=lang_get_string(1,(*i).lang,464); 09827 else 09828 disp+=lang_get_string(1,(*i).lang,466); 09829 disp+=" "; 09830 if((*i2).configured) 09831 disp+=lang_get_string(1,(*i).lang,467); 09832 else 09833 disp+=lang_get_string(1,(*i).lang,465); 09834 09835 disp+=eol; 09836 dcc_send_msg((*i).socket,disp,ec); 09837 } 09838 disp=lang_get_string(1,(*i).lang,160)+eol; 09839 09840 if((*i).user_hosts.begin()==(*i).user_hosts.end()) 09841 disp+=lang_get_string(1,(*i).lang,547)+eol; 09842 if((*i).user_fullnames.begin()==(*i).user_fullnames.end()) 09843 disp+=lang_get_string(1,(*i).lang,548)+eol; 09844 09845 dcc_send_msg((*i).socket,disp,ec); 09846 09847 (*i).edit_user++; 09848 } 09849 if((*i).edit_user==3) { 09850 string p=dcc_get_line((*i).in_buff); 09851 if(!p.compare("")) 09852 return; 09853 bool got=false; 09854 if(!p.compare(".host")) { 09855 got=true; 09856 (*i).edit_user=100; 09857 } 09858 if(!p.compare(".dcchost")) { 09859 got=true; 09860 (*i).edit_user=200; 09861 } 09862 if(!p.compare(".fn")) { 09863 got=true; 09864 (*i).edit_user=300; 09865 } 09866 if(!p.compare(".pl")) { 09867 got=true; 09868 (*i).edit_user=400; 09869 } 09870 if(!p.compare(".atg")) { 09871 got=true; 09872 (*i).edit_user=500; 09873 } 09874 if(!p.compare(".aug")) { 09875 got=true; 09876 (*i).edit_user=600; 09877 } 09878 if(!p.compare(".atp")) { 09879 got=true; 09880 (*i).edit_user=700; 09881 } 09882 if(!p.compare(".agp")) { 09883 got=true; 09884 (*i).edit_user=800; 09885 } 09886 if(!p.compare(".aup")) { 09887 got=true; 09888 (*i).edit_user=1400; 09889 } 09890 if(!p.compare(".atc")) { 09891 got=true; 09892 (*i).edit_user=900; 09893 } 09894 if(!p.compare(".auc")) { 09895 got=true; 09896 (*i).edit_user=1000; 09897 } 09898 if(!p.compare(".commands")) { 09899 got=true; 09900 (*i).edit_user=1100; 09901 } 09902 if(!p.compare(".groups")) { 09903 got=true; 09904 (*i).edit_user=1200; 09905 } 09906 if(!p.compare(".meta")) { 09907 got=true; 09908 (*i).edit_user=1300; 09909 } 09910 vector<s_channel>::iterator i1; 09911 int i2=1; 09912 for(i1=(*i).user_channels.begin(); i1!=(*i).user_channels.end(); i1++, i2++) { 09913 char tmp[64]; 09914 ltoa(i2,tmp,10); 09915 string pp=(string)"."+tmp; 09916 if(!p.compare(pp)) { 09917 got=true; 09918 (*i).edit_user=2000; 09919 (*i).edit_channel_num=i2; 09920 break; 09921 } 09922 } 09923 if(!p.compare(".finish")) { 09924 got=true; 09925 09926 string disp=lang_get_string(1,(*i).lang,161)+eol; 09927 int ec=0; 09928 dcc_send_msg((*i).socket,disp,ec); 09929 09930 (*i).edit_user++; 09931 } 09932 if(!got) { 09933 string disp=lang_get_string(1,(*i).lang,106)+eol; 09934 int ec=0; 09935 dcc_send_msg((*i).socket,disp,ec); 09936 } 09937 } 09938 if((*i).edit_user==4) { 09939 string p=dcc_get_line((*i).in_buff); 09940 if(!p.compare("")) 09941 return; 09942 if(p.compare("y") && p.compare("n") && p.compare("Y") && p.compare("N")) { 09943 string disp=lang_get_string(1,(*i).lang,161)+eol; 09944 int ec=0; 09945 dcc_send_msg((*i).socket,disp,ec); 09946 } else { 09947 if(!p.compare("y") || !p.compare("Y")) { 09948 if((*i).user_hosts.begin()==(*i).user_hosts.end() || (*i).user_fullnames.begin()==(*i).user_fullnames.end()) { 09949 string disp=lang_get_string(1,(*i).lang,549)+eol; 09950 int ec=0; 09951 dcc_send_msg((*i).socket,disp,ec); 09952 (*i).edit_user--; 09953 return; 09954 } 09955 09956 bool was_host_bot; 09957 { 09958 s_user u; 09959 vector<s_channel> chs; 09960 logic_partyline_get_user((*i).user_name,u,chs); 09961 was_host_bot=u.host_bot; 09962 } 09963 09964 s_user u; 09965 09966 u.name=(*i).user_name; 09967 09968 vector<string>::iterator i1; 09969 for(i1=(*i).user_member_of.begin(); i1!=(*i).user_member_of.end(); i1++) { 09970 s_group g; 09971 g.name=*i1; 09972 u.groups.push_back(g); 09973 } 09974 for(i1=(*i).user_hosts.begin(); i1!=(*i).user_hosts.end(); i1++) 09975 u.hostmask.push_back(*i1); 09976 vector<s_dcc_host>::iterator i2; 09977 for(i2=(*i).user_dcc_hosts.begin(); i2!=(*i).user_dcc_hosts.end(); i2++) 09978 u.dcc_hosts.push_back(*i2); 09979 for(i1=(*i).user_fullnames.begin(); i1!=(*i).user_fullnames.end(); i1++) 09980 u.fullname.push_back(*i1); 09981 u.access_to_partyline=(*i).user_access_to_partyline; 09982 u.access_grant_partyline=(*i).user_access_grant_partyline; 09983 u.access_to_backup=(*i).user_access_to_backup; 09984 u.access_to_rehash=(*i).user_access_to_rehash; 09985 u.access_grant_backup=(*i).user_access_grant_backup; 09986 u.access_grant_rehash=(*i).user_access_grant_rehash; 09987 09988 u.access_to_plususer=(*i).user_access_to_plususer; 09989 u.access_grant_plususer=(*i).user_access_grant_plususer; 09990 09991 u.access_to_plusproc=(*i).user_access_to_plusproc; 09992 u.access_grant_plusproc=(*i).user_access_grant_plusproc; 09993 09994 u.access_to_restart=(*i).user_access_to_restart; 09995 u.access_grant_restart=(*i).user_access_grant_restart; 09996 u.access_to_die=(*i).user_access_to_die; 09997 u.access_grant_die=(*i).user_access_grant_die; 09998 09999 u.access_to_filesystem=(*i).user_access_to_filesystem; 10000 u.access_grant_filesystem=(*i).user_access_grant_filesystem; 10001 10002 u.access_to_private=(*i).user_access_to_private; 10003 u.access_grant_private=(*i).user_access_grant_private; 10004 10005 u.access_to_upgrade=(*i).user_access_to_upgrade; 10006 u.access_grant_upgrade=(*i).user_access_grant_upgrade; 10007 10008 u.access_to_apply=(*i).user_access_to_apply; 10009 u.access_grant_apply=(*i).user_access_grant_apply; 10010 10011 u.access_to_replication=(*i).user_access_to_replication; 10012 u.access_grant_replication=(*i).user_access_grant_replication; 10013 10014 u.access_to_can_send_all_users=(*i).user_access_to_can_send_all_users; 10015 u.access_grant_can_send_all_users=(*i).user_access_grant_can_send_all_users; 10016 10017 u.access_to_can_send_unknown_users=(*i).user_access_to_can_send_unknown_users; 10018 u.access_grant_can_send_unknown_users=(*i).user_access_grant_can_send_unknown_users; 10019 10020 for(i1=(*i).user_access_to_groups.begin(); i1!=(*i).user_access_to_groups.end(); i1++) 10021 u.access_to_group.push_back(*i1); 10022 for(i1=(*i).user_access_grant_groups.begin(); i1!=(*i).user_access_grant_groups.end(); i1++) 10023 u.access_grant_group.push_back(*i1); 10024 for(i1=(*i).user_access_to_proc_groups.begin(); i1!=(*i).user_access_to_proc_groups.end(); i1++) 10025 u.access_to_proc.push_back(*i1); 10026 for(i1=(*i).user_access_grant_proc_groups.begin(); i1!=(*i).user_access_grant_proc_groups.end(); i1++) 10027 u.access_grant_procedure.push_back(*i1); 10028 for(i1=(*i).user_access_usage_proc_groups.begin(); i1!=(*i).user_access_usage_proc_groups.end(); i1++) 10029 u.access_usage_procedure.push_back(*i1); 10030 for(i1=(*i).user_access_to_channel.begin(); i1!=(*i).user_access_to_channel.end(); i1++) 10031 u.access_to_channel.push_back(*i1); 10032 for(i1=(*i).user_access_grant_channel.begin(); i1!=(*i).user_access_grant_channel.end(); i1++) 10033 u.access_grant_channel.push_back(*i1); 10034 10035 map<string,string>::iterator i6; 10036 for(i6=(*i).user_meta.begin(); i6!=(*i).user_meta.end(); i6++) 10037 u.meta.insert(*i6); 10038 10039 vector<s_channel> chs; 10040 vector<s_channel>::iterator i3; 10041 for(i3=(*i).user_channels.begin(); i3!=(*i).user_channels.end(); i3++) { 10042 if(!(*i3).configured) 10043 continue; 10044 (*i3).username=(*i).user_name; 10045 chs.push_back(*i3); 10046 } 10047 10048 u.partyline_msg_flood=(*i).user_partyline_msg_flood; 10049 10050 time(&u.last_changed); 10051 logic_partyline_remove_user(u.name); 10052 u.host_bot=was_host_bot; 10053 u.host_unknown=false; 10054 u.is_template=false; 10055 logic_partyline_add_user(u,chs); 10056 10057 string disp=lang_get_string(1,(*i).lang,163)+eol; 10058 int ec=0; 10059 dcc_send_msg((*i).socket,disp,ec); 10060 } else { 10061 string disp=lang_get_string(1,(*i).lang,162)+eol; 10062 int ec=0; 10063 dcc_send_msg((*i).socket,disp,ec); 10064 } 10065 (*i).edit_user=0; 10066 } 10067 } 10068 // Type ".host" if you want to edit host masks 10069 if((*i).edit_user==100) { 10070 string disp=lang_get_string(1,(*i).lang,107)+eol; 10071 int ec=0; 10072 dcc_send_msg((*i).socket,disp,ec); 10073 disp=""; 10074 int i2=1; 10075 vector<string>::iterator i1; 10076 for(i1=(*i).user_hosts.begin(); i1!=(*i).user_hosts.end(); i1++, i2++) { 10077 char tmp[64]; 10078 ltoa(i2,tmp,10); 10079 disp+=lang_get_string(1,(*i).lang,593); 10080 if(i2<10) 10081 disp+="0"; 10082 if(i2<100) 10083 disp+="0"; 10084 disp+=(string)tmp+": "+*i1+eol; 10085 } 10086 dcc_send_msg((*i).socket,disp,ec); 10087 disp=lang_get_string(1,(*i).lang,108)+eol; 10088 dcc_send_msg((*i).socket,disp,ec); 10089 (*i).edit_user++; 10090 } 10091 if((*i).edit_user==101) { 10092 string p=dcc_get_line((*i).in_buff); 10093 if(!p.compare("")) 10094 return; 10095 bool got=false; 10096 if(!p.compare(".")) { 10097 got=true; 10098 if((*i).user_hosts.begin()==(*i).user_hosts.end()) { 10099 string disp=lang_get_string(1,(*i).lang,109)+eol; 10100 int ec=0; 10101 dcc_send_msg((*i).socket,disp,ec); 10102 } else { 10103 (*i).edit_user=2; 10104 } 10105 } 10106 if(!p.compare(".add")) { 10107 got=true; 10108 string disp=lang_get_string(1,(*i).lang,110)+eol; 10109 int ec=0; 10110 dcc_send_msg((*i).socket,disp,ec); 10111 (*i).edit_user=102; 10112 return; 10113 } 10114 string p1, p2; 10115 int pos=0; 10116 for(unsigned int i1=0; i1<p.length(); i1++) { 10117 if(p[i1]==0x20) { 10118 pos=1; 10119 continue; 10120 } 10121 if(pos==0) 10122 p1+=p[i1]; 10123 if(pos==1) 10124 p2+=p[i1]; 10125 } 10126 if(!p1.compare(".remove")) { 10127 got=true; 10128 int line=atol(p2.c_str()); 10129 10130 int i2=1; 10131 vector<string>::iterator i1; 10132 for(i1=(*i).user_hosts.begin(); i1!=(*i).user_hosts.end(); i1++, i2++) 10133 if(i2==line) { 10134 (*i).user_hosts.erase(i1); 10135 break; 10136 } 10137 (*i).edit_user=100; 10138 } 10139 if(!got) { 10140 string disp=lang_get_string(1,(*i).lang,108)+eol; 10141 int ec=0; 10142 dcc_send_msg((*i).socket,disp,ec); 10143 } 10144 } 10145 if((*i).edit_user==102) { 10146 string p=dcc_get_line((*i).in_buff); 10147 if(!p.compare("")) 10148 return; 10149 p=(string)"\""+p+"\""; 10150 (*i).user_hosts.push_back(p); 10151 (*i).edit_user=100; 10152 } 10153 10154 // Type ".dcchost" 10155 if((*i).edit_user==200) { 10156 string disp=lang_get_string(1,(*i).lang,111)+eol; 10157 int ec=0; 10158 dcc_send_msg((*i).socket,disp,ec); 10159 disp=""; 10160 int i2=1; 10161 vector<s_dcc_host>::iterator i1; 10162 for(i1=(*i).user_dcc_hosts.begin(); i1!=(*i).user_dcc_hosts.end(); i1++, i2++) { 10163 char tmp[64]; 10164 ltoa(i2,tmp,10); 10165 disp+=lang_get_string(1,(*i).lang,593); 10166 if(i2<10) 10167 disp+="0"; 10168 if(i2<100) 10169 disp+="0"; 10170 char tmp2[64]; 10171 ltoa((*i1).group,tmp2,10); 10172 disp+=(string)tmp+": "+(string)tmp2+";"+(*i1).host+eol; 10173 } 10174 dcc_send_msg((*i).socket,disp,ec); 10175 disp=lang_get_string(1,(*i).lang,108)+eol; 10176 dcc_send_msg((*i).socket,disp,ec); 10177 (*i).edit_user++; 10178 } 10179 if((*i).edit_user==201) { 10180 string p=dcc_get_line((*i).in_buff); 10181 if(!p.compare("")) 10182 return; 10183 bool got=false; 10184 if(!p.compare(".")) { 10185 got=true; 10186 (*i).edit_user=2; 10187 } 10188 if(!p.compare(".add")) { 10189 got=true; 10190 string disp=lang_get_string(1,(*i).lang,112)+eol; 10191 int ec=0; 10192 dcc_send_msg((*i).socket,disp,ec); 10193 (*i).edit_user=202; 10194 } 10195 string p1, p2; 10196 int pos=0; 10197 for(unsigned int i1=0; i1<p.length(); i1++) { 10198 if(p[i1]==0x20) { 10199 pos=1; 10200 continue; 10201 } 10202 if(pos==0) 10203 p1+=p[i1]; 10204 if(pos==1) 10205 p2+=p[i1]; 10206 } 10207 if(!p1.compare(".remove")) { 10208 got=true; 10209 int line=atol(p2.c_str()); 10210 10211 int i2=1; 10212 vector<s_dcc_host>::iterator i1; 10213 for(i1=(*i).user_dcc_hosts.begin(); i1!=(*i).user_dcc_hosts.end(); i1++, i2++) 10214 if(i2==line) { 10215 (*i).user_dcc_hosts.erase(i1); 10216 break; 10217 } 10218 (*i).edit_user=200; 10219 } 10220 if(!got) { 10221 string disp=lang_get_string(1,(*i).lang,108)+eol; 10222 int ec=0; 10223 dcc_send_msg((*i).socket,disp,ec); 10224 } 10225 } 10226 if((*i).edit_user==202) { 10227 string p=dcc_get_line((*i).in_buff); 10228 if(!p.compare("")) 10229 return; 10230 (*i).user_dcc_host.group=atol(p.c_str()); 10231 string disp=lang_get_string(1,(*i).lang,113)+eol; 10232 int ec=0; 10233 dcc_send_msg((*i).socket,disp,ec); 10234 (*i).edit_user++; 10235 } 10236 if((*i).edit_user==203) { 10237 string p=dcc_get_line((*i).in_buff); 10238 if(!p.compare("")) 10239 return; 10240 p=(string)"\""+p+"\""; 10241 (*i).user_dcc_host.host=p; 10242 (*i).user_dcc_hosts.push_back((*i).user_dcc_host); 10243 (*i).edit_user=200; 10244 } 10245 10246 // Type ".fn" 10247 if((*i).edit_user==300) { 10248 string disp=lang_get_string(1,(*i).lang,114)+eol; 10249 int ec=0; 10250 dcc_send_msg((*i).socket,disp,ec); 10251 disp=""; 10252 int i2=1; 10253 vector<string>::iterator i1; 10254 for(i1=(*i).user_fullnames.begin(); i1!=(*i).user_fullnames.end(); i1++, i2++) { 10255 char tmp[64]; 10256 ltoa(i2,tmp,10); 10257 disp+=lang_get_string(1,(*i).lang,593); 10258 if(i2<10) 10259 disp+="0"; 10260 if(i2<100) 10261 disp+="0"; 10262 disp+=(string)tmp+": "+*i1+eol; 10263 } 10264 dcc_send_msg((*i).socket,disp,ec); 10265 disp=lang_get_string(1,(*i).lang,115)+eol; 10266 dcc_send_msg((*i).socket,disp,ec); 10267 (*i).edit_user++; 10268 } 10269 if((*i).edit_user==301) { 10270 string p=dcc_get_line((*i).in_buff); 10271 if(!p.compare("")) 10272 return; 10273 bool got=false; 10274 if(!p.compare(".")) { 10275 if((*i).user_fullnames.begin()==(*i).user_fullnames.end()) { 10276 string disp=lang_get_string(1,(*i).lang,546)+eol; 10277 int ec=0; 10278 dcc_send_msg((*i).socket,disp,ec); 10279 return; 10280 } else { 10281 got=true; 10282 (*i).edit_user=2; 10283 } 10284 } 10285 if(!p.compare(".add")) { 10286 got=true; 10287 string disp=lang_get_string(1,(*i).lang,116)+eol; 10288 int ec=0; 10289 dcc_send_msg((*i).socket,disp,ec); 10290 (*i).edit_user=302; 10291 } 10292 string p1, p2; 10293 int pos=0; 10294 for(unsigned int i1=0; i1<p.length(); i1++) { 10295 if(p[i1]==0x20) { 10296 pos=1; 10297 continue; 10298 } 10299 if(pos==0) 10300 p1+=p[i1]; 10301 if(pos==1) 10302 p2+=p[i1]; 10303 } 10304 if(!p1.compare(".remove")) { 10305 got=true; 10306 int line=atol(p2.c_str()); 10307 10308 int i2=1; 10309 vector<string>::iterator i1; 10310 for(i1=(*i).user_fullnames.begin(); i1!=(*i).user_fullnames.end(); i1++, i2++) 10311 if(i2==line) { 10312 (*i).user_fullnames.erase(i1); 10313 break; 10314 } 10315 (*i).edit_user=300; 10316 } 10317 if(!got) { 10318 string disp=lang_get_string(1,(*i).lang,115)+eol; 10319 int ec=0; 10320 dcc_send_msg((*i).socket,disp,ec); 10321 } 10322 } 10323 if((*i).edit_user==302) { 10324 string p=dcc_get_line((*i).in_buff); 10325 if(!p.compare("")) 10326 return; 10327 p=(string)"\""+p+"\""; 10328 (*i).user_fullnames.push_back(p); 10329 (*i).edit_user=300; 10330 } 10331 10332 // Type ".pl" 10333 if((*i).edit_user==400) { 10334 if(!(*i).access_grant_partyline) { 10335 string disp=lang_get_string(1,(*i).lang,118)+eol; 10336 int ec=0; 10337 dcc_send_msg((*i).socket,disp,ec); 10338 (*i).edit_user=2; 10339 } else { 10340 string disp=lang_get_string(1,(*i).lang,117)+eol; 10341 int ec=0; 10342 dcc_send_msg((*i).socket,disp,ec); 10343 (*i).edit_user++; 10344 } 10345 } 10346 if((*i).edit_user==401) { 10347 string p=dcc_get_line((*i).in_buff); 10348 if(!p.compare("")) 10349 return; 10350 bool got=false; 10351 if(!p.compare("y") || !p.compare("Y")) { 10352 (*i).user_access_to_partyline=true; 10353 got=true; 10354 } 10355 if(!p.compare("n") || !p.compare("N")) { 10356 (*i).user_access_to_partyline=false; 10357 got=true; 10358 } 10359 (*i).edit_user++; 10360 if(!got) 10361 (*i).edit_user=400; 10362 } 10363 if((*i).edit_user==402) { 10364 string disp=lang_get_string(1,(*i).lang,200)+eol; 10365 int ec=0; 10366 dcc_send_msg((*i).socket,disp,ec); 10367 (*i).edit_user++; 10368 } 10369 if((*i).edit_user==403) { 10370 string p=dcc_get_line((*i).in_buff); 10371 if(!p.compare("")) 10372 return; 10373 bool got=false; 10374 if(!p.compare(".")) { 10375 got=true; 10376 (*i).edit_user++; 10377 } else { 10378 if(!p.compare("0")) 10379 p="0 0"; 10380 string lines, seconds; 10381 int pos=0; 10382 for(unsigned int i1=0; i1<p.length(); i1++) { 10383 if(p[i1]==0x20) { 10384 pos++; 10385 continue; 10386 } 10387 if(pos==0) 10388 lines+=p[i1]; 10389 if(pos==1) 10390 seconds+=p[i1]; 10391 } 10392 string disp; 10393 (*i).user_partyline_msg_flood.lines=atol(lines.c_str()); 10394 (*i).user_partyline_msg_flood.seconds=atol(seconds.c_str()); 10395 (*i).edit_user++; 10396 got=true; 10397 } 10398 if(!got) 10399 (*i).edit_user=402; 10400 } 10401 if((*i).edit_user==404) { 10402 (*i).edit_user=2; 10403 } 10404 // Type ".atg" 10405 if((*i).edit_user==500) { 10406 string disp=lang_get_string(1,(*i).lang,119)+eol; 10407 int ec=0; 10408 dcc_send_msg((*i).socket,disp,ec); 10409 disp=""; 10410 int i2=1; 10411 vector<string>::iterator i1; 10412 for(i1=(*i).user_access_to_groups.begin(); i1!=(*i).user_access_to_groups.end(); i1++, i2++) { 10413 char tmp[64]; 10414 ltoa(i2,tmp,10); 10415 disp+=lang_get_string(1,(*i).lang,593); 10416 if(i2<10) 10417 disp+="0"; 10418 if(i2<100) 10419 disp+="0"; 10420 bool access=false; 10421 vector<string>::iterator i3; 10422 for(i3=(*i).access_grant_groups.begin(); i3!=(*i).access_grant_groups.end(); i3++) { 10423 if(!(*i3).compare(*i1) || !(*i3).compare("*")) { 10424 access=true; 10425 break; 10426 } 10427 } 10428 char tmp2[128]; 10429 if(access) 10430 strcpy(tmp2,lang_get_string(1,(*i).lang,120).c_str()); 10431 else 10432 strcpy(tmp2,lang_get_string(1,(*i).lang,121).c_str()); 10433 disp+=(string)tmp+": "+*i1+" = "+tmp2+eol; 10434 } 10435 dcc_send_msg((*i).socket,disp,ec); 10436 disp=lang_get_string(1,(*i).lang,122)+eol; 10437 dcc_send_msg((*i).socket,disp,ec); 10438 (*i).edit_user++; 10439 } 10440 if((*i).edit_user==501) { 10441 string p=dcc_get_line((*i).in_buff); 10442 if(!p.compare("")) 10443 return; 10444 bool got=false; 10445 if(!p.compare(".")) { 10446 got=true; 10447 (*i).edit_user=2; 10448 } 10449 if(!p.compare(".add")) { 10450 got=true; 10451 string disp=lang_get_string(1,(*i).lang,124)+eol; 10452 int ec=0; 10453 dcc_send_msg((*i).socket,disp,ec); 10454 10455 disp=""; 10456 vector<string>::iterator i3; 10457 for(i3=(*i).access_grant_groups.begin(); i3!=(*i).access_grant_groups.end(); i3++) 10458 disp+=*i3+eol; 10459 if((*i).access_grant_groups.begin()==(*i).access_grant_groups.end()) { 10460 disp=lang_get_string(1,(*i).lang,124)+eol; 10461 dcc_send_msg((*i).socket,disp,ec); 10462 (*i).edit_user=500; 10463 } else { 10464 dcc_send_msg((*i).socket,disp,ec); 10465 disp=lang_get_string(1,(*i).lang,125)+eol; 10466 dcc_send_msg((*i).socket,disp,ec); 10467 (*i).edit_user=502; 10468 } 10469 } 10470 string p1, p2; 10471 int pos=0; 10472 for(unsigned int i1=0; i1<p.length(); i1++) { 10473 if(p[i1]==0x20) { 10474 pos=1; 10475 continue; 10476 } 10477 if(pos==0) 10478 p1+=p[i1]; 10479 if(pos==1) 10480 p2+=p[i1]; 10481 } 10482 if(!p1.compare(".remove")) { 10483 got=true; 10484 int line=atol(p2.c_str()); 10485 10486 int i2=1; 10487 vector<string>::iterator i1; 10488 bool access=false; 10489 for(i1=(*i).user_access_to_groups.begin(); i1!=(*i).user_access_to_groups.end(); i1++, i2++) { 10490 vector<string>::iterator i3; 10491 for(i3=(*i).access_grant_groups.begin(); i3!=(*i).access_grant_groups.end(); i3++) { 10492 if((!(*i3).compare(*i1) || !(*i3).compare("*")) && i2==line) { 10493 access=true; 10494 (*i).user_access_to_groups.erase(i1); 10495 break; 10496 } 10497 } 10498 if(access) 10499 break; 10500 } 10501 if(!access) { 10502 string disp=lang_get_string(1,(*i).lang,123)+eol; 10503 int ec=0; 10504 dcc_send_msg((*i).socket,disp,ec); 10505 } 10506 (*i).edit_user=500; 10507 } 10508 if(!got) { 10509 string disp=lang_get_string(1,(*i).lang,122)+eol; 10510 int ec=0; 10511 dcc_send_msg((*i).socket,disp,ec); 10512 } 10513 } 10514 if((*i).edit_user==502) { 10515 string p=dcc_get_line((*i).in_buff); 10516 if(!p.compare("")) 10517 return; 10518 vector<string>::iterator i3; 10519 bool access=false; 10520 for(i3=(*i).access_grant_groups.begin(); i3!=(*i).access_grant_groups.end(); i3++) 10521 if((*i3).compare(p) || !(*i3).compare("*")) { 10522 access=true; 10523 break; 10524 } 10525 if(p.compare("*")) 10526 p=(string)"\""+p+"\""; 10527 if(!access) { 10528 string disp=lang_get_string(1,(*i).lang,123)+eol; 10529 int ec=0; 10530 dcc_send_msg((*i).socket,disp,ec); 10531 } else { 10532 (*i).user_access_to_groups.push_back(p); 10533 } 10534 (*i).edit_user=500; 10535 } 10536 // Type ".aug" 10537 if((*i).edit_user==600) { 10538 string disp=lang_get_string(1,(*i).lang,119)+eol; 10539 int ec=0; 10540 dcc_send_msg((*i).socket,disp,ec); 10541 disp=""; 10542 int i2=1; 10543 vector<string>::iterator i1; 10544 for(i1=(*i).user_access_grant_groups.begin(); i1!=(*i).user_access_grant_groups.end(); i1++, i2++) { 10545 char tmp[64]; 10546 ltoa(i2,tmp,10); 10547 disp+=lang_get_string(1,(*i).lang,593); 10548 if(i2<10) 10549 disp+="0"; 10550 if(i2<100) 10551 disp+="0"; 10552 bool access=false; 10553 vector<string>::iterator i3; 10554 for(i3=(*i).access_grant_groups.begin(); i3!=(*i).access_grant_groups.end(); i3++) { 10555 if(!(*i3).compare(*i1) || !(*i3).compare("*")) { 10556 access=true; 10557 break; 10558 } 10559 } 10560 char tmp2[128]; 10561 if(access) 10562 strcpy(tmp2,lang_get_string(1,(*i).lang,120).c_str()); 10563 else 10564 strcpy(tmp2,lang_get_string(1,(*i).lang,121).c_str()); 10565 disp+=(string)tmp+": "+*i1+" = "+tmp2+eol; 10566 } 10567 dcc_send_msg((*i).socket,disp,ec); 10568 disp=lang_get_string(1,(*i).lang,122)+eol; 10569 dcc_send_msg((*i).socket,disp,ec); 10570 (*i).edit_user++; 10571 } 10572 if((*i).edit_user==601) { 10573 string p=dcc_get_line((*i).in_buff); 10574 if(!p.compare("")) 10575 return; 10576 bool got=false; 10577 if(!p.compare(".")) { 10578 got=true; 10579 (*i).edit_user=2; 10580 } 10581 if(!p.compare(".add")) { 10582 got=true; 10583 string disp=lang_get_string(1,(*i).lang,124)+eol; 10584 int ec=0; 10585 dcc_send_msg((*i).socket,disp,ec); 10586 10587 disp=""; 10588 vector<string>::iterator i3; 10589 for(i3=(*i).access_grant_groups.begin(); i3!=(*i).access_grant_groups.end(); i3++) 10590 disp+=*i3+eol; 10591 if((*i).access_grant_groups.begin()==(*i).access_grant_groups.end()) { 10592 disp=lang_get_string(1,(*i).lang,124)+eol; 10593 dcc_send_msg((*i).socket,disp,ec); 10594 (*i).edit_user=600; 10595 } else { 10596 dcc_send_msg((*i).socket,disp,ec); 10597 disp=lang_get_string(1,(*i).lang,125)+eol; 10598 dcc_send_msg((*i).socket,disp,ec); 10599 (*i).edit_user=602; 10600 } 10601 } 10602 string p1, p2; 10603 int pos=0; 10604 for(unsigned int i1=0; i1<p.length(); i1++) { 10605 if(p[i1]==0x20) { 10606 pos=1; 10607 continue; 10608 } 10609 if(pos==0) 10610 p1+=p[i1]; 10611 if(pos==1) 10612 p2+=p[i1]; 10613 } 10614 if(!p1.compare(".remove")) { 10615 got=true; 10616 int line=atol(p2.c_str()); 10617 10618 int i2=1; 10619 bool access=false; 10620 vector<string>::iterator i1; 10621 vector<string>::iterator i3; 10622 for(i1=(*i).user_access_grant_groups.begin(); i1!=(*i).user_access_grant_groups.end(); i1++, i2++) { 10623 for(i3=(*i).access_grant_groups.begin(); i3!=(*i).access_grant_groups.end(); i3++) { 10624 if((!(*i1).compare(*i3) || !(*i3).compare("*")) && i2==line) { 10625 access=true; 10626 (*i).user_access_grant_groups.erase(i1); 10627 break; 10628 } 10629 } 10630 } 10631 if(!access) { 10632 string disp=lang_get_string(1,(*i).lang,123)+eol; 10633 int ec=0; 10634 dcc_send_msg((*i).socket,disp,ec); 10635 } 10636 (*i).edit_user=600; 10637 } 10638 if(!got) { 10639 string disp=lang_get_string(1,(*i).lang,122)+eol; 10640 int ec=0; 10641 dcc_send_msg((*i).socket,disp,ec); 10642 } 10643 } 10644 if((*i).edit_user==602) { 10645 string p=dcc_get_line((*i).in_buff); 10646 if(!p.compare("")) 10647 return; 10648 vector<string>::iterator i3; 10649 bool access=false; 10650 for(i3=(*i).access_grant_groups.begin(); i3!=(*i).access_grant_groups.end(); i3++) 10651 if((*i3).compare(p) || !(*i3).compare("*")) { 10652 access=true; 10653 break; 10654 } 10655 if(p.compare("*")) 10656 p=(string)"\""+p+"\""; 10657 if(!access) { 10658 string disp=lang_get_string(1,(*i).lang,123)+eol; 10659 int ec=0; 10660 dcc_send_msg((*i).socket,disp,ec); 10661 } else { 10662 (*i).user_access_to_groups.push_back(p); 10663 } 10664 (*i).edit_user=600; 10665 } 10666 // Type ".atp" 10667 if((*i).edit_user==700) { 10668 string disp=lang_get_string(1,(*i).lang,126)+eol; 10669 int ec=0; 10670 dcc_send_msg((*i).socket,disp,ec); 10671 disp=""; 10672 int i2=1; 10673 vector<string>::iterator i1; 10674 for(i1=(*i).user_access_to_proc_groups.begin(); i1!=(*i).user_access_to_proc_groups.end(); i1++, i2++) { 10675 char tmp[64]; 10676 ltoa(i2,tmp,10); 10677 disp+=lang_get_string(1,(*i).lang,593); 10678 if(i2<10) 10679 disp+="0"; 10680 if(i2<100) 10681 disp+="0"; 10682 bool access=false; 10683 vector<string>::iterator i3; 10684 for(i3=(*i).access_grant_proc_groups.begin(); i3!=(*i).access_grant_proc_groups.end(); i3++) { 10685 if(!(*i3).compare(*i1) || !(*i3).compare("*")) { 10686 access=true; 10687 break; 10688 } 10689 } 10690 char tmp2[128]; 10691 if(access) 10692 strcpy(tmp2,lang_get_string(1,(*i).lang,120).c_str()); 10693 else 10694 strcpy(tmp2,lang_get_string(1,(*i).lang,121).c_str()); 10695 disp+=(string)tmp+": "+*i1+" = "+tmp2+eol; 10696 } 10697 dcc_send_msg((*i).socket,disp,ec); 10698 disp=lang_get_string(1,(*i).lang,122)+eol; 10699 dcc_send_msg((*i).socket,disp,ec); 10700 (*i).edit_user++; 10701 } 10702 if((*i).edit_user==701) { 10703 string p=dcc_get_line((*i).in_buff); 10704 if(!p.compare("")) 10705 return; 10706 bool got=false; 10707 if(!p.compare(".")) { 10708 got=true; 10709 (*i).edit_user=2; 10710 } 10711 if(!p.compare(".add")) { 10712 got=true; 10713 string disp=lang_get_string(1,(*i).lang,124)+eol; 10714 int ec=0; 10715 dcc_send_msg((*i).socket,disp,ec); 10716 10717 disp=""; 10718 vector<string>::iterator i3; 10719 for(i3=(*i).access_grant_proc_groups.begin(); i3!=(*i).access_grant_proc_groups.end(); i3++) 10720 disp+=*i3+eol; 10721 if((*i).access_grant_proc_groups.begin()==(*i).access_grant_proc_groups.end()) { 10722 disp=lang_get_string(1,(*i).lang,127)+eol; 10723 dcc_send_msg((*i).socket,disp,ec); 10724 (*i).edit_user=700; 10725 } else { 10726 dcc_send_msg((*i).socket,disp,ec); 10727 disp=lang_get_string(1,(*i).lang,125)+eol; 10728 dcc_send_msg((*i).socket,disp,ec); 10729 (*i).edit_user=702; 10730 } 10731 } 10732 string p1, p2; 10733 int pos=0; 10734 for(unsigned int i1=0; i1<p.length(); i1++) { 10735 if(p[i1]==0x20) { 10736 pos=1; 10737 continue; 10738 } 10739 if(pos==0) 10740 p1+=p[i1]; 10741 if(pos==1) 10742 p2+=p[i1]; 10743 } 10744 if(!p1.compare(".remove")) { 10745 got=true; 10746 int line=atol(p2.c_str()); 10747 10748 int i2=1; 10749 vector<string>::iterator i1; 10750 bool access=false; 10751 for(i1=(*i).user_access_to_proc_groups.begin(); i1!=(*i).user_access_to_proc_groups.end(); i1++, i2++) { 10752 vector<string>::iterator i3; 10753 for(i3=(*i).access_grant_proc_groups.begin(); i3!=(*i).access_grant_proc_groups.end(); i3++) { 10754 if((!(*i3).compare(*i1) || !(*i3).compare("*")) && i2==line) { 10755 access=true; 10756 (*i).user_access_to_proc_groups.erase(i1); 10757 break; 10758 } 10759 } 10760 if(access) 10761 break; 10762 } 10763 if(!access) { 10764 string disp=lang_get_string(1,(*i).lang,123)+eol; 10765 int ec=0; 10766 dcc_send_msg((*i).socket,disp,ec); 10767 } 10768 (*i).edit_user=700; 10769 } 10770 if(!got) { 10771 string disp=lang_get_string(1,(*i).lang,122)+eol; 10772 int ec=0; 10773 dcc_send_msg((*i).socket,disp,ec); 10774 } 10775 } 10776 if((*i).edit_user==702) { 10777 string p=dcc_get_line((*i).in_buff); 10778 if(!p.compare("")) 10779 return; 10780 vector<string>::iterator i3; 10781 bool access=false; 10782 for(i3=(*i).access_grant_proc_groups.begin(); i3!=(*i).access_grant_proc_groups.end(); i3++) 10783 if((*i3).compare(p) || !(*i3).compare("*")) { 10784 access=true; 10785 break; 10786 } 10787 if(p.compare("*")) 10788 p=(string)"\""+p+"\""; 10789 if(!access) { 10790 string disp=lang_get_string(1,(*i).lang,123)+eol; 10791 int ec=0; 10792 dcc_send_msg((*i).socket,disp,ec); 10793 } else { 10794 (*i).user_access_to_proc_groups.push_back(p); 10795 } 10796 (*i).edit_user=700; 10797 } 10798 // Type ".agp" 10799 if((*i).edit_user==800) { 10800 string disp=lang_get_string(1,(*i).lang,128)+eol; 10801 int ec=0; 10802 dcc_send_msg((*i).socket,disp,ec); 10803 disp=""; 10804 int i2=1; 10805 vector<string>::iterator i1; 10806 for(i1=(*i).user_access_grant_proc_groups.begin(); i1!=(*i).user_access_grant_proc_groups.end(); i1++, i2++) { 10807 char tmp[64]; 10808 ltoa(i2,tmp,10); 10809 disp+=lang_get_string(1,(*i).lang,593); 10810 if(i2<10) 10811 disp+="0"; 10812 if(i2<100) 10813 disp+="0"; 10814 bool access=false; 10815 vector<string>::iterator i3; 10816 for(i3=(*i).access_grant_proc_groups.begin(); i3!=(*i).access_grant_proc_groups.end(); i3++) { 10817 if(!(*i3).compare(*i1) || !(*i3).compare("*")) { 10818 access=true; 10819 break; 10820 } 10821 } 10822 char tmp2[128]; 10823 if(access) 10824 strcpy(tmp2,lang_get_string(1,(*i).lang,120).c_str()); 10825 else 10826 strcpy(tmp2,lang_get_string(1,(*i).lang,121).c_str()); 10827 disp+=(string)tmp+": "+*i1+" = "+tmp2+eol; 10828 } 10829 dcc_send_msg((*i).socket,disp,ec); 10830 disp=lang_get_string(1,(*i).lang,122)+eol; 10831 dcc_send_msg((*i).socket,disp,ec); 10832 (*i).edit_user++; 10833 } 10834 if((*i).edit_user==801) { 10835 string p=dcc_get_line((*i).in_buff); 10836 if(!p.compare("")) 10837 return; 10838 bool got=false; 10839 if(!p.compare(".")) { 10840 got=true; 10841 (*i).edit_user=2; 10842 } 10843 if(!p.compare(".add")) { 10844 got=true; 10845 string disp=lang_get_string(1,(*i).lang,124)+eol; 10846 int ec=0; 10847 dcc_send_msg((*i).socket,disp,ec); 10848 10849 disp=""; 10850 vector<string>::iterator i3; 10851 for(i3=(*i).access_grant_proc_groups.begin(); i3!=(*i).access_grant_proc_groups.end(); i3++) 10852 disp+=*i3+eol; 10853 if((*i).access_grant_proc_groups.begin()==(*i).access_grant_proc_groups.end()) { 10854 disp=lang_get_string(1,(*i).lang,124)+eol; 10855 dcc_send_msg((*i).socket,disp,ec); 10856 (*i).edit_user=800; 10857 } else { 10858 dcc_send_msg((*i).socket,disp,ec); 10859 disp=lang_get_string(1,(*i).lang,125)+eol; 10860 dcc_send_msg((*i).socket,disp,ec); 10861 (*i).edit_user=802; 10862 } 10863 } 10864 string p1, p2; 10865 int pos=0; 10866 for(unsigned int i1=0; i1<p.length(); i1++) { 10867 if(p[i1]==0x20) { 10868 pos=1; 10869 continue; 10870 } 10871 if(pos==0) 10872 p1+=p[i1]; 10873 if(pos==1) 10874 p2+=p[i1]; 10875 } 10876 if(!p1.compare(".remove")) { 10877 got=true; 10878 int line=atol(p2.c_str()); 10879 10880 int i2=1; 10881 bool access=false; 10882 vector<string>::iterator i1; 10883 vector<string>::iterator i3; 10884 for(i1=(*i).user_access_grant_proc_groups.begin(); i1!=(*i).user_access_grant_proc_groups.end(); i1++, i2++) { 10885 for(i3=(*i).access_grant_proc_groups.begin(); i3!=(*i).access_grant_proc_groups.end(); i3++) { 10886 if((!(*i1).compare(*i3) || !(*i3).compare("*")) && i2==line) { 10887 access=true; 10888 (*i).user_access_grant_proc_groups.erase(i1); 10889 break; 10890 } 10891 } 10892 } 10893 if(!access) { 10894 string disp=lang_get_string(1,(*i).lang,123)+eol; 10895 int ec=0; 10896 dcc_send_msg((*i).socket,disp,ec); 10897 } 10898 (*i).edit_user=800; 10899 } 10900 if(!got) { 10901 string disp=lang_get_string(1,(*i).lang,122)+eol; 10902 int ec=0; 10903 dcc_send_msg((*i).socket,disp,ec); 10904 } 10905 } 10906 if((*i).edit_user==802) { 10907 string p=dcc_get_line((*i).in_buff); 10908 if(!p.compare("")) 10909 return; 10910 vector<string>::iterator i3; 10911 bool access=false; 10912 for(i3=(*i).access_grant_proc_groups.begin(); i3!=(*i).access_grant_proc_groups.end(); i3++) 10913 if((*i3).compare(p) || !(*i3).compare("*")) { 10914 access=true; 10915 break; 10916 } 10917 if(p.compare("*")) 10918 p=(string)"\""+p+"\""; 10919 if(!access) { 10920 string disp=lang_get_string(1,(*i).lang,123)+eol; 10921 int ec=0; 10922 dcc_send_msg((*i).socket,disp,ec); 10923 } else { 10924 (*i).user_access_grant_proc_groups.push_back(p); 10925 } 10926 (*i).edit_user=800; 10927 } 10928 10929 // Type ".aup" 10930 if((*i).edit_user==1400) { 10931 string disp=lang_get_string(1,(*i).lang,128)+eol; 10932 int ec=0; 10933 dcc_send_msg((*i).socket,disp,ec); 10934 disp=""; 10935 int i2=1; 10936 vector<string>::iterator i1; 10937 for(i1=(*i).user_access_usage_proc_groups.begin(); i1!=(*i).user_access_usage_proc_groups.end(); i1++, i2++) { 10938 char tmp[64]; 10939 ltoa(i2,tmp,10); 10940 disp+=lang_get_string(1,(*i).lang,593); 10941 if(i2<10) 10942 disp+="0"; 10943 if(i2<100) 10944 disp+="0"; 10945 bool access=false; 10946 vector<string>::iterator i3; 10947 for(i3=(*i).access_grant_proc_groups.begin(); i3!=(*i).access_grant_proc_groups.end(); i3++) { 10948 if(!(*i3).compare(*i1) || !(*i3).compare("*")) { 10949 access=true; 10950 break; 10951 } 10952 } 10953 char tmp2[128]; 10954 if(access) 10955 strcpy(tmp2,lang_get_string(1,(*i).lang,120).c_str()); 10956 else 10957 strcpy(tmp2,lang_get_string(1,(*i).lang,121).c_str()); 10958 disp+=(string)tmp+": "+*i1+" = "+tmp2+eol; 10959 } 10960 dcc_send_msg((*i).socket,disp,ec); 10961 disp=lang_get_string(1,(*i).lang,122)+eol; 10962 dcc_send_msg((*i).socket,disp,ec); 10963 (*i).edit_user++; 10964 } 10965 if((*i).edit_user==1401) { 10966 string p=dcc_get_line((*i).in_buff); 10967 if(!p.compare("")) 10968 return; 10969 bool got=false; 10970 if(!p.compare(".")) { 10971 got=true; 10972 (*i).edit_user=2; 10973 } 10974 if(!p.compare(".add")) { 10975 got=true; 10976 string disp=lang_get_string(1,(*i).lang,124)+eol; 10977 int ec=0; 10978 dcc_send_msg((*i).socket,disp,ec); 10979 10980 disp=""; 10981 vector<string>::iterator i3; 10982 for(i3=(*i).access_grant_proc_groups.begin(); i3!=(*i).access_grant_proc_groups.end(); i3++) 10983 disp+=*i3+eol; 10984 if((*i).access_grant_proc_groups.begin()==(*i).access_grant_proc_groups.end()) { 10985 disp=lang_get_string(1,(*i).lang,124)+eol; 10986 dcc_send_msg((*i).socket,disp,ec); 10987 (*i).edit_user=1400; 10988 } else { 10989 dcc_send_msg((*i).socket,disp,ec); 10990 disp=lang_get_string(1,(*i).lang,125)+eol; 10991 dcc_send_msg((*i).socket,disp,ec); 10992 (*i).edit_user=1402; 10993 } 10994 } 10995 string p1, p2; 10996 int pos=0; 10997 for(unsigned int i1=0; i1<p.length(); i1++) { 10998 if(p[i1]==0x20) { 10999 pos=1; 11000 continue; 11001 } 11002 if(pos==0) 11003 p1+=p[i1]; 11004 if(pos==1) 11005 p2+=p[i1]; 11006 } 11007 if(!p1.compare(".remove")) { 11008 got=true; 11009 int line=atol(p2.c_str()); 11010 11011 int i2=1; 11012 bool access=false; 11013 vector<string>::iterator i1; 11014 vector<string>::iterator i3; 11015 for(i1=(*i).user_access_usage_proc_groups.begin(); i1!=(*i).user_access_usage_proc_groups.end(); i1++, i2++) { 11016 for(i3=(*i).access_grant_proc_groups.begin(); i3!=(*i).access_grant_proc_groups.end(); i3++) { 11017 if((!(*i1).compare(*i3) || !(*i3).compare("*")) && i2==line) { 11018 access=true; 11019 (*i).user_access_usage_proc_groups.erase(i1); 11020 break; 11021 } 11022 } 11023 } 11024 if(!access) { 11025 string disp=lang_get_string(1,(*i).lang,123)+eol; 11026 int ec=0; 11027 dcc_send_msg((*i).socket,disp,ec); 11028 } 11029 (*i).edit_user=1400; 11030 } 11031 if(!got) { 11032 string disp=lang_get_string(1,(*i).lang,122)+eol; 11033 int ec=0; 11034 dcc_send_msg((*i).socket,disp,ec); 11035 } 11036 } 11037 if((*i).edit_user==1402) { 11038 string p=dcc_get_line((*i).in_buff); 11039 if(!p.compare("")) 11040 return; 11041 vector<string>::iterator i3; 11042 bool access=false; 11043 for(i3=(*i).access_grant_proc_groups.begin(); i3!=(*i).access_grant_proc_groups.end(); i3++) 11044 if((*i3).compare(p) || !(*i3).compare("*")) { 11045 access=true; 11046 break; 11047 } 11048 if(p.compare("*")) 11049 p=(string)"\""+p+"\""; 11050 if(!access) { 11051 string disp=lang_get_string(1,(*i).lang,123)+eol; 11052 int ec=0; 11053 dcc_send_msg((*i).socket,disp,ec); 11054 } else { 11055 (*i).user_access_usage_proc_groups.push_back(p); 11056 } 11057 (*i).edit_user=1400; 11058 } 11059 11060 // Type ".atc" 11061 if((*i).edit_user==900) { 11062 string disp=lang_get_string(1,(*i).lang,126)+eol; 11063 int ec=0; 11064 dcc_send_msg((*i).socket,disp,ec); 11065 disp=""; 11066 int i2=1; 11067 vector<string>::iterator i1; 11068 for(i1=(*i).user_access_to_channel.begin(); i1!=(*i).user_access_to_channel.end(); i1++, i2++) { 11069 char tmp[64]; 11070 ltoa(i2,tmp,10); 11071 disp+=lang_get_string(1,(*i).lang,593); 11072 if(i2<10) 11073 disp+="0"; 11074 if(i2<100) 11075 disp+="0"; 11076 bool access=false; 11077 vector<string>::iterator i3; 11078 for(i3=(*i).access_grant_channel.begin(); i3!=(*i).access_grant_channel.end(); i3++) { 11079 if(!(*i3).compare(*i1) || !(*i3).compare("*")) { 11080 access=true; 11081 break; 11082 } 11083 } 11084 char tmp2[128]; 11085 if(access) 11086 strcpy(tmp2,lang_get_string(1,(*i).lang,120).c_str()); 11087 else 11088 strcpy(tmp2,lang_get_string(1,(*i).lang,121).c_str()); 11089 disp+=(string)tmp+": "+*i1+" = "+tmp2+eol; 11090 } 11091 dcc_send_msg((*i).socket,disp,ec); 11092 disp=lang_get_string(1,(*i).lang,122)+eol; 11093 dcc_send_msg((*i).socket,disp,ec); 11094 (*i).edit_user++; 11095 } 11096 if((*i).edit_user==901) { 11097 string p=dcc_get_line((*i).in_buff); 11098 if(!p.compare("")) 11099 return; 11100 bool got=false; 11101 if(!p.compare(".")) { 11102 got=true; 11103 (*i).edit_user=2; 11104 } 11105 if(!p.compare(".add")) { 11106 got=true; 11107 string disp=lang_get_string(1,(*i).lang,124)+eol; 11108 int ec=0; 11109 dcc_send_msg((*i).socket,disp,ec); 11110 11111 disp=""; 11112 vector<string>::iterator i3; 11113 for(i3=(*i).access_grant_channel.begin(); i3!=(*i).access_grant_channel.end(); i3++) 11114 disp+=*i3+eol; 11115 if((*i).access_grant_channel.begin()==(*i).access_grant_channel.end()) { 11116 disp=lang_get_string(1,(*i).lang,127)+eol; 11117 dcc_send_msg((*i).socket,disp,ec); 11118 (*i).edit_user=900; 11119 } else { 11120 dcc_send_msg((*i).socket,disp,ec); 11121 disp=lang_get_string(1,(*i).lang,125)+eol; 11122 dcc_send_msg((*i).socket,disp,ec); 11123 (*i).edit_user=902; 11124 } 11125 } 11126 string p1, p2; 11127 int pos=0; 11128 for(unsigned int i1=0; i1<p.length(); i1++) { 11129 if(p[i1]==0x20) { 11130 pos=1; 11131 continue; 11132 } 11133 if(pos==0) 11134 p1+=p[i1]; 11135 if(pos==1) 11136 p2+=p[i1]; 11137 } 11138 if(!p1.compare(".remove")) { 11139 got=true; 11140 int line=atol(p2.c_str()); 11141 11142 int i2=1; 11143 vector<string>::iterator i1; 11144 bool access=false; 11145 for(i1=(*i).user_access_to_channel.begin(); i1!=(*i).user_access_to_channel.end(); i1++, i2++) { 11146 vector<string>::iterator i3; 11147 for(i3=(*i).access_grant_channel.begin(); i3!=(*i).access_grant_channel.end(); i3++) { 11148 if((!(*i3).compare(*i1) || !(*i3).compare("*")) && i2==line) { 11149 access=true; 11150 (*i).user_access_to_channel.erase(i1); 11151 break; 11152 } 11153 } 11154 if(access) 11155 break; 11156 } 11157 if(!access) { 11158 string disp=lang_get_string(1,(*i).lang,123)+eol; 11159 int ec=0; 11160 dcc_send_msg((*i).socket,disp,ec); 11161 } 11162 (*i).edit_user=900; 11163 } 11164 if(!got) { 11165 string disp=lang_get_string(1,(*i).lang,122)+eol; 11166 int ec=0; 11167 dcc_send_msg((*i).socket,disp,ec); 11168 } 11169 } 11170 if((*i).edit_user==902) { 11171 string p=dcc_get_line((*i).in_buff); 11172 if(!p.compare("")) 11173 return; 11174 vector<string>::iterator i3; 11175 bool access=false; 11176 for(i3=(*i).access_grant_channel.begin(); i3!=(*i).access_grant_channel.end(); i3++) 11177 if((*i3).compare(p) || !(*i3).compare("*")) { 11178 access=true; 11179 break; 11180 } 11181 if(p.compare("*")) 11182 p=(string)"\""+p+"\""; 11183 if(!access) { 11184 string disp=lang_get_string(1,(*i).lang,123)+eol; 11185 int ec=0; 11186 dcc_send_msg((*i).socket,disp,ec); 11187 } else { 11188 (*i).user_access_to_groups.push_back(p); 11189 } 11190 (*i).edit_user=900; 11191 } 11192 // Type ".auc" 11193 if((*i).edit_user==1000) { 11194 string disp=lang_get_string(1,(*i).lang,128)+eol; 11195 int ec=0; 11196 dcc_send_msg((*i).socket,disp,ec); 11197 disp=""; 11198 int i2=1; 11199 vector<string>::iterator i1; 11200 for(i1=(*i).user_access_grant_channel.begin(); i1!=(*i).user_access_grant_channel.end(); i1++, i2++) { 11201 char tmp[64]; 11202 ltoa(i2,tmp,10); 11203 disp+=lang_get_string(1,(*i).lang,593); 11204 if(i2<10) 11205 disp+="0"; 11206 if(i2<100) 11207 disp+="0"; 11208 bool access=false; 11209 vector<string>::iterator i3; 11210 for(i3=(*i).access_grant_channel.begin(); i3!=(*i).access_grant_channel.end(); i3++) { 11211 if(!(*i3).compare(*i1) || !(*i3).compare("*")) { 11212 access=true; 11213 break; 11214 } 11215 } 11216 char tmp2[128]; 11217 if(access) 11218 strcpy(tmp2,lang_get_string(1,(*i).lang,120).c_str()); 11219 else 11220 strcpy(tmp2,lang_get_string(1,(*i).lang,121).c_str()); 11221 disp+=(string)tmp+": "+*i1+" = "+tmp2+eol; 11222 } 11223 dcc_send_msg((*i).socket,disp,ec); 11224 disp=lang_get_string(1,(*i).lang,122)+eol; 11225 dcc_send_msg((*i).socket,disp,ec); 11226 (*i).edit_user++; 11227 } 11228 if((*i).edit_user==1001) { 11229 string p=dcc_get_line((*i).in_buff); 11230 if(!p.compare("")) 11231 return; 11232 bool got=false; 11233 if(!p.compare(".")) { 11234 got=true; 11235 (*i).edit_user=2; 11236 } 11237 if(!p.compare(".add")) { 11238 got=true; 11239 string disp=lang_get_string(1,(*i).lang,124)+eol; 11240 int ec=0; 11241 dcc_send_msg((*i).socket,disp,ec); 11242 11243 disp=""; 11244 vector<string>::iterator i3; 11245 for(i3=(*i).access_grant_channel.begin(); i3!=(*i).access_grant_channel.end(); i3++) 11246 disp+=*i3+eol; 11247 if((*i).access_grant_channel.begin()==(*i).access_grant_channel.end()) { 11248 disp=lang_get_string(1,(*i).lang,124)+eol; 11249 dcc_send_msg((*i).socket,disp,ec); 11250 (*i).edit_user=1000; 11251 } else { 11252 dcc_send_msg((*i).socket,disp,ec); 11253 disp=lang_get_string(1,(*i).lang,125)+eol; 11254 dcc_send_msg((*i).socket,disp,ec); 11255 (*i).edit_user=1002; 11256 } 11257 } 11258 string p1, p2; 11259 int pos=0; 11260 for(unsigned int i1=0; i1<p.length(); i1++) { 11261 if(p[i1]==0x20) { 11262 pos=1; 11263 continue; 11264 } 11265 if(pos==0) 11266 p1+=p[i1]; 11267 if(pos==1) 11268 p2+=p[i1]; 11269 } 11270 if(!p1.compare(".remove")) { 11271 got=true; 11272 int line=atol(p2.c_str()); 11273 11274 int i2=1; 11275 bool access=false; 11276 vector<string>::iterator i1; 11277 vector<string>::iterator i3; 11278 for(i1=(*i).user_access_grant_channel.begin(); i1!=(*i).user_access_grant_channel.end(); i1++, i2++) { 11279 for(i3=(*i).access_grant_channel.begin(); i3!=(*i).access_grant_channel.end(); i3++) { 11280 if((!(*i1).compare(*i3) || !(*i3).compare("*")) && i2==line) { 11281 access=true; 11282 (*i).user_access_grant_channel.erase(i1); 11283 break; 11284 } 11285 } 11286 } 11287 if(!access) { 11288 string disp=lang_get_string(1,(*i).lang,123)+eol; 11289 int ec=0; 11290 dcc_send_msg((*i).socket,disp,ec); 11291 } 11292 (*i).edit_user=1000; 11293 } 11294 if(!got) { 11295 string disp=lang_get_string(1,(*i).lang,122)+eol; 11296 int ec=0; 11297 dcc_send_msg((*i).socket,disp,ec); 11298 } 11299 } 11300 if((*i).edit_user==1002) { 11301 string p=dcc_get_line((*i).in_buff); 11302 if(!p.compare("")) 11303 return; 11304 vector<string>::iterator i3; 11305 bool access=false; 11306 for(i3=(*i).access_grant_channel.begin(); i3!=(*i).access_grant_channel.end(); i3++) 11307 if((*i3).compare(p) || !(*i3).compare("*")) { 11308 access=true; 11309 break; 11310 } 11311 if(p.compare("*")) 11312 p=(string)"\""+p+"\""; 11313 if(!access) { 11314 string disp=lang_get_string(1,(*i).lang,123)+eol; 11315 int ec=0; 11316 dcc_send_msg((*i).socket,disp,ec); 11317 } else { 11318 (*i).user_access_to_groups.push_back(p); 11319 } 11320 (*i).edit_user=1000; 11321 } 11322 // edituser / edit channel 11323 if((*i).edit_user==2000) { 11324 string chan; 11325 vector<s_channel>::iterator i1; 11326 int i2=1; 11327 for(i1=(*i).user_channels.begin(); i1!=(*i).user_channels.end(); i1++, i2++) 11328 if(i2==(*i).edit_channel_num) { 11329 chan=(*i1).channel_name; 11330 break; 11331 } 11332 if(!chan.compare("")) { 11333 (*i).edit_user=2; 11334 log_debug("in file " __FILE__ " in function " __FUNC__ " occurred error: cannot find channel to edit! (#1) huh?!"); 11335 return; 11336 } 11337 (*i).user_channel.channel_name=chan; 11338 (*i).user_channel.on_deop=(*i1).on_deop; 11339 (*i).user_channel.on_ban=(*i1).on_ban; 11340 (*i).user_channel.on_unban=(*i1).on_unban; 11341 (*i).user_channel.on_kick=(*i1).on_kick; 11342 (*i).user_channel.on_op=(*i1).on_op; 11343 (*i).user_channel.on_voice=(*i1).on_voice; 11344 (*i).user_channel.on_devoice=(*i1).on_devoice; 11345 (*i).user_channel.on_creator=(*i1).on_creator; 11346 (*i).user_channel.on_decreator=(*i1).on_decreator; 11347 (*i).user_channel.on_join=(*i1).on_join; 11348 (*i).user_channel.on_banned=(*i1).on_banned; 11349 (*i).user_channel.on_flood=(*i1).on_flood; 11350 (*i).user_channel.on_privmsg=(*i1).on_privmsg; 11351 (*i).user_channel.on_notice=(*i1).on_notice; 11352 (*i).user_channel.on_other_mode=(*i1).on_other_mode; 11353 11354 (*i).user_channel.msg_flood=(*i1).msg_flood; 11355 (*i).user_channel.notice_flood=(*i1).notice_flood; 11356 (*i).user_channel.repeat_flood=(*i1).repeat_flood; 11357 (*i).user_channel.nick_flood=(*i1).nick_flood; 11358 (*i).user_channel.join_flood=(*i1).join_flood; 11359 (*i).user_channel.mode_flood=(*i1).mode_flood; 11360 (*i).user_channel.ctcp_flood=(*i1).ctcp_flood; 11361 11362 (*i).user_channel.allow_dynamic.clear(); 11363 vector<s_dynamic_rule>::iterator i3; 11364 for(i3=(*i1).allow_dynamic.begin(); i3!=(*i1).allow_dynamic.end(); i3++) 11365 (*i).user_channel.allow_dynamic.push_back(*i3); 11366 11367 string disp=lang_get_string(1,(*i).lang,129)+eol; 11368 disp=lang_subst(disp,chan); 11369 int ec=0; 11370 dcc_send_msg((*i).socket,disp,ec); 11371 11372 (*i).edit_user++; 11373 } 11374 // on_deop 11375 if((*i).edit_user==2001) { 11376 string disp; 11377 int ec=0; 11378 11379 disp=lang_get_string(1,(*i).lang,55)+eol; // !!! 11380 dcc_send_msg((*i).socket,disp,ec); 11381 11382 vector<string>::iterator i3; 11383 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) { 11384 disp=*i3+eol; 11385 dcc_send_msg((*i).socket,disp,ec); 11386 } 11387 11388 disp=(string)"----------------"+eol; 11389 dcc_send_msg((*i).socket,disp,ec); 11390 11391 disp=lang_get_string(1,(*i).lang,75)+eol; // !!! 11392 dcc_send_msg((*i).socket,disp,ec); 11393 11394 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol; 11395 dcc_send_msg((*i).socket,disp,ec); 11396 11397 disp=lang_get_string(1,(*i).lang,133)+eol; 11398 disp=lang_subst(disp,(*i).user_channel.on_deop); 11399 dcc_send_msg((*i).socket,disp,ec); 11400 11401 disp=lang_get_string(1,(*i).lang,544)+eol; 11402 dcc_send_msg((*i).socket,disp,ec); 11403 11404 (*i).edit_user++; 11405 } 11406 if((*i).edit_user==2002) { 11407 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_deop)) { 11408 int ec=0; 11409 string disp=lang_get_string(1,(*i).lang,592)+eol; 11410 dcc_send_msg((*i).socket,disp,ec); 11411 (*i).edit_user++; 11412 return; 11413 } 11414 11415 string p=dcc_get_line((*i).in_buff); 11416 if(!p.compare("")) 11417 return; 11418 vector<string>::iterator i1; 11419 bool got=false; 11420 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++) 11421 if(!(*i1).compare(p)) 11422 got=true; 11423 if(!p.compare(".")) { 11424 got=true; 11425 string disp=lang_get_string(1,(*i).lang,131)+eol; 11426 int ec=0; 11427 dcc_send_msg((*i).socket,disp,ec); 11428 (*i).edit_user++; 11429 } else { 11430 if(!p.compare("..")) { 11431 got=true; 11432 string disp=lang_get_string(1,(*i).lang,132)+eol; 11433 int ec=0; 11434 dcc_send_msg((*i).socket,disp,ec); 11435 (*i).user_channel.on_deop=""; 11436 (*i).edit_user++; 11437 } else { 11438 if(!p.compare("!")) { 11439 vector<s_channel>::iterator i1; 11440 for(i1=(*i).user_channels.begin(); i1!=(*i).user_channels.end(); i1++) 11441 if(!(*i1).channel_name.compare((*i).user_channel.channel_name)) { 11442 (*i1).configured=false; 11443 (*i).edit_user=2; 11444 return; 11445 } 11446 } else { 11447 string disp; 11448 if(got) 11449 disp=lang_get_string(1,(*i).lang,57)+eol; 11450 else 11451 disp=lang_get_string(1,(*i).lang,58)+eol; 11452 int ec=0; 11453 dcc_send_msg((*i).socket,disp,ec); 11454 if(got) 11455 (*i).user_channel.on_deop=p; 11456 else { 11457 (*i).edit_user--; 11458 return; 11459 } 11460 (*i).edit_user++; 11461 } 11462 } 11463 } 11464 } 11465 // on_ban 11466 if((*i).edit_user==2003) { 11467 string disp; 11468 int ec=0; 11469 11470 disp=lang_get_string(1,(*i).lang,59)+eol; // !!! 11471 dcc_send_msg((*i).socket,disp,ec); 11472 11473 vector<string>::iterator i3; 11474 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) { 11475 disp=*i3+eol; 11476 dcc_send_msg((*i).socket,disp,ec); 11477 } 11478 11479 disp=(string)"----------------"+eol; 11480 dcc_send_msg((*i).socket,disp,ec); 11481 11482 disp=lang_get_string(1,(*i).lang,76)+eol; // !!! 11483 dcc_send_msg((*i).socket,disp,ec); 11484 11485 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol; 11486 dcc_send_msg((*i).socket,disp,ec); 11487 11488 disp=lang_get_string(1,(*i).lang,133)+eol; 11489 disp=lang_subst(disp,(*i).user_channel.on_ban); 11490 dcc_send_msg((*i).socket,disp,ec); 11491 11492 disp=lang_get_string(1,(*i).lang,130)+eol; 11493 dcc_send_msg((*i).socket,disp,ec); 11494 11495 (*i).edit_user++; 11496 } 11497 if((*i).edit_user==2004) { 11498 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_ban)) { 11499 int ec=0; 11500 string disp=lang_get_string(1,(*i).lang,592)+eol; 11501 dcc_send_msg((*i).socket,disp,ec); 11502 (*i).edit_user++; 11503 return; 11504 } 11505 11506 string p=dcc_get_line((*i).in_buff); 11507 if(!p.compare("")) 11508 return; 11509 vector<string>::iterator i1; 11510 bool got=false; 11511 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++) 11512 if(!(*i1).compare(p)) 11513 got=true; 11514 if(!p.compare(".")) { 11515 got=true; 11516 string disp=lang_get_string(1,(*i).lang,131)+eol; 11517 int ec=0; 11518 dcc_send_msg((*i).socket,disp,ec); 11519 (*i).edit_user++; 11520 } else { 11521 if(!p.compare("..")) { 11522 got=true; 11523 string disp=lang_get_string(1,(*i).lang,132)+eol; 11524 int ec=0; 11525 dcc_send_msg((*i).socket,disp,ec); 11526 (*i).user_channel.on_ban=""; 11527 (*i).edit_user++; 11528 } else { 11529 string disp; 11530 if(got) 11531 disp=lang_get_string(1,(*i).lang,57)+eol; 11532 else 11533 disp=lang_get_string(1,(*i).lang,58)+eol; 11534 int ec=0; 11535 dcc_send_msg((*i).socket,disp,ec); 11536 if(got) 11537 (*i).user_channel.on_ban=p; 11538 else { 11539 (*i).edit_user--; 11540 return; 11541 } 11542 (*i).edit_user++; 11543 } 11544 } 11545 } 11546 // on_unban 11547 if((*i).edit_user==2005) { 11548 string disp; 11549 int ec=0; 11550 11551 disp=lang_get_string(1,(*i).lang,60)+eol; // !!! 11552 dcc_send_msg((*i).socket,disp,ec); 11553 11554 vector<string>::iterator i3; 11555 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) { 11556 disp=*i3+eol; 11557 dcc_send_msg((*i).socket,disp,ec); 11558 } 11559 11560 disp=(string)"----------------"+eol; 11561 dcc_send_msg((*i).socket,disp,ec); 11562 11563 disp=lang_get_string(1,(*i).lang,77)+eol; // !!! 11564 dcc_send_msg((*i).socket,disp,ec); 11565 11566 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol; 11567 dcc_send_msg((*i).socket,disp,ec); 11568 11569 disp=lang_get_string(1,(*i).lang,133)+eol; 11570 disp=lang_subst(disp,(*i).user_channel.on_unban); 11571 dcc_send_msg((*i).socket,disp,ec); 11572 11573 disp=lang_get_string(1,(*i).lang,130)+eol; 11574 dcc_send_msg((*i).socket,disp,ec); 11575 11576 (*i).edit_user++; 11577 } 11578 }
Here is the call graph for this function: ![]() |
|
Should be called in a loop to process edit user / new user commands in DCC CHAT/telnet connections.
Definition at line 11588 of file dcc.cpp. References dcc_can_unassign(), dcc_get_line(), dcc_send_msg(), lang_get_string(), lang_subst(), log_debug(), and ltoa(). Referenced by dcc_loop(). 11589 { 11590 if((*i).edit_user==2006) { 11591 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_unban)) { 11592 int ec=0; 11593 string disp=lang_get_string(1,(*i).lang,592)+eol; 11594 dcc_send_msg((*i).socket,disp,ec); 11595 (*i).edit_user++; 11596 return; 11597 } 11598 11599 string p=dcc_get_line((*i).in_buff); 11600 if(!p.compare("")) 11601 return; 11602 vector<string>::iterator i1; 11603 bool got=false; 11604 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++) 11605 if(!(*i1).compare(p)) 11606 got=true; 11607 if(!p.compare(".")) { 11608 got=true; 11609 string disp=lang_get_string(1,(*i).lang,131)+eol; 11610 int ec=0; 11611 dcc_send_msg((*i).socket,disp,ec); 11612 (*i).edit_user++; 11613 } else { 11614 if(!p.compare("..")) { 11615 got=true; 11616 string disp=lang_get_string(1,(*i).lang,132)+eol; 11617 int ec=0; 11618 dcc_send_msg((*i).socket,disp,ec); 11619 (*i).user_channel.on_unban=""; 11620 (*i).edit_user++; 11621 } else { 11622 string disp; 11623 if(got) 11624 disp=lang_get_string(1,(*i).lang,57)+eol; 11625 else 11626 disp=lang_get_string(1,(*i).lang,58)+eol; 11627 int ec=0; 11628 dcc_send_msg((*i).socket,disp,ec); 11629 if(got) 11630 (*i).user_channel.on_unban=p; 11631 else { 11632 (*i).edit_user--; 11633 return; 11634 } 11635 (*i).edit_user++; 11636 } 11637 } 11638 } 11639 // on_kick 11640 if((*i).edit_user==2007) { 11641 string disp; 11642 int ec=0; 11643 11644 disp=lang_get_string(1,(*i).lang,61)+eol; // !!! 11645 dcc_send_msg((*i).socket,disp,ec); 11646 11647 vector<string>::iterator i3; 11648 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) { 11649 disp=*i3+eol; 11650 dcc_send_msg((*i).socket,disp,ec); 11651 } 11652 11653 disp=(string)"----------------"+eol; 11654 dcc_send_msg((*i).socket,disp,ec); 11655 11656 disp=lang_get_string(1,(*i).lang,78)+eol; // !!! 11657 dcc_send_msg((*i).socket,disp,ec); 11658 11659 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol; 11660 dcc_send_msg((*i).socket,disp,ec); 11661 11662 disp=lang_get_string(1,(*i).lang,133)+eol; 11663 disp=lang_subst(disp,(*i).user_channel.on_kick); 11664 dcc_send_msg((*i).socket,disp,ec); 11665 11666 disp=lang_get_string(1,(*i).lang,130)+eol; 11667 dcc_send_msg((*i).socket,disp,ec); 11668 11669 (*i).edit_user++; 11670 } 11671 if((*i).edit_user==2008) { 11672 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_kick)) { 11673 int ec=0; 11674 string disp=lang_get_string(1,(*i).lang,592)+eol; 11675 dcc_send_msg((*i).socket,disp,ec); 11676 (*i).edit_user++; 11677 return; 11678 } 11679 11680 string p=dcc_get_line((*i).in_buff); 11681 if(!p.compare("")) 11682 return; 11683 vector<string>::iterator i1; 11684 bool got=false; 11685 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++) 11686 if(!(*i1).compare(p)) 11687 got=true; 11688 if(!p.compare(".")) { 11689 got=true; 11690 string disp=lang_get_string(1,(*i).lang,131)+eol; 11691 int ec=0; 11692 dcc_send_msg((*i).socket,disp,ec); 11693 (*i).edit_user++; 11694 } else { 11695 if(!p.compare("..")) { 11696 got=true; 11697 string disp=lang_get_string(1,(*i).lang,132)+eol; 11698 int ec=0; 11699 dcc_send_msg((*i).socket,disp,ec); 11700 (*i).user_channel.on_kick=""; 11701 (*i).edit_user++; 11702 } else { 11703 string disp; 11704 if(got) 11705 disp=lang_get_string(1,(*i).lang,57)+eol; 11706 else 11707 disp=lang_get_string(1,(*i).lang,58)+eol; 11708 int ec=0; 11709 dcc_send_msg((*i).socket,disp,ec); 11710 if(got) 11711 (*i).user_channel.on_kick=p; 11712 else { 11713 (*i).edit_user--; 11714 return; 11715 } 11716 (*i).edit_user++; 11717 } 11718 } 11719 } 11720 // on_op 11721 if((*i).edit_user==2009) { 11722 string disp; 11723 int ec=0; 11724 11725 disp=lang_get_string(1,(*i).lang,62)+eol; // !!! 11726 dcc_send_msg((*i).socket,disp,ec); 11727 11728 vector<string>::iterator i3; 11729 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) { 11730 disp=*i3+eol; 11731 dcc_send_msg((*i).socket,disp,ec); 11732 } 11733 11734 disp=(string)"----------------"+eol; 11735 dcc_send_msg((*i).socket,disp,ec); 11736 11737 disp=lang_get_string(1,(*i).lang,79)+eol; // !!! 11738 dcc_send_msg((*i).socket,disp,ec); 11739 11740 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol; 11741 dcc_send_msg((*i).socket,disp,ec); 11742 11743 disp=lang_get_string(1,(*i).lang,133)+eol; 11744 disp=lang_subst(disp,(*i).user_channel.on_op); 11745 dcc_send_msg((*i).socket,disp,ec); 11746 11747 disp=lang_get_string(1,(*i).lang,130)+eol; 11748 dcc_send_msg((*i).socket,disp,ec); 11749 11750 (*i).edit_user++; 11751 } 11752 if((*i).edit_user==2010) { 11753 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_op)) { 11754 int ec=0; 11755 string disp=lang_get_string(1,(*i).lang,592)+eol; 11756 dcc_send_msg((*i).socket,disp,ec); 11757 (*i).edit_user++; 11758 return; 11759 } 11760 11761 string p=dcc_get_line((*i).in_buff); 11762 if(!p.compare("")) 11763 return; 11764 vector<string>::iterator i1; 11765 bool got=false; 11766 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++) 11767 if(!(*i1).compare(p)) 11768 got=true; 11769 if(!p.compare(".")) { 11770 got=true; 11771 string disp=lang_get_string(1,(*i).lang,131)+eol; 11772 int ec=0; 11773 dcc_send_msg((*i).socket,disp,ec); 11774 (*i).edit_user++; 11775 } else { 11776 if(!p.compare("..")) { 11777 got=true; 11778 string disp=lang_get_string(1,(*i).lang,132)+eol; 11779 int ec=0; 11780 dcc_send_msg((*i).socket,disp,ec); 11781 (*i).user_channel.on_op=""; 11782 (*i).edit_user++; 11783 } else { 11784 string disp; 11785 if(got) 11786 disp=lang_get_string(1,(*i).lang,57)+eol; 11787 else 11788 disp=lang_get_string(1,(*i).lang,58)+eol; 11789 int ec=0; 11790 dcc_send_msg((*i).socket,disp,ec); 11791 if(got) 11792 (*i).user_channel.on_op=p; 11793 else { 11794 (*i).edit_user--; 11795 return; 11796 } 11797 (*i).edit_user++; 11798 } 11799 } 11800 } 11801 // on_voice 11802 if((*i).edit_user==2011) { 11803 string disp; 11804 int ec=0; 11805 11806 disp=lang_get_string(1,(*i).lang,63)+eol; // !!! 11807 dcc_send_msg((*i).socket,disp,ec); 11808 11809 vector<string>::iterator i3; 11810 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) { 11811 disp=*i3+eol; 11812 dcc_send_msg((*i).socket,disp,ec); 11813 } 11814 11815 disp=(string)"----------------"+eol; 11816 dcc_send_msg((*i).socket,disp,ec); 11817 11818 disp=lang_get_string(1,(*i).lang,80)+eol; // !!! 11819 dcc_send_msg((*i).socket,disp,ec); 11820 11821 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol; 11822 dcc_send_msg((*i).socket,disp,ec); 11823 11824 disp=lang_get_string(1,(*i).lang,133)+eol; 11825 disp=lang_subst(disp,(*i).user_channel.on_voice); 11826 dcc_send_msg((*i).socket,disp,ec); 11827 11828 disp=lang_get_string(1,(*i).lang,130)+eol; 11829 dcc_send_msg((*i).socket,disp,ec); 11830 11831 (*i).edit_user++; 11832 } 11833 if((*i).edit_user==2012) { 11834 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_voice)) { 11835 int ec=0; 11836 string disp=lang_get_string(1,(*i).lang,592)+eol; 11837 dcc_send_msg((*i).socket,disp,ec); 11838 (*i).edit_user++; 11839 return; 11840 } 11841 11842 string p=dcc_get_line((*i).in_buff); 11843 if(!p.compare("")) 11844 return; 11845 vector<string>::iterator i1; 11846 bool got=false; 11847 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++) 11848 if(!(*i1).compare(p)) 11849 got=true; 11850 if(!p.compare(".")) { 11851 got=true; 11852 string disp=lang_get_string(1,(*i).lang,131)+eol; 11853 int ec=0; 11854 dcc_send_msg((*i).socket,disp,ec); 11855 (*i).edit_user++; 11856 } else { 11857 if(!p.compare("..")) { 11858 got=true; 11859 string disp=lang_get_string(1,(*i).lang,132)+eol; 11860 int ec=0; 11861 dcc_send_msg((*i).socket,disp,ec); 11862 (*i).user_channel.on_voice=""; 11863 (*i).edit_user++; 11864 } else { 11865 string disp; 11866 if(got) 11867 disp=lang_get_string(1,(*i).lang,57)+eol; 11868 else 11869 disp=lang_get_string(1,(*i).lang,58)+eol; 11870 int ec=0; 11871 dcc_send_msg((*i).socket,disp,ec); 11872 if(got) 11873 (*i).user_channel.on_voice=p; 11874 else { 11875 (*i).edit_user--; 11876 return; 11877 } 11878 (*i).edit_user++; 11879 } 11880 } 11881 } 11882 // on_devoice 11883 if((*i).edit_user==2013) { 11884 string disp; 11885 int ec=0; 11886 11887 disp=lang_get_string(1,(*i).lang,64)+eol; // !!! 11888 dcc_send_msg((*i).socket,disp,ec); 11889 11890 vector<string>::iterator i3; 11891 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) { 11892 disp=*i3+eol; 11893 dcc_send_msg((*i).socket,disp,ec); 11894 } 11895 11896 disp=(string)"----------------"+eol; 11897 dcc_send_msg((*i).socket,disp,ec); 11898 11899 disp=lang_get_string(1,(*i).lang,81)+eol; // !!! 11900 dcc_send_msg((*i).socket,disp,ec); 11901 11902 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol; 11903 dcc_send_msg((*i).socket,disp,ec); 11904 11905 disp=lang_get_string(1,(*i).lang,133)+eol; 11906 disp=lang_subst(disp,(*i).user_channel.on_devoice); 11907 dcc_send_msg((*i).socket,disp,ec); 11908 11909 disp=lang_get_string(1,(*i).lang,130)+eol; 11910 dcc_send_msg((*i).socket,disp,ec); 11911 11912 (*i).edit_user++; 11913 } 11914 if((*i).edit_user==2014) { 11915 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_devoice)) { 11916 int ec=0; 11917 string disp=lang_get_string(1,(*i).lang,592)+eol; 11918 dcc_send_msg((*i).socket,disp,ec); 11919 (*i).edit_user++; 11920 return; 11921 } 11922 11923 string p=dcc_get_line((*i).in_buff); 11924 if(!p.compare("")) 11925 return; 11926 vector<string>::iterator i1; 11927 bool got=false; 11928 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++) 11929 if(!(*i1).compare(p)) 11930 got=true; 11931 if(!p.compare(".")) { 11932 got=true; 11933 string disp=lang_get_string(1,(*i).lang,131)+eol; 11934 int ec=0; 11935 dcc_send_msg((*i).socket,disp,ec); 11936 (*i).edit_user++; 11937 } else { 11938 if(!p.compare("..")) { 11939 got=true; 11940 string disp=lang_get_string(1,(*i).lang,132)+eol; 11941 int ec=0; 11942 dcc_send_msg((*i).socket,disp,ec); 11943 (*i).user_channel.on_devoice=""; 11944 (*i).edit_user++; 11945 } else { 11946 string disp; 11947 if(got) 11948 disp=lang_get_string(1,(*i).lang,57)+eol; 11949 else 11950 disp=lang_get_string(1,(*i).lang,58)+eol; 11951 int ec=0; 11952 dcc_send_msg((*i).socket,disp,ec); 11953 if(got) 11954 (*i).user_channel.on_devoice=p; 11955 else { 11956 (*i).edit_user--; 11957 return; 11958 } 11959 (*i).edit_user++; 11960 } 11961 } 11962 } 11963 // on_creator 11964 if((*i).edit_user==2015) { 11965 string disp; 11966 int ec=0; 11967 11968 disp=lang_get_string(1,(*i).lang,65)+eol; // !!! 11969 dcc_send_msg((*i).socket,disp,ec); 11970 11971 vector<string>::iterator i3; 11972 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) { 11973 disp=*i3+eol; 11974 dcc_send_msg((*i).socket,disp,ec); 11975 } 11976 11977 disp=(string)"----------------"+eol; 11978 dcc_send_msg((*i).socket,disp,ec); 11979 11980 disp=lang_get_string(1,(*i).lang,82)+eol; // !!! 11981 dcc_send_msg((*i).socket,disp,ec); 11982 11983 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol; 11984 dcc_send_msg((*i).socket,disp,ec); 11985 11986 disp=lang_get_string(1,(*i).lang,133)+eol; 11987 disp=lang_subst(disp,(*i).user_channel.on_creator); 11988 dcc_send_msg((*i).socket,disp,ec); 11989 11990 disp=lang_get_string(1,(*i).lang,130)+eol; 11991 dcc_send_msg((*i).socket,disp,ec); 11992 11993 (*i).edit_user++; 11994 } 11995 if((*i).edit_user==2016) { 11996 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_creator)) { 11997 int ec=0; 11998 string disp=lang_get_string(1,(*i).lang,592)+eol; 11999 dcc_send_msg((*i).socket,disp,ec); 12000 (*i).edit_user++; 12001 return; 12002 } 12003 12004 string p=dcc_get_line((*i).in_buff); 12005 if(!p.compare("")) 12006 return; 12007 vector<string>::iterator i1; 12008 bool got=false; 12009 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++) 12010 if(!(*i1).compare(p)) 12011 got=true; 12012 if(!p.compare(".")) { 12013 got=true; 12014 string disp=lang_get_string(1,(*i).lang,131)+eol; 12015 int ec=0; 12016 dcc_send_msg((*i).socket,disp,ec); 12017 (*i).edit_user++; 12018 } else { 12019 if(!p.compare("..")) { 12020 got=true; 12021 string disp=lang_get_string(1,(*i).lang,132)+eol; 12022 int ec=0; 12023 dcc_send_msg((*i).socket,disp,ec); 12024 (*i).user_channel.on_creator=""; 12025 (*i).edit_user++; 12026 } else { 12027 string disp; 12028 if(got) 12029 disp=lang_get_string(1,(*i).lang,57)+eol; 12030 else 12031 disp=lang_get_string(1,(*i).lang,58)+eol; 12032 int ec=0; 12033 dcc_send_msg((*i).socket,disp,ec); 12034 if(got) 12035 (*i).user_channel.on_creator=p; 12036 else { 12037 (*i).edit_user--; 12038 return; 12039 } 12040 (*i).edit_user++; 12041 } 12042 } 12043 } 12044 // on_decreator 12045 if((*i).edit_user==2017) { 12046 string disp; 12047 int ec=0; 12048 12049 disp=lang_get_string(1,(*i).lang,66)+eol; // !!! 12050 dcc_send_msg((*i).socket,disp,ec); 12051 12052 vector<string>::iterator i3; 12053 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) { 12054 disp=*i3+eol; 12055 dcc_send_msg((*i).socket,disp,ec); 12056 } 12057 12058 disp=(string)"----------------"+eol; 12059 dcc_send_msg((*i).socket,disp,ec); 12060 12061 disp=lang_get_string(1,(*i).lang,83)+eol; // !!! 12062 dcc_send_msg((*i).socket,disp,ec); 12063 12064 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol; 12065 dcc_send_msg((*i).socket,disp,ec); 12066 12067 disp=lang_get_string(1,(*i).lang,133)+eol; 12068 disp=lang_subst(disp,(*i).user_channel.on_decreator); 12069 dcc_send_msg((*i).socket,disp,ec); 12070 12071 disp=lang_get_string(1,(*i).lang,130)+eol; 12072 dcc_send_msg((*i).socket,disp,ec); 12073 12074 (*i).edit_user++; 12075 } 12076 if((*i).edit_user==2018) { 12077 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_decreator)) { 12078 int ec=0; 12079 string disp=lang_get_string(1,(*i).lang,592)+eol; 12080 dcc_send_msg((*i).socket,disp,ec); 12081 (*i).edit_user++; 12082 return; 12083 } 12084 12085 string p=dcc_get_line((*i).in_buff); 12086 if(!p.compare("")) 12087 return; 12088 vector<string>::iterator i1; 12089 bool got=false; 12090 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++) 12091 if(!(*i1).compare(p)) 12092 got=true; 12093 if(!p.compare(".")) { 12094 got=true; 12095 string disp=lang_get_string(1,(*i).lang,131)+eol; 12096 int ec=0; 12097 dcc_send_msg((*i).socket,disp,ec); 12098 (*i).edit_user++; 12099 } else { 12100 if(!p.compare("..")) { 12101 got=true; 12102 string disp=lang_get_string(1,(*i).lang,132)+eol; 12103 int ec=0; 12104 dcc_send_msg((*i).socket,disp,ec); 12105 (*i).user_channel.on_decreator=""; 12106 (*i).edit_user++; 12107 } else { 12108 string disp; 12109 if(got) 12110 disp=lang_get_string(1,(*i).lang,57)+eol; 12111 else 12112 disp=lang_get_string(1,(*i).lang,58)+eol; 12113 int ec=0; 12114 dcc_send_msg((*i).socket,disp,ec); 12115 if(got) 12116 (*i).user_channel.on_decreator=p; 12117 else { 12118 (*i).edit_user--; 12119 return; 12120 } 12121 (*i).edit_user++; 12122 } 12123 } 12124 } 12125 // on_join 12126 if((*i).edit_user==2019) { 12127 string disp; 12128 int ec=0; 12129 12130 disp=lang_get_string(1,(*i).lang,67)+eol; // !!! 12131 dcc_send_msg((*i).socket,disp,ec); 12132 12133 vector<string>::iterator i3; 12134 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) { 12135 disp=*i3+eol; 12136 dcc_send_msg((*i).socket,disp,ec); 12137 } 12138 12139 disp=(string)"----------------"+eol; 12140 dcc_send_msg((*i).socket,disp,ec); 12141 12142 disp=lang_get_string(1,(*i).lang,84)+eol; // !!! 12143 dcc_send_msg((*i).socket,disp,ec); 12144 12145 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol; 12146 dcc_send_msg((*i).socket,disp,ec); 12147 12148 disp=lang_get_string(1,(*i).lang,133)+eol; 12149 disp=lang_subst(disp,(*i).user_channel.on_join); 12150 dcc_send_msg((*i).socket,disp,ec); 12151 12152 disp=lang_get_string(1,(*i).lang,130)+eol; 12153 dcc_send_msg((*i).socket,disp,ec); 12154 12155 (*i).edit_user++; 12156 } 12157 if((*i).edit_user==2020) { 12158 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_join)) { 12159 int ec=0; 12160 string disp=lang_get_string(1,(*i).lang,592)+eol; 12161 dcc_send_msg((*i).socket,disp,ec); 12162 (*i).edit_user++; 12163 return; 12164 } 12165 12166 string p=dcc_get_line((*i).in_buff); 12167 if(!p.compare("")) 12168 return; 12169 vector<string>::iterator i1; 12170 bool got=false; 12171 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++) 12172 if(!(*i1).compare(p)) 12173 got=true; 12174 if(!p.compare(".")) { 12175 got=true; 12176 string disp=lang_get_string(1,(*i).lang,131)+eol; 12177 int ec=0; 12178 dcc_send_msg((*i).socket,disp,ec); 12179 (*i).edit_user++; 12180 } else { 12181 if(!p.compare("..")) { 12182 got=true; 12183 string disp=lang_get_string(1,(*i).lang,132)+eol; 12184 int ec=0; 12185 dcc_send_msg((*i).socket,disp,ec); 12186 (*i).user_channel.on_join=""; 12187 (*i).edit_user++; 12188 } else { 12189 string disp; 12190 if(got) 12191 disp=lang_get_string(1,(*i).lang,57)+eol; 12192 else 12193 disp=lang_get_string(1,(*i).lang,58)+eol; 12194 int ec=0; 12195 dcc_send_msg((*i).socket,disp,ec); 12196 if(got) 12197 (*i).user_channel.on_join=p; 12198 else { 12199 (*i).edit_user--; 12200 return; 12201 } 12202 (*i).edit_user++; 12203 } 12204 } 12205 } 12206 // on_banned 12207 if((*i).edit_user==2021) { 12208 string disp; 12209 int ec=0; 12210 12211 disp=lang_get_string(1,(*i).lang,68)+eol; // !!! 12212 dcc_send_msg((*i).socket,disp,ec); 12213 12214 vector<string>::iterator i3; 12215 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) { 12216 disp=*i3+eol; 12217 dcc_send_msg((*i).socket,disp,ec); 12218 } 12219 12220 disp=(string)"----------------"+eol; 12221 dcc_send_msg((*i).socket,disp,ec); 12222 12223 disp=lang_get_string(1,(*i).lang,85)+eol; // !!! 12224 dcc_send_msg((*i).socket,disp,ec); 12225 12226 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol; 12227 dcc_send_msg((*i).socket,disp,ec); 12228 12229 disp=lang_get_string(1,(*i).lang,133)+eol; 12230 disp=lang_subst(disp,(*i).user_channel.on_banned); 12231 dcc_send_msg((*i).socket,disp,ec); 12232 12233 disp=lang_get_string(1,(*i).lang,130)+eol; 12234 dcc_send_msg((*i).socket,disp,ec); 12235 12236 (*i).edit_user++; 12237 } 12238 if((*i).edit_user==2022) { 12239 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_banned)) { 12240 int ec=0; 12241 string disp=lang_get_string(1,(*i).lang,592)+eol; 12242 dcc_send_msg((*i).socket,disp,ec); 12243 (*i).edit_user++; 12244 return; 12245 } 12246 12247 string p=dcc_get_line((*i).in_buff); 12248 if(!p.compare("")) 12249 return; 12250 vector<string>::iterator i1; 12251 bool got=false; 12252 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++) 12253 if(!(*i1).compare(p)) 12254 got=true; 12255 if(!p.compare(".")) { 12256 got=true; 12257 string disp=lang_get_string(1,(*i).lang,131)+eol; 12258 int ec=0; 12259 dcc_send_msg((*i).socket,disp,ec); 12260 (*i).edit_user++; 12261 } else { 12262 if(!p.compare("..")) { 12263 got=true; 12264 string disp=lang_get_string(1,(*i).lang,132)+eol; 12265 int ec=0; 12266 dcc_send_msg((*i).socket,disp,ec); 12267 (*i).user_channel.on_banned=""; 12268 (*i).edit_user++; 12269 } else { 12270 string disp; 12271 if(got) 12272 disp=lang_get_string(1,(*i).lang,57)+eol; 12273 else 12274 disp=lang_get_string(1,(*i).lang,58)+eol; 12275 int ec=0; 12276 dcc_send_msg((*i).socket,disp,ec); 12277 if(got) 12278 (*i).user_channel.on_banned=p; 12279 else { 12280 (*i).edit_user--; 12281 return; 12282 } 12283 (*i).edit_user++; 12284 } 12285 } 12286 } 12287 // on_flood 12288 if((*i).edit_user==2023) { 12289 string disp; 12290 int ec=0; 12291 12292 disp=lang_get_string(1,(*i).lang,146)+eol; // !!! 12293 dcc_send_msg((*i).socket,disp,ec); 12294 12295 vector<string>::iterator i3; 12296 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) { 12297 disp=*i3+eol; 12298 dcc_send_msg((*i).socket,disp,ec); 12299 } 12300 12301 disp=(string)"----------------"+eol; 12302 dcc_send_msg((*i).socket,disp,ec); 12303 12304 disp=lang_get_string(1,(*i).lang,147)+eol; // !!! 12305 dcc_send_msg((*i).socket,disp,ec); 12306 12307 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol; 12308 dcc_send_msg((*i).socket,disp,ec); 12309 12310 disp=lang_get_string(1,(*i).lang,133)+eol; 12311 disp=lang_subst(disp,(*i).user_channel.on_flood); 12312 dcc_send_msg((*i).socket,disp,ec); 12313 12314 disp=lang_get_string(1,(*i).lang,130)+eol; 12315 dcc_send_msg((*i).socket,disp,ec); 12316 12317 (*i).edit_user++; 12318 } 12319 if((*i).edit_user==2024) { 12320 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_flood)) { 12321 int ec=0; 12322 string disp=lang_get_string(1,(*i).lang,592)+eol; 12323 dcc_send_msg((*i).socket,disp,ec); 12324 (*i).edit_user++; 12325 return; 12326 } 12327 12328 string p=dcc_get_line((*i).in_buff); 12329 if(!p.compare("")) 12330 return; 12331 vector<string>::iterator i1; 12332 bool got=false; 12333 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++) 12334 if(!(*i1).compare(p)) 12335 got=true; 12336 if(!p.compare(".")) { 12337 got=true; 12338 string disp=lang_get_string(1,(*i).lang,131)+eol; 12339 int ec=0; 12340 dcc_send_msg((*i).socket,disp,ec); 12341 (*i).edit_user++; 12342 } else { 12343 if(!p.compare("..")) { 12344 got=true; 12345 string disp=lang_get_string(1,(*i).lang,132)+eol; 12346 int ec=0; 12347 dcc_send_msg((*i).socket,disp,ec); 12348 (*i).user_channel.on_flood=""; 12349 (*i).edit_user++; 12350 } else { 12351 string disp; 12352 if(got) 12353 disp=lang_get_string(1,(*i).lang,57)+eol; 12354 else 12355 disp=lang_get_string(1,(*i).lang,58)+eol; 12356 int ec=0; 12357 dcc_send_msg((*i).socket,disp,ec); 12358 if(got) 12359 (*i).user_channel.on_flood=p; 12360 else { 12361 (*i).edit_user--; 12362 return; 12363 } 12364 (*i).edit_user++; 12365 } 12366 } 12367 } 12368 // on_privmsg 12369 if((*i).edit_user==2025) { 12370 string disp; 12371 int ec=0; 12372 12373 disp=lang_get_string(1,(*i).lang,164)+eol; // !!! 12374 dcc_send_msg((*i).socket,disp,ec); 12375 12376 vector<string>::iterator i3; 12377 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) { 12378 disp=*i3+eol; 12379 dcc_send_msg((*i).socket,disp,ec); 12380 } 12381 12382 disp=(string)"----------------"+eol; 12383 dcc_send_msg((*i).socket,disp,ec); 12384 12385 disp=lang_get_string(1,(*i).lang,165)+eol; // !!! 12386 dcc_send_msg((*i).socket,disp,ec); 12387 12388 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol; 12389 dcc_send_msg((*i).socket,disp,ec); 12390 12391 disp=lang_get_string(1,(*i).lang,133)+eol; 12392 disp=lang_subst(disp,(*i).user_channel.on_privmsg); 12393 dcc_send_msg((*i).socket,disp,ec); 12394 12395 disp=lang_get_string(1,(*i).lang,130)+eol; 12396 dcc_send_msg((*i).socket,disp,ec); 12397 12398 (*i).edit_user++; 12399 } 12400 if((*i).edit_user==2026) { 12401 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_privmsg)) { 12402 int ec=0; 12403 string disp=lang_get_string(1,(*i).lang,592)+eol; 12404 dcc_send_msg((*i).socket,disp,ec); 12405 (*i).edit_user++; 12406 return; 12407 } 12408 12409 string p=dcc_get_line((*i).in_buff); 12410 if(!p.compare("")) 12411 return; 12412 vector<string>::iterator i1; 12413 bool got=false; 12414 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++) 12415 if(!(*i1).compare(p)) 12416 got=true; 12417 if(!p.compare(".")) { 12418 got=true; 12419 string disp=lang_get_string(1,(*i).lang,131)+eol; 12420 int ec=0; 12421 dcc_send_msg((*i).socket,disp,ec); 12422 (*i).edit_user++; 12423 } else { 12424 if(!p.compare("..")) { 12425 got=true; 12426 string disp=lang_get_string(1,(*i).lang,132)+eol; 12427 int ec=0; 12428 dcc_send_msg((*i).socket,disp,ec); 12429 (*i).user_channel.on_privmsg=""; 12430 (*i).edit_user++; 12431 } else { 12432 string disp; 12433 if(got) 12434 disp=lang_get_string(1,(*i).lang,57)+eol; 12435 else 12436 disp=lang_get_string(1,(*i).lang,58)+eol; 12437 int ec=0; 12438 dcc_send_msg((*i).socket,disp,ec); 12439 if(got) 12440 (*i).user_channel.on_privmsg=p; 12441 else { 12442 (*i).edit_user--; 12443 return; 12444 } 12445 (*i).edit_user++; 12446 } 12447 } 12448 } 12449 12450 // on_notice 12451 if((*i).edit_user==2027) { 12452 string disp; 12453 int ec=0; 12454 12455 disp=lang_get_string(1,(*i).lang,601)+eol; // !!! 12456 dcc_send_msg((*i).socket,disp,ec); 12457 12458 vector<string>::iterator i3; 12459 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) { 12460 disp=*i3+eol; 12461 dcc_send_msg((*i).socket,disp,ec); 12462 } 12463 12464 disp=(string)"----------------"+eol; 12465 dcc_send_msg((*i).socket,disp,ec); 12466 12467 disp=lang_get_string(1,(*i).lang,602)+eol; // !!! 12468 dcc_send_msg((*i).socket,disp,ec); 12469 12470 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol; 12471 dcc_send_msg((*i).socket,disp,ec); 12472 12473 disp=lang_get_string(1,(*i).lang,133)+eol; 12474 disp=lang_subst(disp,(*i).user_channel.on_privmsg); 12475 dcc_send_msg((*i).socket,disp,ec); 12476 12477 disp=lang_get_string(1,(*i).lang,130)+eol; 12478 dcc_send_msg((*i).socket,disp,ec); 12479 12480 (*i).edit_user++; 12481 } 12482 if((*i).edit_user==2028) { 12483 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_notice)) { 12484 int ec=0; 12485 string disp=lang_get_string(1,(*i).lang,592)+eol; 12486 dcc_send_msg((*i).socket,disp,ec); 12487 (*i).edit_user++; 12488 return; 12489 } 12490 12491 string p=dcc_get_line((*i).in_buff); 12492 if(!p.compare("")) 12493 return; 12494 vector<string>::iterator i1; 12495 bool got=false; 12496 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++) 12497 if(!(*i1).compare(p)) 12498 got=true; 12499 if(!p.compare(".")) { 12500 got=true; 12501 string disp=lang_get_string(1,(*i).lang,131)+eol; 12502 int ec=0; 12503 dcc_send_msg((*i).socket,disp,ec); 12504 (*i).edit_user++; 12505 } else { 12506 if(!p.compare("..")) { 12507 got=true; 12508 string disp=lang_get_string(1,(*i).lang,132)+eol; 12509 int ec=0; 12510 dcc_send_msg((*i).socket,disp,ec); 12511 (*i).user_channel.on_notice=""; 12512 (*i).edit_user++; 12513 } else { 12514 string disp; 12515 if(got) 12516 disp=lang_get_string(1,(*i).lang,57)+eol; 12517 else 12518 disp=lang_get_string(1,(*i).lang,58)+eol; 12519 int ec=0; 12520 dcc_send_msg((*i).socket,disp,ec); 12521 if(got) 12522 (*i).user_channel.on_notice=p; 12523 else { 12524 (*i).edit_user--; 12525 return; 12526 } 12527 (*i).edit_user++; 12528 } 12529 } 12530 } 12531 12532 // on_other_mode 12533 if((*i).edit_user==2029) { 12534 string disp; 12535 int ec=0; 12536 12537 disp=lang_get_string(1,(*i).lang,564)+eol; // !!! 12538 dcc_send_msg((*i).socket,disp,ec); 12539 12540 vector<string>::iterator i3; 12541 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) { 12542 disp=*i3+eol; 12543 dcc_send_msg((*i).socket,disp,ec); 12544 } 12545 12546 disp=(string)"----------------"+eol; 12547 dcc_send_msg((*i).socket,disp,ec); 12548 12549 disp=lang_get_string(1,(*i).lang,565)+eol; // !!! 12550 dcc_send_msg((*i).socket,disp,ec); 12551 12552 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol; 12553 dcc_send_msg((*i).socket,disp,ec); 12554 12555 disp=lang_get_string(1,(*i).lang,133)+eol; 12556 disp=lang_subst(disp,(*i).user_channel.on_privmsg); 12557 dcc_send_msg((*i).socket,disp,ec); 12558 12559 disp=lang_get_string(1,(*i).lang,130)+eol; 12560 dcc_send_msg((*i).socket,disp,ec); 12561 12562 (*i).edit_user++; 12563 } 12564 if((*i).edit_user==2030) { 12565 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_other_mode)) { 12566 int ec=0; 12567 string disp=lang_get_string(1,(*i).lang,592)+eol; 12568 dcc_send_msg((*i).socket,disp,ec); 12569 (*i).edit_user++; 12570 return; 12571 } 12572 12573 string p=dcc_get_line((*i).in_buff); 12574 if(!p.compare("")) 12575 return; 12576 vector<string>::iterator i1; 12577 bool got=false; 12578 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++) 12579 if(!(*i1).compare(p)) 12580 got=true; 12581 if(!p.compare(".")) { 12582 got=true; 12583 string disp=lang_get_string(1,(*i).lang,131)+eol; 12584 int ec=0; 12585 dcc_send_msg((*i).socket,disp,ec); 12586 (*i).edit_user++; 12587 } else { 12588 if(!p.compare("..")) { 12589 got=true; 12590 string disp=lang_get_string(1,(*i).lang,132)+eol; 12591 int ec=0; 12592 dcc_send_msg((*i).socket,disp,ec); 12593 (*i).user_channel.on_other_mode=""; 12594 (*i).edit_user++; 12595 } else { 12596 string disp; 12597 if(got) 12598 disp=lang_get_string(1,(*i).lang,57)+eol; 12599 else 12600 disp=lang_get_string(1,(*i).lang,58)+eol; 12601 int ec=0; 12602 dcc_send_msg((*i).socket,disp,ec); 12603 if(got) 12604 (*i).user_channel.on_other_mode=p; 12605 else { 12606 (*i).edit_user--; 12607 return; 12608 } 12609 (*i).edit_user++; 12610 } 12611 } 12612 } 12613 // msg_flood 12614 if((*i).edit_user==2031) { 12615 string disp; 12616 int ec=0; 12617 12618 disp=lang_get_string(1,(*i).lang,153)+eol; // !!! 12619 dcc_send_msg((*i).socket,disp,ec); 12620 12621 (*i).edit_user++; 12622 } 12623 if((*i).edit_user==2032) { 12624 string p=dcc_get_line((*i).in_buff); 12625 if(!p.compare("")) 12626 return; 12627 if(!p.compare(".")) { 12628 (*i).edit_user++; 12629 } else { 12630 if(!p.compare("0")) 12631 p="0 0"; 12632 string lines, seconds; 12633 int pos=0; 12634 for(unsigned int i1=0; i1<p.length(); i1++) { 12635 if(p[i1]==0x20) { 12636 pos++; 12637 continue; 12638 } 12639 if(pos==0) 12640 lines+=p[i1]; 12641 if(pos==1) 12642 seconds+=p[i1]; 12643 } 12644 string disp; 12645 (*i).user_channel.msg_flood.lines=atol(lines.c_str()); 12646 (*i).user_channel.msg_flood.seconds=atol(seconds.c_str()); 12647 (*i).edit_user++; 12648 } 12649 } 12650 // notice_flood 12651 if((*i).edit_user==2033) { 12652 string disp; 12653 int ec=0; 12654 12655 disp=lang_get_string(1,(*i).lang,154)+eol; // !!! 12656 dcc_send_msg((*i).socket,disp,ec); 12657 12658 (*i).edit_user++; 12659 } 12660 if((*i).edit_user==2034) { 12661 string p=dcc_get_line((*i).in_buff); 12662 if(!p.compare("")) 12663 return; 12664 if(!p.compare(".")) { 12665 (*i).edit_user++; 12666 } else { 12667 if(!p.compare("0")) 12668 p="0 0"; 12669 string lines, seconds; 12670 int pos=0; 12671 for(unsigned int i1=0; i1<p.length(); i1++) { 12672 if(p[i1]==0x20) { 12673 pos++; 12674 continue; 12675 } 12676 if(pos==0) 12677 lines+=p[i1]; 12678 if(pos==1) 12679 seconds+=p[i1]; 12680 } 12681 string disp; 12682 (*i).user_channel.notice_flood.lines=atol(lines.c_str()); 12683 (*i).user_channel.notice_flood.seconds=atol(seconds.c_str()); 12684 (*i).edit_user++; 12685 } 12686 } 12687 // repeat_flood 12688 if((*i).edit_user==2035) { 12689 string disp; 12690 int ec=0; 12691 12692 disp=lang_get_string(1,(*i).lang,155)+eol; // !!! 12693 dcc_send_msg((*i).socket,disp,ec); 12694 12695 (*i).edit_user++; 12696 } 12697 if((*i).edit_user==2036) { 12698 string p=dcc_get_line((*i).in_buff); 12699 if(!p.compare("")) 12700 return; 12701 if(!p.compare(".")) { 12702 (*i).edit_user++; 12703 } else { 12704 if(!p.compare("0")) 12705 p="0 0"; 12706 string lines, seconds; 12707 int pos=0; 12708 for(unsigned int i1=0; i1<p.length(); i1++) { 12709 if(p[i1]==0x20) { 12710 pos++; 12711 continue; 12712 } 12713 if(pos==0) 12714 lines+=p[i1]; 12715 if(pos==1) 12716 seconds+=p[i1]; 12717 } 12718 string disp; 12719 (*i).user_channel.repeat_flood.lines=atol(lines.c_str()); 12720 (*i).user_channel.repeat_flood.seconds=atol(seconds.c_str()); 12721 (*i).edit_user++; 12722 } 12723 } 12724 // nick_flood 12725 if((*i).edit_user==2037) { 12726 string disp; 12727 int ec=0; 12728 12729 disp=lang_get_string(1,(*i).lang,156)+eol; // !!! 12730 dcc_send_msg((*i).socket,disp,ec); 12731 12732 (*i).edit_user++; 12733 } 12734 if((*i).edit_user==2038) { 12735 string p=dcc_get_line((*i).in_buff); 12736 if(!p.compare("")) 12737 return; 12738 if(!p.compare(".")) { 12739 (*i).edit_user++; 12740 } else { 12741 if(!p.compare("0")) 12742 p="0 0"; 12743 string lines, seconds; 12744 int pos=0; 12745 for(unsigned int i1=0; i1<p.length(); i1++) { 12746 if(p[i1]==0x20) { 12747 pos++; 12748 continue; 12749 } 12750 if(pos==0) 12751 lines+=p[i1]; 12752 if(pos==1) 12753 seconds+=p[i1]; 12754 } 12755 string disp; 12756 (*i).user_channel.nick_flood.lines=atol(lines.c_str()); 12757 (*i).user_channel.nick_flood.seconds=atol(seconds.c_str()); 12758 (*i).edit_user++; 12759 } 12760 } 12761 // join_flood 12762 if((*i).edit_user==2039) { 12763 string disp; 12764 int ec=0; 12765 12766 disp=lang_get_string(1,(*i).lang,157)+eol; // !!! 12767 dcc_send_msg((*i).socket,disp,ec); 12768 12769 (*i).edit_user++; 12770 } 12771 if((*i).edit_user==2040) { 12772 string p=dcc_get_line((*i).in_buff); 12773 if(!p.compare("")) 12774 return; 12775 if(!p.compare(".")) { 12776 (*i).edit_user++; 12777 } else { 12778 if(!p.compare("0")) 12779 p="0 0"; 12780 string lines, seconds; 12781 int pos=0; 12782 for(unsigned int i1=0; i1<p.length(); i1++) { 12783 if(p[i1]==0x20) { 12784 pos++; 12785 continue; 12786 } 12787 if(pos==0) 12788 lines+=p[i1]; 12789 if(pos==1) 12790 seconds+=p[i1]; 12791 } 12792 string disp; 12793 (*i).user_channel.join_flood.lines=atol(lines.c_str()); 12794 (*i).user_channel.join_flood.seconds=atol(seconds.c_str()); 12795 (*i).edit_user++; 12796 } 12797 } 12798 // mode_flood 12799 if((*i).edit_user==2041) { 12800 string disp; 12801 int ec=0; 12802 12803 disp=lang_get_string(1,(*i).lang,159)+eol; // !!! 12804 dcc_send_msg((*i).socket,disp,ec); 12805 12806 (*i).edit_user++; 12807 } 12808 if((*i).edit_user==2042) { 12809 string p=dcc_get_line((*i).in_buff); 12810 if(!p.compare("")) 12811 return; 12812 if(!p.compare(".")) { 12813 (*i).edit_user++; 12814 } else { 12815 if(!p.compare("0")) 12816 p="0 0"; 12817 string lines, seconds; 12818 int pos=0; 12819 for(unsigned int i1=0; i1<p.length(); i1++) { 12820 if(p[i1]==0x20) { 12821 pos++; 12822 continue; 12823 } 12824 if(pos==0) 12825 lines+=p[i1]; 12826 if(pos==1) 12827 seconds+=p[i1]; 12828 } 12829 string disp; 12830 (*i).user_channel.mode_flood.lines=atol(lines.c_str()); 12831 (*i).user_channel.mode_flood.seconds=atol(seconds.c_str()); 12832 (*i).edit_user=2100; 12833 return; 12834 } 12835 } 12836 // ctcp_flood 12837 if((*i).edit_user==2100) { 12838 string disp; 12839 int ec=0; 12840 12841 disp=lang_get_string(1,(*i).lang,385)+eol; // !!! 12842 dcc_send_msg((*i).socket,disp,ec); 12843 12844 (*i).edit_user++; 12845 } 12846 if((*i).edit_user==2101) { 12847 string p=dcc_get_line((*i).in_buff); 12848 if(!p.compare("")) 12849 return; 12850 if(!p.compare(".")) { 12851 (*i).edit_user++; 12852 } else { 12853 if(!p.compare("0")) 12854 p="0 0"; 12855 string lines, seconds; 12856 int pos=0; 12857 for(unsigned int i1=0; i1<p.length(); i1++) { 12858 if(p[i1]==0x20) { 12859 pos++; 12860 continue; 12861 } 12862 if(pos==0) 12863 lines+=p[i1]; 12864 if(pos==1) 12865 seconds+=p[i1]; 12866 } 12867 string disp; 12868 (*i).user_channel.ctcp_flood.lines=atol(lines.c_str()); 12869 (*i).user_channel.ctcp_flood.seconds=atol(seconds.c_str()); 12870 (*i).edit_user++; 12871 } 12872 } 12873 // can_send_unknown 12874 if((*i).edit_user==2102) { 12875 string disp; 12876 int ec=0; 12877 12878 disp=lang_get_string(1,(*i).lang,475)+eol; // !!! 12879 dcc_send_msg((*i).socket,disp,ec); 12880 12881 (*i).edit_user++; 12882 return; 12883 } 12884 if((*i).edit_user==2103) { 12885 string p=dcc_get_line((*i).in_buff); 12886 if(p.empty()) 12887 return; 12888 12889 if(p.compare("y") && p.compare("n") && p.compare("Y") && p.compare("N")) { 12890 string disp=lang_get_string(1,(*i).lang,475)+eol; 12891 int ec=0; 12892 dcc_send_msg((*i).socket,disp,ec); 12893 } else { 12894 if(!p.compare("n") || !p.compare("N")) { 12895 (*i).user_channel.can_send_unknown_users=false; 12896 } else { 12897 (*i).user_channel.can_send_unknown_users=true; 12898 } 12899 (*i).edit_user=2039; 12900 } 12901 return; 12902 } 12903 12904 // allow_dynamic 12905 if((*i).edit_user==2039) { 12906 string disp=lang_get_string(1,(*i).lang,218)+eol; 12907 int ec=0; 12908 dcc_send_msg((*i).socket,disp,ec); 12909 disp=""; 12910 int i2=1; 12911 vector<s_dynamic_rule>::iterator i1; 12912 for(i1=(*i).user_channel.allow_dynamic.begin(); i1!=(*i).user_channel.allow_dynamic.end(); i1++, i2++) { 12913 char tmp[64]; 12914 ltoa(i2,tmp,10); 12915 disp+=lang_get_string(1,(*i).lang,593); 12916 if(i2<10) 12917 disp+="0"; 12918 if(i2<100) 12919 disp+="0"; 12920 disp+=(string)tmp+": "+(*i1).group+";"+(*i1).plus_modes+";"+(*i1).minus_modes+eol; 12921 } 12922 dcc_send_msg((*i).socket,disp,ec); 12923 disp=lang_get_string(1,(*i).lang,219)+eol; 12924 dcc_send_msg((*i).socket,disp,ec); 12925 (*i).edit_user++; 12926 } 12927 if((*i).edit_user==2040) { 12928 string p=dcc_get_line((*i).in_buff); 12929 if(!p.compare("")) 12930 return; 12931 bool got=false; 12932 if(!p.compare(".")) { 12933 got=true; 12934 (*i).edit_user=2044; 12935 } 12936 if(!p.compare(".add")) { 12937 got=true; 12938 string disp=lang_get_string(1,(*i).lang,211)+eol; 12939 int ec=0; 12940 dcc_send_msg((*i).socket,disp,ec); 12941 12942 vector<string>::iterator i1; 12943 for(i1=(*i).access_grant_groups.begin(); i1!=(*i).access_grant_groups.end(); i1++) { 12944 disp=(*i1)+eol; 12945 dcc_send_msg((*i).socket,disp,ec); 12946 } 12947 12948 (*i).user_channel_allow_dynamic.group=""; 12949 (*i).user_channel_allow_dynamic.plus_modes=""; 12950 (*i).user_channel_allow_dynamic.minus_modes=""; 12951 12952 (*i).edit_user=2041; 12953 } 12954 string p1, p2; 12955 int pos=0; 12956 for(unsigned int i1=0; i1<p.length(); i1++) { 12957 if(p[i1]==0x20) { 12958 pos=1; 12959 continue; 12960 } 12961 if(pos==0) 12962 p1+=p[i1]; 12963 if(pos==1) 12964 p2+=p[i1]; 12965 } 12966 if(!p1.compare(".remove")) { 12967 got=true; 12968 int line=atol(p2.c_str()); 12969 12970 int i2=1; 12971 vector<s_dynamic_rule>::iterator i1; 12972 for(i1=(*i).user_channel.allow_dynamic.begin(); i1!=(*i).user_channel.allow_dynamic.end(); i1++, i2++) 12973 if(i2==line) { 12974 (*i).user_channel.allow_dynamic.erase(i1); 12975 break; 12976 } 12977 (*i).edit_user=2039; 12978 } 12979 if(!got) { 12980 string disp=lang_get_string(1,(*i).lang,219)+eol; 12981 int ec=0; 12982 dcc_send_msg((*i).socket,disp,ec); 12983 } 12984 } 12985 if((*i).edit_user==2041) { 12986 string p=dcc_get_line((*i).in_buff); 12987 if(!p.compare("")) 12988 return; 12989 12990 vector<string>::iterator i1; 12991 bool got=false; 12992 for(i1=(*i).access_grant_groups.begin(); i1!=(*i).access_grant_groups.end(); i1++) 12993 if(!(*i1).compare(p)) 12994 got=true; 12995 string disp; 12996 if(got) 12997 disp=lang_get_string(1,(*i).lang,212)+eol; 12998 else 12999 disp=lang_get_string(1,(*i).lang,214)+eol; 13000 int ec=0; 13001 dcc_send_msg((*i).socket,disp,ec); 13002 p=(string)"\""+p+"\""; 13003 if(got) 13004 (*i).user_channel_allow_dynamic.group=p; 13005 13006 (*i).edit_user++; 13007 } 13008 if((*i).edit_user==2042) { 13009 string p=dcc_get_line((*i).in_buff); 13010 if(!p.compare("")) 13011 return; 13012 if(!p.compare(".")) 13013 p=""; 13014 p=(string)"\""+p+"\""; 13015 (*i).user_channel_allow_dynamic.plus_modes=p; 13016 13017 string disp; 13018 int ec=0; 13019 13020 disp=lang_get_string(1,(*i).lang,213)+eol; // !!! 13021 dcc_send_msg((*i).socket,disp,ec); 13022 (*i).edit_user++; 13023 } 13024 if((*i).edit_user==2043) { 13025 string p=dcc_get_line((*i).in_buff); 13026 if(!p.compare("")) 13027 return; 13028 if(!p.compare(".")) 13029 p=""; 13030 p=(string)"\""+p+"\""; 13031 (*i).user_channel_allow_dynamic.minus_modes=p; 13032 13033 (*i).user_channel.allow_dynamic.push_back((*i).user_channel_allow_dynamic); 13034 13035 (*i).edit_user=2039; 13036 } 13037 // 13038 if((*i).edit_user==2044) { 13039 string chan; 13040 vector<s_channel>::iterator i1; 13041 int i2=1; 13042 for(i1=(*i).user_channels.begin(); i1!=(*i).user_channels.end(); i1++, i2++) 13043 if(i2==(*i).edit_channel_num) { 13044 chan=(*i1).channel_name; 13045 break; 13046 } 13047 if(!chan.compare("")) { 13048 (*i).edit_user=2; 13049 log_debug("in file " __FILE__ " in function " __FUNC__ " occurred error: cannot find channel to edit! (#2) huh?!"); 13050 return; 13051 } 13052 (*i1).on_deop=(*i).user_channel.on_deop; 13053 (*i1).on_ban=(*i).user_channel.on_ban; 13054 (*i1).on_unban=(*i).user_channel.on_unban; 13055 (*i1).on_kick=(*i).user_channel.on_kick; 13056 (*i1).on_op=(*i).user_channel.on_op; 13057 (*i1).on_voice=(*i).user_channel.on_voice; 13058 (*i1).on_devoice=(*i).user_channel.on_devoice; 13059 (*i1).on_creator=(*i).user_channel.on_creator; 13060 (*i1).on_decreator=(*i).user_channel.on_decreator; 13061 (*i1).on_join=(*i).user_channel.on_join; 13062 (*i1).on_banned=(*i).user_channel.on_banned; 13063 (*i1).on_flood=(*i).user_channel.on_flood; 13064 (*i1).on_privmsg=(*i).user_channel.on_privmsg; 13065 (*i1).on_notice=(*i).user_channel.on_notice; 13066 (*i1).on_other_mode=(*i).user_channel.on_other_mode; 13067 13068 (*i1).msg_flood=(*i).user_channel.msg_flood; 13069 (*i1).notice_flood=(*i).user_channel.notice_flood; 13070 (*i1).repeat_flood=(*i).user_channel.repeat_flood; 13071 (*i1).nick_flood=(*i).user_channel.nick_flood; 13072 (*i1).join_flood=(*i).user_channel.join_flood; 13073 (*i1).mode_flood=(*i).user_channel.mode_flood; 13074 (*i1).ctcp_flood=(*i).user_channel.ctcp_flood; 13075 (*i1).configured=true; 13076 13077 (*i1).allow_dynamic.clear(); 13078 vector<s_dynamic_rule>::iterator i3; 13079 for(i3=(*i).user_channel.allow_dynamic.begin(); i3!=(*i).user_channel.allow_dynamic.end(); i3++) 13080 (*i1).allow_dynamic.push_back(*i3); 13081 13082 (*i).edit_user=2; 13083 } 13084 // type .commands 13085 if((*i).edit_user==1100) { 13086 if(!(*i).access_grant_backup) { 13087 string disp; 13088 int ec=0; 13089 disp=lang_get_string(1,(*i).lang,173)+eol; // !!! 13090 dcc_send_msg((*i).socket,disp,ec); 13091 13092 (*i).edit_user+=2; 13093 return; 13094 } 13095 string disp; 13096 int ec=0; 13097 13098 disp=lang_get_string(1,(*i).lang,168)+eol; // !!! 13099 dcc_send_msg((*i).socket,disp,ec); 13100 13101 (*i).edit_user++; 13102 } 13103 if((*i).edit_user==1101) { 13104 string p=dcc_get_line((*i).in_buff); 13105 if(!p.compare("")) 13106 return; 13107 bool got=false; 13108 if(!p.compare("y") || !p.compare("Y")) { 13109 got=true; 13110 (*i).user_access_to_backup=true; 13111 } 13112 if(!p.compare("n") || !p.compare("N")) { 13113 got=true; 13114 (*i).user_access_to_backup=false; 13115 } 13116 got?(*i).edit_user++:(*i).edit_user--; 13117 } 13118 if((*i).edit_user==1102) { 13119 if(!(*i).access_grant_rehash) { 13120 string disp; 13121 int ec=0; 13122 disp=lang_get_string(1,(*i).lang,174)+eol; // !!! 13123 dcc_send_msg((*i).socket,disp,ec); 13124 13125 (*i).edit_user+=2; 13126 return; 13127 } 13128 string disp; 13129 int ec=0; 13130 13131 disp=lang_get_string(1,(*i).lang,169)+eol; // !!! 13132 dcc_send_msg((*i).socket,disp,ec); 13133 13134 (*i).edit_user++; 13135 } 13136 if((*i).edit_user==1103) { 13137 string p=dcc_get_line((*i).in_buff); 13138 if(!p.compare("")) 13139 return; 13140 bool got=false; 13141 if(!p.compare("y") || !p.compare("Y")) { 13142 got=true; 13143 (*i).user_access_to_rehash=true; 13144 } 13145 if(!p.compare("n") || !p.compare("N")) { 13146 got=true; 13147 (*i).user_access_to_rehash=false; 13148 } 13149 got?(*i).edit_user++:(*i).edit_user--; 13150 } 13151 if((*i).edit_user==1104) { 13152 if(!(*i).access_grant_backup) { 13153 (*i).edit_user+=2; 13154 return; 13155 } 13156 string disp; 13157 int ec=0; 13158 13159 disp=lang_get_string(1,(*i).lang,170)+eol; // !!! 13160 dcc_send_msg((*i).socket,disp,ec); 13161 13162 (*i).edit_user++; 13163 } 13164 if((*i).edit_user==1105) { 13165 string p=dcc_get_line((*i).in_buff); 13166 if(!p.compare("")) 13167 return; 13168 bool got=false; 13169 if(!p.compare("y") || !p.compare("Y")) { 13170 got=true; 13171 (*i).user_access_grant_backup=true; 13172 } 13173 if(!p.compare("n") || !p.compare("N")) { 13174 got=true; 13175 (*i).user_access_grant_backup=false; 13176 } 13177 got?(*i).edit_user++:(*i).edit_user--; 13178 } 13179 if((*i).edit_user==1106) { 13180 if(!(*i).access_grant_rehash) { 13181 (*i).edit_user+=2; 13182 return; 13183 } 13184 string disp; 13185 int ec=0; 13186 13187 disp=lang_get_string(1,(*i).lang,171)+eol; // !!! 13188 dcc_send_msg((*i).socket,disp,ec); 13189 13190 (*i).edit_user++; 13191 } 13192 if((*i).edit_user==1107) { 13193 string p=dcc_get_line((*i).in_buff); 13194 if(!p.compare("")) 13195 return; 13196 bool got=false; 13197 if(!p.compare("y") || !p.compare("Y")) { 13198 got=true; 13199 (*i).user_access_grant_rehash=true; 13200 } 13201 if(!p.compare("n") || !p.compare("N")) { 13202 got=true; 13203 (*i).user_access_grant_rehash=false; 13204 } 13205 got?(*i).edit_user++:(*i).edit_user--; 13206 } 13207 if((*i).edit_user==1108) { 13208 if(!(*i).access_grant_plususer) { 13209 string disp; 13210 int ec=0; 13211 disp=lang_get_string(1,(*i).lang,191)+eol; // !!! 13212 dcc_send_msg((*i).socket,disp,ec); 13213 13214 (*i).edit_user+=2; 13215 return; 13216 } 13217 string disp; 13218 int ec=0; 13219 13220 disp=lang_get_string(1,(*i).lang,189)+eol; // !!! 13221 dcc_send_msg((*i).socket,disp,ec); 13222 13223 (*i).edit_user++; 13224 } 13225 if((*i).edit_user==1109) { 13226 string p=dcc_get_line((*i).in_buff); 13227 if(!p.compare("")) 13228 return; 13229 bool got=false; 13230 if(!p.compare("y") || !p.compare("Y")) { 13231 got=true; 13232 (*i).user_access_to_plususer=true; 13233 } 13234 if(!p.compare("n") || !p.compare("N")) { 13235 got=true; 13236 (*i).user_access_to_plususer=false; 13237 } 13238 got?(*i).edit_user++:(*i).edit_user--; 13239 } 13240 if((*i).edit_user==1110) { 13241 if(!(*i).access_grant_plususer) { 13242 (*i).edit_user+=2; 13243 return; 13244 } 13245 string disp; 13246 int ec=0; 13247 13248 disp=lang_get_string(1,(*i).lang,190)+eol; // !!! 13249 dcc_send_msg((*i).socket,disp,ec); 13250 13251 (*i).edit_user++; 13252 } 13253 if((*i).edit_user==1111) { 13254 string p=dcc_get_line((*i).in_buff); 13255 if(!p.compare("")) 13256 return; 13257 bool got=false; 13258 if(!p.compare("y") || !p.compare("Y")) { 13259 got=true; 13260 (*i).user_access_grant_plususer=true; 13261 } 13262 if(!p.compare("n") || !p.compare("N")) { 13263 got=true; 13264 (*i).user_access_grant_plususer=false; 13265 } 13266 got?(*i).edit_user++:(*i).edit_user--; 13267 } 13268 if((*i).edit_user==1112) { 13269 if(!(*i).access_grant_plusproc) { 13270 string disp; 13271 int ec=0; 13272 disp=lang_get_string(1,(*i).lang,199)+eol; // !!! 13273 dcc_send_msg((*i).socket,disp,ec); 13274 13275 (*i).edit_user+=2; 13276 return; 13277 } 13278 string disp; 13279 int ec=0; 13280 13281 disp=lang_get_string(1,(*i).lang,197)+eol; // !!! 13282 dcc_send_msg((*i).socket,disp,ec); 13283 13284 (*i).edit_user++; 13285 } 13286 if((*i).edit_user==1113) { 13287 string p=dcc_get_line((*i).in_buff); 13288 if(!p.compare("")) 13289 return; 13290 bool got=false; 13291 if(!p.compare("y") || !p.compare("Y")) { 13292 got=true; 13293 (*i).user_access_to_plusproc=true; 13294 } 13295 if(!p.compare("n") || !p.compare("N")) { 13296 got=true; 13297 (*i).user_access_to_plusproc=false; 13298 } 13299 got?(*i).edit_user++:(*i).edit_user--; 13300 } 13301 if((*i).edit_user==1114) { 13302 if(!(*i).access_grant_plususer) { 13303 (*i).edit_user+=2; 13304 return; 13305 } 13306 string disp; 13307 int ec=0; 13308 13309 disp=lang_get_string(1,(*i).lang,198)+eol; // !!! 13310 dcc_send_msg((*i).socket,disp,ec); 13311 13312 (*i).edit_user++; 13313 } 13314 if((*i).edit_user==1115) { 13315 string p=dcc_get_line((*i).in_buff); 13316 if(!p.compare("")) 13317 return; 13318 bool got=false; 13319 if(!p.compare("y") || !p.compare("Y")) { 13320 got=true; 13321 (*i).user_access_grant_plusproc=true; 13322 } 13323 if(!p.compare("n") || !p.compare("N")) { 13324 got=true; 13325 (*i).user_access_grant_plusproc=false; 13326 } 13327 got?(*i).edit_user++:(*i).edit_user--; 13328 } 13329 if((*i).edit_user==1116) { 13330 string disp; 13331 int ec=0; 13332 13333 if(!(*i).access_grant_replication) { 13334 (*i).edit_user+=2; 13335 13336 disp=lang_get_string(1,(*i).lang,216)+eol; // !!! 13337 dcc_send_msg((*i).socket,disp,ec); 13338 13339 return; 13340 } 13341 13342 disp=lang_get_string(1,(*i).lang,215)+eol; // !!! 13343 dcc_send_msg((*i).socket,disp,ec); 13344 13345 (*i).edit_user++; 13346 } 13347 if((*i).edit_user==1117) { 13348 string p=dcc_get_line((*i).in_buff); 13349 if(!p.compare("")) 13350 return; 13351 bool got=false; 13352 if(!p.compare("y") || !p.compare("Y")) { 13353 got=true; 13354 (*i).user_access_to_replication=true; 13355 } 13356 if(!p.compare("n") || !p.compare("N")) { 13357 got=true; 13358 (*i).user_access_to_replication=false; 13359 } 13360 got?(*i).edit_user++:(*i).edit_user--; 13361 } 13362 if((*i).edit_user==1118) { 13363 string disp; 13364 int ec=0; 13365 13366 if(!(*i).access_grant_replication) { 13367 (*i).edit_user+=2; 13368 13369 disp=lang_get_string(1,(*i).lang,216)+eol; // !!! 13370 dcc_send_msg((*i).socket,disp,ec); 13371 13372 return; 13373 } 13374 13375 disp=lang_get_string(1,(*i).lang,600)+eol; // !!! 13376 dcc_send_msg((*i).socket,disp,ec); 13377 13378 (*i).edit_user++; 13379 } 13380 if((*i).edit_user==1119) { 13381 string p=dcc_get_line((*i).in_buff); 13382 if(!p.compare("")) 13383 return; 13384 bool got=false; 13385 if(!p.compare("y") || !p.compare("Y")) { 13386 got=true; 13387 (*i).user_access_grant_replication=true; 13388 } 13389 if(!p.compare("n") || !p.compare("N")) { 13390 got=true; 13391 (*i).user_access_grant_replication=false; 13392 } 13393 got?(*i).edit_user++:(*i).edit_user--; 13394 } 13395 13396 //--- 13397 13398 if((*i).edit_user==1120) { 13399 string disp; 13400 int ec=0; 13401 13402 if(!(*i).access_grant_restart) { 13403 (*i).edit_user+=2; 13404 13405 disp=lang_get_string(1,(*i).lang,262)+eol; // !!! 13406 dcc_send_msg((*i).socket,disp,ec); 13407 13408 return; 13409 } 13410 13411 disp=lang_get_string(1,(*i).lang,260)+eol; // !!! 13412 dcc_send_msg((*i).socket,disp,ec); 13413 13414 (*i).edit_user++; 13415 } 13416 if((*i).edit_user==1121) { 13417 string p=dcc_get_line((*i).in_buff); 13418 if(!p.compare("")) 13419 return; 13420 bool got=false; 13421 if(!p.compare("y") || !p.compare("Y")) { 13422 got=true; 13423 (*i).user_access_to_restart=true; 13424 } 13425 if(!p.compare("n") || !p.compare("N")) { 13426 got=true; 13427 (*i).user_access_to_restart=false; 13428 } 13429 got?(*i).edit_user++:(*i).edit_user--; 13430 } 13431 if((*i).edit_user==1122) { 13432 string disp; 13433 int ec=0; 13434 13435 if(!(*i).access_grant_restart) { 13436 (*i).edit_user+=2; 13437 13438 return; 13439 } 13440 13441 disp=lang_get_string(1,(*i).lang,261)+eol; // !!! 13442 dcc_send_msg((*i).socket,disp,ec); 13443 13444 (*i).edit_user++; 13445 } 13446 if((*i).edit_user==1123) { 13447 string p=dcc_get_line((*i).in_buff); 13448 if(!p.compare("")) 13449 return; 13450 bool got=false; 13451 if(!p.compare("y") || !p.compare("Y")) { 13452 got=true; 13453 (*i).user_access_grant_restart=true; 13454 } 13455 if(!p.compare("n") || !p.compare("N")) { 13456 got=true; 13457 (*i).user_access_grant_restart=false; 13458 } 13459 got?(*i).edit_user++:(*i).edit_user--; 13460 } 13461 13462 if((*i).edit_user==1124) { 13463 string disp; 13464 int ec=0; 13465 13466 if(!(*i).access_grant_die) { 13467 (*i).edit_user+=2; 13468 13469 disp=lang_get_string(1,(*i).lang,269)+eol; // !!! 13470 dcc_send_msg((*i).socket,disp,ec); 13471 13472 return; 13473 } 13474 13475 disp=lang_get_string(1,(*i).lang,267)+eol; // !!! 13476 dcc_send_msg((*i).socket,disp,ec); 13477 13478 (*i).edit_user++; 13479 } 13480 if((*i).edit_user==1125) { 13481 string p=dcc_get_line((*i).in_buff); 13482 if(!p.compare("")) 13483 return; 13484 bool got=false; 13485 if(!p.compare("y") || !p.compare("Y")) { 13486 got=true; 13487 (*i).user_access_to_die=true; 13488 } 13489 if(!p.compare("n") || !p.compare("N")) { 13490 got=true; 13491 (*i).user_access_to_die=false; 13492 } 13493 got?(*i).edit_user++:(*i).edit_user--; 13494 } 13495 if((*i).edit_user==1126) { 13496 string disp; 13497 int ec=0; 13498 13499 if(!(*i).access_grant_die) { 13500 (*i).edit_user+=2; 13501 13502 return; 13503 } 13504 13505 disp=lang_get_string(1,(*i).lang,268)+eol; // !!! 13506 dcc_send_msg((*i).socket,disp,ec); 13507 13508 (*i).edit_user++; 13509 } 13510 if((*i).edit_user==1127) { 13511 string p=dcc_get_line((*i).in_buff); 13512 if(!p.compare("")) 13513 return; 13514 bool got=false; 13515 if(!p.compare("y") || !p.compare("Y")) { 13516 got=true; 13517 (*i).user_access_grant_die=true; 13518 } 13519 if(!p.compare("n") || !p.compare("N")) { 13520 got=true; 13521 (*i).user_access_grant_die=false; 13522 } 13523 got?(*i).edit_user++:(*i).edit_user--; 13524 } 13525 13526 if((*i).edit_user==1128) { 13527 string disp; 13528 int ec=0; 13529 13530 if(!(*i).access_grant_filesystem) { 13531 (*i).edit_user+=2; 13532 13533 disp=lang_get_string(1,(*i).lang,278)+eol; // !!! 13534 dcc_send_msg((*i).socket,disp,ec); 13535 13536 return; 13537 } 13538 13539 disp=lang_get_string(1,(*i).lang,276)+eol; // !!! 13540 dcc_send_msg((*i).socket,disp,ec); 13541 13542 (*i).edit_user++; 13543 } 13544 if((*i).edit_user==1129) { 13545 string p=dcc_get_line((*i).in_buff); 13546 if(!p.compare("")) 13547 return; 13548 bool got=false; 13549 if(!p.compare("y") || !p.compare("Y")) { 13550 got=true; 13551 (*i).user_access_to_filesystem=true; 13552 } 13553 if(!p.compare("n") || !p.compare("N")) { 13554 got=true; 13555 (*i).user_access_to_filesystem=false; 13556 } 13557 got?(*i).edit_user++:(*i).edit_user--; 13558 } 13559 if((*i).edit_user==1130) { 13560 string disp; 13561 int ec=0; 13562 13563 if(!(*i).access_grant_filesystem) { 13564 (*i).edit_user+=2; 13565 13566 return; 13567 } 13568 13569 disp=lang_get_string(1,(*i).lang,277)+eol; // !!! 13570 dcc_send_msg((*i).socket,disp,ec); 13571 13572 (*i).edit_user++; 13573 } 13574 if((*i).edit_user==1131) { 13575 string p=dcc_get_line((*i).in_buff); 13576 if(!p.compare("")) 13577 return; 13578 bool got=false; 13579 if(!p.compare("y") || !p.compare("Y")) { 13580 got=true; 13581 (*i).user_access_grant_filesystem=true; 13582 } 13583 if(!p.compare("n") || !p.compare("N")) { 13584 got=true; 13585 (*i).user_access_grant_filesystem=false; 13586 } 13587 got?(*i).edit_user++:(*i).edit_user--; 13588 } 13589 13590 if((*i).edit_user==1132) { 13591 string disp; 13592 int ec=0; 13593 13594 if(!(*i).access_grant_private) { 13595 (*i).edit_user+=2; 13596 13597 disp=lang_get_string(1,(*i).lang,409)+eol; // !!! 13598 dcc_send_msg((*i).socket,disp,ec); 13599 13600 return; 13601 } 13602 13603 disp=lang_get_string(1,(*i).lang,406)+eol; // !!! 13604 dcc_send_msg((*i).socket,disp,ec); 13605 13606 (*i).edit_user++; 13607 } 13608 if((*i).edit_user==1133) { 13609 string p=dcc_get_line((*i).in_buff); 13610 if(!p.compare("")) 13611 return; 13612 bool got=false; 13613 if(!p.compare("y") || !p.compare("Y")) { 13614 got=true; 13615 (*i).user_access_to_private=true; 13616 } 13617 if(!p.compare("n") || !p.compare("N")) { 13618 got=true; 13619 (*i).user_access_to_private=false; 13620 } 13621 got?(*i).edit_user++:(*i).edit_user--; 13622 } 13623 13624 if((*i).edit_user==1134) { 13625 string disp; 13626 int ec=0; 13627 13628 if(!(*i).access_grant_private) { 13629 (*i).edit_user+=2; 13630 return; 13631 } 13632 13633 disp=lang_get_string(1,(*i).lang,407)+eol; // !!! 13634 dcc_send_msg((*i).socket,disp,ec); 13635 13636 (*i).edit_user++; 13637 } 13638 if((*i).edit_user==1135) { 13639 string p=dcc_get_line((*i).in_buff); 13640 if(!p.compare("")) 13641 return; 13642 bool got=false; 13643 if(!p.compare("y") || !p.compare("Y")) { 13644 got=true; 13645 (*i).user_access_grant_private=true; 13646 } 13647 if(!p.compare("n") || !p.compare("N")) { 13648 got=true; 13649 (*i).user_access_grant_private=false; 13650 } 13651 got?(*i).edit_user++:(*i).edit_user--; 13652 } 13653 13654 if((*i).edit_user==1136) { 13655 string disp; 13656 int ec=0; 13657 13658 if(!(*i).access_grant_upgrade) { 13659 (*i).edit_user+=2; 13660 return; 13661 } 13662 13663 disp=lang_get_string(1,(*i).lang,625)+eol; // !!! 13664 dcc_send_msg((*i).socket,disp,ec); 13665 13666 (*i).edit_user++; 13667 } 13668 if((*i).edit_user==1137) { 13669 string p=dcc_get_line((*i).in_buff); 13670 if(!p.compare("")) 13671 return; 13672 bool got=false; 13673 if(!p.compare("y") || !p.compare("Y")) { 13674 got=true; 13675 (*i).user_access_to_upgrade=true; 13676 } 13677 if(!p.compare("n") || !p.compare("N")) { 13678 got=true; 13679 (*i).user_access_to_upgrade=false; 13680 } 13681 got?(*i).edit_user++:(*i).edit_user--; 13682 } 13683 13684 if((*i).edit_user==1138) { 13685 string disp; 13686 int ec=0; 13687 13688 if(!(*i).access_grant_upgrade) { 13689 (*i).edit_user+=2; 13690 return; 13691 } 13692 13693 disp=lang_get_string(1,(*i).lang,626)+eol; // !!! 13694 dcc_send_msg((*i).socket,disp,ec); 13695 13696 (*i).edit_user++; 13697 } 13698 if((*i).edit_user==1139) { 13699 string p=dcc_get_line((*i).in_buff); 13700 if(!p.compare("")) 13701 return; 13702 bool got=false; 13703 if(!p.compare("y") || !p.compare("Y")) { 13704 got=true; 13705 (*i).user_access_grant_upgrade=true; 13706 } 13707 if(!p.compare("n") || !p.compare("N")) { 13708 got=true; 13709 (*i).user_access_grant_upgrade=false; 13710 } 13711 got?(*i).edit_user++:(*i).edit_user--; 13712 } 13713 13714 //-------------- 13715 if((*i).edit_user==1140) { 13716 string disp; 13717 int ec=0; 13718 13719 if(!(*i).access_grant_apply) { 13720 (*i).edit_user+=2; 13721 return; 13722 } 13723 13724 disp=lang_get_string(1,(*i).lang,680)+eol; // !!! 13725 dcc_send_msg((*i).socket,disp,ec); 13726 13727 (*i).edit_user++; 13728 } 13729 if((*i).edit_user==1141) { 13730 string p=dcc_get_line((*i).in_buff); 13731 if(!p.compare("")) 13732 return; 13733 bool got=false; 13734 if(!p.compare("y") || !p.compare("Y")) { 13735 got=true; 13736 (*i).user_access_to_apply=true; 13737 } 13738 if(!p.compare("n") || !p.compare("N")) { 13739 got=true; 13740 (*i).user_access_to_apply=false; 13741 } 13742 got?(*i).edit_user++:(*i).edit_user--; 13743 } 13744 13745 if((*i).edit_user==1142) { 13746 string disp; 13747 int ec=0; 13748 13749 if(!(*i).access_grant_apply) { 13750 (*i).edit_user+=2; 13751 return; 13752 } 13753 13754 disp=lang_get_string(1,(*i).lang,681)+eol; // !!! 13755 dcc_send_msg((*i).socket,disp,ec); 13756 13757 (*i).edit_user++; 13758 } 13759 if((*i).edit_user==1143) { 13760 string p=dcc_get_line((*i).in_buff); 13761 if(!p.compare("")) 13762 return; 13763 bool got=false; 13764 if(!p.compare("y") || !p.compare("Y")) { 13765 got=true; 13766 (*i).user_access_grant_apply=true; 13767 } 13768 if(!p.compare("n") || !p.compare("N")) { 13769 got=true; 13770 (*i).user_access_grant_apply=false; 13771 } 13772 got?(*i).edit_user++:(*i).edit_user--; 13773 } 13774 13775 //--------------- 13776 if((*i).edit_user==1144) { 13777 if(!(*i).access_grant_can_send_all_users) { 13778 (*i).edit_user+=2; 13779 return; 13780 } 13781 string disp; 13782 int ec=0; 13783 13784 disp=lang_get_string(1,(*i).lang,477)+eol; // !!! 13785 dcc_send_msg((*i).socket,disp,ec); 13786 13787 (*i).edit_user++; 13788 } 13789 if((*i).edit_user==1145) { 13790 string p=dcc_get_line((*i).in_buff); 13791 if(!p.compare("")) 13792 return; 13793 bool got=false; 13794 if(!p.compare("y") || !p.compare("Y")) { 13795 got=true; 13796 (*i).user_access_to_can_send_all_users=true; 13797 } 13798 if(!p.compare("n") || !p.compare("N")) { 13799 got=true; 13800 (*i).user_access_to_can_send_all_users=false; 13801 } 13802 got?(*i).edit_user++:(*i).edit_user--; 13803 } 13804 13805 if((*i).edit_user==1146) { 13806 if(!(*i).access_grant_can_send_all_users) { 13807 (*i).edit_user+=2; 13808 return; 13809 } 13810 string disp; 13811 int ec=0; 13812 13813 disp=lang_get_string(1,(*i).lang,478)+eol; // !!! 13814 dcc_send_msg((*i).socket,disp,ec); 13815 13816 (*i).edit_user++; 13817 } 13818 if((*i).edit_user==1147) { 13819 string p=dcc_get_line((*i).in_buff); 13820 if(!p.compare("")) 13821 return; 13822 bool got=false; 13823 if(!p.compare("y") || !p.compare("Y")) { 13824 got=true; 13825 (*i).user_access_grant_can_send_all_users=true; 13826 } 13827 if(!p.compare("n") || !p.compare("N")) { 13828 got=true; 13829 (*i).user_access_grant_can_send_all_users=false; 13830 } 13831 got?(*i).edit_user++:(*i).edit_user--; 13832 } 13833 13834 //--------------- 13835 if((*i).edit_user==1148) { 13836 if(!(*i).access_grant_can_send_unknown_users) { 13837 (*i).edit_user+=2; 13838 return; 13839 } 13840 string disp; 13841 int ec=0; 13842 13843 disp=lang_get_string(1,(*i).lang,481)+eol; // !!! 13844 dcc_send_msg((*i).socket,disp,ec); 13845 13846 (*i).edit_user++; 13847 } 13848 if((*i).edit_user==1149) { 13849 string p=dcc_get_line((*i).in_buff); 13850 if(!p.compare("")) 13851 return; 13852 bool got=false; 13853 if(!p.compare("y") || !p.compare("Y")) { 13854 got=true; 13855 (*i).user_access_to_can_send_unknown_users=true; 13856 } 13857 if(!p.compare("n") || !p.compare("N")) { 13858 got=true; 13859 (*i).user_access_to_can_send_unknown_users=false; 13860 } 13861 got?(*i).edit_user++:(*i).edit_user--; 13862 } 13863 13864 if((*i).edit_user==1150) { 13865 if(!(*i).access_grant_can_send_unknown_users) { 13866 (*i).edit_user+=2; 13867 return; 13868 } 13869 string disp; 13870 int ec=0; 13871 13872 disp=lang_get_string(1,(*i).lang,482)+eol; // !!! 13873 dcc_send_msg((*i).socket,disp,ec); 13874 13875 (*i).edit_user++; 13876 } 13877 if((*i).edit_user==1151) { 13878 string p=dcc_get_line((*i).in_buff); 13879 if(!p.compare("")) 13880 return; 13881 bool got=false; 13882 if(!p.compare("y") || !p.compare("Y")) { 13883 got=true; 13884 (*i).user_access_grant_can_send_unknown_users=true; 13885 } 13886 if(!p.compare("n") || !p.compare("N")) { 13887 got=true; 13888 (*i).user_access_grant_can_send_unknown_users=false; 13889 } 13890 got?(*i).edit_user++:(*i).edit_user--; 13891 } 13892 13893 if((*i).edit_user==1152) { 13894 (*i).edit_user=2; 13895 } 13896 }
Here is the call graph for this function: ![]() |
|
Should be called in a loop to process filesystem commands in DCC CHAT/telnet connections.
Definition at line 7146 of file dcc.cpp. References cmp_strings_case_insensitive(), DCC_ACCESS_DENIED, dcc_get_line(), DCC_IO_ERROR, dcc_loop_filesystem_disp_rights(), DCC_NO_SUCH_FILE, dcc_send_file(), dcc_send_msg(), files, filesys_dcc_check_for_notifies(), filesys_dcc_delete(), filesys_dcc_drop_notifies(), filesys_dcc_filelist(), filesys_dcc_get_file(), filesys_dcc_set_file_attrs(), ft_file, ft_message, s_user::host_unknown, irc_get_nick(), lang_get_string(), lang_subst(), logic_eval(), logic_partyline_get_user(), r_channels, and r_users. Referenced by dcc_loop(). 07147 { 07148 if((*i).filesystem==0) 07149 return; 07150 07151 if((*i).filesystem==1) { 07152 vector<s_dcc_notify> notify; 07153 filesys_dcc_check_for_notifies((*i).as_in_logic,(*i).u,(*i).chs,"",notify,true,(*i).lang,eol); 07154 if(!notify.empty()) { 07155 filesys_dcc_drop_notifies((*i).as_in_logic,false); 07156 07157 string files; 07158 string msgs; 07159 string incomplete_files; 07160 07161 vector<s_dcc_notify>::iterator i1; 07162 for(i1=notify.begin(); i1!=notify.end(); i1++) { 07163 if((*i1).unpublished) { 07164 if(!files.empty()) 07165 files+=", "; 07166 files+="\""; 07167 files+=(*i1).name; 07168 files+="\""; 07169 } 07170 if((*i1).incomplete) { 07171 if(!incomplete_files.empty()) 07172 incomplete_files+=", "; 07173 incomplete_files+="\""; 07174 incomplete_files+=(*i1).name; 07175 incomplete_files+="\""; 07176 } 07177 if((*i1).notify_owner || (*i1).notify_user || (*i1).secure_notify_owner || (*i1).secure_notify_user) 07178 msgs+=(*i1).message; 07179 } 07180 07181 string disp=lang_get_string(1,(*i).lang,279)+eol; 07182 disp+=files; 07183 disp+=eol; 07184 disp+=lang_get_string(1,(*i).lang,401)+eol; 07185 disp+=incomplete_files; 07186 disp+=eol; 07187 disp+=lang_get_string(1,(*i).lang,324)+eol; 07188 disp+=lang_get_string(1,(*i).lang,280)+eol; 07189 disp+=lang_get_string(1,(*i).lang,281)+eol; 07190 disp+=msgs; 07191 disp+=lang_get_string(1,(*i).lang,469)+eol; 07192 int ec=0; 07193 dcc_send_msg((*i).socket,disp,ec); 07194 } 07195 07196 (*i).filesystem=2; 07197 return; 07198 } 07199 07200 if((*i).filesystem==2) { 07201 string disp=lang_get_string(1,(*i).lang,690)+eol; 07202 int ec=0; 07203 dcc_send_msg((*i).socket,disp,ec); 07204 07205 (*i).filesystem=1000; 07206 } 07207 07208 string p=dcc_get_line((*i).in_buff); 07209 07210 string c=p; 07211 string cmd, param1, param2; 07212 int pos=0; 07213 for(unsigned int i1=0; i1<c.length(); i1++) { 07214 if((pos==0 || pos==1 || pos==2) && c[i1]==0x20) { 07215 pos++; 07216 continue; 07217 } 07218 if(pos==0) 07219 cmd+=c[i1]; 07220 if(pos==1) 07221 param1+=c[i1]; 07222 if(pos==2) 07223 param2+=c[i1]; 07224 } 07225 07226 if((*i).filesystem==1000) { 07227 bool got_cmd=false; 07228 if(!cmd.compare(".editfile")) { 07229 got_cmd=true; 07230 if((*i).access_to_filesystem) { 07231 vector<s_file> files; 07232 filesys_dcc_filelist((*i).as_in_logic,files,true); 07233 07234 string files_; 07235 07236 bool got=false; 07237 string fn; 07238 07239 vector<s_file>::iterator i1; 07240 for(i1=files.begin(); i1!=files.end(); i1++) { 07241 if(!(*i1).public_name.compare(param1)) { 07242 got=true; 07243 fn=(*i1).public_name; 07244 break; 07245 } 07246 if(!files_.empty()) 07247 files_+=", "; 07248 files_+="\""; 07249 files_+=(*i1).public_name; 07250 files_+="\""; 07251 } 07252 07253 if(!got) { 07254 string disp=lang_get_string(1,(*i).lang,279)+eol; 07255 disp+=files_; 07256 disp+=eol; 07257 disp+=lang_get_string(1,(*i).lang,324)+eol; 07258 disp+=lang_get_string(1,(*i).lang,280)+eol; 07259 disp+=lang_get_string(1,(*i).lang,281)+eol; 07260 disp+=lang_get_string(1,(*i).lang,282)+eol; 07261 int ec=0; 07262 dcc_send_msg((*i).socket,disp,ec); 07263 } else { 07264 (*i).fs.file.clear(); 07265 if(filesys_dcc_get_file((*i).as_in_logic,fn,(*i).fs.file)) { 07266 vector<s_access>::iterator i1; 07267 string disp; 07268 for(i1=(*i).fs.file.access.begin(); i1!=(*i).fs.file.access.end(); i1++) 07269 disp+=dcc_loop_filesystem_disp_rights((*i).lang,*i1,eol); 07270 int ec=0; 07271 dcc_send_msg((*i).socket,disp,ec); 07272 07273 (*i).fs.name=fn; 07274 (*i).filesystem=2000; 07275 } else { 07276 string disp=lang_get_string(1,(*i).lang,291)+eol; 07277 int ec=0; 07278 dcc_send_msg((*i).socket,disp,ec); 07279 (*i).filesystem=1000; 07280 } 07281 return; 07282 } 07283 } else { 07284 string disp=lang_get_string(1,(*i).lang,275)+eol; 07285 int ec=0; 07286 dcc_send_msg((*i).socket,disp,ec); 07287 } 07288 } 07289 if(!cmd.compare(".getfile")) { 07290 got_cmd=true; 07291 int dcc_group=atol(param2.c_str()); 07292 int res=dcc_send_file(true,param1,irc_get_nick((*i).as_in_logic),dcc_group); 07293 string disp; 07294 switch(res) { 07295 case DCC_NO_SUCH_FILE: 07296 disp=lang_get_string(1,"en",334); 07297 break; 07298 case DCC_ACCESS_DENIED: 07299 disp=lang_get_string(1,"en",335); 07300 break; 07301 case DCC_IO_ERROR: 07302 disp=lang_get_string(1,"en",336); 07303 break; 07304 } 07305 if(!disp.empty()) { 07306 disp+=eol; 07307 int ec=0; 07308 dcc_send_msg((*i).socket,disp,ec); 07309 } 07310 return; 07311 } 07312 if(!cmd.compare(".finish")) { 07313 got_cmd=true; 07314 string disp=lang_get_string(1,(*i).lang,325)+eol; 07315 int ec=0; 07316 dcc_send_msg((*i).socket,disp,ec); 07317 07318 (*i).filesystem=0; 07319 return; 07320 } 07321 if(!cmd.compare(".del")) { 07322 got_cmd=true; 07323 if(param1.empty() || !param2.empty()) { 07324 string disp=lang_get_string(1,(*i).lang,403)+eol; 07325 int ec=0; 07326 dcc_send_msg((*i).socket,disp,ec); 07327 } else { 07328 int fs_ec=filesys_dcc_delete((*i).as_in_logic,param1); 07329 string disp; 07330 switch(fs_ec) { 07331 case DCC_NO_SUCH_FILE: 07332 disp=lang_get_string(1,(*i).lang,334)+eol; 07333 break; 07334 case DCC_ACCESS_DENIED: 07335 disp=lang_get_string(1,(*i).lang,404)+eol; 07336 break; 07337 case 0: 07338 disp=lang_get_string(1,(*i).lang,405)+eol; 07339 } 07340 if(!disp.empty()) { 07341 int ec=0; 07342 dcc_send_msg((*i).socket,disp,ec); 07343 } 07344 } 07345 (*i).filesystem=1000; 07346 return; 07347 } 07348 if(!cmd.compare(".list")) { 07349 got_cmd=true; 07350 vector<s_file> files; 07351 filesys_dcc_filelist((*i).as_in_logic,files,false); 07352 vector<s_file>::iterator i1; 07353 string msg; 07354 for(i1=files.begin(); i1!=files.end(); i1++) { 07355 if(!((*i1).is_owner((*i).as_in_logic) || (*i1).can_read((*i).as_in_logic) || (*i1).can_delete((*i).as_in_logic))) 07356 continue; 07357 if((*i1).is_owner((*i).as_in_logic)) 07358 msg+=lang_get_string(1,(*i).lang,296); 07359 if((*i1).can_read((*i).as_in_logic)) 07360 if(!msg.empty()) { 07361 msg+=" "; 07362 msg+=lang_get_string(1,(*i).lang,297); 07363 } 07364 else 07365 msg+=lang_get_string(1,(*i).lang,297); 07366 if((*i1).can_delete((*i).as_in_logic)) 07367 if(!msg.empty()) { 07368 msg+=" "; 07369 msg+=lang_get_string(1,(*i).lang,298); 07370 } 07371 else 07372 msg+=lang_get_string(1,(*i).lang,298); 07373 if((*i1).file_type==ft_file) 07374 if(!msg.empty()) { 07375 msg+=" "; 07376 msg+=lang_get_string(1,(*i).lang,471); 07377 } 07378 else 07379 msg+=lang_get_string(1,(*i).lang,471); 07380 if((*i1).file_type==ft_message) 07381 if(!msg.empty()) { 07382 msg+=" "; 07383 msg+=lang_get_string(1,(*i).lang,472); 07384 } 07385 else 07386 msg+=lang_get_string(1,(*i).lang,472); 07387 msg+=" = "; 07388 msg+=(*i1).public_name+eol; 07389 } 07390 string disp; 07391 if(msg.empty()) 07392 disp=lang_get_string(1,(*i).lang,470)+eol; 07393 else 07394 disp=msg; 07395 int ec=0; 07396 dcc_send_msg((*i).socket,disp,ec); 07397 } 07398 if(!cmd.compare(".help")) { 07399 got_cmd=true; 07400 string disp=lang_get_string(1,(*i).lang,691)+eol; 07401 int ec=0; 07402 dcc_send_msg((*i).socket,disp,ec); 07403 } 07404 if(!got_cmd && !cmd.empty()) { 07405 (*i).filesystem=2; 07406 return; 07407 } 07408 return; 07409 } 07410 07411 // .editfile 07412 if((*i).filesystem==2000) { 07413 string disp=lang_subst(lang_get_string(1,(*i).lang,283),(*i).fs.name)+eol; 07414 disp+=lang_get_string(1,(*i).lang,284)+eol; 07415 if((*i).fs.file.is_owner((*i).as_in_logic)) 07416 disp+=lang_get_string(1,(*i).lang,285)+eol; 07417 else 07418 disp+=lang_get_string(1,(*i).lang,286)+eol; 07419 if((*i).fs.file.can_read((*i).as_in_logic)) 07420 disp+=lang_get_string(1,(*i).lang,287)+eol; 07421 else 07422 disp+=lang_get_string(1,(*i).lang,288)+eol; 07423 if((*i).fs.file.can_delete((*i).as_in_logic)) 07424 disp+=lang_get_string(1,(*i).lang,289)+eol; 07425 else 07426 disp+=lang_get_string(1,(*i).lang,290)+eol; 07427 disp+=lang_get_string(1,(*i).lang,291)+eol; 07428 int ec=0; 07429 dcc_send_msg((*i).socket,disp,ec); 07430 07431 (*i).filesystem++; 07432 return; 07433 } 07434 07435 if((*i).filesystem==2001) { 07436 if(p.empty()) 07437 return; 07438 07439 if(!cmd.compare(".attr")) { 07440 if((*i).fs.file.is_owner((*i).as_in_logic)) { 07441 (*i).filesystem=3000; 07442 } else { 07443 string disp=lang_get_string(1,(*i).lang,286)+eol; 07444 int ec=0; 07445 dcc_send_msg((*i).socket,disp,ec); 07446 (*i).filesystem=2000; 07447 } 07448 return; 07449 } 07450 07451 if(!cmd.compare(".show")) { 07452 vector<s_access>::iterator i1; 07453 string disp; 07454 for(i1=(*i).fs.file.access.begin(); i1!=(*i).fs.file.access.end(); i1++) 07455 disp+=dcc_loop_filesystem_disp_rights((*i).lang,*i1,eol); 07456 int ec=0; 07457 dcc_send_msg((*i).socket,disp,ec); 07458 (*i).filesystem=2000; 07459 return; 07460 } 07461 07462 if(!cmd.compare(".expiration")) { 07463 vector<s_access>::iterator i1; 07464 (*i).filesystem=7000; 07465 return; 07466 } 07467 07468 if(!cmd.compare(".finish")) { 07469 string disp=lang_get_string(1,(*i).lang,319)+eol; 07470 int ec=0; 07471 dcc_send_msg((*i).socket,disp,ec); 07472 07473 (*i).filesystem=6000; 07474 return; 07475 } 07476 (*i).filesystem--; 07477 return; 07478 } 07479 07480 // .attr 07481 if((*i).filesystem==3000) { 07482 string disp=lang_get_string(1,(*i).lang,293)+eol; 07483 vector<s_access>::iterator i1; 07484 for(i1=(*i).fs.file.access.begin(); i1!=(*i).fs.file.access.end(); i1++) 07485 disp+=dcc_loop_filesystem_disp_rights((*i).lang,*i1,eol); 07486 disp+=lang_get_string(1,(*i).lang,302)+eol; 07487 disp+=lang_get_string(1,(*i).lang,303)+eol; 07488 int ec=0; 07489 dcc_send_msg((*i).socket,disp,ec); 07490 (*i).filesystem++; 07491 return; 07492 } 07493 if((*i).filesystem==3001) { 07494 bool all_users=!param1.compare("*"); 07495 bool got=false; 07496 bool got_cmd=false; 07497 if(!cmd.compare(".remove")) { 07498 got_cmd=true; 07499 if(all_users) { 07500 vector<s_access>::iterator i1; 07501 again2: 07502 for(i1=(*i).fs.file.access.begin(); i1!=(*i).fs.file.access.end(); i1++) { 07503 if((*i1).user_name.compare((*i).as_in_logic)) { 07504 (*i).fs.file.access.erase(i1); 07505 got=true; 07506 goto again2; 07507 } 07508 } 07509 } else { 07510 vector<s_access>::iterator i1; 07511 again1: 07512 for(i1=(*i).fs.file.access.begin(); i1!=(*i).fs.file.access.end(); i1++) { 07513 if(!(*i1).user_name.compare(param1)) { 07514 (*i).fs.file.access.erase(i1); 07515 got=true; 07516 goto again1; 07517 } 07518 } 07519 if(!got) { 07520 string disp=lang_get_string(1,(*i).lang,304)+eol; 07521 int ec=0; 07522 dcc_send_msg((*i).socket,disp,ec); 07523 (*i).filesystem=3000; 07524 } else 07525 (*i).filesystem=3000; 07526 } 07527 (*i).filesystem=3000; 07528 return; 07529 } 07530 if(!cmd.compare(".add")) { 07531 got_cmd=true; 07532 (*i).fs.new_access.clear(); 07533 (*i).filesystem=5000; 07534 } 07535 if(!cmd.compare(".change")) { 07536 got_cmd=true; 07537 (*i).fs.new_access.clear(); 07538 (*i).fs.new_access.all_users=all_users; 07539 if(!all_users) 07540 (*i).fs.new_access.user_name=param1; 07541 else 07542 (*i).fs.new_access.user_name=""; 07543 vector<s_access>::iterator i1; 07544 bool got=false; 07545 for(i1=(*i).fs.file.access.begin(); i1!=(*i).fs.file.access.end(); i1++) { 07546 if(all_users && (*i1).all_users) { 07547 (*i).fs.new_access.del=(*i1).del; 07548 (*i).fs.new_access.notify_owner=(*i1).notify_owner; 07549 (*i).fs.new_access.notify_user=(*i1).notify_user; 07550 (*i).fs.new_access.owner=(*i1).owner; 07551 (*i).fs.new_access.read=(*i1).read; 07552 got=true; 07553 break; 07554 } 07555 if(!all_users && !(*i1).user_name.compare(param1)) { 07556 (*i).fs.new_access.del=(*i1).del; 07557 (*i).fs.new_access.notify_owner=(*i1).notify_owner; 07558 (*i).fs.new_access.notify_user=(*i1).notify_user; 07559 (*i).fs.new_access.owner=(*i1).owner; 07560 (*i).fs.new_access.read=(*i1).read; 07561 got=true; 07562 break; 07563 } 07564 } 07565 if(!got && !all_users) { 07566 string disp=lang_get_string(1,(*i).lang,304)+eol; 07567 int ec=0; 07568 dcc_send_msg((*i).socket,disp,ec); 07569 (*i).filesystem=3000; 07570 } else 07571 (*i).filesystem=4000; 07572 } 07573 if(!cmd.compare(".finish")) { 07574 got_cmd=true; 07575 string disp=lang_get_string(1,(*i).lang,319)+eol; 07576 int ec=0; 07577 dcc_send_msg((*i).socket,disp,ec); 07578 07579 (*i).filesystem=6000; 07580 return; 07581 } 07582 if(!cmd.compare(".addchan")) { 07583 got_cmd=true; 07584 /*bool got=false; 07585 map<string,string> vars; 07586 vector<s_channel>::iterator i1; 07587 for(i1=r_channels.begin(); i1!=r_channels.end(); i1++) { 07588 if(!cmp_strings_case_insensitive(logic_eval((*i1).channel_name,vars),param1) && !(*i1).host_unknown) { 07589 got=true; 07590 break; 07591 } 07592 } 07593 if(!got) { 07594 string disp=lang_get_string(1,(*i).lang,323)+eol; 07595 int ec=0; 07596 dcc_send_msg((*i).socket,disp,ec); 07597 (*i).filesystem=3000; 07598 return; 07599 }*/ 07600 bool got=false; 07601 vector<string>::iterator i1; 07602 for(i1=(*i).access_to_channel.begin(); i1!=(*i).access_to_channel.end(); i1++) 07603 if(!cmp_strings_case_insensitive(*i1,param1)) { 07604 got=true; 07605 break; 07606 } 07607 if(got) { 07608 (*i).fs.new_access.clear(); 07609 (*i).fs.new_access.all_on_channel=param1; 07610 s_user u; 07611 vector<s_channel> chs; 07612 logic_partyline_get_user((*i).as_in_logic,u,chs); 07613 vector<s_channel>::iterator i2; 07614 bool can=(*i).access_to_can_send_unknown_users; 07615 for(i2=chs.begin(); i2!=chs.end(); i2++) 07616 if(!cmp_strings_case_insensitive((*i2).channel_name,p)) { 07617 can&=(*i2).can_send_unknown_users; 07618 break; 07619 } 07620 if(!(*i).access_to_can_send_unknown_users) 07621 can=false; 07622 if(!can) { 07623 (*i).filesystem=4000; 07624 } else { 07625 (*i).filesystem=8000; 07626 } 07627 } else { 07628 (*i).fs.new_access.all_on_channel=""; 07629 (*i).fs.new_access.also_unknown=false; 07630 string disp=lang_get_string(1,(*i).lang,323)+eol; 07631 int ec=0; 07632 dcc_send_msg((*i).socket,disp,ec); 07633 return; 07634 } 07635 return; 07636 } 07637 if(!got_cmd && !cmd.empty()) { 07638 (*i).filesystem=3000; 07639 return; 07640 } 07641 return; 07642 } 07643 07644 // .change 07645 if((*i).filesystem==4000) { 07646 string disp=lang_get_string(1,(*i).lang,305)+eol; 07647 disp+=dcc_loop_filesystem_disp_rights((*i).lang,(*i).fs.new_access,eol); 07648 disp+=lang_get_string(1,(*i).lang,306)+eol; 07649 int ec=0; 07650 dcc_send_msg((*i).socket,disp,ec); 07651 (*i).filesystem++; 07652 return; 07653 } 07654 // .change && .add 07655 if((*i).filesystem==4001) { 07656 if(p.empty()) 07657 return; 07658 07659 if(p.compare("y") && p.compare("n") && p.compare("Y") && p.compare("N")) { 07660 string disp=lang_get_string(1,(*i).lang,306)+eol; // !!! 07661 int ec=0; 07662 dcc_send_msg((*i).socket,disp,ec); 07663 } else { 07664 if(!p.compare("n") || !p.compare("N")) { 07665 (*i).fs.new_access.owner=false; // !!! 07666 string disp=lang_get_string(1,(*i).lang,307)+eol; // !!! 07667 int ec=0; 07668 dcc_send_msg((*i).socket,disp,ec); 07669 (*i).filesystem++; 07670 } else { 07671 (*i).fs.new_access.owner=true; // !!! 07672 string disp=lang_get_string(1,(*i).lang,307)+eol; // !!! 07673 int ec=0; 07674 dcc_send_msg((*i).socket,disp,ec); 07675 (*i).filesystem++; 07676 } 07677 } 07678 return; 07679 } 07680 if((*i).filesystem==4002) { 07681 if(p.empty()) 07682 return; 07683 if(p.compare("y") && p.compare("n") && p.compare("Y") && p.compare("N")) { 07684 string disp=lang_get_string(1,(*i).lang,307)+eol; // !!! 07685 int ec=0; 07686 dcc_send_msg((*i).socket,disp,ec); 07687 } else { 07688 if(!p.compare("n") || !p.compare("N")) { 07689 (*i).fs.new_access.read=false; // !!! 07690 string disp=lang_get_string(1,(*i).lang,308)+eol; // !!! 07691 int ec=0; 07692 dcc_send_msg((*i).socket,disp,ec); 07693 (*i).filesystem++; 07694 } else { 07695 (*i).fs.new_access.read=true; // !!! 07696 string disp=lang_get_string(1,(*i).lang,308)+eol; // !!! 07697 int ec=0; 07698 dcc_send_msg((*i).socket,disp,ec); 07699 (*i).filesystem++; 07700 } 07701 } 07702 return; 07703 } 07704 if((*i).filesystem==4003) { 07705 if(p.empty()) 07706 return; 07707 if(p.compare("y") && p.compare("n") && p.compare("Y") && p.compare("N")) { 07708 string disp=lang_get_string(1,(*i).lang,308)+eol; // !!! 07709 int ec=0; 07710 dcc_send_msg((*i).socket,disp,ec); 07711 } else { 07712 if(!p.compare("n") || !p.compare("N")) { 07713 (*i).fs.new_access.del=false; // !!! 07714 string disp=lang_get_string(1,(*i).lang,309)+eol; // !!! 07715 int ec=0; 07716 dcc_send_msg((*i).socket,disp,ec); 07717 (*i).filesystem++; 07718 } else { 07719 (*i).fs.new_access.del=true; // !!! 07720 string disp=lang_get_string(1,(*i).lang,309)+eol; // !!! 07721 int ec=0; 07722 dcc_send_msg((*i).socket,disp,ec); 07723 (*i).filesystem++; 07724 } 07725 } 07726 return; 07727 } 07728 if((*i).filesystem==4004) { 07729 if(p.empty()) 07730 return; 07731 if(p.compare("y") && p.compare("n") && p.compare("Y") && p.compare("N")) { 07732 string disp=lang_get_string(1,(*i).lang,309)+eol; // !!! 07733 int ec=0; 07734 dcc_send_msg((*i).socket,disp,ec); 07735 } else { 07736 if(!p.compare("n") || !p.compare("N")) { 07737 (*i).fs.new_access.notify_owner=false; // !!! 07738 string disp=lang_get_string(1,(*i).lang,310)+eol; // !!! 07739 int ec=0; 07740 dcc_send_msg((*i).socket,disp,ec); 07741 (*i).filesystem++; 07742 } else { 07743 (*i).fs.new_access.notify_owner=true; // !!! 07744 string disp=lang_get_string(1,(*i).lang,310)+eol; // !!! 07745 int ec=0; 07746 dcc_send_msg((*i).socket,disp,ec); 07747 (*i).filesystem++; 07748 } 07749 } 07750 return; 07751 } 07752 07753 // SECURE flag 07754 if((*i).filesystem==4005) { 07755 if(p.empty()) 07756 return; 07757 if(p.compare("y") && p.compare("n") && p.compare("Y") && p.compare("N")) { 07758 string disp=lang_get_string(1,(*i).lang,310)+eol; // !!! 07759 int ec=0; 07760 dcc_send_msg((*i).socket,disp,ec); 07761 } else { 07762 if(!p.compare("n") || !p.compare("N")) { 07763 (*i).fs.new_access.notify_user=false; // !!! 07764 if(!(*i).fs.new_access.notify_user) { 07765 (*i).fs.new_access.notify_user_message=""; 07766 (*i).filesystem+=2; 07767 } 07768 string disp=lang_get_string(1,(*i).lang,326)+eol; // !!! 07769 int ec=0; 07770 dcc_send_msg((*i).socket,disp,ec); 07771 (*i).filesystem++; 07772 } else { 07773 (*i).fs.new_access.notify_user=true; // !!! 07774 string disp=lang_get_string(1,(*i).lang,326)+eol; // !!! 07775 int ec=0; 07776 dcc_send_msg((*i).socket,disp,ec); 07777 (*i).filesystem++; 07778 } 07779 } 07780 return; 07781 } 07782 if((*i).filesystem==4006) { 07783 if(p.empty()) 07784 return; 07785 if(p.compare("y") && p.compare("n") && p.compare("Y") && p.compare("N")) { 07786 string disp=lang_get_string(1,(*i).lang,326)+eol; // !!! 07787 int ec=0; 07788 dcc_send_msg((*i).socket,disp,ec); 07789 } else { 07790 if(!p.compare("n") || !p.compare("N")) { 07791 (*i).fs.new_access.secure=false; // !!! 07792 if(!(*i).fs.new_access.notify_owner || (*i).fs.file.file_type==ft_message) { 07793 (*i).fs.new_access.notify_owner_message=""; 07794 (*i).filesystem+=3; 07795 return; 07796 } 07797 string disp=lang_get_string(1,(*i).lang,327)+eol; // !!! 07798 disp+=lang_get_string(1,(*i).lang,349)+eol; 07799 disp+=lang_get_string(1,(*i).lang,350)+eol; 07800 disp+=lang_get_string(1,(*i).lang,353)+eol; 07801 int ec=0; 07802 dcc_send_msg((*i).socket,disp,ec); 07803 (*i).filesystem++; 07804 } else { 07805 (*i).fs.new_access.secure=true; // !!! 07806 if(!(*i).fs.new_access.notify_owner) { 07807 (*i).fs.new_access.notify_owner_message=""; 07808 (*i).filesystem+=3; 07809 return; 07810 } 07811 string disp=lang_get_string(1,(*i).lang,327)+eol; // !!! 07812 disp+=lang_get_string(1,(*i).lang,349)+eol; 07813 disp+=lang_get_string(1,(*i).lang,350)+eol; 07814 disp+=lang_get_string(1,(*i).lang,353)+eol; 07815 int ec=0; 07816 dcc_send_msg((*i).socket,disp,ec); 07817 (*i).filesystem++; 07818 } 07819 } 07820 return; 07821 } 07822 // OWNER message edit 07823 if((*i).filesystem==4007) { 07824 if(p.empty()) 07825 return; 07826 if(!p.compare(".")) { 07827 string disp=lang_get_string(1,(*i).lang,328)+eol; // !!! 07828 int ec=0; 07829 dcc_send_msg((*i).socket,disp,ec); 07830 if(!(*i).fs.new_access.notify_owner /*|| (*i).fs.file.file_type==ft_message*/) { 07831 (*i).filesystem+=2; 07832 return; 07833 } 07834 (*i).filesystem++; 07835 disp=lang_get_string(1,(*i).lang,329)+eol; // !!! 07836 disp+=lang_get_string(1,(*i).lang,349)+eol; 07837 disp+=lang_get_string(1,(*i).lang,351)+eol; 07838 disp+=lang_get_string(1,(*i).lang,352)+eol; 07839 disp+=lang_get_string(1,(*i).lang,353)+eol; 07840 dcc_send_msg((*i).socket,disp,ec); 07841 return; 07842 } else { 07843 (*i).fs.new_access.notify_owner_message+=p; 07844 (*i).fs.new_access.notify_owner_message+="\n"; 07845 } 07846 return; 07847 } 07848 // USER message edit 07849 if((*i).filesystem==4008) { 07850 if(p.empty()) 07851 return; 07852 if(!p.compare(".")) { 07853 string disp=lang_get_string(1,(*i).lang,328)+eol; // !!! 07854 int ec=0; 07855 dcc_send_msg((*i).socket,disp,ec); 07856 (*i).filesystem++; 07857 return; 07858 } else { 07859 (*i).fs.new_access.notify_user_message+=p; 07860 (*i).fs.new_access.notify_user_message+="\n"; 07861 } 07862 return; 07863 } 07864 07865 // done 07866 if((*i).filesystem==4009) { 07867 string disp=lang_get_string(1,(*i).lang,311)+eol; // !!! 07868 disp+=dcc_loop_filesystem_disp_rights((*i).lang,(*i).fs.new_access,eol); 07869 disp+=lang_get_string(1,(*i).lang,312)+eol; // !!! 07870 int ec=0; 07871 dcc_send_msg((*i).socket,disp,ec); 07872 (*i).filesystem++; 07873 return; 07874 } 07875 if((*i).filesystem==4010) { 07876 if(p.empty()) 07877 return; 07878 if(p.compare("y") && p.compare("n") && p.compare("Y") && p.compare("N")) { 07879 string disp=lang_get_string(1,(*i).lang,311)+eol; // !!! 07880 disp+=dcc_loop_filesystem_disp_rights((*i).lang,(*i).fs.new_access,eol); 07881 disp+=lang_get_string(1,(*i).lang,312)+eol; // !!! 07882 int ec=0; 07883 dcc_send_msg((*i).socket,disp,ec); 07884 } else { 07885 if(!p.compare("n") || !p.compare("N")) { 07886 string disp=lang_get_string(1,(*i).lang,314)+eol; // !!! 07887 int ec=0; 07888 dcc_send_msg((*i).socket,disp,ec); 07889 (*i).filesystem=2000; 07890 } else { 07891 if((*i).fs.new_access.user_name.length()>1 && (*i).fs.new_access.user_name[0]=='*') { 07892 // from .addchan 07893 string chan; 07894 if((*i).fs.new_access.all_on_channel.empty()) 07895 chan=(*i).fs.new_access.user_name; 07896 else 07897 chan=(*i).fs.new_access.all_on_channel; 07898 chan.erase(0,1); 07899 vector<string> users; 07900 map<string,string> vars; 07901 vector<s_channel>::iterator i2; 07902 for(i2=r_channels.begin(); i2!=r_channels.end(); i2++) 07903 if(!cmp_strings_case_insensitive(logic_eval((*i2).channel_name,vars),chan) && !(*i2).host_unknown) 07904 users.push_back((*i2).username); 07905 07906 vector<string>::iterator i3; 07907 for(i3=users.begin(); i3!=users.end(); i3++) { 07908 vector<s_access>::iterator i1; 07909 again5: 07910 for(i1=(*i).fs.file.access.begin(); i1!=(*i).fs.file.access.end(); i1++) { 07911 if((*i1).user_name.compare((*i).as_in_logic) && !(*i1).user_name.compare(*i3)) { 07912 (*i).fs.file.access.erase(i1); 07913 goto again5; 07914 } 07915 } 07916 } 07917 for(i3=users.begin(); i3!=users.end(); i3++) { 07918 (*i).fs.new_access.user_name=*i3; 07919 (*i).fs.file.access.push_back((*i).fs.new_access); 07920 } 07921 } else 07922 if(!(*i).fs.new_access.all_on_channel.empty()) { 07923 (*i).fs.file.access.push_back((*i).fs.new_access); 07924 } else 07925 if((*i).fs.new_access.all_users) { 07926 vector<s_access>::iterator i1; 07927 again4: 07928 for(i1=(*i).fs.file.access.begin(); i1!=(*i).fs.file.access.end(); i1++) { 07929 if((*i1).user_name.compare((*i).as_in_logic)) { 07930 (*i).fs.file.access.erase(i1); 07931 goto again4; 07932 } 07933 } 07934 (*i).fs.file.access.push_back((*i).fs.new_access); 07935 } else { 07936 vector<s_access>::iterator i1; 07937 again3: 07938 for(i1=(*i).fs.file.access.begin(); i1!=(*i).fs.file.access.end(); i1++) { 07939 if(!(*i1).user_name.compare((*i).fs.new_access.user_name)) { 07940 (*i).fs.file.access.erase(i1); 07941 goto again3; 07942 } 07943 } 07944 (*i).fs.file.access.push_back((*i).fs.new_access); 07945 } 07946 07947 string disp=lang_get_string(1,(*i).lang,313)+eol; // !!! 07948 int ec=0; 07949 dcc_send_msg((*i).socket,disp,ec); 07950 (*i).filesystem=3000; 07951 } 07952 } 07953 return; 07954 } 07955 07956 // .add 07957 if((*i).filesystem==5000) { 07958 string disp=lang_get_string(1,(*i).lang,315)+eol; 07959 vector<s_user>::iterator i1; 07960 for(i1=r_users.begin(); i1!=r_users.end(); i1++) 07961 disp+=(*i1).name+eol; 07962 disp+=lang_get_string(1,(*i).lang,316)+eol; 07963 disp+=lang_get_string(1,(*i).lang,303)+eol; 07964 int ec=0; 07965 dcc_send_msg((*i).socket,disp,ec); 07966 (*i).filesystem++; 07967 return; 07968 } 07969 if((*i).filesystem==5001) { 07970 if(p.empty()) 07971 return; 07972 bool all_users=!p.compare("*"); 07973 (*i).fs.new_access.clear(); 07974 (*i).fs.new_access.all_users=all_users; 07975 if(!all_users) { 07976 s_user u; 07977 vector<s_channel> chs; 07978 logic_partyline_get_user(p,u,chs); 07979 bool unknown_user=u.host_unknown; 07980 logic_partyline_get_user((*i).as_in_logic,u,chs); 07981 vector<s_channel>::iterator i2; 07982 bool can=(*i).access_to_can_send_unknown_users; 07983 for(i2=chs.begin(); i2!=chs.end(); i2++) 07984 if(!cmp_strings_case_insensitive((*i2).channel_name,p)) { 07985 can&=(*i2).can_send_unknown_users; 07986 break; 07987 } 07988 if(unknown_user && !can) { 07989 string disp=lang_get_string(1,(*i).lang,480)+eol; 07990 int ec=0; 07991 dcc_send_msg((*i).socket,disp,ec); 07992 (*i).filesystem--; 07993 return; 07994 } 07995 (*i).fs.new_access.user_name=p; 07996 } else 07997 (*i).fs.new_access.user_name=""; 07998 07999 if(!all_users) { 08000 vector<s_user>::iterator i1; 08001 string user; 08002 for(i1=r_users.begin(); i1!=r_users.end(); i1++) { 08003 if(!(*i1).name.compare(p)) { 08004 user=p; 08005 break; 08006 } 08007 } 08008 if(user.empty()) { 08009 string disp=lang_get_string(1,(*i).lang,304)+eol; 08010 int ec=0; 08011 dcc_send_msg((*i).socket,disp,ec); 08012 (*i).filesystem--; 08013 return; 08014 } 08015 } 08016 vector<s_access>::iterator i1; 08017 bool got=false; 08018 for(i1=(*i).fs.file.access.begin(); i1!=(*i).fs.file.access.end(); i1++) { 08019 if(all_users && (*i1).all_users) { 08020 (*i).fs.new_access.del=(*i1).del; 08021 (*i).fs.new_access.notify_owner=(*i1).notify_owner; 08022 (*i).fs.new_access.notify_user=(*i1).notify_user; 08023 (*i).fs.new_access.owner=(*i1).owner; 08024 (*i).fs.new_access.read=(*i1).read; 08025 got=true; 08026 break; 08027 } 08028 if(!all_users && !(*i1).user_name.compare(p)) { 08029 (*i).fs.new_access.del=(*i1).del; 08030 (*i).fs.new_access.notify_owner=(*i1).notify_owner; 08031 (*i).fs.new_access.notify_user=(*i1).notify_user; 08032 (*i).fs.new_access.owner=(*i1).owner; 08033 (*i).fs.new_access.read=(*i1).read; 08034 got=true; 08035 break; 08036 } 08037 } 08038 /*if(!got && !all_users) { 08039 string disp=lang_get_string(1,(*i).lang,304)+eol; 08040 int ec=0; 08041 dcc_send_msg((*i).socket,disp,ec); 08042 (*i).filesystem--; 08043 return; 08044 }*/ 08045 if(got) { 08046 if(all_users) { 08047 if(!(*i).access_to_can_send_all_users) { 08048 string disp=lang_get_string(1,(*i).lang,479)+eol; 08049 int ec=0; 08050 dcc_send_msg((*i).socket,disp,ec); 08051 return; 08052 } 08053 08054 string disp=lang_get_string(1,(*i).lang,317)+eol; 08055 int ec=0; 08056 dcc_send_msg((*i).socket,disp,ec); 08057 (*i).filesystem=5500; 08058 return; 08059 } else { 08060 string disp=lang_subst(lang_get_string(1,(*i).lang,318),(*i).fs.new_access.user_name)+eol; 08061 int ec=0; 08062 dcc_send_msg((*i).socket,disp,ec); 08063 (*i).filesystem=5500; 08064 return; 08065 } 08066 } 08067 (*i).filesystem=5200; 08068 return; 08069 } 08070 08071 if((*i).filesystem==5200) { 08072 string disp=lang_get_string(1,(*i).lang,306)+eol; 08073 int ec=0; 08074 dcc_send_msg((*i).socket,disp,ec); 08075 (*i).filesystem=4001; 08076 return; 08077 } 08078 08079 // replace? (.add) 08080 if((*i).filesystem==5500) { 08081 if(p.empty()) 08082 return; 08083 if(p.compare("y") && p.compare("n") && p.compare("Y") && p.compare("N")) { 08084 if((*i).fs.new_access.all_users) { 08085 string disp=lang_get_string(1,(*i).lang,317)+eol; 08086 int ec=0; 08087 dcc_send_msg((*i).socket,disp,ec); 08088 return; 08089 } else { 08090 string disp=lang_subst(lang_get_string(1,(*i).lang,318),(*i).fs.new_access.user_name)+eol; 08091 int ec=0; 08092 dcc_send_msg((*i).socket,disp,ec); 08093 return; 08094 } 08095 } else { 08096 if(!p.compare("n") || !p.compare("N")) { 08097 (*i).filesystem=2000; 08098 } else { 08099 (*i).filesystem=5200; 08100 } 08101 } 08102 return; 08103 } 08104 08105 // .finish (save changes?) 08106 if((*i).filesystem==6000) { 08107 if(p.empty()) 08108 return; 08109 if(p.compare("y") && p.compare("n") && p.compare("Y") && p.compare("N")) { 08110 string disp=lang_get_string(1,(*i).lang,319)+eol; // !!! 08111 int ec=0; 08112 dcc_send_msg((*i).socket,disp,ec); 08113 } else { 08114 if(!p.compare("n") || !p.compare("N")) { 08115 string disp=lang_get_string(1,(*i).lang,321)+eol; // !!! 08116 int ec=0; 08117 dcc_send_msg((*i).socket,disp,ec); 08118 (*i).filesystem=1; 08119 } else { 08120 (*i).fs.file.published=true; 08121 08122 vector<s_access>::iterator i1; 08123 08124 bool read=true; 08125 bool notify_user=true; 08126 bool old_secure=false; 08127 bool notify_owner=false; 08128 08129 for(i1=(*i).fs.file.access.begin(); i1!=(*i).fs.file.access.end(); i1++) { 08130 read|=(*i1).read; 08131 notify_user|=(*i1).notify_user; 08132 notify_owner|=(*i1).notify_owner; 08133 old_secure|=(*i1).secure; 08134 } 08135 08136 bool forced_secure; 08137 08138 if(filesys_dcc_set_file_attrs((*i).as_in_logic,(*i).fs.file,forced_secure)) { 08139 string disp; 08140 if(!old_secure && forced_secure) 08141 disp+=lang_get_string(1,(*i).lang,346)+eol; 08142 08143 disp+=lang_get_string(1,(*i).lang,320)+eol; 08144 int ec=0; 08145 dcc_send_msg((*i).socket,disp,ec); 08146 } else { 08147 string disp=lang_get_string(1,(*i).lang,292)+eol; 08148 int ec=0; 08149 dcc_send_msg((*i).socket,disp,ec); 08150 } 08151 (*i).filesystem=1; 08152 } 08153 } 08154 return; 08155 } 08156 08157 if((*i).filesystem==5001) { 08158 if(p.empty()) 08159 return; 08160 bool all_users=!p.compare("*"); 08161 (*i).fs.new_access.clear(); 08162 (*i).fs.new_access.all_users=all_users; 08163 if(!all_users) 08164 (*i).fs.new_access.user_name=p; 08165 else 08166 (*i).fs.new_access.user_name=""; 08167 08168 if(!all_users) { 08169 vector<s_user>::iterator i1; 08170 string user; 08171 for(i1=r_users.begin(); i1!=r_users.end(); i1++) { 08172 if(!(*i1).name.compare(p)) { 08173 user=p; 08174 break; 08175 } 08176 } 08177 if(user.empty()) { 08178 string disp=lang_get_string(1,(*i).lang,304)+eol; 08179 int ec=0; 08180 dcc_send_msg((*i).socket,disp,ec); 08181 (*i).filesystem--; 08182 return; 08183 } 08184 } 08185 vector<s_access>::iterator i1; 08186 bool got=false; 08187 for(i1=(*i).fs.file.access.begin(); i1!=(*i).fs.file.access.end(); i1++) { 08188 if(all_users && (*i1).all_users) { 08189 (*i).fs.new_access.del=(*i1).del; 08190 (*i).fs.new_access.notify_owner=(*i1).notify_owner; 08191 (*i).fs.new_access.notify_user=(*i1).notify_user; 08192 (*i).fs.new_access.owner=(*i1).owner; 08193 (*i).fs.new_access.read=(*i1).read; 08194 got=true; 08195 break; 08196 } 08197 if(!all_users && !(*i1).user_name.compare(p)) { 08198 (*i).fs.new_access.del=(*i1).del; 08199 (*i).fs.new_access.notify_owner=(*i1).notify_owner; 08200 (*i).fs.new_access.notify_user=(*i1).notify_user; 08201 (*i).fs.new_access.owner=(*i1).owner; 08202 (*i).fs.new_access.read=(*i1).read; 08203 got=true; 08204 break; 08205 } 08206 } 08207 /*if(!got && !all_users) { 08208 string disp=lang_get_string(1,(*i).lang,304)+eol; 08209 int ec=0; 08210 dcc_send_msg((*i).socket,disp,ec); 08211 (*i).filesystem--; 08212 return; 08213 }*/ 08214 if(got) { 08215 if(all_users) { 08216 string disp=lang_get_string(1,(*i).lang,317)+eol; 08217 int ec=0; 08218 dcc_send_msg((*i).socket,disp,ec); 08219 (*i).filesystem=5500; 08220 return; 08221 } else { 08222 string disp=lang_subst(lang_get_string(1,(*i).lang,318),(*i).fs.new_access.user_name)+eol; 08223 int ec=0; 08224 dcc_send_msg((*i).socket,disp,ec); 08225 (*i).filesystem=5500; 08226 return; 08227 } 08228 } 08229 (*i).filesystem=5200; 08230 return; 08231 } 08232 08233 if((*i).filesystem==5200) { 08234 string disp=lang_get_string(1,(*i).lang,306)+eol; 08235 int ec=0; 08236 dcc_send_msg((*i).socket,disp,ec); 08237 (*i).filesystem=4001; 08238 return; 08239 } 08240 08241 if((*i).filesystem==7000) { 08242 string disp=lang_get_string(1,(*i).lang,433)+eol; 08243 time_t ex=(*i).fs.file.expiration; 08244 if(ex==0) 08245 disp+=lang_get_string(1,(*i).lang,434)+eol; 08246 else { 08247 char* t1=ctime(&ex); 08248 char t2[128]; 08249 strcpy(t2,t1); 08250 t2[strlen(t2)-1]=0; // get rid of \n 08251 disp+=t2; 08252 } 08253 08254 disp+=lang_get_string(1,(*i).lang,435)+eol; 08255 int ec=0; 08256 dcc_send_msg((*i).socket,disp,ec); 08257 08258 (*i).filesystem++; 08259 return; 08260 } 08261 if((*i).filesystem==7001) { 08262 string p=c; 08263 if(p.empty()) 08264 return; 08265 08266 if(p.compare("y") && p.compare("n") && p.compare("Y") && p.compare("N")) { 08267 string disp=lang_get_string(1,(*i).lang,435)+eol; // !!! 08268 int ec=0; 08269 dcc_send_msg((*i).socket,disp,ec); 08270 } else { 08271 if(!p.compare("n") || !p.compare("N")) { 08272 (*i).filesystem=2000; 08273 return; 08274 } else { 08275 string disp=lang_get_string(1,(*i).lang,436)+eol; // !!! 08276 int ec=0; 08277 dcc_send_msg((*i).socket,disp,ec); 08278 (*i).filesystem++; 08279 return; 08280 } 08281 } 08282 } 08283 if((*i).filesystem==7002) { 08284 string p=c; 08285 if(p.empty()) 08286 return; 08287 08288 int x=atol(p.c_str()); 08289 if(x==0) { 08290 (*i).fs.file.expiration=0; 08291 string disp=lang_get_string(1,(*i).lang,441)+eol; // !!! 08292 int ec=0; 08293 dcc_send_msg((*i).socket,disp,ec); 08294 (*i).filesystem=2000; 08295 return; 08296 } 08297 if(x<1970) { 08298 string disp=lang_get_string(1,(*i).lang,436)+eol; // !!! 08299 int ec=0; 08300 dcc_send_msg((*i).socket,disp,ec); 08301 return; 08302 } 08303 (*i).filesystem_expiration.tm_year=x; 08304 string disp=lang_get_string(1,(*i).lang,437)+eol; // !!! 08305 int ec=0; 08306 dcc_send_msg((*i).socket,disp,ec); 08307 (*i).filesystem++; 08308 return; 08309 } 08310 if((*i).filesystem==7003) { 08311 string p=c; 08312 if(p.empty()) 08313 return; 08314 08315 int x=atol(p.c_str()); 08316 if(x<1 || x>12) { 08317 string disp=lang_get_string(1,(*i).lang,437)+eol; // !!! 08318 int ec=0; 08319 dcc_send_msg((*i).socket,disp,ec); 08320 return; 08321 } 08322 (*i).filesystem_expiration.tm_mon=x; 08323 string disp=lang_get_string(1,(*i).lang,438)+eol; // !!! 08324 int ec=0; 08325 dcc_send_msg((*i).socket,disp,ec); 08326 (*i).filesystem++; 08327 return; 08328 } 08329 if((*i).filesystem==7004) { 08330 string p=c; 08331 if(p.empty()) 08332 return; 08333 08334 int x=atol(p.c_str()); 08335 if(x<1 || x>31) { 08336 string disp=lang_get_string(1,(*i).lang,438)+eol; // !!! 08337 int ec=0; 08338 dcc_send_msg((*i).socket,disp,ec); 08339 return; 08340 } 08341 (*i).filesystem_expiration.tm_mday=x; 08342 string disp=lang_get_string(1,(*i).lang,439)+eol; // !!! 08343 int ec=0; 08344 dcc_send_msg((*i).socket,disp,ec); 08345 (*i).filesystem++; 08346 return; 08347 } 08348 if((*i).filesystem==7005) { 08349 string p=c; 08350 if(p.empty()) 08351 return; 08352 08353 int x=atol(p.c_str()); 08354 if(x<0 || x>23) { 08355 string disp=lang_get_string(1,(*i).lang,439)+eol; // !!! 08356 int ec=0; 08357 dcc_send_msg((*i).socket,disp,ec); 08358 return; 08359 } 08360 (*i).filesystem_expiration.tm_hour=x; 08361 string disp=lang_get_string(1,(*i).lang,440)+eol; // !!! 08362 int ec=0; 08363 dcc_send_msg((*i).socket,disp,ec); 08364 (*i).filesystem++; 08365 return; 08366 } 08367 if((*i).filesystem==7006) { 08368 string p=c; 08369 if(p.empty()) 08370 return; 08371 08372 int x=atol(p.c_str()); 08373 if(x<0 || x>59) { 08374 string disp=lang_get_string(1,(*i).lang,440)+eol; // !!! 08375 int ec=0; 08376 dcc_send_msg((*i).socket,disp,ec); 08377 return; 08378 } 08379 (*i).filesystem_expiration.tm_min=x; 08380 (*i).filesystem_expiration.tm_isdst=-1; 08381 (*i).filesystem_expiration.tm_sec=0; 08382 (*i).filesystem_expiration.tm_wday=0; 08383 (*i).filesystem_expiration.tm_yday=0; 08384 08385 (*i).filesystem_expiration.tm_mon-=1; 08386 (*i).filesystem_expiration.tm_year-=1900; 08387 08388 time_t ex=mktime(&(*i).filesystem_expiration); 08389 if(ex==-1) { 08390 string disp=lang_get_string(1,(*i).lang,442)+eol; // !!! 08391 disp+=lang_get_string(1,(*i).lang,436)+eol; // !!! 08392 int ec=0; 08393 dcc_send_msg((*i).socket,disp,ec); 08394 (*i).filesystem=7002; 08395 return; 08396 } 08397 if(ex<time(NULL)) { 08398 string disp=lang_get_string(1,(*i).lang,443)+eol; // !!! 08399 disp+=lang_get_string(1,(*i).lang,436)+eol; // !!! 08400 int ec=0; 08401 dcc_send_msg((*i).socket,disp,ec); 08402 (*i).filesystem=7002; 08403 return; 08404 } 08405 08406 (*i).fs.file.expiration=ex; 08407 08408 string disp=lang_get_string(1,(*i).lang,433)+eol; 08409 if(ex==0) 08410 disp+=lang_get_string(1,(*i).lang,434)+eol; 08411 else { 08412 char* t1=ctime(&ex); 08413 char t2[128]; 08414 strcpy(t2,t1); 08415 t2[strlen(t2)-1]=0; // get rid of \n 08416 disp+=t2; 08417 } 08418 08419 int ec=0; 08420 dcc_send_msg((*i).socket,disp,ec); 08421 (*i).filesystem=2000; 08422 return; 08423 } 08424 08425 // also unknown users? 08426 if((*i).filesystem==8000) { 08427 string disp=lang_get_string(1,(*i).lang,476)+eol; 08428 int ec=0; 08429 dcc_send_msg((*i).socket,disp,ec); 08430 (*i).filesystem++; 08431 return; 08432 } 08433 if((*i).filesystem==8001) { 08434 string p=c; 08435 if(!p.compare("")) 08436 return; 08437 08438 if(p.compare("y") && p.compare("n") && p.compare("Y") && p.compare("N")) { 08439 string disp=lang_get_string(1,(*i).lang,476)+eol; 08440 int ec=0; 08441 dcc_send_msg((*i).socket,disp,ec); 08442 } else { 08443 if(!p.compare("n") || !p.compare("N")) { 08444 (*i).fs.new_access.also_unknown=false; 08445 } else { 08446 (*i).fs.new_access.also_unknown=true;; 08447 } 08448 string disp=lang_get_string(1,(*i).lang,339)+eol; 08449 int ec=0; 08450 dcc_send_msg((*i).socket,disp,ec); 08451 (*i).filesystem=4000; 08452 return; 08453 } 08454 return; 08455 } 08456 }
Here is the call graph for this function: ![]() |
|
Returns access rights to file.
Definition at line 7081 of file dcc.cpp. References s_access::all_on_channel, s_access::all_users, s_access::also_unknown, s_access::del, lang_get_string(), lang_subst(), s_access::notify_owner, s_access::notify_user, s_access::owner, s_access::read, s_access::secure, and s_access::user_name. Referenced by dcc_loop_filesystem(). 07082 { 07083 string disp; 07084 if(access.all_users) 07085 disp+=lang_get_string(1,lang,294)+eol; 07086 else 07087 if(!access.all_on_channel.empty()) { 07088 disp+=lang_subst(lang_get_string(1,lang,295),(string)"*"+access.all_on_channel); 07089 if(access.also_unknown) 07090 disp+=(string)" "+lang_get_string(1,lang,474); 07091 disp+=eol; 07092 } else 07093 disp+=lang_subst(lang_get_string(1,lang,295),access.user_name)+eol; 07094 disp+=" "; 07095 bool plus=false; 07096 if(access.owner) { 07097 disp+=lang_get_string(1,lang,296); 07098 plus=true; 07099 } 07100 if(access.read) { 07101 if(plus) 07102 disp+=lang_get_string(1,lang,301); 07103 disp+=lang_get_string(1,lang,297); 07104 plus=true; 07105 } 07106 if(access.del) { 07107 if(plus) 07108 disp+=lang_get_string(1,lang,301); 07109 disp+=lang_get_string(1,lang,298); 07110 plus=true; 07111 } 07112 if(access.notify_owner) { 07113 if(plus) 07114 disp+=lang_get_string(1,lang,301); 07115 disp+=lang_get_string(1,lang,299); 07116 plus=true; 07117 } 07118 if(access.notify_user) { 07119 if(plus) 07120 disp+=lang_get_string(1,lang,301); 07121 disp+=lang_get_string(1,lang,300); 07122 plus=true; 07123 } 07124 if(access.secure) { 07125 if(plus) 07126 disp+=lang_get_string(1,lang,301); 07127 disp+=lang_get_string(1,lang,330); 07128 plus=true; 07129 } 07130 if(!plus) { 07131 disp+=lang_get_string(1,lang,322); 07132 } 07133 disp+=eol; 07134 07135 return disp; 07136 }
Here is the call graph for this function: ![]() |
|
Gets/resets user's access rights.
Definition at line 16162 of file dcc.cpp. References logic_partyline_access(), and logic_partyline_get_user(). Referenced by dcc_apply(), dcc_loop(), and dcc_rehashed(). 16163 { 16164 (*i).chs.clear(); 16165 logic_partyline_get_user((*i).as_in_logic,(*i).u,(*i).chs); 16166 logic_partyline_access( 16167 (*i).as_in_logic, 16168 (*i).access_to_users, 16169 (*i).access_to_groups, 16170 (*i).access_grant_groups, 16171 (*i).access_to_proc_groups, 16172 (*i).access_grant_proc_groups, 16173 (*i).access_grant_proc, 16174 (*i).access_to_channel, 16175 (*i).access_grant_channel, 16176 (*i).access_grant_partyline, 16177 (*i).access_to_procs, 16178 (*i).access_to_backup, 16179 (*i).access_grant_backup, 16180 (*i).access_to_rehash, 16181 (*i).access_grant_rehash, 16182 (*i).access_to_plususer, 16183 (*i).access_grant_plususer, 16184 (*i).access_to_plusproc, 16185 (*i).access_grant_plusproc, 16186 (*i).partyline_msg_flood, 16187 (*i).access_to_replication, 16188 (*i).access_grant_replication, 16189 (*i).access_to_chan_defs, 16190 (*i).access_to_restart, 16191 (*i).access_grant_restart, 16192 (*i).access_to_die, 16193 (*i).access_grant_die, 16194 (*i).access_to_filesystem, 16195 (*i).access_grant_filesystem, 16196 (*i).access_to_private, 16197 (*i).access_grant_private, 16198 (*i).access_to_can_send_all_users, 16199 (*i).access_grant_can_send_all_users, 16200 (*i).access_to_can_send_unknown_users, 16201 (*i).access_grant_can_send_unknown_users, 16202 (*i).access_usage_proc, 16203 (*i).access_usage_proc_groups, 16204 (*i).access_to_upgrade, 16205 (*i).access_grant_upgrade, 16206 (*i).access_to_apply, 16207 (*i).access_grant_apply 16208 ); 16209 }
Here is the call graph for this function: ![]() |
|
Should be called in a loop to process .lang commands in DCC CHAT/telnet connections.
Definition at line 9326 of file dcc.cpp. References dcc_get_line(), dcc_send_msg(), lang_get_langs(), lang_get_string(), and lang_subst(). Referenced by dcc_loop(). 09327 { 09328 if((*i).language==1) { 09329 string disp=lang_get_string(1,(*i).lang,451)+eol; 09330 vector<string> langs; 09331 lang_get_langs(1,langs); 09332 vector<string>::iterator i1; 09333 for(i1=langs.begin(); i1!=langs.end(); i1++) { 09334 disp+=lang_subst(lang_get_string(1,*i1,452),*i1)+eol; 09335 disp+=" "; 09336 disp+=lang_get_string(1,*i1,0)+eol; 09337 } 09338 int ec=0; 09339 dcc_send_msg((*i).socket,disp,ec); 09340 09341 (*i).language++; 09342 return; 09343 } 09344 09345 if((*i).language==2) { 09346 string p=dcc_get_line((*i).in_buff); 09347 if(!p.compare("")) 09348 return; 09349 09350 vector<string> langs; 09351 lang_get_langs(1,langs); 09352 vector<string>::iterator i1; 09353 bool got=false; 09354 for(i1=langs.begin(); i1!=langs.end(); i1++) { 09355 if(!(*i1).compare(p)) { 09356 (*i).lang=*i1; 09357 got=true; 09358 break; 09359 } 09360 } 09361 if(!got) 09362 (*i).language--; 09363 else { 09364 (*i).language=0; 09365 string disp=lang_get_string(1,(*i).lang,463)+eol; 09366 int ec=0; 09367 dcc_send_msg((*i).socket,disp,ec); 09368 } 09369 return; 09370 } 09371 }
Here is the call graph for this function: ![]() |
|
Should be called in a loop to process message/filesystem commands in DCC CHAT/telnet connections.
Definition at line 2157 of file dcc.cpp. References s_access::all_users, cmp_strings_case_insensitive(), conf_getvar(), dcc_get_line(), dcc_send_msg(), s_access::del, filesys_dcc_add_message(), s_user::host_unknown, lang_get_string(), logic_eval(), logic_filesys_got_new(), logic_partyline_get_user(), s_access::owner, r_channels, r_users, s_access::read, s_access::secure, and s_access::user_name. Referenced by dcc_loop(). 02158 { 02159 if((*i).msg==0) 02160 return; 02161 02162 if((*i).msg==1) { 02163 (*i).fs.file.clear(); 02164 (*i).fs.name=""; 02165 (*i).fs.new_access.clear(); 02166 (*i).msg_expiration=0; 02167 02168 (*i).msg_content=""; 02169 02170 string disp=lang_get_string(1,(*i).lang,315)+eol; 02171 vector<s_user>::iterator i1; 02172 for(i1=r_users.begin(); i1!=r_users.end(); i1++) 02173 disp+=(*i1).name+eol; 02174 disp+=lang_get_string(1,(*i).lang,316)+eol; 02175 disp+=lang_get_string(1,(*i).lang,338)+eol; 02176 int ec=0; 02177 dcc_send_msg((*i).socket,disp,ec); 02178 (*i).msg++; 02179 return; 02180 } 02181 02182 if((*i).msg==2) { 02183 string p=dcc_get_line((*i).in_buff); 02184 if(!p.compare("")) 02185 return; 02186 02187 if(!p.compare(".")) { 02188 (*i).msg++; 02189 string disp=lang_get_string(1,(*i).lang,337)+eol; 02190 int ec=0; 02191 dcc_send_msg((*i).socket,disp,ec); 02192 return; 02193 } 02194 bool all_users=!p.compare("*"); 02195 string all_channel; 02196 if(p.length()>=2 && p[0]=='*') { 02197 p.erase(0,1); 02198 bool got=false; 02199 vector<string>::iterator i1; 02200 for(i1=(*i).access_to_channel.begin(); i1!=(*i).access_to_channel.end(); i1++) 02201 if(!cmp_strings_case_insensitive(*i1,p)) { 02202 got=true; 02203 break; 02204 } 02205 if(got) { 02206 all_channel=p; 02207 } else { 02208 all_channel=""; 02209 all_users=false; 02210 string disp=lang_get_string(1,(*i).lang,323)+eol; 02211 int ec=0; 02212 dcc_send_msg((*i).socket,disp,ec); 02213 return; 02214 } 02215 } 02216 02217 if(!all_users && all_channel.empty()) { 02218 string disp=lang_get_string(1,(*i).lang,304)+eol; 02219 disp+=lang_get_string(1,(*i).lang,315)+eol; 02220 vector<s_user>::iterator i1; 02221 for(i1=r_users.begin(); i1!=r_users.end(); i1++) { 02222 disp+=(*i1).name+eol; 02223 if(!(*i1).name.compare(p)) { 02224 (*i).fs.new_access.clear(); 02225 (*i).fs.new_access.user_name=p; 02226 02227 s_user u; 02228 vector<s_channel> chs; 02229 logic_partyline_get_user(p,u,chs); 02230 bool unknown_user=u.host_unknown; 02231 logic_partyline_get_user((*i).as_in_logic,u,chs); 02232 vector<s_channel>::iterator i2; 02233 bool can=(*i).access_to_can_send_unknown_users; 02234 /*for(i2=chs.begin(); i2!=chs.end(); i2++) 02235 if(!cmp_strings_case_insensitive((*i2).channel_name,p)) { 02236 can&=(*i2).can_send_unknown_users; 02237 break; 02238 }*/ 02239 if(!unknown_user) 02240 can=true; 02241 if(unknown_user && !can) { 02242 string disp=lang_get_string(1,(*i).lang,480)+eol; 02243 int ec=0; 02244 dcc_send_msg((*i).socket,disp,ec); 02245 return; 02246 } 02247 (*i).fs.new_access.user_name=p; 02248 (*i).fs.file.access.push_back((*i).fs.new_access); 02249 (*i).fs.new_access.clear(); 02250 string disp=lang_get_string(1,(*i).lang,339)+eol; 02251 int ec=0; 02252 dcc_send_msg((*i).socket,disp,ec); 02253 return; 02254 } 02255 } 02256 int ec=0; 02257 dcc_send_msg((*i).socket,disp,ec); 02258 } 02259 if(!all_channel.empty()) { 02260 /*vector<s_channel>::iterator i1; 02261 bool got=false; 02262 map<string,string> vars; 02263 for(i1=r_channels.begin(); i1!=r_channels.end(); i1++) { 02264 if(!cmp_strings_case_insensitive(logic_eval((*i1).channel_name,vars),all_channel) && !(*i1).host_unknown) { 02265 s_access a; 02266 a.user_name=(*i1).username; 02267 (*i).fs.file.access.push_back(a); 02268 got=true; 02269 } 02270 }*/ 02271 02272 vector<s_channel>::iterator i1; 02273 bool got=false; 02274 map<string,string> vars; 02275 for(i1=r_channels.begin(); i1!=r_channels.end(); i1++) { 02276 if(!(*i).as_in_logic.compare((*i1).username) && !cmp_strings_case_insensitive(logic_eval((*i1).channel_name,vars),all_channel) && !(*i1).host_unknown && (*i1).can_send_unknown_users) { 02277 (*i).fs.new_access.clear(); 02278 (*i).fs.new_access.all_on_channel=all_channel; 02279 got=true; 02280 break; 02281 } 02282 } 02283 02284 if(!got) { 02285 (*i).fs.new_access.clear(); 02286 (*i).fs.new_access.all_on_channel=all_channel; 02287 (*i).fs.file.access.push_back((*i).fs.new_access); 02288 02289 string disp=lang_get_string(1,(*i).lang,339)+eol; 02290 int ec=0; 02291 dcc_send_msg((*i).socket,disp,ec); 02292 return; 02293 } 02294 (*i).msg=2000; 02295 return; 02296 } 02297 if(all_users) { 02298 if(!(*i).access_to_can_send_all_users) { 02299 string disp=lang_get_string(1,(*i).lang,479)+eol; 02300 int ec=0; 02301 dcc_send_msg((*i).socket,disp,ec); 02302 return; 02303 } 02304 02305 s_access a; 02306 a.all_users=true; 02307 (*i).fs.file.access.clear(); 02308 (*i).fs.file.access.push_back(a); 02309 (*i).msg++; 02310 02311 string disp=lang_get_string(1,(*i).lang,337)+eol; 02312 int ec=0; 02313 dcc_send_msg((*i).socket,disp,ec); 02314 } 02315 return; 02316 } 02317 02318 if((*i).msg==3) { 02319 string p=dcc_get_line((*i).in_buff); 02320 if(!p.compare("")) 02321 return; 02322 02323 if(p.compare(".")) { 02324 if(atol(conf_getvar("dcc_max_message_size").c_str())!=0 && (*i).msg_content.length()+p.length()>(unsigned)atol(conf_getvar("dcc_max_message_size").c_str())) { 02325 string disp=lang_get_string(1,(*i).lang,613)+eol; 02326 int ec=0; 02327 dcc_send_msg((*i).socket,disp,ec); 02328 } else { 02329 (*i).msg_content+=p; 02330 (*i).msg_content+="\n"; 02331 } 02332 } else { 02333 (*i).msg++; 02334 } 02335 return; 02336 } 02337 02338 // attr's 02339 if((*i).msg==4) { 02340 string disp=lang_get_string(1,(*i).lang,340)+eol; 02341 int ec=0; 02342 dcc_send_msg((*i).socket,disp,ec); 02343 (*i).msg++; 02344 return; 02345 } 02346 02347 if((*i).msg==5) { 02348 string p=dcc_get_line((*i).in_buff); 02349 if(!p.compare("")) 02350 return; 02351 02352 if(p.compare("y") && p.compare("n") && p.compare("Y") && p.compare("N")) { 02353 string disp=lang_get_string(1,(*i).lang,340)+eol; 02354 int ec=0; 02355 dcc_send_msg((*i).socket,disp,ec); 02356 } else { 02357 if(!p.compare("n") || !p.compare("N")) { 02358 } else { 02359 vector<s_access>::iterator i1; 02360 for(i1=(*i).fs.file.access.begin(); i1!=(*i).fs.file.access.end(); i1++) 02361 (*i1).notify_owner=true; 02362 } 02363 (*i).msg++; 02364 return; 02365 } 02366 } 02367 02368 if((*i).msg==6) { 02369 string disp=lang_get_string(1,(*i).lang,341)+eol; 02370 int ec=0; 02371 dcc_send_msg((*i).socket,disp,ec); 02372 (*i).msg++; 02373 return; 02374 } 02375 02376 if((*i).msg==7) { 02377 string p=dcc_get_line((*i).in_buff); 02378 if(!p.compare("")) 02379 return; 02380 02381 if(p.compare("y") && p.compare("n") && p.compare("Y") && p.compare("N")) { 02382 string disp=lang_get_string(1,(*i).lang,341)+eol; 02383 int ec=0; 02384 dcc_send_msg((*i).socket,disp,ec); 02385 } else { 02386 if(!p.compare("n") || !p.compare("N")) { 02387 vector<s_access>::iterator i1; 02388 for(i1=(*i).fs.file.access.begin(); i1!=(*i).fs.file.access.end(); i1++) 02389 (*i1).secure=false; 02390 } else { 02391 vector<s_access>::iterator i1; 02392 for(i1=(*i).fs.file.access.begin(); i1!=(*i).fs.file.access.end(); i1++) 02393 (*i1).secure=true; 02394 } 02395 (*i).msg++; 02396 return; 02397 } 02398 } 02399 02400 if((*i).msg==8) { 02401 (*i).msg++; 02402 return; 02403 } 02404 02405 if((*i).msg==9) { 02406 string disp=lang_get_string(1,(*i).lang,473)+eol; 02407 int ec=0; 02408 dcc_send_msg((*i).socket,disp,ec); 02409 (*i).msg++; 02410 return; 02411 } 02412 02413 if((*i).msg==10) { 02414 string p=dcc_get_line((*i).in_buff); 02415 if(p.empty()) 02416 return; 02417 02418 if(p.compare("y") && p.compare("n") && p.compare("Y") && p.compare("N")) { 02419 string disp=lang_get_string(1,(*i).lang,473)+eol; // !!! 02420 int ec=0; 02421 dcc_send_msg((*i).socket,disp,ec); 02422 } else { 02423 if(!p.compare("n") || !p.compare("N")) { 02424 (*i).msg=1000; 02425 return; 02426 } else { 02427 string disp=lang_get_string(1,(*i).lang,436)+eol; // !!! 02428 int ec=0; 02429 dcc_send_msg((*i).socket,disp,ec); 02430 (*i).msg++; 02431 return; 02432 } 02433 } 02434 } 02435 if((*i).msg==11) { 02436 string p=dcc_get_line((*i).in_buff); 02437 if(p.empty()) 02438 return; 02439 02440 int x=atol(p.c_str()); 02441 if(x==0) { 02442 (*i).fs.file.expiration=0; 02443 string disp=lang_get_string(1,(*i).lang,441)+eol; // !!! 02444 int ec=0; 02445 dcc_send_msg((*i).socket,disp,ec); 02446 (*i).msg=1000; 02447 return; 02448 } 02449 if(x<1970) { 02450 string disp=lang_get_string(1,(*i).lang,436)+eol; // !!! 02451 int ec=0; 02452 dcc_send_msg((*i).socket,disp,ec); 02453 return; 02454 } 02455 (*i).filesystem_expiration.tm_year=x; 02456 string disp=lang_get_string(1,(*i).lang,437)+eol; // !!! 02457 int ec=0; 02458 dcc_send_msg((*i).socket,disp,ec); 02459 (*i).msg++; 02460 return; 02461 } 02462 if((*i).msg==12) { 02463 string p=dcc_get_line((*i).in_buff); 02464 if(p.empty()) 02465 return; 02466 02467 int x=atol(p.c_str()); 02468 if(x<1 || x>12) { 02469 string disp=lang_get_string(1,(*i).lang,437)+eol; // !!! 02470 int ec=0; 02471 dcc_send_msg((*i).socket,disp,ec); 02472 return; 02473 } 02474 (*i).filesystem_expiration.tm_mon=x; 02475 string disp=lang_get_string(1,(*i).lang,438)+eol; // !!! 02476 int ec=0; 02477 dcc_send_msg((*i).socket,disp,ec); 02478 (*i).msg++; 02479 return; 02480 } 02481 if((*i).msg==13) { 02482 string p=dcc_get_line((*i).in_buff); 02483 if(p.empty()) 02484 return; 02485 02486 int x=atol(p.c_str()); 02487 if(x<1 || x>31) { 02488 string disp=lang_get_string(1,(*i).lang,438)+eol; // !!! 02489 int ec=0; 02490 dcc_send_msg((*i).socket,disp,ec); 02491 return; 02492 } 02493 (*i).filesystem_expiration.tm_mday=x; 02494 string disp=lang_get_string(1,(*i).lang,439)+eol; // !!! 02495 int ec=0; 02496 dcc_send_msg((*i).socket,disp,ec); 02497 (*i).msg++; 02498 return; 02499 } 02500 if((*i).msg==14) { 02501 string p=dcc_get_line((*i).in_buff); 02502 if(p.empty()) 02503 return; 02504 02505 int x=atol(p.c_str()); 02506 if(x<0 || x>23) { 02507 string disp=lang_get_string(1,(*i).lang,439)+eol; // !!! 02508 int ec=0; 02509 dcc_send_msg((*i).socket,disp,ec); 02510 return; 02511 } 02512 (*i).filesystem_expiration.tm_hour=x; 02513 string disp=lang_get_string(1,(*i).lang,440)+eol; // !!! 02514 int ec=0; 02515 dcc_send_msg((*i).socket,disp,ec); 02516 (*i).msg++; 02517 return; 02518 } 02519 if((*i).msg==15) { 02520 string p=dcc_get_line((*i).in_buff); 02521 if(p.empty()) 02522 return; 02523 02524 int x=atol(p.c_str()); 02525 if(x<0 || x>59) { 02526 string disp=lang_get_string(1,(*i).lang,440)+eol; // !!! 02527 int ec=0; 02528 dcc_send_msg((*i).socket,disp,ec); 02529 return; 02530 } 02531 (*i).filesystem_expiration.tm_min=x; 02532 (*i).filesystem_expiration.tm_isdst=-1; 02533 (*i).filesystem_expiration.tm_sec=0; 02534 (*i).filesystem_expiration.tm_wday=0; 02535 (*i).filesystem_expiration.tm_yday=0; 02536 02537 (*i).filesystem_expiration.tm_mon-=1; 02538 (*i).filesystem_expiration.tm_year-=1900; 02539 02540 time_t ex=mktime(&(*i).filesystem_expiration); 02541 if(ex==-1) { 02542 string disp=lang_get_string(1,(*i).lang,442)+eol; // !!! 02543 disp+=lang_get_string(1,(*i).lang,436)+eol; // !!! 02544 int ec=0; 02545 dcc_send_msg((*i).socket,disp,ec); 02546 (*i).msg=11; 02547 return; 02548 } 02549 if(ex<time(NULL)) { 02550 string disp=lang_get_string(1,(*i).lang,443)+eol; // !!! 02551 disp+=lang_get_string(1,(*i).lang,436)+eol; // !!! 02552 int ec=0; 02553 dcc_send_msg((*i).socket,disp,ec); 02554 (*i).msg=11; 02555 return; 02556 } 02557 02558 (*i).msg_expiration=ex; 02559 02560 string disp=lang_get_string(1,(*i).lang,433)+eol; 02561 if(ex==0) 02562 disp+=lang_get_string(1,(*i).lang,434)+eol; 02563 else { 02564 char* t1=ctime(&ex); 02565 char t2[128]; 02566 strcpy(t2,t1); 02567 t2[strlen(t2)-1]=0; // get rid of \n 02568 disp+=t2; 02569 disp+=eol; 02570 } 02571 02572 int ec=0; 02573 dcc_send_msg((*i).socket,disp,ec); 02574 (*i).msg=1000; 02575 return; 02576 } 02577 02578 if((*i).msg==1000) { 02579 string disp=lang_get_string(1,(*i).lang,342)+eol; 02580 int ec=0; 02581 dcc_send_msg((*i).socket,disp,ec); 02582 (*i).msg++; 02583 return; 02584 } 02585 02586 if((*i).msg==1001) { 02587 string p=dcc_get_line((*i).in_buff); 02588 if(!p.compare("")) 02589 return; 02590 02591 (*i).fs.file.public_name=p; 02592 (*i).fs.file.expiration=(*i).msg_expiration; 02593 02594 string disp=lang_get_string(1,(*i).lang,343)+eol; 02595 int ec=0; 02596 dcc_send_msg((*i).socket,disp,ec); 02597 (*i).msg++; 02598 return; 02599 } 02600 02601 if((*i).msg==1002) { 02602 string p=dcc_get_line((*i).in_buff); 02603 if(!p.compare("")) 02604 return; 02605 02606 if(p.compare("y") && p.compare("n") && p.compare("Y") && p.compare("N")) { 02607 string disp=lang_get_string(1,(*i).lang,343)+eol; 02608 int ec=0; 02609 dcc_send_msg((*i).socket,disp,ec); 02610 } else { 02611 if(!p.compare("n") || !p.compare("N")) { 02612 string disp=lang_get_string(1,(*i).lang,344)+eol; 02613 int ec=0; 02614 dcc_send_msg((*i).socket,disp,ec); 02615 (*i).fs.file.clear(); 02616 (*i).fs.name=""; 02617 (*i).fs.new_access.clear(); 02618 (*i).msg=0; 02619 } else { 02620 l1: 02621 vector<s_access>::iterator i1; 02622 02623 bool read=true; 02624 bool notify_user=true; 02625 bool old_secure=false; 02626 bool notify_owner=false; 02627 02628 for(i1=(*i).fs.file.access.begin(); i1!=(*i).fs.file.access.end(); i1++) { 02629 read|=(*i1).read; 02630 notify_user|=(*i1).notify_user; 02631 notify_owner|=(*i1).notify_owner; 02632 old_secure|=(*i1).secure; 02633 } 02634 02635 // erase duplicates 02636 for(i1=(*i).fs.file.access.begin(); i1!=(*i).fs.file.access.end(); i1++) { 02637 vector<s_access>::iterator i2; 02638 for(i2=(*i).fs.file.access.begin(); i2!=(*i).fs.file.access.end(); i2++) { 02639 if(i1==i2) 02640 continue; 02641 if((!(*i2).user_name.compare((*i1).user_name) || (*i2).all_users) && !(*i2).user_name.empty()) { 02642 (*i).fs.file.access.erase(i2); 02643 goto l1; 02644 } 02645 } 02646 } 02647 02648 for(i1=(*i).fs.file.access.begin(); i1!=(*i).fs.file.access.end(); i1++) { 02649 (*i1).read=read; 02650 (*i1).notify_user=notify_user; 02651 (*i1).notify_owner=notify_owner; 02652 (*i1).secure=old_secure; 02653 } 02654 02655 /*for(i1=(*i).fs.file.access.begin(); i1!=(*i).fs.file.access.end(); i1++) { 02656 (*i1).read=true; 02657 (*i1).notify_user=true; 02658 old_secure=(*i1).secure; 02659 }*/ 02660 02661 s_access a; 02662 a.del=true; 02663 a.owner=true; 02664 a.read=true; 02665 a.secure=old_secure; 02666 a.user_name=(*i).as_in_logic; 02667 (*i).fs.file.access.push_back(a); 02668 02669 bool force_secure=false; 02670 string internal_name=filesys_dcc_add_message((*i).as_in_logic,(*i).fs.file,(*i).msg_content,force_secure); 02671 02672 string disp; 02673 if(!old_secure && force_secure) 02674 disp+=lang_get_string(1,(*i).lang,346)+eol; 02675 02676 disp+=lang_get_string(1,(*i).lang,345)+eol; 02677 int ec=0; 02678 dcc_send_msg((*i).socket,disp,ec); 02679 02680 (*i).fs.file.clear(); 02681 (*i).fs.name=""; 02682 (*i).fs.new_access.clear(); 02683 (*i).msg_content=""; 02684 (*i).msg=0; 02685 02686 logic_filesys_got_new((*i).as_in_logic,"","","",internal_name); 02687 } 02688 (*i).msg=0; 02689 return; 02690 } 02691 } 02692 02693 // also unknown users? 02694 if((*i).msg==2000) { 02695 string disp=lang_get_string(1,(*i).lang,476)+eol; 02696 int ec=0; 02697 dcc_send_msg((*i).socket,disp,ec); 02698 (*i).msg++; 02699 return; 02700 } 02701 if((*i).msg==2001) { 02702 string p=dcc_get_line((*i).in_buff); 02703 if(!p.compare("")) 02704 return; 02705 02706 if(p.compare("y") && p.compare("n") && p.compare("Y") && p.compare("N")) { 02707 string disp=lang_get_string(1,(*i).lang,476)+eol; 02708 int ec=0; 02709 dcc_send_msg((*i).socket,disp,ec); 02710 } else { 02711 if(!p.compare("n") || !p.compare("N")) { 02712 (*i).fs.new_access.also_unknown=false; 02713 } else { 02714 (*i).fs.new_access.also_unknown=true;; 02715 } 02716 (*i).fs.file.access.push_back((*i).fs.new_access); 02717 (*i).fs.new_access.clear(); 02718 string disp=lang_get_string(1,(*i).lang,339)+eol; 02719 int ec=0; 02720 dcc_send_msg((*i).socket,disp,ec); 02721 (*i).msg=2; 02722 return; 02723 } 02724 return; 02725 } 02726 }
Here is the call graph for this function: ![]() |
|
Should be called in a loop to process new user commands in DCC CHAT/telnet connections.
Definition at line 3429 of file dcc.cpp. References s_user::access_grant_apply, s_user::access_grant_backup, s_user::access_grant_can_send_all_users, s_user::access_grant_can_send_unknown_users, s_user::access_grant_channel, s_user::access_grant_die, s_user::access_grant_filesystem, s_user::access_grant_group, s_user::access_grant_partyline, s_user::access_grant_plusproc, s_user::access_grant_plususer, s_user::access_grant_private, s_user::access_grant_procedure, s_user::access_grant_rehash, s_user::access_grant_replication, s_user::access_grant_restart, s_user::access_grant_upgrade, s_user::access_to_apply, s_user::access_to_backup, s_user::access_to_can_send_all_users, s_user::access_to_can_send_unknown_users, s_user::access_to_channel, s_user::access_to_die, s_user::access_to_filesystem, s_user::access_to_group, s_user::access_to_partyline, s_user::access_to_plusproc, s_user::access_to_plususer, s_user::access_to_private, s_user::access_to_proc, s_user::access_to_rehash, s_user::access_to_replication, s_user::access_to_restart, s_user::access_to_upgrade, s_user::access_usage_procedure, s_channel::allow_dynamic, s_channel::can_send_unknown_users, s_channel::channel_name, s_channel::configured, s_channel::ctcp_flood, dcc_can_unassign(), dcc_get_line(), s_user::dcc_hosts, dcc_send_msg(), s_user::fullname, s_user::groups, s_user::host_bot, s_user::host_unknown, s_user::hostmask, s_user::is_template, s_channel::join_flood, lang_get_string(), lang_subst(), s_user::last_changed, s_flood::lines, logic_partyline_add_user(), logic_partyline_get_channels(), logic_partyline_get_user_template(), logic_partyline_user_exists(), s_user::meta, s_channel::mode_flood, s_channel::msg_flood, s_group::name, s_user::name, s_channel::nick_flood, s_channel::notice_flood, s_channel::on_ban, s_channel::on_banned, s_channel::on_creator, s_channel::on_decreator, s_channel::on_deop, s_channel::on_devoice, s_channel::on_except, s_channel::on_flood, s_channel::on_invite, s_channel::on_join, s_channel::on_kick, s_channel::on_not_in_reop, s_channel::on_not_invited, s_channel::on_notice, s_channel::on_op, s_channel::on_other_mode, s_channel::on_privmsg, s_channel::on_reop, s_channel::on_unban, s_channel::on_unexcept, s_channel::on_uninvite, s_channel::on_voice, s_user::partyline_msg_flood, r_user_templates, s_channel::repeat_flood, and s_channel::username. Referenced by dcc_loop(). 03430 { 03431 if((*i).new_user==-1) { 03432 string p=dcc_get_line((*i).in_buff); 03433 if(!p.compare("")) 03434 return; 03435 if(p.compare(".")) { 03436 bool got=false; 03437 vector<string>::iterator i1; 03438 for(i1=(*i).access_grant_groups.begin(); i1!=(*i).access_grant_groups.end(); i1++) 03439 if(!(*i1).compare(p)) { 03440 got=true; 03441 p=(string)"\""+p+"\""; 03442 (*i).user_member_of.push_back(p); 03443 break; 03444 } 03445 if(got) { 03446 string disp=lang_subst(lang_get_string(1,(*i).lang,104),p)+eol; 03447 int ec=0; 03448 dcc_send_msg((*i).socket,disp,ec); 03449 } else { 03450 string disp=lang_subst(lang_get_string(1,(*i).lang,47),p)+eol; 03451 int ec=0; 03452 dcc_send_msg((*i).socket,disp,ec); 03453 } 03454 } else { 03455 string disp=lang_subst(lang_get_string(1,(*i).lang,34),p)+eol; 03456 int ec=0; 03457 dcc_send_msg((*i).socket,disp,ec); 03458 (*i).new_user=2; 03459 } 03460 } 03461 03462 if((*i).new_user==1) { 03463 string p=dcc_get_line((*i).in_buff); 03464 if(!p.compare("")) 03465 return; 03466 if(logic_partyline_user_exists(p)) { 03467 string disp=lang_subst(lang_get_string(1,(*i).lang,33),p)+eol; 03468 int ec=0; 03469 dcc_send_msg((*i).socket,disp,ec); 03470 } else { 03471 (*i).new_user=-100; 03472 (*i).user_name=p; 03473 return; 03474 } 03475 } 03476 if((*i).new_user==-100) { 03477 string disp=lang_get_string(1,(*i).lang,386)+eol; 03478 vector<s_user>::iterator i1; 03479 bool got=false; 03480 for(i1=r_user_templates.begin(); i1!=r_user_templates.end(); i1++) { 03481 got=true; 03482 disp+=(*i1).name+eol; 03483 } 03484 if(!got) { 03485 disp+=lang_get_string(1,(*i).lang,387)+eol; 03486 (*i).new_user=-150; 03487 } else 03488 (*i).new_user++; 03489 int ec=0; 03490 dcc_send_msg((*i).socket,disp,ec); 03491 return; 03492 } 03493 if((*i).new_user==-99) { 03494 string p=dcc_get_line((*i).in_buff); 03495 if(!p.compare("")) 03496 return; 03497 03498 if(!p.compare(".")) { 03499 string disp=lang_subst(lang_get_string(1,(*i).lang,389),p)+eol; 03500 int ec=0; 03501 dcc_send_msg((*i).socket,disp,ec); 03502 (*i).new_user=-150; 03503 return; 03504 } 03505 03506 vector<s_user>::iterator i1; 03507 bool got=false; 03508 for(i1=r_user_templates.begin(); i1!=r_user_templates.end(); i1++) { 03509 if(!(*i1).name.compare(p)) { 03510 got=true; 03511 break; 03512 } 03513 } 03514 if(!got) { 03515 string disp=lang_subst(lang_get_string(1,(*i).lang,388),p)+eol; 03516 int ec=0; 03517 dcc_send_msg((*i).socket,disp,ec); 03518 (*i).new_user=-100; 03519 return; 03520 } else { 03521 s_user u; 03522 vector<s_channel> chs; 03523 logic_partyline_get_user_template(p,u,chs); 03524 03525 u.is_template=false; 03526 u.host_bot=false; 03527 u.host_unknown=false; 03528 03529 { 03530 (*i).user_member_of.clear(); 03531 (*i).user_hosts.clear(); 03532 (*i).user_dcc_hosts.clear(); 03533 (*i).user_fullnames.clear(); 03534 (*i).user_meta.clear(); 03535 (*i).user_access_to_groups.clear(); 03536 (*i).user_access_grant_groups.clear(); 03537 (*i).user_access_to_proc_groups.clear(); 03538 (*i).user_access_grant_proc_groups.clear(); 03539 (*i).user_access_usage_proc_groups.clear(); 03540 (*i).user_access_to_channel.clear(); 03541 (*i).user_access_grant_channel.clear(); 03542 (*i).user_channels.clear(); 03543 } 03544 03545 vector<s_group>::iterator i1; 03546 03547 for(i1=u.groups.begin(); i1!=u.groups.begin(); i1++) 03548 (*i).user_member_of.push_back((*i1).name); 03549 03550 vector<string>::iterator i2; 03551 for(i2=u.hostmask.begin(); i2!=u.hostmask.end(); i2++) 03552 (*i).user_hosts.push_back(*i2); 03553 03554 vector<s_dcc_host>::iterator i3; 03555 for(i3=u.dcc_hosts.begin(); i3!=u.dcc_hosts.end(); i3++) { 03556 (*i).user_dcc_hosts.push_back(*i3); 03557 } 03558 03559 for(i2=u.fullname.begin(); i2!=u.fullname.end(); i2++) 03560 (*i).user_fullnames.push_back(*i2); 03561 03562 map<string,string>::iterator i5; 03563 for(i5=u.meta.begin(); i5!=u.meta.end(); i5++) 03564 (*i).user_meta.insert(*i5); 03565 03566 for(i2=u.access_to_group.begin(); i2!=u.access_to_group.end(); i2++) 03567 (*i).user_access_to_groups.push_back(*i2); 03568 03569 for(i2=u.access_grant_group.begin(); i2!=u.access_grant_group.end(); i2++) 03570 (*i).user_access_grant_groups.push_back(*i2); 03571 03572 for(i2=u.access_to_proc.begin(); i2!=u.access_to_proc.end(); i2++) 03573 (*i).user_access_to_proc_groups.push_back(*i2); 03574 03575 for(i2=u.access_grant_procedure.begin(); i2!=u.access_grant_procedure.end(); i2++) 03576 (*i).user_access_grant_proc_groups.push_back(*i2); 03577 03578 for(i2=u.access_usage_procedure.begin(); i2!=u.access_usage_procedure.end(); i2++) 03579 (*i).user_access_usage_proc_groups.push_back(*i2); 03580 03581 for(i2=u.access_to_channel.begin(); i2!=u.access_to_channel.end(); i2++) 03582 (*i).user_access_to_channel.push_back(*i2); 03583 03584 for(i2=u.access_grant_channel.begin(); i2!=u.access_grant_channel.end(); i2++) 03585 (*i).user_access_grant_channel.push_back(*i2); 03586 03587 (*i).user_channels.clear(); 03588 vector<s_channel>::iterator i4; 03589 for(i4=chs.begin(); i4!=chs.end(); i4++) { 03590 (*i4).configured=true; 03591 (*i4).is_template=false; 03592 (*i).user_channels.push_back(*i4); 03593 } 03594 03595 (*i).user_access_to_backup=u.access_to_backup; 03596 (*i).user_access_to_die=u.access_to_die; 03597 (*i).user_access_to_filesystem=u.access_to_filesystem; 03598 (*i).user_access_to_partyline=u.access_to_partyline; 03599 (*i).user_access_to_plusproc=u.access_to_plusproc; 03600 (*i).user_access_to_plususer=u.access_to_plususer; 03601 (*i).user_access_to_rehash=u.access_to_rehash; 03602 (*i).user_access_to_restart=u.access_to_restart; 03603 (*i).user_access_grant_backup=u.access_grant_backup; 03604 (*i).user_access_grant_die=u.access_grant_die; 03605 (*i).user_access_grant_filesystem=u.access_grant_filesystem; 03606 (*i).user_access_grant_partyline=u.access_grant_partyline; 03607 (*i).user_access_grant_plusproc=u.access_grant_plusproc; 03608 (*i).user_access_grant_plususer=u.access_grant_plususer; 03609 (*i).user_access_grant_rehash=u.access_grant_rehash; 03610 (*i).user_access_to_replication=u.access_to_replication; 03611 (*i).user_access_grant_replication=u.access_grant_replication; 03612 (*i).user_access_grant_restart=u.access_grant_restart; 03613 03614 (*i).user_access_to_private=u.access_to_private; 03615 (*i).user_access_grant_private=u.access_grant_private; 03616 03617 (*i).user_partyline_msg_flood=u.partyline_msg_flood; 03618 03619 (*i).user_access_to_can_send_all_users=u.access_to_can_send_all_users; 03620 (*i).user_access_grant_can_send_all_users=u.access_grant_can_send_all_users; 03621 03622 (*i).user_access_to_can_send_unknown_users=u.access_to_can_send_unknown_users; 03623 (*i).user_access_grant_can_send_unknown_users=u.access_grant_can_send_unknown_users; 03624 03625 (*i).user_access_to_upgrade=u.access_to_upgrade; 03626 (*i).user_access_grant_upgrade=u.access_grant_upgrade; 03627 03628 (*i).user_access_to_apply=u.access_to_apply; 03629 (*i).user_access_grant_apply=u.access_grant_apply; 03630 03631 (*i).new_user=0; 03632 (*i).edit_user=2; 03633 return; 03634 } 03635 } 03636 if((*i).new_user==-150) { 03637 (*i).user_fullnames.clear(); 03638 (*i).user_meta.clear(); 03639 (*i).user_hosts.clear(); 03640 (*i).user_dcc_hosts.clear(); 03641 (*i).user_fullnames.clear(); 03642 (*i).user_access_grant_partyline=false; 03643 (*i).user_channels.clear(); 03644 (*i).user_member_of.clear(); 03645 (*i).user_access_to_backup=false; 03646 (*i).user_access_grant_backup=false; 03647 (*i).user_access_to_rehash=false; 03648 (*i).user_access_grant_rehash=false; 03649 (*i).user_access_to_plususer=false; 03650 (*i).user_access_grant_plususer=false; 03651 03652 (*i).user_access_to_plusproc=false; 03653 (*i).user_access_grant_plusproc=false; 03654 03655 (*i).user_access_to_replication=false; 03656 (*i).user_access_grant_replication=false; 03657 03658 (*i).user_access_to_restart=false; 03659 (*i).user_access_grant_restart=false; 03660 (*i).user_access_to_die=false; 03661 (*i).user_access_grant_die=false; 03662 03663 (*i).user_access_to_filesystem=false; 03664 (*i).user_access_grant_filesystem=false; 03665 03666 (*i).user_access_to_upgrade=false; 03667 (*i).user_access_grant_upgrade=false; 03668 03669 (*i).user_access_to_apply=false; 03670 (*i).user_access_grant_apply=false; 03671 03672 (*i).user_access_to_private=false; 03673 (*i).user_access_grant_private=false; 03674 03675 (*i).user_access_to_can_send_all_users=false; 03676 (*i).user_access_grant_can_send_all_users=false; 03677 03678 (*i).new_user=-300; 03679 return; 03680 } 03681 if((*i).new_user==-200) { 03682 string disp=lang_get_string(1,(*i).lang,102)+eol; 03683 int ec=0; 03684 dcc_send_msg((*i).socket,disp,ec); 03685 vector<string>::iterator i1; 03686 disp=""; 03687 for(i1=(*i).access_grant_groups.begin(); i1!=(*i).access_grant_groups.end(); i1++) 03688 disp+=*i1+eol; 03689 dcc_send_msg((*i).socket,disp,ec); 03690 disp=lang_get_string(1,(*i).lang,103)+eol; 03691 dcc_send_msg((*i).socket,disp,ec); 03692 03693 (*i).user_member_of.clear(); 03694 (*i).new_user=-1; 03695 return; 03696 } 03697 03698 if((*i).new_user==-300) { 03699 (*i).new_user=-200; 03700 return; 03701 } 03702 03703 if((*i).new_user==2) { 03704 string p=dcc_get_line((*i).in_buff); 03705 if(!p.compare("")) 03706 return; 03707 if(p.compare(".")) { 03708 p=(string)"\""+p+"\""; 03709 (*i).user_hosts.push_back(p); 03710 string disp=lang_get_string(1,(*i).lang,35)+eol; 03711 int ec=0; 03712 dcc_send_msg((*i).socket,disp,ec); 03713 } else { 03714 if((*i).user_hosts.begin()==(*i).user_hosts.end()) { 03715 string disp=lang_get_string(1,(*i).lang,105)+eol; 03716 int ec=0; 03717 dcc_send_msg((*i).socket,disp,ec); 03718 } else { 03719 string disp=lang_get_string(1,(*i).lang,36)+eol; 03720 int ec=0; 03721 dcc_send_msg((*i).socket,disp,ec); 03722 (*i).new_user++; 03723 } 03724 } 03725 } 03726 if((*i).new_user==3) { 03727 string p=dcc_get_line((*i).in_buff); 03728 if(!p.compare("")) 03729 return; 03730 if(p.compare("y") && p.compare("n") && p.compare("Y") && p.compare("N")) { 03731 string disp=lang_get_string(1,(*i).lang,36)+eol; 03732 int ec=0; 03733 dcc_send_msg((*i).socket,disp,ec); 03734 } else { 03735 if(!p.compare("n") || !p.compare("N")) { 03736 (*i).new_user=6; 03737 string disp=lang_get_string(1,(*i).lang,39)+eol; 03738 int ec=0; 03739 dcc_send_msg((*i).socket,disp,ec); 03740 } else { 03741 string disp=lang_get_string(1,(*i).lang,37)+eol; 03742 int ec=0; 03743 dcc_send_msg((*i).socket,disp,ec); 03744 (*i).new_user++; 03745 } 03746 } 03747 } 03748 if((*i).new_user==4) { 03749 string p=dcc_get_line((*i).in_buff); 03750 if(!p.compare("")) 03751 return; 03752 if(p.compare(".")) { 03753 (*i).user_dcc_host.group=atol(p.c_str()); 03754 string disp=lang_get_string(1,(*i).lang,38)+eol; 03755 int ec=0; 03756 dcc_send_msg((*i).socket,disp,ec); 03757 (*i).new_user++; 03758 } else { 03759 if((*i).user_fullnames.begin()==(*i).user_fullnames.end()) { 03760 string disp=lang_get_string(1,(*i).lang,545)+eol; 03761 int ec=0; 03762 dcc_send_msg((*i).socket,disp,ec); 03763 } else { 03764 string disp=lang_get_string(1,(*i).lang,39)+eol; 03765 int ec=0; 03766 dcc_send_msg((*i).socket,disp,ec); 03767 (*i).new_user=6; 03768 } 03769 } 03770 } 03771 if((*i).new_user==5) { 03772 string p=dcc_get_line((*i).in_buff); 03773 if(!p.compare("")) 03774 return; 03775 if(p.compare(".")) { 03776 p=(string)"\""+p+"\""; 03777 (*i).user_dcc_host.host=p; 03778 (*i).user_dcc_hosts.push_back((*i).user_dcc_host); 03779 string disp=lang_get_string(1,(*i).lang,37)+eol; 03780 int ec=0; 03781 dcc_send_msg((*i).socket,disp,ec); 03782 (*i).new_user=4; 03783 } else { 03784 string disp=lang_get_string(1,(*i).lang,39)+eol; 03785 int ec=0; 03786 dcc_send_msg((*i).socket,disp,ec); 03787 (*i).new_user++; 03788 } 03789 } 03790 if((*i).new_user==6) { 03791 string p=dcc_get_line((*i).in_buff); 03792 if(!p.compare("")) 03793 return; 03794 if(p.compare(".")) { 03795 p=(string)"\""+p+"\""; 03796 (*i).user_fullnames.push_back(p); 03797 string disp=lang_get_string(1,(*i).lang,40)+eol; 03798 int ec=0; 03799 dcc_send_msg((*i).socket,disp,ec); 03800 } else { 03801 if((*i).access_grant_partyline) { 03802 string disp=lang_get_string(1,(*i).lang,43)+eol; 03803 int ec=0; 03804 dcc_send_msg((*i).socket,disp,ec); 03805 (*i).new_user++; 03806 } else { 03807 (*i).new_user=100; 03808 } 03809 } 03810 } 03811 if((*i).new_user==7) { 03812 string p=dcc_get_line((*i).in_buff); 03813 if(!p.compare("")) 03814 return; 03815 if(p.compare("y") && p.compare("n") && p.compare("Y") && p.compare("N")) { 03816 string disp=lang_get_string(1,(*i).lang,43)+eol; 03817 int ec=0; 03818 dcc_send_msg((*i).socket,disp,ec); 03819 } else { 03820 if(!p.compare("n") || !p.compare("N")) { 03821 (*i).user_access_to_partyline=false; 03822 //(*i).new_user=100; 03823 (*i).new_user=1000; 03824 (*i).user_partyline_msg_flood.lines=0; 03825 (*i).user_partyline_msg_flood.seconds=0; 03826 return; 03827 } else { 03828 (*i).user_access_to_partyline=true; 03829 //(*i).new_user=200; 03830 (*i).new_user=1100; 03831 return; 03832 } 03833 } 03834 } 03835 03836 //--- 03837 if((*i).new_user==8) { 03838 string p=dcc_get_line((*i).in_buff); 03839 if(!p.compare("")) 03840 return; 03841 if(p.compare(".")) { 03842 vector<string>::iterator i1; 03843 bool got=false; 03844 for(i1=(*i).access_grant_groups.begin(); i1!=(*i).access_grant_groups.end(); i1++) 03845 if(!(*i1).compare(p)) 03846 got=true; 03847 string disp; 03848 if(got) 03849 disp=lang_get_string(1,(*i).lang,46)+eol; 03850 else 03851 disp=lang_get_string(1,(*i).lang,47)+eol; 03852 int ec=0; 03853 dcc_send_msg((*i).socket,disp,ec); 03854 p=(string)"\""+p+"\""; 03855 if(got) 03856 (*i).user_access_to_groups.push_back(p); 03857 } else { 03858 string disp=lang_get_string(1,(*i).lang,48)+eol; 03859 int ec=0; 03860 dcc_send_msg((*i).socket,disp,ec); 03861 vector<string>::iterator i1; 03862 for(i1=(*i).access_grant_groups.begin(); i1!=(*i).access_grant_groups.end(); i1++) { 03863 disp=*i1+eol; 03864 dcc_send_msg((*i).socket,disp,ec); 03865 } 03866 disp=lang_get_string(1,(*i).lang,45)+eol; 03867 dcc_send_msg((*i).socket,disp,ec); 03868 (*i).new_user++; 03869 } 03870 } 03871 if((*i).new_user==9) { 03872 string p=dcc_get_line((*i).in_buff); 03873 if(!p.compare("")) 03874 return; 03875 if(p.compare(".")) { 03876 vector<string>::iterator i1; 03877 bool got=false; 03878 for(i1=(*i).access_grant_groups.begin(); i1!=(*i).access_grant_groups.end(); i1++) 03879 if(!(*i1).compare(p)) 03880 got=true; 03881 string disp; 03882 if(got) 03883 disp=lang_get_string(1,(*i).lang,46)+eol; 03884 else 03885 disp=lang_get_string(1,(*i).lang,47)+eol; 03886 int ec=0; 03887 dcc_send_msg((*i).socket,disp,ec); 03888 p=(string)"\""+p+"\""; 03889 if(got) 03890 (*i).user_access_grant_groups.push_back(p); 03891 } else { 03892 string disp=lang_get_string(1,(*i).lang,49)+eol; 03893 int ec=0; 03894 dcc_send_msg((*i).socket,disp,ec); 03895 vector<string>::iterator i1; 03896 for(i1=(*i).access_grant_proc_groups.begin(); i1!=(*i).access_grant_proc_groups.end(); i1++) { 03897 disp=*i1+eol; 03898 dcc_send_msg((*i).socket,disp,ec); 03899 } 03900 disp=lang_get_string(1,(*i).lang,45)+eol; 03901 dcc_send_msg((*i).socket,disp,ec); 03902 (*i).new_user++; 03903 } 03904 } 03905 if((*i).new_user==10) { 03906 string p=dcc_get_line((*i).in_buff); 03907 if(!p.compare("")) 03908 return; 03909 if(p.compare(".")) { 03910 vector<string>::iterator i1; 03911 bool got=false; 03912 for(i1=(*i).access_grant_proc_groups.begin(); i1!=(*i).access_grant_proc_groups.end(); i1++) 03913 if(!(*i1).compare(p)) 03914 got=true; 03915 string disp; 03916 if(got) 03917 disp=lang_get_string(1,(*i).lang,46)+eol; 03918 else 03919 disp=lang_get_string(1,(*i).lang,47)+eol; 03920 int ec=0; 03921 dcc_send_msg((*i).socket,disp,ec); 03922 p=(string)"\""+p+"\""; 03923 if(got) 03924 (*i).user_access_to_proc_groups.push_back(p); 03925 } else { 03926 string disp=lang_get_string(1,(*i).lang,50)+eol; 03927 int ec=0; 03928 dcc_send_msg((*i).socket,disp,ec); 03929 vector<string>::iterator i1; 03930 for(i1=(*i).access_grant_proc_groups.begin(); i1!=(*i).access_grant_proc_groups.end(); i1++) { 03931 disp=*i1+eol; 03932 dcc_send_msg((*i).socket,disp,ec); 03933 } 03934 disp=lang_get_string(1,(*i).lang,45)+eol; 03935 dcc_send_msg((*i).socket,disp,ec); 03936 (*i).new_user++; 03937 } 03938 } 03939 if((*i).new_user==11) { 03940 string p=dcc_get_line((*i).in_buff); 03941 if(!p.compare("")) 03942 return; 03943 if(p.compare(".")) { 03944 vector<string>::iterator i1; 03945 bool got=false; 03946 for(i1=(*i).access_grant_proc_groups.begin(); i1!=(*i).access_grant_proc_groups.end(); i1++) 03947 if(!(*i1).compare(p)) 03948 got=true; 03949 string disp; 03950 if(got) 03951 disp=lang_get_string(1,(*i).lang,46)+eol; 03952 else 03953 disp=lang_get_string(1,(*i).lang,47)+eol; 03954 int ec=0; 03955 dcc_send_msg((*i).socket,disp,ec); 03956 p=(string)"\""+p+"\""; 03957 if(got) 03958 (*i).user_access_grant_proc_groups.push_back(p); 03959 } else { 03960 string disp=lang_get_string(1,(*i).lang,590)+eol; 03961 int ec=0; 03962 dcc_send_msg((*i).socket,disp,ec); 03963 vector<string>::iterator i1; 03964 for(i1=(*i).access_grant_proc_groups.begin(); i1!=(*i).access_grant_proc_groups.end(); i1++) { 03965 disp=*i1+eol; 03966 dcc_send_msg((*i).socket,disp,ec); 03967 } 03968 disp=lang_get_string(1,(*i).lang,45)+eol; 03969 dcc_send_msg((*i).socket,disp,ec); 03970 (*i).new_user=1200; 03971 return; 03972 } 03973 } 03974 03975 if((*i).new_user==12) { 03976 string p=dcc_get_line((*i).in_buff); 03977 if(!p.compare("")) 03978 return; 03979 if(p.compare(".")) { 03980 vector<string>::iterator i1; 03981 bool got=false; 03982 for(i1=(*i).access_to_channel.begin(); i1!=(*i).access_to_channel.end(); i1++) 03983 if(!(*i1).compare(p)) 03984 got=true; 03985 string disp; 03986 if(got) 03987 disp=lang_get_string(1,(*i).lang,46)+eol; 03988 else 03989 disp=lang_get_string(1,(*i).lang,47)+eol; 03990 int ec=0; 03991 dcc_send_msg((*i).socket,disp,ec); 03992 p=(string)"\""+p+"\""; 03993 if(got) 03994 (*i).access_to_channel.push_back(p); 03995 } else { 03996 string disp=lang_get_string(1,(*i).lang,52)+eol; 03997 int ec=0; 03998 dcc_send_msg((*i).socket,disp,ec); 03999 vector<string>::iterator i1; 04000 for(i1=(*i).access_grant_channel.begin(); i1!=(*i).access_grant_channel.end(); i1++) { 04001 disp=*i1+eol; 04002 dcc_send_msg((*i).socket,disp,ec); 04003 } 04004 disp=lang_get_string(1,(*i).lang,45)+eol; 04005 dcc_send_msg((*i).socket,disp,ec); 04006 (*i).new_user++; 04007 } 04008 } 04009 if((*i).new_user==13) { 04010 string p=dcc_get_line((*i).in_buff); 04011 if(!p.compare("")) 04012 return; 04013 if(p.compare(".")) { 04014 vector<string>::iterator i1; 04015 bool got=false; 04016 for(i1=(*i).access_grant_channel.begin(); i1!=(*i).access_grant_channel.end(); i1++) 04017 if(!(*i1).compare(p)) 04018 got=true; 04019 string disp; 04020 if(got) 04021 disp=lang_get_string(1,(*i).lang,46)+eol; 04022 else 04023 disp=lang_get_string(1,(*i).lang,47)+eol; 04024 int ec=0; 04025 dcc_send_msg((*i).socket,disp,ec); 04026 p=(string)"\""+p+"\""; 04027 if(got) 04028 (*i).access_grant_channel.push_back(p); 04029 } else { 04030 string disp=lang_get_string(1,(*i).lang,53)+eol; 04031 int ec=0; 04032 dcc_send_msg((*i).socket,disp,ec); 04033 (*i).new_user++; 04034 } 04035 } 04036 if((*i).new_user==14) { 04037 vector<string> channels; 04038 logic_partyline_get_channels(channels); 04039 vector<string>::iterator i1; 04040 for(i1=channels.begin(); i1!=channels.end(); i1++) { 04041 vector<string>::iterator i2; 04042 for(i2=(*i).access_grant_channel.begin(); i2!=(*i).access_grant_channel.end(); i2++) { 04043 vector<s_channel>::iterator i3; 04044 bool got=false; 04045 for(i3=(*i).user_channels.begin(); i3!=(*i).user_channels.end(); i3++) 04046 if(!((*i3).channel_name.compare(*i2))) { 04047 got=true; 04048 break; 04049 } 04050 if(got) 04051 continue; 04052 if(!(*i2).compare("*")) 04053 continue; 04054 s_channel ch; 04055 ch.username=(*i).user_name; 04056 ch.channel_name=*i2; 04057 ch.on_deop=""; 04058 ch.on_ban=""; 04059 ch.on_unban=""; 04060 ch.on_kick=""; 04061 ch.on_op=""; 04062 ch.on_voice=""; 04063 ch.on_devoice=""; 04064 ch.on_creator=""; 04065 ch.on_decreator=""; 04066 ch.on_join=""; 04067 ch.on_banned=""; 04068 ch.on_flood=""; 04069 ch.on_privmsg=""; 04070 ch.on_notice=""; 04071 ch.on_except=""; 04072 ch.on_unexcept=""; 04073 ch.on_invite=""; 04074 ch.on_uninvite=""; 04075 ch.on_not_invited=""; 04076 ch.on_not_in_reop=""; 04077 ch.on_reop=""; 04078 ch.on_other_mode=""; 04079 ch.msg_flood.lines=0; 04080 ch.notice_flood.lines=0; 04081 ch.repeat_flood.lines=0; 04082 ch.nick_flood.lines=0; 04083 ch.join_flood.lines=0; 04084 ch.mode_flood.lines=0; 04085 ch.ctcp_flood.lines=0; 04086 ch.allow_dynamic.clear(); 04087 ch.configured=false; 04088 ch.can_send_unknown_users=false; 04089 (*i).user_channels.push_back(ch); 04090 string disp=*i2+eol; 04091 int ec=0; 04092 dcc_send_msg((*i).socket,disp,ec); 04093 } 04094 } 04095 (*i).new_user++; 04096 } 04097 04098 if((*i).new_user==15) { 04099 int num_not_configured_channels=0; 04100 04101 string channel=""; 04102 04103 vector<s_channel>::iterator i2; 04104 for(i2=(*i).user_channels.begin(); i2!=(*i).user_channels.end(); i2++) 04105 if(!(*i2).configured) { 04106 num_not_configured_channels++; 04107 if(!channel.compare("")) 04108 channel=(*i2).channel_name; 04109 } 04110 (*i).num_not_configured_channels=num_not_configured_channels; 04111 (*i).user_channel.username=(*i).user_name; 04112 (*i).user_channel.channel_name=channel; 04113 (*i).user_channel.on_deop=""; 04114 (*i).user_channel.on_ban=""; 04115 (*i).user_channel.on_unban=""; 04116 (*i).user_channel.on_kick=""; 04117 (*i).user_channel.on_op=""; 04118 (*i).user_channel.on_voice=""; 04119 (*i).user_channel.on_devoice=""; 04120 (*i).user_channel.on_creator=""; 04121 (*i).user_channel.on_decreator=""; 04122 (*i).user_channel.on_join=""; 04123 (*i).user_channel.on_banned=""; 04124 (*i).user_channel.on_flood=""; 04125 (*i).user_channel.on_privmsg=""; 04126 (*i).user_channel.on_notice=""; 04127 (*i).user_channel.on_except=""; 04128 (*i).user_channel.on_unexcept=""; 04129 (*i).user_channel.on_invite=""; 04130 (*i).user_channel.on_uninvite=""; 04131 (*i).user_channel.on_not_invited=""; 04132 (*i).user_channel.on_not_in_reop=""; 04133 (*i).user_channel.on_reop=""; 04134 (*i).user_channel.on_other_mode=""; 04135 (*i).user_channel.msg_flood.lines=0; 04136 (*i).user_channel.notice_flood.lines=0; 04137 (*i).user_channel.repeat_flood.lines=0; 04138 (*i).user_channel.nick_flood.lines=0; 04139 (*i).user_channel.join_flood.lines=0; 04140 (*i).user_channel.mode_flood.lines=0; 04141 (*i).user_channel.ctcp_flood.lines=0; 04142 04143 (*i).user_channel_allow_dynamic.group=""; 04144 (*i).user_channel_allow_dynamic.plus_modes=""; 04145 (*i).user_channel_allow_dynamic.minus_modes=""; 04146 04147 (*i).user_channel.configured=false; 04148 (*i).user_channel.can_send_unknown_users=false; 04149 04150 (*i).new_user++; 04151 04152 // end! 04153 if(num_not_configured_channels==0) 04154 (*i).new_user=38; 04155 (*i).num_not_configured_channels=num_not_configured_channels; 04156 } 04157 // on_deop 04158 if((*i).new_user==16) { 04159 string disp; 04160 int ec=0; 04161 04162 disp=lang_get_string(1,(*i).lang,55)+eol; // !!! 04163 dcc_send_msg((*i).socket,disp,ec); 04164 04165 vector<string>::iterator i3; 04166 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) { 04167 if(!(*i3).compare("*")) 04168 continue; 04169 disp=*i3+eol; 04170 dcc_send_msg((*i).socket,disp,ec); 04171 } 04172 04173 disp=(string)"----------------"+eol; 04174 dcc_send_msg((*i).socket,disp,ec); 04175 04176 disp=lang_get_string(1,(*i).lang,75)+eol; // !!! 04177 dcc_send_msg((*i).socket,disp,ec); 04178 04179 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol; 04180 dcc_send_msg((*i).socket,disp,ec); 04181 04182 disp=lang_get_string(1,(*i).lang,541)+eol; 04183 dcc_send_msg((*i).socket,disp,ec); 04184 04185 (*i).new_user++; 04186 } 04187 if((*i).new_user==17) { 04188 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_deop)) { 04189 int ec=0; 04190 string disp=lang_get_string(1,(*i).lang,592)+eol; 04191 dcc_send_msg((*i).socket,disp,ec); 04192 (*i).new_user++; 04193 return; 04194 } 04195 04196 string p=dcc_get_line((*i).in_buff); 04197 if(!p.compare("")) 04198 return; 04199 vector<string>::iterator i1; 04200 bool got=false; 04201 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++) 04202 if(!(*i1).compare(p)) 04203 got=true; 04204 if(!p.compare(".")) { 04205 got=true; 04206 string disp=lang_get_string(1,(*i).lang,57)+eol; 04207 int ec=0; 04208 dcc_send_msg((*i).socket,disp,ec); 04209 (*i).new_user++; 04210 } else { 04211 if(!p.compare("!")) { 04212 vector<s_channel>::iterator i2; 04213 for(i2=(*i).user_channels.begin(); i2!=(*i).user_channels.end(); i2++) 04214 if(!(*i2).channel_name.compare((*i).user_channel.channel_name)) { 04215 (*i).user_channels.erase(i2); 04216 break; 04217 } 04218 if((*i).num_not_configured_channels>0) { 04219 (*i).new_user=15; 04220 return; 04221 } else { 04222 string disp=lang_get_string(1,(*i).lang,69)+eol; 04223 int ec=0; 04224 dcc_send_msg((*i).socket,disp,ec); 04225 (*i).new_user=39; 04226 return; 04227 } 04228 } else { 04229 string disp; 04230 if(got) 04231 disp=lang_get_string(1,(*i).lang,57)+eol; 04232 else 04233 disp=lang_get_string(1,(*i).lang,58)+eol; 04234 int ec=0; 04235 dcc_send_msg((*i).socket,disp,ec); 04236 if(got) 04237 (*i).user_channel.on_deop=p; 04238 else { 04239 (*i).new_user--; 04240 return; 04241 } 04242 (*i).new_user++; 04243 } 04244 } 04245 } 04246 // on_ban 04247 if((*i).new_user==18) { 04248 string disp; 04249 int ec=0; 04250 04251 disp=lang_get_string(1,(*i).lang,59)+eol; // !!! 04252 dcc_send_msg((*i).socket,disp,ec); 04253 04254 vector<string>::iterator i3; 04255 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) { 04256 if(!(*i3).compare("*")) 04257 continue; 04258 disp=*i3+eol; 04259 dcc_send_msg((*i).socket,disp,ec); 04260 } 04261 04262 disp=(string)"----------------"+eol; 04263 dcc_send_msg((*i).socket,disp,ec); 04264 04265 disp=lang_get_string(1,(*i).lang,76)+eol; // !!! 04266 dcc_send_msg((*i).socket,disp,ec); 04267 04268 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol; 04269 dcc_send_msg((*i).socket,disp,ec); 04270 04271 disp=lang_get_string(1,(*i).lang,56)+eol; 04272 dcc_send_msg((*i).socket,disp,ec); 04273 04274 (*i).new_user++; 04275 } 04276 if((*i).new_user==19) { 04277 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_ban)) { 04278 int ec=0; 04279 string disp=lang_get_string(1,(*i).lang,592)+eol; 04280 dcc_send_msg((*i).socket,disp,ec); 04281 (*i).new_user++; 04282 return; 04283 } 04284 04285 string p=dcc_get_line((*i).in_buff); 04286 if(!p.compare("")) 04287 return; 04288 vector<string>::iterator i1; 04289 bool got=false; 04290 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++) 04291 if(!(*i1).compare(p)) 04292 got=true; 04293 if(!p.compare(".")) { 04294 got=true; 04295 string disp=lang_get_string(1,(*i).lang,57)+eol; 04296 int ec=0; 04297 dcc_send_msg((*i).socket,disp,ec); 04298 (*i).new_user++; 04299 } else { 04300 string disp; 04301 if(got) 04302 disp=lang_get_string(1,(*i).lang,57)+eol; 04303 else 04304 disp=lang_get_string(1,(*i).lang,58)+eol; 04305 int ec=0; 04306 dcc_send_msg((*i).socket,disp,ec); 04307 if(got) 04308 (*i).user_channel.on_ban=p; 04309 else { 04310 (*i).new_user--; 04311 return; 04312 } 04313 (*i).new_user++; 04314 } 04315 } 04316 // on_unban 04317 if((*i).new_user==20) { 04318 string disp; 04319 int ec=0; 04320 04321 disp=lang_get_string(1,(*i).lang,60)+eol; // !!! 04322 dcc_send_msg((*i).socket,disp,ec); 04323 04324 vector<string>::iterator i3; 04325 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) { 04326 if(!(*i3).compare("*")) 04327 continue; 04328 disp=*i3+eol; 04329 dcc_send_msg((*i).socket,disp,ec); 04330 } 04331 04332 disp=(string)"----------------"+eol; 04333 dcc_send_msg((*i).socket,disp,ec); 04334 04335 disp=lang_get_string(1,(*i).lang,77)+eol; // !!! 04336 dcc_send_msg((*i).socket,disp,ec); 04337 04338 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol; 04339 dcc_send_msg((*i).socket,disp,ec); 04340 04341 disp=lang_get_string(1,(*i).lang,56)+eol; 04342 dcc_send_msg((*i).socket,disp,ec); 04343 04344 (*i).new_user++; 04345 } 04346 if((*i).new_user==21) { 04347 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_unban)) { 04348 int ec=0; 04349 string disp=lang_get_string(1,(*i).lang,592)+eol; 04350 dcc_send_msg((*i).socket,disp,ec); 04351 (*i).new_user++; 04352 return; 04353 } 04354 04355 string p=dcc_get_line((*i).in_buff); 04356 if(!p.compare("")) 04357 return; 04358 vector<string>::iterator i1; 04359 bool got=false; 04360 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++) 04361 if(!(*i1).compare(p)) 04362 got=true; 04363 if(!p.compare(".")) { 04364 got=true; 04365 string disp=lang_get_string(1,(*i).lang,57)+eol; 04366 int ec=0; 04367 dcc_send_msg((*i).socket,disp,ec); 04368 (*i).new_user++; 04369 } else { 04370 string disp; 04371 if(got) 04372 disp=lang_get_string(1,(*i).lang,57)+eol; 04373 else 04374 disp=lang_get_string(1,(*i).lang,58)+eol; 04375 int ec=0; 04376 dcc_send_msg((*i).socket,disp,ec); 04377 if(got) 04378 (*i).user_channel.on_unban=p; 04379 else { 04380 (*i).new_user--; 04381 return; 04382 } 04383 (*i).new_user++; 04384 } 04385 } 04386 // on_kick 04387 if((*i).new_user==22) { 04388 string disp; 04389 int ec=0; 04390 04391 disp=lang_get_string(1,(*i).lang,61)+eol; // !!! 04392 dcc_send_msg((*i).socket,disp,ec); 04393 04394 vector<string>::iterator i3; 04395 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) { 04396 if(!(*i3).compare("*")) 04397 continue; 04398 disp=*i3+eol; 04399 dcc_send_msg((*i).socket,disp,ec); 04400 } 04401 04402 disp=(string)"----------------"+eol; 04403 dcc_send_msg((*i).socket,disp,ec); 04404 04405 disp=lang_get_string(1,(*i).lang,78)+eol; // !!! 04406 dcc_send_msg((*i).socket,disp,ec); 04407 04408 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol; 04409 dcc_send_msg((*i).socket,disp,ec); 04410 04411 disp=lang_get_string(1,(*i).lang,56)+eol; 04412 dcc_send_msg((*i).socket,disp,ec); 04413 04414 (*i).new_user++; 04415 } 04416 if((*i).new_user==23) { 04417 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_kick)) { 04418 int ec=0; 04419 string disp=lang_get_string(1,(*i).lang,592)+eol; 04420 dcc_send_msg((*i).socket,disp,ec); 04421 (*i).new_user++; 04422 return; 04423 } 04424 04425 string p=dcc_get_line((*i).in_buff); 04426 if(!p.compare("")) 04427 return; 04428 vector<string>::iterator i1; 04429 bool got=false; 04430 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++) 04431 if(!(*i1).compare(p)) 04432 got=true; 04433 if(!p.compare(".")) { 04434 got=true; 04435 string disp=lang_get_string(1,(*i).lang,57)+eol; 04436 int ec=0; 04437 dcc_send_msg((*i).socket,disp,ec); 04438 (*i).new_user++; 04439 } else { 04440 string disp; 04441 if(got) 04442 disp=lang_get_string(1,(*i).lang,57)+eol; 04443 else 04444 disp=lang_get_string(1,(*i).lang,58)+eol; 04445 int ec=0; 04446 dcc_send_msg((*i).socket,disp,ec); 04447 if(got) 04448 (*i).user_channel.on_kick=p; 04449 else { 04450 (*i).new_user--; 04451 return; 04452 } 04453 (*i).new_user++; 04454 } 04455 } 04456 // on_op 04457 if((*i).new_user==24) { 04458 string disp; 04459 int ec=0; 04460 04461 disp=lang_get_string(1,(*i).lang,62)+eol; // !!! 04462 dcc_send_msg((*i).socket,disp,ec); 04463 04464 vector<string>::iterator i3; 04465 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) { 04466 if(!(*i3).compare("*")) 04467 continue; 04468 disp=*i3+eol; 04469 dcc_send_msg((*i).socket,disp,ec); 04470 } 04471 04472 disp=(string)"----------------"+eol; 04473 dcc_send_msg((*i).socket,disp,ec); 04474 04475 disp=lang_get_string(1,(*i).lang,79)+eol; // !!! 04476 dcc_send_msg((*i).socket,disp,ec); 04477 04478 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol; 04479 dcc_send_msg((*i).socket,disp,ec); 04480 04481 disp=lang_get_string(1,(*i).lang,56)+eol; 04482 dcc_send_msg((*i).socket,disp,ec); 04483 04484 (*i).new_user++; 04485 } 04486 if((*i).new_user==25) { 04487 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_op)) { 04488 int ec=0; 04489 string disp=lang_get_string(1,(*i).lang,592)+eol; 04490 dcc_send_msg((*i).socket,disp,ec); 04491 (*i).new_user++; 04492 return; 04493 } 04494 04495 string p=dcc_get_line((*i).in_buff); 04496 if(!p.compare("")) 04497 return; 04498 vector<string>::iterator i1; 04499 bool got=false; 04500 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++) 04501 if(!(*i1).compare(p)) 04502 got=true; 04503 if(!p.compare(".")) { 04504 got=true; 04505 string disp=lang_get_string(1,(*i).lang,57)+eol; 04506 int ec=0; 04507 dcc_send_msg((*i).socket,disp,ec); 04508 (*i).new_user++; 04509 } else { 04510 string disp; 04511 if(got) 04512 disp=lang_get_string(1,(*i).lang,57)+eol; 04513 else 04514 disp=lang_get_string(1,(*i).lang,58)+eol; 04515 int ec=0; 04516 dcc_send_msg((*i).socket,disp,ec); 04517 if(got) 04518 (*i).user_channel.on_op=p; 04519 else { 04520 (*i).new_user--; 04521 return; 04522 } 04523 (*i).new_user++; 04524 } 04525 } 04526 // on_voice 04527 if((*i).new_user==26) { 04528 string disp; 04529 int ec=0; 04530 04531 disp=lang_get_string(1,(*i).lang,63)+eol; // !!! 04532 dcc_send_msg((*i).socket,disp,ec); 04533 04534 vector<string>::iterator i3; 04535 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) { 04536 if(!(*i3).compare("*")) 04537 continue; 04538 disp=*i3+eol; 04539 dcc_send_msg((*i).socket,disp,ec); 04540 } 04541 04542 disp=(string)"----------------"+eol; 04543 dcc_send_msg((*i).socket,disp,ec); 04544 04545 disp=lang_get_string(1,(*i).lang,80)+eol; // !!! 04546 dcc_send_msg((*i).socket,disp,ec); 04547 04548 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol; 04549 dcc_send_msg((*i).socket,disp,ec); 04550 04551 disp=lang_get_string(1,(*i).lang,56)+eol; 04552 dcc_send_msg((*i).socket,disp,ec); 04553 04554 (*i).new_user++; 04555 } 04556 if((*i).new_user==27) { 04557 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_voice)) { 04558 int ec=0; 04559 string disp=lang_get_string(1,(*i).lang,592)+eol; 04560 dcc_send_msg((*i).socket,disp,ec); 04561 (*i).new_user++; 04562 return; 04563 } 04564 04565 string p=dcc_get_line((*i).in_buff); 04566 if(!p.compare("")) 04567 return; 04568 vector<string>::iterator i1; 04569 bool got=false; 04570 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++) 04571 if(!(*i1).compare(p)) 04572 got=true; 04573 if(!p.compare(".")) { 04574 got=true; 04575 string disp=lang_get_string(1,(*i).lang,57)+eol; 04576 int ec=0; 04577 dcc_send_msg((*i).socket,disp,ec); 04578 (*i).new_user++; 04579 } else { 04580 string disp; 04581 if(got) 04582 disp=lang_get_string(1,(*i).lang,57)+eol; 04583 else 04584 disp=lang_get_string(1,(*i).lang,58)+eol; 04585 int ec=0; 04586 dcc_send_msg((*i).socket,disp,ec); 04587 if(got) 04588 (*i).user_channel.on_voice=p; 04589 else { 04590 (*i).new_user--; 04591 return; 04592 } 04593 (*i).new_user++; 04594 } 04595 } 04596 // on_devoice 04597 if((*i).new_user==28) { 04598 string disp; 04599 int ec=0; 04600 04601 disp=lang_get_string(1,(*i).lang,64)+eol; // !!! 04602 dcc_send_msg((*i).socket,disp,ec); 04603 04604 vector<string>::iterator i3; 04605 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) { 04606 if(!(*i3).compare("*")) 04607 continue; 04608 disp=*i3+eol; 04609 dcc_send_msg((*i).socket,disp,ec); 04610 } 04611 04612 disp=(string)"----------------"+eol; 04613 dcc_send_msg((*i).socket,disp,ec); 04614 04615 disp=lang_get_string(1,(*i).lang,81)+eol; // !!! 04616 dcc_send_msg((*i).socket,disp,ec); 04617 04618 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol; 04619 dcc_send_msg((*i).socket,disp,ec); 04620 04621 disp=lang_get_string(1,(*i).lang,56)+eol; 04622 dcc_send_msg((*i).socket,disp,ec); 04623 04624 (*i).new_user++; 04625 } 04626 if((*i).new_user==29) { 04627 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_devoice)) { 04628 int ec=0; 04629 string disp=lang_get_string(1,(*i).lang,592)+eol; 04630 dcc_send_msg((*i).socket,disp,ec); 04631 (*i).new_user++; 04632 return; 04633 } 04634 04635 string p=dcc_get_line((*i).in_buff); 04636 if(!p.compare("")) 04637 return; 04638 vector<string>::iterator i1; 04639 bool got=false; 04640 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++) 04641 if(!(*i1).compare(p)) 04642 got=true; 04643 if(!p.compare(".")) { 04644 got=true; 04645 string disp=lang_get_string(1,(*i).lang,57)+eol; 04646 int ec=0; 04647 dcc_send_msg((*i).socket,disp,ec); 04648 (*i).new_user++; 04649 } else { 04650 string disp; 04651 if(got) 04652 disp=lang_get_string(1,(*i).lang,57)+eol; 04653 else 04654 disp=lang_get_string(1,(*i).lang,58)+eol; 04655 int ec=0; 04656 dcc_send_msg((*i).socket,disp,ec); 04657 if(got) 04658 (*i).user_channel.on_devoice=p; 04659 else { 04660 (*i).new_user--; 04661 return; 04662 } 04663 (*i).new_user++; 04664 } 04665 } 04666 // on_creator 04667 if((*i).new_user==30) { 04668 string disp; 04669 int ec=0; 04670 04671 disp=lang_get_string(1,(*i).lang,65)+eol; // !!! 04672 dcc_send_msg((*i).socket,disp,ec); 04673 04674 vector<string>::iterator i3; 04675 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) { 04676 if(!(*i3).compare("*")) 04677 continue; 04678 disp=*i3+eol; 04679 dcc_send_msg((*i).socket,disp,ec); 04680 } 04681 04682 disp=(string)"----------------"+eol; 04683 dcc_send_msg((*i).socket,disp,ec); 04684 04685 disp=lang_get_string(1,(*i).lang,82)+eol; // !!! 04686 dcc_send_msg((*i).socket,disp,ec); 04687 04688 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol; 04689 dcc_send_msg((*i).socket,disp,ec); 04690 04691 disp=lang_get_string(1,(*i).lang,56)+eol; 04692 dcc_send_msg((*i).socket,disp,ec); 04693 04694 (*i).new_user++; 04695 } 04696 if((*i).new_user==31) { 04697 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_creator)) { 04698 int ec=0; 04699 string disp=lang_get_string(1,(*i).lang,592)+eol; 04700 dcc_send_msg((*i).socket,disp,ec); 04701 (*i).new_user++; 04702 return; 04703 } 04704 04705 string p=dcc_get_line((*i).in_buff); 04706 if(!p.compare("")) 04707 return; 04708 vector<string>::iterator i1; 04709 bool got=false; 04710 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++) 04711 if(!(*i1).compare(p)) 04712 got=true; 04713 if(!p.compare(".")) { 04714 got=true; 04715 string disp=lang_get_string(1,(*i).lang,57)+eol; 04716 int ec=0; 04717 dcc_send_msg((*i).socket,disp,ec); 04718 (*i).new_user++; 04719 } else { 04720 string disp; 04721 if(got) 04722 disp=lang_get_string(1,(*i).lang,57)+eol; 04723 else 04724 disp=lang_get_string(1,(*i).lang,58)+eol; 04725 int ec=0; 04726 dcc_send_msg((*i).socket,disp,ec); 04727 if(got) 04728 (*i).user_channel.on_creator=p; 04729 else { 04730 (*i).new_user--; 04731 return; 04732 } 04733 (*i).new_user++; 04734 } 04735 } 04736 // on_decreator 04737 if((*i).new_user==32) { 04738 string disp; 04739 int ec=0; 04740 04741 disp=lang_get_string(1,(*i).lang,66)+eol; // !!! 04742 dcc_send_msg((*i).socket,disp,ec); 04743 04744 vector<string>::iterator i3; 04745 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) { 04746 if(!(*i3).compare("*")) 04747 continue; 04748 disp=*i3+eol; 04749 dcc_send_msg((*i).socket,disp,ec); 04750 } 04751 04752 disp=(string)"----------------"+eol; 04753 dcc_send_msg((*i).socket,disp,ec); 04754 04755 disp=lang_get_string(1,(*i).lang,83)+eol; // !!! 04756 dcc_send_msg((*i).socket,disp,ec); 04757 04758 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol; 04759 dcc_send_msg((*i).socket,disp,ec); 04760 04761 disp=lang_get_string(1,(*i).lang,56)+eol; 04762 dcc_send_msg((*i).socket,disp,ec); 04763 04764 (*i).new_user++; 04765 } 04766 if((*i).new_user==33) { 04767 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_decreator)) { 04768 int ec=0; 04769 string disp=lang_get_string(1,(*i).lang,592)+eol; 04770 dcc_send_msg((*i).socket,disp,ec); 04771 (*i).new_user++; 04772 return; 04773 } 04774 04775 string p=dcc_get_line((*i).in_buff); 04776 if(!p.compare("")) 04777 return; 04778 vector<string>::iterator i1; 04779 bool got=false; 04780 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++) 04781 if(!(*i1).compare(p)) 04782 got=true; 04783 if(!p.compare(".")) { 04784 got=true; 04785 string disp=lang_get_string(1,(*i).lang,57)+eol; 04786 int ec=0; 04787 dcc_send_msg((*i).socket,disp,ec); 04788 (*i).new_user++; 04789 } else { 04790 string disp; 04791 if(got) 04792 disp=lang_get_string(1,(*i).lang,57)+eol; 04793 else 04794 disp=lang_get_string(1,(*i).lang,58)+eol; 04795 int ec=0; 04796 dcc_send_msg((*i).socket,disp,ec); 04797 if(got) 04798 (*i).user_channel.on_decreator=p; 04799 else { 04800 (*i).new_user--; 04801 return; 04802 } 04803 (*i).new_user++; 04804 } 04805 } 04806 // on_join 04807 if((*i).new_user==34) { 04808 string disp; 04809 int ec=0; 04810 04811 disp=lang_get_string(1,(*i).lang,67)+eol; // !!! 04812 dcc_send_msg((*i).socket,disp,ec); 04813 04814 vector<string>::iterator i3; 04815 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) { 04816 if(!(*i3).compare("*")) 04817 continue; 04818 disp=*i3+eol; 04819 dcc_send_msg((*i).socket,disp,ec); 04820 } 04821 04822 disp=(string)"----------------"+eol; 04823 dcc_send_msg((*i).socket,disp,ec); 04824 04825 disp=lang_get_string(1,(*i).lang,84)+eol; // !!! 04826 dcc_send_msg((*i).socket,disp,ec); 04827 04828 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol; 04829 dcc_send_msg((*i).socket,disp,ec); 04830 04831 disp=lang_get_string(1,(*i).lang,56)+eol; 04832 dcc_send_msg((*i).socket,disp,ec); 04833 04834 (*i).new_user++; 04835 } 04836 if((*i).new_user==35) { 04837 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_join)) { 04838 int ec=0; 04839 string disp=lang_get_string(1,(*i).lang,592)+eol; 04840 dcc_send_msg((*i).socket,disp,ec); 04841 (*i).new_user++; 04842 return; 04843 } 04844 04845 string p=dcc_get_line((*i).in_buff); 04846 if(!p.compare("")) 04847 return; 04848 vector<string>::iterator i1; 04849 bool got=false; 04850 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++) 04851 if(!(*i1).compare(p)) 04852 got=true; 04853 if(!p.compare(".")) { 04854 got=true; 04855 string disp=lang_get_string(1,(*i).lang,57)+eol; 04856 int ec=0; 04857 dcc_send_msg((*i).socket,disp,ec); 04858 (*i).new_user++; 04859 } else { 04860 string disp; 04861 if(got) 04862 disp=lang_get_string(1,(*i).lang,57)+eol; 04863 else 04864 disp=lang_get_string(1,(*i).lang,58)+eol; 04865 int ec=0; 04866 dcc_send_msg((*i).socket,disp,ec); 04867 if(got) 04868 (*i).user_channel.on_join=p; 04869 else { 04870 (*i).new_user--; 04871 return; 04872 } 04873 (*i).new_user++; 04874 } 04875 } 04876 // on_banned 04877 if((*i).new_user==36) { 04878 string disp; 04879 int ec=0; 04880 04881 disp=lang_get_string(1,(*i).lang,68)+eol; // !!! 04882 dcc_send_msg((*i).socket,disp,ec); 04883 04884 vector<string>::iterator i3; 04885 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) { 04886 if(!(*i3).compare("*")) 04887 continue; 04888 disp=*i3+eol; 04889 dcc_send_msg((*i).socket,disp,ec); 04890 } 04891 04892 disp=(string)"----------------"+eol; 04893 dcc_send_msg((*i).socket,disp,ec); 04894 04895 disp=lang_get_string(1,(*i).lang,85)+eol; // !!! 04896 dcc_send_msg((*i).socket,disp,ec); 04897 04898 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol; 04899 dcc_send_msg((*i).socket,disp,ec); 04900 04901 disp=lang_get_string(1,(*i).lang,56)+eol; 04902 dcc_send_msg((*i).socket,disp,ec); 04903 04904 (*i).new_user++; 04905 } 04906 if((*i).new_user==37) { 04907 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_banned)) { 04908 int ec=0; 04909 string disp=lang_get_string(1,(*i).lang,592)+eol; 04910 dcc_send_msg((*i).socket,disp,ec); 04911 (*i).new_user++; 04912 return; 04913 } 04914 04915 string p=dcc_get_line((*i).in_buff); 04916 if(!p.compare("")) 04917 return; 04918 vector<string>::iterator i1; 04919 bool got=false; 04920 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++) 04921 if(!(*i1).compare(p)) 04922 got=true; 04923 if(!p.compare(".")) { 04924 got=true; 04925 string disp=lang_get_string(1,(*i).lang,57)+eol; 04926 int ec=0; 04927 dcc_send_msg((*i).socket,disp,ec); 04928 (*i).new_user=40; 04929 } else { 04930 string disp; 04931 if(got) 04932 disp=lang_get_string(1,(*i).lang,57)+eol; 04933 else 04934 disp=lang_get_string(1,(*i).lang,58)+eol; 04935 int ec=0; 04936 dcc_send_msg((*i).socket,disp,ec); 04937 if(got) 04938 (*i).user_channel.on_banned=p; 04939 else { 04940 (*i).new_user--; 04941 return; 04942 } 04943 (*i).new_user=40; 04944 } 04945 } 04946 04947 if((*i).new_user==38) { 04948 vector<s_channel>::iterator i2; 04949 for(i2=(*i).user_channels.begin(); i2!=(*i).user_channels.end(); i2++) 04950 if(!(*i2).channel_name.compare((*i).user_channel.channel_name)) { 04951 *i2=(*i).user_channel; 04952 (*i2).configured=true; 04953 } 04954 04955 if((*i).num_not_configured_channels>0) { 04956 (*i).new_user=15; 04957 } else { 04958 string disp=lang_get_string(1,(*i).lang,69)+eol; 04959 int ec=0; 04960 dcc_send_msg((*i).socket,disp,ec); 04961 (*i).new_user++; 04962 } 04963 } 04964 if((*i).new_user==39) { 04965 string p=dcc_get_line((*i).in_buff); 04966 if(!p.compare("")) 04967 return; 04968 if(p.compare("y") && p.compare("n") && p.compare("Y") && p.compare("N") && p.compare("t") && p.compare("T")) { 04969 string disp=lang_get_string(1,(*i).lang,69)+eol; 04970 int ec=0; 04971 dcc_send_msg((*i).socket,disp,ec); 04972 } else { 04973 if(!p.compare("n") || !p.compare("N")) { 04974 string disp=lang_get_string(1,(*i).lang,70)+eol; 04975 int ec=0; 04976 dcc_send_msg((*i).socket,disp,ec); 04977 (*i).new_user=0; 04978 } else { 04979 (*i).new_user=0; 04980 // commit !!! 04981 if(logic_partyline_user_exists((*i).user_name)) { 04982 string disp=lang_get_string(1,(*i).lang,72)+eol; 04983 int ec=0; 04984 dcc_send_msg((*i).socket,disp,ec); 04985 } else { 04986 s_user u; 04987 04988 u.name=(*i).user_name; 04989 04990 u.host_unknown=false; 04991 u.host_bot=false; 04992 04993 u.is_template=!p.compare("t") || !p.compare("T"); 04994 04995 vector<string>::iterator i1; 04996 for(i1=(*i).user_member_of.begin(); i1!=(*i).user_member_of.end(); i1++) { 04997 s_group g; 04998 g.name=*i1; 04999 u.groups.push_back(g); 05000 } 05001 for(i1=(*i).user_hosts.begin(); i1!=(*i).user_hosts.end(); i1++) 05002 u.hostmask.push_back(*i1); 05003 vector<s_dcc_host>::iterator i2; 05004 for(i2=(*i).user_dcc_hosts.begin(); i2!=(*i).user_dcc_hosts.end(); i2++) 05005 u.dcc_hosts.push_back(*i2); 05006 for(i1=(*i).user_fullnames.begin(); i1!=(*i).user_fullnames.end(); i1++) 05007 u.fullname.push_back(*i1); 05008 05009 map<string,string>::iterator i5; 05010 for(i5=(*i).user_meta.begin(); i5!=(*i).user_meta.end(); i5++) 05011 u.meta.insert(*i5); 05012 05013 u.access_to_partyline=(*i).user_access_to_partyline; 05014 u.access_grant_partyline=(*i).user_access_grant_partyline; 05015 u.access_to_backup=(*i).user_access_to_backup; 05016 u.access_to_rehash=(*i).user_access_to_rehash; 05017 u.access_grant_backup=(*i).user_access_grant_backup; 05018 u.access_grant_rehash=(*i).user_access_grant_rehash; 05019 u.access_to_plususer=(*i).user_access_to_plususer; 05020 u.access_grant_plususer=(*i).user_access_grant_plususer; 05021 05022 u.access_to_plusproc=(*i).user_access_to_plusproc; 05023 u.access_grant_plusproc=(*i).user_access_grant_plusproc; 05024 05025 u.access_to_replication=(*i).user_access_to_replication; 05026 u.access_grant_replication=(*i).user_access_grant_replication; 05027 05028 u.access_to_restart=(*i).user_access_to_restart; 05029 u.access_grant_restart=(*i).user_access_grant_restart; 05030 u.access_to_die=(*i).user_access_to_die; 05031 u.access_grant_die=(*i).user_access_grant_die; 05032 05033 u.access_to_filesystem=(*i).user_access_to_filesystem; 05034 u.access_grant_filesystem=(*i).user_access_grant_filesystem; 05035 05036 u.access_to_upgrade=(*i).user_access_to_upgrade; 05037 u.access_grant_upgrade=(*i).user_access_grant_upgrade; 05038 05039 u.access_to_apply=(*i).user_access_to_apply; 05040 u.access_grant_apply=(*i).user_access_grant_apply; 05041 05042 u.access_to_can_send_all_users=(*i).user_access_to_can_send_all_users; 05043 u.access_grant_can_send_all_users=(*i).user_access_grant_can_send_all_users; 05044 05045 u.access_to_can_send_unknown_users=(*i).user_access_to_can_send_unknown_users; 05046 u.access_grant_can_send_unknown_users=(*i).user_access_grant_can_send_unknown_users; 05047 05048 u.access_to_private=(*i).user_access_to_private; 05049 u.access_grant_private=(*i).user_access_grant_private; 05050 05051 for(i1=(*i).user_access_to_groups.begin(); i1!=(*i).user_access_to_groups.end(); i1++) 05052 u.access_to_group.push_back(*i1); 05053 for(i1=(*i).user_access_grant_groups.begin(); i1!=(*i).user_access_grant_groups.end(); i1++) 05054 u.access_grant_group.push_back(*i1); 05055 for(i1=(*i).user_access_to_proc_groups.begin(); i1!=(*i).user_access_to_proc_groups.end(); i1++) 05056 u.access_to_proc.push_back(*i1); 05057 for(i1=(*i).user_access_grant_proc_groups.begin(); i1!=(*i).user_access_grant_proc_groups.end(); i1++) 05058 u.access_grant_procedure.push_back(*i1); 05059 for(i1=(*i).user_access_usage_proc_groups.begin(); i1!=(*i).user_access_usage_proc_groups.end(); i1++) 05060 u.access_usage_procedure.push_back(*i1); 05061 for(i1=(*i).user_access_to_channel.begin(); i1!=(*i).user_access_to_channel.end(); i1++) 05062 u.access_to_channel.push_back(*i1); 05063 for(i1=(*i).user_access_grant_channel.begin(); i1!=(*i).user_access_grant_channel.end(); i1++) 05064 u.access_grant_channel.push_back(*i1); 05065 vector<s_channel> chs; 05066 vector<s_channel>::iterator i3; 05067 for(i3=(*i).user_channels.begin(); i3!=(*i).user_channels.end(); i3++) { 05068 if(!(*i3).configured) 05069 continue; 05070 chs.push_back(*i3); 05071 } 05072 05073 u.partyline_msg_flood=(*i).user_partyline_msg_flood; 05074 05075 time(&u.last_changed); 05076 logic_partyline_add_user(u,chs); 05077 string disp=lang_get_string(1,(*i).lang,73)+eol; 05078 int ec=0; 05079 dcc_send_msg((*i).socket,disp,ec); 05080 } 05081 } 05082 } 05083 } 05084 // on_flood 05085 if((*i).new_user==40) { 05086 string disp; 05087 int ec=0; 05088 05089 disp=lang_get_string(1,(*i).lang,146)+eol; // !!! 05090 dcc_send_msg((*i).socket,disp,ec); 05091 05092 vector<string>::iterator i3; 05093 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) { 05094 if(!(*i3).compare("*")) 05095 continue; 05096 disp=*i3+eol; 05097 dcc_send_msg((*i).socket,disp,ec); 05098 } 05099 05100 disp=(string)"----------------"+eol; 05101 dcc_send_msg((*i).socket,disp,ec); 05102 05103 disp=lang_get_string(1,(*i).lang,147)+eol; // !!! 05104 dcc_send_msg((*i).socket,disp,ec); 05105 05106 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol; 05107 dcc_send_msg((*i).socket,disp,ec); 05108 05109 disp=lang_get_string(1,(*i).lang,56)+eol; 05110 dcc_send_msg((*i).socket,disp,ec); 05111 05112 (*i).new_user++; 05113 } 05114 if((*i).new_user==41) { 05115 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_flood)) { 05116 int ec=0; 05117 string disp=lang_get_string(1,(*i).lang,592)+eol; 05118 dcc_send_msg((*i).socket,disp,ec); 05119 (*i).new_user++; 05120 return; 05121 } 05122 05123 string p=dcc_get_line((*i).in_buff); 05124 if(!p.compare("")) 05125 return; 05126 vector<string>::iterator i1; 05127 bool got=false; 05128 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++) 05129 if(!(*i1).compare(p)) 05130 got=true; 05131 if(!p.compare(".")) { 05132 got=true; 05133 string disp=lang_get_string(1,(*i).lang,57)+eol; 05134 int ec=0; 05135 dcc_send_msg((*i).socket,disp,ec); 05136 (*i).new_user++; 05137 } else { 05138 string disp; 05139 if(got) 05140 disp=lang_get_string(1,(*i).lang,57)+eol; 05141 else 05142 disp=lang_get_string(1,(*i).lang,58)+eol; 05143 int ec=0; 05144 dcc_send_msg((*i).socket,disp,ec); 05145 if(got) 05146 (*i).user_channel.on_flood=p; 05147 else { 05148 (*i).new_user--; 05149 return; 05150 } 05151 (*i).new_user++; 05152 } 05153 } 05154 // on_privmsg 05155 if((*i).new_user==42) { 05156 string disp; 05157 int ec=0; 05158 05159 disp=lang_get_string(1,(*i).lang,164)+eol; // !!! 05160 dcc_send_msg((*i).socket,disp,ec); 05161 05162 vector<string>::iterator i3; 05163 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) { 05164 if(!(*i3).compare("*")) 05165 continue; 05166 disp=*i3+eol; 05167 dcc_send_msg((*i).socket,disp,ec); 05168 } 05169 05170 disp=(string)"----------------"+eol; 05171 dcc_send_msg((*i).socket,disp,ec); 05172 05173 disp=lang_get_string(1,(*i).lang,165)+eol; // !!! 05174 dcc_send_msg((*i).socket,disp,ec); 05175 05176 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol; 05177 dcc_send_msg((*i).socket,disp,ec); 05178 05179 disp=lang_get_string(1,(*i).lang,56)+eol; 05180 dcc_send_msg((*i).socket,disp,ec); 05181 05182 (*i).new_user++; 05183 } 05184 if((*i).new_user==43) { 05185 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_privmsg)) { 05186 int ec=0; 05187 string disp=lang_get_string(1,(*i).lang,592)+eol; 05188 dcc_send_msg((*i).socket,disp,ec); 05189 (*i).new_user=500; 05190 return; 05191 } 05192 05193 string p=dcc_get_line((*i).in_buff); 05194 if(!p.compare("")) 05195 return; 05196 vector<string>::iterator i1; 05197 bool got=false; 05198 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++) 05199 if(!(*i1).compare(p)) 05200 got=true; 05201 if(!p.compare(".")) { 05202 got=true; 05203 string disp=lang_get_string(1,(*i).lang,57)+eol; 05204 int ec=0; 05205 dcc_send_msg((*i).socket,disp,ec); 05206 (*i).new_user=500; 05207 } else { 05208 string disp; 05209 if(got) 05210 disp=lang_get_string(1,(*i).lang,57)+eol; 05211 else 05212 disp=lang_get_string(1,(*i).lang,58)+eol; 05213 int ec=0; 05214 dcc_send_msg((*i).socket,disp,ec); 05215 if(got) 05216 (*i).user_channel.on_privmsg=p; 05217 else { 05218 (*i).new_user--; 05219 return; 05220 } 05221 (*i).new_user=500; 05222 } 05223 } 05224 05225 // msg_flood 05226 if((*i).new_user==44) { 05227 string disp; 05228 int ec=0; 05229 05230 disp=lang_get_string(1,(*i).lang,148)+eol; // !!! 05231 dcc_send_msg((*i).socket,disp,ec); 05232 05233 (*i).new_user++; 05234 } 05235 if((*i).new_user==45) { 05236 string p=dcc_get_line((*i).in_buff); 05237 if(!p.compare("")) 05238 return; 05239 if(!p.compare(".")) { 05240 (*i).new_user--; 05241 } else { 05242 if(!p.compare("0")) 05243 p="0 0"; 05244 string lines, seconds; 05245 int pos=0; 05246 for(unsigned int i1=0; i1<p.length(); i1++) { 05247 if(p[i1]==0x20) { 05248 pos++; 05249 continue; 05250 } 05251 if(pos==0) 05252 lines+=p[i1]; 05253 if(pos==1) 05254 seconds+=p[i1]; 05255 } 05256 string disp; 05257 (*i).user_channel.msg_flood.lines=atol(lines.c_str()); 05258 (*i).user_channel.msg_flood.seconds=atol(seconds.c_str()); 05259 (*i).new_user++; 05260 } 05261 } 05262 // notice_flood 05263 if((*i).new_user==46) { 05264 string disp; 05265 int ec=0; 05266 05267 disp=lang_get_string(1,(*i).lang,149)+eol; // !!! 05268 dcc_send_msg((*i).socket,disp,ec); 05269 05270 (*i).new_user++; 05271 } 05272 if((*i).new_user==47) { 05273 string p=dcc_get_line((*i).in_buff); 05274 if(!p.compare("")) 05275 return; 05276 if(!p.compare(".")) { 05277 (*i).new_user--; 05278 } else { 05279 if(!p.compare("0")) 05280 p="0 0"; 05281 string lines, seconds; 05282 int pos=0; 05283 for(unsigned int i1=0; i1<p.length(); i1++) { 05284 if(p[i1]==0x20) { 05285 pos++; 05286 continue; 05287 } 05288 if(pos==0) 05289 lines+=p[i1]; 05290 if(pos==1) 05291 seconds+=p[i1]; 05292 } 05293 string disp; 05294 (*i).user_channel.notice_flood.lines=atol(lines.c_str()); 05295 (*i).user_channel.notice_flood.seconds=atol(seconds.c_str()); 05296 (*i).new_user++; 05297 } 05298 } 05299 // repeat_flood 05300 if((*i).new_user==48) { 05301 string disp; 05302 int ec=0; 05303 05304 disp=lang_get_string(1,(*i).lang,150)+eol; // !!! 05305 dcc_send_msg((*i).socket,disp,ec); 05306 05307 (*i).new_user++; 05308 } 05309 if((*i).new_user==49) { 05310 string p=dcc_get_line((*i).in_buff); 05311 if(!p.compare("")) 05312 return; 05313 if(!p.compare(".")) { 05314 (*i).new_user--; 05315 } else { 05316 if(!p.compare("0")) 05317 p="0 0"; 05318 string lines, seconds; 05319 int pos=0; 05320 for(unsigned int i1=0; i1<p.length(); i1++) { 05321 if(p[i1]==0x20) { 05322 pos++; 05323 continue; 05324 } 05325 if(pos==0) 05326 lines+=p[i1]; 05327 if(pos==1) 05328 seconds+=p[i1]; 05329 } 05330 string disp; 05331 (*i).user_channel.repeat_flood.lines=atol(lines.c_str()); 05332 (*i).user_channel.repeat_flood.seconds=atol(seconds.c_str()); 05333 (*i).new_user++; 05334 } 05335 } 05336 // nick_flood 05337 if((*i).new_user==50) { 05338 string disp; 05339 int ec=0; 05340 05341 disp=lang_get_string(1,(*i).lang,151)+eol; // !!! 05342 dcc_send_msg((*i).socket,disp,ec); 05343 05344 (*i).new_user++; 05345 } 05346 if((*i).new_user==51) { 05347 string p=dcc_get_line((*i).in_buff); 05348 if(!p.compare("")) 05349 return; 05350 if(!p.compare(".")) { 05351 (*i).new_user--; 05352 } else { 05353 if(!p.compare("0")) 05354 p="0 0"; 05355 string lines, seconds; 05356 int pos=0; 05357 for(unsigned int i1=0; i1<p.length(); i1++) { 05358 if(p[i1]==0x20) { 05359 pos++; 05360 continue; 05361 } 05362 if(pos==0) 05363 lines+=p[i1]; 05364 if(pos==1) 05365 seconds+=p[i1]; 05366 } 05367 string disp; 05368 (*i).user_channel.nick_flood.lines=atol(lines.c_str()); 05369 (*i).user_channel.nick_flood.seconds=atol(seconds.c_str()); 05370 (*i).new_user++; 05371 } 05372 } 05373 // join_flood 05374 if((*i).new_user==52) { 05375 string disp; 05376 int ec=0; 05377 05378 disp=lang_get_string(1,(*i).lang,152)+eol; // !!! 05379 dcc_send_msg((*i).socket,disp,ec); 05380 05381 (*i).new_user++; 05382 } 05383 if((*i).new_user==53) { 05384 string p=dcc_get_line((*i).in_buff); 05385 if(!p.compare("")) 05386 return; 05387 if(!p.compare(".")) { 05388 (*i).new_user--; 05389 } else { 05390 if(!p.compare("0")) 05391 p="0 0"; 05392 string lines, seconds; 05393 int pos=0; 05394 for(unsigned int i1=0; i1<p.length(); i1++) { 05395 if(p[i1]==0x20) { 05396 pos++; 05397 continue; 05398 } 05399 if(pos==0) 05400 lines+=p[i1]; 05401 if(pos==1) 05402 seconds+=p[i1]; 05403 } 05404 string disp; 05405 (*i).user_channel.join_flood.lines=atol(lines.c_str()); 05406 (*i).user_channel.join_flood.seconds=atol(seconds.c_str()); 05407 (*i).new_user++; 05408 } 05409 } 05410 // mode_flood 05411 if((*i).new_user==54) { 05412 string disp; 05413 int ec=0; 05414 05415 disp=lang_get_string(1,(*i).lang,158)+eol; // !!! 05416 dcc_send_msg((*i).socket,disp,ec); 05417 05418 (*i).new_user++; 05419 } 05420 if((*i).new_user==55) { 05421 string p=dcc_get_line((*i).in_buff); 05422 if(!p.compare("")) 05423 return; 05424 if(!p.compare(".")) { 05425 (*i).new_user--; 05426 } else { 05427 if(!p.compare("0")) 05428 p="0 0"; 05429 string lines, seconds; 05430 int pos=0; 05431 for(unsigned int i1=0; i1<p.length(); i1++) { 05432 if(p[i1]==0x20) { 05433 pos++; 05434 continue; 05435 } 05436 if(pos==0) 05437 lines+=p[i1]; 05438 if(pos==1) 05439 seconds+=p[i1]; 05440 } 05441 (*i).user_channel.mode_flood.lines=atol(lines.c_str()); 05442 (*i).user_channel.mode_flood.seconds=atol(seconds.c_str()); 05443 (*i).new_user++; 05444 } 05445 } 05446 // ctcp_flood 05447 if((*i).new_user==56) { 05448 string disp; 05449 int ec=0; 05450 05451 disp=lang_get_string(1,(*i).lang,384)+eol; // !!! 05452 dcc_send_msg((*i).socket,disp,ec); 05453 05454 (*i).new_user++; 05455 } 05456 if((*i).new_user==57) { 05457 string p=dcc_get_line((*i).in_buff); 05458 if(!p.compare("")) 05459 return; 05460 if(!p.compare(".")) { 05461 (*i).new_user--; 05462 } else { 05463 if(!p.compare("0")) 05464 p="0 0"; 05465 string lines, seconds; 05466 int pos=0; 05467 for(unsigned int i1=0; i1<p.length(); i1++) { 05468 if(p[i1]==0x20) { 05469 pos++; 05470 continue; 05471 } 05472 if(pos==0) 05473 lines+=p[i1]; 05474 if(pos==1) 05475 seconds+=p[i1]; 05476 } 05477 (*i).user_channel.ctcp_flood.lines=atol(lines.c_str()); 05478 (*i).user_channel.ctcp_flood.seconds=atol(seconds.c_str()); 05479 (*i).new_user++; 05480 } 05481 } 05482 // can_send_unknown 05483 if((*i).new_user==58) { 05484 string disp; 05485 int ec=0; 05486 05487 disp=lang_get_string(1,(*i).lang,475)+eol; // !!! 05488 dcc_send_msg((*i).socket,disp,ec); 05489 05490 (*i).new_user++; 05491 } 05492 if((*i).new_user==59) { 05493 string p=dcc_get_line((*i).in_buff); 05494 if(p.empty()) 05495 return; 05496 05497 if(p.compare("y") && p.compare("n") && p.compare("Y") && p.compare("N")) { 05498 string disp=lang_get_string(1,(*i).lang,475)+eol; 05499 int ec=0; 05500 dcc_send_msg((*i).socket,disp,ec); 05501 } else { 05502 if(!p.compare("n") || !p.compare("N")) { 05503 (*i).user_channel.can_send_unknown_users=false; 05504 } else { 05505 (*i).user_channel.can_send_unknown_users=true; 05506 } 05507 (*i).new_user=300; 05508 } 05509 return; 05510 } 05511 05512 if((*i).new_user==100) { 05513 if(!(*i).access_grant_backup) { 05514 (*i).new_user+=2; 05515 return; 05516 } 05517 string disp; 05518 int ec=0; 05519 05520 disp=lang_get_string(1,(*i).lang,168)+eol; // !!! 05521 dcc_send_msg((*i).socket,disp,ec); 05522 05523 (*i).new_user++; 05524 } 05525 if((*i).new_user==101) { 05526 string p=dcc_get_line((*i).in_buff); 05527 if(!p.compare("")) 05528 return; 05529 bool got=false; 05530 if(!p.compare("y") || !p.compare("Y")) { 05531 got=true; 05532 (*i).user_access_to_backup=true; 05533 } 05534 if(!p.compare("n") || !p.compare("N")) { 05535 got=true; 05536 (*i).user_access_to_backup=false; 05537 } 05538 got?(*i).new_user++:(*i).new_user--; 05539 } 05540 if((*i).new_user==102) { 05541 if(!(*i).access_grant_rehash) { 05542 (*i).new_user+=2; 05543 return; 05544 } 05545 string disp; 05546 int ec=0; 05547 05548 disp=lang_get_string(1,(*i).lang,169)+eol; // !!! 05549 dcc_send_msg((*i).socket,disp,ec); 05550 05551 (*i).new_user++; 05552 } 05553 if((*i).new_user==103) { 05554 string p=dcc_get_line((*i).in_buff); 05555 if(!p.compare("")) 05556 return; 05557 bool got=false; 05558 if(!p.compare("y") || !p.compare("Y")) { 05559 got=true; 05560 (*i).user_access_to_rehash=true; 05561 } 05562 if(!p.compare("n") || !p.compare("N")) { 05563 got=true; 05564 (*i).user_access_to_rehash=false; 05565 } 05566 got?(*i).new_user++:(*i).new_user--; 05567 } 05568 if((*i).new_user==104) { 05569 if(!(*i).access_grant_backup) { 05570 (*i).new_user+=2; 05571 return; 05572 } 05573 string disp; 05574 int ec=0; 05575 05576 disp=lang_get_string(1,(*i).lang,170)+eol; // !!! 05577 dcc_send_msg((*i).socket,disp,ec); 05578 05579 (*i).new_user++; 05580 } 05581 if((*i).new_user==105) { 05582 string p=dcc_get_line((*i).in_buff); 05583 if(!p.compare("")) 05584 return; 05585 bool got=false; 05586 if(!p.compare("y") || !p.compare("Y")) { 05587 got=true; 05588 (*i).user_access_grant_backup=true; 05589 } 05590 if(!p.compare("n") || !p.compare("N")) { 05591 got=true; 05592 (*i).user_access_grant_backup=false; 05593 } 05594 got?(*i).new_user++:(*i).new_user--; 05595 } 05596 if((*i).new_user==106) { 05597 if(!(*i).access_grant_rehash) { 05598 (*i).new_user+=2; 05599 return; 05600 } 05601 string disp; 05602 int ec=0; 05603 05604 disp=lang_get_string(1,(*i).lang,171)+eol; // !!! 05605 dcc_send_msg((*i).socket,disp,ec); 05606 05607 (*i).new_user++; 05608 } 05609 if((*i).new_user==107) { 05610 string p=dcc_get_line((*i).in_buff); 05611 if(!p.compare("")) 05612 return; 05613 bool got=false; 05614 if(!p.compare("y") || !p.compare("Y")) { 05615 got=true; 05616 (*i).user_access_grant_rehash=true; 05617 } 05618 if(!p.compare("n") || !p.compare("N")) { 05619 got=true; 05620 (*i).user_access_grant_rehash=false; 05621 } 05622 got?(*i).new_user++:(*i).new_user--; 05623 } 05624 if((*i).new_user==108) { 05625 if(!(*i).access_grant_plususer) { 05626 (*i).new_user+=2; 05627 return; 05628 } 05629 string disp; 05630 int ec=0; 05631 05632 disp=lang_get_string(1,(*i).lang,189)+eol; // !!! 05633 dcc_send_msg((*i).socket,disp,ec); 05634 05635 (*i).new_user++; 05636 } 05637 if((*i).new_user==109) { 05638 string p=dcc_get_line((*i).in_buff); 05639 if(!p.compare("")) 05640 return; 05641 bool got=false; 05642 if(!p.compare("y") || !p.compare("Y")) { 05643 got=true; 05644 (*i).user_access_to_plususer=true; 05645 } 05646 if(!p.compare("n") || !p.compare("N")) { 05647 got=true; 05648 (*i).user_access_to_plususer=false; 05649 } 05650 got?(*i).new_user++:(*i).new_user--; 05651 } 05652 if((*i).new_user==110) { 05653 if(!(*i).access_grant_plususer) { 05654 (*i).new_user+=2; 05655 return; 05656 } 05657 string disp; 05658 int ec=0; 05659 05660 disp=lang_get_string(1,(*i).lang,190)+eol; // !!! 05661 dcc_send_msg((*i).socket,disp,ec); 05662 05663 (*i).new_user++; 05664 } 05665 if((*i).new_user==111) { 05666 string p=dcc_get_line((*i).in_buff); 05667 if(!p.compare("")) 05668 return; 05669 bool got=false; 05670 if(!p.compare("y") || !p.compare("Y")) { 05671 got=true; 05672 (*i).user_access_grant_plususer=true; 05673 } 05674 if(!p.compare("n") || !p.compare("N")) { 05675 got=true; 05676 (*i).user_access_grant_plususer=false; 05677 } 05678 got?(*i).new_user++:(*i).new_user--; 05679 } 05680 if((*i).new_user==112) { 05681 if(!(*i).access_grant_plusproc) { 05682 (*i).new_user+=2; 05683 return; 05684 } 05685 string disp; 05686 int ec=0; 05687 05688 disp=lang_get_string(1,(*i).lang,197)+eol; // !!! 05689 dcc_send_msg((*i).socket,disp,ec); 05690 05691 (*i).new_user++; 05692 } 05693 if((*i).new_user==113) { 05694 string p=dcc_get_line((*i).in_buff); 05695 if(!p.compare("")) 05696 return; 05697 bool got=false; 05698 if(!p.compare("y") || !p.compare("Y")) { 05699 got=true; 05700 (*i).user_access_to_plusproc=true; 05701 } 05702 if(!p.compare("n") || !p.compare("N")) { 05703 got=true; 05704 (*i).user_access_to_plusproc=false; 05705 } 05706 got?(*i).new_user++:(*i).new_user--; 05707 } 05708 if((*i).new_user==114) { 05709 if(!(*i).access_grant_plusproc) { 05710 (*i).new_user+=2; 05711 return; 05712 } 05713 string disp; 05714 int ec=0; 05715 05716 disp=lang_get_string(1,(*i).lang,198)+eol; // !!! 05717 dcc_send_msg((*i).socket,disp,ec); 05718 05719 (*i).new_user++; 05720 } 05721 if((*i).new_user==115) { 05722 string p=dcc_get_line((*i).in_buff); 05723 if(!p.compare("")) 05724 return; 05725 bool got=false; 05726 if(!p.compare("y") || !p.compare("Y")) { 05727 got=true; 05728 (*i).user_access_grant_plusproc=true; 05729 } 05730 if(!p.compare("n") || !p.compare("N")) { 05731 got=true; 05732 (*i).user_access_grant_plusproc=false; 05733 } 05734 got?(*i).new_user++:(*i).new_user--; 05735 } 05736 if((*i).new_user==116) { 05737 if(!(*i).access_grant_replication) { 05738 (*i).new_user+=2; 05739 return; 05740 } 05741 string disp; 05742 int ec=0; 05743 05744 disp=lang_get_string(1,(*i).lang,210)+eol; // !!! 05745 dcc_send_msg((*i).socket,disp,ec); 05746 05747 (*i).new_user++; 05748 } 05749 if((*i).new_user==117) { 05750 string p=dcc_get_line((*i).in_buff); 05751 if(!p.compare("")) 05752 return; 05753 bool got=false; 05754 if(!p.compare("y") || !p.compare("Y")) { 05755 got=true; 05756 (*i).user_access_to_replication=true; 05757 } 05758 if(!p.compare("n") || !p.compare("N")) { 05759 got=true; 05760 (*i).user_access_to_replication=false; 05761 } 05762 got?(*i).new_user++:(*i).new_user--; 05763 } 05764 if((*i).new_user==118) { 05765 if(!(*i).access_grant_replication) { 05766 (*i).new_user+=2; 05767 return; 05768 } 05769 string disp; 05770 int ec=0; 05771 05772 disp=lang_get_string(1,(*i).lang,600)+eol; // !!! 05773 dcc_send_msg((*i).socket,disp,ec); 05774 05775 (*i).new_user++; 05776 } 05777 if((*i).new_user==119) { 05778 string p=dcc_get_line((*i).in_buff); 05779 if(!p.compare("")) 05780 return; 05781 bool got=false; 05782 if(!p.compare("y") || !p.compare("Y")) { 05783 got=true; 05784 (*i).user_access_grant_replication=true; 05785 } 05786 if(!p.compare("n") || !p.compare("N")) { 05787 got=true; 05788 (*i).user_access_grant_replication=false; 05789 } 05790 got?(*i).new_user++:(*i).new_user--; 05791 } 05792 if((*i).new_user==120) { 05793 if(!(*i).access_grant_restart) { 05794 (*i).new_user+=2; 05795 return; 05796 } 05797 string disp; 05798 int ec=0; 05799 05800 disp=lang_get_string(1,(*i).lang,260)+eol; // !!! 05801 dcc_send_msg((*i).socket,disp,ec); 05802 05803 (*i).new_user++; 05804 } 05805 if((*i).new_user==121) { 05806 string p=dcc_get_line((*i).in_buff); 05807 if(!p.compare("")) 05808 return; 05809 bool got=false; 05810 if(!p.compare("y") || !p.compare("Y")) { 05811 got=true; 05812 (*i).user_access_to_restart=true; 05813 } 05814 if(!p.compare("n") || !p.compare("N")) { 05815 got=true; 05816 (*i).user_access_to_restart=false; 05817 } 05818 got?(*i).new_user++:(*i).new_user--; 05819 } 05820 if((*i).new_user==122) { 05821 if(!(*i).access_grant_restart) { 05822 (*i).new_user+=2; 05823 return; 05824 } 05825 string disp; 05826 int ec=0; 05827 05828 disp=lang_get_string(1,(*i).lang,261)+eol; // !!! 05829 dcc_send_msg((*i).socket,disp,ec); 05830 05831 (*i).new_user++; 05832 } 05833 if((*i).new_user==123) { 05834 string p=dcc_get_line((*i).in_buff); 05835 if(!p.compare("")) 05836 return; 05837 bool got=false; 05838 if(!p.compare("y") || !p.compare("Y")) { 05839 got=true; 05840 (*i).user_access_grant_restart=true; 05841 } 05842 if(!p.compare("n") || !p.compare("N")) { 05843 got=true; 05844 (*i).user_access_grant_restart=false; 05845 } 05846 got?(*i).new_user++:(*i).new_user--; 05847 } 05848 05849 if((*i).new_user==124) { 05850 if(!(*i).access_grant_die) { 05851 (*i).new_user+=2; 05852 return; 05853 } 05854 string disp; 05855 int ec=0; 05856 05857 disp=lang_get_string(1,(*i).lang,267)+eol; // !!! 05858 dcc_send_msg((*i).socket,disp,ec); 05859 05860 (*i).new_user++; 05861 } 05862 if((*i).new_user==125) { 05863 string p=dcc_get_line((*i).in_buff); 05864 if(!p.compare("")) 05865 return; 05866 bool got=false; 05867 if(!p.compare("y") || !p.compare("Y")) { 05868 got=true; 05869 (*i).user_access_to_die=true; 05870 } 05871 if(!p.compare("n") || !p.compare("N")) { 05872 got=true; 05873 (*i).user_access_to_die=false; 05874 } 05875 got?(*i).new_user++:(*i).new_user--; 05876 } 05877 if((*i).new_user==126) { 05878 if(!(*i).access_grant_die) { 05879 (*i).new_user+=2; 05880 return; 05881 } 05882 string disp; 05883 int ec=0; 05884 05885 disp=lang_get_string(1,(*i).lang,268)+eol; // !!! 05886 dcc_send_msg((*i).socket,disp,ec); 05887 05888 (*i).new_user++; 05889 } 05890 if((*i).new_user==127) { 05891 string p=dcc_get_line((*i).in_buff); 05892 if(!p.compare("")) 05893 return; 05894 bool got=false; 05895 if(!p.compare("y") || !p.compare("Y")) { 05896 got=true; 05897 (*i).user_access_grant_die=true; 05898 } 05899 if(!p.compare("n") || !p.compare("N")) { 05900 got=true; 05901 (*i).user_access_grant_die=false; 05902 } 05903 got?(*i).new_user++:(*i).new_user--; 05904 } 05905 05906 if((*i).new_user==128) { 05907 if(!(*i).access_grant_filesystem) { 05908 (*i).new_user+=2; 05909 return; 05910 } 05911 string disp; 05912 int ec=0; 05913 05914 disp=lang_get_string(1,(*i).lang,276)+eol; // !!! 05915 dcc_send_msg((*i).socket,disp,ec); 05916 05917 (*i).new_user++; 05918 } 05919 if((*i).new_user==129) { 05920 string p=dcc_get_line((*i).in_buff); 05921 if(!p.compare("")) 05922 return; 05923 bool got=false; 05924 if(!p.compare("y") || !p.compare("Y")) { 05925 got=true; 05926 (*i).user_access_to_filesystem=true; 05927 } 05928 if(!p.compare("n") || !p.compare("N")) { 05929 got=true; 05930 (*i).user_access_to_filesystem=false; 05931 } 05932 got?(*i).new_user++:(*i).new_user--; 05933 } 05934 if((*i).new_user==130) { 05935 if(!(*i).access_grant_filesystem) { 05936 (*i).new_user+=2; 05937 return; 05938 } 05939 string disp; 05940 int ec=0; 05941 05942 disp=lang_get_string(1,(*i).lang,277)+eol; // !!! 05943 dcc_send_msg((*i).socket,disp,ec); 05944 05945 (*i).new_user++; 05946 } 05947 if((*i).new_user==131) { 05948 string p=dcc_get_line((*i).in_buff); 05949 if(!p.compare("")) 05950 return; 05951 bool got=false; 05952 if(!p.compare("y") || !p.compare("Y")) { 05953 got=true; 05954 (*i).user_access_grant_filesystem=true; 05955 } 05956 if(!p.compare("n") || !p.compare("N")) { 05957 got=true; 05958 (*i).user_access_grant_filesystem=false; 05959 } 05960 got?(*i).new_user++:(*i).new_user--; 05961 } 05962 05963 if((*i).new_user==132) { 05964 (*i).new_user++; 05965 } 05966 05967 if((*i).new_user==133) { 05968 if(!(*i).access_grant_private) { 05969 (*i).new_user+=2; 05970 return; 05971 } 05972 string disp; 05973 int ec=0; 05974 05975 disp=lang_get_string(1,(*i).lang,406)+eol; // !!! 05976 dcc_send_msg((*i).socket,disp,ec); 05977 05978 (*i).new_user++; 05979 } 05980 if((*i).new_user==134) { 05981 string p=dcc_get_line((*i).in_buff); 05982 if(!p.compare("")) 05983 return; 05984 bool got=false; 05985 if(!p.compare("y") || !p.compare("Y")) { 05986 got=true; 05987 (*i).user_access_to_private=true; 05988 } 05989 if(!p.compare("n") || !p.compare("N")) { 05990 got=true; 05991 (*i).user_access_to_private=false; 05992 } 05993 got?(*i).new_user++:(*i).new_user--; 05994 } 05995 05996 if((*i).new_user==135) { 05997 if(!(*i).access_grant_private) { 05998 (*i).new_user+=2; 05999 return; 06000 } 06001 string disp; 06002 int ec=0; 06003 06004 disp=lang_get_string(1,(*i).lang,407)+eol; // !!! 06005 dcc_send_msg((*i).socket,disp,ec); 06006 06007 (*i).new_user++; 06008 } 06009 if((*i).new_user==136) { 06010 string p=dcc_get_line((*i).in_buff); 06011 if(!p.compare("")) 06012 return; 06013 bool got=false; 06014 if(!p.compare("y") || !p.compare("Y")) { 06015 got=true; 06016 (*i).user_access_grant_private=true; 06017 } 06018 if(!p.compare("n") || !p.compare("N")) { 06019 got=true; 06020 (*i).user_access_grant_private=false; 06021 } 06022 got?(*i).new_user++:(*i).new_user--; 06023 } 06024 06025 if((*i).new_user==137) { 06026 if(!(*i).access_grant_upgrade) { 06027 (*i).new_user+=2; 06028 return; 06029 } 06030 string disp; 06031 int ec=0; 06032 06033 disp=lang_get_string(1,(*i).lang,625)+eol; // !!! 06034 dcc_send_msg((*i).socket,disp,ec); 06035 06036 (*i).new_user++; 06037 } 06038 if((*i).new_user==138) { 06039 string p=dcc_get_line((*i).in_buff); 06040 if(!p.compare("")) 06041 return; 06042 bool got=false; 06043 if(!p.compare("y") || !p.compare("Y")) { 06044 got=true; 06045 (*i).user_access_to_upgrade=true; 06046 } 06047 if(!p.compare("n") || !p.compare("N")) { 06048 got=true; 06049 (*i).user_access_to_upgrade=false; 06050 } 06051 got?(*i).new_user++:(*i).new_user--; 06052 } 06053 06054 if((*i).new_user==139) { 06055 if(!(*i).access_grant_upgrade) { 06056 (*i).new_user+=2; 06057 return; 06058 } 06059 string disp; 06060 int ec=0; 06061 06062 disp=lang_get_string(1,(*i).lang,626)+eol; // !!! 06063 dcc_send_msg((*i).socket,disp,ec); 06064 06065 (*i).new_user++; 06066 } 06067 if((*i).new_user==140) { 06068 string p=dcc_get_line((*i).in_buff); 06069 if(!p.compare("")) 06070 return; 06071 bool got=false; 06072 if(!p.compare("y") || !p.compare("Y")) { 06073 got=true; 06074 (*i).user_access_grant_upgrade=true; 06075 } 06076 if(!p.compare("n") || !p.compare("N")) { 06077 got=true; 06078 (*i).user_access_grant_upgrade=false; 06079 } 06080 got?(*i).new_user++:(*i).new_user--; 06081 } 06082 06083 //--- 06084 if((*i).new_user==141) { 06085 if(!(*i).access_grant_apply) { 06086 (*i).new_user+=2; 06087 return; 06088 } 06089 string disp; 06090 int ec=0; 06091 06092 disp=lang_get_string(1,(*i).lang,680)+eol; // !!! 06093 dcc_send_msg((*i).socket,disp,ec); 06094 06095 (*i).new_user++; 06096 } 06097 if((*i).new_user==142) { 06098 string p=dcc_get_line((*i).in_buff); 06099 if(!p.compare("")) 06100 return; 06101 bool got=false; 06102 if(!p.compare("y") || !p.compare("Y")) { 06103 got=true; 06104 (*i).user_access_to_apply=true; 06105 } 06106 if(!p.compare("n") || !p.compare("N")) { 06107 got=true; 06108 (*i).user_access_to_apply=false; 06109 } 06110 got?(*i).new_user++:(*i).new_user--; 06111 } 06112 06113 if((*i).new_user==143) { 06114 if(!(*i).access_grant_apply) { 06115 (*i).new_user+=2; 06116 return; 06117 } 06118 string disp; 06119 int ec=0; 06120 06121 disp=lang_get_string(1,(*i).lang,681)+eol; // !!! 06122 dcc_send_msg((*i).socket,disp,ec); 06123 06124 (*i).new_user++; 06125 } 06126 if((*i).new_user==144) { 06127 string p=dcc_get_line((*i).in_buff); 06128 if(!p.compare("")) 06129 return; 06130 bool got=false; 06131 if(!p.compare("y") || !p.compare("Y")) { 06132 got=true; 06133 (*i).user_access_grant_apply=true; 06134 } 06135 if(!p.compare("n") || !p.compare("N")) { 06136 got=true; 06137 (*i).user_access_grant_apply=false; 06138 } 06139 got?(*i).new_user++:(*i).new_user--; 06140 } 06141 06142 if((*i).new_user==145) { 06143 /*string disp=lang_get_string(1,(*i).lang,44)+eol; 06144 int ec=0; 06145 dcc_send_msg((*i).socket,disp,ec); 06146 vector<string>::iterator i1; 06147 for(i1=(*i).access_to_groups.begin(); i1!=(*i).access_to_groups.end(); i1++) { 06148 disp=*i1+eol; 06149 dcc_send_msg((*i).socket,disp,ec); 06150 } 06151 disp=lang_get_string(1,(*i).lang,45)+eol; 06152 dcc_send_msg((*i).socket,disp,ec);*/ 06153 (*i).new_user++; 06154 return; 06155 } 06156 06157 //--------------- 06158 if((*i).new_user==146) { 06159 if(!(*i).access_grant_can_send_all_users) { 06160 (*i).new_user+=2; 06161 return; 06162 } 06163 string disp; 06164 int ec=0; 06165 06166 disp=lang_get_string(1,(*i).lang,477)+eol; // !!! 06167 dcc_send_msg((*i).socket,disp,ec); 06168 06169 (*i).new_user++; 06170 } 06171 if((*i).new_user==147) { 06172 string p=dcc_get_line((*i).in_buff); 06173 if(!p.compare("")) 06174 return; 06175 bool got=false; 06176 if(!p.compare("y") || !p.compare("Y")) { 06177 got=true; 06178 (*i).user_access_to_can_send_all_users=true; 06179 } 06180 if(!p.compare("n") || !p.compare("N")) { 06181 got=true; 06182 (*i).user_access_to_can_send_all_users=false; 06183 } 06184 got?(*i).new_user++:(*i).new_user--; 06185 } 06186 06187 if((*i).new_user==148) { 06188 if(!(*i).access_grant_can_send_all_users) { 06189 (*i).new_user+=2; 06190 return; 06191 } 06192 string disp; 06193 int ec=0; 06194 06195 disp=lang_get_string(1,(*i).lang,478)+eol; // !!! 06196 dcc_send_msg((*i).socket,disp,ec); 06197 06198 (*i).new_user++; 06199 } 06200 if((*i).new_user==149) { 06201 string p=dcc_get_line((*i).in_buff); 06202 if(!p.compare("")) 06203 return; 06204 bool got=false; 06205 if(!p.compare("y") || !p.compare("Y")) { 06206 got=true; 06207 (*i).user_access_grant_can_send_all_users=true; 06208 } 06209 if(!p.compare("n") || !p.compare("N")) { 06210 got=true; 06211 (*i).user_access_grant_can_send_all_users=false; 06212 } 06213 got?(*i).new_user++:(*i).new_user--; 06214 } 06215 06216 if((*i).new_user==150) { 06217 string disp=lang_get_string(1,(*i).lang,44)+eol; 06218 int ec=0; 06219 dcc_send_msg((*i).socket,disp,ec); 06220 vector<string>::iterator i1; 06221 for(i1=(*i).access_grant_groups.begin(); i1!=(*i).access_grant_groups.end(); i1++) { 06222 disp=*i1+eol; 06223 dcc_send_msg((*i).socket,disp,ec); 06224 } 06225 disp=lang_get_string(1,(*i).lang,45)+eol; 06226 dcc_send_msg((*i).socket,disp,ec); 06227 06228 (*i).new_user=8; 06229 return; 06230 } 06231 06232 if((*i).new_user==200) { 06233 string disp=lang_get_string(1,(*i).lang,201)+eol; 06234 int ec=0; 06235 dcc_send_msg((*i).socket,disp,ec); 06236 (*i).new_user++; 06237 } 06238 if((*i).new_user==201) { 06239 string p=dcc_get_line((*i).in_buff); 06240 if(!p.compare("")) 06241 return; 06242 bool got=false; 06243 if(!p.compare(".")) { 06244 got=false; 06245 } else { 06246 got=true; 06247 if(!p.compare("0")) 06248 p="0 0"; 06249 string lines, seconds; 06250 int pos=0; 06251 for(unsigned int i1=0; i1<p.length(); i1++) { 06252 if(p[i1]==0x20) { 06253 pos++; 06254 continue; 06255 } 06256 if(pos==0) 06257 lines+=p[i1]; 06258 if(pos==1) 06259 seconds+=p[i1]; 06260 } 06261 string disp; 06262 (*i).user_partyline_msg_flood.lines=atol(lines.c_str()); 06263 (*i).user_partyline_msg_flood.seconds=atol(seconds.c_str()); 06264 (*i).new_user++; 06265 return; 06266 } 06267 if(!got) 06268 (*i).new_user=200; 06269 return; 06270 } 06271 if((*i).new_user==202) { 06272 (*i).new_user=100; 06273 } 06274 06275 if((*i).new_user==300) { 06276 string disp; 06277 int ec=0; 06278 06279 disp=lang_get_string(1,(*i).lang,211)+eol; // !!! 06280 dcc_send_msg((*i).socket,disp,ec); 06281 06282 vector<string>::iterator i1; 06283 for(i1=(*i).access_grant_groups.begin(); i1!=(*i).access_grant_groups.end(); i1++) { 06284 disp=(*i1)+eol; 06285 dcc_send_msg((*i).socket,disp,ec); 06286 } 06287 06288 disp=lang_get_string(1,(*i).lang,125)+eol; // !!! 06289 dcc_send_msg((*i).socket,disp,ec); 06290 06291 (*i).user_channel_allow_dynamic.group=""; 06292 (*i).user_channel_allow_dynamic.plus_modes=""; 06293 (*i).user_channel_allow_dynamic.minus_modes=""; 06294 06295 (*i).new_user++; 06296 } 06297 if((*i).new_user==301) { 06298 string p=dcc_get_line((*i).in_buff); 06299 if(!p.compare("")) 06300 return; 06301 if(p.compare(".")) { 06302 vector<string>::iterator i1; 06303 bool got=false; 06304 for(i1=(*i).access_grant_groups.begin(); i1!=(*i).access_grant_groups.end(); i1++) 06305 if(!(*i1).compare(p)) 06306 got=true; 06307 string disp; 06308 if(got) 06309 disp=lang_get_string(1,(*i).lang,212)+eol; 06310 else 06311 disp=lang_get_string(1,(*i).lang,214)+eol; 06312 int ec=0; 06313 dcc_send_msg((*i).socket,disp,ec); 06314 p=(string)"\""+p+"\""; 06315 if(got) { 06316 (*i).user_channel_allow_dynamic.group=p; 06317 (*i).new_user++; 06318 } 06319 } else { 06320 (*i).new_user=304; 06321 } 06322 } 06323 if((*i).new_user==302) { 06324 string p=dcc_get_line((*i).in_buff); 06325 if(!p.compare("")) 06326 return; 06327 if(!p.compare(".")) 06328 p=""; 06329 p=(string)"\""+p+"\""; 06330 (*i).user_channel_allow_dynamic.plus_modes=p; 06331 06332 string disp; 06333 int ec=0; 06334 06335 disp=lang_get_string(1,(*i).lang,213)+eol; // !!! 06336 dcc_send_msg((*i).socket,disp,ec); 06337 (*i).new_user++; 06338 } 06339 if((*i).new_user==303) { 06340 string p=dcc_get_line((*i).in_buff); 06341 if(!p.compare("")) 06342 return; 06343 if(!p.compare(".")) 06344 p=""; 06345 p=(string)"\""+p+"\""; 06346 (*i).user_channel_allow_dynamic.minus_modes=p; 06347 06348 (*i).user_channel.allow_dynamic.push_back((*i).user_channel_allow_dynamic); 06349 06350 (*i).new_user=300; 06351 } 06352 if((*i).new_user==304) { 06353 (*i).new_user=38; 06354 } 06355 06356 // on_notice 06357 if((*i).new_user==500) { 06358 string disp; 06359 int ec=0; 06360 06361 disp=lang_get_string(1,(*i).lang,601)+eol; // !!! 06362 dcc_send_msg((*i).socket,disp,ec); 06363 06364 vector<string>::iterator i3; 06365 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) { 06366 if(!(*i3).compare("*")) 06367 continue; 06368 disp=*i3+eol; 06369 dcc_send_msg((*i).socket,disp,ec); 06370 } 06371 06372 disp=(string)"----------------"+eol; 06373 dcc_send_msg((*i).socket,disp,ec); 06374 06375 disp=lang_get_string(1,(*i).lang,602)+eol; // !!! 06376 dcc_send_msg((*i).socket,disp,ec); 06377 06378 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol; 06379 dcc_send_msg((*i).socket,disp,ec); 06380 06381 disp=lang_get_string(1,(*i).lang,56)+eol; 06382 dcc_send_msg((*i).socket,disp,ec); 06383 06384 (*i).new_user++; 06385 } 06386 if((*i).new_user==501) { 06387 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_notice)) { 06388 int ec=0; 06389 string disp=lang_get_string(1,(*i).lang,592)+eol; 06390 dcc_send_msg((*i).socket,disp,ec); 06391 (*i).new_user++; 06392 return; 06393 } 06394 06395 string p=dcc_get_line((*i).in_buff); 06396 if(!p.compare("")) 06397 return; 06398 vector<string>::iterator i1; 06399 bool got=false; 06400 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++) 06401 if(!(*i1).compare(p)) 06402 got=true; 06403 if(!p.compare(".")) { 06404 got=true; 06405 string disp=lang_get_string(1,(*i).lang,57)+eol; 06406 int ec=0; 06407 dcc_send_msg((*i).socket,disp,ec); 06408 (*i).new_user++; 06409 } else { 06410 string disp; 06411 if(got) 06412 disp=lang_get_string(1,(*i).lang,57)+eol; 06413 else 06414 disp=lang_get_string(1,(*i).lang,58)+eol; 06415 int ec=0; 06416 dcc_send_msg((*i).socket,disp,ec); 06417 if(got) 06418 (*i).user_channel.on_notice=p; 06419 else { 06420 (*i).new_user--; 06421 return; 06422 } 06423 (*i).new_user++; 06424 } 06425 } 06426 06427 // on_except 06428 if((*i).new_user==502) { 06429 string disp; 06430 int ec=0; 06431 06432 disp=lang_get_string(1,(*i).lang,246)+eol; // !!! 06433 dcc_send_msg((*i).socket,disp,ec); 06434 06435 vector<string>::iterator i3; 06436 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) { 06437 if(!(*i3).compare("*")) 06438 continue; 06439 disp=*i3+eol; 06440 dcc_send_msg((*i).socket,disp,ec); 06441 } 06442 06443 disp=(string)"----------------"+eol; 06444 dcc_send_msg((*i).socket,disp,ec); 06445 06446 disp=lang_get_string(1,(*i).lang,247)+eol; // !!! 06447 dcc_send_msg((*i).socket,disp,ec); 06448 06449 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol; 06450 dcc_send_msg((*i).socket,disp,ec); 06451 06452 disp=lang_get_string(1,(*i).lang,56)+eol; 06453 dcc_send_msg((*i).socket,disp,ec); 06454 06455 (*i).new_user++; 06456 } 06457 if((*i).new_user==503) { 06458 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_except)) { 06459 int ec=0; 06460 string disp=lang_get_string(1,(*i).lang,592)+eol; 06461 dcc_send_msg((*i).socket,disp,ec); 06462 (*i).new_user++; 06463 return; 06464 } 06465 06466 string p=dcc_get_line((*i).in_buff); 06467 if(!p.compare("")) 06468 return; 06469 vector<string>::iterator i1; 06470 bool got=false; 06471 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++) 06472 if(!(*i1).compare(p)) 06473 got=true; 06474 if(!p.compare(".")) { 06475 got=true; 06476 string disp=lang_get_string(1,(*i).lang,57)+eol; 06477 int ec=0; 06478 dcc_send_msg((*i).socket,disp,ec); 06479 (*i).new_user++; 06480 } else { 06481 string disp; 06482 if(got) 06483 disp=lang_get_string(1,(*i).lang,57)+eol; 06484 else 06485 disp=lang_get_string(1,(*i).lang,58)+eol; 06486 int ec=0; 06487 dcc_send_msg((*i).socket,disp,ec); 06488 if(got) 06489 (*i).user_channel.on_except=p; 06490 else { 06491 (*i).new_user--; 06492 return; 06493 } 06494 (*i).new_user++; 06495 } 06496 } 06497 // on_unexcept 06498 if((*i).new_user==504) { 06499 string disp; 06500 int ec=0; 06501 06502 disp=lang_get_string(1,(*i).lang,248)+eol; // !!! 06503 dcc_send_msg((*i).socket,disp,ec); 06504 06505 vector<string>::iterator i3; 06506 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) { 06507 if(!(*i3).compare("*")) 06508 continue; 06509 disp=*i3+eol; 06510 dcc_send_msg((*i).socket,disp,ec); 06511 } 06512 06513 disp=(string)"----------------"+eol; 06514 dcc_send_msg((*i).socket,disp,ec); 06515 06516 disp=lang_get_string(1,(*i).lang,249)+eol; // !!! 06517 dcc_send_msg((*i).socket,disp,ec); 06518 06519 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol; 06520 dcc_send_msg((*i).socket,disp,ec); 06521 06522 disp=lang_get_string(1,(*i).lang,56)+eol; 06523 dcc_send_msg((*i).socket,disp,ec); 06524 06525 (*i).new_user++; 06526 } 06527 if((*i).new_user==505) { 06528 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_unexcept)) { 06529 int ec=0; 06530 string disp=lang_get_string(1,(*i).lang,592)+eol; 06531 dcc_send_msg((*i).socket,disp,ec); 06532 (*i).new_user++; 06533 return; 06534 } 06535 06536 string p=dcc_get_line((*i).in_buff); 06537 if(!p.compare("")) 06538 return; 06539 vector<string>::iterator i1; 06540 bool got=false; 06541 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++) 06542 if(!(*i1).compare(p)) 06543 got=true; 06544 if(!p.compare(".")) { 06545 got=true; 06546 string disp=lang_get_string(1,(*i).lang,57)+eol; 06547 int ec=0; 06548 dcc_send_msg((*i).socket,disp,ec); 06549 (*i).new_user++; 06550 } else { 06551 string disp; 06552 if(got) 06553 disp=lang_get_string(1,(*i).lang,57)+eol; 06554 else 06555 disp=lang_get_string(1,(*i).lang,58)+eol; 06556 int ec=0; 06557 dcc_send_msg((*i).socket,disp,ec); 06558 if(got) 06559 (*i).user_channel.on_unexcept=p; 06560 else { 06561 (*i).new_user--; 06562 return; 06563 } 06564 (*i).new_user++; 06565 } 06566 } 06567 // on_invite 06568 if((*i).new_user==506) { 06569 string disp; 06570 int ec=0; 06571 06572 disp=lang_get_string(1,(*i).lang,250)+eol; // !!! 06573 dcc_send_msg((*i).socket,disp,ec); 06574 06575 vector<string>::iterator i3; 06576 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) { 06577 if(!(*i3).compare("*")) 06578 continue; 06579 disp=*i3+eol; 06580 dcc_send_msg((*i).socket,disp,ec); 06581 } 06582 06583 disp=(string)"----------------"+eol; 06584 dcc_send_msg((*i).socket,disp,ec); 06585 06586 disp=lang_get_string(1,(*i).lang,251)+eol; // !!! 06587 dcc_send_msg((*i).socket,disp,ec); 06588 06589 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol; 06590 dcc_send_msg((*i).socket,disp,ec); 06591 06592 disp=lang_get_string(1,(*i).lang,56)+eol; 06593 dcc_send_msg((*i).socket,disp,ec); 06594 06595 (*i).new_user++; 06596 } 06597 if((*i).new_user==507) { 06598 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_invite)) { 06599 int ec=0; 06600 string disp=lang_get_string(1,(*i).lang,592)+eol; 06601 dcc_send_msg((*i).socket,disp,ec); 06602 (*i).new_user++; 06603 return; 06604 } 06605 06606 string p=dcc_get_line((*i).in_buff); 06607 if(!p.compare("")) 06608 return; 06609 vector<string>::iterator i1; 06610 bool got=false; 06611 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++) 06612 if(!(*i1).compare(p)) 06613 got=true; 06614 if(!p.compare(".")) { 06615 got=true; 06616 string disp=lang_get_string(1,(*i).lang,57)+eol; 06617 int ec=0; 06618 dcc_send_msg((*i).socket,disp,ec); 06619 (*i).new_user++; 06620 } else { 06621 string disp; 06622 if(got) 06623 disp=lang_get_string(1,(*i).lang,57)+eol; 06624 else 06625 disp=lang_get_string(1,(*i).lang,58)+eol; 06626 int ec=0; 06627 dcc_send_msg((*i).socket,disp,ec); 06628 if(got) 06629 (*i).user_channel.on_invite=p; 06630 else { 06631 (*i).new_user--; 06632 return; 06633 } 06634 (*i).new_user++; 06635 } 06636 } 06637 // on_uninvite 06638 if((*i).new_user==508) { 06639 string disp; 06640 int ec=0; 06641 06642 disp=lang_get_string(1,(*i).lang,252)+eol; // !!! 06643 dcc_send_msg((*i).socket,disp,ec); 06644 06645 vector<string>::iterator i3; 06646 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) { 06647 if(!(*i3).compare("*")) 06648 continue; 06649 disp=*i3+eol; 06650 dcc_send_msg((*i).socket,disp,ec); 06651 } 06652 06653 disp=(string)"----------------"+eol; 06654 dcc_send_msg((*i).socket,disp,ec); 06655 06656 disp=lang_get_string(1,(*i).lang,253)+eol; // !!! 06657 dcc_send_msg((*i).socket,disp,ec); 06658 06659 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol; 06660 dcc_send_msg((*i).socket,disp,ec); 06661 06662 disp=lang_get_string(1,(*i).lang,56)+eol; 06663 dcc_send_msg((*i).socket,disp,ec); 06664 06665 (*i).new_user++; 06666 } 06667 if((*i).new_user==509) { 06668 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_uninvite)) { 06669 int ec=0; 06670 string disp=lang_get_string(1,(*i).lang,592)+eol; 06671 dcc_send_msg((*i).socket,disp,ec); 06672 (*i).new_user++; 06673 return; 06674 } 06675 06676 string p=dcc_get_line((*i).in_buff); 06677 if(!p.compare("")) 06678 return; 06679 vector<string>::iterator i1; 06680 bool got=false; 06681 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++) 06682 if(!(*i1).compare(p)) 06683 got=true; 06684 if(!p.compare(".")) { 06685 got=true; 06686 string disp=lang_get_string(1,(*i).lang,57)+eol; 06687 int ec=0; 06688 dcc_send_msg((*i).socket,disp,ec); 06689 (*i).new_user++; 06690 } else { 06691 string disp; 06692 if(got) 06693 disp=lang_get_string(1,(*i).lang,57)+eol; 06694 else 06695 disp=lang_get_string(1,(*i).lang,58)+eol; 06696 int ec=0; 06697 dcc_send_msg((*i).socket,disp,ec); 06698 if(got) 06699 (*i).user_channel.on_uninvite=p; 06700 else { 06701 (*i).new_user--; 06702 return; 06703 } 06704 (*i).new_user++; 06705 } 06706 } 06707 // on_not_invited 06708 if((*i).new_user==510) { 06709 string disp; 06710 int ec=0; 06711 06712 disp=lang_get_string(1,(*i).lang,254)+eol; // !!! 06713 dcc_send_msg((*i).socket,disp,ec); 06714 06715 vector<string>::iterator i3; 06716 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) { 06717 if(!(*i3).compare("*")) 06718 continue; 06719 disp=*i3+eol; 06720 dcc_send_msg((*i).socket,disp,ec); 06721 } 06722 06723 disp=(string)"----------------"+eol; 06724 dcc_send_msg((*i).socket,disp,ec); 06725 06726 disp=lang_get_string(1,(*i).lang,255)+eol; // !!! 06727 dcc_send_msg((*i).socket,disp,ec); 06728 06729 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol; 06730 dcc_send_msg((*i).socket,disp,ec); 06731 06732 disp=lang_get_string(1,(*i).lang,56)+eol; 06733 dcc_send_msg((*i).socket,disp,ec); 06734 06735 (*i).new_user++; 06736 } 06737 if((*i).new_user==511) { 06738 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_not_invited)) { 06739 int ec=0; 06740 string disp=lang_get_string(1,(*i).lang,592)+eol; 06741 dcc_send_msg((*i).socket,disp,ec); 06742 (*i).new_user++; 06743 return; 06744 } 06745 06746 string p=dcc_get_line((*i).in_buff); 06747 if(!p.compare("")) 06748 return; 06749 vector<string>::iterator i1; 06750 bool got=false; 06751 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++) 06752 if(!(*i1).compare(p)) 06753 got=true; 06754 if(!p.compare(".")) { 06755 got=true; 06756 string disp=lang_get_string(1,(*i).lang,57)+eol; 06757 int ec=0; 06758 dcc_send_msg((*i).socket,disp,ec); 06759 (*i).new_user++; 06760 } else { 06761 string disp; 06762 if(got) 06763 disp=lang_get_string(1,(*i).lang,57)+eol; 06764 else 06765 disp=lang_get_string(1,(*i).lang,58)+eol; 06766 int ec=0; 06767 dcc_send_msg((*i).socket,disp,ec); 06768 if(got) 06769 (*i).user_channel.on_not_invited=p; 06770 else { 06771 (*i).new_user--; 06772 return; 06773 } 06774 (*i).new_user++; 06775 } 06776 } 06777 06778 // on_not_in_reop 06779 if((*i).new_user==512) { 06780 string disp; 06781 int ec=0; 06782 06783 disp=lang_get_string(1,(*i).lang,594)+eol; // !!! 06784 dcc_send_msg((*i).socket,disp,ec); 06785 06786 vector<string>::iterator i3; 06787 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) { 06788 if(!(*i3).compare("*")) 06789 continue; 06790 disp=*i3+eol; 06791 dcc_send_msg((*i).socket,disp,ec); 06792 } 06793 06794 disp=(string)"----------------"+eol; 06795 dcc_send_msg((*i).socket,disp,ec); 06796 06797 disp=lang_get_string(1,(*i).lang,595)+eol; // !!! 06798 dcc_send_msg((*i).socket,disp,ec); 06799 06800 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol; 06801 dcc_send_msg((*i).socket,disp,ec); 06802 06803 disp=lang_get_string(1,(*i).lang,56)+eol; 06804 dcc_send_msg((*i).socket,disp,ec); 06805 06806 (*i).new_user++; 06807 } 06808 if((*i).new_user==513) { 06809 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_not_in_reop)) { 06810 int ec=0; 06811 string disp=lang_get_string(1,(*i).lang,592)+eol; 06812 dcc_send_msg((*i).socket,disp,ec); 06813 (*i).new_user++; 06814 return; 06815 } 06816 06817 string p=dcc_get_line((*i).in_buff); 06818 if(!p.compare("")) 06819 return; 06820 vector<string>::iterator i1; 06821 bool got=false; 06822 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++) 06823 if(!(*i1).compare(p)) 06824 got=true; 06825 if(!p.compare(".")) { 06826 got=true; 06827 string disp=lang_get_string(1,(*i).lang,57)+eol; 06828 int ec=0; 06829 dcc_send_msg((*i).socket,disp,ec); 06830 (*i).new_user++; 06831 } else { 06832 string disp; 06833 if(got) 06834 disp=lang_get_string(1,(*i).lang,57)+eol; 06835 else 06836 disp=lang_get_string(1,(*i).lang,58)+eol; 06837 int ec=0; 06838 dcc_send_msg((*i).socket,disp,ec); 06839 if(got) 06840 (*i).user_channel.on_not_in_reop=p; 06841 else { 06842 (*i).new_user--; 06843 return; 06844 } 06845 (*i).new_user++; 06846 } 06847 } 06848 06849 // on_reop 06850 if((*i).new_user==514) { 06851 string disp; 06852 int ec=0; 06853 06854 disp=lang_get_string(1,(*i).lang,596)+eol; // !!! 06855 dcc_send_msg((*i).socket,disp,ec); 06856 06857 vector<string>::iterator i3; 06858 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) { 06859 if(!(*i3).compare("*")) 06860 continue; 06861 disp=*i3+eol; 06862 dcc_send_msg((*i).socket,disp,ec); 06863 } 06864 06865 disp=(string)"----------------"+eol; 06866 dcc_send_msg((*i).socket,disp,ec); 06867 06868 disp=lang_get_string(1,(*i).lang,597)+eol; // !!! 06869 dcc_send_msg((*i).socket,disp,ec); 06870 06871 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol; 06872 dcc_send_msg((*i).socket,disp,ec); 06873 06874 disp=lang_get_string(1,(*i).lang,56)+eol; 06875 dcc_send_msg((*i).socket,disp,ec); 06876 06877 (*i).new_user++; 06878 } 06879 if((*i).new_user==515) { 06880 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_reop)) { 06881 int ec=0; 06882 string disp=lang_get_string(1,(*i).lang,592)+eol; 06883 dcc_send_msg((*i).socket,disp,ec); 06884 (*i).new_user++; 06885 return; 06886 } 06887 06888 string p=dcc_get_line((*i).in_buff); 06889 if(!p.compare("")) 06890 return; 06891 vector<string>::iterator i1; 06892 bool got=false; 06893 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++) 06894 if(!(*i1).compare(p)) 06895 got=true; 06896 if(!p.compare(".")) { 06897 got=true; 06898 string disp=lang_get_string(1,(*i).lang,57)+eol; 06899 int ec=0; 06900 dcc_send_msg((*i).socket,disp,ec); 06901 (*i).new_user++; 06902 } else { 06903 string disp; 06904 if(got) 06905 disp=lang_get_string(1,(*i).lang,57)+eol; 06906 else 06907 disp=lang_get_string(1,(*i).lang,58)+eol; 06908 int ec=0; 06909 dcc_send_msg((*i).socket,disp,ec); 06910 if(got) 06911 (*i).user_channel.on_reop=p; 06912 else { 06913 (*i).new_user--; 06914 return; 06915 } 06916 (*i).new_user++; 06917 } 06918 } 06919 06920 // on_other_mode 06921 if((*i).new_user==516) { 06922 string disp; 06923 int ec=0; 06924 06925 disp=lang_get_string(1,(*i).lang,564)+eol; // !!! 06926 dcc_send_msg((*i).socket,disp,ec); 06927 06928 vector<string>::iterator i3; 06929 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) { 06930 if(!(*i3).compare("*")) 06931 continue; 06932 disp=*i3+eol; 06933 dcc_send_msg((*i).socket,disp,ec); 06934 } 06935 06936 disp=(string)"----------------"+eol; 06937 dcc_send_msg((*i).socket,disp,ec); 06938 06939 disp=lang_get_string(1,(*i).lang,565)+eol; // !!! 06940 dcc_send_msg((*i).socket,disp,ec); 06941 06942 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol; 06943 dcc_send_msg((*i).socket,disp,ec); 06944 06945 disp=lang_get_string(1,(*i).lang,56)+eol; 06946 dcc_send_msg((*i).socket,disp,ec); 06947 06948 (*i).new_user++; 06949 } 06950 if((*i).new_user==517) { 06951 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_other_mode)) { 06952 int ec=0; 06953 string disp=lang_get_string(1,(*i).lang,592)+eol; 06954 dcc_send_msg((*i).socket,disp,ec); 06955 (*i).new_user++; 06956 return; 06957 } 06958 06959 string p=dcc_get_line((*i).in_buff); 06960 if(!p.compare("")) 06961 return; 06962 vector<string>::iterator i1; 06963 bool got=false; 06964 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++) 06965 if(!(*i1).compare(p)) 06966 got=true; 06967 if(!p.compare(".")) { 06968 got=true; 06969 string disp=lang_get_string(1,(*i).lang,57)+eol; 06970 int ec=0; 06971 dcc_send_msg((*i).socket,disp,ec); 06972 (*i).new_user++; 06973 } else { 06974 string disp; 06975 if(got) 06976 disp=lang_get_string(1,(*i).lang,57)+eol; 06977 else 06978 disp=lang_get_string(1,(*i).lang,58)+eol; 06979 int ec=0; 06980 dcc_send_msg((*i).socket,disp,ec); 06981 if(got) 06982 (*i).user_channel.on_other_mode=p; 06983 else { 06984 (*i).new_user--; 06985 return; 06986 } 06987 (*i).new_user++; 06988 } 06989 } 06990 if((*i).new_user==518) { 06991 (*i).new_user=44; 06992 } 06993 06994 if((*i).new_user==1000 || (*i).new_user==1100) { 06995 if((*i).access_grant_partyline) { 06996 string disp=lang_get_string(1,(*i).lang,542)+eol; 06997 int ec=0; 06998 dcc_send_msg((*i).socket,disp,ec); 06999 (*i).new_user++; 07000 } else { 07001 (*i).new_user+=2; 07002 } 07003 } 07004 if((*i).new_user==1001 || (*i).new_user==1101) { 07005 string p=dcc_get_line((*i).in_buff); 07006 if(!p.compare("")) 07007 return; 07008 if(p.compare("y") && p.compare("n") && p.compare("Y") && p.compare("N")) { 07009 string disp=lang_get_string(1,(*i).lang,542)+eol; 07010 int ec=0; 07011 dcc_send_msg((*i).socket,disp,ec); 07012 } else { 07013 if(!p.compare("n") || !p.compare("N")) { 07014 (*i).user_access_grant_partyline=false; 07015 (*i).new_user++; 07016 return; 07017 } else { 07018 (*i).user_access_grant_partyline=true; 07019 (*i).new_user++; 07020 return; 07021 } 07022 } 07023 } 07024 if((*i).new_user==1002) { 07025 (*i).new_user=100; 07026 return; 07027 } 07028 if((*i).new_user==1102) { 07029 (*i).new_user=200; 07030 return; 07031 } 07032 07033 // access_usage_proc 07034 if((*i).new_user==1200) { 07035 string p=dcc_get_line((*i).in_buff); 07036 if(!p.compare("")) 07037 return; 07038 if(p.compare(".")) { 07039 vector<string>::iterator i1; 07040 bool got=false; 07041 for(i1=(*i).access_grant_proc_groups.begin(); i1!=(*i).access_grant_proc_groups.end(); i1++) 07042 if(!(*i1).compare(p)) 07043 got=true; 07044 string disp; 07045 if(got) 07046 disp=lang_get_string(1,(*i).lang,46)+eol; 07047 else 07048 disp=lang_get_string(1,(*i).lang,47)+eol; 07049 int ec=0; 07050 dcc_send_msg((*i).socket,disp,ec); 07051 p=(string)"\""+p+"\""; 07052 if(got) 07053 (*i).user_access_usage_proc_groups.push_back(p); 07054 } else { 07055 string disp=lang_get_string(1,(*i).lang,51)+eol; 07056 int ec=0; 07057 dcc_send_msg((*i).socket,disp,ec); 07058 vector<string>::iterator i1; 07059 for(i1=(*i).access_to_channel.begin(); i1!=(*i).access_to_channel.end(); i1++) { 07060 disp=*i1+eol; 07061 dcc_send_msg((*i).socket,disp,ec); 07062 } 07063 disp=lang_get_string(1,(*i).lang,45)+eol; 07064 dcc_send_msg((*i).socket,disp,ec); 07065 (*i).new_user=12; 07066 return; 07067 } 07068 } 07069 }
Here is the call graph for this function: ![]() |
|
Should be called in a loop to .private command.
Definition at line 2770 of file dcc.cpp. References dcc_can_unassign(), dcc_get_line(), dcc_send_msg(), and lang_get_string(). Referenced by dcc_loop(). 02771 { 02772 if((*i).private_edit==0) 02773 return; 02774 02775 if((*i).private_edit==1) { 02776 (*i).private_=r_private; 02777 02778 int ec=0; 02779 string disp=lang_get_string(1,(*i).lang,413)+eol; // !!! 02780 dcc_send_msg((*i).socket,disp,ec); 02781 02782 vector<string>::iterator i3; 02783 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) { 02784 if(!(*i3).compare("*")) 02785 continue; 02786 disp=*i3+eol; 02787 dcc_send_msg((*i).socket,disp,ec); 02788 } 02789 02790 disp=(string)"----------------"+eol; 02791 dcc_send_msg((*i).socket,disp,ec); 02792 02793 disp=lang_get_string(1,(*i).lang,414)+eol; // !!! 02794 dcc_send_msg((*i).socket,disp,ec); 02795 02796 disp=lang_get_string(1,(*i).lang,130)+eol; 02797 dcc_send_msg((*i).socket,disp,ec); 02798 02799 (*i).private_edit++; 02800 return; 02801 } 02802 if((*i).private_edit==2) { 02803 if(!dcc_can_unassign(i,eol,(*i).private_.on_privmsg)) { 02804 int ec=0; 02805 string disp=lang_get_string(1,(*i).lang,592)+eol; 02806 dcc_send_msg((*i).socket,disp,ec); 02807 (*i).private_edit++; 02808 return; 02809 } 02810 02811 string p=dcc_get_line((*i).in_buff); 02812 if(!p.compare("")) 02813 return; 02814 02815 vector<string>::iterator i1; 02816 bool got=false; 02817 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++) 02818 if(!(*i1).compare(p)) 02819 got=true; 02820 if(!p.compare(".")) { 02821 got=true; 02822 string disp=lang_get_string(1,(*i).lang,131)+eol; 02823 int ec=0; 02824 dcc_send_msg((*i).socket,disp,ec); 02825 (*i).private_edit++; 02826 } else { 02827 if(!p.compare("..")) { 02828 (*i).private_.on_privmsg=""; 02829 got=true; 02830 string disp=lang_get_string(1,(*i).lang,132)+eol; 02831 int ec=0; 02832 dcc_send_msg((*i).socket,disp,ec); 02833 (*i).private_edit++; 02834 } else { 02835 string disp; 02836 if(got) 02837 disp=lang_get_string(1,(*i).lang,57)+eol; 02838 else 02839 disp=lang_get_string(1,(*i).lang,58)+eol; 02840 int ec=0; 02841 dcc_send_msg((*i).socket,disp,ec); 02842 if(got) 02843 (*i).private_.on_privmsg=p; 02844 else { 02845 (*i).private_edit--; 02846 return; 02847 } 02848 (*i).private_edit++; 02849 } 02850 } 02851 } 02852 02853 if((*i).private_edit==3) { 02854 int ec=0; 02855 string disp=lang_get_string(1,(*i).lang,605)+eol; // !!! 02856 dcc_send_msg((*i).socket,disp,ec); 02857 02858 vector<string>::iterator i3; 02859 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) { 02860 if(!(*i3).compare("*")) 02861 continue; 02862 disp=*i3+eol; 02863 dcc_send_msg((*i).socket,disp,ec); 02864 } 02865 02866 disp=(string)"----------------"+eol; 02867 dcc_send_msg((*i).socket,disp,ec); 02868 02869 disp=lang_get_string(1,(*i).lang,607)+eol; // !!! 02870 dcc_send_msg((*i).socket,disp,ec); 02871 02872 disp=lang_get_string(1,(*i).lang,130)+eol; 02873 dcc_send_msg((*i).socket,disp,ec); 02874 02875 (*i).private_edit++; 02876 return; 02877 } 02878 if((*i).private_edit==4) { 02879 if(!dcc_can_unassign(i,eol,(*i).private_.on_notice)) { 02880 int ec=0; 02881 string disp=lang_get_string(1,(*i).lang,592)+eol; 02882 dcc_send_msg((*i).socket,disp,ec); 02883 (*i).private_edit++; 02884 return; 02885 } 02886 02887 string p=dcc_get_line((*i).in_buff); 02888 if(!p.compare("")) 02889 return; 02890 02891 vector<string>::iterator i1; 02892 bool got=false; 02893 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++) 02894 if(!(*i1).compare(p)) 02895 got=true; 02896 if(!p.compare(".")) { 02897 got=true; 02898 string disp=lang_get_string(1,(*i).lang,131)+eol; 02899 int ec=0; 02900 dcc_send_msg((*i).socket,disp,ec); 02901 (*i).private_edit++; 02902 } else { 02903 if(!p.compare("..")) { 02904 (*i).private_.on_notice=""; 02905 got=true; 02906 string disp=lang_get_string(1,(*i).lang,132)+eol; 02907 int ec=0; 02908 dcc_send_msg((*i).socket,disp,ec); 02909 (*i).private_edit++; 02910 } else { 02911 string disp; 02912 if(got) 02913 disp=lang_get_string(1,(*i).lang,57)+eol; 02914 else 02915 disp=lang_get_string(1,(*i).lang,58)+eol; 02916 int ec=0; 02917 dcc_send_msg((*i).socket,disp,ec); 02918 if(got) 02919 (*i).private_.on_notice=p; 02920 else { 02921 (*i).private_edit--; 02922 return; 02923 } 02924 (*i).private_edit++; 02925 } 02926 } 02927 } 02928 02929 if((*i).private_edit==5) { 02930 int ec=0; 02931 string disp=lang_get_string(1,(*i).lang,415)+eol; // !!! 02932 dcc_send_msg((*i).socket,disp,ec); 02933 02934 vector<string>::iterator i3; 02935 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) { 02936 if(!(*i3).compare("*")) 02937 continue; 02938 disp=*i3+eol; 02939 dcc_send_msg((*i).socket,disp,ec); 02940 } 02941 02942 disp=(string)"----------------"+eol; 02943 dcc_send_msg((*i).socket,disp,ec); 02944 02945 disp=lang_get_string(1,(*i).lang,416)+eol; // !!! 02946 dcc_send_msg((*i).socket,disp,ec); 02947 02948 disp=lang_get_string(1,(*i).lang,130)+eol; 02949 dcc_send_msg((*i).socket,disp,ec); 02950 02951 (*i).private_edit++; 02952 return; 02953 } 02954 if((*i).private_edit==6) { 02955 if(!dcc_can_unassign(i,eol,(*i).private_.on_ctcp)) { 02956 int ec=0; 02957 string disp=lang_get_string(1,(*i).lang,592)+eol; 02958 dcc_send_msg((*i).socket,disp,ec); 02959 (*i).private_edit++; 02960 return; 02961 } 02962 02963 string p=dcc_get_line((*i).in_buff); 02964 if(!p.compare("")) 02965 return; 02966 02967 vector<string>::iterator i1; 02968 bool got=false; 02969 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++) 02970 if(!(*i1).compare(p)) 02971 got=true; 02972 if(!p.compare(".")) { 02973 got=true; 02974 string disp=lang_get_string(1,(*i).lang,131)+eol; 02975 int ec=0; 02976 dcc_send_msg((*i).socket,disp,ec); 02977 (*i).private_edit++; 02978 } else { 02979 if(!p.compare("..")) { 02980 (*i).private_.on_ctcp=""; 02981 got=true; 02982 string disp=lang_get_string(1,(*i).lang,132)+eol; 02983 int ec=0; 02984 dcc_send_msg((*i).socket,disp,ec); 02985 (*i).private_edit++; 02986 } else { 02987 string disp; 02988 if(got) 02989 disp=lang_get_string(1,(*i).lang,57)+eol; 02990 else 02991 disp=lang_get_string(1,(*i).lang,58)+eol; 02992 int ec=0; 02993 dcc_send_msg((*i).socket,disp,ec); 02994 if(got) 02995 (*i).private_.on_ctcp=p; 02996 else { 02997 (*i).private_edit--; 02998 return; 02999 } 03000 (*i).private_edit++; 03001 } 03002 } 03003 } 03004 03005 if((*i).private_edit==7) { 03006 int ec=0; 03007 string disp=lang_get_string(1,(*i).lang,667)+eol; // !!! 03008 dcc_send_msg((*i).socket,disp,ec); 03009 03010 vector<string>::iterator i3; 03011 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) { 03012 if(!(*i3).compare("*")) 03013 continue; 03014 disp=*i3+eol; 03015 dcc_send_msg((*i).socket,disp,ec); 03016 } 03017 03018 disp=(string)"----------------"+eol; 03019 dcc_send_msg((*i).socket,disp,ec); 03020 03021 disp=lang_get_string(1,(*i).lang,668)+eol; // !!! 03022 dcc_send_msg((*i).socket,disp,ec); 03023 03024 disp=lang_get_string(1,(*i).lang,130)+eol; 03025 dcc_send_msg((*i).socket,disp,ec); 03026 03027 (*i).private_edit++; 03028 return; 03029 } 03030 if((*i).private_edit==8) { 03031 if(!dcc_can_unassign(i,eol,(*i).private_.on_filesys_got_new)) { 03032 int ec=0; 03033 string disp=lang_get_string(1,(*i).lang,592)+eol; 03034 dcc_send_msg((*i).socket,disp,ec); 03035 (*i).private_edit++; 03036 return; 03037 } 03038 03039 string p=dcc_get_line((*i).in_buff); 03040 if(!p.compare("")) 03041 return; 03042 03043 vector<string>::iterator i1; 03044 bool got=false; 03045 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++) 03046 if(!(*i1).compare(p)) 03047 got=true; 03048 if(!p.compare(".")) { 03049 got=true; 03050 string disp=lang_get_string(1,(*i).lang,131)+eol; 03051 int ec=0; 03052 dcc_send_msg((*i).socket,disp,ec); 03053 (*i).private_edit++; 03054 } else { 03055 if(!p.compare("..")) { 03056 (*i).private_.on_filesys_got_new=""; 03057 got=true; 03058 string disp=lang_get_string(1,(*i).lang,132)+eol; 03059 int ec=0; 03060 dcc_send_msg((*i).socket,disp,ec); 03061 (*i).private_edit++; 03062 } else { 03063 string disp; 03064 if(got) 03065 disp=lang_get_string(1,(*i).lang,57)+eol; 03066 else 03067 disp=lang_get_string(1,(*i).lang,58)+eol; 03068 int ec=0; 03069 dcc_send_msg((*i).socket,disp,ec); 03070 if(got) 03071 (*i).private_.on_filesys_got_new=p; 03072 else { 03073 (*i).private_edit--; 03074 return; 03075 } 03076 (*i).private_edit++; 03077 } 03078 } 03079 } 03080 03081 if((*i).private_edit==9) { 03082 int ec=0; 03083 string disp=lang_get_string(1,(*i).lang,669)+eol; // !!! 03084 dcc_send_msg((*i).socket,disp,ec); 03085 03086 vector<string>::iterator i3; 03087 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) { 03088 if(!(*i3).compare("*")) 03089 continue; 03090 disp=*i3+eol; 03091 dcc_send_msg((*i).socket,disp,ec); 03092 } 03093 03094 disp=(string)"----------------"+eol; 03095 dcc_send_msg((*i).socket,disp,ec); 03096 03097 disp=lang_get_string(1,(*i).lang,670)+eol; // !!! 03098 dcc_send_msg((*i).socket,disp,ec); 03099 03100 disp=lang_get_string(1,(*i).lang,130)+eol; 03101 dcc_send_msg((*i).socket,disp,ec); 03102 03103 (*i).private_edit++; 03104 return; 03105 } 03106 if((*i).private_edit==10) { 03107 if(!dcc_can_unassign(i,eol,(*i).private_.on_fnc)) { 03108 int ec=0; 03109 string disp=lang_get_string(1,(*i).lang,592)+eol; 03110 dcc_send_msg((*i).socket,disp,ec); 03111 (*i).private_edit++; 03112 return; 03113 } 03114 03115 string p=dcc_get_line((*i).in_buff); 03116 if(!p.compare("")) 03117 return; 03118 03119 vector<string>::iterator i1; 03120 bool got=false; 03121 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++) 03122 if(!(*i1).compare(p)) 03123 got=true; 03124 if(!p.compare(".")) { 03125 got=true; 03126 string disp=lang_get_string(1,(*i).lang,131)+eol; 03127 int ec=0; 03128 dcc_send_msg((*i).socket,disp,ec); 03129 (*i).private_edit++; 03130 } else { 03131 if(!p.compare("..")) { 03132 (*i).private_.on_fnc=""; 03133 got=true; 03134 string disp=lang_get_string(1,(*i).lang,132)+eol; 03135 int ec=0; 03136 dcc_send_msg((*i).socket,disp,ec); 03137 (*i).private_edit++; 03138 } else { 03139 string disp; 03140 if(got) 03141 disp=lang_get_string(1,(*i).lang,57)+eol; 03142 else 03143 disp=lang_get_string(1,(*i).lang,58)+eol; 03144 int ec=0; 03145 dcc_send_msg((*i).socket,disp,ec); 03146 if(got) 03147 (*i).private_.on_fnc=p; 03148 else { 03149 (*i).private_edit--; 03150 return; 03151 } 03152 (*i).private_edit++; 03153 } 03154 } 03155 } 03156 03157 if((*i).private_edit==11) { 03158 int ec=0; 03159 string disp=lang_get_string(1,(*i).lang,671)+eol; // !!! 03160 dcc_send_msg((*i).socket,disp,ec); 03161 03162 vector<string>::iterator i3; 03163 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) { 03164 if(!(*i3).compare("*")) 03165 continue; 03166 disp=*i3+eol; 03167 dcc_send_msg((*i).socket,disp,ec); 03168 } 03169 03170 disp=(string)"----------------"+eol; 03171 dcc_send_msg((*i).socket,disp,ec); 03172 03173 disp=lang_get_string(1,(*i).lang,672)+eol; // !!! 03174 dcc_send_msg((*i).socket,disp,ec); 03175 03176 disp=lang_get_string(1,(*i).lang,130)+eol; 03177 dcc_send_msg((*i).socket,disp,ec); 03178 03179 (*i).private_edit++; 03180 return; 03181 } 03182 if((*i).private_edit==12) { 03183 if(!dcc_can_unassign(i,eol,(*i).private_.on_broadcast)) { 03184 int ec=0; 03185 string disp=lang_get_string(1,(*i).lang,592)+eol; 03186 dcc_send_msg((*i).socket,disp,ec); 03187 (*i).private_edit++; 03188 return; 03189 } 03190 03191 string p=dcc_get_line((*i).in_buff); 03192 if(!p.compare("")) 03193 return; 03194 03195 vector<string>::iterator i1; 03196 bool got=false; 03197 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++) 03198 if(!(*i1).compare(p)) 03199 got=true; 03200 if(!p.compare(".")) { 03201 got=true; 03202 string disp=lang_get_string(1,(*i).lang,131)+eol; 03203 int ec=0; 03204 dcc_send_msg((*i).socket,disp,ec); 03205 (*i).private_edit++; 03206 } else { 03207 if(!p.compare("..")) { 03208 (*i).private_.on_broadcast=""; 03209 got=true; 03210 string disp=lang_get_string(1,(*i).lang,132)+eol; 03211 int ec=0; 03212 dcc_send_msg((*i).socket,disp,ec); 03213 (*i).private_edit++; 03214 } else { 03215 string disp; 03216 if(got) 03217 disp=lang_get_string(1,(*i).lang,57)+eol; 03218 else 03219 disp=lang_get_string(1,(*i).lang,58)+eol; 03220 int ec=0; 03221 dcc_send_msg((*i).socket,disp,ec); 03222 if(got) 03223 (*i).private_.on_broadcast=p; 03224 else { 03225 (*i).private_edit--; 03226 return; 03227 } 03228 (*i).private_edit++; 03229 } 03230 } 03231 } 03232 03233 if((*i).private_edit==13) { 03234 int ec=0; 03235 string disp=lang_get_string(1,(*i).lang,673)+eol; // !!! 03236 dcc_send_msg((*i).socket,disp,ec); 03237 03238 vector<string>::iterator i3; 03239 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) { 03240 if(!(*i3).compare("*")) 03241 continue; 03242 disp=*i3+eol; 03243 dcc_send_msg((*i).socket,disp,ec); 03244 } 03245 03246 disp=(string)"----------------"+eol; 03247 dcc_send_msg((*i).socket,disp,ec); 03248 03249 disp=lang_get_string(1,(*i).lang,674)+eol; // !!! 03250 dcc_send_msg((*i).socket,disp,ec); 03251 03252 disp=lang_get_string(1,(*i).lang,130)+eol; 03253 dcc_send_msg((*i).socket,disp,ec); 03254 03255 (*i).private_edit++; 03256 return; 03257 } 03258 if((*i).private_edit==14) { 03259 if(!dcc_can_unassign(i,eol,(*i).private_.on_server_msg)) { 03260 int ec=0; 03261 string disp=lang_get_string(1,(*i).lang,592)+eol; 03262 dcc_send_msg((*i).socket,disp,ec); 03263 (*i).private_edit++; 03264 return; 03265 } 03266 03267 string p=dcc_get_line((*i).in_buff); 03268 if(!p.compare("")) 03269 return; 03270 03271 vector<string>::iterator i1; 03272 bool got=false; 03273 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++) 03274 if(!(*i1).compare(p)) 03275 got=true; 03276 if(!p.compare(".")) { 03277 got=true; 03278 string disp=lang_get_string(1,(*i).lang,131)+eol; 03279 int ec=0; 03280 dcc_send_msg((*i).socket,disp,ec); 03281 (*i).private_edit++; 03282 } else { 03283 if(!p.compare("..")) { 03284 (*i).private_.on_server_msg=""; 03285 got=true; 03286 string disp=lang_get_string(1,(*i).lang,132)+eol; 03287 int ec=0; 03288 dcc_send_msg((*i).socket,disp,ec); 03289 (*i).private_edit++; 03290 } else { 03291 string disp; 03292 if(got) 03293 disp=lang_get_string(1,(*i).lang,57)+eol; 03294 else 03295 disp=lang_get_string(1,(*i).lang,58)+eol; 03296 int ec=0; 03297 dcc_send_msg((*i).socket,disp,ec); 03298 if(got) 03299 (*i).private_.on_server_msg=p; 03300 else { 03301 (*i).private_edit--; 03302 return; 03303 } 03304 (*i).private_edit++; 03305 } 03306 } 03307 } 03308 03309 // on_internal_event 03310 if((*i).private_edit==15) { 03311 int ec=0; 03312 string disp=lang_get_string(1,(*i).lang,696)+eol; // !!! 03313 dcc_send_msg((*i).socket,disp,ec); 03314 03315 vector<string>::iterator i3; 03316 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) { 03317 if(!(*i3).compare("*")) 03318 continue; 03319 disp=*i3+eol; 03320 dcc_send_msg((*i).socket,disp,ec); 03321 } 03322 03323 disp=(string)"----------------"+eol; 03324 dcc_send_msg((*i).socket,disp,ec); 03325 03326 disp=lang_get_string(1,(*i).lang,697)+eol; // !!! 03327 dcc_send_msg((*i).socket,disp,ec); 03328 03329 disp=lang_get_string(1,(*i).lang,130)+eol; 03330 dcc_send_msg((*i).socket,disp,ec); 03331 03332 (*i).private_edit++; 03333 return; 03334 } 03335 if((*i).private_edit==16) { 03336 if(!dcc_can_unassign(i,eol,(*i).private_.on_internal_event)) { 03337 int ec=0; 03338 string disp=lang_get_string(1,(*i).lang,592)+eol; 03339 dcc_send_msg((*i).socket,disp,ec); 03340 (*i).private_edit++; 03341 return; 03342 } 03343 03344 string p=dcc_get_line((*i).in_buff); 03345 if(!p.compare("")) 03346 return; 03347 03348 vector<string>::iterator i1; 03349 bool got=false; 03350 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++) 03351 if(!(*i1).compare(p)) 03352 got=true; 03353 if(!p.compare(".")) { 03354 got=true; 03355 string disp=lang_get_string(1,(*i).lang,131)+eol; 03356 int ec=0; 03357 dcc_send_msg((*i).socket,disp,ec); 03358 (*i).private_edit++; 03359 } else { 03360 if(!p.compare("..")) { 03361 (*i).private_.on_internal_event=""; 03362 got=true; 03363 string disp=lang_get_string(1,(*i).lang,132)+eol; 03364 int ec=0; 03365 dcc_send_msg((*i).socket,disp,ec); 03366 (*i).private_edit++; 03367 } else { 03368 string disp; 03369 if(got) 03370 disp=lang_get_string(1,(*i).lang,57)+eol; 03371 else 03372 disp=lang_get_string(1,(*i).lang,58)+eol; 03373 int ec=0; 03374 dcc_send_msg((*i).socket,disp,ec); 03375 if(got) 03376 (*i).private_.on_internal_event=p; 03377 else { 03378 (*i).private_edit--; 03379 return; 03380 } 03381 (*i).private_edit++; 03382 } 03383 } 03384 } 03385 03386 // commit? 03387 if((*i).private_edit==17) { 03388 int ec=0; 03389 string disp=lang_get_string(1,(*i).lang,417)+eol; // !!! 03390 dcc_send_msg((*i).socket,disp,ec); 03391 (*i).private_edit++; 03392 return; 03393 } 03394 if((*i).private_edit==18) { 03395 string p=dcc_get_line((*i).in_buff); 03396 if(!p.compare("")) 03397 return; 03398 03399 if(p.compare("y") && p.compare("n") && p.compare("Y") && p.compare("N")) { 03400 string disp=lang_get_string(1,(*i).lang,417)+eol; 03401 int ec=0; 03402 dcc_send_msg((*i).socket,disp,ec); 03403 } else { 03404 if(!p.compare("n") || !p.compare("N")) { 03405 string disp=lang_get_string(1,(*i).lang,70)+eol; 03406 int ec=0; 03407 dcc_send_msg((*i).socket,disp,ec); 03408 } else { 03409 (*i).private_.last_changed=time(NULL); 03410 r_private=(*i).private_; 03411 string disp=lang_get_string(1,(*i).lang,231)+eol; 03412 int ec=0; 03413 dcc_send_msg((*i).socket,disp,ec); 03414 } 03415 (*i).private_edit=0; 03416 return; 03417 } 03418 } 03419 }
Here is the call graph for this function: ![]() |
|
Should be called in a loop to process .replication commands in DCC CHAT/telnet connections.
Definition at line 8466 of file dcc.cpp. References dcc_get_line(), dcc_send_msg(), s_user::is_template, lang_get_string(), logic_partyline_add_user(), logic_partyline_get_user(), logic_partyline_get_user_template(), logic_partyline_remove_user(), ltoa(), s_user::name, r_channel_defs, r_procedures, r_user_templates, r_users, REPL_INVALID, REPL_PULL, REPL_PUSH, REPL_PUSHPULL, s_private::replication, and s_user::replication_partner. Referenced by dcc_loop(). 08467 { 08468 if((*i).replication==1) { 08469 (*i).b_repl_user=false; 08470 (*i).b_repl_user_template=false; 08471 (*i).b_repl_chandef=false; 08472 (*i).b_repl_proc=false; 08473 (*i).b_repl_private=false; 08474 08475 string disp=lang_get_string(1,(*i).lang,421)+eol; 08476 08477 { 08478 vector<s_user>::iterator i1; 08479 for(i1=r_users.begin(); i1!=r_users.end(); i1++) 08480 disp+=(string)"USER = "+(*i1).name+eol; 08481 } 08482 { 08483 vector<s_user>::iterator i1; 08484 for(i1=r_user_templates.begin(); i1!=r_user_templates.end(); i1++) 08485 disp+=(string)"USER TEMPLATE = "+(*i1).name+eol; 08486 } 08487 { 08488 vector<s_procedure>::iterator i1; 08489 for(i1=r_procedures.begin(); i1!=r_procedures.end(); i1++) 08490 disp+=(string)"PROCEDURE = "+(*i1).name+eol; 08491 } 08492 { 08493 vector<s_channel_def>::iterator i1; 08494 for(i1=r_channel_defs.begin(); i1!=r_channel_defs.end(); i1++) 08495 disp+=(string)"CHANDEF = "+(*i1).channel_name+eol; 08496 } 08497 disp+=(string)"PRIVATE = private"+eol; 08498 08499 disp+=lang_get_string(1,(*i).lang,422)+eol; 08500 08501 int ec=0; 08502 dcc_send_msg((*i).socket,disp,ec); 08503 (*i).replication++; 08504 return; 08505 } 08506 08507 if((*i).replication==2) { 08508 string p=dcc_get_line((*i).in_buff); 08509 if(!p.compare("")) 08510 return; 08511 08512 if(!p.compare(".")) { 08513 (*i).replication=0; 08514 return; 08515 } 08516 08517 bool got=false; 08518 08519 { 08520 vector<s_user>::iterator i1; 08521 for(i1=r_users.begin(); i1!=r_users.end(); i1++) 08522 if(!(*i1).name.compare(p)) { 08523 got=true; 08524 (*i).b_repl_user=true; 08525 (*i).repl_user=*i1; 08526 (*i).replication=1000; 08527 return; 08528 } 08529 } 08530 { 08531 vector<s_user>::iterator i1; 08532 for(i1=r_user_templates.begin(); i1!=r_user_templates.end(); i1++) 08533 if(!(*i1).name.compare(p)) { 08534 got=true; 08535 (*i).b_repl_user_template=true; 08536 (*i).repl_user_template=*i1; 08537 (*i).replication=1000; 08538 return; 08539 } 08540 } 08541 { 08542 vector<s_procedure>::iterator i1; 08543 for(i1=r_procedures.begin(); i1!=r_procedures.end(); i1++) 08544 if(!(*i1).name.compare(p)) { 08545 got=true; 08546 (*i).b_repl_proc=true; 08547 (*i).repl_proc=*i1; 08548 (*i).replication=3000; 08549 return; 08550 } 08551 } 08552 { 08553 vector<s_channel_def>::iterator i1; 08554 for(i1=r_channel_defs.begin(); i1!=r_channel_defs.end(); i1++) 08555 if(!(*i1).channel_name.compare(p)) { 08556 got=true; 08557 (*i).b_repl_chandef=true; 08558 (*i).repl_chandef=*i1; 08559 (*i).replication=4000; 08560 return; 08561 } 08562 } 08563 08564 if(!p.compare("private")) { 08565 got=true; 08566 (*i).b_repl_private=true; 08567 (*i).repl_private.replication=r_private.replication; 08568 (*i).replication=5000; 08569 return; 08570 } 08571 08572 string disp=lang_get_string(1,(*i).lang,423)+eol; 08573 int ec=0; 08574 dcc_send_msg((*i).socket,disp,ec); 08575 (*i).replication=1; 08576 return; 08577 } 08578 08579 // user or user template 08580 if((*i).replication==1000) { 08581 string disp=lang_get_string(1,(*i).lang,424)+eol; 08582 08583 int line=0; 08584 08585 vector<s_replication>::iterator i1; 08586 for(i1=(*i).repl_user.replication.begin(); i1!=(*i).repl_user.replication.end(); i1++) { 08587 disp+=lang_get_string(1,(*i).lang,593); 08588 if(line<100) 08589 disp+="0"; 08590 if(line<10) 08591 disp+="0"; 08592 char tmp[64]; 08593 disp+=ltoa(++line,tmp,10); 08594 disp+=": "; 08595 disp+=(*i1).partner; 08596 disp+=" = "; 08597 if((*i1).type==REPL_PUSH) 08598 disp+="PUSH"; 08599 if((*i1).type==REPL_PULL) 08600 disp+="PULL"; 08601 if((*i1).type==REPL_PUSHPULL) 08602 disp+="PUSHPULL"; 08603 disp+=eol; 08604 } 08605 if(line==0) 08606 disp+="(no replications)"+eol; 08607 08608 disp+=lang_get_string(1,(*i).lang,425)+eol; 08609 08610 int ec=0; 08611 dcc_send_msg((*i).socket,disp,ec); 08612 08613 (*i).replication++; 08614 return; 08615 } 08616 if((*i).replication==1001) { 08617 string p=dcc_get_line((*i).in_buff); 08618 if(!p.compare("")) 08619 return; 08620 08621 if(!p.compare(".")) { 08622 string disp=lang_get_string(1,(*i).lang,426)+eol; 08623 int ec=0; 08624 dcc_send_msg((*i).socket,disp,ec); 08625 (*i).replication++; 08626 return; 08627 } 08628 08629 if(!p.compare(".add")) { 08630 string disp=lang_get_string(1,(*i).lang,428)+eol; 08631 08632 vector<s_user>::iterator i1; 08633 for(i1=r_users.begin(); i1!=r_users.end(); i1++) 08634 disp+=(*i1).name+eol; 08635 08636 disp+=lang_get_string(1,(*i).lang,429)+eol; 08637 08638 int ec=0; 08639 dcc_send_msg((*i).socket,disp,ec); 08640 (*i).replication=10000; 08641 return; 08642 } 08643 08644 string p1, p2; 08645 { 08646 int pos=0; 08647 for(unsigned int i1=0; i1<p.length(); i1++) { 08648 if(p[i1]==0x20) { 08649 pos=1; 08650 continue; 08651 } 08652 if(pos==0) 08653 p1+=p[i1]; 08654 if(pos==1) 08655 p2+=p[i1]; 08656 } 08657 } 08658 if(!p1.compare(".remove")) { 08659 int line=0; 08660 08661 vector<s_replication>::iterator i1; 08662 for(i1=(*i).repl_user.replication.begin(); i1!=(*i).repl_user.replication.end(); i1++) 08663 if(++line==atol(p2.c_str())) { 08664 (*i).repl_user.replication.erase(i1); 08665 break; 08666 } 08667 (*i).replication=1000; 08668 return; 08669 } 08670 08671 (*i).replication=1000; 08672 } 08673 if((*i).replication==1002) { 08674 string p=dcc_get_line((*i).in_buff); 08675 if(!p.compare("")) 08676 return; 08677 08678 if(p.compare("y") && p.compare("n") && p.compare("Y") && p.compare("N")) { 08679 string disp=lang_get_string(1,(*i).lang,426)+eol; 08680 int ec=0; 08681 dcc_send_msg((*i).socket,disp,ec); 08682 } else { 08683 if(!p.compare("y") || !p.compare("Y")) { 08684 s_user u; 08685 vector<s_channel> chs; 08686 if(!(*i).b_repl_user_template) { 08687 logic_partyline_get_user((*i).repl_user.name,u,chs); 08688 } else { 08689 logic_partyline_get_user_template((*i).repl_user.name,u,chs); 08690 u.is_template=true; 08691 } 08692 logic_partyline_remove_user((*i).repl_user.name); 08693 logic_partyline_add_user((*i).repl_user,chs); 08694 08695 string disp=lang_get_string(1,(*i).lang,427)+eol; 08696 int ec=0; 08697 dcc_send_msg((*i).socket,disp,ec); 08698 (*i).replication=1; 08699 return; 08700 } else { 08701 string disp=lang_get_string(1,(*i).lang,162)+eol; 08702 int ec=0; 08703 dcc_send_msg((*i).socket,disp,ec); 08704 (*i).replication=1; 08705 return; 08706 } 08707 } 08708 } 08709 08710 // procedure 08711 if((*i).replication==3000) { 08712 string disp=lang_get_string(1,(*i).lang,424)+eol; 08713 08714 int line=0; 08715 08716 vector<s_replication>::iterator i1; 08717 for(i1=(*i).repl_proc.replication.begin(); i1!=(*i).repl_proc.replication.end(); i1++) { 08718 disp+=lang_get_string(1,(*i).lang,593); 08719 if(line<100) 08720 disp+="0"; 08721 if(line<10) 08722 disp+="0"; 08723 char tmp[64]; 08724 disp+=ltoa(++line,tmp,10); 08725 disp+=": "; 08726 disp+=(*i1).partner; 08727 disp+=" = "; 08728 if((*i1).type==REPL_PUSH) 08729 disp+="PUSH"; 08730 if((*i1).type==REPL_PULL) 08731 disp+="PULL"; 08732 if((*i1).type==REPL_PUSHPULL) 08733 disp+="PUSHPULL"; 08734 disp+=eol; 08735 } 08736 if(line==0) 08737 disp+="(no replications)"+eol; 08738 08739 disp+=lang_get_string(1,(*i).lang,425)+eol; 08740 08741 int ec=0; 08742 dcc_send_msg((*i).socket,disp,ec); 08743 08744 (*i).replication++; 08745 return; 08746 } 08747 if((*i).replication==3001) { 08748 string p=dcc_get_line((*i).in_buff); 08749 if(!p.compare("")) 08750 return; 08751 08752 if(!p.compare(".")) { 08753 string disp=lang_get_string(1,(*i).lang,426)+eol; 08754 int ec=0; 08755 dcc_send_msg((*i).socket,disp,ec); 08756 (*i).replication++; 08757 return; 08758 } 08759 08760 if(!p.compare(".add")) { 08761 string disp=lang_get_string(1,(*i).lang,428)+eol; 08762 08763 vector<s_user>::iterator i1; 08764 for(i1=r_users.begin(); i1!=r_users.end(); i1++) 08765 disp+=(*i1).name+eol; 08766 08767 disp+=lang_get_string(1,(*i).lang,429)+eol; 08768 08769 int ec=0; 08770 dcc_send_msg((*i).socket,disp,ec); 08771 (*i).replication=10000; 08772 return; 08773 } 08774 08775 string p1, p2; 08776 { 08777 int pos=0; 08778 for(unsigned int i1=0; i1<p.length(); i1++) { 08779 if(p[i1]==0x20) { 08780 pos=1; 08781 continue; 08782 } 08783 if(pos==0) 08784 p1+=p[i1]; 08785 if(pos==1) 08786 p2+=p[i1]; 08787 } 08788 } 08789 if(!p1.compare(".remove")) { 08790 int line=0; 08791 08792 vector<s_replication>::iterator i1; 08793 for(i1=(*i).repl_proc.replication.begin(); i1!=(*i).repl_proc.replication.end(); i1++) 08794 if(++line==atol(p2.c_str())) { 08795 (*i).repl_proc.replication.erase(i1); 08796 break; 08797 } 08798 (*i).replication=3000; 08799 return; 08800 } 08801 08802 (*i).replication=3000; 08803 } 08804 if((*i).replication==3002) { 08805 string p=dcc_get_line((*i).in_buff); 08806 if(!p.compare("")) 08807 return; 08808 08809 if(p.compare("y") && p.compare("n") && p.compare("Y") && p.compare("N")) { 08810 string disp=lang_get_string(1,(*i).lang,426)+eol; 08811 int ec=0; 08812 dcc_send_msg((*i).socket,disp,ec); 08813 } else { 08814 if(!p.compare("y") || !p.compare("Y")) { 08815 vector<s_procedure>::iterator i1; 08816 for(i1=r_procedures.begin(); i1!=r_procedures.end(); i1++) { 08817 if(!(*i1).name.compare((*i).repl_proc.name)) { 08818 (*i1).replication.clear(); 08819 vector<s_replication>::iterator i2; 08820 for(i2=(*i).repl_proc.replication.begin(); i2!=(*i).repl_proc.replication.end(); i2++) 08821 (*i1).replication.push_back(*i2); 08822 break; 08823 } 08824 } 08825 08826 string disp=lang_get_string(1,(*i).lang,427)+eol; 08827 int ec=0; 08828 dcc_send_msg((*i).socket,disp,ec); 08829 (*i).replication=1; 08830 return; 08831 } else { 08832 string disp=lang_get_string(1,(*i).lang,162)+eol; 08833 int ec=0; 08834 dcc_send_msg((*i).socket,disp,ec); 08835 (*i).replication=1; 08836 return; 08837 } 08838 } 08839 } 08840 08841 // chandef 08842 if((*i).replication==4000) { 08843 string disp=lang_get_string(1,(*i).lang,424)+eol; 08844 08845 int line=0; 08846 08847 vector<s_replication>::iterator i1; 08848 for(i1=(*i).repl_chandef.replication.begin(); i1!=(*i).repl_chandef.replication.end(); i1++) { 08849 disp+=lang_get_string(1,(*i).lang,593); 08850 if(line<100) 08851 disp+="0"; 08852 if(line<10) 08853 disp+="0"; 08854 char tmp[64]; 08855 disp+=ltoa(++line,tmp,10); 08856 disp+=": "; 08857 disp+=(*i1).partner; 08858 disp+=" = "; 08859 if((*i1).type==REPL_PUSH) 08860 disp+="PUSH"; 08861 if((*i1).type==REPL_PULL) 08862 disp+="PULL"; 08863 if((*i1).type==REPL_PUSHPULL) 08864 disp+="PUSHPULL"; 08865 disp+=eol; 08866 } 08867 if(line==0) 08868 disp+="(no replications)"+eol; 08869 08870 disp+=lang_get_string(1,(*i).lang,425)+eol; 08871 08872 int ec=0; 08873 dcc_send_msg((*i).socket,disp,ec); 08874 08875 (*i).replication++; 08876 return; 08877 } 08878 if((*i).replication==4001) { 08879 string p=dcc_get_line((*i).in_buff); 08880 if(!p.compare("")) 08881 return; 08882 08883 if(!p.compare(".")) { 08884 string disp=lang_get_string(1,(*i).lang,426)+eol; 08885 int ec=0; 08886 dcc_send_msg((*i).socket,disp,ec); 08887 (*i).replication++; 08888 return; 08889 } 08890 08891 if(!p.compare(".add")) { 08892 string disp=lang_get_string(1,(*i).lang,428)+eol; 08893 08894 vector<s_user>::iterator i1; 08895 for(i1=r_users.begin(); i1!=r_users.end(); i1++) 08896 disp+=(*i1).name+eol; 08897 08898 disp+=lang_get_string(1,(*i).lang,429)+eol; 08899 08900 int ec=0; 08901 dcc_send_msg((*i).socket,disp,ec); 08902 (*i).replication=10000; 08903 return; 08904 } 08905 08906 string p1, p2; 08907 { 08908 int pos=0; 08909 for(unsigned int i1=0; i1<p.length(); i1++) { 08910 if(p[i1]==0x20) { 08911 pos=1; 08912 continue; 08913 } 08914 if(pos==0) 08915 p1+=p[i1]; 08916 if(pos==1) 08917 p2+=p[i1]; 08918 } 08919 } 08920 if(!p1.compare(".remove")) { 08921 int line=0; 08922 08923 vector<s_replication>::iterator i1; 08924 for(i1=(*i).repl_chandef.replication.begin(); i1!=(*i).repl_chandef.replication.end(); i1++) 08925 if(++line==atol(p2.c_str())) { 08926 (*i).repl_chandef.replication.erase(i1); 08927 break; 08928 } 08929 (*i).replication=4000; 08930 return; 08931 } 08932 08933 (*i).replication=4000; 08934 } 08935 if((*i).replication==4002) { 08936 string p=dcc_get_line((*i).in_buff); 08937 if(!p.compare("")) 08938 return; 08939 08940 if(p.compare("y") && p.compare("n") && p.compare("Y") && p.compare("N")) { 08941 string disp=lang_get_string(1,(*i).lang,426)+eol; 08942 int ec=0; 08943 dcc_send_msg((*i).socket,disp,ec); 08944 } else { 08945 if(!p.compare("y") || !p.compare("Y")) { 08946 vector<s_channel_def>::iterator i1; 08947 for(i1=r_channel_defs.begin(); i1!=r_channel_defs.end(); i1++) { 08948 if(!(*i1).channel_name.compare((*i).repl_chandef.channel_name)) { 08949 (*i1).replication.clear(); 08950 vector<s_replication>::iterator i2; 08951 for(i2=(*i).repl_chandef.replication.begin(); i2!=(*i).repl_chandef.replication.end(); i2++) 08952 (*i1).replication.push_back(*i2); 08953 break; 08954 } 08955 } 08956 08957 string disp=lang_get_string(1,(*i).lang,427)+eol; 08958 int ec=0; 08959 dcc_send_msg((*i).socket,disp,ec); 08960 (*i).replication=1; 08961 return; 08962 } else { 08963 string disp=lang_get_string(1,(*i).lang,162)+eol; 08964 int ec=0; 08965 dcc_send_msg((*i).socket,disp,ec); 08966 (*i).replication=1; 08967 return; 08968 } 08969 } 08970 } 08971 08972 // private 08973 if((*i).replication==5000) { 08974 string disp=lang_get_string(1,(*i).lang,424)+eol; 08975 08976 int line=0; 08977 08978 vector<s_replication>::iterator i1; 08979 for(i1=(*i).repl_private.replication.begin(); i1!=(*i).repl_private.replication.end(); i1++) { 08980 disp+=lang_get_string(1,(*i).lang,593); 08981 if(line<100) 08982 disp+="0"; 08983 if(line<10) 08984 disp+="0"; 08985 char tmp[64]; 08986 disp+=ltoa(++line,tmp,10); 08987 disp+=": "; 08988 disp+=(*i1).partner; 08989 disp+=" = "; 08990 if((*i1).type==REPL_PUSH) 08991 disp+="PUSH"; 08992 if((*i1).type==REPL_PULL) 08993 disp+="PULL"; 08994 if((*i1).type==REPL_PUSHPULL) 08995 disp+="PUSHPULL"; 08996 disp+=eol; 08997 } 08998 if(line==0) 08999 disp+="(no replications)"+eol; 09000 09001 disp+=lang_get_string(1,(*i).lang,425)+eol; 09002 09003 int ec=0; 09004 dcc_send_msg((*i).socket,disp,ec); 09005 09006 (*i).replication++; 09007 return; 09008 } 09009 if((*i).replication==5001) { 09010 string p=dcc_get_line((*i).in_buff); 09011 if(!p.compare("")) 09012 return; 09013 09014 if(!p.compare(".")) { 09015 string disp=lang_get_string(1,(*i).lang,426)+eol; 09016 int ec=0; 09017 dcc_send_msg((*i).socket,disp,ec); 09018 (*i).replication++; 09019 return; 09020 } 09021 09022 if(!p.compare(".add")) { 09023 string disp=lang_get_string(1,(*i).lang,428)+eol; 09024 09025 vector<s_user>::iterator i1; 09026 for(i1=r_users.begin(); i1!=r_users.end(); i1++) 09027 disp+=(*i1).name+eol; 09028 09029 disp+=lang_get_string(1,(*i).lang,429)+eol; 09030 09031 int ec=0; 09032 dcc_send_msg((*i).socket,disp,ec); 09033 (*i).replication=10000; 09034 return; 09035 } 09036 09037 string p1, p2; 09038 { 09039 int pos=0; 09040 for(unsigned int i1=0; i1<p.length(); i1++) { 09041 if(p[i1]==0x20) { 09042 pos=1; 09043 continue; 09044 } 09045 if(pos==0) 09046 p1+=p[i1]; 09047 if(pos==1) 09048 p2+=p[i1]; 09049 } 09050 } 09051 if(!p1.compare(".remove")) { 09052 int line=0; 09053 09054 vector<s_replication>::iterator i1; 09055 for(i1=(*i).repl_private.replication.begin(); i1!=(*i).repl_private.replication.end(); i1++) 09056 if(++line==atol(p2.c_str())) { 09057 (*i).repl_private.replication.erase(i1); 09058 break; 09059 } 09060 (*i).replication=5000; 09061 return; 09062 } 09063 09064 (*i).replication=5000; 09065 } 09066 if((*i).replication==5002) { 09067 string p=dcc_get_line((*i).in_buff); 09068 if(!p.compare("")) 09069 return; 09070 09071 if(p.compare("y") && p.compare("n") && p.compare("Y") && p.compare("N")) { 09072 string disp=lang_get_string(1,(*i).lang,426)+eol; 09073 int ec=0; 09074 dcc_send_msg((*i).socket,disp,ec); 09075 } else { 09076 if(!p.compare("y") || !p.compare("Y")) { 09077 r_private.replication.clear(); 09078 vector<s_replication>::iterator i2; 09079 for(i2=(*i).repl_private.replication.begin(); i2!=(*i).repl_private.replication.end(); i2++) 09080 r_private.replication.push_back(*i2); 09081 09082 string disp=lang_get_string(1,(*i).lang,427)+eol; 09083 int ec=0; 09084 dcc_send_msg((*i).socket,disp,ec); 09085 (*i).replication=1; 09086 return; 09087 } else { 09088 string disp=lang_get_string(1,(*i).lang,162)+eol; 09089 int ec=0; 09090 dcc_send_msg((*i).socket,disp,ec); 09091 (*i).replication=1; 09092 return; 09093 } 09094 } 09095 } 09096 09097 // .add (universal) 09098 if((*i).replication==10000) { 09099 string p=dcc_get_line((*i).in_buff); 09100 if(!p.compare("")) 09101 return; 09102 09103 bool got=false; 09104 vector<s_user>::iterator i1; 09105 for(i1=r_users.begin(); i1!=r_users.end(); i1++) { 09106 if(!(*i1).name.compare(p)) { 09107 got=true; 09108 break; 09109 } 09110 } 09111 09112 if(!got) { 09113 string disp=lang_get_string(1,(*i).lang,428)+eol; 09114 09115 vector<s_user>::iterator i1; 09116 for(i1=r_users.begin(); i1!=r_users.end(); i1++) 09117 disp+=(*i1).name+eol; 09118 09119 disp+=lang_get_string(1,(*i).lang,429)+eol; 09120 09121 int ec=0; 09122 dcc_send_msg((*i).socket,disp,ec); 09123 (*i).replication=(*i).replication; 09124 return; 09125 } 09126 09127 (*i).repl_add.partner=p; 09128 (*i).repl_add.type=REPL_INVALID; 09129 09130 string disp=lang_get_string(1,(*i).lang,430)+eol; 09131 int ec=0; 09132 dcc_send_msg((*i).socket,disp,ec); 09133 (*i).replication++; 09134 return; 09135 } 09136 if((*i).replication==10001) { 09137 string p=dcc_get_line((*i).in_buff); 09138 if(!p.compare("")) 09139 return; 09140 09141 if(!p.compare("PUSH")) 09142 (*i).repl_add.type=REPL_PUSH; 09143 if(!p.compare("PULL")) 09144 (*i).repl_add.type=REPL_PULL; 09145 if(!p.compare("PUSHPULL")) 09146 (*i).repl_add.type=REPL_PUSHPULL; 09147 09148 if(!p.compare(".")) { 09149 (*i).replication+=2; 09150 return; 09151 } 09152 09153 (*i).repl_add.type==REPL_INVALID?(*i).replication--:(*i).replication++; 09154 09155 if((*i).repl_add.type==REPL_INVALID) { 09156 string disp=lang_get_string(1,(*i).lang,430)+eol; 09157 int ec=0; 09158 dcc_send_msg((*i).socket,disp,ec); 09159 return; 09160 } 09161 09162 return; 09163 } 09164 if((*i).replication==10002) { 09165 s_user u; 09166 vector<s_channel> chs; 09167 logic_partyline_get_user((*i).repl_add.partner,u,chs); 09168 if(!u.replication_partner) { 09169 u.replication_partner=true; 09170 logic_partyline_remove_user(u.name); 09171 logic_partyline_add_user(u,chs); 09172 09173 string disp=lang_get_string(1,(*i).lang,431)+eol; 09174 int ec=0; 09175 dcc_send_msg((*i).socket,disp,ec); 09176 } else { 09177 string disp=lang_get_string(1,(*i).lang,432)+eol; 09178 int ec=0; 09179 dcc_send_msg((*i).socket,disp,ec); 09180 } 09181 (*i).replication++; 09182 return; 09183 } 09184 if((*i).replication==10003) { 09185 if((*i).b_repl_user) { 09186 (*i).repl_user.replication.push_back((*i).repl_add); 09187 (*i).replication=1000; 09188 } 09189 if((*i).b_repl_proc) { 09190 (*i).repl_proc.replication.push_back((*i).repl_add); 09191 (*i).replication=3000; 09192 } 09193 if((*i).b_repl_chandef) { 09194 (*i).repl_chandef.replication.push_back((*i).repl_add); 09195 (*i).replication=4000; 09196 } 09197 if((*i).b_repl_private) { 09198 (*i).repl_private.replication.push_back((*i).repl_add); 09199 (*i).replication=5000; 09200 } 09201 return; 09202 } 09203 }
Here is the call graph for this function: ![]() |
|
Should be called in a loop to process .terminator commands in DCC CHAT/telnet connections.
Definition at line 9213 of file dcc.cpp. References dcc_get_line(), dcc_send_msg(), lang_get_string(), s_user::last_changed, logic_partyline_add_user(), logic_partyline_get_user(), logic_partyline_remove_user(), and s_user::terminator. Referenced by dcc_loop(). 09214 { 09215 if((*i).terminator==1) { 09216 string disp=lang_get_string(1,(*i).lang,456)+eol; 09217 09218 vector<string>::iterator i1; 09219 for(i1=(*i).access_to_users.begin(); i1!=(*i).access_to_users.end(); i1++) { 09220 if(!(*i1).compare("*")) 09221 continue; 09222 09223 s_user u; 09224 vector<s_channel> chs; 09225 logic_partyline_get_user(*i1,u,chs); 09226 09227 if(u.terminator) 09228 disp+=lang_get_string(1,(*i).lang,458); 09229 else 09230 disp+=lang_get_string(1,(*i).lang,457); 09231 09232 disp+=*i1+eol; 09233 } 09234 09235 disp+=lang_get_string(1,(*i).lang,459)+eol; 09236 int ec=0; 09237 dcc_send_msg((*i).socket,disp,ec); 09238 09239 (*i).terminator++; 09240 return; 09241 } 09242 09243 if((*i).terminator==2) { 09244 string p=dcc_get_line((*i).in_buff); 09245 if(!p.compare("")) 09246 return; 09247 09248 if(!p.compare(".")) { 09249 string disp=lang_get_string(1,(*i).lang,460)+eol; 09250 int ec=0; 09251 dcc_send_msg((*i).socket,disp,ec); 09252 09253 (*i).terminator=0; 09254 return; 09255 } 09256 09257 bool got=false; 09258 vector<string>::iterator i1; 09259 for(i1=(*i).access_to_users.begin(); i1!=(*i).access_to_users.end(); i1++) { 09260 if(!(*i1).compare(p)) { 09261 got=true; 09262 break; 09263 } 09264 } 09265 09266 if(!got) { 09267 string disp=lang_get_string(1,(*i).lang,461)+eol; 09268 int ec=0; 09269 dcc_send_msg((*i).socket,disp,ec); 09270 (*i).terminator=1; 09271 return; 09272 } 09273 09274 (*i).terminator_user=p; 09275 (*i).terminator++; 09276 return; 09277 } 09278 09279 if((*i).terminator==3) { 09280 string disp=lang_get_string(1,(*i).lang,462)+eol; 09281 int ec=0; 09282 dcc_send_msg((*i).socket,disp,ec); 09283 (*i).terminator++; 09284 return; 09285 } 09286 09287 if((*i).terminator==4) { 09288 string p=dcc_get_line((*i).in_buff); 09289 if(!p.compare("")) 09290 return; 09291 09292 if(p.compare("y") && p.compare("n") && p.compare("Y") && p.compare("N")) { 09293 string disp=lang_get_string(1,(*i).lang,462)+eol; 09294 int ec=0; 09295 dcc_send_msg((*i).socket,disp,ec); 09296 return; 09297 } else { 09298 s_user u; 09299 vector<s_channel> chs; 09300 logic_partyline_get_user((*i).terminator_user,u,chs); 09301 logic_partyline_remove_user((*i).terminator_user); 09302 u.last_changed=time(NULL); 09303 09304 if(!p.compare("y") || !p.compare("Y")) { 09305 u.terminator=true; 09306 } else { 09307 u.terminator=false; 09308 } 09309 logic_partyline_add_user(u,chs); // this func automatically clears/sets for channels terminator flag according to user.terminator flag, cool, isn't it? :) 09310 09311 (*i).terminator=1; 09312 return; 09313 } 09314 } 09315 }
Here is the call graph for this function: ![]() |
|
Binds DCC server.
Definition at line 18595 of file dcc.cpp. References s_dcc_server::bind_ip, s_socket::cmp(), s_dcc_server::dcc_addr, s_dcc_server::dcc_addr6, dcc_servers, s_dcc_server::group, inet_pton(), log_socket(), s_dcc_server::port, s_dcc_server::server_type, sock_bind(), sock_bind6(), sock_error(), s_dcc_server::socket, and s_dcc_server::using_ipv6. Referenced by logic_exec(). 18596 { 18597 if(ipv==4) { 18598 if(strlen(bind_ip)>32) 18599 return; 18600 18601 unsigned long ip; 18602 unsigned char* i=(unsigned char*)&ip; 18603 i++; 18604 i++; 18605 i++; 18606 char tmp[64]; 18607 unsigned int i1; 18608 int i2=0; 18609 for(i1=0; i1<strlen(bind_ip); i1++) { 18610 if(bind_ip[i1]=='.') 18611 break; 18612 tmp[i2++]=bind_ip[i1]; 18613 } 18614 i1++; 18615 tmp[i2]=0; 18616 *i=(unsigned char)atol(tmp); 18617 i--; 18618 18619 i2=0; 18620 for(; i1<strlen(bind_ip); i1++) { 18621 if(bind_ip[i1]=='.') 18622 break; 18623 tmp[i2++]=bind_ip[i1]; 18624 } 18625 i1++; 18626 tmp[i2]=0; 18627 *i=(unsigned char)atol(tmp); 18628 i--; 18629 18630 i2=0; 18631 for(; i1<strlen(bind_ip); i1++) { 18632 if(bind_ip[i1]=='.') 18633 break; 18634 tmp[i2++]=bind_ip[i1]; 18635 } 18636 i1++; 18637 tmp[i2]=0; 18638 *i=(unsigned char)atol(tmp); 18639 i--; 18640 18641 i2=0; 18642 for(; i1<strlen(bind_ip); i1++) { 18643 if(bind_ip[i1]=='.') 18644 break; 18645 tmp[i2++]=bind_ip[i1]; 18646 } 18647 i1++; 18648 tmp[i2]=0; 18649 *i=(unsigned char)atol(tmp); 18650 18651 int ec=0; 18652 18653 #ifdef _WIN32 18654 in_addr l; 18655 l.S_un.S_addr=ip; 18656 #else 18657 in_addr l; 18658 l.s_addr=ip; 18659 #endif 18660 18661 #if !defined(HIGHFIRST) 18662 # ifdef _WIN32 18663 char ch; 18664 ch=l.S_un.S_un_b.s_b1; 18665 l.S_un.S_un_b.s_b1=l.S_un.S_un_b.s_b4; 18666 l.S_un.S_un_b.s_b4=ch; 18667 ch=l.S_un.S_un_b.s_b2; 18668 l.S_un.S_un_b.s_b2=l.S_un.S_un_b.s_b3; 18669 l.S_un.S_un_b.s_b3=ch; 18670 # else 18671 char ch; 18672 ch=((char*)&l.s_addr)[0]; 18673 ((char*)&l.s_addr)[0]=((char*)&l.s_addr)[3]; 18674 ((char*)&l.s_addr)[3]=ch; 18675 ch=((char*)&l.s_addr)[1]; 18676 ((char*)&l.s_addr)[1]=((char*)&l.s_addr)[2]; 18677 ((char*)&l.s_addr)[2]=ch; 18678 # endif 18679 #endif 18680 18681 s_socket dcc_server=sock_bind(l,bind_port,ec); 18682 18683 if(dcc_server.cmp()==false) { 18684 log_socket(ec,sock_error(ec),"while calling sock_bind in file " __FILE__ " in function " __FUNC__); 18685 return; 18686 } 18687 18688 s_dcc_server s; 18689 s.group=group; 18690 s.using_ipv6=false; 18691 #ifdef _WIN32 18692 s.dcc_addr=l.S_un.S_addr; 18693 #else 18694 s.dcc_addr=l.s_addr; 18695 #endif 18696 s.port=bind_port; 18697 s.bind_ip=bind_ip; 18698 s.socket=dcc_server; 18699 if(server_type.find("\"",0)!=string::npos) 18700 server_type.erase(0,1); 18701 if(server_type.find("\"",0)!=string::npos) 18702 server_type.erase(server_type.find("\"",0),1); 18703 s.server_type=server_type; 18704 18705 dcc_servers.push_back(s); 18706 } 18707 if(ipv==6) { 18708 int ec=0; 18709 s_socket dcc_server=sock_bind6((char*)bind_ip,bind_port,ec); 18710 18711 if(dcc_server.cmp()==false) { 18712 log_socket(ec,sock_error(ec),"while calling sock_bind6 in file " __FILE__ " in function " __FUNC__); 18713 return; 18714 } 18715 18716 s_dcc_server s; 18717 s.group=group; 18718 s.using_ipv6=true; 18719 s.dcc_addr=-1; 18720 inet_pton(AF_INET6,(char*)bind_ip,&s.dcc_addr6); 18721 s.port=bind_port; 18722 s.bind_ip=bind_ip; 18723 s.socket=dcc_server; 18724 if(server_type.find("\"",0)!=string::npos) 18725 server_type.erase(0,1); 18726 if(server_type.find("\"",0)!=string::npos) 18727 server_type.erase(server_type.find("\"",0),1); 18728 s.server_type=server_type; 18729 18730 dcc_servers.push_back(s); 18731 } 18732 }
Here is the call graph for this function: ![]() |
|
Binds telnet server.
Definition at line 18743 of file dcc.cpp. References s_telnet_server::bind_ip, s_socket::cmp(), log_socket(), s_telnet_server::port, sock_bind(), sock_bind6(), sock_error(), s_telnet_server::socket, s_telnet_server::telnet_addr, and telnet_servers. Referenced by logic_exec(). 18744 { 18745 if(ipv==4) { 18746 if(strlen(bind_ip)>32) 18747 return; 18748 18749 unsigned long ip; 18750 unsigned char* i=(unsigned char*)&ip; 18751 i++; 18752 i++; 18753 i++; 18754 char tmp[64]; 18755 unsigned int i1; 18756 int i2=0; 18757 for(i1=0; i1<strlen(bind_ip); i1++) { 18758 if(bind_ip[i1]=='.') 18759 break; 18760 tmp[i2++]=bind_ip[i1]; 18761 } 18762 i1++; 18763 tmp[i2]=0; 18764 *i=(unsigned char)atol(tmp); 18765 i--; 18766 18767 i2=0; 18768 for(; i1<strlen(bind_ip); i1++) { 18769 if(bind_ip[i1]=='.') 18770 break; 18771 tmp[i2++]=bind_ip[i1]; 18772 } 18773 i1++; 18774 tmp[i2]=0; 18775 *i=(unsigned char)atol(tmp); 18776 i--; 18777 18778 i2=0; 18779 for(; i1<strlen(bind_ip); i1++) { 18780 if(bind_ip[i1]=='.') 18781 break; 18782 tmp[i2++]=bind_ip[i1]; 18783 } 18784 i1++; 18785 tmp[i2]=0; 18786 *i=(unsigned char)atol(tmp); 18787 i--; 18788 18789 i2=0; 18790 for(; i1<strlen(bind_ip); i1++) { 18791 if(bind_ip[i1]=='.') 18792 break; 18793 tmp[i2++]=bind_ip[i1]; 18794 } 18795 i1++; 18796 tmp[i2]=0; 18797 *i=(unsigned char)atol(tmp); 18798 18799 int ec=0; 18800 18801 #ifdef _WIN32 18802 in_addr l; 18803 l.S_un.S_addr=ip; 18804 char ch; 18805 ch=l.S_un.S_un_b.s_b1; 18806 l.S_un.S_un_b.s_b1=l.S_un.S_un_b.s_b4; 18807 l.S_un.S_un_b.s_b4=ch; 18808 ch=l.S_un.S_un_b.s_b2; 18809 l.S_un.S_un_b.s_b2=l.S_un.S_un_b.s_b3; 18810 l.S_un.S_un_b.s_b3=ch; 18811 #else 18812 in_addr l; 18813 l.s_addr=ip; 18814 char ch; 18815 ch=((char*)&l.s_addr)[0]; 18816 ((char*)&l.s_addr)[0]=((char*)&l.s_addr)[3]; 18817 ((char*)&l.s_addr)[3]=ch; 18818 ch=((char*)&l.s_addr)[1]; 18819 ((char*)&l.s_addr)[1]=((char*)&l.s_addr)[2]; 18820 ((char*)&l.s_addr)[2]=ch; 18821 #endif 18822 s_socket telnet_server=sock_bind(l,bind_port,ec); 18823 18824 if(telnet_server.cmp()==false) { 18825 log_socket(ec,sock_error(ec),"while calling sock_bind in file " __FILE__ " in function " __FUNC__); 18826 return; 18827 } 18828 18829 s_telnet_server s; 18830 #ifdef _WIN32 18831 s.telnet_addr=l.S_un.S_addr; 18832 #else 18833 s.telnet_addr=l.s_addr; 18834 #endif 18835 s.port=bind_port; 18836 s.bind_ip=bind_ip; 18837 s.socket=telnet_server; 18838 18839 telnet_servers.push_back(s); 18840 } 18841 if(ipv==6) { 18842 int ec=0; 18843 s_socket telnet_server=sock_bind6((char*)bind_ip,bind_port,ec); 18844 18845 if(telnet_server.cmp()==false) { 18846 log_socket(ec,sock_error(ec),"while calling sock_bind6 in file " __FILE__ " in function " __FUNC__); 18847 return; 18848 } 18849 18850 s_telnet_server s; 18851 s.telnet_addr=-1; 18852 s.port=bind_port; 18853 s.bind_ip=bind_ip; 18854 s.socket=telnet_server; 18855 18856 telnet_servers.push_back(s); 18857 } 18858 }
Here is the call graph for this function: ![]() |
|
Notifies user about filesystem events.
Definition at line 18939 of file dcc.cpp. References dcc_check_for_filesystem(), dcc_clients, dcc_send_msg(), dcc_servers, FILESYS_GOT_FILE, FILESYS_GOT_INCOMPLETE, FILESYS_NOT_PUBLISHED, irc_await_dcc_chat(), irc_get_nick(), irc_put(), lang_get_string(), LOW_PRIORITY, and ltoa(). Referenced by filesys_add_file_raw(). 18940 { 18941 char dcc_eol[4]="\n\0"; 18942 char telnet_eol[4]="\r\n\0"; 18943 18944 bool got=false; 18945 18946 vector<s_dcc_client>::iterator i; 18947 for(i=dcc_clients.begin(); i!=dcc_clients.end(); i++) { 18948 if((*i).got_passwd!=3) 18949 continue; 18950 if(!(*i).chat) 18951 continue; 18952 if((*i).as_in_logic.compare(user)) 18953 continue; 18954 string eol=(*i).telnet?telnet_eol:dcc_eol; 18955 18956 got=true; 18957 18958 string disp; 18959 switch(reason) { 18960 case FILESYS_NOT_PUBLISHED: 18961 disp=lang_get_string(1,(*i).lang,274)+eol; 18962 break; 18963 case FILESYS_GOT_FILE: 18964 dcc_check_for_filesystem((*i).as_in_logic); 18965 break; 18966 case FILESYS_GOT_INCOMPLETE: 18967 disp=lang_get_string(1,(*i).lang,400)+eol; 18968 disp+=incomplete_file; 18969 disp+=eol; 18970 break; 18971 } 18972 18973 if(!disp.empty()) { 18974 int ec=0; 18975 dcc_send_msg((*i).socket,disp,ec); 18976 } 18977 } 18978 18979 if(!got && reason==FILESYS_NOT_PUBLISHED) { 18980 string nick=irc_get_nick(user); 18981 if(nick.empty()) 18982 return; 18983 18984 string inv="PRIVMSG "; 18985 inv+=nick; 18986 inv+=" :"; 18987 18988 int dcc_group=0; // TODO: !!! 18989 18990 unsigned long dcc_addr=0; 18991 unsigned short dcc_port=0; 18992 vector<s_dcc_server>::iterator i1; 18993 for(i1=dcc_servers.begin(); i1!=dcc_servers.end(); i1++) { 18994 if((*i1).group==dcc_group) { 18995 dcc_addr=(*i1).dcc_addr; 18996 dcc_port=(*i1).port; 18997 break; 18998 } 18999 } 19000 19001 if(dcc_addr && dcc_port) { 19002 irc_await_dcc_chat(nick,user,dcc_group); 19003 19004 unsigned int ip_=0; 19005 { 19006 char tmp[4]; 19007 memcpy(tmp,&dcc_addr,4); 19008 19009 #if !defined(HIGHFIRST) 19010 // switch bytes: BIG endian (network byte order) 19011 char x; 19012 19013 x=tmp[0]; 19014 tmp[0]=tmp[3]; 19015 tmp[3]=x; 19016 // 19017 x=tmp[1]; 19018 tmp[1]=tmp[2]; 19019 tmp[2]=x; 19020 #endif 19021 19022 memcpy(&ip_,tmp,4); 19023 } 19024 19025 string res="DCC CHAT chat "; 19026 char tmp[64]; 19027 sprintf(tmp,"%u",ip_); 19028 res+=tmp; 19029 res+=" "; 19030 ltoa(dcc_port,tmp,10); 19031 res+=tmp; 19032 19033 inv+="\x01"; 19034 inv+=res; 19035 inv+="\x01"; 19036 19037 irc_put(inv,LOW_PRIORITY); 19038 } 19039 } 19040 if(!got && reason==FILESYS_GOT_INCOMPLETE) { 19041 string nick=irc_get_nick(user); 19042 if(nick.empty()) 19043 return; 19044 19045 string lang="en"; // TODO: !!! 19046 19047 string msg="PRIVMSG "; 19048 msg+=nick; 19049 msg+=" :"; 19050 msg+=lang_get_string(1,lang,400); 19051 irc_put(msg,LOW_PRIORITY); 19052 19053 msg="PRIVMSG "; 19054 msg+=nick; 19055 msg+=" :"; 19056 msg+=incomplete_file; 19057 irc_put(msg,LOW_PRIORITY); 19058 } 19059 }
Here is the call graph for this function: ![]() |
|
Message for partyline channel distribution.
Definition at line 18501 of file dcc.cpp. References dcc_clients, sock_send(), and stats_dcc_chat_bytes_sent(). Referenced by botnet_on_unlink(), and botnet_partyline_event(). 18502 { 18503 vector<s_dcc_client>::iterator i; 18504 for(i=dcc_clients.begin(); i!=dcc_clients.end(); i++) { 18505 if(!(*i).replication_partner && ((*i).chat || (*i).telnet) && (*i).got_passwd==3 && !(*i).partyline_channel.compare(channel)) { 18506 string m=message; 18507 if((*i).telnet) 18508 m+="\r\n"; 18509 else 18510 m+="\n"; 18511 int ec=0; 18512 size_t sent=sock_send((*i).socket,m.c_str(),m.length(),ec); 18513 stats_dcc_chat_bytes_sent(sent); 18514 } 18515 } 18516 }
Here is the call graph for this function: ![]() |
|
Parses message, replaces new line signs.
Definition at line 19070 of file dcc.cpp. Referenced by dcc_check_for_filesystem(). 19071 { 19072 string result; 19073 19074 string m; 19075 for(unsigned int i1=0; i1<msg.length(); i1++) { 19076 if(msg[i1]=='\\') { 19077 if(!(i1+1<msg.length() && msg[i1+1]=='n')) 19078 m+=msg[i1]; 19079 } else 19080 m+=msg[i1]; 19081 if(i1==msg.length()-1 || (i1+1<msg.length() && msg[i1]=='\\' && msg[i1+1]=='n')) { 19082 if((i1+1<msg.length() && msg[i1]=='\\' && msg[i1+1]=='n')) 19083 i1++; 19084 19085 if(!m.empty()) { 19086 //result+="*** "; 19087 result+=m; 19088 result+=eol; 19089 } 19090 m=""; 19091 } 19092 } 19093 result=(string)"***"+eol+result+"***"+eol; 19094 return result; 19095 }
|
|
Called from logic.cpp after rehashing. Applies new configuration to all connected users on DCC/telnet (also BOTNET) connections.
Definition at line 19170 of file dcc.cpp. References dcc_clients, dcc_loop_get_rights(), dcc_send_msg(), lang_get_string(), and lang_subst(). Referenced by logic_rehash(). 19171 { 19172 vector<s_dcc_client>::iterator i; 19173 char dcc_eol[4]="\n\0"; 19174 char telnet_eol[4]="\r\n\0"; 19175 for(i=dcc_clients.begin(); i!=dcc_clients.end(); i++) { 19176 if((*i).got_passwd!=3) 19177 continue; 19178 dcc_loop_get_rights(i); 19179 if((*i).send) 19180 continue; 19181 if((*i).send_from_filesystem) 19182 continue; 19183 if((*i).replication_partner) 19184 continue; 19185 if((*i).ssl_connection) 19186 continue; 19187 if(!(*i).chat) 19188 continue; 19189 string eol=(*i).telnet?telnet_eol:dcc_eol; 19190 string disp=lang_subst(lang_get_string(1,(*i).lang,610),who)+eol; 19191 int ec=0; 19192 dcc_send_msg((*i).socket,disp,ec); 19193 } 19194 }
Here is the call graph for this function: ![]() |
|
Sends file to remote host.
Definition at line 1046 of file dcc.cpp. References s_file::access, DCC_ACCESS_DENIED, dcc_awaiting_send, DCC_IO_ERROR, DCC_NO_SUCH_FILE, dcc_servers, s_dcc_send_file::file_name, FILE_SLASH, files, filesys_dcc_filelist(), HIGH_PRIORITY, inet_ntop(), inet_pton(), s_file::internal_name, irc_get_fullname(), irc_get_host(), irc_get_ident(), irc_is_ircop(), irc_putserv(), lang_get_string(), logic_access_to_filesystem(), logic_find_user(), LOW_PRIORITY, ltoa(), s_dcc_send_file::public_name, s_dcc_send_file::remote_ip, s_dcc_send_file::remote_ip6, s_dcc_send_file::resume_pos, s_dcc_send_file::size, sock_get_address_type(), sock_resolve(), sock_resolve6(), s_dcc_send_file::start_time, s_dcc_send_file::user_name_as_in_logic, and s_dcc_send_file::using_ipv6. Referenced by dcc_loop(), dcc_loop_filesystem(), and irc_loop_process_input(). 01047 { 01048 string ident=irc_get_ident(nick); 01049 string host=irc_get_host(nick); 01050 string full_name=irc_get_fullname(nick); 01051 01052 string user_name=logic_find_user(nick,ident,host,full_name,irc_is_ircop(nick)); 01053 01054 if(!logic_access_to_filesystem(user_name)) 01055 return DCC_ACCESS_DENIED; 01056 01057 vector<s_file> files; 01058 filesys_dcc_filelist(user_name,files,false); 01059 01060 s_file f; 01061 01062 bool got=false; 01063 01064 vector<s_file>::iterator i1; 01065 for(i1=files.begin(); i1!=files.end(); i1++) { 01066 if(!(*i1).public_name.compare(public_name)) { 01067 got=true; 01068 f=*i1; 01069 } 01070 } 01071 01072 if(!got) 01073 return DCC_NO_SUCH_FILE; 01074 01075 got=false; 01076 vector<s_access>::iterator i2; 01077 for(i2=f.access.begin(); i2!=f.access.end(); i2++) 01078 if((*i2).all_users || !(*i2).user_name.compare(user_name) || (*i2).also_unknown) 01079 if((*i2).read) { 01080 if(!from_dcc && (*i2).secure) { 01081 string msg="PRIVMSG "; 01082 msg+=nick; 01083 msg+=" :"; 01084 msg+=lang_get_string(1,"en",333); 01085 irc_putserv(msg.c_str(),false,LOW_PRIORITY); 01086 return DCC_ACCESS_DENIED; 01087 } 01088 got=true; 01089 break; 01090 } 01091 if(!got) 01092 return DCC_ACCESS_DENIED; 01093 01094 bool using_ipv6=false; 01095 in_addr ip; 01096 #ifdef _WIN32 01097 ip.S_un.S_addr=0; 01098 #else 01099 ip.s_addr=0; 01100 #endif 01101 in_addr6_ ip6; 01102 memset(&ip6,0,sizeof(ip6)); 01103 in_addr ip_serv; 01104 #ifdef _WIN32 01105 ip_serv.S_un.S_addr=0; 01106 #else 01107 ip_serv.s_addr=0; 01108 #endif 01109 in_addr6_ ip6_serv; 01110 string bind_ip6; 01111 memset(&ip6_serv,0,sizeof(ip6_serv)); 01112 01113 bool want_ipv6=false; 01114 again_ipv6: 01115 got=false; 01116 vector<s_dcc_server>::iterator i3; 01117 for(i3=dcc_servers.begin(); i3!=dcc_servers.end(); i3++) 01118 if((*i3).group==dcc_group) { 01119 if(!want_ipv6 && !(*i3).using_ipv6) { 01120 using_ipv6=false; 01121 int type=sock_get_address_type(host); 01122 if(type==4) 01123 inet_pton(AF_INET,host.c_str(),&ip); 01124 if(type==0) 01125 ip=sock_resolve(host.c_str(),NULL); 01126 if(type==6) { 01127 want_ipv6=true; 01128 goto again_ipv6; 01129 } 01130 { 01131 #ifdef _WIN32 01132 if(!ip.S_un.S_addr) 01133 #else 01134 if(!ip.s_addr) 01135 #endif 01136 return DCC_IO_ERROR; 01137 } 01138 #ifdef _WIN32 01139 ip_serv.S_un.S_addr=(*i3).dcc_addr; 01140 #else 01141 ip_serv.s_addr=(*i3).dcc_addr; 01142 #endif 01143 } else { 01144 using_ipv6=true; 01145 int type=sock_get_address_type(host); 01146 if(type==0) 01147 ip6=sock_resolve6((char*)host.c_str()); 01148 if(type==6) 01149 inet_pton(AF_INET6,host.c_str(),&ip6); 01150 if(true) { 01151 if(!ip6.bytes[0] && !ip6.bytes[1] && !ip6.bytes[2] && !ip6.bytes[3] 01152 && !ip6.bytes[4] && !ip6.bytes[5] && !ip6.bytes[6] && !ip6.bytes[7] 01153 && !ip6.bytes[8] && !ip6.bytes[9] && !ip6.bytes[10] && !ip6.bytes[11] 01154 && !ip6.bytes[12] && !ip6.bytes[13] && !ip6.bytes[14] && !ip6.bytes[15]) 01155 return DCC_IO_ERROR; 01156 } 01157 memcpy(&ip6_serv,&(*i3).dcc_addr6,sizeof(ip6_serv)); 01158 bind_ip6=(*i3).bind_ip; 01159 if(bind_ip6.find("%",0)!=string::npos) 01160 bind_ip6.erase(bind_ip6.find("%",0),bind_ip6.length()-bind_ip6.find("%",0)); 01161 } 01162 got=true; 01163 break; 01164 } 01165 01166 if(!got) 01167 return DCC_IO_ERROR; 01168 01169 s_dcc_send_file send; 01170 send.user_name_as_in_logic=user_name; 01171 send.resume_pos=0; 01172 send.public_name=public_name; 01173 send.start_time=time(NULL); 01174 send.using_ipv6=using_ipv6; 01175 if(!using_ipv6) { 01176 send.remote_ip=ip; 01177 memset(&send.remote_ip6,0,sizeof(send.remote_ip6)); 01178 } else { 01179 #ifdef _WIN32 01180 send.remote_ip.S_un.S_addr=(unsigned long)-1; 01181 #else 01182 send.remote_ip.s_addr=(unsigned long)-1; 01183 #endif 01184 memcpy(&send.remote_ip6,&ip6,sizeof(send.remote_ip6)); 01185 } 01186 01187 if(!using_ipv6) { 01188 char tmp[4]; 01189 memcpy(tmp,&ip_serv,4); 01190 01191 #if !defined(HIGHFIRST) 01192 // switch bytes: BIG endian (network byte order) 01193 char x; 01194 01195 x=tmp[0]; 01196 tmp[0]=tmp[3]; 01197 tmp[3]=x; 01198 // 01199 x=tmp[1]; 01200 tmp[1]=tmp[2]; 01201 tmp[2]=x; 01202 01203 #endif 01204 memcpy(&ip_serv,tmp,4); 01205 } 01206 01207 send.file_name="." FILE_SLASH "filesystem" FILE_SLASH; 01208 send.file_name+=f.internal_name; 01209 01210 FILE* ff=fopen(send.file_name.c_str(),"rb"); 01211 if(!ff) 01212 return DCC_IO_ERROR; 01213 01214 fseek(ff,0,SEEK_END); 01215 send.size=ftell(ff); 01216 fclose(ff); 01217 01218 dcc_awaiting_send.push_back(send); 01219 01220 string inv="PRIVMSG "; 01221 inv+=nick; 01222 inv+=" :\x01"; 01223 inv+="DCC SEND "; 01224 inv+=public_name; 01225 inv+=" "; 01226 01227 string ip_string; 01228 01229 char tmp[64]; 01230 if(!using_ipv6) { 01231 sprintf(tmp,"%u",ip_serv); 01232 inv+=tmp; 01233 inet_ntop(AF_INET,&ip,tmp,63); 01234 ip_string=tmp; 01235 } else { 01236 inv+=bind_ip6; 01237 ip_string=bind_ip6; 01238 } 01239 inv+=" "; 01240 01241 ltoa((*i3).port,tmp,10); 01242 01243 inv+=tmp; 01244 inv+=" "; 01245 sprintf(tmp,"%u",send.size); 01246 inv+=tmp; 01247 inv+="\x01"; 01248 01249 string inv2="NOTICE "; 01250 inv2+=nick; 01251 inv2+=" :DCC Send "; 01252 inv2+=public_name; 01253 inv2+=" ("; 01254 inv2+=ip_string; 01255 inv2+=")"; 01256 01257 irc_putserv(inv2.c_str(),false,HIGH_PRIORITY); 01258 irc_putserv(inv.c_str(),false,HIGH_PRIORITY); 01259 01260 return 0; 01261 }
Here is the call graph for this function: ![]() |
|
|
Sets password for user.
Definition at line 1406 of file dcc.cpp. References dcc_want_to_upgrade. Referenced by dcc_loop(). 01407 { 01408 if(dcc_want_to_upgrade) 01409 return; 01410 01411 map<string,string> pswd_; 01412 01413 bool got=false; 01414 01415 FILE* in=fopen("pass.txt","r"); 01416 char ln[10240+1]; 01417 while(in && !feof(in)) { 01418 if(fgets(ln,1024*10-1,in)==NULL) 01419 break; 01420 ln[10240]=0; 01421 if(ln[strlen(ln)-1]=='\r') 01422 ln[strlen(ln)-1]=0; 01423 if(ln[strlen(ln)-1]=='\n') 01424 ln[strlen(ln)-1]=0; 01425 if(ln[strlen(ln)-1]=='\r') 01426 ln[strlen(ln)-1]=0; 01427 if(ln[strlen(ln)-1]=='\n') 01428 ln[strlen(ln)-1]=0; 01429 01430 string name, pswd; 01431 int pos=0; 01432 for(unsigned int i1=0; i1<strlen(ln); i1++) { 01433 if(pos==0 && ln[i1]=='=') { 01434 pos++; 01435 continue; 01436 } 01437 if(pos==0) 01438 name+=ln[i1]; 01439 if(pos==1) 01440 pswd+=ln[i1]; 01441 } 01442 01443 pair<string,string> p; 01444 p.first=name; 01445 p.second=pswd; 01446 if(!name.compare(user)) { 01447 p.second=md5pass; 01448 got=true; 01449 } 01450 pswd_.insert(p); 01451 } 01452 if(!got) { 01453 pair<string,string> p; 01454 p.first=user; 01455 p.second=md5pass; 01456 pswd_.insert(p); 01457 } 01458 if(in) 01459 fclose(in); 01460 FILE* f=fopen("pass.txt","w"); 01461 if(f) { 01462 map<string,string>::iterator i1; 01463 for(i1=pswd_.begin(); i1!=pswd_.end(); i1++) 01464 fprintf(f,"%s=%s\n",(*i1).first.c_str(),(*i1).second.c_str()); 01465 fclose(f); 01466 } 01467 }
|
|
Tries to upgrade bot.
Definition at line 833 of file dcc.cpp. References binary_name, dcc_broadcast(), dcc_close_servers(), dcc_killing_user_eol, dcc_killing_user_lang, dcc_send_msg(), dcc_want_to_upgrade, dcc_who_is_killing, s_exec_handle::error, exec_async_exec2(), FILE_SLASH, lang_get_string(), last_new_instance_join, log_bot(), log_free_locks(), logic_on_internal_event(), logic_partyline_backup(), PRIVATE_EVENT_SEVERITY_CODE_ERROR, and PRIVATE_EVENT_SEVERITY_CODE_INFORMATIONAL. Referenced by dcc_loop(). 00834 { 00835 string path="upgrade" FILE_SLASH; 00836 path+=new_file_name; 00837 { 00838 FILE* f=fopen(path.c_str(),"rb"); 00839 if(f==NULL) { 00840 string disp=lang_get_string(1,(*i).lang,630)+eol; 00841 int ec=0; 00842 dcc_send_msg((*i).socket,disp,ec); 00843 return; 00844 } else { 00845 fclose(f); 00846 } 00847 } 00848 dcc_killing_user_eol=eol; 00849 dcc_killing_user_socket=&((*i).socket); 00850 00851 char* tmp=new char[(*i).as_in_logic.length()+128]; 00852 sprintf(tmp,"%s%s","UPGRADE by ",(*i).as_in_logic.c_str()); 00853 log_bot(tmp); 00854 dcc_broadcast(tmp); 00855 delete[] tmp; 00856 tmp=NULL; 00857 00858 logic_on_internal_event("@upgrade@",(*i).as_in_logic,path,"","",PRIVATE_EVENT_SEVERITY_CODE_INFORMATIONAL,"",""); 00859 00860 dcc_close_servers(); 00861 00862 log_free_locks(); 00863 00864 logic_partyline_backup((*i).as_in_logic); 00865 00866 string msg="Entering UPGRADE state. All server sockets have been closed. Spawning new instance."; 00867 log_bot(msg.c_str()); 00868 dcc_broadcast(msg); 00869 00870 #ifndef _WIN32 00871 chmod(path.c_str(),S_IRWXU); 00872 #endif 00873 00874 extern string binary_name; 00875 string arg="--upgrade="; 00876 string tmp2=binary_name; 00877 while(tmp2.find(FILE_SLASH,0)!=string::npos) 00878 tmp2.erase(0,tmp2.find(FILE_SLASH,0)+1); 00879 arg+=tmp2; 00880 00881 string tmp3=(string)"\""+path+"\""; 00882 s_exec_handle* h=exec_async_exec2(tmp3.c_str(),arg.c_str(),"." FILE_SLASH); 00883 00884 if(!h || h->error) { 00885 string disp=lang_get_string(1,(*i).lang,631)+eol; 00886 int ec=0; 00887 dcc_send_msg((*i).socket,disp,ec); 00888 dcc_want_to_upgrade=false; 00889 char msg1[]="UPGRADE panic! Error spawning new instance. You should use .restart command now."; 00890 log_bot(msg1); 00891 00892 logic_on_internal_event("@upgrade@",(*i).as_in_logic,path,"","",PRIVATE_EVENT_SEVERITY_CODE_ERROR,msg1,""); 00893 } else { 00894 string disp=lang_get_string(1,(*i).lang,632)+eol; 00895 int ec=0; 00896 dcc_send_msg((*i).socket,disp,ec); 00897 char msg1[]="UPGRADE: New instance spawned, waiting for it to come in."; 00898 log_bot(msg1); 00899 00900 logic_on_internal_event("@upgrade@",(*i).as_in_logic,path,"","",PRIVATE_EVENT_SEVERITY_CODE_INFORMATIONAL,msg1,""); 00901 00902 last_new_instance_join=time(NULL); 00903 dcc_killing_user_socket=&(*i).socket; 00904 dcc_who_is_killing=(*i).as_in_logic; 00905 dcc_killing_user_lang=(*i).lang; 00906 dcc_want_to_upgrade=true; 00907 } 00908 }
Here is the call graph for this function: ![]() |
|
Called in UPGRADE state, to inform user who initiated .upgrade command that another instance is on channel.
Definition at line 921 of file dcc.cpp. References s_socket::cmp(), dcc_killing_user_eol, dcc_killing_user_lang, dcc_send_msg(), lang_get_string(), and last_new_instance_join. Referenced by logic_on_join(). 00922 { 00923 last_new_instance_join=time(NULL); 00924 string eol=dcc_killing_user_eol; 00925 s_socket* s=dcc_killing_user_socket; 00926 string lang=dcc_killing_user_lang; 00927 if(s->cmp()) { 00928 string disp=lang_get_string(1,lang,633)+eol; 00929 disp+=" "; 00930 disp+=channel+eol; 00931 disp+=" "; 00932 disp+=nick; 00933 disp+="!"; 00934 disp+=ident; 00935 disp+="@"; 00936 disp+=host; 00937 disp+=" * "; 00938 disp+=fullname; 00939 disp+=eol; 00940 int ec=0; 00941 dcc_send_msg(*s,disp,ec); 00942 } 00943 }
Here is the call graph for this function: ![]() |
|
Called in UPGRADE state, to inform user who initiated .upgrade command that another instance on some channel gets some mode.
Definition at line 957 of file dcc.cpp. References s_socket::cmp(), dcc_killing_user_eol, dcc_killing_user_lang, dcc_send_msg(), and lang_get_string(). Referenced by logic_exec(), and logic_validate(). 00958 { 00959 string eol=dcc_killing_user_eol; 00960 s_socket* s=dcc_killing_user_socket; 00961 string lang=dcc_killing_user_lang; 00962 if(s->cmp()) { 00963 string disp=lang_get_string(1,lang,634)+eol; 00964 disp+=" "; 00965 disp+=channel; 00966 disp+=" "; 00967 disp+=mode; 00968 disp+=eol; 00969 disp+=" "; 00970 disp+=nick; 00971 disp+="!"; 00972 disp+=ident; 00973 disp+="@"; 00974 disp+=host; 00975 disp+=" * "; 00976 disp+=fullname; 00977 disp+=eol; 00978 int ec=0; 00979 dcc_send_msg(*s,disp,ec); 00980 } 00981 }
Here is the call graph for this function: ![]() |
|
Called in UPGRADE state, to inform user who initiated .upgrade command that another instance changed its nick.
Definition at line 994 of file dcc.cpp. References s_socket::cmp(), dcc_killing_user_eol, dcc_killing_user_lang, dcc_send_msg(), and lang_get_string(). Referenced by logic_on_nick_change(). 00995 { 00996 string eol=dcc_killing_user_eol; 00997 s_socket* s=dcc_killing_user_socket; 00998 string lang=dcc_killing_user_lang; 00999 if(s->cmp()) { 01000 string disp=lang_get_string(1,lang,635); 01001 disp+=" "; 01002 disp+=new_nick; 01003 disp+=eol; 01004 disp+=" "; 01005 disp+=nick; 01006 disp+="!"; 01007 disp+=ident; 01008 disp+="@"; 01009 disp+=host; 01010 disp+=" * "; 01011 disp+=fullname; 01012 disp+=eol; 01013 int ec=0; 01014 dcc_send_msg(*s,disp,ec); 01015 } 01016 }
Here is the call graph for this function: ![]() |
|
Message for partyline user's pong.
Definition at line 18527 of file dcc.cpp. Referenced by botnet_partyline_event(). 18528 { 18529 vector<s_dcc_client>::iterator i; 18530 for(i=dcc_clients.begin(); i!=dcc_clients.end(); i++) { 18531 if(!(*i).replication_partner && ((*i).chat || (*i).telnet) && (*i).got_passwd==3 && !(*i).as_in_logic.compare(user)) { 18532 string eol; 18533 if((*i).telnet) 18534 eol+="\r\n"; 18535 else 18536 eol+="\n"; 18537 18538 string disp=lang_subst(lang_get_string(1,(*i).lang,648),origin_bot)+eol; 18539 time_t now=time(NULL); 18540 time_t origin=atol(time_.c_str()); 18541 char tmp[128]; 18542 ltoa((long)now-origin,tmp,10); 18543 disp=lang_subst(disp,tmp); // not +eol !!! 18544 int ec=0; 18545 dcc_send_msg((*i).socket,disp,ec); 18546 } 18547 } 18548 }
|
|
Called when 0x01-quoted PRIVMSG has been received to initialise DCC CHAT or DCC SEND connection.
Definition at line 1480 of file dcc.cpp. References s_user::access_to_filesystem, s_user::access_to_partyline, s_dcc_client::as_in_logic, byteReverse(), s_dcc_client::chat, s_dcc_request_whois::clear(), s_socket::clear(), s_socket::cmp(), s_user_to_lag::cnt, conf_getvar(), dcc_awaiting_send, dcc_check_limit(), dcc_clients, dcc_get_num_of_transfers(), dcc_request_whois, s_dcc_client::dcc_send, dcc_to_resume, s_dcc_client::edit_user, s_dcc_client_to_resume::file_name, s_dcc_client_to_resume::file_size, FILESYS_ALREADY_EXISTS, filesys_check_add_file_raw(), filesys_dcc_check_for_resume(), s_dcc_client::filesystem, s_dcc_client::fullname, s_dcc_client::got_passwd, s_dcc_client::got_user_name, HIGH_PRIORITY, s_dcc_client::host, s_dcc_request_whois::host_mask, s_dcc_client::ident, inet_ntop(), inet_pton(), s_dcc_client_to_resume::ip_4, s_dcc_client_to_resume::ip_6, s_dcc_client_to_resume::ip_addr4, s_dcc_client_to_resume::ip_addr6, irc_get_fullname(), irc_get_host(), irc_get_ident(), irc_is_ircop(), irc_putserv(), s_dcc_client::s_dcc_client_send::is_file_server_proto, lang_get_string(), lang_subst(), s_user_to_lag::last_try, log_bot(), log_debug(), log_socket(), logic_find_user(), logic_partyline_get_user(), LOW_PRIORITY, ltoa(), s_dcc_client::new_user, s_dcc_request_whois::nick, s_dcc_client_to_resume::nick, s_dcc_client::nick, s_user_to_lag::notified, s_dcc_client::s_dcc_client_send::original_name, s_dcc_client_to_resume::port, s_dcc_client::resume_pos, s_dcc_client_to_resume::resume_position, s_dcc_client::send, s_dcc_client::send_from_filesystem, s_dcc_client::server_socket, s_dcc_client::s_dcc_client_send::size, sock_connect(), sock_error(), sock_resolve(), sock_resolve6(), s_dcc_client::socket, s_dcc_request_whois::start, s_dcc_client_to_resume::start_time, s_dcc_request_whois::str, s_dcc_client::telnet, s_user_to_lag::user_name, s_dcc_client_to_resume::user_name, users_to_lag, and s_dcc_client_to_resume::using_ipv6. Referenced by irc_loop_process_input(), and irc_RPL_WHOISUSER(). 01481 { 01482 if(strstr(str,"DCC ")==NULL) 01483 return; 01484 01485 string user_name; 01486 { 01487 if(irc_get_host(nick).empty()) { 01488 bool got=false; 01489 vector<s_dcc_request_whois>::iterator i1; 01490 l1: 01491 for(i1=dcc_request_whois.begin(); i1!=dcc_request_whois.end(); i1++) { 01492 if((*i1).start+120<time(NULL)) { 01493 dcc_request_whois.erase(i1); 01494 goto l1; 01495 } 01496 } 01497 for(i1=dcc_request_whois.begin(); i1!=dcc_request_whois.end(); i1++) { 01498 if(!(*i1).nick.compare(nick) && (*i1).got_whois) { 01499 user_name=logic_find_user(nick,(*i1).ident,(*i1).host,(*i1).full_name,(*i1).irc_op); 01500 got=true; 01501 break; 01502 } 01503 } 01504 01505 if(!got) { 01506 s_dcc_request_whois r; 01507 r.clear(); 01508 time(&r.start); 01509 r.str=str; 01510 r.nick=nick; 01511 r.host_mask=host_mask; 01512 dcc_request_whois.push_back(r); 01513 01514 string msg="WHOIS "; 01515 msg+=nick; 01516 irc_putserv(msg.c_str(),true,HIGH_PRIORITY); 01517 return; 01518 } 01519 } else 01520 user_name=logic_find_user(nick,irc_get_ident(nick), irc_get_host(nick), irc_get_fullname(nick), irc_is_ircop(nick)); 01521 vector<s_user_to_lag>::iterator i1; 01522 again: 01523 for(i1=users_to_lag.begin(); i1!=users_to_lag.end(); i1++) { 01524 if((*i1).last_try+atol(conf_getvar("ctcp_lag_user_seconds").c_str())<time(NULL)) { 01525 users_to_lag.erase(i1); 01526 goto again; 01527 } 01528 } 01529 bool got=false; 01530 for(i1=users_to_lag.begin(); i1!=users_to_lag.end(); i1++) { 01531 if(!(*i1).user_name.compare(user_name)) { 01532 (*i1).cnt++; 01533 (*i1).last_try=time(NULL); 01534 got=true; 01535 break; 01536 } 01537 } 01538 if(got) { 01539 if((*i1).cnt>atol(conf_getvar("ctcp_lag_user_msgs").c_str())) { 01540 time_t x=(*i1).last_try; 01541 time_t now=time(NULL); 01542 while((signed)x>0 && (*i1).cnt>0 && (signed)now-(signed)x>atol(conf_getvar("ctcp_lag_user_seconds").c_str())) { 01543 x-=atol(conf_getvar("ctcp_lag_user_seconds").c_str()); 01544 (*i1).cnt--; 01545 } 01546 if((*i1).cnt>atol(conf_getvar("ctcp_lag_user_msgs").c_str())) { 01547 if(!(*i1).notified) { 01548 (*i1).notified=true; 01549 string msg="PRIVMSG "; 01550 msg+=nick; 01551 msg+=" :"; 01552 string lang="en"; // TODO: !!! 01553 msg+=lang_get_string(1,lang,446); 01554 irc_putserv(msg.c_str(),false,LOW_PRIORITY); 01555 } 01556 return; 01557 } 01558 if((*i1).cnt==0) { 01559 (*i1).cnt=1; 01560 (*i1).notified=false; 01561 } 01562 } 01563 } else { 01564 s_user_to_lag u; 01565 u.cnt=1; 01566 u.last_try=time(NULL); 01567 u.user_name=user_name; 01568 u.notified=false; 01569 users_to_lag.push_back(u); 01570 } 01571 } 01572 01573 if((strlen(str)>=14 && str[0]=='D' && str[1]=='C' && str[2]=='C' && str[3]==' ' && str[4]=='C' && str[5]=='H' && str[6]=='A' && str[7]=='T' && str[8]==' ' && str[9]=='c' && str[10]=='h' && str[11]=='a' && str[12]=='t' && str[13]==' ') || 01574 (strlen(str)>=9 && str[0]=='D' && str[1]=='C' && str[2]=='C' && str[3]==' ' && str[4]=='S' && str[5]=='E' && str[6]=='N' && str[7]=='D' && str[8]==' ')) { 01575 bool send=str[4]=='S'; 01576 01577 string user_name_as_in_logic=user_name; 01578 01579 { 01580 s_user u; 01581 vector<s_channel> chs; 01582 logic_partyline_get_user(user_name_as_in_logic,u,chs); 01583 if(send && !u.access_to_filesystem) 01584 return; 01585 if(!send && !u.access_to_partyline) 01586 return; 01587 } 01588 01589 string file_name; 01590 01591 int begin_pos=14; 01592 01593 if(send) { 01594 if(dcc_get_num_of_transfers()>=atol(conf_getvar("dcc_max_transfers").c_str())) { 01595 string msg="PRIVMSG "; 01596 msg+=nick; 01597 msg+=" :"; 01598 string lang="en"; // TODO: !!! 01599 msg+=lang_get_string(1,lang,445); 01600 irc_putserv(msg.c_str(),false,LOW_PRIORITY); 01601 return; 01602 } 01603 01604 int i1=9; 01605 for(; str[i1]!=0; i1++) { 01606 if(str[i1]==0x20) 01607 break; 01608 file_name+=str[i1]; 01609 } 01610 if(str[i1]==0x20) 01611 i1++; 01612 begin_pos=i1; 01613 } 01614 01615 string ip_, port_; 01616 int i1=begin_pos; 01617 for(; str[i1]!=0; i1++) { 01618 if(str[i1]==0x20) 01619 break; 01620 ip_+=str[i1]; 01621 } 01622 if(str[i1]!=0) 01623 i1++; 01624 for(; str[i1]!=0; i1++) { 01625 if(str[i1]==0x20) 01626 break; 01627 port_+=str[i1]; 01628 } 01629 01630 if(str[i1]!=0) 01631 i1++; 01632 01633 string size; 01634 01635 if(send) { 01636 while(str[i1]!=0 && str[i1]==0x20) 01637 i1++; 01638 for(; str[i1]!=0; i1++) { 01639 if(str[i1]==0x20) 01640 break; 01641 size+=str[i1]; 01642 } 01643 } 01644 01645 long ip=0; 01646 string ip_addr; 01647 in_addr6_ ip6; 01648 memset(&ip6,0,sizeof(ip6)); 01649 bool got_ipv6=false; 01650 long i_size=atol(size.c_str()); 01651 unsigned short port=(unsigned short)atol(port_.c_str()); 01652 01653 if(ip_.find(":",0)==string::npos && ip_.find(".",0)==string::npos) { 01654 got_ipv6=false; 01655 01656 long ip=atol(ip_.c_str()); 01657 byteReverse((unsigned char*)&ip,1); // for BIG endian machines 01658 unsigned char* i=(unsigned char*)&ip; 01659 char tmp[64]; 01660 01661 ltoa(*i,tmp,10); 01662 ip_addr=(string)"."+tmp; 01663 i++; 01664 01665 ltoa(*i,tmp,10); 01666 ip_addr=(string)"."+tmp+ip_addr; 01667 i++; 01668 01669 ltoa(*i,tmp,10); 01670 ip_addr=(string)"."+tmp+ip_addr; 01671 i++; 01672 01673 ltoa(*i,tmp,10); 01674 ip_addr=(string)tmp+ip_addr; 01675 i++; 01676 } 01677 if(ip_.find(":",0)==string::npos && ip_.find(".",0)!=string::npos) { 01678 got_ipv6=false; 01679 if(inet_pton(AF_INET,ip_.c_str(),&ip)==1) { 01680 ip_addr=ip_; 01681 } else 01682 return; // error 01683 } 01684 if(ip_.find(":",0)!=string::npos) { 01685 got_ipv6=true; 01686 if(inet_pton(AF_INET6,ip_.c_str(),&ip6)==1) { 01687 ip_addr=ip_; 01688 } else 01689 return; // error 01690 } 01691 01692 string dcc_bind_ip=conf_getvar("dcc_bind_ip"); 01693 if(dcc_bind_ip.empty()) 01694 dcc_bind_ip="0.0.0.0"; 01695 string dcc_bind_ip6=conf_getvar("dcc_bind_ip6"); 01696 if(dcc_bind_ip6.empty()) 01697 dcc_bind_ip6="::"; 01698 01699 if(send) { 01700 size_t got_bytes; 01701 bool resume=filesys_dcc_check_for_resume(user_name_as_in_logic,file_name,got_bytes); 01702 if(resume) { 01703 string msg="PRIVMSG "; 01704 msg+=nick; 01705 msg+=" :\x01" "DCC RESUME "; 01706 msg+=file_name; 01707 msg+=" "; 01708 msg+=port_; 01709 msg+=" "; 01710 char tmp[64]; 01711 ltoa((long)got_bytes,tmp,10); 01712 msg+=tmp; 01713 msg+="\x01"; 01714 irc_putserv(msg.c_str(),false,LOW_PRIORITY); 01715 01716 s_dcc_client_to_resume res; 01717 res.file_name=file_name; 01718 res.file_size=i_size; 01719 res.using_ipv6=got_ipv6; 01720 if(!got_ipv6) { 01721 res.ip_addr4=ip_; 01722 res.ip_4=ip; 01723 01724 res.ip_addr6=""; 01725 memset(&res.ip_6,0,sizeof(res.ip_6)); 01726 } else { 01727 res.ip_addr4=""; 01728 res.ip_4=0; 01729 01730 res.ip_addr6=ip_; 01731 res.ip_6=ip6; 01732 } 01733 res.nick=nick; 01734 res.port=port; 01735 res.start_time=time(NULL); 01736 res.resume_position=got_bytes; 01737 res.user_name=user_name_as_in_logic; 01738 01739 dcc_to_resume.push_back(res); 01740 return; 01741 } else { 01742 int ec=filesys_check_add_file_raw(file_name,user_name_as_in_logic); 01743 if(ec==FILESYS_ALREADY_EXISTS) { 01744 string msg="PRIVMSG "; 01745 msg+=nick; 01746 msg+=" :"; 01747 01748 string lang="en"; // TODO: !!! 01749 string m=lang_subst(lang_get_string(1,lang,444),file_name); 01750 01751 msg+=m; 01752 irc_putserv(msg.c_str(),false,LOW_PRIORITY); 01753 return; 01754 } 01755 } 01756 } 01757 01758 { 01759 bool spoofing=false; 01760 in_addr6_ supplied6; 01761 in_addr6_ originator6; 01762 in_addr supplied4; 01763 in_addr originator4; 01764 if(got_ipv6) { 01765 supplied6=sock_resolve6((char*)ip_addr.c_str()); 01766 originator6=sock_resolve6((char*)irc_get_host(nick).c_str()); 01767 unsigned char sum_supplied=0; 01768 unsigned char sum_originator=0; 01769 for(int i1=0; i1<sizeof(supplied6); i1++) { 01770 sum_supplied|=((unsigned char*)&supplied6)[i1]; 01771 sum_originator|=((unsigned char*)&originator6)[i1]; 01772 if(((unsigned char*)&supplied6)[i1]!=((unsigned char*)&originator6)[i1]) { 01773 spoofing=true; 01774 break; 01775 } 01776 } 01777 if(!sum_supplied || !sum_originator) 01778 spoofing=true; // some of addresses are zero 01779 } else { 01780 supplied4=sock_resolve(ip_addr.c_str(),NULL); 01781 originator4=sock_resolve(irc_get_host(nick).c_str(),NULL); 01782 unsigned char sum_supplied=0; 01783 unsigned char sum_originator=0; 01784 for(int i1=0; i1<sizeof(supplied4); i1++) { 01785 sum_supplied|=((unsigned char*)&supplied4)[i1]; 01786 sum_originator|=((unsigned char*)&originator4)[i1]; 01787 if(((unsigned char*)&supplied4)[i1]!=((unsigned char*)&originator4)[i1]) { 01788 spoofing=true; 01789 break; 01790 } 01791 } 01792 if(!sum_supplied || !sum_originator) 01793 spoofing=true; // some of addresses are zero 01794 } 01795 if(spoofing) { 01796 string msg="DCC IP address spoofing from user "; 01797 msg+=host_mask; 01798 msg+=" with supplied IPv"; 01799 msg+=(got_ipv6?"6":"4"); 01800 msg+=" address \""; 01801 msg+=ip_; 01802 msg+="\" translated to "; 01803 char tmp[128+1]; 01804 tmp[0]=tmp[128]=0; 01805 if(got_ipv6) 01806 inet_ntop(AF_INET6,(const void*)&supplied6,tmp,128); 01807 else 01808 inet_ntop(AF_INET,(const void*)&supplied4,tmp,128); 01809 msg+=tmp; 01810 msg+=", but host of sender of CTCP message was decoded/and/or/DNS-translated to IPv"; 01811 msg+=(got_ipv6?"6":"4"); 01812 msg+=" address "; 01813 tmp[0]=tmp[128]=0; 01814 if(got_ipv6) 01815 inet_ntop(AF_INET6,(const void*)&originator6,tmp,128); 01816 else 01817 inet_ntop(AF_INET,(const void*)&originator4,tmp,128); 01818 msg+=tmp; 01819 log_bot(msg.c_str()); 01820 return; 01821 } 01822 } 01823 01824 int ec=0; 01825 s_socket s; 01826 if(!got_ipv6) 01827 s=sock_connect((char*)dcc_bind_ip.c_str(),(char*)ip_addr.c_str(),port,ec,true); 01828 else 01829 s=sock_connect((char*)dcc_bind_ip6.c_str(),(char*)ip_addr.c_str(),port,ec,true); 01830 if(s.cmp()==false || ec) { 01831 log_socket(ec,sock_error(ec),"while calling sock_connect in file " __FILE__ " in function " __FUNC__); 01832 return; 01833 } 01834 01835 s_dcc_client c; 01836 01837 c.nick=nick; 01838 c.ident=irc_get_ident(nick); 01839 c.host=irc_get_host(nick); 01840 c.fullname=irc_get_fullname(nick); 01841 01842 c.resume_pos=0; 01843 01844 c.chat=!send; 01845 c.send=send; 01846 c.send_from_filesystem=false; 01847 c.socket=s; 01848 01849 c.server_socket.clear(); 01850 c.telnet=false; 01851 c.got_passwd=0; 01852 c.new_user=0; 01853 c.edit_user=0; 01854 c.filesystem=0; 01855 c.as_in_logic=user_name_as_in_logic; 01856 c.got_user_name=(c.as_in_logic.empty()?false:true); 01857 01858 if(send) { 01859 c.dcc_send.size=i_size; 01860 c.dcc_send.original_name=file_name; 01861 c.dcc_send.is_file_server_proto=false; 01862 } 01863 01864 dcc_clients.push_back(c); 01865 dcc_check_limit(); 01866 } 01867 01868 if(strlen(str)>=11 && str[0]=='D' && str[1]=='C' && str[2]=='C' && str[3]==' ' && str[4]=='A' && str[5]=='C' && str[6]=='C' && str[7]=='E' && str[8]=='P' && str[9]=='T' && str[10]==' ') { 01869 if(dcc_get_num_of_transfers()>=atol(conf_getvar("dcc_max_transfers").c_str())) { 01870 string msg="PRIVMSG "; 01871 msg+=nick; 01872 msg+=" :"; 01873 string lang="en"; // TODO: !!! 01874 msg+=lang_get_string(1,lang,445); 01875 irc_putserv(msg.c_str(),false,HIGH_PRIORITY); 01876 return; 01877 } 01878 01879 string file_name; 01880 01881 int begin_pos=11; 01882 01883 bool send=true; 01884 if(send) { 01885 int i1=11; 01886 for(; str[i1]!=0; i1++) { 01887 if(str[i1]==0x20) 01888 break; 01889 file_name+=str[i1]; 01890 } 01891 if(str[i1]==0x20) 01892 i1++; 01893 begin_pos=i1; 01894 } 01895 01896 string user_name_as_in_logic=user_name; 01897 01898 { 01899 s_user u; 01900 vector<s_channel> chs; 01901 logic_partyline_get_user(user_name_as_in_logic,u,chs); 01902 if(send && !u.access_to_filesystem) 01903 return; 01904 if(!send && !u.access_to_partyline) 01905 return; 01906 } 01907 01908 string port_, position_; 01909 int i1=begin_pos; 01910 for(; str[i1]!=0; i1++) { 01911 if(str[i1]==0x20) 01912 break; 01913 port_+=str[i1]; 01914 } 01915 if(str[i1]!=0) 01916 i1++; 01917 for(; str[i1]!=0; i1++) { 01918 if(str[i1]==0x20) 01919 break; 01920 position_+=str[i1]; 01921 } 01922 01923 if(str[i1]!=0) 01924 i1++; 01925 01926 unsigned short port=(unsigned short)atol(port_.c_str()); 01927 01928 { 01929 bool got=false; 01930 vector<s_dcc_client_to_resume>::iterator i1; 01931 for(i1=dcc_to_resume.begin(); i1!=dcc_to_resume.end(); i1++) 01932 // BEGIN bug in mIRC workaround 01933 //if(!(*i1).file_name.compare(file_name) && (*i1).port==port && !(*i1).nick.compare(nick) && !(*i1).user_name.compare(user_name_as_in_logic)) { 01934 if(!(*i1).nick.compare(nick) && !(*i1).user_name.compare(user_name_as_in_logic)) { 01935 file_name=(*i1).file_name; 01936 port=(*i1).port; 01937 char tmp[64]; 01938 ltoa((long)(*i1).resume_position,tmp,10); 01939 position_=tmp; 01940 // END bug in mIRC workaround 01941 got=true; 01942 break; 01943 } 01944 01945 if(!got) { 01946 // huh! error! 01947 log_debug("in file " __FILE__ " in function " __FUNC__ " occurred panic: cannot find entry for DCC RESUME! huh?!"); 01948 return; 01949 } 01950 01951 s_dcc_client_to_resume res=*i1; 01952 dcc_to_resume.erase(i1); 01953 01954 size_t i_size=res.file_size; 01955 string ip_addr; 01956 if(!res.using_ipv6) 01957 ip_addr=res.ip_addr4; 01958 else 01959 ip_addr=res.ip_addr6; 01960 01961 string dcc_bind_ip=conf_getvar("dcc_bind_ip"); 01962 if(dcc_bind_ip.empty()) 01963 dcc_bind_ip="0.0.0.0"; 01964 string dcc_bind_ip6=conf_getvar("dcc_bind_ip6"); 01965 if(dcc_bind_ip6.empty()) 01966 dcc_bind_ip6="::"; 01967 01968 int ec=0; 01969 s_socket s; 01970 if(!res.using_ipv6) 01971 s=sock_connect((char*)dcc_bind_ip.c_str(),(char*)ip_addr.c_str(),port,ec,true); 01972 else 01973 s=sock_connect((char*)dcc_bind_ip6.c_str(),(char*)ip_addr.c_str(),port,ec,true); 01974 if(s.cmp()==false || ec) { 01975 log_socket(ec,sock_error(ec),"while calling sock_connect in file " __FILE__ " in function " __FUNC__); 01976 return; 01977 } 01978 01979 s_dcc_client c; 01980 01981 c.nick=nick; 01982 c.ident=irc_get_ident(nick); 01983 c.host=irc_get_host(nick); 01984 c.fullname=irc_get_fullname(nick); 01985 01986 c.resume_pos=atol(position_.c_str()); 01987 01988 c.chat=!send; 01989 c.send=send; 01990 c.send_from_filesystem=false; 01991 c.socket=s; 01992 01993 c.server_socket.clear(); 01994 c.telnet=false; 01995 c.got_passwd=0; 01996 c.new_user=0; 01997 c.edit_user=0; 01998 c.filesystem=0; 01999 c.as_in_logic=user_name_as_in_logic; 02000 c.got_user_name=(c.as_in_logic.empty()?false:true); 02001 02002 c.dcc_send.size=i_size; 02003 c.dcc_send.original_name=file_name; 02004 c.dcc_send.is_file_server_proto=false; 02005 02006 dcc_clients.push_back(c); 02007 dcc_check_limit(); 02008 } 02009 } 02010 02011 if((strlen(str)>=11 && str[0]=='D' && str[1]=='C' && str[2]=='C' && str[3]==' ' && str[4]=='R' && str[5]=='E' && str[6]=='S' && str[7]=='U' && str[8]=='M' && str[9]=='E' && str[10]==' ')) { 02012 if(dcc_get_num_of_transfers()>=atol(conf_getvar("dcc_max_transfers").c_str())) { 02013 string msg="PRIVMSG "; 02014 msg+=nick; 02015 msg+=" :"; 02016 string lang="en"; // TODO: !!! 02017 msg+=lang_get_string(1,lang,445); 02018 irc_putserv(msg.c_str(),false,HIGH_PRIORITY); 02019 return; 02020 } 02021 02022 //bool send=false; 02023 02024 string file_name; 02025 02026 int begin_pos=11; 02027 02028 string user_name_as_in_logic=user_name; 02029 02030 { 02031 s_user u; 02032 vector<s_channel> chs; 02033 logic_partyline_get_user(user_name_as_in_logic,u,chs); 02034 if(!u.access_to_filesystem) 02035 return; 02036 } 02037 02038 string port_, position_; 02039 int i1=begin_pos; 02040 02041 bool q=str[i1]=='\"'; 02042 for(; str[i1]!=0; i1++) { 02043 if(str[i1]==0x20 && !q) 02044 break; 02045 if(str[i1]=='\"') 02046 q=false; 02047 file_name+=str[i1]; 02048 } 02049 if(file_name.length()>0 && file_name[0]=='\"') 02050 file_name.erase(0,1); 02051 if(file_name.length()>0 && file_name[file_name.length()-1]=='\"') 02052 file_name.erase(file_name.length()-1,1); 02053 02054 if(str[i1]!=0) 02055 i1++; 02056 02057 for(; str[i1]!=0; i1++) { 02058 if(str[i1]==0x20) 02059 break; 02060 port_+=str[i1]; 02061 } 02062 if(str[i1]!=0) 02063 i1++; 02064 for(; str[i1]!=0; i1++) { 02065 if(str[i1]==0x20) 02066 break; 02067 position_+=str[i1]; 02068 } 02069 02070 if(str[i1]!=0) 02071 i1++; 02072 02073 //unsigned short port=(unsigned short)atol(port_.c_str()); 02074 long pos=atol(position_.c_str()); 02075 02076 string msg="PRIVMSG "; 02077 msg+=nick; 02078 msg+=" :\x01" "DCC ACCEPT "; 02079 msg+=(string)"\""+file_name+"\""; 02080 msg+=" "; 02081 msg+=port_; 02082 msg+=" "; 02083 msg+=position_; 02084 msg+="\x01"; 02085 irc_putserv(msg.c_str(),false,HIGH_PRIORITY); 02086 02087 { 02088 vector<s_dcc_send_file>::iterator i1; 02089 for(i1=dcc_awaiting_send.begin(); i1!=dcc_awaiting_send.end(); i1++) { 02090 if(!(*i1).user_name_as_in_logic.compare(user_name_as_in_logic) && !(*i1).public_name.compare(file_name)) { 02091 (*i1).resume_pos=pos; 02092 break; 02093 } 02094 } 02095 } 02096 } 02097 }
Here is the call graph for this function: ![]() |
|
Retrieves access rights of user on partyline.
Definition at line 10383 of file logic.cpp. References cmp_strings_case_insensitive(), s_flood::lines, logic_erase_duplicate_or_empty_string_in_vector(), logic_eval(), r_all_groups, r_channel_defs, r_channels, r_procedures, r_users, and s_flood::seconds. Referenced by dcc_loop_get_rights(). 10384 { 10385 access_to_users.clear(); 10386 access_to_groups.clear(); 10387 access_grant_groups.clear(); 10388 access_to_proc_groups.clear(); 10389 access_grant_proc_groups.clear(); 10390 access_grant_proc.clear(); 10391 access_to_channel.clear(); 10392 access_grant_channel.clear(); 10393 access_grant_partyline=false; 10394 access_to_procs.clear(); 10395 access_to_backup=access_grant_backup=access_to_rehash=access_grant_rehash= 10396 access_to_plususer=access_grant_plususer=access_to_plusproc= 10397 access_grant_plusproc=false; 10398 partyline_msg_flood.lines=0; 10399 partyline_msg_flood.seconds=0; 10400 access_to_replication=access_grant_replication=false; 10401 access_to_chan_defs.clear(); 10402 access_to_restart=access_grant_restart=access_to_die=access_grant_die= 10403 access_to_filesystem=access_grant_filesystem=access_to_private= 10404 access_grant_private=access_to_can_send_all_users= 10405 access_grant_can_send_all_users=access_to_can_send_unknown_users= 10406 access_grant_can_send_unknown_users=false; 10407 access_usage_proc.clear(); 10408 access_usage_proc_groups.clear(); 10409 access_to_upgrade=access_grant_upgrade=false; 10410 access_to_apply=access_grant_apply=false; 10411 10412 vector<s_user>::iterator i1; 10413 for(i1=r_users.begin(); i1!=r_users.end(); i1++) { 10414 if(!(*i1).name.compare(user)) { 10415 bool all=false; 10416 vector<string>::iterator i2; 10417 for(i2=(*i1).access_to_group.begin(); i2!=(*i1).access_to_group.end(); i2++) { 10418 if((*i2).compare("*")) { 10419 vector<s_user>::iterator i3; 10420 for(i3=r_users.begin(); i3!=r_users.end(); i3++) { 10421 vector<s_group>::iterator i4; 10422 for(i4=(*i3).groups.begin(); i4!=(*i3).groups.end(); i4++) { 10423 if(!(*i4).name.compare(*i2)) { 10424 access_to_users.push_back((*i3).name); 10425 } 10426 } 10427 } 10428 } else { 10429 vector<s_user>::iterator i3; 10430 for(i3=r_users.begin(); i3!=r_users.end(); i3++) { 10431 access_to_users.push_back((*i3).name); 10432 } 10433 access_to_users.push_back("*"); 10434 break; 10435 } 10436 } 10437 map<string,string> vars; 10438 all=false; 10439 for(i2=(*i1).access_to_group.begin(); i2!=(*i1).access_to_group.end(); i2++) 10440 if((*i2).compare("*")) 10441 access_to_groups.push_back(logic_eval(*i2,vars)); 10442 else 10443 all=true; 10444 if(all) { 10445 vector<s_group>::iterator i4; 10446 for(i4=r_all_groups.begin(); i4!=r_all_groups.end(); i4++) 10447 access_to_groups.push_back(logic_eval((*i4).name,vars)); 10448 access_to_groups.push_back("*"); 10449 } 10450 all=false; 10451 for(i2=(*i1).access_grant_group.begin(); i2!=(*i1).access_grant_group.end(); i2++) 10452 if((*i2).compare("*")) 10453 access_grant_groups.push_back(logic_eval(*i2,vars)); 10454 else 10455 all=true; 10456 if(all) { 10457 vector<s_group>::iterator i4; 10458 for(i4=r_all_groups.begin(); i4!=r_all_groups.end(); i4++) 10459 access_grant_groups.push_back(logic_eval((*i4).name,vars)); 10460 access_grant_groups.push_back("*"); 10461 } 10462 10463 all=false; 10464 for(i2=(*i1).access_to_proc.begin(); i2!=(*i1).access_to_proc.end(); i2++) 10465 if((*i2).compare("*")) 10466 access_to_proc_groups.push_back(logic_eval(*i2,vars)); 10467 else 10468 all=true; 10469 if(all) { 10470 vector<string> got; 10471 vector<s_procedure>::iterator i1; 10472 for(i1=r_procedures.begin(); i1!=r_procedures.end(); i1++) { 10473 vector<s_group>::iterator i2; 10474 for(i2=(*i1).groups.begin(); i2!=(*i1).groups.end(); i2++) { 10475 vector<string>::iterator i3; 10476 bool got_=false; 10477 for(i3=got.begin(); i3!=got.end(); i3++) { 10478 if(!(*i3).compare(logic_eval((*i2).name,vars))) { 10479 got_=true; 10480 break; 10481 } 10482 } 10483 if(!got_) 10484 got.push_back(logic_eval((*i2).name,vars)); 10485 } 10486 } 10487 vector<string>::iterator i3; 10488 for(i3=got.begin(); i3!=got.end(); i3++) 10489 access_to_proc_groups.push_back(*i3); 10490 access_to_proc_groups.push_back("*"); 10491 } 10492 all=false; 10493 for(i2=(*i1).access_to_proc.begin(); i2!=(*i1).access_to_proc.end(); i2++) 10494 if((*i2).compare("*")) { 10495 string gr=logic_eval(*i2,vars); 10496 vector<s_procedure>::iterator i3; 10497 for(i3=r_procedures.begin(); i3!=r_procedures.end(); i3++) { 10498 vector<s_group>::iterator i4; 10499 for(i4=(*i3).groups.begin(); i4!=(*i3).groups.end(); i3++) { 10500 if(!(*i4).name.compare(gr)) { 10501 access_to_procs.push_back(gr); 10502 } 10503 } 10504 } 10505 } else { 10506 all=true; 10507 } 10508 if(all) { 10509 vector<string> got; 10510 vector<s_procedure>::iterator i1; 10511 for(i1=r_procedures.begin(); i1!=r_procedures.end(); i1++) 10512 access_to_procs.push_back((*i1).name); 10513 access_to_procs.push_back("*"); 10514 } 10515 10516 all=false; 10517 for(i2=(*i1).access_grant_procedure.begin(); i2!=(*i1).access_grant_procedure.end(); i2++) 10518 if((*i2).compare("*")) 10519 access_grant_proc_groups.push_back(logic_eval(*i2,vars)); 10520 else 10521 all=true; 10522 if(all) { 10523 vector<string> got; 10524 vector<s_procedure>::iterator i1; 10525 for(i1=r_procedures.begin(); i1!=r_procedures.end(); i1++) { 10526 vector<s_group>::iterator i2; 10527 for(i2=(*i1).groups.begin(); i2!=(*i1).groups.end(); i2++) { 10528 vector<string>::iterator i3; 10529 bool got_=false; 10530 for(i3=got.begin(); i3!=got.end(); i3++) { 10531 if(!(*i3).compare(logic_eval((*i2).name,vars))) { 10532 got_=true; 10533 break; 10534 } 10535 } 10536 if(!got_) 10537 got.push_back(logic_eval((*i2).name,vars)); 10538 } 10539 } 10540 vector<string>::iterator i3; 10541 for(i3=got.begin(); i3!=got.end(); i3++) 10542 access_grant_proc_groups.push_back(*i3); 10543 access_grant_proc_groups.push_back("*"); 10544 } 10545 all=false; 10546 for(i2=(*i1).access_grant_procedure.begin(); i2!=(*i1).access_grant_procedure.end(); i2++) 10547 if((*i2).compare("*")) { 10548 string gr=logic_eval(*i2,vars); 10549 vector<s_procedure>::iterator i3; 10550 for(i3=r_procedures.begin(); i3!=r_procedures.end(); i3++) { 10551 vector<s_group>::iterator i4; 10552 for(i4=(*i3).groups.begin(); i4!=(*i3).groups.end(); i3++) { 10553 if(!(*i4).name.compare(gr)) { 10554 access_grant_proc.push_back(gr); 10555 } 10556 } 10557 } 10558 } else { 10559 all=true; 10560 } 10561 if(all) { 10562 vector<string> got; 10563 vector<s_procedure>::iterator i1; 10564 for(i1=r_procedures.begin(); i1!=r_procedures.end(); i1++) 10565 access_to_procs.push_back((*i1).name); 10566 access_grant_proc.push_back("*"); 10567 } 10568 10569 all=false; 10570 for(i2=(*i1).access_usage_procedure.begin(); i2!=(*i1).access_usage_procedure.end(); i2++) 10571 if((*i2).compare("*")) 10572 access_usage_proc_groups.push_back(logic_eval(*i2,vars)); 10573 else 10574 all=true; 10575 if(all) { 10576 vector<string> got; 10577 vector<s_procedure>::iterator i1; 10578 for(i1=r_procedures.begin(); i1!=r_procedures.end(); i1++) { 10579 vector<s_group>::iterator i2; 10580 for(i2=(*i1).groups.begin(); i2!=(*i1).groups.end(); i2++) { 10581 vector<string>::iterator i3; 10582 bool got_=false; 10583 for(i3=got.begin(); i3!=got.end(); i3++) { 10584 if(!(*i3).compare(logic_eval((*i2).name,vars))) { 10585 got_=true; 10586 break; 10587 } 10588 } 10589 if(!got_) 10590 got.push_back(logic_eval((*i2).name,vars)); 10591 } 10592 } 10593 vector<string>::iterator i3; 10594 for(i3=got.begin(); i3!=got.end(); i3++) 10595 access_usage_proc_groups.push_back(*i3); 10596 access_usage_proc_groups.push_back("*"); 10597 } 10598 all=false; 10599 for(i2=(*i1).access_usage_procedure.begin(); i2!=(*i1).access_usage_procedure.end(); i2++) 10600 if((*i2).compare("*")) { 10601 string gr=logic_eval(*i2,vars); 10602 vector<s_procedure>::iterator i3; 10603 for(i3=r_procedures.begin(); i3!=r_procedures.end(); i3++) { 10604 vector<s_group>::iterator i4; 10605 for(i4=(*i3).groups.begin(); i4!=(*i3).groups.end(); i3++) { 10606 if(!(*i4).name.compare(gr)) { 10607 access_usage_proc.push_back(gr); 10608 } 10609 } 10610 } 10611 } else { 10612 all=true; 10613 } 10614 if(all) { 10615 vector<string> got; 10616 vector<s_procedure>::iterator i1; 10617 for(i1=r_procedures.begin(); i1!=r_procedures.end(); i1++) 10618 access_usage_proc.push_back((*i1).name); 10619 access_usage_proc.push_back("*"); 10620 } 10621 10622 all=false; 10623 for(i2=(*i1).access_to_channel.begin(); i2!=(*i1).access_to_channel.end(); i2++) 10624 if((*i2).compare("*")) 10625 access_to_channel.push_back(logic_eval(*i2,vars)); 10626 else 10627 all=true; 10628 if(all) { 10629 vector<string> got; 10630 vector<s_channel>::iterator i1; 10631 for(i1=r_channels.begin(); i1!=r_channels.end(); i1++) { 10632 /*vector<s_group>::iterator i2; 10633 for(i2=(*i1).groups.begin(); i2!=(*i1).groups.end(); i2++) { 10634 vector<string>::iterator i3; 10635 bool got_=false; 10636 for(i3=got.begin(); i3!=got.end(); i3++) { 10637 if(!(*i3).compare(logic_eval((*i2).name,vars))) { 10638 got_=true; 10639 break; 10640 } 10641 } 10642 if(!got_) 10643 got.push_back(logic_eval((*i2).name,vars)); 10644 }*/ 10645 vector<string>::iterator i3; 10646 bool got_=false; 10647 for(i3=got.begin(); i3!=got.end(); i3++) 10648 if(!cmp_strings_case_insensitive(*i3,logic_eval((*i1).channel_name,vars))) { 10649 got_=true; 10650 break; 10651 } 10652 if(!got_) 10653 got.push_back(logic_eval((*i1).channel_name,vars)); 10654 } 10655 vector<string>::iterator i3; 10656 for(i3=got.begin(); i3!=got.end(); i3++) 10657 access_to_channel.push_back(*i3); 10658 access_to_channel.push_back("*"); 10659 } 10660 all=false; 10661 for(i2=(*i1).access_grant_channel.begin(); i2!=(*i1).access_grant_channel.end(); i2++) 10662 if((*i2).compare("*")) 10663 access_grant_channel.push_back(logic_eval(*i2,vars)); 10664 else 10665 all=true; 10666 if(all) { 10667 vector<string> got; 10668 vector<s_channel>::iterator i1; 10669 for(i1=r_channels.begin(); i1!=r_channels.end(); i1++) { 10670 vector<string>::iterator i3; 10671 bool got_=false; 10672 for(i3=got.begin(); i3!=got.end(); i3++) 10673 if(!cmp_strings_case_insensitive(*i3,logic_eval((*i1).channel_name,vars))) { 10674 got_=true; 10675 break; 10676 } 10677 if(!got_) 10678 got.push_back(logic_eval((*i1).channel_name,vars)); 10679 } 10680 vector<string>::iterator i3; 10681 for(i3=got.begin(); i3!=got.end(); i3++) 10682 access_grant_channel.push_back(*i3); 10683 access_grant_channel.push_back("*"); 10684 } 10685 all=false; 10686 for(i2=(*i1).access_to_channel.begin(); i2!=(*i1).access_to_channel.end(); i2++) 10687 if((*i2).compare("*")) 10688 access_to_chan_defs.push_back(logic_eval(*i2,vars)); 10689 else 10690 all=true; 10691 if(all) { 10692 vector<string> got; 10693 vector<s_channel_def>::iterator i1; 10694 for(i1=r_channel_defs.begin(); i1!=r_channel_defs.end(); i1++) { 10695 vector<s_group>::iterator i2; 10696 for(i2=(*i1).groups.begin(); i2!=(*i1).groups.end(); i2++) { 10697 vector<string>::iterator i3; 10698 bool got_=false; 10699 for(i3=got.begin(); i3!=got.end(); i3++) 10700 if(!cmp_strings_case_insensitive(*i3,(*i1).channel_name)) { 10701 got_=true; 10702 break; 10703 } 10704 if(!got_) 10705 got.push_back((*i1).channel_name); 10706 } 10707 } 10708 vector<string>::iterator i3; 10709 for(i3=got.begin(); i3!=got.end(); i3++) 10710 access_to_chan_defs.push_back(*i3); 10711 access_to_chan_defs.push_back("*"); 10712 } 10713 10714 all=false; 10715 access_grant_partyline=(*i1).access_grant_partyline; 10716 10717 access_to_backup=(*i1).access_to_backup; 10718 access_grant_backup=(*i1).access_grant_backup; 10719 access_to_rehash=(*i1).access_to_rehash; 10720 access_grant_rehash=(*i1).access_grant_rehash; 10721 10722 access_to_plususer=(*i1).access_to_plususer; 10723 access_grant_plususer=(*i1).access_grant_plususer; 10724 10725 access_to_plusproc=(*i1).access_to_plusproc; 10726 access_grant_plusproc=(*i1).access_grant_plusproc; 10727 10728 partyline_msg_flood=(*i1).partyline_msg_flood; 10729 10730 access_to_replication=(*i1).access_to_replication; 10731 access_grant_replication=(*i1).access_grant_replication; 10732 10733 access_to_restart=(*i1).access_to_restart; 10734 access_grant_restart=(*i1).access_grant_restart; 10735 access_to_die=(*i1).access_to_die; 10736 access_grant_die=(*i1).access_grant_die; 10737 10738 access_to_filesystem=(*i1).access_to_filesystem; 10739 access_grant_filesystem=(*i1).access_grant_filesystem; 10740 10741 access_to_upgrade=(*i1).access_to_upgrade; 10742 access_grant_upgrade=(*i1).access_grant_upgrade; 10743 10744 access_to_apply=(*i1).access_to_apply; 10745 access_grant_apply=(*i1).access_grant_apply; 10746 10747 access_to_private=(*i1).access_to_private; 10748 access_grant_private=(*i1).access_grant_private; 10749 10750 access_to_can_send_all_users=(*i1).access_to_can_send_all_users; 10751 access_grant_can_send_all_users=(*i1).access_grant_can_send_all_users; 10752 10753 access_to_can_send_unknown_users=(*i1).access_to_can_send_unknown_users; 10754 access_grant_can_send_unknown_users=(*i1).access_grant_can_send_unknown_users; 10755 10756 break; 10757 } 10758 } 10759 10760 logic_erase_duplicate_or_empty_string_in_vector(access_to_users); 10761 logic_erase_duplicate_or_empty_string_in_vector(access_to_groups); 10762 logic_erase_duplicate_or_empty_string_in_vector(access_grant_groups); 10763 logic_erase_duplicate_or_empty_string_in_vector(access_to_proc_groups); 10764 logic_erase_duplicate_or_empty_string_in_vector(access_grant_proc_groups); 10765 logic_erase_duplicate_or_empty_string_in_vector(access_grant_proc); 10766 logic_erase_duplicate_or_empty_string_in_vector(access_to_channel); 10767 logic_erase_duplicate_or_empty_string_in_vector(access_grant_channel); 10768 logic_erase_duplicate_or_empty_string_in_vector(access_to_procs); 10769 logic_erase_duplicate_or_empty_string_in_vector(access_to_chan_defs); 10770 logic_erase_duplicate_or_empty_string_in_vector(access_usage_proc); 10771 logic_erase_duplicate_or_empty_string_in_vector(access_usage_proc_groups); 10772 }
Here is the call graph for this function: ![]() |
|
Adds a channel definition.
Definition at line 11369 of file logic.cpp. References r_channel_defs. Referenced by dcc_loop_edit_chan(). 11370 { 11371 r_channel_defs.push_back(chd); 11372 11373 return true; 11374 }
|
|
Adds an user with channels definition.
Definition at line 11384 of file logic.cpp. References s_user::fullname, s_user::hostmask, s_user::is_template, s_user::last_changed, s_user::name, r_channel_templates, r_channel_terminators, r_channels, r_terminators, r_user_templates, r_users, and s_user::terminator. Referenced by dcc_loop_edit_user1(), dcc_loop_new_user(), dcc_loop_replication(), and dcc_loop_terminator(). 11385 { 11386 if(user.is_template) { 11387 user.hostmask.clear(); 11388 user.fullname.clear(); 11389 vector<s_channel>::iterator i2; 11390 l2: 11391 for(i2=r_channel_templates.begin(); i2!=r_channel_templates.end(); i2++) { 11392 if(!(*i2).username.compare(user.name)) { 11393 r_channel_templates.erase(i2); 11394 goto l2; 11395 } 11396 } 11397 11398 time(&user.last_changed); 11399 r_user_templates.push_back(user); 11400 11401 for(i2=channels.begin(); i2!=channels.end(); i2++) { 11402 (*i2).is_template=true; 11403 if((*i2).channel_name.length()>0 && (*i2).channel_name[0]!='\"') 11404 (*i2).channel_name="\""+(*i2).channel_name+"\""; 11405 r_channel_templates.push_back(*i2); 11406 } 11407 } else { 11408 vector<s_channel>::iterator i2; 11409 l1: 11410 for(i2=r_channels.begin(); i2!=r_channels.end(); i2++) { 11411 if(!(*i2).username.compare(user.name)) { 11412 r_channels.erase(i2); 11413 goto l1; 11414 } 11415 } 11416 11417 time(&user.last_changed); 11418 11419 if(!user.terminator) { 11420 r_users.push_back(user); 11421 for(i2=channels.begin(); i2!=channels.end(); i2++) { 11422 (*i2).is_template=false; 11423 (*i2).terminator=false; 11424 if((*i2).channel_name.length()>0 && (*i2).channel_name[0]!='\"') 11425 (*i2).channel_name="\""+(*i2).channel_name+"\""; 11426 r_channels.push_back(*i2); 11427 } 11428 } else { 11429 r_terminators.push_back(user); 11430 for(i2=channels.begin(); i2!=channels.end(); i2++) { 11431 (*i2).is_template=false; 11432 (*i2).terminator=true; 11433 if((*i2).channel_name.length()>0 && (*i2).channel_name[0]!='\"') 11434 (*i2).channel_name="\""+(*i2).channel_name+"\""; 11435 r_channel_terminators.push_back(*i2); 11436 } 11437 } 11438 } 11439 }
|
|
Gets channel definition.
Definition at line 11331 of file logic.cpp. References cmp_strings_case_insensitive(), and r_channel_defs. Referenced by dcc_loop_edit_chan(), and dcc_loop_edit_dynbans(). 11332 { 11333 vector<s_channel_def>::iterator i; 11334 for(i=r_channel_defs.begin(); i!=r_channel_defs.end(); i++) { 11335 if(!cmp_strings_case_insensitive((*i).channel_name,channel_name)) { 11336 chd=*i; 11337 return true; 11338 } 11339 } 11340 return false; 11341 }
Here is the call graph for this function: ![]() |
|
Retrieves an user with channels.
Definition at line 12113 of file logic.cpp. Referenced by botnet_loop(), dcc_loop(), dcc_loop_edit_user1(), dcc_loop_filesystem(), dcc_loop_get_rights(), dcc_loop_msg(), dcc_loop_replication(), dcc_loop_terminator(), filesys_dcc_drop_notifies(), irc_check_for_filesystem(), irc_quoted_callback(), logic_exec_script(), and logic_validate_chan_mode(). 12114 { 12115 user.clear(); 12116 channels.clear(); 12117 vector<s_user>::iterator i; 12118 vector<s_user> usrs; 12119 for(int iii=0; iii<2; iii++) { 12120 switch(iii) { 12121 case 0: 12122 usrs=r_users; 12123 break; 12124 case 1: 12125 usrs=r_terminators; 12126 break; 12127 } 12128 for(i=usrs.begin(); i!=usrs.end(); i++) { 12129 if(!(*i).name.compare(user_name)) { 12130 user=*i; 12131 vector<string> all_channels; 12132 vector<string>::iterator i4; 12133 12134 vector<s_channel>::iterator i3; 12135 if(iii==0) { 12136 for(i3=r_channels.begin(); i3!=r_channels.end(); i3++) { 12137 bool got_channel=false; 12138 for(i4=all_channels.begin(); i4!=all_channels.end(); i4++) 12139 if(!logic_cmp_strings_case_insensitive((*i4),(*i3).channel_name)) { 12140 got_channel=true; 12141 break; 12142 } 12143 if(!got_channel) 12144 all_channels.push_back((*i3).channel_name); 12145 12146 if(!(*i3).username.compare((*i).name)) { 12147 s_channel ch=*i3; 12148 ch.configured=true; 12149 channels.push_back(ch); 12150 } 12151 } 12152 } else { 12153 for(i3=r_channel_terminators.begin(); i3!=r_channel_terminators.end(); i3++) { 12154 bool got_channel=false; 12155 for(i4=all_channels.begin(); i4!=all_channels.end(); i4++) 12156 if(!logic_cmp_strings_case_insensitive((*i4),(*i3).channel_name)) { 12157 got_channel=true; 12158 break; 12159 } 12160 if(!got_channel) 12161 all_channels.push_back((*i3).channel_name); 12162 12163 if(!(*i3).username.compare((*i).name)) { 12164 s_channel ch=*i3; 12165 ch.configured=true; 12166 channels.push_back(ch); 12167 } 12168 } 12169 } 12170 l1: 12171 if(iii==0) { 12172 for(i3=r_channels.begin(); i3!=r_channels.end(); i3++) 12173 if(!(*i3).username.compare((*i).name)) 12174 for(i4=all_channels.begin(); i4!=all_channels.end(); i4++) 12175 if(!logic_cmp_strings_case_insensitive((*i4),(*i3).channel_name)) { 12176 all_channels.erase(i4); 12177 goto l1; 12178 } 12179 } else { 12180 for(i3=r_channel_terminators.begin(); i3!=r_channel_terminators.end(); i3++) 12181 if(!(*i3).username.compare((*i).name)) 12182 for(i4=all_channels.begin(); i4!=all_channels.end(); i4++) 12183 if(!logic_cmp_strings_case_insensitive((*i4),(*i3).channel_name)) { 12184 all_channels.erase(i4); 12185 goto l1; 12186 } 12187 } 12188 vector<string>::iterator i1; 12189 for(i4=all_channels.begin(); i4!=all_channels.end(); i4++) 12190 for(i1=(*i).access_to_channel.begin(); i1!=(*i).access_to_channel.end(); i1++) 12191 if(!(*i4).compare(*i1)) { 12192 s_channel ch; 12193 ch.terminator=iii==1; 12194 ch.is_template=false; 12195 ch.configured=false; 12196 ch.can_send_unknown_users=false; 12197 ch.username=user_name; 12198 ch.channel_name=*i4; 12199 ch.host_unknown=false; 12200 ch.groups.clear(); 12201 ch.on_deop=""; 12202 ch.on_ban=""; 12203 ch.on_unban=""; 12204 ch.on_kick=""; 12205 ch.on_op=""; 12206 ch.on_voice=""; 12207 ch.on_devoice=""; 12208 ch.on_creator=""; 12209 ch.on_decreator=""; 12210 ch.on_join=""; 12211 ch.on_banned=""; 12212 ch.on_flood=""; 12213 ch.on_privmsg=""; 12214 ch.on_notice=""; 12215 ch.on_other_mode=""; 12216 ch.msg_flood.lines=0; 12217 ch.msg_flood.seconds=0; 12218 ch.notice_flood.lines=0; 12219 ch.notice_flood.seconds=0; 12220 ch.repeat_flood.lines=0; 12221 ch.repeat_flood.seconds=0; 12222 ch.nick_flood.lines=0; 12223 ch.nick_flood.seconds=0; 12224 ch.join_flood.lines=0; 12225 ch.join_flood.seconds=0; 12226 ch.mode_flood.lines=0; 12227 ch.mode_flood.seconds=0; 12228 ch.ctcp_flood.lines=0; 12229 ch.ctcp_flood.seconds=0; 12230 channels.push_back(ch); 12231 } 12232 } 12233 } 12234 } 12235 }
|
|
Retrieves an user template with channels.
Definition at line 12246 of file logic.cpp. Referenced by botnet_loop(), dcc_loop_new_user(), and dcc_loop_replication(). 12247 { 12248 channels.clear(); 12249 vector<s_user>::iterator i; 12250 for(i=r_user_templates.begin(); i!=r_user_templates.end(); i++) { 12251 if(!(*i).name.compare(user_name)) { 12252 user=*i; 12253 user.is_template=false; 12254 vector<string> all_channels; 12255 vector<string>::iterator i4; 12256 12257 map<string,string> vars; 12258 12259 vector<s_channel>::iterator i3; 12260 for(i3=r_channel_templates.begin(); i3!=r_channel_templates.end(); i3++) { 12261 bool got_channel=false; 12262 for(i4=all_channels.begin(); i4!=all_channels.end(); i4++) 12263 if(!logic_cmp_strings_case_insensitive((*i4),(*i3).channel_name)) { 12264 got_channel=true; 12265 break; 12266 } 12267 if(!got_channel) 12268 all_channels.push_back((*i3).channel_name); 12269 12270 if(!(*i3).username.compare((*i).name)) { 12271 s_channel ch=*i3; 12272 ch.configured=true; 12273 ch.is_template=false; 12274 channels.push_back(ch); 12275 } 12276 } 12277 l1: 12278 for(i3=r_channel_templates.begin(); i3!=r_channel_templates.end(); i3++) { 12279 if(!(*i3).username.compare((*i).name)) 12280 for(i4=all_channels.begin(); i4!=all_channels.end(); i4++) 12281 if(!logic_cmp_strings_case_insensitive((*i4),(*i3).channel_name)) { 12282 all_channels.erase(i4); 12283 goto l1; 12284 } 12285 } 12286 vector<string>::iterator i1; 12287 for(i4=all_channels.begin(); i4!=all_channels.end(); i4++) 12288 for(i1=(*i).access_to_channel.begin(); i1!=(*i).access_to_channel.end(); i1++) 12289 if(!(*i4).compare(*i1)) { 12290 s_channel ch; 12291 ch.is_template=true; 12292 ch.configured=false; 12293 ch.can_send_unknown_users=false; 12294 ch.username=user_name; 12295 ch.channel_name=*i4; 12296 ch.host_unknown=false; 12297 ch.groups.clear(); 12298 ch.on_deop=""; 12299 ch.on_ban=""; 12300 ch.on_unban=""; 12301 ch.on_kick=""; 12302 ch.on_op=""; 12303 ch.on_voice=""; 12304 ch.on_devoice=""; 12305 ch.on_creator=""; 12306 ch.on_decreator=""; 12307 ch.on_join=""; 12308 ch.on_banned=""; 12309 ch.on_flood=""; 12310 ch.on_privmsg=""; 12311 ch.on_notice=""; 12312 ch.on_other_mode=""; 12313 ch.msg_flood.lines=0; 12314 ch.msg_flood.seconds=0; 12315 ch.notice_flood.lines=0; 12316 ch.notice_flood.seconds=0; 12317 ch.repeat_flood.lines=0; 12318 ch.repeat_flood.seconds=0; 12319 ch.nick_flood.lines=0; 12320 ch.nick_flood.seconds=0; 12321 ch.join_flood.lines=0; 12322 ch.join_flood.seconds=0; 12323 ch.mode_flood.lines=0; 12324 ch.mode_flood.seconds=0; 12325 ch.ctcp_flood.lines=0; 12326 ch.ctcp_flood.seconds=0; 12327 channels.push_back(ch); 12328 } 12329 } 12330 } 12331 }
|
|
Deletes channel definition.
Definition at line 11350 of file logic.cpp. References r_channel_defs. Referenced by dcc_loop_edit_chan(). 11351 { 11352 vector<s_channel_def>::iterator i; 11353 for(i=r_channel_defs.begin(); i!=r_channel_defs.end(); i++) { 11354 if(!(*i).channel_name.compare(channel_name)) { 11355 r_channel_defs.erase(i); 11356 break; 11357 } 11358 } 11359 }
|
|
ltoa() emulation for compiler which doesn't have it
Definition at line 171 of file dcc.cpp.
|
|
Sleeps.
Definition at line 226 of file irc_bot.cpp. 00227 { 00228 #ifdef _WIN32 00229 ProcessMessages(); 00230 sock_send_cache(); 00231 if(ms) { 00232 if(ms<1000) { 00233 long ms_remain=ms; 00234 while(ms_remain>0) { 00235 ProcessMessages(); 00236 sock_send_cache(); 00237 int s=ms_remain>50?50:ms_remain; 00238 Sleep(s); 00239 ms_remain-=s; 00240 ProcessMessages(); 00241 sock_send_cache(); 00242 } 00243 } else { 00244 time_t now=time(NULL); 00245 for(;;) { 00246 Sleep(1); 00247 ProcessMessages(); 00248 dcc_loop(); 00249 sock_send_cache(); 00250 if(now+ms/1000<time(NULL)) 00251 break; 00252 } 00253 } 00254 } 00255 ProcessMessages(); 00256 #else 00257 sock_send_cache(); 00258 if(ms) { 00259 if(ms<1000) { 00260 long ms_remain=ms; 00261 while(ms_remain>0) { 00262 sock_send_cache(); 00263 int s=ms_remain>50?50:ms_remain; 00264 timeval tv; 00265 tv.tv_sec=0; 00266 tv.tv_usec=ms*1000; 00267 select(1,NULL,NULL,NULL,&tv); 00268 ms_remain-=s; 00269 sock_send_cache(); 00270 } 00271 } else { 00272 time_t now=time(NULL); 00273 for(;;) { 00274 timeval tv; 00275 tv.tv_sec=0; 00276 tv.tv_usec=1*1000; 00277 select(1,NULL,NULL,NULL,&tv); 00278 dcc_loop(); 00279 sock_send_cache(); 00280 if(now+ms/1000<time(NULL)) 00281 break; 00282 } 00283 } 00284 } 00285 #endif 00286 }
|
|
List of files that are awaiting to send (DCC SEND) to remote host.
Definition at line 748 of file dcc.cpp. Referenced by dcc_loop(), dcc_send_file(), and irc_quoted_callback(). |
|
Stores users who are waiting for DCC connection.
Definition at line 133 of file dcc.cpp. Referenced by dcc_loop(), irc_await_dcc_chat(), irc_loop_process_input(), and irc_RPL_ENDOFWHOIS(). |
|
List of DCC clients.
Definition at line 744 of file dcc.cpp. Referenced by dcc_apply(), dcc_broadcast(), dcc_check_for_filesystem(), dcc_check_limit(), dcc_close_all(), dcc_flush_all(), dcc_get_num_of_transfers(), dcc_loop(), dcc_notify(), dcc_partyline_message(), dcc_rehashed(), dcc_user_pong(), and irc_quoted_callback(). |
|
EOL string for user (DCC/telnet) who is killing the bot (.die/.restart).
Definition at line 154 of file dcc.cpp. Referenced by dcc_loop(), dcc_upgrade(), dcc_upgrade_bot_join(), dcc_upgrade_bot_mode(), dcc_upgrade_bot_nick(), and main(). |
|
Language code string for user (DCC/telnet) who is killing the bot (.die/.restart).
Definition at line 155 of file dcc.cpp. Referenced by dcc_loop(), dcc_upgrade(), dcc_upgrade_bot_join(), dcc_upgrade_bot_mode(), and dcc_upgrade_bot_nick(). |
|
Socket of DCC/telnet user who is killing the bot (.die/.restart), or NULL; (will be sent log to it).
|
|
Array, that stores DCC requests that are pending to establis, and waiting for whois result.
Definition at line 774 of file dcc.cpp. Referenced by irc_connect(), irc_quoted_callback(), irc_RPL_WHOISOPERATOR(), and irc_RPL_WHOISUSER(). |
|
List of DCC servers.
Definition at line 745 of file dcc.cpp. Referenced by dcc_close_servers(), dcc_get_string(), dcc_loop(), dcc_make_server(), dcc_notify(), and dcc_send_file(). |
|
Temporary array for user who wants to resume.
Definition at line 750 of file dcc.cpp. Referenced by dcc_loop(), and irc_quoted_callback(). |
|
Users to lock out due to bad log in.
Definition at line 778 of file dcc.cpp. Referenced by botnet_loop(), and dcc_loop(). |
|
Set to true if .die command wants to kill the bot.
Definition at line 150 of file dcc.cpp. Referenced by dcc_loop(), handler_sighup(), handler_sigterm(), logic_exec(), logic_rehash(), main(), and write_kill_log(). |
|
Set to true if .restart command wants to restart the bot.
Definition at line 149 of file dcc.cpp. Referenced by dcc_loop(), log_done(), logic_exec(), logic_rehash(), main(), and write_kill_log(). |
|
Set to true if .upgrade command wants to upgrade the bot.
Definition at line 151 of file dcc.cpp. Referenced by dcc_loop(), dcc_set_password(), dcc_upgrade(), filesys_flush(), log_done(), logic_exec(), logic_on_join(), logic_on_nick_change(), logic_partyline_backup(), logic_validate(), and write_kill_log(). |
|
Name of user (from "logic.txt") who invoked .restart/.die command.
Definition at line 152 of file dcc.cpp. Referenced by dcc_loop(), dcc_upgrade(), handler_sighup(), handler_sigterm(), logic_exec(), logic_rehash(), main(), and write_kill_log(). |
|
List of channels we are on.
Definition at line 141 of file irc.cpp. Referenced by dcc_loop(), irc_access_to_partyline(), irc_banned(), irc_check_bans(), irc_check_flood(), irc_check_for_not_invited(), irc_check_for_not_reopped(), irc_check_invites(), irc_check_nick_on_channel(), irc_connect(), irc_disconnect(), irc_excepted(), irc_find_user(), irc_get_chan_mode(), irc_get_fullname(), irc_get_host(), irc_get_ident(), irc_get_mode(), irc_get_modes_for_log(), irc_get_nick(), irc_get_online_channel(), irc_in_reop(), irc_internal_set_mode(), irc_invited(), irc_is_ircop(), irc_is_online(), irc_loop_process_input(), irc_loop_putserv(), irc_mode_change_ban(), irc_mode_change_ban_exception(), irc_mode_change_chan_key(), irc_mode_change_chan_limit(), irc_mode_change_chan_status(), irc_mode_change_invitation(), irc_mode_change_op(), irc_mode_change_reop(), irc_on_broadcast(), irc_on_notice(), irc_on_privmsg(), irc_rehashed(), irc_RPL_324(), irc_RPL_NAMREPLY(), irc_RPL_WHOISCHANNELS(), irc_RPL_WHOISOPERATOR(), irc_RPL_WHOISUSER(), irc_unban(), irc_user_mode_change(), logic_exec(), and logic_exec_script(). |
|
Bot's current nick.
Definition at line 108 of file irc.cpp. Referenced by dcc_loop(), irc_check_flood(), irc_connect(), irc_got_op(), irc_join(), irc_loop_process_input(), irc_loop_putserv(), irc_mode_change_creator(), irc_mode_change_op(), irc_mode_change_other(), irc_mode_change_voice(), irc_on_notice(), irc_on_privmsg(), irc_RPL_MODE(), irc_RPL_NAMREPLY(), irc_RPL_WHOISCHANNELS(), irc_RPL_WHOISUSER(), irc_user_mode_change(), logic_access_to_partyline(), logic_exec(), logic_exec_script(), logic_find_user(), logic_rehash(), logic_validate(), logic_validate_by_mask(), logic_validate_chan_key(), logic_validate_chan_limit(), logic_validate_chan_mode(), logic_validate_kick(), and logic_validate_topic(). |
|
After .upgrade command, there is timestamp of last new instance's join some channel.
Definition at line 156 of file dcc.cpp. Referenced by dcc_loop(), dcc_upgrade(), and dcc_upgrade_bot_join(). |
|
List of all groups for real usage (not temporary / compilation!).
Definition at line 224 of file logic.cpp. Referenced by dcc_loop(), logic_load_conf(), logic_partyline_access(), and logic_partyline_backup(). |
|
List of real channel definitions (not temporary / compilation!).
|
|
List of channel templates for real usage (not temporary / compilation!).
|
|
List of channels for real usage (not temporary / compilation!).
|
|
Informations about procedures when someone sends query message (not temporary / compilation!).
|
|
List of procedures for real usage (not temporary / compilation!).
|
|
List of users templates for real usage (not temporary / compilation!).
|
|
List of users for real usage (not temporary / compilation!).
|
|
Configuration of SSL.
|
|
List of telnet servers.
Definition at line 746 of file dcc.cpp. Referenced by dcc_close_servers(), dcc_loop(), and dcc_make_telnet_server(). |
|
Array of DCC requests statistics (for flood protection).
Definition at line 772 of file dcc.cpp. Referenced by irc_quoted_callback(). |