forked from KolibriOS/kolibrios
Telnet: code cleanup, no semantic changes.
git-svn-id: svn://kolibrios.org@5858 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
cf26ff1759
commit
026a30e72b
@ -1,6 +1,6 @@
|
|||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
;; ;;
|
;; ;;
|
||||||
;; Copyright (C) KolibriOS team 2010-2013. All rights reserved. ;;
|
;; Copyright (C) KolibriOS team 2010-2015. All rights reserved. ;;
|
||||||
;; Distributed under terms of the GNU General Public License ;;
|
;; Distributed under terms of the GNU General Public License ;;
|
||||||
;; ;;
|
;; ;;
|
||||||
;; telnet.asm - Telnet client for KolibriOS ;;
|
;; telnet.asm - Telnet client for KolibriOS ;;
|
||||||
@ -14,8 +14,6 @@
|
|||||||
|
|
||||||
format binary as ""
|
format binary as ""
|
||||||
|
|
||||||
__DEBUG__ = 0
|
|
||||||
__DEBUG_LEVEL__ = 1
|
|
||||||
BUFFERSIZE = 4096
|
BUFFERSIZE = 4096
|
||||||
|
|
||||||
use32
|
use32
|
||||||
@ -33,7 +31,6 @@ include '../../macros.inc'
|
|||||||
purge mov,add,sub
|
purge mov,add,sub
|
||||||
include '../../proc32.inc'
|
include '../../proc32.inc'
|
||||||
include '../../dll.inc'
|
include '../../dll.inc'
|
||||||
include '../../debug-fdo.inc'
|
|
||||||
include '../../network.inc'
|
include '../../network.inc'
|
||||||
|
|
||||||
; entry point
|
; entry point
|
||||||
@ -43,45 +40,34 @@ start:
|
|||||||
test eax, eax
|
test eax, eax
|
||||||
jnz exit
|
jnz exit
|
||||||
; initialize console
|
; initialize console
|
||||||
push 1
|
invoke con_start, 1
|
||||||
call [con_start]
|
invoke con_init, 80, 25, 80, 25, title
|
||||||
push title
|
|
||||||
push 25
|
|
||||||
push 80
|
|
||||||
push 25
|
|
||||||
push 80
|
|
||||||
call [con_init]
|
|
||||||
|
|
||||||
; Check for parameters
|
; Check for parameters
|
||||||
cmp byte [hostname], 0
|
cmp byte[hostname], 0
|
||||||
jne resolve
|
jne resolve
|
||||||
|
|
||||||
main:
|
main:
|
||||||
call [con_cls]
|
invoke con_cls
|
||||||
; Welcome user
|
; Welcome user
|
||||||
push str1
|
invoke con_write_asciiz, str1
|
||||||
call [con_write_asciiz]
|
|
||||||
|
|
||||||
prompt:
|
prompt:
|
||||||
; write prompt
|
; write prompt
|
||||||
push str2
|
invoke con_write_asciiz, str2
|
||||||
call [con_write_asciiz]
|
; read string (wait for input)
|
||||||
; read string
|
|
||||||
mov esi, hostname
|
mov esi, hostname
|
||||||
push 256
|
invoke con_gets, esi, 256
|
||||||
push esi
|
|
||||||
call [con_gets]
|
|
||||||
; check for exit
|
; check for exit
|
||||||
test eax, eax
|
test eax, eax
|
||||||
jz done
|
jz done
|
||||||
cmp byte [esi], 10
|
cmp byte[esi], 10
|
||||||
jz done
|
jz done
|
||||||
|
|
||||||
resolve:
|
resolve:
|
||||||
|
mov [sockaddr1.port], 23 shl 8 ; Port is in network byte order
|
||||||
|
|
||||||
mov [sockaddr1.port], 23 shl 8
|
; delete terminating newline from URL and parse port, if any.
|
||||||
|
|
||||||
; delete terminating '\n'
|
|
||||||
mov esi, hostname
|
mov esi, hostname
|
||||||
@@:
|
@@:
|
||||||
lodsb
|
lodsb
|
||||||
@ -89,22 +75,22 @@ resolve:
|
|||||||
je .do_port
|
je .do_port
|
||||||
cmp al, 0x20
|
cmp al, 0x20
|
||||||
ja @r
|
ja @r
|
||||||
mov byte [esi-1], 0
|
mov byte[esi-1], 0
|
||||||
jmp .done
|
jmp .done
|
||||||
|
|
||||||
.do_port:
|
.do_port:
|
||||||
xor eax, eax
|
xor eax, eax
|
||||||
xor ebx, ebx
|
xor ebx, ebx
|
||||||
mov byte [esi-1], 0
|
mov byte[esi-1], 0
|
||||||
.portloop:
|
.portloop:
|
||||||
lodsb
|
lodsb
|
||||||
cmp al, 0x20
|
cmp al, ' '
|
||||||
jbe .port_done
|
jbe .port_done
|
||||||
sub al, '0'
|
sub al, '0'
|
||||||
jb hostname_error
|
jb hostname_error
|
||||||
cmp al, 9
|
cmp al, 9
|
||||||
ja hostname_error
|
ja hostname_error
|
||||||
lea ebx, [ebx*4 + ebx]
|
lea ebx, [ebx*4+ebx]
|
||||||
shl ebx, 1
|
shl ebx, 1
|
||||||
add ebx, eax
|
add ebx, eax
|
||||||
jmp .portloop
|
jmp .portloop
|
||||||
@ -117,42 +103,30 @@ resolve:
|
|||||||
|
|
||||||
; resolve name
|
; resolve name
|
||||||
push esp ; reserve stack place
|
push esp ; reserve stack place
|
||||||
push esp ; ptr to result
|
invoke getaddrinfo, hostname, 0, 0, esp
|
||||||
push 0 ; addrinfo hints
|
|
||||||
push 0 ; servname
|
|
||||||
push hostname; hostname
|
|
||||||
call [getaddrinfo]
|
|
||||||
pop esi
|
pop esi
|
||||||
; test for error
|
; test for error
|
||||||
test eax, eax
|
test eax, eax
|
||||||
jnz dns_error
|
jnz dns_error
|
||||||
|
|
||||||
call [con_cls]
|
invoke con_cls
|
||||||
push str3
|
invoke con_write_asciiz, str3
|
||||||
call [con_write_asciiz]
|
invoke con_write_asciiz, hostname
|
||||||
push hostname
|
|
||||||
call [con_write_asciiz]
|
|
||||||
|
|
||||||
; write results
|
; write results
|
||||||
push str8
|
invoke con_write_asciiz, str8
|
||||||
call [con_write_asciiz]
|
|
||||||
; mov edi, esi
|
|
||||||
|
|
||||||
; convert IP address to decimal notation
|
; convert IP address to decimal notation
|
||||||
mov eax, [esi+addrinfo.ai_addr]
|
mov eax, [esi+addrinfo.ai_addr]
|
||||||
mov eax, [eax+sockaddr_in.sin_addr]
|
mov eax, [eax+sockaddr_in.sin_addr]
|
||||||
mov [sockaddr1.ip], eax
|
mov [sockaddr1.ip], eax
|
||||||
push eax
|
invoke inet_ntoa, eax
|
||||||
call [inet_ntoa]
|
|
||||||
; write result
|
; write result
|
||||||
push eax
|
invoke con_write_asciiz, eax
|
||||||
call [con_write_asciiz]
|
|
||||||
; free allocated memory
|
; free allocated memory
|
||||||
push esi
|
invoke freeaddrinfo, esi
|
||||||
call [freeaddrinfo]
|
|
||||||
|
|
||||||
push str9
|
invoke con_write_asciiz, str9
|
||||||
call [con_write_asciiz]
|
|
||||||
|
|
||||||
mcall socket, AF_INET4, SOCK_STREAM, 0
|
mcall socket, AF_INET4, SOCK_STREAM, 0
|
||||||
cmp eax, -1
|
cmp eax, -1
|
||||||
@ -163,8 +137,8 @@ resolve:
|
|||||||
test eax, eax
|
test eax, eax
|
||||||
jnz socket_err
|
jnz socket_err
|
||||||
|
|
||||||
mcall 40, 1 shl 7 ; + 7
|
mcall 40, EVM_STACK
|
||||||
call [con_cls]
|
invoke con_cls
|
||||||
|
|
||||||
mcall 18, 7
|
mcall 18, 7
|
||||||
push eax
|
push eax
|
||||||
@ -173,7 +147,7 @@ resolve:
|
|||||||
mcall 18, 3
|
mcall 18, 3
|
||||||
|
|
||||||
mainloop:
|
mainloop:
|
||||||
call [con_get_flags]
|
invoke con_get_flags
|
||||||
test eax, 0x200 ; con window closed?
|
test eax, 0x200 ; con window closed?
|
||||||
jnz exit
|
jnz exit
|
||||||
|
|
||||||
@ -181,18 +155,15 @@ mainloop:
|
|||||||
cmp eax, -1
|
cmp eax, -1
|
||||||
je closed
|
je closed
|
||||||
|
|
||||||
|
|
||||||
DEBUGF 1, 'TELNET: got %u bytes of data !\n', eax
|
|
||||||
|
|
||||||
mov esi, buffer_ptr
|
mov esi, buffer_ptr
|
||||||
lea edi, [esi + eax]
|
lea edi, [esi+eax]
|
||||||
mov byte [edi], 0
|
mov byte[edi], 0
|
||||||
|
|
||||||
.scan_cmd:
|
.scan_cmd:
|
||||||
cmp byte [esi], 0xff ; Interpret As Command
|
cmp byte[esi], 0xff ; Interpret As Command
|
||||||
jne .no_cmd
|
jne .no_cmd
|
||||||
; TODO: parse options, for now, we will reply with 'WONT' to everything
|
; TODO: parse options
|
||||||
mov byte [esi + 1], 252 ; WONT
|
; for now, we will reply with 'WONT' to everything
|
||||||
|
mov byte[esi+1], 252 ; WONT
|
||||||
add esi, 3 ; a command is always 3 bytes
|
add esi, 3 ; a command is always 3 bytes
|
||||||
jmp .scan_cmd
|
jmp .scan_cmd
|
||||||
.no_cmd:
|
.no_cmd:
|
||||||
@ -200,8 +171,6 @@ mainloop:
|
|||||||
cmp esi, buffer_ptr
|
cmp esi, buffer_ptr
|
||||||
je .print
|
je .print
|
||||||
|
|
||||||
DEBUGF 1, 'TELNET: sending data\n'
|
|
||||||
|
|
||||||
push esi edi
|
push esi edi
|
||||||
sub esi, buffer_ptr
|
sub esi, buffer_ptr
|
||||||
mcall send, [socketnum], buffer_ptr, , 0
|
mcall send, [socketnum], buffer_ptr, , 0
|
||||||
@ -211,8 +180,7 @@ mainloop:
|
|||||||
cmp esi, edi
|
cmp esi, edi
|
||||||
jae mainloop
|
jae mainloop
|
||||||
|
|
||||||
push esi
|
invoke con_write_asciiz, esi
|
||||||
call [con_write_asciiz]
|
|
||||||
|
|
||||||
.loop:
|
.loop:
|
||||||
lodsb
|
lodsb
|
||||||
@ -222,32 +190,23 @@ mainloop:
|
|||||||
|
|
||||||
|
|
||||||
socket_err:
|
socket_err:
|
||||||
DEBUGF 1, "TELNET: socket error %d", ebx
|
invoke con_write_asciiz, str6
|
||||||
push str6
|
|
||||||
call [con_write_asciiz]
|
|
||||||
|
|
||||||
jmp prompt
|
jmp prompt
|
||||||
|
|
||||||
dns_error:
|
dns_error:
|
||||||
DEBUGF 1, "TELNET: DNS error %d", eax
|
invoke con_write_asciiz, str5
|
||||||
push str5
|
|
||||||
call [con_write_asciiz]
|
|
||||||
|
|
||||||
jmp prompt
|
jmp prompt
|
||||||
|
|
||||||
hostname_error:
|
hostname_error:
|
||||||
push str11
|
invoke con_write_asciiz, str11
|
||||||
call [con_write_asciiz]
|
|
||||||
jmp prompt
|
jmp prompt
|
||||||
|
|
||||||
closed:
|
closed:
|
||||||
push str12
|
invoke con_write_asciiz, str12
|
||||||
call [con_write_asciiz]
|
|
||||||
jmp prompt
|
jmp prompt
|
||||||
|
|
||||||
done:
|
done:
|
||||||
push 1
|
invoke con_exit, 1
|
||||||
call [con_exit]
|
|
||||||
exit:
|
exit:
|
||||||
|
|
||||||
mcall close, [socketnum]
|
mcall close, [socketnum]
|
||||||
@ -258,7 +217,7 @@ exit:
|
|||||||
thread:
|
thread:
|
||||||
mcall 40, 0
|
mcall 40, 0
|
||||||
.loop:
|
.loop:
|
||||||
call [con_getch2]
|
invoke con_getch2
|
||||||
mov [send_data], ax
|
mov [send_data], ax
|
||||||
xor esi, esi
|
xor esi, esi
|
||||||
inc esi
|
inc esi
|
||||||
@ -268,7 +227,7 @@ thread:
|
|||||||
@@:
|
@@:
|
||||||
mcall send, [socketnum], send_data
|
mcall send, [socketnum], send_data
|
||||||
|
|
||||||
call [con_get_flags]
|
invoke con_get_flags
|
||||||
test eax, 0x200 ; con window closed?
|
test eax, 0x200 ; con window closed?
|
||||||
jz .loop
|
jz .loop
|
||||||
mcall -1
|
mcall -1
|
||||||
@ -298,11 +257,6 @@ sockaddr1:
|
|||||||
.ip dd 0
|
.ip dd 0
|
||||||
rb 10
|
rb 10
|
||||||
|
|
||||||
include_debug_strings ; ALWAYS present in data section
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
; import
|
|
||||||
align 4
|
align 4
|
||||||
@IMPORT:
|
@IMPORT:
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user