0fe73000f9f8bfba261c6e2462a2eb2fb473c29d
[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.io.IOException;
4 import java.net.InetAddress;
5 import java.util.Collections;
6 import java.util.concurrent.Future;
7
8 import org.opendaylight.controller.sal.common.util.Rpcs;
9 import org.opendaylight.yang.gen.v1.urn.opendaylight.ping.rev130911.PingService;
10 import org.opendaylight.yang.gen.v1.urn.opendaylight.ping.rev130911.SendEchoInput;
11 import org.opendaylight.yang.gen.v1.urn.opendaylight.ping.rev130911.SendEchoOutput;
12 import org.opendaylight.yang.gen.v1.urn.opendaylight.ping.rev130911.SendEchoOutput.EchoResult;
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.ping.rev130911.SendEchoOutputBuilder;
14 import org.opendaylight.yangtools.yang.common.RpcError;
15 import org.opendaylight.yangtools.yang.common.RpcResult;
16
17 import com.google.common.util.concurrent.Futures;
18
19 public class PingImpl implements PingService {
20
21     private EchoResult pingHost(InetAddress destination) throws IOException {
22         if (destination.isReachable(5000)) {
23             return EchoResult.Reachable;
24         } else {
25             return EchoResult.Unreachable;
26         }
27     }
28
29     @Override
30     public Future<RpcResult<SendEchoOutput>> sendEcho(SendEchoInput destination) {
31         try {
32             InetAddress dst = InetAddress.getByName(destination
33                     .getDestination().getValue());
34             EchoResult result = this.pingHost(dst);
35
36             /* Build the result and return it. */
37             SendEchoOutputBuilder ob = new SendEchoOutputBuilder();
38             ob.setEchoResult(result);
39             RpcResult<SendEchoOutput> rpcResult =
40                     Rpcs.<SendEchoOutput> getRpcResult(true, ob.build(),
41                             Collections.<RpcError> emptySet());
42
43             return Futures.immediateFuture(rpcResult);
44         } catch (Exception e) {
45
46             /* Return error result. */
47             SendEchoOutputBuilder ob = new SendEchoOutputBuilder();
48             ob.setEchoResult(EchoResult.Error);
49             RpcResult<SendEchoOutput> rpcResult =
50                     Rpcs.<SendEchoOutput> getRpcResult(true, ob.build(),
51                             Collections.<RpcError> emptySet());
52             return Futures.immediateFuture(rpcResult);
53         }
54     }
55
56 }