Example #1
0
	def testSameName(self):
		name = "paired.local."
		generated = r.DNSOutgoing(r._FLAGS_QR_RESPONSE)
		question = r.DNSQuestion(name, r._TYPE_SRV, r._CLASS_IN)
		generated.addQuestion(question)
		generated.addQuestion(question)
		parsed = r.DNSIncoming(generated.packet())
Example #2
0
 def handle_read(self):
     try:
         data, (addr, port) = self.zeroconf.socket.recvfrom(dns._MAX_MSG_ABSOLUTE)
     except Exception as err:
         if getattr( err, 'errno', None ) == 9: # 'Bad file descriptor' during shutdown...
             pass
         else:
             log.info( 'Error on recvfrom: %s', err )
         return None
     self.data = data
     msg = dns.DNSIncoming(data)
     if msg.isQuery():
         # Always multicast responses
         #
         if port == dns._MDNS_PORT:
             self.zeroconf.handleQuery(msg, dns._MDNS_ADDR, dns._MDNS_PORT)
         # If it's not a multicast query, reply via unicast
         #
         # and multicast
         elif port == dns._DNS_PORT:
             self.zeroconf.handleQuery(msg, addr, port)
             self.zeroconf.handleQuery(msg, dns._MDNS_ADDR, dns._MDNS_PORT)
         else:
             log.error(
                 "Unknown port: %s", port
             )
     else:
         self.zeroconf.handleResponse(msg)
Example #3
0
class Listener(object):
    """A Listener is used by this module to listen on the multicast
    group to which DNS messages are sent, allowing the implementation
    to cache information as it arrives.

    It requires registration with an Engine object in order to have
    the read() method called when a socket is availble for reading."""
    def __init__(self, zeroconf):
        self.zeroconf = zeroconf
        self.zeroconf.engine.addReader(self, self.zeroconf.socket)

    def handle_read(self):
        try:
            data, (addr,
                   port) = self.zeroconf.socket.recvfrom(dns._MAX_MSG_ABSOLUTE)
        except Exception, err:
            if getattr(err, 'errno',
                       None) == 9:  # 'Bad file descriptor' during shutdown...
                pass
            else:
                log.info('Error on recvfrom: %s', err)
            return None
        self.data = data
        try:
            msg = dns.DNSIncoming(data)
        except dns.NonLocalNameException, err:
            """We ignore mdns queries for non-local addresses, such as in-addr.arpa."""
Example #4
0
 def testLongName(self):
     generated = r.DNSOutgoing(r._FLAGS_QR_RESPONSE)
     question = r.DNSQuestion(
         "this.is.a.very.long.name.with.lots.of.parts.in.it.local.",
         r._TYPE_SRV, r._CLASS_IN)
     generated.addQuestion(question)
     parsed = r.DNSIncoming(generated.packet())
Example #5
0
	def testMatchQuestion(self):
		generated = r.DNSOutgoing(r._FLAGS_QR_QUERY)
		question = r.DNSQuestion("testname.local.", r._TYPE_SRV, r._CLASS_IN)
		generated.addQuestion(question)
		parsed = r.DNSIncoming(generated.packet())
		self.assertEqual(len(generated.questions), 1)
		self.assertEqual(len(generated.questions), len(parsed.questions))
		self.assertEqual(question, parsed.questions[0])
Example #6
0
	def testServiceDiscoverMessage(self):
		info = mdns.ServiceInfo(
			'_test._tcp.local.',
			'blue._test._tcp.local.',
			socket.inet_aton('127.0.0.1'),
			80,
			0,
			0,
			{},
			server = 'myhost.local',
		)
		out = mdns.Zeroconf.serviceAnnouncement( info )
		temp = r.DNSIncoming(out.packet())
Example #7
0
 def testParseOwnPacketQuestion(self):
     generated = r.DNSOutgoing(r._FLAGS_QR_QUERY)
     generated.addQuestion(
         r.DNSQuestion("testname.local.", r._TYPE_SRV, r._CLASS_IN))
     parsed = r.DNSIncoming(generated.packet())
     print("parsed questions %s " % parsed.questions)
Example #8
0
 def testParseOwnPacketFlags(self):
     generated = r.DNSOutgoing(r._FLAGS_QR_QUERY)
     parsed = r.DNSIncoming(generated.packet())
     print("parsed %s " % parsed)
Example #9
0
 def testParseOwnPacketSimpleUnicast(self):
     generated = r.DNSOutgoing(0, 0)
     parsed = r.DNSIncoming(generated.packet())
     print("parsed %s " % parsed)
     self.assertEqual(type(parsed), r.DNSIncoming)
Example #10
0
	def testParseOwnPacketSimpleUnicast(self):
		generated = r.DNSOutgoing(0, 0)
		parsed = r.DNSIncoming(generated.packet())
Example #11
0
	def testExceedinglyLongName(self):
		generated = r.DNSOutgoing(r._FLAGS_QR_RESPONSE)
		name = "%slocal." % ("part." * 1000)
		question = r.DNSQuestion(name, r._TYPE_SRV, r._CLASS_IN)
		generated.addQuestion(question)
		parsed = r.DNSIncoming(generated.packet())