?login_element?

Subversion Repositories NedoOS

Rev

Rev 2046 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1601 kulich 1
    MODULE Wifi
2
        macro OS_NETSOCKET ;D=address family (2=inet, 23=inet6), E=socket type (0x01 tcp/ip, 0x02 icmp, 0x03 udp/ip) ;out: L=SOCKET (if L < 0 then A=error)
3
                ld l,0x01
4
                ld c,nos.CMD_WIZNETOPEN
5
                call nos.BDOS
6
        endm
7
        macro OS_NETCONNECT;A=SOCKET, DE=sockaddr ptr {unsigned char sin_family /*net type*/; unsigned short sin_port; struct in_addr sin_addr /*4 bytes IP*/; char sin_zero[8];}; out: if HL < 0 then A=error
8
                ld l,0x03
9
                ld c,nos.CMD_WIZNETOPEN
10
                ex af,af'
11
                call nos.BDOS
12
        endm   
13
        macro OS_WIZNETWRITE;A=SOCKET, de=buffer_ptr, HL=sizeof(buffer) ; out: HL=count if HL < 0 then A=error
14
                ld c,nos.CMD_WIZNETWRITE
15
                ex af,af'
16
                call nos.BDOS
17
        endm
18
        macro OS_WIZNETREAD;A=SOCKET, de=buffer_ptr, HL=sizeof(buffer) ; out: HL=count if HL < 0 then A=error
19
                ld c,nos.CMD_WIZNETREAD
20
                ex af,af'
21
                call nos.BDOS
22
        endm
23
        macro OS_NETSHUTDOWN;A=SOCKET ; out: if HL < 0 then A=error
24
                ld l,0x02
25
                ld c,nos.CMD_WIZNETOPEN
26
                ex af,af'
27
                call nos.BDOS
28
        endm
29
 
30
        macro OS_GETDNS;DE= ptr to DNS buffer(4 bytes)
31
                ld l, 0x08
32
                ld c, nos.CMD_WIZNETOPEN
33
                ex af,af' ;'
34
                call nos.BDOS ;c=CMD
35
        endm   
1654 kulich 36
 
37
        macro OS_YIELD
38
                push bc
39
        ld c,nos.CMD_YIELD
40
        call nos.BDOS
41
        pop bc
42
        endm   
43
 
1606 kulich 44
init:
1869 kulich 45
; Nothing to init there
1606 kulich 46
        ret
1869 kulich 47
 
1601 kulich 48
host_ia:
49
.curport=$+1
50
        defb 0,0,80,8,8,8,8
51
 
52
tcpSendZ
53
        push hl
54
        pop de
55
        push de
56
        call strLen
57
        pop de
58
        ld a,(sock_fd)
59
        OS_WIZNETWRITE
60
        ld hl,2
61
        ld de,.rn
62
        ld a,(sock_fd)
63
        OS_WIZNETWRITE
64
        ret
65
.rn defb "\r\n"
66
 
67
getPacket
1857 kulich 68
;if A = op8 then the C flag is reset, and Z is set.
69
;If A < op8, C is set and Z is reset. 
70
;If A > op8 then both C and Z are reset
1601 kulich 71
    ld de,(buffer_pointer)
1616 kulich 72
        ld a,0xfb
1612 kulich 73
        cp d
1857 kulich 74
        jp nc, letsgo
1612 kulich 75
        ld hl, .errMem : call DialogBox.msgBox
76
        ld a,1
77
        ld (closed),a
78
        xor a
79
        ld (bytes_avail),a
80
        ret
81
.errMem:
82
        db "Out of memory. Page loading error.",0
83
letsgo:
84
    ld de,(buffer_pointer)
2046 kulich 85
    ld hl,TCP_BUFFER_SIZE
1601 kulich 86
    ld a,(sock_fd)
87
        OS_WIZNETREAD
88
    BIT 7,H
89
    JR Z,RECEIVED       ;ошибок нет
1654 kulich 90
        CP 35   ;ERR_EAGAIN
1869 kulich 91
    jp z, letsgo
1601 kulich 92
    ;обработка ошибки
93
    ld a,1
94
    ld (closed), a
95
    LD  a,(sock_fd)
96
    LD  E,0
97
        OS_NETSHUTDOWN
98
        ld hl,(buffer_pointer)
99
        ld de,outputBuffer
100
        or a
101
        sbc hl,de
102
    ld (bytes_avail),HL
103
    ret
104
RECEIVED
105
        ex hl,de
106
    ld hl,(buffer_pointer)
107
        add hl,de
108
        ld (buffer_pointer),hl
109
        ld de,outputBuffer
110
        or a
111
        sbc hl,de
112
    ld (bytes_avail),HL
113
    ret
114
 
115
 
116
openTCP ;DE - port_str, HL - domain name
117
        push hl
118
        call atohl
119
        ld a,h,h,l,l,a
120
        ld (host_ia.curport),hl      
121
        pop de
122
        call dns_resolver
123
        ld a,h : or l : jp z,reqErr
124
        ld de,host_ia+3
