Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 5857 → Rev 5858

/programs/network/telnet/telnet.asm
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 ;;
;; ;;
;; telnet.asm - Telnet client for KolibriOS ;;
14,8 → 14,6
 
format binary as ""
 
__DEBUG__ = 0
__DEBUG_LEVEL__ = 1
BUFFERSIZE = 4096
 
use32
33,7 → 31,6
purge mov,add,sub
include '../../proc32.inc'
include '../../dll.inc'
include '../../debug-fdo.inc'
include '../../network.inc'
 
; entry point
43,14 → 40,8
test eax, eax
jnz exit
; initialize console
push 1
call [con_start]
push title
push 25
push 80
push 25
push 80
call [con_init]
invoke con_start, 1
invoke con_init, 80, 25, 80, 25, title
 
; Check for parameters
cmp byte [hostname], 0
57,20 → 48,16
jne resolve
 
main:
call [con_cls]
invoke con_cls
; Welcome user
push str1
call [con_write_asciiz]
invoke con_write_asciiz, str1
 
prompt:
; write prompt
push str2
call [con_write_asciiz]
; read string
invoke con_write_asciiz, str2
; read string (wait for input)
mov esi, hostname
push 256
push esi
call [con_gets]
invoke con_gets, esi, 256
; check for exit
test eax, eax
jz done
78,10 → 65,9
jz done
 
resolve:
mov [sockaddr1.port], 23 shl 8 ; Port is in network byte order
 
mov [sockaddr1.port], 23 shl 8
 
; delete terminating '\n'
; delete terminating newline from URL and parse port, if any.
mov esi, hostname
@@:
lodsb
98,7 → 84,7
mov byte [esi-1], 0
.portloop:
lodsb
cmp al, 0x20
cmp al, ' '
jbe .port_done
sub al, '0'
jb hostname_error
117,42 → 103,30
 
; resolve name
push esp ; reserve stack place
push esp ; ptr to result
push 0 ; addrinfo hints
push 0 ; servname
push hostname; hostname
call [getaddrinfo]
invoke getaddrinfo, hostname, 0, 0, esp
pop esi
; test for error
test eax, eax
jnz dns_error
 
call [con_cls]
push str3
call [con_write_asciiz]
push hostname
call [con_write_asciiz]
invoke con_cls
invoke con_write_asciiz, str3
invoke con_write_asciiz, hostname
 
; write results
push str8
call [con_write_asciiz]
; mov edi, esi
invoke con_write_asciiz, str8
 
; convert IP address to decimal notation
mov eax, [esi+addrinfo.ai_addr]
mov eax, [eax+sockaddr_in.sin_addr]
mov [sockaddr1.ip], eax
push eax
call [inet_ntoa]
invoke inet_ntoa, eax
; write result
push eax
call [con_write_asciiz]
invoke con_write_asciiz, eax
; free allocated memory
push esi
call [freeaddrinfo]
invoke freeaddrinfo, esi
 
push str9
call [con_write_asciiz]
invoke con_write_asciiz, str9
 
mcall socket, AF_INET4, SOCK_STREAM, 0
cmp eax, -1
163,8 → 137,8
test eax, eax
jnz socket_err
 
mcall 40, 1 shl 7 ; + 7
call [con_cls]
mcall 40, EVM_STACK
invoke con_cls
 
mcall 18, 7
push eax
173,7 → 147,7
mcall 18, 3
 
mainloop:
call [con_get_flags]
invoke con_get_flags
test eax, 0x200 ; con window closed?
jnz exit
 
181,17 → 155,14
cmp eax, -1
je closed
 
 
DEBUGF 1, 'TELNET: got %u bytes of data !\n', eax
 
mov esi, buffer_ptr
lea edi, [esi + eax]
mov byte [edi], 0
 
.scan_cmd:
cmp byte [esi], 0xff ; Interpret As Command
jne .no_cmd
; TODO: parse options, for now, we will reply with 'WONT' to everything
; TODO: parse options
; for now, we will reply with 'WONT' to everything
mov byte [esi + 1], 252 ; WONT
add esi, 3 ; a command is always 3 bytes
jmp .scan_cmd
200,8 → 171,6
cmp esi, buffer_ptr
je .print
 
DEBUGF 1, 'TELNET: sending data\n'
 
push esi edi
sub esi, buffer_ptr
mcall send, [socketnum], buffer_ptr, , 0
211,8 → 180,7
cmp esi, edi
jae mainloop
 
push esi
call [con_write_asciiz]
invoke con_write_asciiz, esi
 
.loop:
lodsb
222,32 → 190,23
 
 
socket_err:
DEBUGF 1, "TELNET: socket error %d", ebx
push str6
call [con_write_asciiz]
 
invoke con_write_asciiz, str6
jmp prompt
 
dns_error:
DEBUGF 1, "TELNET: DNS error %d", eax
push str5
call [con_write_asciiz]
 
invoke con_write_asciiz, str5
jmp prompt
 
hostname_error:
push str11
call [con_write_asciiz]
invoke con_write_asciiz, str11
jmp prompt
 
closed:
push str12
call [con_write_asciiz]
invoke con_write_asciiz, str12
jmp prompt
 
done:
push 1
call [con_exit]
invoke con_exit, 1
exit:
 
mcall close, [socketnum]
258,7 → 217,7
thread:
mcall 40, 0
.loop:
call [con_getch2]
invoke con_getch2
mov [send_data], ax
xor esi, esi
inc esi
268,7 → 227,7
@@:
mcall send, [socketnum], send_data
 
call [con_get_flags]
invoke con_get_flags
test eax, 0x200 ; con window closed?
jz .loop
mcall -1
298,11 → 257,6
.ip dd 0
rb 10
 
include_debug_strings ; ALWAYS present in data section
 
 
 
; import
align 4
@IMPORT: