/** * @see * org.apache.james.jspf.executor.DNSAsynchLookupService#getRecordsAsynch(org.apache.james.jspf.core.DNSRequest, * int, org.apache.james.jspf.executor.IResponseQueue) */ public void getRecordsAsynch(DNSRequest request, int id, IResponseQueue responsePool) { Message message; try { message = makeQuery(request, id); LookupAsynch la = new LookupAsynch(message.getQuestion().getName(), message.getQuestion().getType()); la.runAsynch( new Runnable() { private IResponseQueue responsePool; private Integer id; private LookupAsynch lookup; public void run() { responsePool.insertResponse( new IResponse() { public Exception getException() { if (lookup.getResult() == LookupAsynch.TRY_AGAIN) { return new TimeoutException(lookup.getErrorString()); } else { return null; } } public Object getId() { return id; } public List<String> getValue() { return (DNSServiceXBillImpl.convertRecordsToList(lookup.getAnswers())); } }); } public Runnable setResponsePool( LookupAsynch la, IResponseQueue responsePool, Integer integer) { this.lookup = la; this.responsePool = responsePool; this.id = integer; return this; } }.setResponsePool(la, responsePool, new Integer(id))); // this.resolver.sendAsync(message, new Integer(id), new ResponseQueueAdaptor(responsePool)); } catch (TextParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
private DomainResource getDomainResource(String domainString) { try { logger.info("Fetching domain: " + domainString); Domain domain = factory.getDomain(domainString); Name domainName = Utils.stringToName(domainString); DomainResource dr = DomainResource.fromDomain(domain, domainName); return dr; } catch (ForeignDomainException e) { logger.error("Iterator returned foreign domain: " + domainString); throw new RuntimeException(e); } catch (TextParseException e) { logger.error("Invalid domain name: " + e.getMessage()); throw new RuntimeException(e); } }
private void sendQuery() { Header queryHeader = new Header(); // If we set the RA (Recursion Available) flag and our message ID to 0 // then the packet matches the real mDNS query packet as displayed in Wireshark queryHeader.setFlag(org.xbill.DNS.Flags.RA); queryHeader.setID(0); Record question = null; try { // We need to create our "Question" DNS query that is a pointer record to // the mDNS Query "Name" question = Record.newRecord(new Name(NvmDNS.MDNS_QUERY), Type.PTR, DClass.IN); } catch (TextParseException e) { Log.e("NvmDNS Query", e.getMessage()); return; } // We combine our header and our question into a single message Message query = new Message(); query.setHeader(queryHeader); query.addRecord(question, Section.QUESTION); // Convert the message into Network Byte Order byte[] wireQuery = query.toWire(); Log.i("NvmDNS Query", query.toString()); // Convert our byte array into a Packet DatagramPacket transmitPacket = new DatagramPacket(wireQuery, wireQuery.length); transmitPacket.setAddress(NvmDNS.MDNS_MULTICAST_ADDRESS); transmitPacket.setPort(NvmDNS.MDNS_PORT); // And (attempt) to send the packet try { Log.d("NvmDNS Query", "Blocking on this.nvstream_socket.send(transmitPacket)"); this.socket.send(transmitPacket); Log.d("NvmDNS Query", "Passed this.nvstream_socket.send(transmitPacket)"); } catch (IOException e) { Log.e("NvmDNS Query", "There was an error sending the DNS query."); Log.e("NvmDNS Query", e.getMessage()); } }