1d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// Copyright (c) 2005 Brian Wellington (bwelling@xbill.org) 2d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 3d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpackage org.xbill.DNS; 4d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 5d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport java.io.*; 6d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport java.net.*; 7d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport java.nio.channels.*; 8d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport org.xbill.DNS.utils.hexdump; 9d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 10d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenclass Client { 11d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 12d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenprotected long endTime; 13d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenprotected SelectionKey key; 14d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 15d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenprotected 16d7955ce24d294fb2014c59d11fca184471056f44Shuyi ChenClient(SelectableChannel channel, long endTime) throws IOException { 17d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen boolean done = false; 18d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen Selector selector = null; 19d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.endTime = endTime; 20d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen try { 21d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen selector = Selector.open(); 22d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen channel.configureBlocking(false); 23d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen key = channel.register(selector, SelectionKey.OP_READ); 24d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen done = true; 25d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 26d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen finally { 27d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen if (!done && selector != null) 28d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen selector.close(); 29d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen if (!done) 30d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen channel.close(); 31d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 32d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 33d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 34d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenstatic protected void 35d7955ce24d294fb2014c59d11fca184471056f44Shuyi ChenblockUntil(SelectionKey key, long endTime) throws IOException { 36d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen long timeout = endTime - System.currentTimeMillis(); 37d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen int nkeys = 0; 38d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen if (timeout > 0) 39d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen nkeys = key.selector().select(timeout); 40d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen else if (timeout == 0) 41d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen nkeys = key.selector().selectNow(); 42d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen if (nkeys == 0) 43d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen throw new SocketTimeoutException(); 44d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 45d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 46d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenstatic protected void 47d7955ce24d294fb2014c59d11fca184471056f44Shuyi ChenverboseLog(String prefix, byte [] data) { 48d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen if (Options.check("verbosemsg")) 49d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen System.err.println(hexdump.dump(prefix, data)); 50d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 51d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 52d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenvoid 53d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chencleanup() throws IOException { 54d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen key.selector().close(); 55d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen key.channel().close(); 56d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 57d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 58d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 59