]> git.basschouten.com Git - openhab-addons.git/blob
053666463bd266ebe027f878e957a32fa674793b
[openhab-addons.git] /
1 /**
2  * Copyright (c) 2010-2024 Contributors to the openHAB project
3  *
4  * See the NOTICE file(s) distributed with this work for additional
5  * information.
6  *
7  * This program and the accompanying materials are made available under the
8  * terms of the Eclipse Public License 2.0 which is available at
9  * http://www.eclipse.org/legal/epl-2.0
10  *
11  * SPDX-License-Identifier: EPL-2.0
12  */
13 package org.openhab.binding.amazondashbutton.internal.pcap;
14
15 import java.util.List;
16 import java.util.Objects;
17 import java.util.function.Function;
18
19 import org.pcap4j.core.PcapAddress;
20 import org.pcap4j.core.PcapHandle;
21 import org.pcap4j.core.PcapNativeException;
22 import org.pcap4j.core.PcapNetworkInterface;
23 import org.pcap4j.core.PcapNetworkInterface.PromiscuousMode;
24
25 /**
26  * This wrapper is needed as {@link PcapNetworkInterface#equals(Object)} and {@link PcapNetworkInterface#hashCode()} are
27  * not implemented in an appropriate way. The wrapper delegates all methods calls except {@link #equals(Object)} and
28  * {@link #hashCode()} to {@link #pcapNetworkInterface}.
29  *
30  * @author Oliver Libutzki - Initial contribution
31  *
32  */
33 public class PcapNetworkInterfaceWrapper {
34
35     /**
36      * The wrapped object
37      */
38     private final PcapNetworkInterface pcapNetworkInterface;
39
40     /**
41      * Use this Guava function in order to create a {@link PcapNetworkInterfaceWrapper} instance.
42      */
43     public static final Function<PcapNetworkInterface, PcapNetworkInterfaceWrapper> TRANSFORMER = new Function<PcapNetworkInterface, PcapNetworkInterfaceWrapper>() {
44
45         @Override
46         public PcapNetworkInterfaceWrapper apply(PcapNetworkInterface pcapNetworkInterface) {
47             return new PcapNetworkInterfaceWrapper(pcapNetworkInterface);
48         }
49     };
50
51     private PcapNetworkInterfaceWrapper(PcapNetworkInterface pcapNetworkInterface) {
52         if (pcapNetworkInterface == null) {
53             throw new IllegalArgumentException("Don't pass null.");
54         }
55         this.pcapNetworkInterface = pcapNetworkInterface;
56     }
57
58     public List<PcapAddress> getAddresses() {
59         return pcapNetworkInterface.getAddresses();
60     }
61
62     public String getName() {
63         return pcapNetworkInterface.getName();
64     }
65
66     public String getDescription() {
67         return pcapNetworkInterface.getDescription();
68     }
69
70     public PcapHandle openLive(int arg0, PromiscuousMode arg1, int arg2) throws PcapNativeException {
71         return pcapNetworkInterface.openLive(arg0, arg1, arg2);
72     }
73
74     @Override
75     public boolean equals(Object obj) {
76         if (obj == null) {
77             return false;
78         }
79         if (getClass() != obj.getClass()) {
80             return false;
81         }
82         final PcapNetworkInterfaceWrapper other = (PcapNetworkInterfaceWrapper) obj;
83         return Objects.equals(this.getName(), other.getName());
84     }
85
86     @Override
87     public int hashCode() {
88         return Objects.hashCode(this.getName());
89     }
90
91     @Override
92     public String toString() {
93         return pcapNetworkInterface.toString();
94     }
95 }