125
        ld bc,4
126
        ldir
127
        ld de,1+(2<<8)
128
        OS_NETSOCKET
129
        ld a,l : or a : jp m,reqErr
130
        ld (sock_fd),a
131
        ld de,host_ia
132
        OS_NETCONNECT
133
    ld a,l : or a : jp m,reqErr
134
    xor a : ld (closed), a
135
        ret
136
 
137
closed
138
    defb 1
139
bytes_avail
140
    defw 0
141
buffer_pointer
142
    defw 0
143
 
144
reqErr
145
    ld hl, .errMsg : call DialogBox.msgBox
146
    scf
147
    ret
148
.errMsg db "Socket failed!",0
149
 
150
dns_resolver:           ;DE-domain name
151
    ld (.httphostname),de
1654 kulich 152
    ld a,254
1601 kulich 153
    ld (.dns_err_count),a
154
.dns_err_loop
155
        ;push de
156
        ld hl,.dns_head
157
        ld de,outputBuffer
158
        ld bc,6
159
        ldir
160
        ex de,hl
161
        ld de,outputBuffer+7
162
        ld (hl),b;0
163
        ld  c,256-7
164
        ldir
165
        ld de,outputBuffer+12
166
        ld h,d
167
        ld l,e
168
        ld bc,.httphostname ;pop bc
169
.httphostname=$-2
170
.name_loop:
171
        inc hl
172
        ld a,(bc)
173
        ld (hl),a
174
        inc bc
175
        cp '.'
176
        jr z,.is_dot
177
        or a
178
        jr nz,.name_loop
179
.is_dot:
180
        sbc hl,de
181
        ex de,hl
182
        dec e
183
        ld (hl),e
184
        inc e
185
        add hl,de
186
        ld d,h
187
        ld e,l
188
        or a
189
        jr nz,.name_loop
190
        inc a
191
        inc hl
192
        inc hl
193
        ld (hl),a
194
        inc hl
195
        inc hl
196
        ld (hl),a
197
        inc hl
198
        push hl
199
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
200
        ld a, (.dns_ia2)
201
        cp 0
202
        jp nz, .skipgetdns
203
        ld de, .dns_ia2;DE= ptr to DNS buffer(4 bytes)
204
        OS_GETDNS
205
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
206
.skipgetdns:
207
        ld de,0x0203
208
    OS_NETSOCKET
209
        ld a,l
210
        ld (sock_fd),a
211
        or a
212
        jp m,.dns_exiterr
213
        pop hl
214
        push hl
215
        ld de,0xffff&(-outputBuffer)
216
        add hl,de
217
        LD      a,(sock_fd)
218
        LD      IX,outputBuffer
219
        LD      DE,.dns_ia
220
        OS_WIZNETWRITE
221
        bit 7,h
222
        jr nz,.dns_exitcode
223
.dns_err_count=$+1
224
        ld b,32
225
        jr .recv_wait1
226
.recv_wait:
227
        push bc
228
        ld c,nos.CMD_YIELD
229
        call nos.BDOS
230
        pop bc
231
.recv_wait1:
232
        push bc
233
        ld hl,256
234
        LD      a,(sock_fd)
235
        LD      DE,outputBuffer
236
        LD      IX,outputBuffer
237
        OS_WIZNETREAD
238
        pop bc
239
        bit 7,h
240
        jr z,.recv_wait_end
241
        djnz .recv_wait
242
        jr .dns_exiterr
243
.recv_wait_end:
244
        ld a,(outputBuffer+3)
245
        and 0x0f       
246
        jr nz,.dns_exiterr
247
.dns_exitcode:
248
        LD      a,(sock_fd)
249
        LD      E,0
250
        OS_NETSHUTDOWN
251
        pop hl
252
.reqpars_l
253
        inc hl
254
        inc hl
255
        inc hl
256
        ld a,(hl)
257
        ld de,7
258
        add hl,de
259
        ld b,(hl)
260
        inc hl
261
        ld c,(hl)
262
        inc hl
263
        dec a
264
        ret z
265
        cp 4
266
        jr nz,.exiterr1
267
        add hl,bc
268
        jr .reqpars_l
269
.dns_exiterr:
270
        pop af
271
        LD      a,(sock_fd)
272
        LD      E,0
273
        OS_NETSHUTDOWN
274
    ld a,(.dns_err_count)
275
    add a,a
276
    ld (.dns_err_count),a
1654 kulich 277
        OS_YIELD
1601 kulich 278
    jp nc,.dns_err_loop
279
.exiterr1:
280
    ld hl,0
281
        ret
282
.dns_head
283
        defb 0x11,0x22,0x01,0x00,0x00,0x01
284
 
285
;struct sockaddr_in {unsigned char sin_family;unsigned short sin_port;
286
;       struct in_addr sin_addr;char sin_zero[8];};
287
.dns_ia:
288
        defb 0
289
        db 0,53 ;port (big endian)
290
.dns_ia2:
291
        db 0,0,0,0 ;ip (big endian)
292
 
293
sock_fd     defb 0
294
    ENDMODULE