line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
1
|
|
|
|
|
|
|
#$Id: clihub.pm 998 2013-08-14 12:21:20Z pro $ $URL: svn://svn.setun.net/dcppp/trunk/lib/Net/DirectConnect/clihub.pm $ |
2
|
|
|
|
|
|
|
package #hide from cpan |
3
|
|
|
|
|
|
|
Net::DirectConnect::clihub; |
4
|
1
|
|
|
1
|
|
865
|
use strict; |
|
1
|
|
|
|
|
3
|
|
|
1
|
|
|
|
|
27
|
|
5
|
1
|
|
|
1
|
|
6
|
no strict qw(refs); |
|
1
|
|
|
|
|
1
|
|
|
1
|
|
|
|
|
22
|
|
6
|
1
|
|
|
1
|
|
4
|
use warnings "NONFATAL" => "all"; |
|
1
|
|
|
|
|
1
|
|
|
1
|
|
|
|
|
41
|
|
7
|
1
|
|
|
1
|
|
5
|
no warnings qw(uninitialized); |
|
1
|
|
|
|
|
1
|
|
|
1
|
|
|
|
|
29
|
|
8
|
1
|
|
|
1
|
|
4
|
no if $] >= 5.017011, warnings => 'experimental::smartmatch'; |
|
1
|
|
|
|
|
2
|
|
|
1
|
|
|
|
|
4
|
|
9
|
1
|
|
|
1
|
|
35
|
use utf8; |
|
1
|
|
|
|
|
1
|
|
|
1
|
|
|
|
|
4
|
|
10
|
1
|
|
|
1
|
|
20
|
use Time::HiRes qw(time sleep); |
|
1
|
|
|
|
|
1
|
|
|
1
|
|
|
|
|
8
|
|
11
|
1
|
|
|
1
|
|
161
|
use Data::Dumper; #dev only |
|
1
|
|
|
|
|
2
|
|
|
1
|
|
|
|
|
46
|
|
12
|
|
|
|
|
|
|
$Data::Dumper::Sortkeys = $Data::Dumper::Indent = 1; |
13
|
1
|
|
|
1
|
|
4
|
use Net::DirectConnect; |
|
1
|
|
|
|
|
15
|
|
|
1
|
|
|
|
|
14
|
|
14
|
1
|
|
|
1
|
|
450
|
use Net::DirectConnect::clicli; |
|
1
|
|
|
|
|
2
|
|
|
1
|
|
|
|
|
66
|
|
15
|
|
|
|
|
|
|
#use Net::DirectConnect::http; |
16
|
|
|
|
|
|
|
our $VERSION = ( split( ' ', '$Revision: 998 $' ) )[1]; |
17
|
1
|
|
|
1
|
|
6
|
use base 'Net::DirectConnect'; |
|
1
|
|
|
|
|
2
|
|
|
1
|
|
|
|
|
863
|
|
18
|
|
|
|
|
|
|
|
19
|
|
|
|
|
|
|
sub name_to_ip($) { |
20
|
0
|
|
|
0
|
0
|
|
my ($name) = @_; |
21
|
0
|
0
|
|
|
|
|
unless ( $name =~ /^\d+\.\d+\.\d+\.\d+$/ ) { |
22
|
0
|
|
|
|
|
|
local $_ = ( gethostbyname($name) )[4]; |
23
|
0
|
0
|
|
|
|
|
return ( $name, 1 ) unless length($_) == 4; |
24
|
0
|
|
|
|
|
|
$name = inet_ntoa($_); |
25
|
|
|
|
|
|
|
} |
26
|
0
|
|
|
|
|
|
return $name; |
27
|
|
|
|
|
|
|
} |
28
|
|
|
|
|
|
|
|
29
|
|
|
|
|
|
|
sub init { |
30
|
0
|
|
|
0
|
0
|
|
my $self = shift; |
31
|
|
|
|
|
|
|
#%$self = ( |
32
|
|
|
|
|
|
|
#%$self, |
33
|
0
|
|
|
|
|
|
local %_ = ( |
34
|
|
|
|
|
|
|
'Nick' => 'NetDCBot', |
35
|
|
|
|
|
|
|
'port' => 411, |
36
|
|
|
|
|
|
|
'host' => 'localhost', |
37
|
|
|
|
|
|
|
'Pass' => '', |
38
|
|
|
|
|
|
|
'key' => 'zzz', |
39
|
|
|
|
|
|
|
#'auto_wait' => 1, |
40
|
|
|
|
|
|
|
'supports_avail' => [ qw( |
41
|
|
|
|
|
|
|
NoGetINFO |
42
|
|
|
|
|
|
|
NoHello |
43
|
|
|
|
|
|
|
UserIP2 |
44
|
|
|
|
|
|
|
UserCommand |
45
|
|
|
|
|
|
|
TTHSearch |
46
|
|
|
|
|
|
|
OpPlus |
47
|
|
|
|
|
|
|
Feed |
48
|
|
|
|
|
|
|
MCTo |
49
|
|
|
|
|
|
|
HubTopic |
50
|
|
|
|
|
|
|
) |
51
|
|
|
|
|
|
|
], |
52
|
|
|
|
|
|
|
'search_every' => 10, |
53
|
|
|
|
|
|
|
'search_every_min' => 10, |
54
|
|
|
|
|
|
|
'auto_connect' => 1, |
55
|
|
|
|
|
|
|
'auto_bug' => 1, |
56
|
|
|
|
|
|
|
'reconnects' => 99999, |
57
|
|
|
|
|
|
|
'NoGetINFO' => 1, #test |
58
|
|
|
|
|
|
|
'NoHello' => 1, |
59
|
|
|
|
|
|
|
'UserIP2' => 1, |
60
|
|
|
|
|
|
|
'TTHSearch' => 1, |
61
|
|
|
|
|
|
|
'Version' => '1,0091', |
62
|
|
|
|
|
|
|
'auto_GetNickList' => 1, |
63
|
|
|
|
|
|
|
'follow_forcemove' => 1, |
64
|
|
|
|
|
|
|
'incomingclass' => 'Net::DirectConnect::clicli', |
65
|
|
|
|
|
|
|
'disconnect_recursive' => 1, |
66
|
|
|
|
|
|
|
); |
67
|
0
|
|
0
|
|
|
|
$self->{$_} //= $_{$_} for keys %_; |
68
|
|
|
|
|
|
|
$self->{'periodic'}{ __FILE__ . __LINE__ } = sub { |
69
|
0
|
0
|
|
0
|
|
|
my $self = shift if ref $_[0]; |
70
|
0
|
0
|
|
|
|
|
$self->search_buffer() if $self->{'socket'}; |
71
|
0
|
|
|
|
|
|
}; |
72
|
|
|
|
|
|
|
#$self->log($self, 'inited',"MT:$self->{'message_type'}", ' with', Dumper \@_); |
73
|
|
|
|
|
|
|
#$self->baseinit(); |
74
|
|
|
|
|
|
|
#share_full share_tth want |
75
|
0
|
|
0
|
|
|
|
$self->{$_} ||= $self->{'parent'}{$_} ||= {} for qw( NickList IpList PortList PortList_udp); #handler |
|
|
|
0
|
|
|
|
|
76
|
|
|
|
|
|
|
#$self->{'NickList'} ||= {}; |
77
|
|
|
|
|
|
|
#$self->{'IpList'} ||= {}; |
78
|
|
|
|
|
|
|
#$self->{'PortList'} ||= {}; |
79
|
|
|
|
|
|
|
#$self->log( $self, 'inited3', "MT:$self->{'message_type'}", ' with' ); |
80
|
|
|
|
|
|
|
#You are already in the hub. |
81
|
|
|
|
|
|
|
# $self->{'parse'} ||= { |
82
|
0
|
|
|
|
|
|
$self->module_load('filelist'); |
83
|
|
|
|
|
|
|
local %_ = ( |
84
|
|
|
|
|
|
|
'chatline' => sub { |
85
|
0
|
0
|
|
0
|
|
|
my $self = shift if ref $_[0]; |
86
|
|
|
|
|
|
|
#$self->log( 'dev', Dumper \@_); |
87
|
0
|
|
|
|
|
|
my ( $nick, $text ) = $_[0] =~ /^(?:<|\* )(.+?)>? (.+)$/s; |
88
|
|
|
|
|
|
|
#$self->log('dcdev', 'chatline parse', Dumper(\@_,$nick, $text)); |
89
|
|
|
|
|
|
|
$self->log( 'warn', "[$nick] oper: already in the hub [$self->{'Nick'}]" ), $self->nick_generate(), $self->reconnect(), |
90
|
0
|
0
|
0
|
|
|
|
if ( ( !keys %{ $self->{'NickList'} } or $self->{'NickList'}{$nick}{'oper'} ) |
|
|
|
0
|
|
|
|
|
91
|
|
|
|
|
|
|
and $text eq 'You are already in the hub.' ); |
92
|
0
|
0
|
0
|
|
|
|
if ( $self->{'NickList'}{$nick}{'oper'} or $self->{'NickList'}{$nick}{'hubbot'} or $nick eq 'Hub-Security' ) { |
|
|
|
0
|
|
|
|
|
93
|
0
|
0
|
0
|
|
|
|
if ( |
|
|
|
0
|
|
|
|
|
|
|
|
0
|
|
|
|
|
|
|
|
0
|
|
|
|
|
94
|
|
|
|
|
|
|
$text =~ |
95
|
|
|
|
|
|
|
/Минимальный интервал поиска составляет: \(Minimum search interval is:\) (\d+)секунд \(seconds\)/ |
96
|
|
|
|
|
|
|
or $text =~ /^(?:Minimum search interval is|Минимальный интервал поиска):(\d+)s/ |
97
|
|
|
|
|
|
|
or $text =~ /Search ignored\. Please leave at least (\d+) seconds between search attempts\./ #Hub-Security opendchub |
98
|
|
|
|
|
|
|
or $text =~ |
99
|
|
|
|
|
|
|
/Минимальный интервал между поисковыми запросами:(\d+)сек., попробуйте чуть позже/ |
100
|
|
|
|
|
|
|
or $text =~ /You can do 1 searches in (\d+) seconds/ |
101
|
|
|
|
|
|
|
) |
102
|
|
|
|
|
|
|
{ |
103
|
0
|
|
0
|
|
|
|
$self->{'search_every'} = int( rand(5) + $1 || $self->{'search_every_min'} ); |
104
|
0
|
|
|
|
|
|
$self->log( 'warn', "[$nick] oper: set min interval = $self->{'search_every'}" ); |
105
|
0
|
|
|
|
|
|
$self->search_retry(); |
106
|
|
|
|
|
|
|
} |
107
|
0
|
0
|
0
|
|
|
|
if ( $text =~ |
|
|
|
0
|
|
|
|
|
|
|
|
0
|
|
|
|
|
|
|
|
0
|
|
|
|
|
108
|
1
|
|
|
1
|
|
7
|
/(?:Пожалуйста )?подождите (\d+) секунд перед следующим поиском\./i |
|
1
|
|
|
|
|
2
|
|
|
1
|
|
|
|
|
16
|
|
109
|
|
|
|
|
|
|
or $text =~ /(?:Please )?wait (\d+) seconds before next search\./i |
110
|
|
|
|
|
|
|
or $text eq 'Пожалуйста не используйте поиск так часто!' |
111
|
|
|
|
|
|
|
or $text eq "Please don't flood with searches!" |
112
|
|
|
|
|
|
|
or $text eq 'Sorry Hub is busy now, no search, try later..' ) |
113
|
|
|
|
|
|
|
{ |
114
|
0
|
|
0
|
|
|
|
$self->{'search_every'} += int( rand(5) + $1 || $self->{'search_every_min'} ); |
115
|
0
|
|
|
|
|
|
$self->log( 'warn', "[$nick] oper: increase min interval => $self->{'search_every'}" ); |
116
|
0
|
|
|
|
|
|
$self->search_retry(); |
117
|
|
|
|
|
|
|
} |
118
|
|
|
|
|
|
|
} |
119
|
0
|
0
|
0
|
|
|
|
if ( !$self->{count_parse}{chatline} and $text =~ /PtokaX/i ) { |
120
|
|
|
|
|
|
|
#$self->log( 'dev', "[$nick] - probably hub bot" ); |
121
|
0
|
|
|
|
|
|
$self->{'NickList'}{$nick}{'hubbot'} = 1; |
122
|
|
|
|
|
|
|
} |
123
|
0
|
0
|
0
|
|
|
|
$self->search_retry(), |
124
|
|
|
|
|
|
|
if $self->{'NickList'}->{$nick}{'oper'} and $text eq 'Sorry Hub is busy now, no search, try later..'; |
125
|
|
|
|
|
|
|
}, |
126
|
|
|
|
|
|
|
'welcome' => sub { |
127
|
0
|
0
|
|
0
|
|
|
my $self = shift if ref $_[0]; |
128
|
0
|
|
|
|
|
|
my ( $nick, $text ) = $_[0] =~ /^(?:<|\* )(.+?)>? (.+)$/s; |
129
|
0
|
0
|
0
|
|
|
|
if ( !keys %{ $self->{'NickList'} } or !exists $self->{'NickList'}->{$nick} or $self->{'NickList'}->{$nick}{'oper'} ) { |
|
|
|
0
|
|
|
|
|
130
|
0
|
0
|
0
|
|
|
|
if ( $text =~ /^Bad nickname: unallowed characters, use these (\S+)/ ) |
|
|
0
|
0
|
|
|
|
|
|
|
0
|
0
|
|
|
|
|
|
|
|
0
|
|
|
|
|
131
|
|
|
|
|
|
|
# |
132
|
|
|
|
|
|
|
{ |
133
|
0
|
|
|
|
|
|
my $try = $self->{'Nick'}; |
134
|
0
|
|
|
|
|
|
$try =~ s/[^\Q$1\E]//g; |
135
|
0
|
|
|
|
|
|
$self->log( 'warn', "CHNICK $self->{'Nick'} -> $try" ); |
136
|
0
|
0
|
|
|
|
|
$self->{'Nick'} = $try if length $try; |
137
|
|
|
|
|
|
|
} elsif ( $text =~ /Bad nickname: Wait (\d+)sec before reconnecting/i |
138
|
|
|
|
|
|
|
or $text =~ |
139
|
|
|
|
|
|
|
/Пожалуйста подождите (\d+) секунд до повторного подключения\./ |
140
|
|
|
|
|
|
|
or $text =~ /Do not reconnect too fast. Wait (\d+) secs before reconnecting./ ) |
141
|
|
|
|
|
|
|
{ |
142
|
|
|
|
|
|
|
#sleep $1 + 1; |
143
|
0
|
|
|
|
|
|
$self->work( $1 + 10 ); |
144
|
|
|
|
|
|
|
} elsif ( $self->{'auto_bug'} and $nick eq 'VerliHub' and $text =~ /^This Hub Is Running Version 0.9.8d/i ) { #_RC1 |
145
|
0
|
|
|
|
|
|
++$self->{'bug_MyINFO_last'}; |
146
|
0
|
|
|
|
|
|
$self->log( 'dev', "possible bug fixed [$self->{'bug_MyINFO_last'}]" ); |
147
|
|
|
|
|
|
|
} |
148
|
|
|
|
|
|
|
} |
149
|
|
|
|
|
|
|
}, |
150
|
|
|
|
|
|
|
'Lock' => sub { |
151
|
0
|
0
|
|
0
|
|
|
my $self = shift if ref $_[0]; |
152
|
|
|
|
|
|
|
#$self->log( "lockparse", @_ ); |
153
|
0
|
|
|
|
|
|
$self->{'sendbuf'} = 1; |
154
|
0
|
|
|
|
|
|
$self->cmd('Supports'); |
155
|
0
|
|
|
|
|
|
my ($lock) = $_[0] =~ /^(.+?)(\s+Pk=.+)?\s*$/is; |
156
|
|
|
|
|
|
|
#print "lock[$1]\n"; |
157
|
|
|
|
|
|
|
#$self->log( 'dev', "lock from [$_[0]] = [$lock]"); |
158
|
0
|
|
|
|
|
|
$self->cmd( 'Key', $self->lock2key($lock) ); |
159
|
0
|
|
|
|
|
|
$self->{'sendbuf'} = 0; |
160
|
0
|
|
|
|
|
|
$self->cmd('ValidateNick'); |
161
|
|
|
|
|
|
|
}, |
162
|
|
|
|
|
|
|
'Hello' => sub { |
163
|
0
|
0
|
|
0
|
|
|
my $self = shift if ref $_[0]; |
164
|
|
|
|
|
|
|
#$self->log('info', "HELLO recieved, connected. me=[$self->{'Nick'}]", @_); |
165
|
0
|
0
|
|
|
|
|
return unless $_[0] eq $self->{'Nick'}; |
166
|
0
|
|
|
|
|
|
$self->{'sendbuf'} = 1; |
167
|
0
|
|
|
|
|
|
$self->cmd('Version'); |
168
|
0
|
0
|
|
|
|
|
$self->{'sendbuf'} = 0 unless $self->{'auto_GetNickList'}; |
169
|
0
|
0
|
|
|
|
|
$self->cmd('MyINFO') unless $self->{'bug_MyINFO_last'}; |
170
|
0
|
0
|
|
|
|
|
$self->{'sendbuf'} = 0, $self->cmd('GetNickList') if $self->{'auto_GetNickList'}; |
171
|
0
|
0
|
|
|
|
|
$self->{'sendbuf'} = 0, $self->cmd('MyINFO') if $self->{'bug_MyINFO_last'}; |
172
|
0
|
|
|
|
|
|
$self->{'status'} = 'connected'; |
173
|
0
|
0
|
|
|
|
|
$self->cmd('BotINFO') if $self->{botinfo}; |
174
|
0
|
|
|
|
|
|
$self->cmd('make_hub'); |
175
|
|
|
|
|
|
|
}, |
176
|
|
|
|
|
|
|
'Supports' => sub { |
177
|
0
|
0
|
|
0
|
|
|
my $self = shift if ref $_[0]; |
178
|
0
|
|
|
|
|
|
$self->supports_parse( $_[0], $self ); |
179
|
|
|
|
|
|
|
}, |
180
|
|
|
|
|
|
|
'ValidateDenide' => sub { |
181
|
0
|
0
|
|
0
|
|
|
my $self = shift if ref $_[0]; |
182
|
0
|
|
|
|
|
|
$self->log( 'warn', "ValidateDenide", $self->{'Nick'}, @_ ); |
183
|
0
|
|
|
|
|
|
$self->cmd('nick_generate'); |
184
|
0
|
|
|
|
|
|
$self->cmd('ValidateNick'); |
185
|
|
|
|
|
|
|
}, |
186
|
|
|
|
|
|
|
'To' => sub { |
187
|
0
|
0
|
|
0
|
|
|
my $self = shift if ref $_[0]; |
188
|
|
|
|
|
|
|
#$self->log( 'msg', "Private message to", @_ ); |
189
|
|
|
|
|
|
|
#@_; |
190
|
0
|
|
|
|
|
|
undef; |
191
|
|
|
|
|
|
|
}, |
192
|
|
|
|
|
|
|
'MyINFO' => sub { |
193
|
0
|
0
|
|
0
|
|
|
my $self = shift if ref $_[0]; |
194
|
0
|
|
|
|
|
|
my ( $nick, $info ) = $_[0] =~ /\S+\s+(\S+)\s+(.*)/; |
195
|
0
|
|
|
|
|
|
$self->{'NickList'}->{$nick}{'Nick'} = $nick; |
196
|
0
|
|
|
|
|
|
$self->info_parse( $info, $self->{'NickList'}{$nick} ); |
197
|
0
|
|
|
|
|
|
$self->{'NickList'}->{$nick}{'online'} = 1; |
198
|
|
|
|
|
|
|
}, |
199
|
|
|
|
|
|
|
'UserIP' => sub { |
200
|
0
|
0
|
|
0
|
|
|
my $self = shift if ref $_[0]; |
201
|
|
|
|
|
|
|
/(\S+)\s+(\S+)/, $self->{'NickList'}{$1}{'ip'} = $2, $self->{'IpList'}{$2} = $self->{'NickList'}{$1}, |
202
|
|
|
|
|
|
|
$self->{'IpList'}{$2}{'port'} = $self->{'PortList'}{$2} |
203
|
0
|
|
|
|
|
|
for grep $_, split /\$\$/, $_[0]; |
204
|
|
|
|
|
|
|
}, |
205
|
|
|
|
|
|
|
'HubName' => sub { |
206
|
0
|
0
|
|
0
|
|
|
my $self = shift if ref $_[0]; |
207
|
0
|
|
|
|
|
|
$self->{'HubName'} = $_[0]; |
208
|
|
|
|
|
|
|
}, |
209
|
|
|
|
|
|
|
'HubTopic' => sub { |
210
|
0
|
0
|
|
0
|
|
|
my $self = shift if ref $_[0]; |
211
|
0
|
|
|
|
|
|
$self->{'HubTopic'} = $_[0]; |
212
|
|
|
|
|
|
|
}, |
213
|
|
|
|
|
|
|
'NickList' => sub { |
214
|
0
|
0
|
|
0
|
|
|
my $self = shift if ref $_[0]; |
215
|
0
|
|
|
|
|
|
$self->{'NickList'}->{$_}{'online'} = 1 for grep $_, split /\$\$/, $_[0]; |
216
|
0
|
0
|
|
|
|
|
$self->GetINFO() if $self->{auto_GetINFO}; |
217
|
|
|
|
|
|
|
}, |
218
|
|
|
|
|
|
|
'OpList' => sub { |
219
|
0
|
0
|
|
0
|
|
|
my $self = shift if ref $_[0]; |
220
|
0
|
|
|
|
|
|
$self->{'NickList'}->{$_}{'oper'} = 1 for grep $_, split /\$\$/, $_[0]; |
221
|
|
|
|
|
|
|
}, |
222
|
|
|
|
|
|
|
'ForceMove' => sub { |
223
|
0
|
0
|
|
0
|
|
|
my $self = shift if ref $_[0]; |
224
|
0
|
|
|
|
|
|
my ($to) = grep { length $_ } split /;/, $_[0]; |
|
0
|
|
|
|
|
|
|
225
|
0
|
|
|
|
|
|
$self->log( 'warn', "ForceMove to $to :: ", @_ ); |
226
|
0
|
|
|
|
|
|
$self->disconnect(); |
227
|
0
|
|
|
|
|
|
sleep(1); |
228
|
0
|
0
|
0
|
|
|
|
$self->connect($to) if $self->{'follow_forcemove'} and $to; |
229
|
|
|
|
|
|
|
}, |
230
|
|
|
|
|
|
|
'Quit' => sub { |
231
|
0
|
0
|
|
0
|
|
|
my $self = shift if ref $_[0]; |
232
|
0
|
|
|
|
|
|
$self->{'NickList'}->{ $_[0] }{'online'} = 0; |
233
|
|
|
|
|
|
|
}, |
234
|
|
|
|
|
|
|
'ConnectToMe' => sub { |
235
|
0
|
0
|
|
0
|
|
|
my $self = shift if ref $_[0]; |
236
|
0
|
|
|
|
|
|
my ( $nick, $host, $port ) = $_[0] =~ /\s*(\S+)\s+(\S+)\:(\S+)/; |
237
|
0
|
|
|
|
|
|
$self->{'IpList'}{$host}{'port'} = $self->{'PortList'}->{$host} = $port; |
238
|
|
|
|
|
|
|
#$self->log('dev', "portlist: $host = $self->{'PortList'}->{$host} :=$port"); |
239
|
0
|
0
|
|
|
|
|
$self->log("ignore flooding attempt to [$host:$port ] ($self->{flood}{$host})"), $self->{flood}{$host} = time + 30, |
240
|
|
|
|
|
|
|
return |
241
|
|
|
|
|
|
|
if $self->{flood}{$host} > time; |
242
|
0
|
|
|
|
|
|
$self->{flood}{$host} = time + 60; |
243
|
0
|
0
|
|
|
|
|
return if $self->{'clients'}{ $host . ':' . $port }->{'socket'}; |
244
|
0
|
|
|
|
|
|
$self->{'clients'}{ $host . ':' . $port } = Net::DirectConnect::clicli->new( |
245
|
|
|
|
|
|
|
#! %$self, $self->clear(), |
246
|
|
|
|
|
|
|
parent => $self, 'host' => $host, 'port' => $port, |
247
|
|
|
|
|
|
|
#'want' => \%{ $self->{'want'} }, 'NickList' => \%{ $self->{'NickList'} }, 'IpList' => \%{ $self->{'IpList'} }, 'PortList' => \%{ $self->{'PortList'} }, 'handler' => \%{ $self->{'handler'} }, |
248
|
|
|
|
|
|
|
#'want' => $self->{'want'}, |
249
|
|
|
|
|
|
|
#'NickList' => $self->{'NickList'}, |
250
|
|
|
|
|
|
|
#'IpList' => $self->{'IpList'}, |
251
|
|
|
|
|
|
|
#'PortList' => $self->{'PortList'}, |
252
|
|
|
|
|
|
|
#'handler' => $self->{'handler'}, |
253
|
|
|
|
|
|
|
#'share_tth' => $self->{'share_tth'}, |
254
|
|
|
|
|
|
|
#'reconnects' => 0, |
255
|
|
|
|
|
|
|
'auto_connect' => 1, |
256
|
|
|
|
|
|
|
); |
257
|
|
|
|
|
|
|
}, |
258
|
|
|
|
|
|
|
'RevConnectToMe' => sub { |
259
|
0
|
0
|
|
0
|
|
|
my $self = shift if ref $_[0]; |
260
|
0
|
|
|
|
|
|
my ( $to, $from ) = split /\s+/, $_[0]; |
261
|
|
|
|
|
|
|
#$self->log( 'dev', "[$from eq $self->{'Nick'}] ($_[0])" ); |
262
|
|
|
|
|
|
|
#$self->log( 'dev', 'go ctm' ), |
263
|
0
|
0
|
|
|
|
|
$self->cmd( 'ConnectToMe', $to ) if $from eq $self->{'Nick'}; |
264
|
|
|
|
|
|
|
}, |
265
|
|
|
|
|
|
|
'GetPass' => sub { |
266
|
0
|
0
|
|
0
|
|
|
my $self = shift if ref $_[0]; |
267
|
0
|
|
|
|
|
|
$self->cmd('MyPass'); |
268
|
|
|
|
|
|
|
}, |
269
|
|
|
|
|
|
|
'BadPass' => sub { |
270
|
0
|
0
|
|
0
|
|
|
my $self = shift if ref $_[0]; |
271
|
|
|
|
|
|
|
}, |
272
|
|
|
|
|
|
|
'LogedIn' => sub { |
273
|
0
|
0
|
|
0
|
|
|
my $self = shift if ref $_[0]; |
274
|
|
|
|
|
|
|
}, |
275
|
|
|
|
|
|
|
'Search' => sub { |
276
|
0
|
0
|
|
0
|
|
|
my $self = shift if ref $_[0]; |
277
|
0
|
|
|
|
|
|
my $search = $_[0]; |
278
|
0
|
|
|
|
|
|
$self->make_hub(); |
279
|
0
|
|
|
|
|
|
my $params = { 'time' => int( time() ), 'hub' => $self->{'hub_name'}, }; |
280
|
0
|
|
|
|
|
|
( $params->{'who'}, $params->{'cmds'} ) = split /\s+/, $search; |
281
|
0
|
|
|
|
|
|
$params->{'cmd'} = [ split /\?/, $params->{'cmds'} ]; |
282
|
0
|
0
|
|
|
|
|
if ( $params->{'who'} =~ /^Hub:(.+)$/ ) { $params->{'nick'} = $1; } |
|
0
|
|
|
|
|
|
|
283
|
0
|
|
|
|
|
|
else { ( $params->{'ip'}, $params->{'udp'} ) = split /:/, $params->{'who'}; } |
284
|
0
|
0
|
|
|
|
|
if ( $params->{'cmd'}[4] =~ /^TTH:([0-9A-Z]{39})$/ ) { $params->{'tth'} = $1; } |
|
0
|
|
|
|
|
|
|
285
|
0
|
|
|
|
|
|
else { $params->{'string'} = $params->{'cmd'}[4]; } |
286
|
0
|
0
|
|
|
|
|
$self->{'PortList_udp'}->{ $params->{'ip'} } = $params->{'udp'} if $params->{'udp'}; |
287
|
0
|
|
|
|
|
|
$params->{'string'} =~ tr/$/ /; |
288
|
|
|
|
|
|
|
#$self->cmd('make_hub'); |
289
|
|
|
|
|
|
|
#r$self->{'share_tth'} |
290
|
0
|
|
0
|
|
|
|
my $found = $self->{'share_full'}{ $params->{'tth'} } || $self->{'share_full'}{ $params->{'string'} }; |
291
|
0
|
|
|
|
|
|
my $tth = $self->{'share_tth'}{$found}; |
292
|
0
|
0
|
0
|
|
|
|
if ( |
293
|
|
|
|
|
|
|
$found |
294
|
|
|
|
|
|
|
and $tth |
295
|
|
|
|
|
|
|
#$params->{'tth'} and $self->{'share_tth'}{ $params->{'tth'} } |
296
|
|
|
|
|
|
|
) |
297
|
|
|
|
|
|
|
{ |
298
|
0
|
|
|
|
|
|
$self->log( |
299
|
|
|
|
|
|
|
'adcdev', 'Search', $params->{'who'}, |
300
|
|
|
|
|
|
|
#$self->{'share_tth'}{ $params->{'tth'} }, |
301
|
|
|
|
|
|
|
$found, -s $found, -e $found, |
302
|
|
|
|
|
|
|
), |
303
|
|
|
|
|
|
|
#$self->{'share_tth'}{ $params->{'tth'} } =~ tr{\\}{/}; |
304
|
|
|
|
|
|
|
#$self->{'share_tth'}{ $params->{'tth'} } =~ s{^/+}{}; |
305
|
|
|
|
|
|
|
my $path; |
306
|
0
|
0
|
|
|
|
|
if ( $self->{'adc'} ) { |
307
|
0
|
|
|
|
|
|
$path = $self->adc_path_encode( |
308
|
|
|
|
|
|
|
$found |
309
|
|
|
|
|
|
|
#$self->{'share_tth'}{ $params->{'tth'} } |
310
|
|
|
|
|
|
|
); |
311
|
|
|
|
|
|
|
} else { |
312
|
0
|
|
|
|
|
|
$path = $found; #$self->{'share_tth'}{ $params->{'tth'} }; |
313
|
0
|
|
|
|
|
|
$path =~ s{^\w:}{}; |
314
|
0
|
|
|
|
|
|
$path =~ s{^\W+}{}; |
315
|
0
|
|
|
|
|
|
$path =~ tr{/}{\\}; |
316
|
0
|
0
|
|
|
|
|
$path = Encode::encode $self->{charset_protocol}, Encode::decode( $self->{charset_fs}, $path, Encode::FB_WARN ), |
317
|
|
|
|
|
|
|
Encode::FB_WARN |
318
|
|
|
|
|
|
|
if $self->{charset_fs} ne $self->{charset_protocol}; |
319
|
|
|
|
|
|
|
} |
320
|
0
|
0
|
0
|
|
|
|
local @_ = ( |
|
|
0
|
0
|
|
|
|
|
321
|
|
|
|
|
|
|
'SR', ( |
322
|
|
|
|
|
|
|
#( $self->{'M'} eq 'P' or !$self->{'myport_tcp'} or !$self->{'myip'} ) ? |
323
|
|
|
|
|
|
|
$self->{'Nick'} |
324
|
|
|
|
|
|
|
#: $self->{'myip'} . ':' . $self->{'myport_tcp'} |
325
|
|
|
|
|
|
|
), |
326
|
|
|
|
|
|
|
$path . "\x05" . ( -s $found or -1 ), |
327
|
|
|
|
|
|
|
$self->{'S'} . '/' |
328
|
|
|
|
|
|
|
. $self->{'S'} . "\x05" |
329
|
|
|
|
|
|
|
. |
330
|
|
|
|
|
|
|
#"TTH:" . $params->{'tth'} |
331
|
|
|
|
|
|
|
( $params->{'tth'} ? $params->{'cmd'}[4] : "TTH:" . $tth ) |
332
|
|
|
|
|
|
|
#. ( $self->{'M'} eq 'P' ? " ($self->{'host'}:$self->{'port'})" : '' ), |
333
|
|
|
|
|
|
|
#. ( " ($self->{'host'}:$self->{'port'})\x05$params->{'nick'}" ), |
334
|
|
|
|
|
|
|
. ( |
335
|
|
|
|
|
|
|
#" ($self->{'host'}:$self->{'port'})" |
336
|
|
|
|
|
|
|
#" (".name_to_ip($self->{'host'}).":$self->{'port'})" |
337
|
|
|
|
|
|
|
#" (".inet_ntoa(gethostbyname ($self->{'host'})).":$self->{'port'})" |
338
|
|
|
|
|
|
|
" ($self->{'hostip'}:$self->{'port'})" . ( ( $params->{'ip'} and $params->{'udp'} ) ? '' : "\x05$params->{'nick'}" ) |
339
|
|
|
|
|
|
|
), |
340
|
|
|
|
|
|
|
#. ( $self->{'M'} eq 'P' ? " ($self->{'host'}:$self->{'port'})\x05$params->{'nick'}" : '' ), |
341
|
|
|
|
|
|
|
#{ SI => -s $self->{'share_tth'}{ $params->{TR} },SL => $self->{INF}{SL},FN => $self->adc_path_encode( $self->{'share_tth'}{ $params->{TR} } ),=> $params->{TO} || $self->make_token($peerid),TR => $params->{TR}} |
342
|
|
|
|
|
|
|
); |
343
|
0
|
0
|
0
|
|
|
|
if ( $params->{'ip'} and $params->{'udp'} ) { |
344
|
0
|
|
|
|
|
|
$self->send_udp( $params->{'ip'}, $params->{'udp'}, $self->{'cmd_bef'} . join ' ', @_ ); |
345
|
|
|
|
|
|
|
} else { |
346
|
0
|
|
|
|
|
|
$self->cmd(@_); |
347
|
|
|
|
|
|
|
} |
348
|
|
|
|
|
|
|
} |
349
|
|
|
|
|
|
|
#'SR', ( $self->{'M'} eq 'P' ? "Hub:$self->{'Nick'}" : "$self->{'myip'}:$self->{'myport_udp'}" ), join '?', |
350
|
|
|
|
|
|
|
#Hub: [Outgoing][80.240.208.42:4111] $SR prrrrroo0 distr\s60\games\10598_paintball2.zip621237 1/2TTH:3TFVOXE2DS6W62RWL2QBEKZBQLK3WRSLG556ZCA (80.240.208.42:4111)breathe| |
351
|
|
|
|
|
|
|
#$SR prrrrroo0 distr\moscow\mom\Mo\P\Paintball.htm1506 1/2TTH:NRRZNA5MYJSZGMPQ634CPGCPX3ZBRLKHAACPAFQ (80.240.208.42:4111)breathe| |
352
|
|
|
|
|
|
|
#$SR prrrrroo0 distr\moscow\mom\Map\P\Paintball.htm3966 1/2TTH:QLRRMET6MSNJTIRKBDLQYU6RMI5QVZDZOGAXEXA (80.240.208.42:4111)breathe| |
353
|
|
|
|
|
|
|
#$SR ILICH ЕГТС_07_2007\bases\sidhouse.DBF120923801 6/8TTH:4BAKR7LLXE65I6S4HASIXWIZONBEFS7VVZ7QQ2Y (80.240.211.183:411) |
354
|
|
|
|
|
|
|
#$SR gellarion7119 MuZonnO\Mark Knopfler - Get Lucky (2009)\mark_knopfler_-_you_cant_beat_the_house.mp36599140 7/7TTH:IDPHZ4AJIIWDYOFEKCCVJUNVIPGSGTYFW5CGEQQ (80.240.211.183:411) |
355
|
|
|
|
|
|
|
#$SR 13th_day Картинки\еще девки\sacrifice_penthouse02.jpg62412 0/20TTH:GHMWHVBKRLF52V26VFO4M4RUQ65NC3YKWIW7FPI (80.240.211.183:411) |
356
|
|
|
|
|
|
|
#DIRECT: |
357
|
|
|
|
|
|
|
#$SR server1 server\Unsorted\Desperate.Housewives.S04.720p.HDTV.x264\desperate.housewives.s04e03.720p.hdtv.x264.Rus.Eng.mkv1194423977 2/2TTH:6YWRGDXNQJEOGSB4Q7Y3Y7XRM7EXPLUK7GBRJ3A (80.240.211.183:411) |
358
|
|
|
|
|
|
|
#$SR MikMEBX Deep purple\1980-1988\08-The House Of Blue Light.1987 10/10[ f12p.ru ][ F12P-HUB ] - день единства... вспомните хорошее и улыбнитесь друг другу.. пусть это будет днем гармонии (80.240.211.183) |
359
|
|
|
|
|
|
|
#PASSIVE |
360
|
|
|
|
|
|
|
#$SR ILICH ЕГТС_07_2007\bases\sidhouse.DBF120923801 6/8TTH:4BAKR7LLXE65I6S4HASIXWIZONBEFS7VVZ7QQ2Y (80.240.211.183:411) |
361
|
|
|
|
|
|
|
#$SR gellarion7119 MuZonnO\Mark Knopfler - Get Lucky (2009)\mark_knopfler_-_you_cant_beat_the_house.mp36599140 7/7TTH:IDPHZ4AJIIWDYOFEKCCVJUNVIPGSGTYFW5CGEQQ (80.240.211.183:411) |
362
|
|
|
|
|
|
|
#$SR SALAGA Видео\Фильмы\XXX\xxx Penthouse.avi732665856 0/5TTH:3OFCM6GPQZNBNAMV6SRDFHFPK2X76EO6UCIO7ZQ (80.240.211.183:411) |
363
|
0
|
|
|
|
|
|
return $params; |
364
|
|
|
|
|
|
|
}, |
365
|
|
|
|
|
|
|
'SR' => sub { |
366
|
0
|
0
|
|
0
|
|
|
my $self = shift if ref $_[0]; |
367
|
|
|
|
|
|
|
#$self->log( 'dev', "SR", @_ , 'parent=>', $self->{parent}, 'h=', $self->{handler}, Dumper($self->{handler}), 'ph=', $self->{parent}{handler}, Dumper($self->{parent}{handler}), ) if $self; |
368
|
0
|
|
|
|
|
|
$self->make_hub(); |
369
|
0
|
|
|
|
|
|
my $params = { 'time' => int( time() ), 'hub' => $self->{'hub_name'}, }; |
370
|
0
|
|
|
|
|
|
( $params->{'nick'}, $params->{'str'} ) = split / /, $_[0], 2; |
371
|
0
|
|
|
|
|
|
$params->{'str'} = [ split /\x05/, $params->{'str'} ]; |
372
|
0
|
|
|
|
|
|
$params->{'file'} = shift @{ $params->{'str'} }; |
|
0
|
|
|
|
|
|
|
373
|
0
|
|
|
|
|
|
( $params->{'filename'} ) = $params->{'file'} =~ m{([^\\]+)$}; |
374
|
0
|
|
|
|
|
|
( $params->{'ext'} ) = $params->{'filename'} =~ m{[^.]+\.([^.]+)$}; |
375
|
0
|
|
|
|
|
|
( $params->{'size'}, $params->{'slots'} ) = split / /, shift @{ $params->{'str'} }; |
|
0
|
|
|
|
|
|
|
376
|
0
|
|
|
|
|
|
( $params->{'tth'}, $params->{'ipport'} ) = split / /, shift @{ $params->{'str'} }; |
|
0
|
|
|
|
|
|
|
377
|
0
|
0
|
|
|
|
|
( $params->{'tth'}, $params->{'ipport'} ) = ( $params->{'size'}, $params->{'slots'} ) unless $params->{'tth'}; |
378
|
0
|
|
|
|
|
|
( $params->{'target'} ) = shift @{ $params->{'str'} }; |
|
0
|
|
|
|
|
|
|
379
|
0
|
|
|
|
|
|
$params->{'tth'} =~ s/^TTH://; |
380
|
0
|
|
|
|
|
|
( $params->{'ipport'}, $params->{'ip'}, $params->{'tcp'} ) = $params->{'ipport'} =~ /\(((\S+):(\d+))\)/; |
381
|
0
|
|
|
|
|
|
delete $params->{'str'}; |
382
|
|
|
|
|
|
|
#( $params->{'slotsopen'}, $params->{'S'} ) = split /\//, $params->{'slots'}; |
383
|
|
|
|
|
|
|
#$params->{'slotsfree'} = $params->{'S'} - $params->{'slotsopen'}; |
384
|
0
|
|
|
|
|
|
( $params->{'slotsfree'}, $params->{'S'} ) = split /\//, $params->{'slots'}; |
385
|
|
|
|
|
|
|
#$params->{'slotsfree'} = $params->{'S'} - $params->{'slotsopen'}; |
386
|
0
|
|
|
|
|
|
$params->{'string'} = $self->{'search_last_string'}; |
387
|
0
|
|
|
|
|
|
$self->{'NickList'}{ $params->{'nick'} }{$_} = $params->{$_} for qw(S ip tcp); |
388
|
0
|
|
|
|
|
|
$self->{'PortList'}->{ $params->{'ip'} } = $params->{'tcp'}; |
389
|
0
|
|
|
|
|
|
$self->{'IpList'}->{ $params->{'ip'} } = $self->{'NickList'}{ $params->{'nick'} }; |
390
|
0
|
|
|
|
|
|
$params->{'TR'} = $params->{'tth'}; |
391
|
0
|
|
|
|
|
|
$params->{FN} = $params->{'filename'}; |
392
|
0
|
|
|
|
|
|
my $peerid = $params->{'nick'}; |
393
|
0
|
|
|
|
|
|
$params->{CID} = $peerid; |
394
|
|
|
|
|
|
|
#($params->{'file'}) = $params->{FN} =~ m{([^\\/]+)$}; |
395
|
0
|
|
0
|
|
|
|
my $wdl = $self->{'want_download'}{ $params->{'TR'} } || $self->{'want_download'}{ $params->{'filename'} }; |
396
|
0
|
0
|
|
|
|
|
if ($wdl) { #exists $self->{'want_download'}{ $params->{'TR'} } ) { |
397
|
|
|
|
|
|
|
#$self->{'want_download'}{ $params->{'TR'} } |
398
|
0
|
|
|
|
|
|
$wdl->{$peerid} = $params; #maybe not all |
399
|
0
|
0
|
|
|
|
|
if ( $params->{'filename'} ) { ++$self->{'want_download_filename'}{ $params->{TR} }{ $params->{'filename'} }; } |
|
0
|
|
|
|
|
|
|
400
|
0
|
|
|
|
|
|
$self->{'want_download'}{ $params->{TR} }{$peerid} = $params; # _tth_from |
401
|
|
|
|
|
|
|
} |
402
|
0
|
|
|
|
|
|
return $params; |
403
|
|
|
|
|
|
|
}, |
404
|
|
|
|
|
|
|
'UserCommand' => sub { |
405
|
0
|
0
|
|
0
|
|
|
my $self = shift if ref $_[0]; |
406
|
|
|
|
|
|
|
}, |
407
|
|
|
|
|
|
|
#}; |
408
|
0
|
|
|
|
|
|
); |
409
|
0
|
|
0
|
|
|
|
$self->{'parse'}{$_} ||= $_{$_} for keys %_; |
410
|
|
|
|
|
|
|
|
411
|
|
|
|
|
|
|
=COMMANDS |
412
|
|
|
|
|
|
|
|
413
|
|
|
|
|
|
|
|
414
|
|
|
|
|
|
|
|
415
|
|
|
|
|
|
|
|
416
|
|
|
|
|
|
|
|
417
|
|
|
|
|
|
|
|
418
|
|
|
|
|
|
|
|
419
|
|
|
|
|
|
|
|
420
|
|
|
|
|
|
|
=cut |
421
|
|
|
|
|
|
|
|
422
|
|
|
|
|
|
|
#$self->{'cmd'} = { |
423
|
|
|
|
|
|
|
local %_ = ( |
424
|
|
|
|
|
|
|
'connect_aft' => sub { |
425
|
0
|
0
|
|
0
|
|
|
my $self = shift if ref $_[0]; |
426
|
|
|
|
|
|
|
#$self->log( 'dbg', "nothing to do after connect"); |
427
|
|
|
|
|
|
|
}, |
428
|
|
|
|
|
|
|
'chatline' => sub { |
429
|
0
|
0
|
|
0
|
|
|
my $self = shift if ref $_[0]; |
430
|
0
|
|
|
|
|
|
for (@_) { |
431
|
0
|
0
|
0
|
|
|
|
if ( $self->{'min_chat_delay'} and ( time - $self->{'last_chat_time'} < $self->{'min_chat_delay'} ) ) { |
432
|
0
|
|
|
|
|
|
$self->log( 'dbg', 'sleep', $self->{'min_chat_delay'} - time + $self->{'last_chat_time'} ); |
433
|
0
|
|
|
|
|
|
$self->wait_sleep( $self->{'min_chat_delay'} - time + $self->{'last_chat_time'} ); |
434
|
|
|
|
|
|
|
} |
435
|
0
|
|
|
|
|
|
$self->{'last_chat_time'} = time; |
436
|
0
|
|
|
|
|
|
$self->log( |
437
|
|
|
|
|
|
|
'dcdmp', |
438
|
|
|
|
|
|
|
"($self->{'number'}) we send [", |
439
|
|
|
|
|
|
|
"<$self->{'Nick'}> $_|", |
440
|
|
|
|
|
|
|
"]:", $self->send("<$self->{'Nick'}> $_|"), $! |
441
|
|
|
|
|
|
|
); |
442
|
|
|
|
|
|
|
} |
443
|
|
|
|
|
|
|
}, |
444
|
|
|
|
|
|
|
'To' => sub { |
445
|
0
|
0
|
|
0
|
|
|
my $self = shift if ref $_[0]; |
446
|
0
|
|
|
|
|
|
my $to = shift; |
447
|
0
|
|
|
|
|
|
$self->sendcmd( 'To:', $to, "From: $self->{'Nick'} \$<$self->{'Nick'}> $_" ) for (@_); |
448
|
|
|
|
|
|
|
}, |
449
|
|
|
|
|
|
|
'Key' => sub { |
450
|
0
|
0
|
|
0
|
|
|
my $self = shift if ref $_[0]; |
451
|
0
|
|
|
|
|
|
$self->sendcmd( 'Key', $_[0] ); |
452
|
|
|
|
|
|
|
}, |
453
|
|
|
|
|
|
|
'ValidateNick' => sub { |
454
|
0
|
0
|
|
0
|
|
|
my $self = shift if ref $_[0]; |
455
|
0
|
|
|
|
|
|
$self->sendcmd( 'ValidateNick', $self->{'Nick'} ); |
456
|
|
|
|
|
|
|
}, |
457
|
|
|
|
|
|
|
'Version' => sub { |
458
|
0
|
0
|
|
0
|
|
|
my $self = shift if ref $_[0]; |
459
|
0
|
|
|
|
|
|
$self->sendcmd( 'Version', $self->{'Version'} ); |
460
|
|
|
|
|
|
|
}, |
461
|
|
|
|
|
|
|
'MyINFO' => sub { |
462
|
0
|
0
|
|
0
|
|
|
my $self = shift if ref $_[0]; |
463
|
0
|
|
|
|
|
|
$self->sendcmd( 'MyINFO', '$ALL', $self->myinfo() ); |
464
|
|
|
|
|
|
|
}, |
465
|
|
|
|
|
|
|
'GetNickList' => sub { |
466
|
0
|
|
|
0
|
|
|
$self->sendcmd('GetNickList'); |
467
|
|
|
|
|
|
|
}, |
468
|
|
|
|
|
|
|
'GetINFO' => sub { |
469
|
0
|
0
|
|
0
|
|
|
my $self = shift if ref $_[0]; |
470
|
0
|
0
|
|
|
|
|
@_ = grep { $self->{'NickList'}{$_}{'online'} and !$self->{'NickList'}{$_}{'info'} } keys %{ $self->{'NickList'} } |
|
0
|
0
|
|
|
|
|
|
|
0
|
|
|
|
|
|
|
471
|
|
|
|
|
|
|
unless @_; |
472
|
0
|
|
|
|
|
|
local $self->{'sendbuf'} = 1; |
473
|
0
|
|
|
|
|
|
$self->sendcmd( 'GetINFO', $_, $self->{'Nick'} ) for @_; |
474
|
0
|
|
|
|
|
|
$self->sendcmd(); |
475
|
|
|
|
|
|
|
}, |
476
|
|
|
|
|
|
|
'BotINFO' => sub { |
477
|
0
|
0
|
|
0
|
|
|
my $self = shift if ref $_[0]; |
478
|
0
|
|
|
|
|
|
$self->sendcmd( 'BotINFO', $self->{botinfo} ); |
479
|
|
|
|
|
|
|
}, |
480
|
|
|
|
|
|
|
'ConnectToMe' => sub { |
481
|
0
|
0
|
|
0
|
|
|
my $self = shift if ref $_[0]; |
482
|
0
|
0
|
0
|
|
|
|
$self->log( 'dcdbg', "cannot ConnectToMe from passive mode" ), return |
483
|
|
|
|
|
|
|
if $self->{'M'} eq 'P' and !$self->{'allow_passive_ConnectToMe'}; |
484
|
0
|
0
|
|
|
|
|
$self->log( 'err', "please define myip" ), return unless $self->{'myip'}; |
485
|
0
|
|
|
|
|
|
$self->sendcmd( 'ConnectToMe', $_[0], "$self->{'myip'}:$self->{'myport'}" ); |
486
|
|
|
|
|
|
|
}, |
487
|
|
|
|
|
|
|
'RevConnectToMe' => sub { |
488
|
0
|
0
|
|
0
|
|
|
my $self = shift if ref $_[0]; |
489
|
0
|
|
|
|
|
|
$self->log( "send", ( 'RevConnectToMe', $self->{'Nick'}, $_[0] ), ref $_[0] ); |
490
|
0
|
|
|
|
|
|
$self->sendcmd( 'RevConnectToMe', $self->{'Nick'}, $_[0] ); |
491
|
|
|
|
|
|
|
}, |
492
|
|
|
|
|
|
|
'MyPass' => sub { |
493
|
0
|
0
|
|
0
|
|
|
my $self = shift if ref $_[0]; |
494
|
0
|
|
0
|
|
|
|
my $pass = ( $_[0] or $self->{'Pass'} ); |
495
|
0
|
0
|
|
|
|
|
$self->sendcmd( 'MyPass', $pass ) if $pass; |
496
|
|
|
|
|
|
|
}, |
497
|
|
|
|
|
|
|
'Supports' => sub { |
498
|
0
|
0
|
|
0
|
|
|
my $self = shift if ref $_[0]; |
499
|
0
|
|
0
|
|
|
|
$self->sendcmd( 'Supports', $self->supports() || return ); |
500
|
|
|
|
|
|
|
}, |
501
|
|
|
|
|
|
|
'Quit' => sub { |
502
|
0
|
0
|
|
0
|
|
|
my $self = shift if ref $_[0]; |
503
|
0
|
|
|
|
|
|
$self->sendcmd( 'Quit', $self->{'Nick'} ); |
504
|
0
|
|
|
|
|
|
$self->disconnect(); |
505
|
|
|
|
|
|
|
}, |
506
|
|
|
|
|
|
|
'SR' => sub { |
507
|
0
|
0
|
|
0
|
|
|
my $self = shift if ref $_[0]; |
508
|
0
|
|
|
|
|
|
$self->sendcmd( 'SR', @_ ); |
509
|
|
|
|
|
|
|
}, |
510
|
|
|
|
|
|
|
'Search' => sub { |
511
|
0
|
0
|
|
0
|
|
|
my $self = shift if ref $_[0]; |
512
|
|
|
|
|
|
|
#$self->log('devsearch', "mode=[$self->{'M'}]"); |
513
|
0
|
0
|
|
|
|
|
$self->sendcmd( 'Search', ( $self->{'M'} eq 'P' ? "Hub:$self->{'Nick'}" : "$self->{'myip'}:$self->{'myport_udp'}" ), |
514
|
|
|
|
|
|
|
join '?', @_ ); |
515
|
|
|
|
|
|
|
}, |
516
|
|
|
|
|
|
|
'search_nmdc' => sub { |
517
|
0
|
0
|
|
0
|
|
|
my $self = shift if ref $_[0]; |
518
|
0
|
|
|
|
|
|
local @_ = @_; |
519
|
0
|
|
|
|
|
|
$_[0] =~ tr/ /$/; |
520
|
0
|
|
|
|
|
|
@_ = ( ( 'F', 'T', '0', undef )[ 0 .. 3 - $#_ ], reverse @_ ); |
521
|
0
|
0
|
0
|
|
|
|
$_[3] ||= ( $_[4] =~ s/^(TTH:)?([A-Z0-9]{39})$/TTH:$2/ ? '9' : '1' ) unless defined $_[3]; |
|
|
0
|
|
|
|
|
|
522
|
|
|
|
|
|
|
# |
523
|
|
|
|
|
|
|
#$self->cmd( 'search_buffer', 'F', 'T', '0', '1', @_ ); |
524
|
0
|
|
|
|
|
|
$self->search_buffer(@_); |
525
|
|
|
|
|
|
|
}, |
526
|
|
|
|
|
|
|
'search_tth' => sub { |
527
|
0
|
0
|
|
0
|
|
|
my $self = shift if ref $_[0]; |
528
|
0
|
|
|
|
|
|
$self->{'search_last_string'} = undef; |
529
|
0
|
|
|
|
|
|
$self->search_nmdc(@_); |
530
|
|
|
|
|
|
|
}, |
531
|
|
|
|
|
|
|
'search_string' => sub { |
532
|
0
|
0
|
|
0
|
|
|
my $self = shift if ref $_[0]; |
533
|
|
|
|
|
|
|
#my $string = $_[0]; |
534
|
0
|
|
|
|
|
|
$self->{'search_last_string'} = $_[0]; #$string; |
535
|
|
|
|
|
|
|
#$string =~ tr/ /$/; |
536
|
0
|
|
|
|
|
|
$self->search_nmdc(@_); |
537
|
|
|
|
|
|
|
}, |
538
|
|
|
|
|
|
|
'search_send' => sub { |
539
|
0
|
0
|
|
0
|
|
|
my $self = shift if ref $_[0]; |
540
|
|
|
|
|
|
|
#$self->log( 'devsearchsend', "$self->{'M'} ne 'P' and $self->{'myip'} and $self->{'myport_udp'}" ); |
541
|
0
|
0
|
|
|
|
|
$self->sendcmd( |
542
|
|
|
|
|
|
|
'Search', ( |
543
|
|
|
|
|
|
|
( $self->{'M'} ne 'P' and $self->{'myip'} and $self->{'myport_udp'} ) |
544
|
|
|
|
|
|
|
? "$self->{'myip'}:$self->{'myport_udp'}" |
545
|
|
|
|
|
|
|
: 'Hub:' . $self->{'Nick'} |
546
|
|
|
|
|
|
|
), |
547
|
|
|
|
|
|
|
join '?', |
548
|
0
|
0
|
0
|
|
|
|
@{ $_[0] || $self->{'search_last'} } |
549
|
|
|
|
|
|
|
); |
550
|
|
|
|
|
|
|
}, |
551
|
|
|
|
|
|
|
# |
552
|
|
|
|
|
|
|
'stat_hub' => sub { |
553
|
0
|
0
|
|
0
|
|
|
my $self = shift if ref $_[0]; |
554
|
0
|
|
|
|
|
|
local %_; |
555
|
|
|
|
|
|
|
#for my $w qw(SS) { |
556
|
|
|
|
|
|
|
#++$_{UC}, |
557
|
0
|
0
|
|
|
|
|
local @_ = grep { length $_ and $_ ne $self->{'Nick'} } keys %{ $self->{'NickList'} }; |
|
0
|
|
|
|
|
|
|
|
0
|
|
|
|
|
|
|
558
|
0
|
|
|
|
|
|
$_{SS} += $self->{'NickList'}{$_}{'sharesize'} for @_; |
559
|
|
|
|
|
|
|
#} |
560
|
0
|
|
|
|
|
|
$_{UC} = @_; |
561
|
0
|
|
|
|
|
|
return \%_; |
562
|
|
|
|
|
|
|
}, |
563
|
|
|
|
|
|
|
#}; |
564
|
0
|
|
|
|
|
|
); |
565
|
0
|
|
0
|
|
|
|
$self->{'cmd'}{$_} ||= $_{$_} for keys %_; |
566
|
|
|
|
|
|
|
#$self->log( 'dev', "0making listeners [$self->{'M'}]" ); |
567
|
0
|
0
|
0
|
|
|
|
if ( $self->{'M'} eq 'A' or !$self->{'M'} ) { |
568
|
|
|
|
|
|
|
#$self->log( 'dev', "making listeners: tcp, class=", $self->{'incomingclass'} ); |
569
|
0
|
|
|
|
|
|
$self->{'clients'}{'listener_tcp'} = $self->{'incomingclass'}->new( |
570
|
|
|
|
|
|
|
#%$self, $self->clear(), |
571
|
|
|
|
|
|
|
#'want' => \%{ $self->{'want'} }, |
572
|
|
|
|
|
|
|
#'NickList' => \%{ $self->{'NickList'} }, |
573
|
|
|
|
|
|
|
#'IpList' => \%{ $self->{'IpList'} }, |
574
|
|
|
|
|
|
|
#'PortList' => \%{ $self->{'PortList'} }, |
575
|
|
|
|
|
|
|
#'handler' => \%{ $self->{'handler'} }, |
576
|
|
|
|
|
|
|
#'share_tth' => $self->{'share_tth'}, |
577
|
|
|
|
|
|
|
'myport' => $self->{'myport'}, |
578
|
|
|
|
|
|
|
'auto_listen' => 1, |
579
|
|
|
|
|
|
|
'parent' => $self, |
580
|
|
|
|
|
|
|
); |
581
|
0
|
|
|
|
|
|
$self->{'myport'} = $self->{'myport_tcp'} = $self->{'clients'}{'listener_tcp'}{'myport'}; |
582
|
0
|
0
|
|
|
|
|
$self->log( 'err', "cant listen tcp (file transfers)" ) unless $self->{'myport_tcp'}; |
583
|
|
|
|
|
|
|
#$self->log( 'dev', "making listeners: udp" ); |
584
|
|
|
|
|
|
|
$self->{'clients'}{'listener_udp'} = $self->{'incomingclass'}->new( |
585
|
|
|
|
|
|
|
#%$self, $self->clear(), |
586
|
|
|
|
|
|
|
'parent' => $self, 'Proto' => 'udp', 'myport' => $self->{myport_udp}, |
587
|
|
|
|
|
|
|
#? 'want' => \%{ $self->{'want'} }, |
588
|
|
|
|
|
|
|
#? 'NickList' => \%{ $self->{'NickList'} }, |
589
|
|
|
|
|
|
|
#? 'IpList' => \%{ $self->{'IpList'} }, |
590
|
|
|
|
|
|
|
#? 'PortList' => \%{ $self->{'PortList'} }, |
591
|
|
|
|
|
|
|
#'handler' => \%{ $self->{'handler'} }, |
592
|
|
|
|
|
|
|
#'handler' => $self->{'handler'} , |
593
|
|
|
|
|
|
|
#$self->{'clients'}{''} = $self->{'incomingclass'}->new( %$self, $self->clear(), |
594
|
|
|
|
|
|
|
#'LocalPort'=>$self->{'myport'}, |
595
|
|
|
|
|
|
|
#'debug'=>1, |
596
|
|
|
|
|
|
|
#'nonblocking' => 0, |
597
|
|
|
|
|
|
|
'parse' => { |
598
|
|
|
|
|
|
|
'SR' => $self->{'parse'}{'SR'}, |
599
|
|
|
|
|
|
|
'PSR' => sub { #U |
600
|
0
|
0
|
|
0
|
|
|
my $self = shift if ref $_[0]; |
601
|
|
|
|
|
|
|
#my $self = ref $_[0] ? shift() : $self; |
602
|
0
|
0
|
|
|
|
|
$self->log( 'dev', "PSR", @_ ) if $self; |
603
|
|
|
|
|
|
|
}, |
604
|
|
|
|
|
|
|
'UPSR' => sub { # TODO |
605
|
0
|
0
|
|
0
|
|
|
my $self = shift if ref $_[0]; |
606
|
|
|
|
|
|
|
#my $self = ref $_[0] ? shift() : $self; |
607
|
|
|
|
|
|
|
#!$self->log( 'dev', "UPSR", 'udp' ) if $self; |
608
|
0
|
0
|
|
|
|
|
for ( split /\n+/, $_[0] ) { return $self->parser($_) if /^\$SR/; } |
|
0
|
|
|
|
|
|
|
609
|
|
|
|
|
|
|
#$self->log( 'dev', "UPSR", @_ ) if $self; |
610
|
|
|
|
|
|
|
}, |
611
|
|
|
|
|
|
|
#2008/12/14-13:30:50 [3] rcv: welcome UPSR FQ2DNFEXG72IK6IXALNSMBAGJ5JAYOQXJGCUZ4A NIsss2911 HI81.9.63.68:4111 U40 TRZ34KN23JX2BQC2USOTJLGZNEWGDFB327RRU3VUQ PC4 PI0,64,92,94,100,128,132,135 RI64,65,66,67,68,68,69,70,71,72 |
612
|
|
|
|
|
|
|
#UPSR CDARCZ6URO4RAZKK6NDFTVYUQNLMFHS6YAR3RKQ NIAspid HI81.9.63.68:411 U40 TRQ6SHQECTUXWJG5ZHG3L322N5B2IV7YN2FG4YXFI PC2 PI15,17,20,128 RI128,129,130,131 |
613
|
|
|
|
|
|
|
#$SR [Predator]Wolf DC++\Btyan Adams - Please Forgive Me.mp314217310 18/20TTH:G7DXSTGPHTXSD2ZZFQEUBWI7PORILSKD4EENOII (81.9.63.68:4111) |
614
|
|
|
|
|
|
|
#2008/12/14-13:30:50 welcome UPSR FQ2DNFEXG72IK6IXALNSMBAGJ5JAYOQXJGCUZ4A NIsss2911 HI81.9.63.68:4111 U40 TRZ34KN23JX2BQC2USOTJLGZNEWGDFB327RRU3VUQ PC4 PI0,64,92,94,100,128,132,135 RI64,65,66,67,68,68,69,70,71,72 |
615
|
|
|
|
|
|
|
#UPSR CDARCZ6URO4RAZKK6NDFTVYUQNLMFHS6YAR3RKQ NIAspid HI81.9.63.68:411 U40 TRQ6SHQECTUXWJG5ZHG3L322N5B2IV7YN2FG4YXFI PC2 PI15,17,20,128 RI128,129,130,131 |
616
|
|
|
|
|
|
|
#$SR [Predator]Wolf DC++\Btyan Adams - Please Forgive Me.mp314217310 18/20TTH:G7DXSTGPHTXSD2ZZFQEUBWI7PORILSKD4EENOII (81.9.63.68:4111) |
617
|
|
|
|
|
|
|
}, |
618
|
0
|
|
|
|
|
|
'auto_listen' => 1, |
619
|
|
|
|
|
|
|
'parent' => $self, |
620
|
|
|
|
|
|
|
); |
621
|
0
|
|
|
|
|
|
$self->{'myport_udp'} = $self->{'clients'}{'listener_udp'}{'myport'}; |
622
|
0
|
0
|
|
|
|
|
$self->log( 'err', "cant listen udp (search repiles)" ) unless $self->{'myport_udp'}; |
623
|
|
|
|
|
|
|
} |
624
|
|
|
|
|
|
|
|
625
|
|
|
|
|
|
|
=z |
626
|
|
|
|
|
|
|
$self->log( 'dev', "making listeners: http" ); |
627
|
|
|
|
|
|
|
$self->{'clients'}{'listener_http'} = Net::DirectConnect::http->new( |
628
|
|
|
|
|
|
|
%$self, $self->clear(), |
629
|
|
|
|
|
|
|
#'want' => \%{ $self->{'want'} }, |
630
|
|
|
|
|
|
|
#'NickList' => \%{ $self->{'NickList'} }, |
631
|
|
|
|
|
|
|
#'IpList' => \%{ $self->{'IpList'} }, |
632
|
|
|
|
|
|
|
## 'PortList' => \%{ $self->{'PortList'} }, |
633
|
|
|
|
|
|
|
'handler' => \%{ $self->{'handler'} }, |
634
|
|
|
|
|
|
|
#$self->{'clients'}{''} = $self->{'incomingclass'}->new( %$self, $self->clear(), |
635
|
|
|
|
|
|
|
#'LocalPort'=>$self->{'myport'}, |
636
|
|
|
|
|
|
|
#'debug'=>1, |
637
|
|
|
|
|
|
|
'auto_listen' => 1, |
638
|
|
|
|
|
|
|
); |
639
|
|
|
|
|
|
|
$self->{'myport_http'} = $self->{'clients'}{'listener_http'}{'myport'}; |
640
|
|
|
|
|
|
|
$self->log( 'err', "cant listen http" ) |
641
|
|
|
|
|
|
|
unless $self->{'myport_http'}; |
642
|
|
|
|
|
|
|
=cut |
643
|
|
|
|
|
|
|
|
644
|
0
|
|
|
0
|
|
|
$self->{'handler_int'}{'disconnect_bef'} = sub { |
645
|
|
|
|
|
|
|
#delete $self->{'sid'}; |
646
|
|
|
|
|
|
|
#$self->log( 'dev', 'disconnect int' ) if $self and $self->{'log'}; |
647
|
0
|
|
|
|
|
|
}; |
648
|
|
|
|
|
|
|
} |
649
|
|
|
|
|
|
|
1; |