?login_element?

Subversion Repositories NedoOS

Rev

Blame | Last modification | View Log | Download

  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.