Subversion Repositories Kolibri OS

Rev

Rev 3545 | Rev 3687 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3545 Rev 3574
Line 22... Line 22...
22
; standard header
22
; standard header
23
        db      'MENUET01'      ; signature
23
        db      'MENUET01'      ; signature
24
        dd      1               ; header version
24
        dd      1               ; header version
25
        dd      start           ; entry point
25
        dd      start           ; entry point
26
        dd      i_end           ; initialized size
26
        dd      i_end           ; initialized size
27
        dd      mem             ; required memory
27
        dd      mem+4096        ; required memory
28
        dd      mem             ; stack pointer
28
        dd      mem+4096        ; stack pointer
29
        dd      s               ; parameters
29
        dd      hostname        ; parameters
30
        dd      0               ; path
30
        dd      0               ; path
Line 31... Line 31...
31
 
31
 
32
include '../macros.inc'
32
include '../macros.inc'
33
purge mov,add,sub
33
purge mov,add,sub
Line 51... Line 51...
51
        push    25
51
        push    25
52
        push    80
52
        push    80
53
        call    [con_init]
53
        call    [con_init]
Line 54... Line 54...
54
 
54
 
55
; Check for parameters
55
; Check for parameters
56
        cmp     byte [s], 0
56
        cmp     byte [hostname], 0
Line 57... Line 57...
57
        jne     resolve
57
        jne     resolve
58
 
58
 
59
main:
59
main:
60
        call    [con_cls]
60
        call    [con_cls]
61
; Welcome user
61
; Welcome user
Line -... Line 62...
-
 
62
        push    str1
62
        push    str1
63
        call    [con_write_asciiz]
63
        call    [con_write_asciiz]
64
 
64
 
65
prompt:
65
; write prompt
66
; write prompt
66
        push    str2
67
        push    str2
67
        call    [con_write_asciiz]
68
        call    [con_write_asciiz]
68
; read string
69
; read string
69
        mov     esi, s
70
        mov     esi, hostname
70
        push    256
71
        push    256
71
        push    esi
72
        push    esi
Line 76... Line 77...
76
        cmp     byte [esi], 10
77
        cmp     byte [esi], 10
77
        jz      done
78
        jz      done
Line 78... Line 79...
78
 
79
 
Line -... Line 80...
-
 
80
resolve:
-
 
81
 
79
resolve:
82
        mov     [sockaddr1.port], 23 shl 8
80
 
83
 
81
; delete terminating '\n'
84
; delete terminating '\n'
82
        mov     esi, s
85
        mov     esi, hostname
-
 
86
  @@:
-
 
87
        lodsb
83
  @@:
88
        cmp     al, ':'
84
        lodsb
89
        je      .do_port
85
        cmp     al, 0x20
90
        cmp     al, 0x20
-
 
91
        ja      @r
Line -... Line 92...
-
 
92
        mov     byte [esi-1], 0
-
 
93
        jmp     .done
-
 
94
 
-
 
95
  .do_port:
-
 
96
        xor     eax, eax
-
 
97
        xor     ebx, ebx
-
 
98
        mov     byte [esi-1], 0
86
        ja      @r
99
  .portloop:
87
        mov     byte [esi-1], 0
100
        lodsb
88
 
101
        cmp     al, 0x20
89
        call    [con_cls]
102
        jbe     .port_done
90
        push    str3
103
        sub     al, '0'
-
 
104
        jb      hostname_error
-
 
105
        cmp     al, 9
-
 
106
        ja      hostname_error
-
 
107
        lea     ebx, [ebx*4 + ebx]
-
 
108
        shl     ebx, 1
-
 
109
        add     ebx, eax
-
 
110
        jmp     .portloop
-
 
111
 
-
 
112
  .port_done:
-
 
113
        xchg    bl, bh
Line 91... Line 114...
91
        call    [con_write_asciiz]
114
        mov     [sockaddr1.port], bx
92
        push    s
115
 
93
        call    [con_write_asciiz]
