mldonkey-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Mldonkey-commits] mldonkey distrib/ChangeLog src/daemon/common/co...


From: mldonkey-commits
Subject: [Mldonkey-commits] mldonkey distrib/ChangeLog src/daemon/common/co...
Date: Sat, 23 Oct 2010 18:25:14 +0000

CVSROOT:        /sources/mldonkey
Module name:    mldonkey
Changes by:     spiralvoice <spiralvoice>       10/10/23 18:25:14

Modified files:
        distrib        : ChangeLog 
        src/daemon/common: commonGlobals.ml commonOptions.ml 
        src/daemon/driver: driverCommands.ml 
        src/networks/donkey: donkeyClient.ml donkeyProtoClient.ml 
                             donkeyTypes.ml 

Log message:
        patch #7318

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/mldonkey/distrib/ChangeLog?cvsroot=mldonkey&r1=1.1489&r2=1.1490
http://cvs.savannah.gnu.org/viewcvs/mldonkey/src/daemon/common/commonGlobals.ml?cvsroot=mldonkey&r1=1.91&r2=1.92
http://cvs.savannah.gnu.org/viewcvs/mldonkey/src/daemon/common/commonOptions.ml?cvsroot=mldonkey&r1=1.234&r2=1.235
http://cvs.savannah.gnu.org/viewcvs/mldonkey/src/daemon/driver/driverCommands.ml?cvsroot=mldonkey&r1=1.256&r2=1.257
http://cvs.savannah.gnu.org/viewcvs/mldonkey/src/networks/donkey/donkeyClient.ml?cvsroot=mldonkey&r1=1.131&r2=1.132
http://cvs.savannah.gnu.org/viewcvs/mldonkey/src/networks/donkey/donkeyProtoClient.ml?cvsroot=mldonkey&r1=1.48&r2=1.49
http://cvs.savannah.gnu.org/viewcvs/mldonkey/src/networks/donkey/donkeyTypes.ml?cvsroot=mldonkey&r1=1.60&r2=1.61

Patches:
Index: distrib/ChangeLog
===================================================================
RCS file: /sources/mldonkey/mldonkey/distrib/ChangeLog,v
retrieving revision 1.1489
retrieving revision 1.1490
diff -u -b -r1.1489 -r1.1490
--- distrib/ChangeLog   23 Oct 2010 18:23:38 -0000      1.1489
+++ distrib/ChangeLog   23 Oct 2010 18:25:13 -0000      1.1490
@@ -15,6 +15,10 @@
 =========
 
 2010/10/23
+7318: EDK: Emule captcha support and slight cleanup (dennisne)
+- added support for Emule's anti-spam chat CAPTCHAs
+- added clear_message_log command to clear (long) message logs 
+- HTML: reversed order of chat messages
 7319: EDK: Fix CryptoPP on mips64 abi n32 (viric)
 7356: options: ensure that tmp file is removed (ygrek)
 7355: DC web ui: escape commands' arguments (ygrek)

Index: src/daemon/common/commonGlobals.ml
===================================================================
RCS file: /sources/mldonkey/mldonkey/src/daemon/common/commonGlobals.ml,v
retrieving revision 1.91
retrieving revision 1.92
diff -u -b -r1.91 -r1.92
--- src/daemon/common/commonGlobals.ml  23 May 2010 09:18:31 -0000      1.91
+++ src/daemon/common/commonGlobals.ml  23 Oct 2010 18:25:13 -0000      1.92
@@ -445,12 +445,12 @@
 let log_chat_message i num n s =
   Fifo.put chat_message_fifo (last_time(),i,num,n,s);
   (try
-    Unix2.tryopen_write_gen !messages_log [Open_creat; Open_wronly; 
Open_append] 
+    Unix2.tryopen_write_gen messages_log [Open_creat; Open_wronly; 
Open_append] 
       0o600 (fun oc ->
        Printf.fprintf oc "%s: %s (%s): %s\n" (Date.simple 
(BasicSocket.date_of_int (last_time ()))) n i s)
   with e ->
     lprintf_nl "[ERROR] Exception %s while trying to log message to %s"
-      (Printexc2.to_string e) !messages_log);
+      (Printexc2.to_string e) messages_log);
 
   while (Fifo.length chat_message_fifo) > !!html_mods_max_messages do
     ignore(Fifo.take chat_message_fifo)

