gate.plm.diff続けてみた

gate.plm.diff (gate.plm,v 2.39 - gate.plm,v 2.39.1)

4d3
< # 2.39.1 05.10.25       Magical.H     Adding Resume
11c10
< local( @lname, @lhost, @lport );
---
> 
215c214
<     @msg = &client_gate($clientno, $user, $params[0], split(/\s+/, $params[1]));
---
>     @msg = &client_gate($clientno, $user, split(/\s+/, $params[1]));
218,219d216
<       # DCCしたことを全クライアントへ案内する
<       &infomation("*** DCC Gate ($params[1]) to $params[0]");
276,277c273
< 	# ACCEPTによるポート変更に対応
<     if ($sno = &&#39;connect($lhost[$listenno], $lport[$listenno])) {
---
>     if ($sno = &&#39;connect($params[2], $params[3])) {
294,295c290
< # delete &#39;SEND&#39;
<   if ("\L$params[0]\E" eq &#39;chat&#39;) {
---
>   if ("\L$params[0]\E" eq &#39;send&#39; || "\L$params[0]\E" eq &#39;chat&#39;) {
305,314c300
< # test
<       return @params;
<     }
<   } elsif ("\L$params[0]\E" eq &#39;resume&#39;) {
<     foreach $lno (&&#39;array($dcclistenlist)) {
<       $port = (&&#39;sockname($lno))[0];
<       next unless $port == $params[2];
<       &infomation("*** DCC Gate \L$params[0]\E WAN $params[2] <-> LAN $lport[$lno] $lname[$lno]");
<       $params[2] = $lport[$lno];
<       return @params;
---
>       &&#39;c_print($cno, $prefix, &#39;PRIVMSG&#39;, $&#39;nick[$cno], "\cA" . join(&#39; &#39;, &#39;DCC&#39;, @params) . "\cA");
315a302
>     return ();
333,334c320,321
<   local($clientno, $prefix, $target, @params) = @_;
<   local($lno, $host, $port, $sno, $cno );
---
>   local($clientno, $prefix, @params) = @_;
>   local($lno, $host, $port, $sno);
336,338c323
< 
<   if ("\L$params[0]\E" eq &#39;chat&#39;) {
< 
---
>   if ("\L$params[0]\E" eq &#39;send&#39; || "\L$params[0]\E" eq &#39;chat&#39;) {
342d326
<     $lport[$lno] = $params[3];
344c328
<     $params[2] = &get_plumaddr($clientno);
---
>     $params[2] = (&&#39;sockname($sno))[1];
346,377d329
<   } elsif ("\L$params[0]\E" eq &#39;send&#39;) {
<     $lno = &&#39;listen(0, 1) || return @params;
<     $userno[$lno] = $&#39;userno[$clientno];
<     $request[$lno] = &&#39;list(@params);
< 
<     # ListenNoとClientSocketを関連づける
<     $lname[$lno] = $params[1];
<     $lhost[$lno] = $params[2];
<     $lport[$lno] = $params[3];
< 
<     $lhostname[$lno] = (&&#39;peername($clientno))[2];
< 
<     $dcclistenlist = &&#39;add($dcclistenlist, $lno);
< 
<     $params[2] = &get_plumaddr($clientno);
<     $params[3] = (&&#39;sockname($lno))[0];
< 
<     &infomation("*** DCC Gate \L$params[0]\E $params[1] -> $target");
< 
<   } elsif ("\L$params[0]\E" eq &#39;accept&#39;) {
<     local( $ollno , $nwlno );
< 
<     # 認知済クライアントリストよりポートが同一の物であれば、ACCEPT応答をバイパス
<     foreach $ollno (&&#39;array($dcclistenlist)) {
<       next unless $lport[$ollno] == $params[2];
<       $params[2] = (&&#39;sockname($ollno))[0];
<       &infomation("*** DCC Gate \L$params[0]\E (@params) -> $target");
<       return @params;
<     }
<     return ();  # 認知済リストより一致する物が無ければキャンセル
< 
< 
396,416d347
< 
< sub infomation {
<   local($message) = @_;
<   local($cno);
< 
<   foreach $cno (&&#39;array($&#39;clientlist)) {
<     next unless $&#39;avail[$cno];
<     &&#39;c_print($cno, &#39;&#39;, &#39;NOTICE&#39;, $&#39;nick[$cno], $message );
<   }
< }
< 
< sub get_plumaddr {
<   local($clientno) = @_;
<   local($addr, $sno );
<   $sno = $&#39;server[$clientno];
< 
<   $addr = &&#39;property($userno, &#39;swap&#39;);
<   return unpack(&#39;N&#39;, gethostbyname($addr)) if($addr);
< 
<   return (&&#39;sockname($sno))[1];
< }
481,485d411
< <DT>  ctcp.dcc.gate.swap グローバルアドレス
< </DT>
< <DD>    静的NATでプライベートアドレスのサーバの場合、
<         swapに記述されたグローバルアドレスに置換することができます。
< </DD>
497d422
< ctcp.dcc.gate.swap: nanoha.com
507c432
< 送りもとアドレスはnanoha.com
---
>