6d6924fd66f9e05a1e7b970d3730a03f97f108b4
[olsrd.git] / lib / pud / wireformat-java / src / main / c / org_olsr_plugin_pud_ClusterLeader.c
1 #include "org_olsr_plugin_pud_ClusterLeader.h"
2 #include "util.h"
3 #include <arpa/inet.h>
4
5 /*
6  * Class:     org_olsr_plugin_pud_ClusterLeader
7  * Method:    getClusterLeaderVersion
8  * Signature: ()I
9  */
10 JNIEXPORT jint JNICALL Java_org_olsr_plugin_pud_ClusterLeader_getClusterLeaderVersion
11   (JNIEnv * env, jobject this) {
12         jobject dataObject;
13         jboolean isCopy;
14         UplinkMessage * uplinkMessage = getUplinkMessage(env, this, &dataObject,
15                         &isCopy);
16
17         uint8_t version = getClusterLeaderVersion(
18                         getClusterLeaderMessage(uplinkMessage));
19
20         releaseUplinkMessage(env, uplinkMessage, dataObject, isCopy, JNI_ABORT);
21
22         return (jint) version;
23 }
24
25 /*
26  * Class:     org_olsr_plugin_pud_ClusterLeader
27  * Method:    getClusterLeaderValidityTime
28  * Signature: ()J
29  */
30 JNIEXPORT jlong JNICALL Java_org_olsr_plugin_pud_ClusterLeader_getClusterLeaderValidityTime
31   (JNIEnv * env, jobject this) {
32         jobject dataObject;
33         jboolean isCopy;
34         UplinkMessage * uplinkMessage = getUplinkMessage(env, this, &dataObject,
35                         &isCopy);
36
37         unsigned long validityTime = getValidityTime(
38                         &getClusterLeaderMessage(uplinkMessage)->validityTime);
39
40         releaseUplinkMessage(env, uplinkMessage, dataObject, isCopy, JNI_ABORT);
41
42         return (jlong) validityTime;
43 }
44
45 /*
46  * Class:     org_olsr_plugin_pud_ClusterLeader
47  * Method:    getClusterLeaderDownlinkPort
48  * Signature: ()I
49  */
50 JNIEXPORT jint JNICALL Java_org_olsr_plugin_pud_ClusterLeader_getClusterLeaderDownlinkPort
51   (JNIEnv * env, jobject this) {
52         jobject dataObject;
53         jboolean isCopy;
54         UplinkMessage * uplinkMessage = getUplinkMessage(env, this, &dataObject,
55                         &isCopy);
56
57         unsigned short downlinkPort = ntohs(getClusterLeaderDownlinkPort(
58                         getClusterLeaderMessage(uplinkMessage)));
59
60         releaseUplinkMessage(env, uplinkMessage, dataObject, isCopy, JNI_ABORT);
61
62         return (jint) downlinkPort;
63 }
64
65 /*
66  * Class:     org_olsr_plugin_pud_ClusterLeader
67  * Method:    getClusterLeaderOriginator
68  * Signature: ()Ljava/net/InetAddress;
69  */
70 JNIEXPORT jobject JNICALL Java_org_olsr_plugin_pud_ClusterLeader_getClusterLeaderOriginator
71   (JNIEnv * env, jobject this) {
72         jobject dataObject;
73         jboolean isCopy;
74         UplinkMessage * uplinkMessage = getUplinkMessage(env, this, &dataObject,
75                         &isCopy);
76
77         jobject object;
78         bool ipv4 = !getUplinkMessageIPv6(&uplinkMessage->header);
79
80         union olsr_ip_addr * addr;
81         if (ipv4) {
82                 addr = (union olsr_ip_addr *) &uplinkMessage->msg.clusterLeader.leader.v4.originator;
83         } else {
84                 addr = (union olsr_ip_addr *) &uplinkMessage->msg.clusterLeader.leader.v6.originator;
85         }
86         constructIPAddress(env, ipv4, addr, &object);
87
88         releaseUplinkMessage(env, uplinkMessage, dataObject, isCopy, JNI_ABORT);
89
90         return object;
91 }
92
93 /*
94  * Class:     org_olsr_plugin_pud_ClusterLeader
95  * Method:    getClusterLeaderClusterLeader
96  * Signature: ()Ljava/net/InetAddress;
97  */
98 JNIEXPORT jobject JNICALL Java_org_olsr_plugin_pud_ClusterLeader_getClusterLeaderClusterLeader
99   (JNIEnv * env, jobject this) {
100         jobject dataObject;
101         jboolean isCopy;
102         UplinkMessage * uplinkMessage = getUplinkMessage(env, this, &dataObject,
103                         &isCopy);
104
105         jobject object;
106         bool ipv4 = !getUplinkMessageIPv6(&uplinkMessage->header);
107
108         union olsr_ip_addr * addr;
109         if (ipv4) {
110                 addr = (union olsr_ip_addr *) &uplinkMessage->msg.clusterLeader.leader.v4.clusterLeader;
111         } else {
112                 addr = (union olsr_ip_addr *) &uplinkMessage->msg.clusterLeader.leader.v6.clusterLeader;
113         }
114         constructIPAddress(env, ipv4, addr, &object);
115
116         releaseUplinkMessage(env, uplinkMessage, dataObject, isCopy, JNI_ABORT);
117
118         return object;
119 }