Index: src/daemon/common/commonOptions.ml
===================================================================
RCS file: /sources/mldonkey/mldonkey/src/daemon/common/commonOptions.ml,v
retrieving revision 1.234
retrieving revision 1.235
diff -u -b -r1.234 -r1.235
--- src/daemon/common/commonOptions.ml  8 Aug 2010 18:37:41 -0000       1.234
+++ src/daemon/common/commonOptions.ml  23 Oct 2010 18:25:13 -0000      1.235
@@ -303,7 +303,7 @@
 let files_ini = create_options_file "files.ini"
 let friends_ini = create_options_file "friends.ini"
 
-let messages_log = ref "messages.log"
+let messages_log = "messages.log"
 
 let servers_section = file_section servers_ini [] ""
 

Index: src/daemon/driver/driverCommands.ml
===================================================================
RCS file: /sources/mldonkey/mldonkey/src/daemon/driver/driverCommands.ml,v
retrieving revision 1.256
retrieving revision 1.257
diff -u -b -r1.256 -r1.257
--- src/daemon/driver/driverCommands.ml 7 Aug 2010 14:51:15 -0000       1.256
+++ src/daemon/driver/driverCommands.ml 23 Oct 2010 18:25:13 -0000      1.257
@@ -543,6 +543,11 @@
         ""
     ), "<minutes> :\t\t\tprint activity in the last <minutes> minutes";
 
+    "clear_message_log", Arg_none (fun o ->
+        Fifo.clear chat_message_fifo;
+        Printf.sprintf "Chat messages cleared"
+     ), ":\t\t\t\tclear chat message buffer";
+
     "message_log", Arg_multiple (fun args o ->
         let buf = o.conn_buf in
         html_mods_cntr_init ();
@@ -577,7 +582,7 @@
                 ( "0", "srh", "Client name", "Client name" ) ;
                 ( "0", "srh", "Message text", "Message" ) ] ;
 
-            Fifo.iter (fun (t,i,num,n,s) ->
+            List.iter (fun (t,i,num,n,s) ->
                 if use_html_mods o then begin
                     Printf.bprintf buf "\\<tr class=\\\"dl-%d\\\"\\>"
                       (html_mods_cntr ());
@@ -586,13 +591,15 @@
                       ("", "sr",  i);
                       ("", "sr", Printf.sprintf "%d" num);
                       ("", "sr", n);
-                      ("", "srw", (String.escaped s)) ];
+                      ("", "srw", (if String.length s > 11 && String.sub s 0 
11 = "data:image/" then
+                          "\\<img src=\\\"" ^ String.escaped s ^ "\\\">"
+                        else String.escaped s)) ];
                     Printf.bprintf buf "\\</tr\\>"
                   end
                 else
                   Printf.bprintf buf "\n%s [client #%d] %s(%s): %s\n"
                     (Date.simple (BasicSocket.date_of_int t)) num n i s;
-            ) chat_message_fifo;
+            ) (List.rev (Fifo.to_list chat_message_fifo));
             if use_html_mods o then Printf.bprintf buf
                 "\\</table\\>\\</div\\>\\</div\\>";
 
@@ -609,8 +616,10 @@
                   a1 ^ a2 ^ " "
               ) "" msglist in
             let cnum = int_of_string n in
-            client_say (client_find cnum) msg;
-           log_chat_message "localhost" 0 !!global_login msg;
+            let c = client_find cnum in
+            let g = client_info c in
+            client_say c msg;
+           log_chat_message "FROM ME" cnum ("TO: " ^ g.client_name) msg;
             Printf.sprintf "Sending msg to client #%d: %s" cnum msg;
         | _ ->
             if use_html_mods o then begin
@@ -673,7 +682,11 @@
                 Printf.bprintf buf "\\<form style=\\\"margin: 0px;\\\" 
id=\\\"refresh\\\" name=\\\"refresh\\\"
             action=\\\"javascript:msgWindow.location.reload();\\\"\\>
             \\<td\\>\\<input style=\\\"font-family: verdana; font-size: 
