ctcp/dcc/gate.plm

  • ここんとこ PORT範囲値に変更するとNAT対応になる

$listenno = &'listen( PORT, MAXCONN );

module\ctcp\dcc\gate.plm(328):     $lno = &'listen(0, 1) || return @params;
module\ctcp\dcc\gate.plm(397):     $lno = &'listen(0, 1) || return @params;
module\ctcp\dcc\gate.plm(412):     $lno = &'listen(0, 1) || return @params;
 $lno = &listen_hoge() || return @params;
 sub listen_hoge {
  $swap = &'property($userno, 'swap'));
  ($addr, $list) = split(/\:/, $swap);
  @port = split(/\,/, $list || '');
  return &'listen($port[rand(@port)] || 0, 1 );
 }

swapの書式変更となるため

sub get_plumaddr {
  local($clientno) = @_;

  local($addr, $sno );
  $sno = $'server[$clientno];

  $addr = &'property($userno, 'swap');
  ($addr, $list) = split(/\:/, $swap);
  return unpack('N', gethostbyname($addr)) if($addr);

  return (&'sockname($sno))[1];
}

ctcp.dcc.gate.swap: nanoha.com:4096,4097,4098,4099

    • module/ctcp/dcc/nat.plm
sub parse_ip {
  local($ip) = @_;
  local(@addr);
  if ($ip =~ /^\d+$/) {
    return $ip;
  } elsif ($ip =~ /^[\d\.]+$/) {
    @addr = split(/\./, $ip);
    return unpack('N', pack('C4', @addr, 0, 0, 0));
  } else {
    return unpack('N', (gethostbyname($ip))[4] || "\0\0\0\0");
  }
  return 0 unless $ip;
}

を流用して

sub get_plumaddr {
  local($clientno) = @_;

  local($addr, $sno );
  $sno = $'server[$clientno];

  $addr = &'property($userno, 'swap');
  ($addr, $list) = split(/\:/, $swap);
  return &parse_ip($addr) if($addr);

  return (&'sockname($sno))[1];
}

のほうがスマート

    • GPL2なのか

plum プロジェクト日本語トップページ - OSDN