[DO NOT MERGE]
[controller.git] / opendaylight / ping / plugin / src / main / java / org / opendaylight / controller / ping / plugin / internal / PingImpl.java
1 package org.opendaylight.controller.ping.plugin.internal;
2
3 import java.net.InetAddress;
4 import java.util.Collections;
5 import java.util.concurrent.Callable;
6 import java.util.concurrent.ExecutorService;
7 import java.util.concurrent.Executors;
8 import java.util.concurrent.Future;
9
10 import org.opendaylight.controller.sal.common.util.Rpcs;
11 import org.opendaylight.yang.gen.v1.urn.opendaylight.ping.rev130911.PingService;
12 import org.opendaylight.yang.gen.v1.urn.opendaylight.ping.rev130911.SendEchoInput;
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.ping.rev130911.SendEchoOutput;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.ping.rev130911.SendEchoOutput.EchoResult;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.ping.rev130911.SendEchoOutputBuilder;
16 import org.opendaylight.yangtools.yang.common.RpcError;
17 import org.opendaylight.yangtools.yang.common.RpcResult;
18
19 public class PingImpl implements PingService {
20     private final ExecutorService pool = Executors.newFixedThreadPool(2);
21
22     private Future<RpcResult<SendEchoOutput>> startPingHost(final SendEchoInput destination) {
23         return pool.submit(new Callable<RpcResult<SendEchoOutput>>() {
24             @Override
25             public RpcResult<SendEchoOutput> call() throws Exception {
26                 SendEchoOutputBuilder ob = new SendEchoOutputBuilder();
27                 try {
28                     InetAddress dst = InetAddress.getByName(destination.getDestination().getValue());
29                     /* Build the result and return it. */
30                     ob.setEchoResult(dst.isReachable(5000) ? EchoResult.Reachable : EchoResult.Unreachable);
31                 } catch (Exception e) {
32                     /* Return error result. */
33                     ob.setEchoResult(EchoResult.Error);
34                 }
35                 return Rpcs.<SendEchoOutput>getRpcResult(true, ob.build(), Collections.<RpcError>emptySet());
36             }
37         });
38     }
39
40     @Override
41     public Future<RpcResult<SendEchoOutput>> sendEcho(SendEchoInput destination) {
42         return this.startPingHost(destination);
43     }
44
45 }