12px;\\\" type=submit
-            Value=\\\"Refresh\\\"\\>\\</td\\>\\</form\\>\\</tr\\>\\</table\\>";
+            Value=\\\"Refresh\\\"\\>\\</td\\>\\</form\\>";
+                Printf.bprintf buf "\\<form style=\\\"margin: 0px;\\\" 
id=\\\"clear\\\" name=\\\"clear\\\"
+            
action=\\\"javascript:window.location.href='submit?q=clear_message_log'\\\"\\>
+            \\<td\\>\\<input style=\\\"font-family: verdana; font-size: 
12px;\\\" type=submit
+            Value=\\\"Clear\\\"\\>\\</td\\>\\</form\\>\\</tr\\>\\</table\\>";
                 ""
               end
             else

Index: src/networks/donkey/donkeyClient.ml
===================================================================
RCS file: /sources/mldonkey/mldonkey/src/networks/donkey/donkeyClient.ml,v
retrieving revision 1.131
retrieving revision 1.132
diff -u -b -r1.131 -r1.132
--- src/networks/donkey/donkeyClient.ml 22 Oct 2009 19:58:45 -0000      1.131
+++ src/networks/donkey/donkeyClient.ml 23 Oct 2010 18:25:13 -0000      1.132
@@ -1961,6 +1961,108 @@
       in
       log_chat_message cip (client_num c) c.client_name s;
   
+  
+  | M.EmuleCaptchaReq t ->
+      let buf = Buffer.create 4096 in
+      let len = String.length t in
+      let b64_map = [|
+        'A'; 'B'; 'C'; 'D'; 'E'; 'F'; 'G'; 'H'; 'I'; 'J'; 'K'; 'L'; 'M'; 'N'; 
'O'; 'P';
+        'Q'; 'R'; 'S'; 'T'; 'U'; 'V'; 'W'; 'X'; 'Y'; 'Z'; 'a'; 'b'; 'c'; 'd'; 
'e'; 'f';
+        'g'; 'h'; 'i'; 'j'; 'k'; 'l'; 'm'; 'n'; 'o'; 'p'; 'q'; 'r'; 's'; 't'; 
'u'; 'v';
+        'w'; 'x'; 'y'; 'z'; '0'; '1'; '2'; '3'; '4'; '5'; '6'; '7'; '8'; '9'; 
'+'; '/'|] in
+
+      for i = 0 to (len / 3) - 1 do
+        let c1 = int_of_char t.[i*3] in
+        let c2 = int_of_char t.[i*3+1] in
+        let c3 = int_of_char t.[i*3+2] in
+        let n1 = c1 lsr 2 in
+        let n2 = ((c1 land 3) lsl 4) lor (c2 lsr 4) in
+        let n3 = ((c2 land 0xf) lsl 2) lor (c3 lsr 6) in
+        let n4 = c3 land 63 in
+          Printf.bprintf buf "%c%c%c%c" b64_map.(n1) b64_map.(n2) b64_map.(n3) 
b64_map.(n4);
+      done;
+      if (len mod 3) = 1 then (
+        let i = len - 2 in
+        let c1 = int_of_char t.[i] in
+        let c2 = int_of_char t.[i+1] in
+        let n1 = ((c1 land 0xf) lsl 2) lor (c2 lsr 6) in
+        let n2 = c2 land 63 in
+          Printf.bprintf buf "%c%c==" b64_map.(n1) b64_map.(n2)
+      )
+      else if (len mod 3) = 2 then (
+        let i = len - 3 in
+        let c1 = int_of_char t.[i] in
+        let c2 = int_of_char t.[i+1] in
+        let c3 = int_of_char t.[i+2] in
+        let n1 = ((c1 land 3) lsl 4) lor (c2 lsr 4) in
+        let n2 = ((c2 land 0xf) lsl 2) lor (c3 lsr 6) in
+        let n3 = c3 land 63 in
+          Printf.bprintf buf "%c%c%c=" b64_map.(n1) b64_map.(n2) b64_map.(n3)
+      );
+
+      let b64data = Buffer.contents buf in
+      let cip =
+        ( 
+          try
+            
+            match c.client_source.DonkeySources.source_sock with
+              Connection sock ->
+                (Ip.to_string (peer_ip sock) ^ ":" ^ string_of_int (peer_port 
sock))
+            | _ -> (match c.client_kind with 
+                    Direct_address (ip,port) ->
+                      ((Ip.to_string ip) ^ ":" ^ string_of_int port)
+                  | Indirect_address _ | Invalid_address _ -> "Indirect"
+                )
+          
+          with _ -> 
+              
+              try 
+                match c.client_kind with 
+                  Direct_address (ip,port) ->
+                    ((Ip.to_string ip) ^ ":" ^ string_of_int port)
+                | Indirect_address _ | Invalid_address _ -> "Indirect"
+              with _ -> ""
+        ) 
+      in
+        log_chat_message cip (client_num c) c.client_name 
("data:image/bmp;base64," ^ b64data)
+
+
+  | M.EmuleCaptchaRes t ->
+      let cip =
+        (
+          try
+            
+            match c.client_source.DonkeySources.source_sock with
+              Connection sock ->
+                (Ip.to_string (peer_ip sock) ^ ":" ^ string_of_int (peer_port 
sock))
+            | _ -> (match c.client_kind with 
+                    Direct_address (ip,port) ->
+                      ((Ip.to_string ip) ^ ":" ^ string_of_int port)
+                  | Indirect_address _ | Invalid_address _ -> "Indirect"
+                )
+          
+          with _ -> 
+              
+              try 
+                match c.client_kind with 
+                  Direct_address (ip,port) ->
+                    ((Ip.to_string ip) ^ ":" ^ string_of_int port)
+                | Indirect_address _ | Invalid_address _ -> "Indirect"
+              with _ -> ""
+        )
+      in
+        log_chat_message cip (client_num c) c.client_name (
+          if t = 0 then
+            "You have correctly solved the captcha and your message was sent."
+          else if t = 1 then
+            "Wrong answer to the captcha, so your message was not sent. You 
will only be sent 3 captchas. Try sending another message to receive another 
captcha challenge."
+          else if t = 2 then
+            "3 captchas have already been sent to you. Fail."
+          else
+            "Unknown captcha state!?"
+        )
+
+  
   | M.QueryChunkMd4Req t when !CommonGlobals.has_upload = 0 -> 
       
       let file = find_file t in

