?login_element?

Subversion Repositories NedoOS

Rev

Rev 1193 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1.         DEVICE ZXSPECTRUM128
  2.         include "../_sdk/sys_h.asm"
  3.  
  4.         org PROGSTART
  5. dns_err_count=250
  6. cmd_begin
  7.  
  8. ;init
  9.  
  10.     call initstdio
  11.        
  12.         ld a,0x01
  13.         ld de,nsserv
  14.         ld hl,sa_dns
  15.         call dns_resolver ; resolving ip
  16.         ld a,h
  17.         or l
  18.         jp z,nsservnotfound;0x0000
  19.        
  20.         ld de,sa_ns + 3
  21.         ld bc,4
  22.         ldir
  23.        
  24.         ld a,0x10
  25.         ld de,hostname
  26.         ld hl,sa_ns
  27.         call dns_resolver ; resolving ip
  28.         ld a,h
  29.         or l
  30.         jp z,myipservnotfound;0x0000
  31.        
  32.         push hl ;ЄєЄ ёЄЁюър ё ip
  33.         add hl,bc
  34.         ld (hl),0
  35.         ld hl,tmyipis
  36.         call print
  37.         pop hl
  38.                 inc hl
  39.        ld a,(hl)
  40.        cp 0x0d ;message starts with 0x0d for no known reason
  41.        jr nz,$+3
  42.        inc hl
  43.         call print
  44.         ld hl,tcrlf
  45.         call print
  46.         ld hl,0
  47.         QUIT
  48.  
  49. print
  50. print0
  51.         ld a,(hl)
  52.         or a
  53.         ret z;jp z,0x0000
  54.         push hl
  55.         PRCHAR_
  56.         pop hl
  57.         inc hl
  58.         jr print0
  59.        
  60. nsservnotfound
  61.         ld hl,nsserv
  62.         call print
  63.         ld hl,tnotfound
  64.         call print
  65.         ld hl,-1
  66.         QUIT
  67. myipservnotfound
  68.         ld hl,hostname
  69.         call print
  70.         ld hl,tnotfound
  71.         call print
  72.         ld hl,-2
  73.         QUIT
  74.        
  75. nsserv
  76.         defb "ns3.google.com",0x00
  77. hostname
  78.         defb "o-o.myaddr.l.google.com",0x00
  79. tmyipis
  80.         db "my ip = ",0
  81. tnotfound
  82.         db " not found",0x0d,0x0a,0
  83. tcrlf
  84.         db 0x0d,0x0a,0
  85.        
  86. dns_resolver            ;DE-domain name, HL - sa serv, A - QTYPE
  87. dns_err_loop
  88.         ld (sa_store),hl
  89.         ld (qtype1),a
  90.         ld (qtype2),a
  91.         push de
  92.         ld hl,dns_head
  93.         ld de,buf
  94.         ld bc,6
  95.         ldir
  96.         ex de,hl
  97.         ld de,buf+7
  98.         ld (hl),b
  99.         ld  c,256-7
  100.         ldir
  101.         ld de,buf+12
  102.         ld h,d
  103.         ld l,e
  104.         pop bc
  105. name_loop
  106.         inc hl
  107.         ld a,(bc)
  108.         ld (hl),a
  109.         inc bc
  110.         cp '.'
  111.         jr z,is_dot
  112.         or a
  113.         jr nz,name_loop
  114. is_dot
  115.         sbc hl,de
  116.         ex de,hl
  117.         dec e
  118.         ld (hl),e
  119.         inc e
  120.         add hl,de
  121.         ld d,h
  122.         ld e,l
  123.         or a
  124.         jr nz,name_loop
  125.         inc hl
  126.         inc hl
  127.         ld (hl),16
  128. qtype1 = $ - 1
  129.         inc hl
  130.         inc hl
  131.         ld (hl),1
  132.         inc hl
  133.         push hl
  134. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  135.         ld a, (sa_dns2)
  136.         cp 0
  137.         jp nz, skipgetdns
  138.         ld de, sa_dns2;DE= ptr to DNS buffer(4 bytes)
  139.         OS_GETDNS
  140. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  
  141. skipgetdns
  142.  
  143.         ld de,0x0203
  144.         OS_NETSOCKET
  145.         ld a,l
  146.         ld (soc1),a
  147.         or a
  148.         jp m,dns_exiterr
  149.         ;LD DE,conparam
  150.         ;OS_NETCONNECT
  151.         ;ld a,l
  152.         ;or a
  153.         ;jp m,dns_exiterr
  154.        
  155.         pop hl
  156.         push hl
  157.         ld de,0xffff&(-buf)
  158.         add hl,de
  159.         LD a,(soc1)
  160.         LD IX,buf
  161.         LD DE,sa_dns
  162. sa_store=$-2
  163.         OS_WIZNETWRITE
  164.         bit 7,h
  165.         jr nz,dns_exitcode
  166. dns_err_count=$+1
  167.         ld b,25
  168.         jr recv_wait1
  169. recv_wait
  170.         push bc
  171.         YIELD
  172.         pop bc
  173. recv_wait1
  174.         push bc
  175.         ld hl,256
  176.         LD a,(soc1)
  177.         LD ix,buf
  178.         ld de,sa_recv
  179.         OS_WIZNETREAD
  180.         pop bc
  181.         ;ld a,h
  182.         ;or l
  183.         bit 7,h
  184.         jr z,recv_wait_end
  185.         djnz recv_wait
  186.         jr dns_exiterr
  187. recv_wait_end
  188.         bit 7,h
  189.         jr nz,dns_exitcode
  190.         ld a,(buf+3)
  191.         and 0x0f
  192.         jr nz,dns_exiterr
  193. dns_exitcode
  194.         LD a,(soc1)
  195.         LD E,0
  196.         OS_NETSHUTDOWN
  197.         pop hl
  198. reqpars_l
  199.         inc hl ; Skip compressed
  200.         inc hl ; name
  201.         inc hl ; Type
  202.         ld a,(hl) ; of message
  203.         ld de,7 ; Skip
  204.         add hl,de ; Class , TTL
  205.         ld b,(hl) ; RDLENGTH
  206.         inc hl
  207.         ld c,(hl)
  208.         inc hl
  209.         cp 16
  210. qtype2 = $ - 1
  211.         ret z   ; If TYPE was 0x10 (TXT) exit
  212.         cp 4
  213.         jr nz,exiterr1 ; If TYPE was not 0x5 (CNAME) error
  214.         add hl,bc ; to next message
  215.         jr reqpars_l
  216. dns_exiterr
  217.         pop af
  218.         LD a,(soc1)
  219.         LD E,0
  220.         OS_NETSHUTDOWN
  221.         ld a,(dns_err_count)
  222.         add a,a
  223.         ld (dns_err_count),a
  224.         jp nc,dns_err_loop
  225. exiterr1
  226.         ld hl,0
  227.         ret
  228.  
  229. soc1            db 0
  230. dns_head        db 0x00,0x02,0x01,0x00,0x00,0x01
  231. sa_dns          db 0,0,53
  232. sa_dns2         db 0,0,0,0
  233. sa_ns           db 0,0,53,216,239,36,10
  234. sa_recv         defs 7
  235. buf             ds 255
  236.         display "buf ",buf
  237.         include "../_sdk/stdio.asm"
  238. cmd_end
  239.         savebin "myip.com",cmd_begin,cmd_end-cmd_begin
  240.         LABELSLIST "../../us/user.l"
  241.