get jbyteArray from a pointer uint8_t*

1 week ago 8
ARTICLE AD BOX

The function getLayerPayload() in PcapPlusPlus returns a uint8_t* pointer, and I just want to make a jbyteArray out of this data to give back to Java.

I tried the following code:

while (reader->getNextPacket(rawPacket)) { pcpp::Packet parsedPacket(&rawPacket); auto * sslLayer = parsedPacket.getLayerOfType<pcpp::SSLLayer>(); if (sslLayer != nullptr) { if (sslLayer->getLayerPayloadSize() != 0) { std::cout << std::endl << "SSL payload size: " << sslLayer->getLayerPayloadSize() << std::endl << "SSL payload: " << sslLayer->getLayerPayload() << std::endl; jbyteArray payload = getJavaByteArray(env, sslLayer->getLayerPayload(), sslLayer->getLayerPayloadSize()); return payload; } } }

This is the getJavaByteArray() function:

jbyteArray getJavaByteArray(JNIEnv* env, const uint8_t* payload, size_t len) { jbyteArray array = env->NewByteArray(static_cast<jsize>(len)); env->SetByteArrayRegion(array, 0, static_cast<jsize>(len), reinterpret_cast<const jbyte *>(payload)); return array; }

Is this the best way to achieve this? For me, I always get a crash at some point.

Read Entire Article