Index: src/networks/donkey/donkeyProtoClient.ml
===================================================================
RCS file: /sources/mldonkey/mldonkey/src/networks/donkey/donkeyProtoClient.ml,v
retrieving revision 1.48
retrieving revision 1.49
diff -u -b -r1.48 -r1.49
--- src/networks/donkey/donkeyProtoClient.ml    31 Mar 2008 07:58:16 -0000      
1.48
+++ src/networks/donkey/donkeyProtoClient.ml    23 Oct 2010 18:25:14 -0000      
1.49
@@ -69,6 +69,7 @@
     emule_extmultipacket = 0;
     emule_largefiles = 1;
     emule_kad_version = 0;
+    emule_support_captcha = 1;
   }
 
 let emule_miscoptions1 m =
@@ -121,12 +122,14 @@
 
 let emule_miscoptions2 m =
   let o =
+    (m.emule_support_captcha lsl 11) lor
     (m.emule_largefiles lsl 4)
   in
   Int64.of_int o
 
 let update_emule_proto_from_miscoptions2 m o =
   let o = Int64.to_int o in
+  m.emule_support_captcha <- (o lsr 11) land 0x1;
   m.emule_require_crypt  <- (o lsr 9) land 0x1;
   m.emule_request_crypt  <- (o lsr 8) land 0x1;
   m.emule_support_crypt  <- (o lsr 7) land 0x1;
@@ -142,6 +145,7 @@
   if m.emule_extmultipacket <> 0 then Printf.bprintf buf " extmultipacket 
%d\n" m.emule_extmultipacket;
   if m.emule_largefiles <> 0 then Printf.bprintf buf " largefiles %d\n" 
m.emule_largefiles;
   if m.emule_kad_version <> 0 then Printf.bprintf buf " kad_version %d\n" 
m.emule_kad_version;
+  if m.emule_support_captcha <> 0 then Printf.bprintf buf " support_captcha 
%d\n" m.emule_support_captcha;
   Buffer.contents buf
 
 let emule_compatoptions m =
@@ -941,6 +945,39 @@
 
   end
 
