2003.04.09 (水) 16:50:59 <u*j*2*6*> 判別しまちがうかもしれないのでまだBanとかはしません
2003.04.09 (水) 16:51:37 <u*j*2*6*> ユーザー窓の、WinMX??とかが表示されるところに、ソフト名がでます
2003.04.09 (水) 17:07:53 <u*j*2*6*> Napchan,2get,Utatane,XNap,MX2.x,MX3.xに対応
2003.04.09 (水) 17:08:01 <u*j*2*6*> ほかのクライアントをみまちがえたり、共有0のユーザーを判別できなかったりします
2003.05.28 (水) 11:07:42 <heavy> WinMX v2.6としてpingに対しpongを返すと駄目みたいです。
2003.05.28 (水) 18:15:23 <u*j*2*6*> (゚ー゚)(。_。)(゚-゚)(。_。)ウンウン、MX2.6はpongしてこないですね
shuusei24159:クライアントの自動判別(report by 2ndreal,saint,heavy_baby,Shin)

diff --dos -ur 24158/console.pas 24159/console.pas
--- 24158/console.pas	Sat Mar 22 23:12:24 2003
+++ 24159/console.pas	Wed Apr 09 16:25:04 2003
@@ -554,11 +554,24 @@
          str:=str+GetLangI(LNG_LIST_WINMXH);
         end
         else
-        if (TLocalUser(user^.local).softwareID<>softWinMXNormal) and (TLocalUser(user^.local).softwareID<>softWinMXJap) and (not (locPingable in TLocalUser(user^.local).localstate)) and ((current_time-20000)>TLocalUser(user^.local).last_seen) then
+        {if (TLocalUser(user^.local).softwareID<>softWinMXNormal) and (TLocalUser(user^.local).softwareID<>softWinMXJap) and (not (locPingable in TLocalUser(user^.local).localstate)) and ((current_time-20000)>TLocalUser(user^.local).last_seen) then
         begin
          if str<>'' then str:=str+', ';
          str:=str+GetLangI(LNG_LIST_NOPONG);
-        end;
+        end;}
+        if str<>'' then str:=str+', ';
+        if locPingable in TLocalUser(user^.local).localstate then
+        begin
+          if loc326 in TLocalUser(user^.local).detector then str:=str+'2get'
+          else if loc10300 in TLocalUser(user^.local).detector then str:=str+'XNap';
+          //else if not (loc208 in TLocalUser(user^.local).detector) then str:=str+'XNap??';
+        end
+        else if loc326 in TLocalUser(user^.local).detector then str:=str+'MX2.x'
+        else if loc110 in TLocalUser(user^.local).detector then str:=str+'Napchan'
+        else if loc208 in TLocalUser(user^.local).detector then str:=str+'Utatane'
+        else if locMD5Zeros in TLocalUser(user^.local).detector then str:=str+'Utatane'
+        else if locMD5NonZero in TLocalUser(user^.local).detector then str:=str+'MX3.x'
+        else str:=str+'MX3.x??'
       end;
       item.SubItems.Add(str);
       //item.SubItems.Add(IntToStr(TLocalUser(user^.local).shared_blocked));
diff --dos -ur 24158/constants.pas 24159/constants.pas
--- 24158/constants.pas	Sat Mar 29 11:06:12 2003
+++ 24159/constants.pas	Wed Apr 09 14:58:56 2003
@@ -27,8 +27,8 @@
  SLAVANAP_VERSION             = '2.4.1';
  SLAVANAP_BUILD               = '108';
  SLAVANAP_BUILD_DATE          = '24 January 2003';
- SLAVANAP_SHUUSEI             = '58';
- SLAVANAP_SHUUSEI_DATE        = '29 March 2003';
+ SLAVANAP_SHUUSEI             = '59';
+ SLAVANAP_SHUUSEI_DATE        = '9 April 2003';
  SLAVANAP_VERSION_SHORT       = SLAVANAP_TITLE+' '+SLAVANAP_VERSION;
  SLAVANAP_FULL                = SLAVANAP_TITLE+' '+SLAVANAP_VERSION+
                                 ' (build '+SLAVANAP_BUILD+
diff --dos -ur 24158/handler.pas 24159/handler.pas
--- 24158/handler.pas	Sat Mar 29 13:11:34 2003
+++ 24159/handler.pas	Wed Apr 09 16:16:44 2003
@@ -1718,6 +1718,9 @@
  if query<>queryNormal then exit;
  if not isLogged then exit;
  if not CheckParams(1) then exit;
