?login_element?

Subversion Repositories NedoOS

Rev

Rev 1578 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  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. host_ia:
  30. .curport=$+1
  31.         defb 0,0,80,8,8,8,8
  32.        
  33. tcpSendZ
  34.         push hl
  35.         pop de
  36.         push de
  37.         call strLen
  38.         pop de
  39.         ld a,(sock_fd)
  40.         OS_WIZNETWRITE
  41.         ld hl,2
  42.         ld de,.rn
  43.         ld a,(sock_fd)
  44.         OS_WIZNETWRITE
  45.         ret
  46. .rn defb "\r\n"
  47.        
  48. getPacket
  49.     ld de,(buffer_pointer)
  50.     ld hl,2048
  51.     ld a,(sock_fd)
  52.         OS_WIZNETREAD
  53.     BIT 7,H
  54.     JR Z,RECEIVED       ;ошибок нет
  55.     CP 35   ;ERR_EAGAIN
  56.     ret z
  57.     ;обработка ошибки
  58.     ld a,1
  59.     ld (closed), a
  60.     LD  a,(sock_fd)
  61.     LD  E,0
  62.         OS_NETSHUTDOWN
  63.         ld hl,(buffer_pointer)
  64.         ld de,outputBuffer
  65.         or a
  66.         sbc hl,de
  67.     ld (bytes_avail),HL
  68.     ret
  69. RECEIVED
  70.         ex hl,de
  71.     ld hl,(buffer_pointer)
  72.         add hl,de
  73.         ld (buffer_pointer),hl
  74.         ld de,outputBuffer
  75.         or a
  76.         sbc hl,de
  77.         ;ld hl,(bytes_avail)
  78.         ;add hl,de
  79.     ld (bytes_avail),HL
  80. continue
  81.     ret
  82.        
  83.        
  84. openTCP ;DE - port_str, HL - domain name
  85.         push hl
  86.         call atohl
  87.         ld a,h,h,l,l,a
  88.         ld (host_ia.curport),hl      
  89.         pop de
  90.         call dns_resolver
  91.         ld a,h : or l : jp z,reqErr
  92.         ld de,host_ia+3
  93.         ld bc,4
  94.         ldir
  95.         ld de,1+(2<<8)
  96.         OS_NETSOCKET
  97.         ld a,l : or a : jp m,reqErr
  98.         ld (sock_fd),a
  99.         ld de,host_ia
  100.         OS_NETCONNECT
  101.     ld a,l : or a : jp m,reqErr
  102.     xor a : ld (closed), a
  103.         ret
  104.        
  105. closed
  106.     defb 1
  107. bytes_avail
  108.     defw 0
  109. buffer_pointer
  110.     defw 0
  111.        
  112. reqErr
  113.     ld hl, .errMsg : call DialogBox.msgBox
  114.     scf
  115.     ret
  116. .errMsg db "Socket failed!",0
  117.        
  118. dns_resolver:           ;DE-domain name
  119.     ld (.httphostname),de
  120.     ld a,254;3
  121.     ld (.dns_err_count),a
  122. .dns_err_loop
  123.         ;push de
  124.         ld hl,.dns_head
  125.         ld de,outputBuffer
  126.         ld bc,6
  127.         ldir
  128.         ex de,hl
  129.         ld de,outputBuffer+7
  130.         ld (hl),b;0
  131.         ld  c,256-7
  132.         ldir
  133.         ld de,outputBuffer+12
  134.         ld h,d
  135.         ld l,e
  136.         ld bc,.httphostname ;pop bc
  137. .httphostname=$-2
  138. .name_loop:
  139.         inc hl
  140.         ld a,(bc)
  141.         ld (hl),a
  142.         inc bc
  143.         cp '.'
  144.         jr z,.is_dot
  145.         or a
  146.         jr nz,.name_loop
  147. .is_dot:
  148.         sbc hl,de
  149.         ex de,hl
  150.         dec e
  151.         ld (hl),e
  152.         inc e
  153.         add hl,de
  154.         ld d,h
  155.         ld e,l
  156.         or a
  157.         jr nz,.name_loop
  158.         inc a
  159.         inc hl
  160.         inc hl
  161.         ld (hl),a
  162.         inc hl
  163.         inc hl
  164.         ld (hl),a
  165.         inc hl
  166.         push hl
  167.        
  168.         ld de,0x0203
  169.     OS_NETSOCKET
  170.         ld a,l
  171.         ld (sock_fd),a
  172.         or a
  173.         jp m,.dns_exiterr
  174.        
  175.         pop hl
  176.         push hl
  177.         ld de,0xffff&(-outputBuffer)
  178.         add hl,de
  179.         LD      a,(sock_fd)
  180.         LD      IX,outputBuffer
  181.         LD      DE,.dns_ia
  182.         OS_WIZNETWRITE
  183.         bit 7,h
  184.         jr nz,.dns_exitcode
  185. .dns_err_count=$+1
  186.         ld b,32
  187.         jr .recv_wait1
  188. .recv_wait:
  189.         push bc
  190.         ld c,nos.CMD_YIELD
  191.         call nos.BDOS
  192.         pop bc
  193. .recv_wait1:
  194.         push bc
  195.         ld hl,256
  196.         LD      a,(sock_fd)
  197.         LD      DE,outputBuffer
  198.         LD      IX,outputBuffer
  199.         OS_WIZNETREAD
  200.         pop bc
  201.         bit 7,h
  202.         jr z,.recv_wait_end
  203.         djnz .recv_wait
  204.         jr .dns_exiterr
  205. .recv_wait_end:
  206.         ld a,(outputBuffer+3)
  207.         and 0x0f       
  208.         jr nz,.dns_exiterr
  209. .dns_exitcode:
  210.         LD      a,(sock_fd)
  211.         LD      E,0
  212.         OS_NETSHUTDOWN
  213.         pop hl
  214. .reqpars_l
  215.         inc hl
  216.         inc hl
  217.         inc hl
  218.         ld a,(hl)
  219.         ld de,7
  220.         add hl,de
  221.         ld b,(hl)
  222.         inc hl
  223.         ld c,(hl)
  224.         inc hl
  225.         dec a
  226.         ret z
  227.         cp 4
  228.         jr nz,.exiterr1
  229.         add hl,bc
  230.         jr .reqpars_l
  231. .dns_exiterr:
  232.         pop af
  233.         LD      a,(sock_fd)
  234.         LD      E,0
  235.         OS_NETSHUTDOWN
  236.     ld a,(.dns_err_count)
  237.     add a,a
  238.     ld (.dns_err_count),a
  239.     jp nc,.dns_err_loop
  240. .exiterr1:
  241.     ld hl,0
  242.         ret
  243. .dns_head
  244.         defb 0x11,0x22,0x01,0x00,0x00,0x01
  245.  
  246. ;struct sockaddr_in {unsigned char sin_family;unsigned short sin_port;
  247. ;       struct in_addr sin_addr;char sin_zero[8];};
  248. .dns_ia:
  249.         defb 0
  250.         db 0,53 ;port (big endian)
  251.         db 8,8,8,8 ;ip (big endian)
  252.  
  253. sock_fd     defb 0
  254.     ENDMODULE