?login_element?

Subversion Repositories NedoOS

Rev

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

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