+ if gcmd.id=MSG_CLIENT_ADD_HOTLIST_SEQ then
+ if GetTickCount-local.last_seen<30000 then
+   local.detector:=local.detector+[loc208];
  tmp_pos:=251;
  case gcmd.id of
     MSG_CLIENT_ADD_HOTLIST,
@@ -1793,6 +1796,8 @@
                                 local.Exec(MSG_SERVER_NOT_IGNORED,gcmd.cmd);
                             end;
     MSG_CLIENT_CLEAR_IGNORE: begin
+                              if GetTickCount-local.last_seen<30000 then
+                                local.detector:=local.detector+[loc326];
                               i:=local.ignored.Count;
                               StrHash_Clear(local.ignored);
                               local.Exec(gcmd.id,IntToStr(i));
@@ -2497,6 +2502,10 @@
   Error(GetLangT(LNG_INVALIDARGS),true);
   exit;
  end;
+ if (dir='') and not valid_dir then local.detector:=local.detector+[loc100];
+ if hlist.Strings[1]='0' then local.detector:=local.detector+[locMD5Zero]
+ else if hlist.Strings[1]='00000000000000000000000000000000' then local.detector:=local.detector+[locMD5Zeros]
+ else local.detector:=local.detector+[locMD5NonZero];
  tmp_pos:=12262;
  if autoban_incomplete and (Pos('__INCOMPLETE___',hlist.Strings[0])<>0) then
  begin
@@ -2668,6 +2677,7 @@
     CheckWinMX(local);
    exit;
  end;
+ local.detector:=local.detector+[loc870];
  tmp_pos:=302;
  dir:=hlist.Strings[0];
  hlist.Delete(0);
@@ -2701,6 +2711,10 @@
  if query<>queryNormal then exit;
  //if user^.level=napUserLeech then exit;
  if not CheckParams(4) then exit;
+ local.detector:=local.detector+[loc10300];
+ if hlist.Strings[1]='0' then local.detector:=local.detector+[locMD5Zero]
+ else if hlist.Strings[1]='00000000000000000000000000000000' then local.detector:=local.detector+[locMD5Zeros]
+ else local.detector:=local.detector+[locMD5NonZero];
  tmp_pos:=12262;
  if autoban_incomplete and (Pos('__INCOMPLETE___',hlist.Strings[0])<>0) then
  begin
@@ -2824,6 +2838,7 @@
  tmp_pos:=320;
  if not isLocal then exit;
  if not isLogged then exit;
+ if GetTickCount-local.last_seen<30000 then local.detector:=local.detector+[loc110];
  if local.shared=nil then exit;
  if user^.shared=0 then
    if not nocount_text then exit
@@ -6677,6 +6692,7 @@
  tmp_pos:=670;
  if not isLogged then exit;
  if not CheckParams(1) then exit;
+ if isLocal and (GetTickCount-local.last_seen<30000) then local.detector:=local.detector+[loc640];
  if user^.level=napUserLeech then
  begin
    Exec(user,MSG_SERVER_BROWSE_DIRECT_ERR,hlist.Strings[0]+' "'+GetLangT(LNG_BROWSELEECH)+'"');
diff --dos -ur 24158/localusers.pas 24159/localusers.pas
--- 24158/localusers.pas	Fri Mar 14 12:03:36 2003
+++ 24159/localusers.pas	Wed Apr 09 14:45:10 2003
@@ -28,6 +28,8 @@
 type
  TLocalUserState = set of (locSwapBytes, locNeedsUpdate, locWriteOnly,
     locFloodWarning, locPingable);
+ TLocalUserDetector = set of (loc326, loc110, loc640, loc208,
+    loc100, loc870, loc10300, locMD5Zero, locMD5NonZero, locMD5Zeros);
  TLocalUser = class(TObject)
   data            : POnlineUser;
   socket          : HSocket;
@@ -66,6 +68,7 @@
   blocked_toosmall,
   blocked_tooshortmp3,
   blocked_other   : Word; //blocked_otherはブロックワードによるブロックを含まない
+  detector        : TLocalUserDetector;
   constructor Create;
   destructor Destroy; override;
   function  logged: Boolean;
@@ -132,6 +135,7 @@
  blocked_toosmall   :=0;
  blocked_tooshortmp3:=0;
  blocked_other      :=0;
+ detector:=[];
 {$IFDEF USERS_DOUBLE_QUEUE}
  StrHash_Reset(out_list2);
 {$ENDIF}
@@ -210,6 +214,7 @@
  blocked_toosmall   :=0;
  blocked_tooshortmp3:=0;
  blocked_other      :=0;
+ detector:=[];
 {$IFDEF USERS_DOUBLE_QUEUE}
  StrHash_Clear(out_list2);
 {$ENDIF}