diff --git a/src/main/java/com/zoffcc/applications/trifa/HelperGroup.java b/src/main/java/com/zoffcc/applications/trifa/HelperGroup.java index 5dd8a119..f9a0ce59 100644 --- a/src/main/java/com/zoffcc/applications/trifa/HelperGroup.java +++ b/src/main/java/com/zoffcc/applications/trifa/HelperGroup.java @@ -1103,7 +1103,7 @@ static void handle_incoming_sync_group_message(final long group_number, final lo final String syncer_pubkey = tox_group_peer_get_public_key(group_number, syncer_peer_id); ByteBuffer hash_bytes = ByteBuffer.allocateDirect(TOX_GROUP_PEER_PUBLIC_KEY_SIZE); - hash_bytes.put(data, 8 + 4, 32); + hash_bytes.put(data, 6 + 1 + 1 + 4, 32); ByteBufferCompat hash_bytes_compat = new ByteBufferCompat(hash_bytes); final String original_sender_peerpubkey = bytesToHexJava (hash_bytes_compat.array(),hash_bytes_compat.arrayOffset(),hash_bytes_compat.limit()).toUpperCase(); @@ -1123,12 +1123,12 @@ static void handle_incoming_sync_group_message(final long group_number, final lo timestamp_byte_buffer.put((byte)0x0); timestamp_byte_buffer.put((byte)0x0); timestamp_byte_buffer.put((byte)0x0); - timestamp_byte_buffer.put(data, 8+4+32, 4); + timestamp_byte_buffer.put(data, 6 + 1 + 1 + 4 + 32, 4); timestamp_byte_buffer.order(java.nio.ByteOrder.BIG_ENDIAN); timestamp_byte_buffer.rewind(); long timestamp = timestamp_byte_buffer.getLong(); - //Log.i(TAG,"handle_incoming_sync_group_message:got_ts_bytes:" + - // HelperGeneric.bytesToHex(data, 8+4+32, 4)); + // Log.i(TAG,"handle_incoming_sync_group_message:got_ts_bytes:" + + // HelperGeneric.bytesToHex(data, 6 + 1 + 1 + 4 + 32, 4)); timestamp_byte_buffer.rewind(); //Log.i(TAG,"handle_incoming_sync_group_message:got_ts_bytes:bytebuffer:" + // HelperGeneric.bytesToHex(timestamp_byte_buffer.array(), @@ -1140,13 +1140,13 @@ static void handle_incoming_sync_group_message(final long group_number, final lo if (timestamp > ((System.currentTimeMillis() / 1000) + (60 * 5))) { long delta_t = timestamp - (System.currentTimeMillis() / 1000); - // Log.i(TAG, "handle_incoming_sync_group_message:delta t=" + delta_t + " do NOT sync messages from the future"); + Log.i(TAG, "handle_incoming_sync_group_message:delta t=" + delta_t + " do NOT sync messages from the future"); return; } else if (timestamp < ((System.currentTimeMillis() / 1000) - (60 * 200))) { long delta_t = (System.currentTimeMillis() / 1000) - timestamp; - // Log.i(TAG, "handle_incoming_sync_group_message:delta t=" + (-delta_t) + " do NOT sync messages that are too old"); + Log.i(TAG, "handle_incoming_sync_group_message:delta t=" + (-delta_t) + " do NOT sync messages that are too old"); return; } @@ -1154,15 +1154,20 @@ else if (timestamp < ((System.currentTimeMillis() / 1000) - (60 * 200))) // // ByteBuffer hash_msg_id_bytes = ByteBuffer.allocateDirect(4); - hash_msg_id_bytes.put(data, 8, 4); + hash_msg_id_bytes.put(data, 6 + 1 + 1, 4); ByteBufferCompat hash_msg_id_bytes_compat = new ByteBufferCompat(hash_msg_id_bytes); final String message_id_tox = bytesToHexJava(hash_msg_id_bytes_compat.array(),hash_msg_id_bytes_compat.arrayOffset(),hash_msg_id_bytes_compat.limit()).toLowerCase(); // Log.i(TAG, "handle_incoming_sync_group_message:message_id_tox hex=" + message_id_tox); // // ByteBuffer name_buffer = ByteBuffer.allocateDirect(TOX_NGC_HISTORY_SYNC_MAX_PEERNAME_BYTES); - name_buffer.put(data, 8 + 4 + 32 + 4, TOX_NGC_HISTORY_SYNC_MAX_PEERNAME_BYTES); + name_buffer.put(data, 6 + 1 + 1 + 4 + 32 + 4, TOX_NGC_HISTORY_SYNC_MAX_PEERNAME_BYTES); name_buffer.rewind(); + + ByteBufferCompat name_buffer_compat = new ByteBufferCompat(name_buffer); + final String name_str_with_padding_hex = bytesToHexJava(name_buffer_compat.array(),name_buffer_compat.arrayOffset(),name_buffer_compat.limit()); + // Log.i(TAG, "handle_incoming_sync_group_message:sender_name hex=" + name_str_with_padding_hex); + String peer_name = "peer"; try { @@ -1184,6 +1189,7 @@ else if (timestamp < ((System.currentTimeMillis() / 1000) - (60 * 200))) break; } } + // Log.i(TAG, "handle_incoming_sync_group_message:start_index=" + start_index); for(int j=(TOX_NGC_HISTORY_SYNC_MAX_PEERNAME_BYTES-1);j>=0;j--) { @@ -1196,12 +1202,21 @@ else if (timestamp < ((System.currentTimeMillis() / 1000) - (60 * 200))) break; } } + // Log.i(TAG, "handle_incoming_sync_group_message:end_index=" + end_index); - byte[] peername_byte_buf_stripped = Arrays.copyOfRange(name_byte_buf, start_index,end_index); - peer_name = new String(peername_byte_buf_stripped, StandardCharsets.UTF_8); + if (end_index <= start_index) + { + Log.i(TAG, "handle_incoming_sync_group_message:error on null byte detection in name"); + } + else + { + byte[] peername_byte_buf_stripped = Arrays.copyOfRange(name_byte_buf, start_index,end_index); + peer_name = new String(peername_byte_buf_stripped, StandardCharsets.UTF_8); + } + // // Log.i(TAG,"handle_incoming_sync_group_message:peer_name str=" + peer_name); // - final int header = 6+1+1+4+32+4+25; // 73 bytes + final int header = 6 + 1 + 1 + 4 + 32 + 4 + 25; // 73 bytes long text_size = length - header; if ((text_size < 1) || (text_size > 37000)) { @@ -1231,6 +1246,7 @@ else if (timestamp < ((System.currentTimeMillis() / 1000) - (60 * 200))) if (peer_name_saved != null) { // HINT: use saved name instead of name from sync message + // Log.i(TAG,"handle_incoming_sync_group_message:use saved name instead of name from sync message:" + peer_name_saved); peer_name = peer_name_saved; } diff --git a/src/main/kotlin/com/zoffcc/applications/trifa/MainActivity.kt b/src/main/kotlin/com/zoffcc/applications/trifa/MainActivity.kt index 1fe998cb..27637c2d 100644 --- a/src/main/kotlin/com/zoffcc/applications/trifa/MainActivity.kt +++ b/src/main/kotlin/com/zoffcc/applications/trifa/MainActivity.kt @@ -2549,12 +2549,16 @@ class MainActivity val tox_peerpk = tox_group_peer_get_public_key(group_number, peer_id)!!.uppercase() val message_id_hex = fourbytes_of_long_to_hex(message_id) val message_timestamp = System.currentTimeMillis() + val peernum = tox_group_peer_by_public_key(group_number, tox_peerpk) + var fname = tox_group_peer_get_name(group_number, peernum) + if (fname == null) + { + fname = "" + } val msg_dbid = received_groupmessage_to_db(tox_peerpk = tox_peerpk!!, groupid = group_id, message_timestamp = message_timestamp, group_message = message_orig, message_id_hex = message_id_hex, - was_synced = false) - val peernum = tox_group_peer_by_public_key(group_number, tox_peerpk) - val fname = tox_group_peer_get_name(group_number, peernum) + was_synced = false, peername = fname) val peer_user = User(fname + " / " + PubkeyShort(tox_peerpk), picture = "friend_avatar.png", toxpk = tox_peerpk.uppercase(), color = ColorProvider.getColor(true, tox_peerpk.uppercase())) groupmessagestore.send(GroupMessageAction.ReceiveGroupMessage( UIGroupMessage( @@ -3050,11 +3054,10 @@ class MainActivity return row_id } - fun received_groupmessage_to_db(tox_peerpk: String, groupid: String, message_timestamp: Long, group_message: String?, message_id_hex: String, was_synced: Boolean): Long + fun received_groupmessage_to_db(tox_peerpk: String, groupid: String, message_timestamp: Long, group_message: String?, message_id_hex: String, was_synced: Boolean, peername: String): Long { val groupnum = tox_group_by_groupid__wrapper(groupid) val peernum = tox_group_peer_by_public_key(groupnum, tox_peerpk) - val peername = tox_group_peer_get_name(groupnum, peernum) val m = GroupMessage() m.tox_group_peer_pubkey = tox_peerpk m.direction = TRIFAGlobals.TRIFA_MSG_DIRECTION.TRIFA_MSG_DIRECTION_RECVD.value // msg received @@ -3114,7 +3117,7 @@ class MainActivity { val message_timestamp = m.sent_timestamp - val msg_dbid = received_groupmessage_to_db(tox_peerpk = m.tox_group_peer_pubkey!!, groupid = m.group_identifier, message_timestamp = message_timestamp, group_message = m.text, message_id_hex = m.message_id_tox, was_synced = m.was_synced) + val msg_dbid = received_groupmessage_to_db(tox_peerpk = m.tox_group_peer_pubkey!!, groupid = m.group_identifier, message_timestamp = message_timestamp, group_message = m.text, message_id_hex = m.message_id_tox, was_synced = m.was_synced, peername = m.tox_group_peername) val peer_user = User(m.tox_group_peername + " / " + PubkeyShort(m.tox_group_peer_pubkey), picture = "friend_avatar.png", toxpk = m.tox_group_peer_pubkey.uppercase(), color = ColorProvider.getColor(true, m.tox_group_peer_pubkey.uppercase())) groupmessagestore.send(GroupMessageAction.ReceiveGroupMessage(