Skip to content
Snippets Groups Projects
Select Git revision
  • f8b909c258c403708c9a86a22ca381a2683e55ed
  • master default protected
  • 9.0
  • 8.0
  • nt-tools
  • 7.8
  • 7.6
  • 7.4
  • 7.2
  • 7.0
  • 0.6
  • rosuav/latex-markdown-renderer
  • rxnpatch/rxnpatch
  • marcus/gobject-introspection
  • rxnpatch/8.0
  • rosuav/pre-listening-ports
  • rosuav/async-annotations
  • rosuav/pgsql-ssl
  • rxnpatch/rxnpatch-broken/2023-10-06T094250
  • grubba/fdlib
  • grubba/wip/sakura/8.0
  • v8.0.2020
  • v8.0.2018
  • v8.0.2016
  • v8.0.2014
  • v8.0.2012
  • v8.0.2008
  • v8.0.2006
  • v8.0.2004
  • v8.0.2002
  • v8.0.2000
  • v8.0.1998
  • v8.0.1996
  • v8.0.1994
  • v8.0.1992
  • v8.0.1990
  • v8.0.1988
  • v8.0.1986
  • rxnpatch/clusters/8.0/2025-04-29T124414
  • rxnpatch/2025-04-29T124414
  • v8.0.1984
41 results

postgres.pike

Blame
  • rr.scm 1.74 KiB
    (define-module (dns types rr)
      :use-module (srfi srfi-88)
      :use-module (dns internal util)
      :use-module (dns internal object)
      :use-module (dns internal state-monad)
      :use-module (dns internal bv)
      :use-module (dns util)
      :use-module (dns label)
      :use-module (dns enum)
      :use-module (dns types)
      :use-module (dns types rr-data)
      :use-module ((rnrs bytevectors) :select (bytevector? bytevector-length))
      :re-export (name type class ttl rdata)
      :export (make-dns-rr-data
               dns-rr-data?
               bytes->rr-data
               rr-data->bytes))
    
    (define-record-type dns-rr-data
      (fields (name type: string?)
              (type type: (or u16? (assq (@ (dns enum) rr-types))))
              (class
                default: 'IN
                type: (or u16? (assq (@ (dns enum) class-types))))
              (ttl type: (uint? 32))
              ;; Rdata's type is dependant on the type field, and is therefore left blank.
              rdata))
    
    
    (define (bytes->rr-data bv)
      (do
        name     <- (<$> domain-join (labels->string-list bv))
        type     <- (<$> int->rr (u16 bv))
        class    <- (<$> int->class (u16 bv))
        ttl      <- (u32 bv)
        rdlength <- (u16 bv)
        rdata    <- ((get-deserializer type) bv rdlength)
        (return (make-dns-rr-data name: name type: type class: class
                                  ttl: ttl rdata: rdata))))
    
    
    (define (rr-data->bytes rr)
      (do
          (bv-copy! (string-list->labels (string-split (name rr) #\.))) ; name
          (u16! (rr->int (type rr)))        ; type
        (u16! (class->int (class rr)))      ; class
        (u32! (ttl rr))                     ; ttl
        ;; rdlength and rdata
        (if (bytevector? (rdata rr))
            (do (u16! (bytevector-length (rdata rr)))
                (bv-copy! (rdata rr)))
            ((get-serializer (type rr)) (rdata rr)))))