diff options
author | Lars Kuhtz <kuhtz@cs.uni-sb.de> | 2012-05-10 08:55:29 -0700 |
---|---|---|
committer | Lars Kuhtz <kuhtz@cs.uni-sb.de> | 2012-05-10 08:55:29 -0700 |
commit | 08ff21f8ce61b21a2c31be0372f91ad017790f98 (patch) | |
tree | a8af3b281fbd66fb9d00bd29a7b4ed3069781672 | |
parent | 163f05707ca2650b2a88847422819ff19d9447e6 (diff) |
encodeRR: compute and set the value of rdlen field during encoding
-rw-r--r-- | Network/DNS/Encode.hs | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/Network/DNS/Encode.hs b/Network/DNS/Encode.hs index c3457f2..e685f51 100644 --- a/Network/DNS/Encode.hs +++ b/Network/DNS/Encode.hs @@ -4,6 +4,7 @@ module Network.DNS.Encode ( , composeQuery ) where +import qualified Blaze.ByteString.Builder as BB (toByteString, fromWrite, writeInt16be) import qualified Data.ByteString.Lazy.Char8 as BL (ByteString) import qualified Data.ByteString.Char8 as BS (length, null, break, drop) import Network.DNS.StateBinary @@ -104,9 +105,15 @@ encodeRR ResourceRecord{..} = , putInt16 (typeToInt rrtype) , put16 1 , putInt32 rrttl - , putInt16 rdlen - , encodeRDATA rdata + , rlenRDATA ] + where + rlenRDATA = do + addPositionW 2 -- "simulate" putInt16 + rDataWrite <- encodeRDATA rdata + let rdataLength = fromIntegral . BS.length . BB.toByteString . BB.fromWrite $ rDataWrite + let rlenWrite = BB.writeInt16be rdataLength + return rlenWrite +++ return rDataWrite encodeRDATA :: RDATA -> SPut encodeRDATA rd = case rd of |