1use jni::JNIEnv;
23use jni::objects::{JClass, JString};
24use jni::sys::{jlong, jboolean, jint, jdouble, jbyteArray, jstring};
25use crate::protocol::{
26 RiProtocolManager, RiProtocolConfig, RiProtocolType,
27 RiProtocolStats, RiConnectionStats,
28 RiFrame, RiFrameHeader, RiFrameType, RiConnectionInfo, RiMessageFlags,
29 RiSecurityLevel, RiFrameParser, RiFrameBuilder,
30};
31use crate::java::exception::check_not_null;
32
33#[no_mangle]
38pub extern "system" fn Java_com_dunimd_ri_protocol_RiProtocolManager_new0(
39 _env: JNIEnv,
40 _class: JClass,
41) -> jlong {
42 let manager = Box::new(RiProtocolManager::new());
43 Box::into_raw(manager) as jlong
44}
45
46#[no_mangle]
47pub extern "system" fn Java_com_dunimd_ri_protocol_RiProtocolManager_free0(
48 _env: JNIEnv,
49 _class: JClass,
50 ptr: jlong,
51) {
52 if ptr != 0 {
53 unsafe {
54 let _ = Box::from_raw(ptr as *mut RiProtocolManager);
55 }
56 }
57}
58
59#[no_mangle]
64pub extern "system" fn Java_com_dunimd_ri_protocol_RiProtocolConfig_new0(
65 _env: JNIEnv,
66 _class: JClass,
67) -> jlong {
68 let config = Box::new(RiProtocolConfig::default());
69 Box::into_raw(config) as jlong
70}
71
72#[no_mangle]
73pub extern "system" fn Java_com_dunimd_ri_protocol_RiProtocolConfig_getDefaultProtocol0(
74 mut env: JNIEnv,
75 _class: JClass,
76 ptr: jlong,
77) -> jint {
78 if !check_not_null(&mut env, ptr, "RiProtocolConfig") {
79 return 0;
80 }
81
82 let config = unsafe { &*(ptr as *const RiProtocolConfig) };
83 config.default_protocol as jint
84}
85
86#[no_mangle]
87pub extern "system" fn Java_com_dunimd_ri_protocol_RiProtocolConfig_setDefaultProtocol0(
88 mut env: JNIEnv,
89 _class: JClass,
90 ptr: jlong,
91 protocol_type: jint,
92) {
93 if !check_not_null(&mut env, ptr, "RiProtocolConfig") {
94 return;
95 }
96
97 let config = unsafe { &mut *(ptr as *mut RiProtocolConfig) };
98 config.default_protocol = match protocol_type {
99 0 => RiProtocolType::Global,
100 _ => RiProtocolType::Private,
101 };
102}
103
104#[no_mangle]
105pub extern "system" fn Java_com_dunimd_ri_protocol_RiProtocolConfig_isSecurityEnabled0(
106 mut env: JNIEnv,
107 _class: JClass,
108 ptr: jlong,
109) -> jboolean {
110 if !check_not_null(&mut env, ptr, "RiProtocolConfig") {
111 return 0;
112 }
113
114 let config = unsafe { &*(ptr as *const RiProtocolConfig) };
115 config.security_enabled as jboolean
116}
117
118#[no_mangle]
119pub extern "system" fn Java_com_dunimd_ri_protocol_RiProtocolConfig_setSecurityEnabled0(
120 mut env: JNIEnv,
121 _class: JClass,
122 ptr: jlong,
123 enabled: jboolean,
124) {
125 if !check_not_null(&mut env, ptr, "RiProtocolConfig") {
126 return;
127 }
128
129 let config = unsafe { &mut *(ptr as *mut RiProtocolConfig) };
130 config.security_enabled = enabled != 0;
131}
132
133#[no_mangle]
134pub extern "system" fn Java_com_dunimd_ri_protocol_RiProtocolConfig_getSecurityLevel0(
135 mut env: JNIEnv,
136 _class: JClass,
137 ptr: jlong,
138) -> jint {
139 if !check_not_null(&mut env, ptr, "RiProtocolConfig") {
140 return 0;
141 }
142
143 let config = unsafe { &*(ptr as *const RiProtocolConfig) };
144 config.security_level as jint
145}
146
147#[no_mangle]
148pub extern "system" fn Java_com_dunimd_ri_protocol_RiProtocolConfig_setSecurityLevel0(
149 mut env: JNIEnv,
150 _class: JClass,
151 ptr: jlong,
152 level: jint,
153) {
154 if !check_not_null(&mut env, ptr, "RiProtocolConfig") {
155 return;
156 }
157
158 let config = unsafe { &mut *(ptr as *mut RiProtocolConfig) };
159 config.security_level = match level {
160 0 => RiSecurityLevel::None,
161 1 => RiSecurityLevel::Standard,
162 2 => RiSecurityLevel::High,
163 _ => RiSecurityLevel::Military,
164 };
165}
166
167#[no_mangle]
168pub extern "system" fn Java_com_dunimd_ri_protocol_RiProtocolConfig_isStateSyncEnabled0(
169 mut env: JNIEnv,
170 _class: JClass,
171 ptr: jlong,
172) -> jboolean {
173 if !check_not_null(&mut env, ptr, "RiProtocolConfig") {
174 return 0;
175 }
176
177 let config = unsafe { &*(ptr as *const RiProtocolConfig) };
178 config.state_sync_enabled as jboolean
179}
180
181#[no_mangle]
182pub extern "system" fn Java_com_dunimd_ri_protocol_RiProtocolConfig_setStateSyncEnabled0(
183 mut env: JNIEnv,
184 _class: JClass,
185 ptr: jlong,
186 enabled: jboolean,
187) {
188 if !check_not_null(&mut env, ptr, "RiProtocolConfig") {
189 return;
190 }
191
192 let config = unsafe { &mut *(ptr as *mut RiProtocolConfig) };
193 config.state_sync_enabled = enabled != 0;
194}
195
196#[no_mangle]
197pub extern "system" fn Java_com_dunimd_ri_protocol_RiProtocolConfig_isPerformanceOptimization0(
198 mut env: JNIEnv,
199 _class: JClass,
200 ptr: jlong,
201) -> jboolean {
202 if !check_not_null(&mut env, ptr, "RiProtocolConfig") {
203 return 0;
204 }
205
206 let config = unsafe { &*(ptr as *const RiProtocolConfig) };
207 config.performance_optimization as jboolean
208}
209
210#[no_mangle]
211pub extern "system" fn Java_com_dunimd_ri_protocol_RiProtocolConfig_setPerformanceOptimization0(
212 mut env: JNIEnv,
213 _class: JClass,
214 ptr: jlong,
215 enabled: jboolean,
216) {
217 if !check_not_null(&mut env, ptr, "RiProtocolConfig") {
218 return;
219 }
220
221 let config = unsafe { &mut *(ptr as *mut RiProtocolConfig) };
222 config.performance_optimization = enabled != 0;
223}
224
225#[no_mangle]
226pub extern "system" fn Java_com_dunimd_ri_protocol_RiProtocolConfig_free0(
227 _env: JNIEnv,
228 _class: JClass,
229 ptr: jlong,
230) {
231 if ptr != 0 {
232 unsafe {
233 let _ = Box::from_raw(ptr as *mut RiProtocolConfig);
234 }
235 }
236}
237
238#[no_mangle]
243pub extern "system" fn Java_com_dunimd_ri_protocol_RiProtocolStats_getMessagesSent0(
244 mut env: JNIEnv,
245 _class: JClass,
246 ptr: jlong,
247) -> jlong {
248 if !check_not_null(&mut env, ptr, "RiProtocolStats") {
249 return 0;
250 }
251
252 let stats = unsafe { &*(ptr as *const RiProtocolStats) };
253 stats.messages_sent as jlong
254}
255
256#[no_mangle]
257pub extern "system" fn Java_com_dunimd_ri_protocol_RiProtocolStats_getMessagesReceived0(
258 mut env: JNIEnv,
259 _class: JClass,
260 ptr: jlong,
261) -> jlong {
262 if !check_not_null(&mut env, ptr, "RiProtocolStats") {
263 return 0;
264 }
265
266 let stats = unsafe { &*(ptr as *const RiProtocolStats) };
267 stats.messages_received as jlong
268}
269
270#[no_mangle]
271pub extern "system" fn Java_com_dunimd_ri_protocol_RiProtocolStats_getBytesSent0(
272 mut env: JNIEnv,
273 _class: JClass,
274 ptr: jlong,
275) -> jlong {
276 if !check_not_null(&mut env, ptr, "RiProtocolStats") {
277 return 0;
278 }
279
280 let stats = unsafe { &*(ptr as *const RiProtocolStats) };
281 stats.bytes_sent as jlong
282}
283
284#[no_mangle]
285pub extern "system" fn Java_com_dunimd_ri_protocol_RiProtocolStats_getBytesReceived0(
286 mut env: JNIEnv,
287 _class: JClass,
288 ptr: jlong,
289) -> jlong {
290 if !check_not_null(&mut env, ptr, "RiProtocolStats") {
291 return 0;
292 }
293
294 let stats = unsafe { &*(ptr as *const RiProtocolStats) };
295 stats.bytes_received as jlong
296}
297
298#[no_mangle]
299pub extern "system" fn Java_com_dunimd_ri_protocol_RiProtocolStats_getErrors0(
300 mut env: JNIEnv,
301 _class: JClass,
302 ptr: jlong,
303) -> jlong {
304 if !check_not_null(&mut env, ptr, "RiProtocolStats") {
305 return 0;
306 }
307
308 let stats = unsafe { &*(ptr as *const RiProtocolStats) };
309 stats.errors as jlong
310}
311
312#[no_mangle]
313pub extern "system" fn Java_com_dunimd_ri_protocol_RiProtocolStats_getAvgLatencyMs0(
314 mut env: JNIEnv,
315 _class: JClass,
316 ptr: jlong,
317) -> jdouble {
318 if !check_not_null(&mut env, ptr, "RiProtocolStats") {
319 return 0.0;
320 }
321
322 let stats = unsafe { &*(ptr as *const RiProtocolStats) };
323 stats.avg_latency_ms
324}
325
326#[no_mangle]
327pub extern "system" fn Java_com_dunimd_ri_protocol_RiProtocolStats_free0(
328 _env: JNIEnv,
329 _class: JClass,
330 ptr: jlong,
331) {
332 if ptr != 0 {
333 unsafe {
334 let _ = Box::from_raw(ptr as *mut RiProtocolStats);
335 }
336 }
337}
338
339#[no_mangle]
344pub extern "system" fn Java_com_dunimd_ri_protocol_RiConnectionStats_getTotalConnections0(
345 mut env: JNIEnv,
346 _class: JClass,
347 ptr: jlong,
348) -> jlong {
349 if !check_not_null(&mut env, ptr, "RiConnectionStats") {
350 return 0;
351 }
352
353 let stats = unsafe { &*(ptr as *const RiConnectionStats) };
354 stats.total_connections as jlong
355}
356
357#[no_mangle]
358pub extern "system" fn Java_com_dunimd_ri_protocol_RiConnectionStats_getActiveConnections0(
359 mut env: JNIEnv,
360 _class: JClass,
361 ptr: jlong,
362) -> jlong {
363 if !check_not_null(&mut env, ptr, "RiConnectionStats") {
364 return 0;
365 }
366
367 let stats = unsafe { &*(ptr as *const RiConnectionStats) };
368 stats.active_connections as jlong
369}
370
371#[no_mangle]
372pub extern "system" fn Java_com_dunimd_ri_protocol_RiConnectionStats_getBytesSent0(
373 mut env: JNIEnv,
374 _class: JClass,
375 ptr: jlong,
376) -> jlong {
377 if !check_not_null(&mut env, ptr, "RiConnectionStats") {
378 return 0;
379 }
380
381 let stats = unsafe { &*(ptr as *const RiConnectionStats) };
382 stats.bytes_sent as jlong
383}
384
385#[no_mangle]
386pub extern "system" fn Java_com_dunimd_ri_protocol_RiConnectionStats_getBytesReceived0(
387 mut env: JNIEnv,
388 _class: JClass,
389 ptr: jlong,
390) -> jlong {
391 if !check_not_null(&mut env, ptr, "RiConnectionStats") {
392 return 0;
393 }
394
395 let stats = unsafe { &*(ptr as *const RiConnectionStats) };
396 stats.bytes_received as jlong
397}
398
399#[no_mangle]
400pub extern "system" fn Java_com_dunimd_ri_protocol_RiConnectionStats_getConnectionDurationSecs0(
401 mut env: JNIEnv,
402 _class: JClass,
403 ptr: jlong,
404) -> jlong {
405 if !check_not_null(&mut env, ptr, "RiConnectionStats") {
406 return 0;
407 }
408
409 let stats = unsafe { &*(ptr as *const RiConnectionStats) };
410 stats.connection_duration_secs as jlong
411}
412
413#[no_mangle]
414pub extern "system" fn Java_com_dunimd_ri_protocol_RiConnectionStats_free0(
415 _env: JNIEnv,
416 _class: JClass,
417 ptr: jlong,
418) {
419 if ptr != 0 {
420 unsafe {
421 let _ = Box::from_raw(ptr as *mut RiConnectionStats);
422 }
423 }
424}
425
426#[no_mangle]
431pub extern "system" fn Java_com_dunimd_ri_protocol_RiMessageFlags_new0(
432 _env: JNIEnv,
433 _class: JClass,
434) -> jlong {
435 let flags = Box::new(RiMessageFlags::default());
436 Box::into_raw(flags) as jlong
437}
438
439#[no_mangle]
440pub extern "system" fn Java_com_dunimd_ri_protocol_RiMessageFlags_isCompressed0(
441 mut env: JNIEnv,
442 _class: JClass,
443 ptr: jlong,
444) -> jboolean {
445 if !check_not_null(&mut env, ptr, "RiMessageFlags") {
446 return 0;
447 }
448
449 let flags = unsafe { &*(ptr as *const RiMessageFlags) };
450 flags.compressed as jboolean
451}
452
453#[no_mangle]
454pub extern "system" fn Java_com_dunimd_ri_protocol_RiMessageFlags_setCompressed0(
455 mut env: JNIEnv,
456 _class: JClass,
457 ptr: jlong,
458 compressed: jboolean,
459) {
460 if !check_not_null(&mut env, ptr, "RiMessageFlags") {
461 return;
462 }
463
464 let flags = unsafe { &mut *(ptr as *mut RiMessageFlags) };
465 flags.compressed = compressed != 0;
466}
467
468#[no_mangle]
469pub extern "system" fn Java_com_dunimd_ri_protocol_RiMessageFlags_isEncrypted0(
470 mut env: JNIEnv,
471 _class: JClass,
472 ptr: jlong,
473) -> jboolean {
474 if !check_not_null(&mut env, ptr, "RiMessageFlags") {
475 return 0;
476 }
477
478 let flags = unsafe { &*(ptr as *const RiMessageFlags) };
479 flags.encrypted as jboolean
480}
481
482#[no_mangle]
483pub extern "system" fn Java_com_dunimd_ri_protocol_RiMessageFlags_setEncrypted0(
484 mut env: JNIEnv,
485 _class: JClass,
486 ptr: jlong,
487 encrypted: jboolean,
488) {
489 if !check_not_null(&mut env, ptr, "RiMessageFlags") {
490 return;
491 }
492
493 let flags = unsafe { &mut *(ptr as *mut RiMessageFlags) };
494 flags.encrypted = encrypted != 0;
495}
496
497#[no_mangle]
498pub extern "system" fn Java_com_dunimd_ri_protocol_RiMessageFlags_isRequiresAck0(
499 mut env: JNIEnv,
500 _class: JClass,
501 ptr: jlong,
502) -> jboolean {
503 if !check_not_null(&mut env, ptr, "RiMessageFlags") {
504 return 0;
505 }
506
507 let flags = unsafe { &*(ptr as *const RiMessageFlags) };
508 flags.requires_ack as jboolean
509}
510
511#[no_mangle]
512pub extern "system" fn Java_com_dunimd_ri_protocol_RiMessageFlags_setRequiresAck0(
513 mut env: JNIEnv,
514 _class: JClass,
515 ptr: jlong,
516 requires_ack: jboolean,
517) {
518 if !check_not_null(&mut env, ptr, "RiMessageFlags") {
519 return;
520 }
521
522 let flags = unsafe { &mut *(ptr as *mut RiMessageFlags) };
523 flags.requires_ack = requires_ack != 0;
524}
525
526#[no_mangle]
527pub extern "system" fn Java_com_dunimd_ri_protocol_RiMessageFlags_isPriority0(
528 mut env: JNIEnv,
529 _class: JClass,
530 ptr: jlong,
531) -> jboolean {
532 if !check_not_null(&mut env, ptr, "RiMessageFlags") {
533 return 0;
534 }
535
536 let flags = unsafe { &*(ptr as *const RiMessageFlags) };
537 flags.priority as jboolean
538}
539
540#[no_mangle]
541pub extern "system" fn Java_com_dunimd_ri_protocol_RiMessageFlags_setPriority0(
542 mut env: JNIEnv,
543 _class: JClass,
544 ptr: jlong,
545 priority: jboolean,
546) {
547 if !check_not_null(&mut env, ptr, "RiMessageFlags") {
548 return;
549 }
550
551 let flags = unsafe { &mut *(ptr as *mut RiMessageFlags) };
552 flags.priority = priority != 0;
553}
554
555#[no_mangle]
556pub extern "system" fn Java_com_dunimd_ri_protocol_RiMessageFlags_free0(
557 _env: JNIEnv,
558 _class: JClass,
559 ptr: jlong,
560) {
561 if ptr != 0 {
562 unsafe {
563 let _ = Box::from_raw(ptr as *mut RiMessageFlags);
564 }
565 }
566}
567
568#[no_mangle]
573pub extern "system" fn Java_com_dunimd_ri_protocol_RiConnectionInfo_getConnectionId0<'local>(
574 mut env: JNIEnv<'local>,
575 _class: JClass<'local>,
576 ptr: jlong,
577) -> jstring {
578 if !check_not_null(&mut env, ptr, "RiConnectionInfo") {
579 return std::ptr::null_mut();
580 }
581
582 let info = unsafe { &*(ptr as *const RiConnectionInfo) };
583 env.new_string(&info.connection_id).unwrap().into_raw()
584}
585
586#[no_mangle]
587pub extern "system" fn Java_com_dunimd_ri_protocol_RiConnectionInfo_getDeviceId0<'local>(
588 mut env: JNIEnv<'local>,
589 _class: JClass<'local>,
590 ptr: jlong,
591) -> jstring {
592 if !check_not_null(&mut env, ptr, "RiConnectionInfo") {
593 return std::ptr::null_mut();
594 }
595
596 let info = unsafe { &*(ptr as *const RiConnectionInfo) };
597 env.new_string(&info.device_id).unwrap().into_raw()
598}
599
600#[no_mangle]
601pub extern "system" fn Java_com_dunimd_ri_protocol_RiConnectionInfo_getAddress0<'local>(
602 mut env: JNIEnv<'local>,
603 _class: JClass<'local>,
604 ptr: jlong,
605) -> jstring {
606 if !check_not_null(&mut env, ptr, "RiConnectionInfo") {
607 return std::ptr::null_mut();
608 }
609
610 let info = unsafe { &*(ptr as *const RiConnectionInfo) };
611 env.new_string(&info.address).unwrap().into_raw()
612}
613
614#[no_mangle]
615pub extern "system" fn Java_com_dunimd_ri_protocol_RiConnectionInfo_getProtocolType0(
616 mut env: JNIEnv,
617 _class: JClass,
618 ptr: jlong,
619) -> jint {
620 if !check_not_null(&mut env, ptr, "RiConnectionInfo") {
621 return 0;
622 }
623
624 let info = unsafe { &*(ptr as *const RiConnectionInfo) };
625 info.protocol_type as jint
626}
627
628#[no_mangle]
629pub extern "system" fn Java_com_dunimd_ri_protocol_RiConnectionInfo_getState0(
630 mut env: JNIEnv,
631 _class: JClass,
632 ptr: jlong,
633) -> jint {
634 if !check_not_null(&mut env, ptr, "RiConnectionInfo") {
635 return 0;
636 }
637
638 let info = unsafe { &*(ptr as *const RiConnectionInfo) };
639 info.state as jint
640}
641
642#[no_mangle]
643pub extern "system" fn Java_com_dunimd_ri_protocol_RiConnectionInfo_getSecurityLevel0(
644 mut env: JNIEnv,
645 _class: JClass,
646 ptr: jlong,
647) -> jint {
648 if !check_not_null(&mut env, ptr, "RiConnectionInfo") {
649 return 0;
650 }
651
652 let info = unsafe { &*(ptr as *const RiConnectionInfo) };
653 info.security_level as jint
654}
655
656#[no_mangle]
657pub extern "system" fn Java_com_dunimd_ri_protocol_RiConnectionInfo_getConnectedAt0(
658 mut env: JNIEnv,
659 _class: JClass,
660 ptr: jlong,
661) -> jlong {
662 if !check_not_null(&mut env, ptr, "RiConnectionInfo") {
663 return 0;
664 }
665
666 let info = unsafe { &*(ptr as *const RiConnectionInfo) };
667 info.connected_at as jlong
668}
669
670#[no_mangle]
671pub extern "system" fn Java_com_dunimd_ri_protocol_RiConnectionInfo_getLastActivity0(
672 mut env: JNIEnv,
673 _class: JClass,
674 ptr: jlong,
675) -> jlong {
676 if !check_not_null(&mut env, ptr, "RiConnectionInfo") {
677 return 0;
678 }
679
680 let info = unsafe { &*(ptr as *const RiConnectionInfo) };
681 info.last_activity as jlong
682}
683
684#[no_mangle]
685pub extern "system" fn Java_com_dunimd_ri_protocol_RiConnectionInfo_free0(
686 _env: JNIEnv,
687 _class: JClass,
688 ptr: jlong,
689) {
690 if ptr != 0 {
691 unsafe {
692 let _ = Box::from_raw(ptr as *mut RiConnectionInfo);
693 }
694 }
695}
696
697#[no_mangle]
702pub extern "system" fn Java_com_dunimd_ri_protocol_RiFrameHeader_new0(
703 _env: JNIEnv,
704 _class: JClass,
705) -> jlong {
706 let header = Box::new(RiFrameHeader::default());
707 Box::into_raw(header) as jlong
708}
709
710#[no_mangle]
711pub extern "system" fn Java_com_dunimd_ri_protocol_RiFrameHeader_getVersion0(
712 mut env: JNIEnv,
713 _class: JClass,
714 ptr: jlong,
715) -> jint {
716 if !check_not_null(&mut env, ptr, "RiFrameHeader") {
717 return 0;
718 }
719
720 let header = unsafe { &*(ptr as *const RiFrameHeader) };
721 header.version as jint
722}
723
724#[no_mangle]
725pub extern "system" fn Java_com_dunimd_ri_protocol_RiFrameHeader_setVersion0(
726 mut env: JNIEnv,
727 _class: JClass,
728 ptr: jlong,
729 version: jint,
730) {
731 if !check_not_null(&mut env, ptr, "RiFrameHeader") {
732 return;
733 }
734
735 let header = unsafe { &mut *(ptr as *mut RiFrameHeader) };
736 header.version = version as u8;
737}
738
739#[no_mangle]
740pub extern "system" fn Java_com_dunimd_ri_protocol_RiFrameHeader_getFrameType0(
741 mut env: JNIEnv,
742 _class: JClass,
743 ptr: jlong,
744) -> jint {
745 if !check_not_null(&mut env, ptr, "RiFrameHeader") {
746 return 0;
747 }
748
749 let header = unsafe { &*(ptr as *const RiFrameHeader) };
750 header.frame_type as jint
751}
752
753#[no_mangle]
754pub extern "system" fn Java_com_dunimd_ri_protocol_RiFrameHeader_setFrameType0(
755 mut env: JNIEnv,
756 _class: JClass,
757 ptr: jlong,
758 frame_type: jint,
759) {
760 if !check_not_null(&mut env, ptr, "RiFrameHeader") {
761 return;
762 }
763
764 let header = unsafe { &mut *(ptr as *mut RiFrameHeader) };
765 header.frame_type = match frame_type {
766 0 => RiFrameType::Data,
767 1 => RiFrameType::Control,
768 2 => RiFrameType::Heartbeat,
769 3 => RiFrameType::Ack,
770 _ => RiFrameType::Error,
771 };
772}
773
774#[no_mangle]
775pub extern "system" fn Java_com_dunimd_ri_protocol_RiFrameHeader_getSequenceNumber0(
776 mut env: JNIEnv,
777 _class: JClass,
778 ptr: jlong,
779) -> jlong {
780 if !check_not_null(&mut env, ptr, "RiFrameHeader") {
781 return 0;
782 }
783
784 let header = unsafe { &*(ptr as *const RiFrameHeader) };
785 header.sequence_number as jlong
786}
787
788#[no_mangle]
789pub extern "system" fn Java_com_dunimd_ri_protocol_RiFrameHeader_setSequenceNumber0(
790 mut env: JNIEnv,
791 _class: JClass,
792 ptr: jlong,
793 sequence_number: jlong,
794) {
795 if !check_not_null(&mut env, ptr, "RiFrameHeader") {
796 return;
797 }
798
799 let header = unsafe { &mut *(ptr as *mut RiFrameHeader) };
800 header.sequence_number = sequence_number as u64;
801}
802
803#[no_mangle]
804pub extern "system" fn Java_com_dunimd_ri_protocol_RiFrameHeader_getLength0(
805 mut env: JNIEnv,
806 _class: JClass,
807 ptr: jlong,
808) -> jint {
809 if !check_not_null(&mut env, ptr, "RiFrameHeader") {
810 return 0;
811 }
812
813 let header = unsafe { &*(ptr as *const RiFrameHeader) };
814 header.length as jint
815}
816
817#[no_mangle]
818pub extern "system" fn Java_com_dunimd_ri_protocol_RiFrameHeader_getTimestamp0(
819 mut env: JNIEnv,
820 _class: JClass,
821 ptr: jlong,
822) -> jlong {
823 if !check_not_null(&mut env, ptr, "RiFrameHeader") {
824 return 0;
825 }
826
827 let header = unsafe { &*(ptr as *const RiFrameHeader) };
828 header.timestamp as jlong
829}
830
831#[no_mangle]
832pub extern "system" fn Java_com_dunimd_ri_protocol_RiFrameHeader_getFlags0(
833 mut env: JNIEnv,
834 _class: JClass,
835 ptr: jlong,
836) -> jint {
837 if !check_not_null(&mut env, ptr, "RiFrameHeader") {
838 return 0;
839 }
840
841 let header = unsafe { &*(ptr as *const RiFrameHeader) };
842 header.flags as jint
843}
844
845#[no_mangle]
846pub extern "system" fn Java_com_dunimd_ri_protocol_RiFrameHeader_free0(
847 _env: JNIEnv,
848 _class: JClass,
849 ptr: jlong,
850) {
851 if ptr != 0 {
852 unsafe {
853 let _ = Box::from_raw(ptr as *mut RiFrameHeader);
854 }
855 }
856}
857
858#[no_mangle]
863pub extern "system" fn Java_com_dunimd_ri_protocol_RiFrame_new0(
864 _env: JNIEnv,
865 _class: JClass,
866) -> jlong {
867 let frame = Box::new(RiFrame::default());
868 Box::into_raw(frame) as jlong
869}
870
871#[no_mangle]
872pub extern "system" fn Java_com_dunimd_ri_protocol_RiFrame_getHeader0(
873 mut env: JNIEnv,
874 _class: JClass,
875 ptr: jlong,
876) -> jlong {
877 if !check_not_null(&mut env, ptr, "RiFrame") {
878 return 0;
879 }
880
881 let frame = unsafe { &*(ptr as *const RiFrame) };
882 let header = Box::new(frame.header.clone());
883 Box::into_raw(header) as jlong
884}
885
886#[no_mangle]
887pub extern "system" fn Java_com_dunimd_ri_protocol_RiFrame_getPayload0(
888 mut env: JNIEnv,
889 _class: JClass,
890 ptr: jlong,
891) -> jbyteArray {
892 if !check_not_null(&mut env, ptr, "RiFrame") {
893 return std::ptr::null_mut();
894 }
895
896 let frame = unsafe { &*(ptr as *const RiFrame) };
897 let payload = &frame.payload;
898
899 let array = env.new_byte_array(payload.len() as i32).unwrap();
900 env.set_byte_array_region(&array, 0, unsafe {
901 std::slice::from_raw_parts(payload.as_ptr() as *const i8, payload.len())
902 }).unwrap();
903 array.into_raw()
904}
905
906#[no_mangle]
907pub extern "system" fn Java_com_dunimd_ri_protocol_RiFrame_setPayload0(
908 mut env: JNIEnv,
909 _class: JClass,
910 ptr: jlong,
911 payload: jbyteArray,
912) {
913 if !check_not_null(&mut env, ptr, "RiFrame") {
914 return;
915 }
916
917 let payload_vec: Vec<u8> = if !payload.is_null() {
918 env.convert_byte_array(payload).unwrap_or_default()
919 } else {
920 Vec::new()
921 };
922
923 let frame = unsafe { &mut *(ptr as *mut RiFrame) };
924 frame.payload = payload_vec;
925}
926
927#[no_mangle]
928pub extern "system" fn Java_com_dunimd_ri_protocol_RiFrame_getSourceId0<'local>(
929 mut env: JNIEnv<'local>,
930 _class: JClass<'local>,
931 ptr: jlong,
932) -> jstring {
933 if !check_not_null(&mut env, ptr, "RiFrame") {
934 return std::ptr::null_mut();
935 }
936
937 let frame = unsafe { &*(ptr as *const RiFrame) };
938 env.new_string(&frame.source_id).unwrap().into_raw()
939}
940
941#[no_mangle]
942pub extern "system" fn Java_com_dunimd_ri_protocol_RiFrame_setSourceId0(
943 mut env: JNIEnv,
944 _class: JClass,
945 ptr: jlong,
946 source_id: JString,
947) {
948 if !check_not_null(&mut env, ptr, "RiFrame") {
949 return;
950 }
951
952 let source_id_str: String = env.get_string(&source_id)
953 .expect("Failed to get source id")
954 .into();
955
956 let frame = unsafe { &mut *(ptr as *mut RiFrame) };
957 frame.source_id = source_id_str;
958}
959
960#[no_mangle]
961pub extern "system" fn Java_com_dunimd_ri_protocol_RiFrame_getTargetId0<'local>(
962 mut env: JNIEnv<'local>,
963 _class: JClass<'local>,
964 ptr: jlong,
965) -> jstring {
966 if !check_not_null(&mut env, ptr, "RiFrame") {
967 return std::ptr::null_mut();
968 }
969
970 let frame = unsafe { &*(ptr as *const RiFrame) };
971 env.new_string(&frame.target_id).unwrap().into_raw()
972}
973
974#[no_mangle]
975pub extern "system" fn Java_com_dunimd_ri_protocol_RiFrame_setTargetId0(
976 mut env: JNIEnv,
977 _class: JClass,
978 ptr: jlong,
979 target_id: JString,
980) {
981 if !check_not_null(&mut env, ptr, "RiFrame") {
982 return;
983 }
984
985 let target_id_str: String = env.get_string(&target_id)
986 .expect("Failed to get target id")
987 .into();
988
989 let frame = unsafe { &mut *(ptr as *mut RiFrame) };
990 frame.target_id = target_id_str;
991}
992
993#[no_mangle]
994pub extern "system" fn Java_com_dunimd_ri_protocol_RiFrame_toBytes0(
995 mut env: JNIEnv,
996 _class: JClass,
997 ptr: jlong,
998) -> jbyteArray {
999 if !check_not_null(&mut env, ptr, "RiFrame") {
1000 return std::ptr::null_mut();
1001 }
1002
1003 let frame = unsafe { &*(ptr as *const RiFrame) };
1004 let bytes = frame.to_bytes();
1005
1006 let array = env.new_byte_array(bytes.len() as i32).unwrap();
1007 env.set_byte_array_region(&array, 0, unsafe {
1008 std::slice::from_raw_parts(bytes.as_ptr() as *const i8, bytes.len())
1009 }).unwrap();
1010 array.into_raw()
1011}
1012
1013#[no_mangle]
1014pub extern "system" fn Java_com_dunimd_ri_protocol_RiFrame_free0(
1015 _env: JNIEnv,
1016 _class: JClass,
1017 ptr: jlong,
1018) {
1019 if ptr != 0 {
1020 unsafe {
1021 let _ = Box::from_raw(ptr as *mut RiFrame);
1022 }
1023 }
1024}
1025
1026#[no_mangle]
1031pub extern "system" fn Java_com_dunimd_ri_protocol_RiFrameParser_new0(
1032 _env: JNIEnv,
1033 _class: JClass,
1034) -> jlong {
1035 let parser = Box::new(RiFrameParser::new());
1036 Box::into_raw(parser) as jlong
1037}
1038
1039#[no_mangle]
1040pub extern "system" fn Java_com_dunimd_ri_protocol_RiFrameParser_parse0(
1041 mut env: JNIEnv,
1042 _class: JClass,
1043 ptr: jlong,
1044 data: jbyteArray,
1045) -> jlong {
1046 if !check_not_null(&mut env, ptr, "RiFrameParser") {
1047 return 0;
1048 }
1049
1050 let data_vec: Vec<u8> = if !data.is_null() {
1051 env.convert_byte_array(data).unwrap_or_default()
1052 } else {
1053 Vec::new()
1054 };
1055
1056 let parser = unsafe { &*(ptr as *const RiFrameParser) };
1057 match parser.parse(&data_vec) {
1058 Some(frame) => {
1059 let frame = Box::new(frame);
1060 Box::into_raw(frame) as jlong
1061 }
1062 None => 0,
1063 }
1064}
1065
1066#[no_mangle]
1067pub extern "system" fn Java_com_dunimd_ri_protocol_RiFrameParser_free0(
1068 _env: JNIEnv,
1069 _class: JClass,
1070 ptr: jlong,
1071) {
1072 if ptr != 0 {
1073 unsafe {
1074 let _ = Box::from_raw(ptr as *mut RiFrameParser);
1075 }
1076 }
1077}
1078
1079#[no_mangle]
1084pub extern "system" fn Java_com_dunimd_ri_protocol_RiFrameBuilder_new0(
1085 _env: JNIEnv,
1086 _class: JClass,
1087) -> jlong {
1088 let builder = Box::new(RiFrameBuilder::new());
1089 Box::into_raw(builder) as jlong
1090}
1091
1092#[no_mangle]
1093pub extern "system" fn Java_com_dunimd_ri_protocol_RiFrameBuilder_setFrameType0(
1094 mut env: JNIEnv,
1095 _class: JClass,
1096 ptr: jlong,
1097 frame_type: jint,
1098) {
1099 if !check_not_null(&mut env, ptr, "RiFrameBuilder") {
1100 return;
1101 }
1102
1103 let builder = unsafe { &mut *(ptr as *mut RiFrameBuilder) };
1104 builder.frame_type = match frame_type {
1105 0 => RiFrameType::Data,
1106 1 => RiFrameType::Control,
1107 2 => RiFrameType::Heartbeat,
1108 3 => RiFrameType::Ack,
1109 _ => RiFrameType::Error,
1110 };
1111}
1112
1113#[no_mangle]
1114pub extern "system" fn Java_com_dunimd_ri_protocol_RiFrameBuilder_setSequenceNumber0(
1115 mut env: JNIEnv,
1116 _class: JClass,
1117 ptr: jlong,
1118 sequence_number: jlong,
1119) {
1120 if !check_not_null(&mut env, ptr, "RiFrameBuilder") {
1121 return;
1122 }
1123
1124 let builder = unsafe { &mut *(ptr as *mut RiFrameBuilder) };
1125 builder.sequence_number = sequence_number as u64;
1126}
1127
1128#[no_mangle]
1129pub extern "system" fn Java_com_dunimd_ri_protocol_RiFrameBuilder_setSourceId0(
1130 mut env: JNIEnv,
1131 _class: JClass,
1132 ptr: jlong,
1133 source_id: JString,
1134) {
1135 if !check_not_null(&mut env, ptr, "RiFrameBuilder") {
1136 return;
1137 }
1138
1139 let source_id_str: String = env.get_string(&source_id)
1140 .expect("Failed to get source id")
1141 .into();
1142
1143 let builder = unsafe { &mut *(ptr as *mut RiFrameBuilder) };
1144 builder.source_id = source_id_str;
1145}
1146
1147#[no_mangle]
1148pub extern "system" fn Java_com_dunimd_ri_protocol_RiFrameBuilder_setTargetId0(
1149 mut env: JNIEnv,
1150 _class: JClass,
1151 ptr: jlong,
1152 target_id: JString,
1153) {
1154 if !check_not_null(&mut env, ptr, "RiFrameBuilder") {
1155 return;
1156 }
1157
1158 let target_id_str: String = env.get_string(&target_id)
1159 .expect("Failed to get target id")
1160 .into();
1161
1162 let builder = unsafe { &mut *(ptr as *mut RiFrameBuilder) };
1163 builder.target_id = target_id_str;
1164}
1165
1166#[no_mangle]
1167pub extern "system" fn Java_com_dunimd_ri_protocol_RiFrameBuilder_buildDataFrame0(
1168 mut env: JNIEnv,
1169 _class: JClass,
1170 ptr: jlong,
1171 payload: jbyteArray,
1172) -> jlong {
1173 if !check_not_null(&mut env, ptr, "RiFrameBuilder") {
1174 return 0;
1175 }
1176
1177 let payload_vec: Vec<u8> = if !payload.is_null() {
1178 env.convert_byte_array(payload).unwrap_or_default()
1179 } else {
1180 Vec::new()
1181 };
1182
1183 let builder = unsafe { &*(ptr as *const RiFrameBuilder) };
1184 let frame = Box::new(builder.build_data_frame(payload_vec));
1185 Box::into_raw(frame) as jlong
1186}
1187
1188#[no_mangle]
1189pub extern "system" fn Java_com_dunimd_ri_protocol_RiFrameBuilder_buildHeartbeatFrame0(
1190 mut env: JNIEnv,
1191 _class: JClass,
1192 ptr: jlong,
1193) -> jlong {
1194 if !check_not_null(&mut env, ptr, "RiFrameBuilder") {
1195 return 0;
1196 }
1197
1198 let builder = unsafe { &*(ptr as *const RiFrameBuilder) };
1199 let frame = Box::new(builder.build_heartbeat_frame());
1200 Box::into_raw(frame) as jlong
1201}
1202
1203#[no_mangle]
1204pub extern "system" fn Java_com_dunimd_ri_protocol_RiFrameBuilder_buildAckFrame0(
1205 mut env: JNIEnv,
1206 _class: JClass,
1207 ptr: jlong,
1208 sequence_number: jlong,
1209) -> jlong {
1210 if !check_not_null(&mut env, ptr, "RiFrameBuilder") {
1211 return 0;
1212 }
1213
1214 let builder = unsafe { &*(ptr as *const RiFrameBuilder) };
1215 let frame = Box::new(builder.build_ack_frame(sequence_number as u64));
1216 Box::into_raw(frame) as jlong
1217}
1218
1219#[no_mangle]
1220pub extern "system" fn Java_com_dunimd_ri_protocol_RiFrameBuilder_free0(
1221 _env: JNIEnv,
1222 _class: JClass,
1223 ptr: jlong,
1224) {
1225 if ptr != 0 {
1226 unsafe {
1227 let _ = Box::from_raw(ptr as *mut RiFrameBuilder);
1228 }
1229 }
1230}