+
+module EmuleCaptchaReq = struct
+
+    type t = string
+
+    let print t =
+      lprintf_nl "EmuleCaptchaReq [CAPTCHA BMP length=%d bytedata=%s]" 
(String.length t) (String.escaped t)
+
+    let parse len s =
+      String.sub s 2 (len - 2)
+
+    let write buf t =
+      buf_estring buf t
+
+  end
+
+
+module EmuleCaptchaRes = struct
+
+    type t = int
+
+    let print t =
+      lprintf_nl "EmuleCaptchaRes RESPONSE=%d" t
+
+    let parse s =
+      get_uint8 s 1
+
+    let write buf t =
+      buf_int8 buf t
+
+  end
+
+
 module EmuleSecIdentStateReq = struct
 
     type t = {
@@ -1177,6 +1214,8 @@
 | EmuleMultiPacketAnswerReq of Md4.t * t list
 | EmuleCompressedPart of EmuleCompressedPart.t
 | EmulePortTestReq of EmulePortTestReq.t
+| EmuleCaptchaReq of EmuleCaptchaReq.t
+| EmuleCaptchaRes of EmuleCaptchaRes.t
 
 let rec print t =
   begin
@@ -1248,6 +1287,10 @@
         EmuleCompressedPart.print t
     | EmulePortTestReq t ->
         EmulePortTestReq.print t
+    | EmuleCaptchaReq t ->
+        EmuleCaptchaReq.print t
+    | EmuleCaptchaRes t ->
+        EmuleCaptchaRes.print t
     | UnknownReq (opcode, s) ->
         let len = String.length s in
         lprintf_nl "UnknownReq: magic (%d), opcode (%d) len (%d)" opcode 
@@ -1379,8 +1422,9 @@
         EmuleCompressedPart (EmuleCompressedPart.parse true len s)
     | 0xa2 -> BlocReq (Bloc.parse true len s) (* OP_SENDINGPART_I64 *)
     | 0xa3 -> QueryBlocReq (QueryBloc.parse true len s) (*OP_REQUESTPARTS_I64 
*)
-    | 0xfe (* 254 *) ->
-        EmulePortTestReq s
+    | 0xa5 (* 165 *) -> EmuleCaptchaReq (EmuleCaptchaReq.parse len s) (* 
OP_CHATCAPTCHAREQ *)
+    | 0xa6 (* 166 *) -> EmuleCaptchaRes (EmuleCaptchaRes.parse s) (* 
OP_CHATCAPTCHARES *)
+    | 0xfe (* 254 *) -> EmulePortTestReq s
 
     | code ->
         if !CommonOptions.verbose_unknown_messages then
@@ -1495,6 +1539,8 @@
     | EmuleClientInfoReq _
     | EmuleFileDescReq _
     | EmuleQueueRankingReq _
+    | EmuleCaptchaReq _
+    | EmuleCaptchaRes _
     | EmuleCompressedPart _
       -> 0xC5
     | QueryBlocReq t when t.QueryBloc.usesixtyfour -> 0xC5
@@ -1664,7 +1710,15 @@
 
     | EmulePortTestReq t ->
         buf_int8 buf 0xfe;
-        EmulePortTestReq.write buf;
+        EmulePortTestReq.write buf
+
+    | EmuleCaptchaReq t ->
+        buf_int8 buf 0xa5;
+        EmuleCaptchaReq.write buf t
+
+    | EmuleCaptchaRes t ->
+        buf_int8 buf 0xa6;
+        EmuleCaptchaRes.write buf t
 
     | UnknownReq (opcode, s) ->
         Buffer.add_string buf s

Index: src/networks/donkey/donkeyTypes.ml
===================================================================
RCS file: /sources/mldonkey/mldonkey/src/networks/donkey/donkeyTypes.ml,v
retrieving revision 1.60
retrieving revision 1.61
diff -u -b -r1.60 -r1.61
--- src/networks/donkey/donkeyTypes.ml  26 May 2007 23:21:48 -0000      1.60
+++ src/networks/donkey/donkeyTypes.ml  23 Oct 2010 18:25:14 -0000      1.61
@@ -63,6 +63,7 @@
     mutable emule_extmultipacket : int;
     mutable emule_largefiles : int;
     mutable emule_kad_version : int;
+    mutable emule_support_captcha : int;
   }
 
 type emule_tag_name =
@@ -730,6 +731,7 @@
     emule_extmultipacket = 0;
     emule_largefiles = 0;
     emule_kad_version = 0;
+    emule_support_captcha = 0;
   }
 
 let emule_proto () =



reply via email to

[Prev in Thread] Current Thread [Next in Thread]