View Javadoc
1   /*
2    * junixsocket
3    *
4    * Copyright 2009-2024 Christian Kohlschütter
5    *
6    * Licensed under the Apache License, Version 2.0 (the "License");
7    * you may not use this file except in compliance with the License.
8    * You may obtain a copy of the License at
9    *
10   *     http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing, software
13   * distributed under the License is distributed on an "AS IS" BASIS,
14   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15   * See the License for the specific language governing permissions and
16   * limitations under the License.
17   */
18  package org.newsclub.net.unix;
19  
20  import java.io.IOException;
21  import java.nio.charset.StandardCharsets;
22  
23  /**
24   * TIPC-specific code that resides in the native library. To be used by {@code AFTIPCSocket} and
25   * {@code AFTIPCDatagramSocket} only.
26   *
27   * @author Christian Kohlschütter
28   */
29  public final class AFTIPCSocketImplExtensions implements
30      AFSocketImplExtensions<AFTIPCSocketAddress> {
31    private final AncillaryDataSupport ancillaryDataSupport;
32  
33    AFTIPCSocketImplExtensions(AncillaryDataSupport ancillaryDataSupport) {
34      this.ancillaryDataSupport = ancillaryDataSupport;
35    }
36  
37    /**
38     * Returns the TIPC "ErrInfo" data from the ancillary receive buffer.
39     *
40     * Invalid for any other use.
41     *
42     * @return The errinfo.
43     */
44    public int[] getTIPCErrInfo() {
45      return ancillaryDataSupport.getTIPCErrorInfo();
46    }
47  
48    /**
49     * Returns the TIPC "DestName" data from the ancillary receive buffer.
50     *
51     * Invalid for any other use.
52     *
53     * @return The DestName.
54     */
55    public int[] getTIPCDestName() {
56      return ancillaryDataSupport.getTIPCDestName();
57    }
58  
59    /**
60     * Retrieves the 16-byte TIPC node identity given a node hash.
61     *
62     * @param peer The node hash.
63     * @return The node identity, or {@code  null} if unsupported.
64     * @throws IOException on error.
65     */
66    public byte[] getTIPCNodeId(int peer) throws IOException {
67      return NativeUnixSocket.tipcGetNodeId(peer);
68    }
69  
70    /**
71     * Retrieves the TIPC link name given a node hash and bearer Id.
72     *
73     * @param peer The node hash.
74     * @param bearerId The bearer Id.
75     * @return The link name, or {@code  null} if unsupported.
76     * @throws IOException on error.
77     */
78    public String getTIPCLinkName(int peer, int bearerId) throws IOException {
79      byte[] name = NativeUnixSocket.tipcGetLinkName(peer, bearerId);
80      return name == null ? null : new String(name, StandardCharsets.UTF_8);
81    }
82  }