CycloneTechnology/ChaMP

View on GitHub
champ-core/src/main/scala/com/cyclone/util/net/DnsRecord.scala

Summary

Maintainability
A
0 mins
Test Coverage
package com.cyclone.util.net

import com.google.common.base.{CharMatcher, Splitter}

sealed trait DnsRecord

object DnsRecord {

  private val WhitespaceSplitter = Splitter
    .on(CharMatcher.breakingWhitespace())
    .trimResults()
    .omitEmptyStrings()

  private def trimTrailingDot(value: String): String =
    if (value.endsWith("."))
      value.substring(0, value.length() - 1)
    else
      value

  case class PTR(hostName: String) extends DnsRecord

  object PTR {

    def fromRaw(raw: String): PTR =
      PTR(trimTrailingDot(raw))
  }

  case class MX(server: String, mxLevel: Int) extends DnsRecord

  object MX {

    def fromRaw(raw: String): MX = {
      val parts = WhitespaceSplitter.splitToList(raw)

      MX(trimTrailingDot(parts.get(1)), parts.get(0).toInt)
    }
  }

}