?login_element?

Subversion Repositories NedoOS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1386 Kulich 1
 
2
        MODULE LIB_DNS_RESOLVER
3
        PUBLIC dns_resolver
4
        EXTERN errno, OS_NETSOCKET, OS_NETCLOSE, YIELD
5
        EXTERN OS_NETCONNECT, OS_NETRECV, OS_NETSEND
6
        EXTERN os_getdns
7
 
8
        RSEG    CODE
9
dns_resolver:           ;DE-domain name
10
        push ix
11
        push de
12
    ld de,dns_ia + 3
13
    call os_getdns
14
        ld hl,dns_head
15
        ld de,dnsbuf
16
        ld bc,6
17
        ldir
18
        ex de,hl
19
        ld de,dnsbuf+7
20
        ld (hl),0
21
        ld bc,256-7
22
        ldir
23
        ld de,dnsbuf+12
24
        ld h,d
25
        ld l,e
26
        pop bc
27
name_loop:
28
        inc hl
29
        ld a,(bc)
30
        ld (hl),a
31
        inc bc
32
        cp '.'
33
        jr z,is_dot
34
        or a
35
        jr nz,name_loop
36
is_dot:
37
        sbc hl,de
38
        ex de,hl
39
        dec e
40
        ld (hl),e
41
        inc e
42
        add hl,de
43
        ld d,h
44
        ld e,l
45
        or a
46
        jr nz,name_loop
47
        inc a
48
        inc hl
49
        inc hl
50
        ld (hl),a
51
        inc hl
52
        inc hl
53
        ld (hl),a
54
        inc hl
55
        push hl
56
 
57
        ld de,0x0203
58
        call OS_NETSOCKET
59
        ld (dnssoc),a
60
        or a
61
        jp m,exiterr
62
        ;LD     C,A
63
        ;LD     DE,dns_ia
64
        ;CALL   OS_NETCONNECT
65
        ;or a
66
        ;jp m,exiterr
67
 
68
        pop hl
69
        push hl
70
        ld de,0xffff&(-dnsbuf)
71
        add hl,de
72
        PUSH    HL
73
        LD      bc,(dnssoc)
74
        LD      ix,dnsbuf
75
        ld      de,dns_ia
76
        CALL    OS_NETSEND
77
        pop af
78
        bit 7,h
79
        jr nz,exitcode
80
        ld b,50
81
        push bc
82
        jr recv_wait1
83
recv_wait:
84
        push bc
85
        call YIELD
86
recv_wait1:
87
        ld hl,256
88
        PUSH    HL
89
        LD      bc,(dnssoc)
90
        LD      DE,dnsbuf
91
        LD      ix,dnsbuf
92
        CALL    OS_NETRECV
93
        pop af
94
        pop bc
95
        ;ld a,h
96
        ;or l
97
        bit 7,h
98
        jr z,recv_wait_end
99
        djnz recv_wait
100
        ld a,54 ;ERR_CONNRESET
101
        ld (errno),a
102
        jr exiterr
103
recv_wait_end:
104
        ld a,65         ;ERR_HOSTUNREACH
105
        ld (errno),a
106
        bit 7,h
107
        jr nz,exitcode
108
        ld a,(dnsbuf+3)
109
        and 0x0f       
110
        jr nz,exiterr
111
exitcode:
112
        LD      BC,(dnssoc)
113
        LD      E,0
114
        CALL    OS_NETCLOSE
115
        pop hl
116
        pop ix
117
reqpars_l
118
        inc hl
119
        inc hl
120
        inc hl
121
        ld a,(hl)
122
        ld de,7
123
        add hl,de
124
        ld b,(hl)
125
        inc hl
126
        ld c,(hl)
127
        inc hl
128
        dec a
129
        ret z
130
        cp 4
131
        jr nz,exiterr1
132
        add hl,bc
133
        jr reqpars_l
134
 
135
exiterr:
136
        pop af
137
        ld a,(errno)
138
        push af
139
        LD      BC,(dnssoc)
140
        LD      E,0
141
        CALL    OS_NETCLOSE
142
        pop af
143
        ld (errno),a
144
        pop ix
145
exiterr1:
146
        ld hl,0
147
        ret
148
 
149
        RSEG    CONST
150
dns_head
151
        defb 0x11,0x22,0x01,0x00,0x00,0x01
152
dns_ia:
153
        defb 0,0,53,8,8,8,8
154
        RSEG    NO_INIT
155
dnssoc:
156
        DEFS 1 
157
dnsbuf:
158
        DEFS 256
159
 
160
        END
161