116
  .done:
94
 
117
 
95
; resolve name
118
; resolve name
96
        push    esp     ; reserve stack place
119
        push    esp     ; reserve stack place
97
        push    esp     ; fourth parameter
120
        push    esp     ; ptr to result
98
        push    0       ; third parameter
121
        push    0       ; addrinfo hints
99
        push    0       ; second parameter
122
        push    0       ; servname
100
        push    s       ; first parameter
123
        push    hostname; hostname
101
        call    [getaddrinfo]
124
        call    [getaddrinfo]
Line -... Line 125...
-
 
125
        pop     esi
-
 
126
; test for error
-
 
127
        test    eax, eax
-
 
128
        jnz     fail
-
 
129
 
-
 
130
        call    [con_cls]
102
        pop     esi
131
        push    str3
103
; test for error
132
        call    [con_write_asciiz]
104
        test    eax, eax
133
        push    hostname
105
        jnz     fail
134
        call    [con_write_asciiz]
Line 215... Line 244...
215
 
244
 
216
fail2:
245
fail2:
217
        push    str6
246
        push    str6
Line 218... Line 247...
218
        call    [con_write_asciiz]
247
        call    [con_write_asciiz]
Line 219... Line 248...
219
 
248
 
220
        jmp     fail.wait
249
        jmp     prompt
221
 
250
 
-
 
251
fail:
-
 
252
        push    str5
-
 
253
        call    [con_write_asciiz]
222
fail:
254
 
223
        push    str5
255
        jmp     prompt
224
        call    [con_write_asciiz]
256
 
225
  .wait:
-
 
226
        push    str10
257
hostname_error:
Line 227... Line 258...
227
        call    [con_write_asciiz]
258
        push    str11
228
        call    [con_getch2]
259
        call    [con_write_asciiz]
229
        jmp     main
260
        jmp     prompt
230
 
261
 
Line 250... Line 281...
250
        jz      .loop
281
        jz      .loop
251
        mcall   -1
282
        mcall   -1
Line 252... Line 283...
252
 
283
 
253
; data
284
; data
-
 
285
title   db      'Telnet',0
254
title   db      'Telnet',0
286
str1    db      'Telnet for KolibriOS',10,10,\
255
str1    db      'Telnet for KolibriOS v0.11',10,10,'Please enter URL of telnet server (for example: towel.blinkenlights.nl)',10,10,0
287
                'Please enter URL of telnet server (for example: towel.blinkenlights.nl:23)',10,10,0
256
str2    db      '> ',0
288
str2    db      '> ',0
257
str3    db      'Connecting to: ',0
289
str3    db      'Connecting to ',0
258
str4    db      10,0
-
 
259
str5    db      10,'Name resolution failed.',10,0
-
 
260
str6    db      10,'Could not open socket.',10,0
290
str4    db      10,0
261
str8    db      ' (',0
291
str8    db      ' (',0
-
 
292
str9    db      ')',10,0
-
 
293
 
262
str9    db      ')',10,0
294
str5    db      'Name resolution failed.',10,10,0
-
 
295
str6    db      'Could not open socket.',10,10,0
Line 263... Line 296...
263
str10   db      'Push any key to continue.',0
296
str11   db      'Invalid hostname.',10,10,0
264
 
297
 
265
sockaddr1:
298
sockaddr1:
266
        dw AF_INET4
299
        dw AF_INET4
267
.port   dw 0x1700       ; 23
300
.port   dw 0
Line 268... Line 301...
268
.ip     dd 0
301
.ip     dd 0
Line 296... Line 329...
296
 
329
 
Line 297... Line 330...
297
i_end:
330
i_end:
298
 
331
 
299
socketnum       dd ?
332
socketnum       dd ?
-
 
333
buffer_ptr      rb BUFFERSIZE+1
-
 
334
send_data       rb 1
Line 300... Line -...
300
buffer_ptr      rb BUFFERSIZE+1
-
 
301
send_data       rb 100
-
 
302
 
335