ci::BufferRef UrlLoader::loadUrl( const std::string& url ) { ci::BufferRef result; mUrl = url; if( JniHelper::Get()->AttachCurrentThread() ) { jstring jstrUrl = JniHelper::Get()->NewStringUTF( mUrl ); jbyteArray jBytes = (jbyteArray)JniHelper::Get()->CallObjectMethod( mJavaObject, UrlLoader::sJavaMethodLoadUrl, jstrUrl ); if( nullptr == jBytes ) { int resCode = getResponseCode(); std::string resMsg = getResponseMsg(); std::string excMsg = getExceptionMsg(); std::stringstream ss; ss << "UrlLoader.loadUrl returned null (Response Code: " << resCode << ", Response Msg: " << resMsg << ", Exception Msg: " << excMsg << ")"; throw std::runtime_error( ss.str() ); } size_t dataLength = JniHelper::Get()->GetArrayLength( jBytes ); jbyte* dataPtr = (jbyte*)JniHelper::Get()->GetByteArrayElements( jBytes, NULL ); if( nullptr == dataPtr ) { int resCode = getResponseCode(); std::string resMsg = getResponseMsg(); std::string excMsg = getExceptionMsg(); std::stringstream ss; ss << "failed to get byte array (Response Code: " << resCode << ", Response Msg: " << resMsg << ", Exception Msg: " << excMsg << ")"; throw std::runtime_error( ss.str() ); } if( dataLength > 0 ) { result = ci::Buffer::create( dataLength ); memcpy( (void *)result->getData(), (const void *)dataPtr, dataLength ); } JniHelper::Get()->ReleaseByteArrayElements( jBytes, dataPtr, 0 ); JniHelper::Get()->DeleteLocalRef( jstrUrl ); } return result; }
void dispatchUpdateAndDisplay(DISPATCH_STATUS_TYPE newStatus, DISPATCH_PTR dispatch) { const char *Data; CONST_FORMAT_PTR Format; BOOLEAN ignored; BOOLEAN freeStruct = FALSE, keepStruct = FALSE; if (x_ipc_LogMessagesP()) { ignored = x_ipc_LogIgnoreP() && Ignore_Logging_Message(dispatch->msg); if (!ignored || !LogIgnoreAllP()) { if (ignored) Start_Ignore_Logging(); dispatchUpdateAndDisplay1(newStatus, dispatch); if ((newStatus == AttendingDispatch || dispatch->msg_class == ReplyClass) && x_ipc_LogDataP()) { if (dispatch->msg) { Data = NULL; if (newStatus == HandledDispatch) { MSG_PTR replyMsg; #ifdef NMP_IPC if (ONE_WAY_MSG(dispatch->msg) && dispatch->resData->classData) { replyMsg = getResponseMsg(dispatch->resData); Format = replyMsg->msgData->msgFormat; } else #endif { replyMsg = dispatch->msg; Format = dispatch->msg->msgData->resFormat; } parseMsgFormats(replyMsg); /* In case not yet parsed */ if (Format != NULL) { if ( (dispatch->resData) && (dispatch->resData->dataStruct)) { /* This is a central message, since the data is already here. */ freeStruct = FALSE; keepStruct = TRUE; Data = dispatch->resData->dataStruct; } else { Data = dispatchDecodeData(Format, dispatch->resData, &freeStruct); } #ifdef NMP_IPC if (Data && ONE_WAY_MSG(replyMsg) && replyMsg->msgData->resFormat) { log_IPC_Data(replyMsg, Data, dispatch->resData, freeStruct); } else #endif { Log_Data(Format, Data, 4); if (Data && freeStruct && (Data != dispatch->resData->msgData)) { /* free decoded data, including all its subelements */ x_ipc_freeDataStructure(Format, (void *)Data); Data = NULL; } else if ((dispatch->resData) && !keepStruct) { dispatch->resData->dataStruct = NULL; } } } } else { Format = dispatch->msg->msgData->msgFormat; if (Format != NULL) { Data = dispatchDecodeData(Format, dispatch->msgData, &freeStruct); #ifdef NMP_IPC if (Data && ONE_WAY_MSG(dispatch->msg) && dispatch->msg->msgData->resFormat) { log_IPC_Data(dispatch->msg, Data, dispatch->msgData, freeStruct); } else #endif { Log_Data(Format, Data, 4); if (Data && freeStruct && (Data != dispatch->msgData->msgData)){ /* free decoded data, including all its subelements */ x_ipc_freeDataStructure(Format, (void *)Data); } else if (dispatch->msgData) { dispatch->msgData->dataStruct = NULL; } Data = NULL; } } } } } if (ignored) End_Ignore_Logging(); } } DISPATCH_SET_STATUS(newStatus, dispatch); }