private void handleEndSessionMessage(SignalServiceEnvelope envelope, SignalServiceDataMessage message, May <long> smsMessageId) { var smsDatabase = DatabaseFactory.getTextMessageDatabase();//getEncryptingSmsDatabase(context); var incomingTextMessage = new IncomingTextMessage(envelope.getSource(), envelope.getSourceDevice(), message.getTimestamp(), "", May <SignalServiceGroup> .NoValue); long threadId; if (!smsMessageId.HasValue) { IncomingEndSessionMessage incomingEndSessionMessage = new IncomingEndSessionMessage(incomingTextMessage); Pair <long, long> messageAndThreadId = smsDatabase.InsertMessageInbox(incomingEndSessionMessage); threadId = messageAndThreadId.second(); } else { var messageId = smsMessageId.ForceGetValue(); smsDatabase.MarkAsEndSession(messageId); threadId = smsDatabase.GetThreadIdForMessage(messageId); } SessionStore sessionStore = new TextSecureAxolotlStore(); sessionStore.DeleteAllSessions(envelope.getSource()); //SecurityEvent.broadcastSecurityUpdateEvent(context, threadId); //MessageNotifier.updateNotification(context, masterSecret.getMasterSecret().orNull(), threadId); }
/*private void handleGroupMessage(@NonNull MasterSecretUnion masterSecret, * @NonNull TextSecureEnvelope envelope, * @NonNull TextSecureDataMessage message, * @NonNull Optional<Long> smsMessageId) * { * GroupMessageProcessor.process(context, masterSecret, envelope, message); * * if (smsMessageId.isPresent()) * { * DatabaseFactory.getSmsDatabase(context).deleteMessage(smsMessageId.get()); * } * } * * private void handleSynchronizeSentMessage(@NonNull MasterSecretUnion masterSecret, * @NonNull SentTranscriptMessage message, * @NonNull Optional<Long> smsMessageId) * throws MmsException * { * if (message.getMessage().getAttachments().isPresent()) { * handleSynchronizeSentMediaMessage(masterSecret, message, smsMessageId); * } else { * handleSynchronizeSentTextMessage(masterSecret, message, smsMessageId); * } * } * * private void handleSynchronizeRequestMessage(@NonNull MasterSecretUnion masterSecret, * @NonNull RequestMessage message) * { * if (message.isContactsRequest()) * { * ApplicationContext.getInstance(context) * .getJobManager() * .add(new MultiDeviceContactUpdateJob(getContext())); * } * * if (message.isGroupsRequest()) * { * ApplicationContext.getInstance(context) * .getJobManager() * .add(new MultiDeviceGroupUpdateJob(getContext())); * } * } * * private void handleMediaMessage(@NonNull MasterSecretUnion masterSecret, * @NonNull TextSecureEnvelope envelope, * @NonNull TextSecureDataMessage message, * @NonNull Optional<Long> smsMessageId) * throws MmsException * { * MmsDatabase database = DatabaseFactory.getMmsDatabase(context); * String localNumber = TextSecurePreferences.getLocalNumber(context); * IncomingMediaMessage mediaMessage = new IncomingMediaMessage(masterSecret, envelope.getSource(), * localNumber, message.getTimestamp(), * Optional.fromNullable(envelope.getRelay()), * message.getBody(), * message.getGroupInfo(), * message.getAttachments()); * * Pair<Long, Long> messageAndThreadId = database.insertSecureDecryptedMessageInbox(masterSecret, mediaMessage, -1); * * ApplicationContext.getInstance(context) * .getJobManager() * .add(new AttachmentDownloadJob(context, messageAndThreadId.first)); * * if (smsMessageId.isPresent()) { * DatabaseFactory.getSmsDatabase(context).deleteMessage(smsMessageId.get()); * } * * MessageNotifier.updateNotification(context, masterSecret.getMasterSecret().orNull(), messageAndThreadId.second); * } * * private void handleSynchronizeSentMediaMessage(@NonNull MasterSecretUnion masterSecret, * @NonNull SentTranscriptMessage message, * @NonNull Optional<Long> smsMessageId) * throws MmsException * { * MmsDatabase database = DatabaseFactory.getMmsDatabase(context); * Recipients recipients = getSyncMessageDestination(message); * OutgoingMediaMessage mediaMessage = new OutgoingMediaMessage(context, masterSecret, recipients, * message.getMessage().getAttachments().get(), * message.getMessage().getBody().orNull()); * * mediaMessage = new OutgoingSecureMediaMessage(mediaMessage); * * long threadId = DatabaseFactory.getThreadDatabase(context).getThreadIdFor(recipients); * long messageId = database.insertMessageOutbox(masterSecret, mediaMessage, threadId, false, message.getTimestamp()); * * database.markAsSent(messageId, "push".getBytes(), 0); * database.markAsPush(messageId); * * ApplicationContext.getInstance(context) * .getJobManager() * .add(new AttachmentDownloadJob(context, messageId)); * * if (smsMessageId.isPresent()) * { * DatabaseFactory.getSmsDatabase(context).deleteMessage(smsMessageId.get()); * } * } */ private void handleTextMessage(/*@NonNull MasterSecretUnion masterSecret,*/ TextSecureEnvelope envelope, TextSecureDataMessage message /*, * @NonNull Optional<Long> smsMessageId*/) { MessageDatabase database = DatabaseFactory.getMessageDatabase(); String body = message.getBody().HasValue ? message.getBody().ForceGetValue() : ""; /*Pair<Long, Long> messageAndThreadId; * * if (smsMessageId.hasValue) * { * messageAndThreadId = database.updateBundleMessageBody(masterSecret, smsMessageId.get(), body); * } * else * {*/ IncomingTextMessage textMessage = new IncomingTextMessage(envelope.getSource(), envelope.getSourceDevice(), (long)message.getTimestamp(), body, message.getGroupInfo()); textMessage = new IncomingEncryptedMessage(textMessage, body); /*messageAndThreadId = */ database.insertMessageInbox(/*masterSecret, */ textMessage); /*} * * MessageNotifier.updateNotification(context, masterSecret.getMasterSecret().orNull(), messageAndThreadId.second);*/ }
private Pair <long, long> insertPlaceholder(SignalServiceEnvelope envelope) { var database = DatabaseFactory.getTextMessageDatabase(); //getEncryptingSmsDatabase(context); IncomingTextMessage textMessage = new IncomingTextMessage(envelope.getSource(), envelope.getSourceDevice(), envelope.getTimestamp(), "", May <SignalServiceGroup> .NoValue); textMessage = new IncomingEncryptedMessage(textMessage, ""); return(database.InsertMessageInbox(textMessage)); }
private void handleTextMessage(/*@NonNull MasterSecretUnion masterSecret,*/ SignalServiceEnvelope envelope, SignalServiceDataMessage message, May <long> smsMessageId) { var textMessageDatabase = DatabaseFactory.getTextMessageDatabase(); String body = message.getBody().HasValue ? message.getBody().ForceGetValue() : ""; IncomingTextMessage textMessage = new IncomingTextMessage(envelope.getSource(), envelope.getSourceDevice(), message.getTimestamp(), body, message.getGroupInfo()); textMessage = new IncomingEncryptedMessage(textMessage, body); var messageAndThreadId = textMessageDatabase.InsertMessageInbox(textMessage); ToastHelper.NotifyNewMessage(messageAndThreadId.second(), DatabaseFactory.getDirectoryDatabase().GetForNumber(envelope.getSource()).Name, body); }
private void handleUntrustedIdentityMessage(SignalServiceEnvelope envelope, May <long> smsMessageId) { try { var database = DatabaseFactory.getTextMessageDatabase(); //getEncryptingSmsDatabase(context); Recipients recipients = RecipientFactory.getRecipientsFromString(envelope.getSource(), false); long recipientId = recipients.getPrimaryRecipient().getRecipientId(); PreKeySignalMessage whisperMessage = new PreKeySignalMessage(envelope.getLegacyMessage()); IdentityKey identityKey = whisperMessage.getIdentityKey(); String encoded = Base64.encodeBytes(envelope.getLegacyMessage()); IncomingTextMessage textMessage = new IncomingTextMessage(envelope.getSource(), envelope.getSourceDevice(), envelope.getTimestamp(), encoded, May <SignalServiceGroup> .NoValue); if (!smsMessageId.HasValue) { IncomingPreKeyBundleMessage bundleMessage = new IncomingPreKeyBundleMessage(textMessage, encoded); Pair <long, long> messageAndThreadId = database.InsertMessageInbox(bundleMessage); database.SetMismatchedIdentity(messageAndThreadId.first(), recipientId, identityKey); //MessageNotifier.updateNotification(context, masterSecret.getMasterSecret().orNull(), messageAndThreadId.second); } else { var messageId = smsMessageId.ForceGetValue(); database.UpdateMessageBody(messageId, encoded); database.MarkAsPreKeyBundle(messageId); database.SetMismatchedIdentity(messageId, recipientId, identityKey); } } catch (InvalidMessageException e) { throw new InvalidOperationException(e.Message); } catch (InvalidVersionException e) { throw new InvalidOperationException(e.Message); } }
public IncomingEndSessionMessage(IncomingTextMessage parent, string newBody) : base(parent, newBody) { }
public IncomingEndSessionMessage(IncomingTextMessage parent) : this(parent, parent.getMessageBody()) { }
public Pair <long, long> insertMessageInbox(IncomingTextMessage message) { return(insertMessageInbox(message, MessageTypes.BASE_INBOX_TYPE)); }
/*protected Pair<long, long> updateMessageBodyAndType(long messageId, String body, long maskOff, long maskOn) * { * SQLiteDatabase db = databaseHelper.getWritableDatabase(); * db.execSQL("UPDATE " + TABLE_NAME + " SET " + BODY + " = ?, " + * TYPE + " = (" + TYPE + " & " + (MessageTypes.TOTAL_MASK - maskOff) + " | " + maskOn + ") " + * "WHERE " + ID + " = ?", * new String[] { body, messageId + "" }); * * long threadId = getThreadIdForMessage(messageId); * * DatabaseFactory.getThreadDatabase().update(threadId); * notifyConversationListeners(threadId); * //notifyConversationListListeners(); * * return new Pair<long, long>(messageId, threadId); * } * * public Pair<long, long> copyMessageInbox(long messageId) * { * Reader reader = readerFor(getMessage(messageId)); * SmsMessageRecord record = reader.getNext(); * * ContentValues contentValues = new ContentValues(); * contentValues.put(TYPE, (record.getType() & ~MessageTypes.BASE_TYPE_MASK) | MessageTypes.BASE_INBOX_TYPE); * contentValues.put(ADDRESS, record.getIndividualRecipient().getNumber()); * contentValues.put(ADDRESS_DEVICE_ID, record.getRecipientDeviceId()); * contentValues.put(DATE_RECEIVED, System.currentTimeMillis()); * contentValues.put(DATE_SENT, record.getDateSent()); * contentValues.put(PROTOCOL, 31337); * contentValues.put(READ, 0); * contentValues.put(BODY, record.getBody().getBody()); * contentValues.put(THREAD_ID, record.getThreadId()); * * SQLiteDatabase db = databaseHelper.getWritableDatabase(); * long newMessageId = db.insert(TABLE_NAME, null, contentValues); * * DatabaseFactory.getThreadDatabase(context).update(record.getThreadId()); * notifyConversationListeners(record.getThreadId()); * * jobManager.add(new TrimThreadJob(context, record.getThreadId())); * reader.close(); * * return new Pair<>(newMessageId, record.getThreadId()); * } */ protected Pair <long, long> insertMessageInbox(IncomingTextMessage message, long type) { if (message.isPreKeyBundle()) { type |= MessageTypes.KEY_EXCHANGE_BIT | MessageTypes.KEY_EXCHANGE_BUNDLE_BIT; } else if (message.isSecureMessage()) { type |= MessageTypes.SECURE_MESSAGE_BIT; } /*else if (message.isGroup()) TODO: GROUP enable * { * type |= MessageTypes.SECURE_MESSAGE_BIT; * if (((IncomingGroupMessage)message).isUpdate()) type |= MessageTypes.GROUP_UPDATE_BIT; * else if (((IncomingGroupMessage)message).isQuit()) type |= MessageTypes.GROUP_QUIT_BIT; * }*/ else if (message.isEndSession()) { type |= MessageTypes.SECURE_MESSAGE_BIT; type |= MessageTypes.END_SESSION_BIT; } if (message.isPush()) { type |= MessageTypes.PUSH_MESSAGE_BIT; } Recipients recipients; if (message.getSender() != null) { recipients = RecipientFactory.getRecipientsFromString(message.getSender(), true); } else { //Log.w(TAG, "Sender is null, returning unknown recipient"); recipients = new Recipients(Recipient.getUnknownRecipient()); } Recipients groupRecipients; if (message.getGroupId() == null) { groupRecipients = null; } else { groupRecipients = RecipientFactory.getRecipientsFromString(message.getGroupId(), true); } bool unread = /*org.thoughtcrime.securesms.util.Util.isDefaultSmsProvider() ||*/ message.isSecureMessage() || message.isPreKeyBundle(); long threadId; if (groupRecipients == null) { threadId = DatabaseFactory.getThreadDatabase().GetThreadIdForRecipients(recipients); // TODO CHECK } else { threadId = DatabaseFactory.getThreadDatabase().GetThreadIdForRecipients(groupRecipients); } /*ContentValues values = new ContentValues(6); * values.put(ADDRESS, message.getSender()); * values.put(ADDRESS_DEVICE_ID, message.getSenderDeviceId()); * values.put(DATE_RECEIVED, System.currentTimeMillis()); * values.put(DATE_SENT, message.getSentTimestampMillis()); * values.put(PROTOCOL, message.getProtocol()); * values.put(READ, unread ? 0 : 1); * * if (!TextUtils.isEmpty(message.getPseudoSubject())) * values.put(SUBJECT, message.getPseudoSubject()); * * values.put(REPLY_PATH_PRESENT, message.isReplyPathPresent()); * values.put(SERVICE_CENTER, message.getServiceCenterAddress()); * values.put(BODY, message.getMessageBody()); * values.put(TYPE, type); * values.put(THREAD_ID, threadId);*/ var insert = new Message() { Address = message.getSender(), AddressDeviceId = message.getSenderDeviceId(), DateReceived = TimeUtil.GetDateTimeMillis(), // force precision to millis not to ticks DateSent = TimeUtil.GetDateTime(message.getSentTimestampMillis()), Read = !unread, Body = message.getMessageBody(), Type = type, ThreadId = threadId }; long rows = conn.Insert(insert); long messageId = insert.MessageId; if (unread) { DatabaseFactory.getThreadDatabase().SetUnread(threadId); } DatabaseFactory.getThreadDatabase().Refresh(threadId); notifyConversationListeners(threadId); //jobManager.add(new TrimThreadJob(context, threadId)); // TODO return(new Pair <long, long>(messageId, threadId)); }