Changeset 11130

Show
Ignore:
Timestamp:
05/05/08 02:20:34 (5 years ago)
Author:
topia
Message:

* more refactored.
* add documentation.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • lang/perl/tiarra/trunk/module/CTCP/DCC/RewriteAddress.pm

    r11121 r11130  
    1414use Tools::HTTPClient; 
    1515 
     16 
     17sub new { 
     18    my $this = shift->SUPER::new(@_); 
     19 
     20    $this->{permit_types} = [map uc, split /\s+/, 
     21                             ($this->config->type || 'CHAT SEND')]; 
     22    $this->{resolvers} = [map lc, split /\s+/, $this->config->resolver]; 
     23 
     24    return $this; 
     25} 
     26 
    1627sub message_arrived { 
    1728    my ($this,$msg,$sender) = @_; 
     
    2132            !defined $msg->nick) { 
    2233 
    23         my @permit_types = split /\s+/, (uc($this->config->type)); 
    2434        my $text = $msg->param(1); 
    2535        foreach my $ctcp (CTCP->extract_from_text("$text")) { 
    2636            if ($ctcp =~ m|^DCC (\S*) (.*)$|) { 
    2737                my ($type, $params) = (uc($1), $2); 
    28                 next unless !@permit_types or grep { $type eq $_ } @permit_types; 
     38                next unless grep { $type eq $_ } @{$this->{permit_types}}; 
    2939                my $result = $this->rewrite_dcc( 
    3040                    $msg->clone, $type, $params, $sender); 
     
    210220sub rewrite_dcc { 
    211221    my ($this, $msg, $type, $param, $sender) = @_; 
    212     if ($param !~ /^(\S*) (\S*) (\S*)(.*)$/) { 
     222    if ($param !~ /^(\S+) ([\d.]+) (\S+)(.*)$/) { 
    213223        return undef; 
    214224    } 
    215225 
    216226    my ($arg, $addr, $port, $trail) = ($1, $2, $3, $4); 
     227 
    217228    $addr = intaddr_to_octet($addr); 
    218229    my $send_dcc = sub { 
     
    223234        1; 
    224235    }; 
    225     my @resolvers = split /\s+/, $this->config->resolver; 
    226236 
    227237    my $closure = sub { 
     
    233243    }; 
    234244    $this->get_dcc_address_port( 
    235         $msg, $sender, $addr, $port, $closure, @resolvers); 
     245        $msg, $sender, $addr, $port, $closure, @{$this->{resolvers}}); 
    236246 
    237247} 
     
    250260# 別のクライアントには送信されません。 
    251261 
    252 # 変換する DCC タイプ。省略すると全てのDCCを処理する。 
    253 type: send chat 
     262# 変換する DCC タイプ。 [デフォルト値: CHAT SEND] 
     263type: CHAT SEND 
    254264 
    255265# 変換用アドレスの取得方法を選択する。デフォルト値はありません。 
    256 resolver: client-socket server-socket 
    257  
     266# 以下の取得方法(server-socket client-socket dns http)から 
     267# 必要なもの(複数可)を指定してください。 
     268resolver: client-socket server-socket dns http 
     269 
     270# 取得方法と設定 
     271# なにも設定がないときはブロック自体を省略することもできます。 
    258272server-socket { 
    259273  # サーバソケットのローカルアドレスを取ります。