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 match env.new_string(&info.connection_id) {
584 Ok(s) => s.into_raw(),
585 Err(_) => std::ptr::null_mut(),
586 }
587}
588
589#[no_mangle]
590pub extern "system" fn Java_com_dunimd_ri_protocol_RiConnectionInfo_getDeviceId0<'local>(
591 mut env: JNIEnv<'local>,
592 _class: JClass<'local>,
593 ptr: jlong,
594) -> jstring {
595 if !check_not_null(&mut env, ptr, "RiConnectionInfo") {
596 return std::ptr::null_mut();
597 }
598
599 let info = unsafe { &*(ptr as *const RiConnectionInfo) };
600 match env.new_string(&info.device_id) {
601 Ok(s) => s.into_raw(),
602 Err(_) => std::ptr::null_mut(),
603 }
604}
605
606#[no_mangle]
607pub extern "system" fn Java_com_dunimd_ri_protocol_RiConnectionInfo_getAddress0<'local>(
608 mut env: JNIEnv<'local>,
609 _class: JClass<'local>,
610 ptr: jlong,
611) -> jstring {
612 if !check_not_null(&mut env, ptr, "RiConnectionInfo") {
613 return std::ptr::null_mut();
614 }
615
616 let info = unsafe { &*(ptr as *const RiConnectionInfo) };
617 match env.new_string(&info.address) {
618 Ok(s) => s.into_raw(),
619 Err(_) => std::ptr::null_mut(),
620 }
621}
622
623#[no_mangle]
624pub extern "system" fn Java_com_dunimd_ri_protocol_RiConnectionInfo_getProtocolType0(
625 mut env: JNIEnv,
626 _class: JClass,
627 ptr: jlong,
628) -> jint {
629 if !check_not_null(&mut env, ptr, "RiConnectionInfo") {
630 return 0;
631 }
632
633 let info = unsafe { &*(ptr as *const RiConnectionInfo) };
634 info.protocol_type as jint
635}
636
637#[no_mangle]
638pub extern "system" fn Java_com_dunimd_ri_protocol_RiConnectionInfo_getState0(
639 mut env: JNIEnv,
640 _class: JClass,
641 ptr: jlong,
642) -> jint {
643 if !check_not_null(&mut env, ptr, "RiConnectionInfo") {
644 return 0;
645 }
646
647 let info = unsafe { &*(ptr as *const RiConnectionInfo) };
648 info.state as jint
649}
650
651#[no_mangle]
652pub extern "system" fn Java_com_dunimd_ri_protocol_RiConnectionInfo_getSecurityLevel0(
653 mut env: JNIEnv,
654 _class: JClass,
655 ptr: jlong,
656) -> jint {
657 if !check_not_null(&mut env, ptr, "RiConnectionInfo") {
658 return 0;
659 }
660
661 let info = unsafe { &*(ptr as *const RiConnectionInfo) };
662 info.security_level as jint
663}
664
665#[no_mangle]
666pub extern "system" fn Java_com_dunimd_ri_protocol_RiConnectionInfo_getConnectedAt0(
667 mut env: JNIEnv,
668 _class: JClass,
669 ptr: jlong,
670) -> jlong {
671 if !check_not_null(&mut env, ptr, "RiConnectionInfo") {
672 return 0;
673 }
674
675 let info = unsafe { &*(ptr as *const RiConnectionInfo) };
676 info.connected_at as jlong
677}
678
679#[no_mangle]
680pub extern "system" fn Java_com_dunimd_ri_protocol_RiConnectionInfo_getLastActivity0(
681 mut env: JNIEnv,
682 _class: JClass,
683 ptr: jlong,
684) -> jlong {
685 if !check_not_null(&mut env, ptr, "RiConnectionInfo") {
686 return 0;
687 }
688
689 let info = unsafe { &*(ptr as *const RiConnectionInfo) };
690 info.last_activity as jlong
691}
692
693#[no_mangle]
694pub extern "system" fn Java_com_dunimd_ri_protocol_RiConnectionInfo_free0(
695 _env: JNIEnv,
696 _class: JClass,
697 ptr: jlong,
698) {
699 if ptr != 0 {
700 unsafe {
701 let _ = Box::from_raw(ptr as *mut RiConnectionInfo);
702 }
703 }
704}
705
706#[no_mangle]
711pub extern "system" fn Java_com_dunimd_ri_protocol_RiFrameHeader_new0(
712 _env: JNIEnv,
713 _class: JClass,
714) -> jlong {
715 let header = Box::new(RiFrameHeader::default());
716 Box::into_raw(header) as jlong
717}
718
719#[no_mangle]
720pub extern "system" fn Java_com_dunimd_ri_protocol_RiFrameHeader_getVersion0(
721 mut env: JNIEnv,
722 _class: JClass,
723 ptr: jlong,
724) -> jint {
725 if !check_not_null(&mut env, ptr, "RiFrameHeader") {
726 return 0;
727 }
728
729 let header = unsafe { &*(ptr as *const RiFrameHeader) };
730 header.version as jint
731}
732
733#[no_mangle]
734pub extern "system" fn Java_com_dunimd_ri_protocol_RiFrameHeader_setVersion0(
735 mut env: JNIEnv,
736 _class: JClass,
737 ptr: jlong,
738 version: jint,
739) {
740 if !check_not_null(&mut env, ptr, "RiFrameHeader") {
741 return;
742 }
743
744 let header = unsafe { &mut *(ptr as *mut RiFrameHeader) };
745 header.version = version as u8;
746}
747
748#[no_mangle]
749pub extern "system" fn Java_com_dunimd_ri_protocol_RiFrameHeader_getFrameType0(
750 mut env: JNIEnv,
751 _class: JClass,
752 ptr: jlong,
753) -> jint {
754 if !check_not_null(&mut env, ptr, "RiFrameHeader") {
755 return 0;
756 }
757
758 let header = unsafe { &*(ptr as *const RiFrameHeader) };
759 header.frame_type as jint
760}
761
762#[no_mangle]
763pub extern "system" fn Java_com_dunimd_ri_protocol_RiFrameHeader_setFrameType0(
764 mut env: JNIEnv,
765 _class: JClass,
766 ptr: jlong,
767 frame_type: jint,
768) {
769 if !check_not_null(&mut env, ptr, "RiFrameHeader") {
770 return;
771 }
772
773 let header = unsafe { &mut *(ptr as *mut RiFrameHeader) };
774 header.frame_type = match frame_type {
775 0 => RiFrameType::Data,
776 1 => RiFrameType::Control,
777 2 => RiFrameType::Heartbeat,
778 3 => RiFrameType::Ack,
779 _ => RiFrameType::Error,
780 };
781}
782
783#[no_mangle]
784pub extern "system" fn Java_com_dunimd_ri_protocol_RiFrameHeader_getSequenceNumber0(
785 mut env: JNIEnv,
786 _class: JClass,
787 ptr: jlong,
788) -> jlong {
789 if !check_not_null(&mut env, ptr, "RiFrameHeader") {
790 return 0;
791 }
792
793 let header = unsafe { &*(ptr as *const RiFrameHeader) };
794 header.sequence_number as jlong
795}
796
797#[no_mangle]
798pub extern "system" fn Java_com_dunimd_ri_protocol_RiFrameHeader_setSequenceNumber0(
799 mut env: JNIEnv,
800 _class: JClass,
801 ptr: jlong,
802 sequence_number: jlong,
803) {
804 if !check_not_null(&mut env, ptr, "RiFrameHeader") {
805 return;
806 }
807
808 let header = unsafe { &mut *(ptr as *mut RiFrameHeader) };
809 header.sequence_number = sequence_number as u64;
810}
811
812#[no_mangle]
813pub extern "system" fn Java_com_dunimd_ri_protocol_RiFrameHeader_getLength0(
814 mut env: JNIEnv,
815 _class: JClass,
816 ptr: jlong,
817) -> jint {
818 if !check_not_null(&mut env, ptr, "RiFrameHeader") {
819 return 0;
820 }
821
822 let header = unsafe { &*(ptr as *const RiFrameHeader) };
823 header.length as jint
824}
825
826#[no_mangle]
827pub extern "system" fn Java_com_dunimd_ri_protocol_RiFrameHeader_getTimestamp0(
828 mut env: JNIEnv,
829 _class: JClass,
830 ptr: jlong,
831) -> jlong {
832 if !check_not_null(&mut env, ptr, "RiFrameHeader") {
833 return 0;
834 }
835
836 let header = unsafe { &*(ptr as *const RiFrameHeader) };
837 header.timestamp as jlong
838}
839
840#[no_mangle]
841pub extern "system" fn Java_com_dunimd_ri_protocol_RiFrameHeader_getFlags0(
842 mut env: JNIEnv,
843 _class: JClass,
844 ptr: jlong,
845) -> jint {
846 if !check_not_null(&mut env, ptr, "RiFrameHeader") {
847 return 0;
848 }
849
850 let header = unsafe { &*(ptr as *const RiFrameHeader) };
851 header.flags as jint
852}
853
854#[no_mangle]
855pub extern "system" fn Java_com_dunimd_ri_protocol_RiFrameHeader_free0(
856 _env: JNIEnv,
857 _class: JClass,
858 ptr: jlong,
859) {
860 if ptr != 0 {
861 unsafe {
862 let _ = Box::from_raw(ptr as *mut RiFrameHeader);
863 }
864 }
865}
866
867#[no_mangle]
872pub extern "system" fn Java_com_dunimd_ri_protocol_RiFrame_new0(
873 _env: JNIEnv,
874 _class: JClass,
875) -> jlong {
876 let frame = Box::new(RiFrame::default());
877 Box::into_raw(frame) as jlong
878}
879
880#[no_mangle]
881pub extern "system" fn Java_com_dunimd_ri_protocol_RiFrame_getHeader0(
882 mut env: JNIEnv,
883 _class: JClass,
884 ptr: jlong,
885) -> jlong {
886 if !check_not_null(&mut env, ptr, "RiFrame") {
887 return 0;
888 }
889
890 let frame = unsafe { &*(ptr as *const RiFrame) };
891 let header = Box::new(frame.header.clone());
892 Box::into_raw(header) as jlong
893}
894
895#[no_mangle]
896pub extern "system" fn Java_com_dunimd_ri_protocol_RiFrame_getPayload0(
897 mut env: JNIEnv,
898 _class: JClass,
899 ptr: jlong,
900) -> jbyteArray {
901 if !check_not_null(&mut env, ptr, "RiFrame") {
902 return std::ptr::null_mut();
903 }
904
905 let frame = unsafe { &*(ptr as *const RiFrame) };
906 let payload = &frame.payload;
907
908 let array = match env.new_byte_array(payload.len() as i32) {
909 Ok(a) => a,
910 Err(_) => return std::ptr::null_mut(),
911 };
912 let _ = env.set_byte_array_region(&array, 0, unsafe {
913 std::slice::from_raw_parts(payload.as_ptr() as *const i8, payload.len())
914 });
915 array.into_raw()
916}
917
918#[no_mangle]
919pub extern "system" fn Java_com_dunimd_ri_protocol_RiFrame_setPayload0(
920 mut env: JNIEnv,
921 _class: JClass,
922 ptr: jlong,
923 payload: jbyteArray,
924) {
925 if !check_not_null(&mut env, ptr, "RiFrame") {
926 return;
927 }
928
929 let payload_vec: Vec<u8> = if !payload.is_null() {
930 env.convert_byte_array(payload).unwrap_or_default()
931 } else {
932 Vec::new()
933 };
934
935 let frame = unsafe { &mut *(ptr as *mut RiFrame) };
936 frame.payload = payload_vec;
937}
938
939#[no_mangle]
940pub extern "system" fn Java_com_dunimd_ri_protocol_RiFrame_getSourceId0<'local>(
941 mut env: JNIEnv<'local>,
942 _class: JClass<'local>,
943 ptr: jlong,
944) -> jstring {
945 if !check_not_null(&mut env, ptr, "RiFrame") {
946 return std::ptr::null_mut();
947 }
948
949 let frame = unsafe { &*(ptr as *const RiFrame) };
950 match env.new_string(&frame.source_id) {
951 Ok(s) => s.into_raw(),
952 Err(_) => std::ptr::null_mut(),
953 }
954}
955
956#[no_mangle]
957pub extern "system" fn Java_com_dunimd_ri_protocol_RiFrame_setSourceId0(
958 mut env: JNIEnv,
959 _class: JClass,
960 ptr: jlong,
961 source_id: JString,
962) {
963 if !check_not_null(&mut env, ptr, "RiFrame") {
964 return;
965 }
966
967 let source_id_str: String = match env.get_string(&source_id) {
968 Ok(s) => s.into(),
969 Err(_) => {
970 crate::java::exception::throw_ri_error(&mut env, "Invalid source_id");
971 return;
972 }
973 };
974
975 let frame = unsafe { &mut *(ptr as *mut RiFrame) };
976 frame.source_id = source_id_str;
977}
978
979#[no_mangle]
980pub extern "system" fn Java_com_dunimd_ri_protocol_RiFrame_getTargetId0<'local>(
981 mut env: JNIEnv<'local>,
982 _class: JClass<'local>,
983 ptr: jlong,
984) -> jstring {
985 if !check_not_null(&mut env, ptr, "RiFrame") {
986 return std::ptr::null_mut();
987 }
988
989 let frame = unsafe { &*(ptr as *const RiFrame) };
990 match env.new_string(&frame.target_id) {
991 Ok(s) => s.into_raw(),
992 Err(_) => std::ptr::null_mut(),
993 }
994}
995
996#[no_mangle]
997pub extern "system" fn Java_com_dunimd_ri_protocol_RiFrame_setTargetId0(
998 mut env: JNIEnv,
999 _class: JClass,
1000 ptr: jlong,
1001 target_id: JString,
1002) {
1003 if !check_not_null(&mut env, ptr, "RiFrame") {
1004 return;
1005 }
1006
1007 let target_id_str: String = match env.get_string(&target_id) {
1008 Ok(s) => s.into(),
1009 Err(_) => {
1010 crate::java::exception::throw_ri_error(&mut env, "Invalid target_id");
1011 return;
1012 }
1013 };
1014
1015 let frame = unsafe { &mut *(ptr as *mut RiFrame) };
1016 frame.target_id = target_id_str;
1017}
1018
1019#[no_mangle]
1020pub extern "system" fn Java_com_dunimd_ri_protocol_RiFrame_toBytes0(
1021 mut env: JNIEnv,
1022 _class: JClass,
1023 ptr: jlong,
1024) -> jbyteArray {
1025 if !check_not_null(&mut env, ptr, "RiFrame") {
1026 return std::ptr::null_mut();
1027 }
1028
1029 let frame = unsafe { &*(ptr as *const RiFrame) };
1030 let bytes = frame.to_bytes();
1031
1032 let array = match env.new_byte_array(bytes.len() as i32) {
1033 Ok(a) => a,
1034 Err(_) => return std::ptr::null_mut(),
1035 };
1036 let _ = env.set_byte_array_region(&array, 0, unsafe {
1037 std::slice::from_raw_parts(bytes.as_ptr() as *const i8, bytes.len())
1038 });
1039 array.into_raw()
1040}
1041
1042#[no_mangle]
1043pub extern "system" fn Java_com_dunimd_ri_protocol_RiFrame_free0(
1044 _env: JNIEnv,
1045 _class: JClass,
1046 ptr: jlong,
1047) {
1048 if ptr != 0 {
1049 unsafe {
1050 let _ = Box::from_raw(ptr as *mut RiFrame);
1051 }
1052 }
1053}
1054
1055#[no_mangle]
1060pub extern "system" fn Java_com_dunimd_ri_protocol_RiFrameParser_new0(
1061 _env: JNIEnv,
1062 _class: JClass,
1063) -> jlong {
1064 let parser = Box::new(RiFrameParser::new());
1065 Box::into_raw(parser) as jlong
1066}
1067
1068#[no_mangle]
1069pub extern "system" fn Java_com_dunimd_ri_protocol_RiFrameParser_parse0(
1070 mut env: JNIEnv,
1071 _class: JClass,
1072 ptr: jlong,
1073 data: jbyteArray,
1074) -> jlong {
1075 if !check_not_null(&mut env, ptr, "RiFrameParser") {
1076 return 0;
1077 }
1078
1079 let data_vec: Vec<u8> = if !data.is_null() {
1080 env.convert_byte_array(data).unwrap_or_default()
1081 } else {
1082 Vec::new()
1083 };
1084
1085 let parser = unsafe { &*(ptr as *const RiFrameParser) };
1086 match parser.parse(&data_vec) {
1087 Some(frame) => {
1088 let frame = Box::new(frame);
1089 Box::into_raw(frame) as jlong
1090 }
1091 None => 0,
1092 }
1093}
1094
1095#[no_mangle]
1096pub extern "system" fn Java_com_dunimd_ri_protocol_RiFrameParser_free0(
1097 _env: JNIEnv,
1098 _class: JClass,
1099 ptr: jlong,
1100) {
1101 if ptr != 0 {
1102 unsafe {
1103 let _ = Box::from_raw(ptr as *mut RiFrameParser);
1104 }
1105 }
1106}
1107
1108#[no_mangle]
1113pub extern "system" fn Java_com_dunimd_ri_protocol_RiFrameBuilder_new0(
1114 _env: JNIEnv,
1115 _class: JClass,
1116) -> jlong {
1117 let builder = Box::new(RiFrameBuilder::new());
1118 Box::into_raw(builder) as jlong
1119}
1120
1121#[no_mangle]
1122pub extern "system" fn Java_com_dunimd_ri_protocol_RiFrameBuilder_setFrameType0(
1123 mut env: JNIEnv,
1124 _class: JClass,
1125 ptr: jlong,
1126 frame_type: jint,
1127) {
1128 if !check_not_null(&mut env, ptr, "RiFrameBuilder") {
1129 return;
1130 }
1131
1132 let builder = unsafe { &mut *(ptr as *mut RiFrameBuilder) };
1133 builder.frame_type = match frame_type {
1134 0 => RiFrameType::Data,
1135 1 => RiFrameType::Control,
1136 2 => RiFrameType::Heartbeat,
1137 3 => RiFrameType::Ack,
1138 _ => RiFrameType::Error,
1139 };
1140}
1141
1142#[no_mangle]
1143pub extern "system" fn Java_com_dunimd_ri_protocol_RiFrameBuilder_setSequenceNumber0(
1144 mut env: JNIEnv,
1145 _class: JClass,
1146 ptr: jlong,
1147 sequence_number: jlong,
1148) {
1149 if !check_not_null(&mut env, ptr, "RiFrameBuilder") {
1150 return;
1151 }
1152
1153 let builder = unsafe { &mut *(ptr as *mut RiFrameBuilder) };
1154 builder.sequence_number = sequence_number as u64;
1155}
1156
1157#[no_mangle]
1158pub extern "system" fn Java_com_dunimd_ri_protocol_RiFrameBuilder_setSourceId0(
1159 mut env: JNIEnv,
1160 _class: JClass,
1161 ptr: jlong,
1162 source_id: JString,
1163) {
1164 if !check_not_null(&mut env, ptr, "RiFrameBuilder") {
1165 return;
1166 }
1167
1168 let source_id_str: String = match env.get_string(&source_id) {
1169 Ok(s) => s.into(),
1170 Err(_) => {
1171 crate::java::exception::throw_ri_error(&mut env, "Invalid source_id");
1172 return;
1173 }
1174 };
1175
1176 let builder = unsafe { &mut *(ptr as *mut RiFrameBuilder) };
1177 builder.source_id = source_id_str;
1178}
1179
1180#[no_mangle]
1181pub extern "system" fn Java_com_dunimd_ri_protocol_RiFrameBuilder_setTargetId0(
1182 mut env: JNIEnv,
1183 _class: JClass,
1184 ptr: jlong,
1185 target_id: JString,
1186) {
1187 if !check_not_null(&mut env, ptr, "RiFrameBuilder") {
1188 return;
1189 }
1190
1191 let target_id_str: String = match env.get_string(&target_id) {
1192 Ok(s) => s.into(),
1193 Err(_) => {
1194 crate::java::exception::throw_ri_error(&mut env, "Invalid target_id");
1195 return;
1196 }
1197 };
1198
1199 let builder = unsafe { &mut *(ptr as *mut RiFrameBuilder) };
1200 builder.target_id = target_id_str;
1201}
1202
1203#[no_mangle]
1204pub extern "system" fn Java_com_dunimd_ri_protocol_RiFrameBuilder_buildDataFrame0(
1205 mut env: JNIEnv,
1206 _class: JClass,
1207 ptr: jlong,
1208 payload: jbyteArray,
1209) -> jlong {
1210 if !check_not_null(&mut env, ptr, "RiFrameBuilder") {
1211 return 0;
1212 }
1213
1214 let payload_vec: Vec<u8> = if !payload.is_null() {
1215 env.convert_byte_array(payload).unwrap_or_default()
1216 } else {
1217 Vec::new()
1218 };
1219
1220 let builder = unsafe { &*(ptr as *const RiFrameBuilder) };
1221 let frame = Box::new(builder.build_data_frame(payload_vec));
1222 Box::into_raw(frame) as jlong
1223}
1224
1225#[no_mangle]
1226pub extern "system" fn Java_com_dunimd_ri_protocol_RiFrameBuilder_buildHeartbeatFrame0(
1227 mut env: JNIEnv,
1228 _class: JClass,
1229 ptr: jlong,
1230) -> jlong {
1231 if !check_not_null(&mut env, ptr, "RiFrameBuilder") {
1232 return 0;
1233 }
1234
1235 let builder = unsafe { &*(ptr as *const RiFrameBuilder) };
1236 let frame = Box::new(builder.build_heartbeat_frame());
1237 Box::into_raw(frame) as jlong
1238}
1239
1240#[no_mangle]
1241pub extern "system" fn Java_com_dunimd_ri_protocol_RiFrameBuilder_buildAckFrame0(
1242 mut env: JNIEnv,
1243 _class: JClass,
1244 ptr: jlong,
1245 sequence_number: jlong,
1246) -> jlong {
1247 if !check_not_null(&mut env, ptr, "RiFrameBuilder") {
1248 return 0;
1249 }
1250
1251 let builder = unsafe { &*(ptr as *const RiFrameBuilder) };
1252 let frame = Box::new(builder.build_ack_frame(sequence_number as u64));
1253 Box::into_raw(frame) as jlong
1254}
1255
1256#[no_mangle]
1257pub extern "system" fn Java_com_dunimd_ri_protocol_RiFrameBuilder_free0(
1258 _env: JNIEnv,
1259 _class: JClass,
1260 ptr: jlong,
1261) {
1262 if ptr != 0 {
1263 unsafe {
1264 let _ = Box::from_raw(ptr as *mut RiFrameBuilder);
1265 }
1266 }
1267}