40 |
lprintf "%s[dCon] " |
lprintf "%s[dCon] " |
41 |
(log_time ()); lprintf_nl2 |
(log_time ()); lprintf_nl2 |
42 |
|
|
43 |
|
(* prints a new logline with date, module and does not start newline *) |
44 |
|
let lprintf_n () = |
45 |
|
lprintf "%s[EDK] " |
46 |
|
(log_time ()); lprintf |
47 |
|
|
48 |
let rec dollar_escape o with_frames s = |
let rec dollar_escape o with_frames s = |
49 |
String2.convert false (fun b escaped c -> |
String2.convert false (fun b escaped c -> |
50 |
if escaped then |
if escaped then |
100 |
let buf = o.conn_buf in |
let buf = o.conn_buf in |
101 |
let cmd = Url.decode cmd in |
let cmd = Url.decode cmd in |
102 |
let cmd = |
let cmd = |
103 |
if String2.check_prefix cmd "ed2k://" then "dllink " ^ cmd |
if String2.check_prefix cmd "ed2k://" || |
104 |
|
String2.check_prefix cmd "http://" then "dllink " ^ cmd |
105 |
else if String2.check_prefix cmd "fha://" then "ovlink " ^ cmd |
else if String2.check_prefix cmd "fha://" then "ovlink " ^ cmd |
106 |
else cmd in |
else cmd in |
107 |
let l = String2.tokens cmd in |
let l = String2.tokens cmd in |
445 |
|
|
446 |
let iac_will_naws = "\255\253\031" |
let iac_will_naws = "\255\253\031" |
447 |
|
|
448 |
let user_reader o telnet sock nread = |
let user_reader o telnet sock nread = |
449 |
let b = TcpBufferedSocket.buf sock in |
let b = TcpBufferedSocket.buf sock in |
450 |
let end_pos = b.pos + b.len in |
let end_pos = b.pos + b.len in |
451 |
let new_pos = end_pos - nread in |
let new_pos = end_pos - nread in |
567 |
match event with |
match event with |
568 |
TcpServerSocket.CONNECTION (s, Unix.ADDR_INET (from_ip, from_port)) -> |
TcpServerSocket.CONNECTION (s, Unix.ADDR_INET (from_ip, from_port)) -> |
569 |
let from_ip = Ip.of_inet_addr from_ip in |
let from_ip = Ip.of_inet_addr from_ip in |
|
if Ip.matches from_ip !!allowed_ips then |
|
570 |
let token = create_token unlimited_connection_manager in |
let token = create_token unlimited_connection_manager in |
571 |
let sock = TcpBufferedSocket.create_simple token |
let sock = TcpBufferedSocket.create_simple token |
572 |
"telnet connection" |
"telnet connection" |
586 |
conn_width = 80; |
conn_width = 80; |
587 |
conn_height = 0; |
conn_height = 0; |
588 |
} in |
} in |
589 |
|
if Ip.matches from_ip !!allowed_ips then begin |
590 |
TcpBufferedSocket.prevent_close sock; |
TcpBufferedSocket.prevent_close sock; |
591 |
TcpBufferedSocket.set_max_output_buffer sock !!interface_buffer; |
TcpBufferedSocket.set_max_output_buffer sock !!interface_buffer; |
592 |
TcpBufferedSocket.set_reader sock (user_reader o telnet); |
TcpBufferedSocket.set_reader sock (user_reader o telnet); |
596 |
TcpBufferedSocket.write_string sock iac_will_naws; |
TcpBufferedSocket.write_string sock iac_will_naws; |
597 |
|
|
598 |
before_telnet_output o sock; |
before_telnet_output o sock; |
599 |
TcpBufferedSocket.write_string sock (text_of_html !!motd_html); |
TcpBufferedSocket.write_string sock |
600 |
|
(Printf.sprintf "Welcome to MLDonkey %s" Autoconf.current_version); |
601 |
|
|
602 |
TcpBufferedSocket.write_string sock (dollar_escape o false |
TcpBufferedSocket.write_string sock (dollar_escape o false |
603 |
"\n$bWelcome on mldonkey command-line$n\n\nUse $r?$n for help\n\n"); |
"\n$bWelcome on mldonkey command-line$n\n\nUse $r?$n for help\n\n"); |
604 |
|
|
605 |
after_telnet_output o sock |
after_telnet_output o sock |
606 |
|
end |
607 |
else begin |
else begin |
608 |
lprintf_nl () "Telnet connection from %s rejected (see allowed_ips setting)" |
before_telnet_output o sock; |
609 |
(Ip.to_string from_ip); |
let reject_message = |
610 |
Unix.close s |
Printf.sprintf "Telnet connection from %s rejected (see allowed_ips setting)\n" |
611 |
|
(Ip.to_string from_ip) |
612 |
|
in |
613 |
|
TcpBufferedSocket.write_string sock (dollar_escape o false reject_message); |
614 |
|
shutdown sock Closed_connect_failed; |
615 |
|
lprintf_n () "%s" reject_message; |
616 |
|
Unix.close s |
617 |
end |
end |
618 |
|
|
619 |
| _ -> () |
| _ -> () |