Search in sources :

Example 6 with MmsException

use of ws.com.google.android.mms.MmsException in project Signal-Android by WhisperSystems.

the class IncomingLollipopMmsConnection method retrieve.

@Override
@TargetApi(VERSION_CODES.LOLLIPOP)
@Nullable
public synchronized RetrieveConf retrieve(@NonNull String contentLocation, byte[] transactionId, int subscriptionId) throws MmsException {
    beginTransaction();
    try {
        MmsBodyProvider.Pointer pointer = MmsBodyProvider.makeTemporaryPointer(getContext());
        Log.w(TAG, "downloading multimedia from " + contentLocation + " to " + pointer.getUri());
        SmsManager smsManager;
        if (VERSION.SDK_INT >= 22 && subscriptionId != -1) {
            smsManager = SmsManager.getSmsManagerForSubscriptionId(subscriptionId);
        } else {
            smsManager = SmsManager.getDefault();
        }
        smsManager.downloadMultimediaMessage(getContext(), contentLocation, pointer.getUri(), null, getPendingIntent());
        waitForResult();
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        Util.copy(pointer.getInputStream(), baos);
        pointer.close();
        Log.w(TAG, baos.size() + "-byte response: " + Hex.dump(baos.toByteArray()));
        return (RetrieveConf) new PduParser(baos.toByteArray()).parse();
    } catch (IOException | TimeoutException e) {
        Log.w(TAG, e);
        throw new MmsException(e);
    } finally {
        endTransaction();
    }
}
Also used : MmsBodyProvider(org.thoughtcrime.securesms.providers.MmsBodyProvider) PduParser(ws.com.google.android.mms.pdu.PduParser) MmsException(ws.com.google.android.mms.MmsException) ByteArrayOutputStream(java.io.ByteArrayOutputStream) IOException(java.io.IOException) RetrieveConf(ws.com.google.android.mms.pdu.RetrieveConf) SmsManager(android.telephony.SmsManager) TimeoutException(java.util.concurrent.TimeoutException) TargetApi(android.annotation.TargetApi) Nullable(android.support.annotation.Nullable)

Example 7 with MmsException

use of ws.com.google.android.mms.MmsException in project Signal-Android by WhisperSystems.

the class MessageSender method resend.

public static void resend(Context context, MasterSecret masterSecret, MessageRecord messageRecord) {
    try {
        long messageId = messageRecord.getId();
        boolean forceSms = messageRecord.isForcedSms();
        boolean keyExchange = messageRecord.isKeyExchange();
        long expiresIn = messageRecord.getExpiresIn();
        if (messageRecord.isMms()) {
            Recipients recipients = DatabaseFactory.getMmsAddressDatabase(context).getRecipientsForId(messageId);
            sendMediaMessage(context, masterSecret, recipients, forceSms, messageId, expiresIn);
        } else {
            Recipients recipients = messageRecord.getRecipients();
            sendTextMessage(context, recipients, forceSms, keyExchange, messageId, expiresIn);
        }
    } catch (MmsException e) {
        Log.w(TAG, e);
    }
}
Also used : MmsException(ws.com.google.android.mms.MmsException) Recipients(org.thoughtcrime.securesms.recipients.Recipients)

Example 8 with MmsException

use of ws.com.google.android.mms.MmsException in project Signal-Android by WhisperSystems.

the class AttachmentDatabase method updateAttachmentData.

@NonNull
public Attachment updateAttachmentData(@NonNull MasterSecret masterSecret, @NonNull Attachment attachment, @NonNull MediaStream mediaStream) throws MmsException {
    SQLiteDatabase database = databaseHelper.getWritableDatabase();
    DatabaseAttachment databaseAttachment = (DatabaseAttachment) attachment;
    File dataFile = getAttachmentDataFile(databaseAttachment.getAttachmentId(), DATA);
    if (dataFile == null) {
        throw new MmsException("No attachment data found!");
    }
    long dataSize = setAttachmentData(masterSecret, dataFile, mediaStream.getStream());
    ContentValues contentValues = new ContentValues();
    contentValues.put(SIZE, dataSize);
    contentValues.put(CONTENT_TYPE, mediaStream.getMimeType());
    database.update(TABLE_NAME, contentValues, PART_ID_WHERE, databaseAttachment.getAttachmentId().toStrings());
    return new DatabaseAttachment(databaseAttachment.getAttachmentId(), databaseAttachment.getMmsId(), databaseAttachment.hasData(), databaseAttachment.hasThumbnail(), mediaStream.getMimeType(), databaseAttachment.getTransferState(), dataSize, databaseAttachment.getLocation(), databaseAttachment.getKey(), databaseAttachment.getRelay(), databaseAttachment.getDigest());
}
Also used : ContentValues(android.content.ContentValues) MmsException(ws.com.google.android.mms.MmsException) SQLiteDatabase(android.database.sqlite.SQLiteDatabase) DatabaseAttachment(org.thoughtcrime.securesms.attachments.DatabaseAttachment) File(java.io.File) NonNull(android.support.annotation.NonNull)

Example 9 with MmsException

use of ws.com.google.android.mms.MmsException in project Signal-Android by WhisperSystems.

the class MmsDatabase method insertMessageInbox.

private Optional<InsertResult> insertMessageInbox(MasterSecretUnion masterSecret, IncomingMediaMessage retrieved, String contentLocation, long threadId, long mailbox) throws MmsException {
    if (threadId == -1 || retrieved.isGroupMessage()) {
        try {
            threadId = getThreadIdFor(retrieved);
        } catch (RecipientFormattingException e) {
            Log.w("MmsDatabase", e);
            if (threadId == -1)
                throw new MmsException(e);
        }
    }
    ContentValues contentValues = new ContentValues();
    contentValues.put(DATE_SENT, retrieved.getSentTimeMillis());
    contentValues.put(ADDRESS, retrieved.getAddresses().getFrom());
    contentValues.put(MESSAGE_BOX, mailbox);
    contentValues.put(MESSAGE_TYPE, PduHeaders.MESSAGE_TYPE_RETRIEVE_CONF);
    contentValues.put(THREAD_ID, threadId);
    contentValues.put(CONTENT_LOCATION, contentLocation);
    contentValues.put(STATUS, Status.DOWNLOAD_INITIALIZED);
    contentValues.put(DATE_RECEIVED, generatePduCompatTimestamp());
    contentValues.put(PART_COUNT, retrieved.getAttachments().size());
    contentValues.put(SUBSCRIPTION_ID, retrieved.getSubscriptionId());
    contentValues.put(EXPIRES_IN, retrieved.getExpiresIn());
    contentValues.put(READ, retrieved.isExpirationUpdate() ? 1 : 0);
    if (!contentValues.containsKey(DATE_SENT)) {
        contentValues.put(DATE_SENT, contentValues.getAsLong(DATE_RECEIVED));
    }
    if (retrieved.isPushMessage() && isDuplicate(retrieved, threadId)) {
        Log.w(TAG, "Ignoring duplicate media message (" + retrieved.getSentTimeMillis() + ")");
        return Optional.absent();
    }
    long messageId = insertMediaMessage(masterSecret, retrieved.getAddresses(), retrieved.getBody(), retrieved.getAttachments(), contentValues);
    if (!Types.isExpirationTimerUpdate(mailbox)) {
        DatabaseFactory.getThreadDatabase(context).setUnread(threadId);
        DatabaseFactory.getThreadDatabase(context).update(threadId, true);
    }
    notifyConversationListeners(threadId);
    jobManager.add(new TrimThreadJob(context, threadId));
    return Optional.of(new InsertResult(messageId, threadId));
}
Also used : ContentValues(android.content.ContentValues) TrimThreadJob(org.thoughtcrime.securesms.jobs.TrimThreadJob) MmsException(ws.com.google.android.mms.MmsException) RecipientFormattingException(org.thoughtcrime.securesms.recipients.RecipientFormattingException)

Example 10 with MmsException

use of ws.com.google.android.mms.MmsException in project Signal-Android by WhisperSystems.

the class MmsDatabase method copyMessageInbox.

public long copyMessageInbox(MasterSecret masterSecret, long messageId) throws MmsException {
    try {
        OutgoingMediaMessage request = getOutgoingMessage(masterSecret, messageId);
        ContentValues contentValues = new ContentValues();
        contentValues.put(ADDRESS, request.getRecipients().getPrimaryRecipient().getNumber());
        contentValues.put(DATE_SENT, request.getSentTimeMillis());
        contentValues.put(MESSAGE_BOX, Types.BASE_INBOX_TYPE | Types.SECURE_MESSAGE_BIT | Types.ENCRYPTION_SYMMETRIC_BIT);
        contentValues.put(THREAD_ID, getThreadIdForMessage(messageId));
        contentValues.put(READ, 1);
        contentValues.put(DATE_RECEIVED, contentValues.getAsLong(DATE_SENT));
        contentValues.put(EXPIRES_IN, request.getExpiresIn());
        List<Attachment> attachments = new LinkedList<>();
        for (Attachment attachment : request.getAttachments()) {
            DatabaseAttachment databaseAttachment = (DatabaseAttachment) attachment;
            attachments.add(new DatabaseAttachment(databaseAttachment.getAttachmentId(), databaseAttachment.getMmsId(), databaseAttachment.hasData(), databaseAttachment.hasThumbnail(), databaseAttachment.getContentType(), AttachmentDatabase.TRANSFER_PROGRESS_DONE, databaseAttachment.getSize(), databaseAttachment.getLocation(), databaseAttachment.getKey(), databaseAttachment.getRelay(), databaseAttachment.getDigest()));
        }
        return insertMediaMessage(new MasterSecretUnion(masterSecret), MmsAddresses.forTo(request.getRecipients().toNumberStringList(false)), request.getBody(), attachments, contentValues);
    } catch (NoSuchMessageException e) {
        throw new MmsException(e);
    }
}
Also used : ContentValues(android.content.ContentValues) MasterSecretUnion(org.thoughtcrime.securesms.crypto.MasterSecretUnion) MmsException(ws.com.google.android.mms.MmsException) DatabaseAttachment(org.thoughtcrime.securesms.attachments.DatabaseAttachment) OutgoingMediaMessage(org.thoughtcrime.securesms.mms.OutgoingMediaMessage) Attachment(org.thoughtcrime.securesms.attachments.Attachment) DatabaseAttachment(org.thoughtcrime.securesms.attachments.DatabaseAttachment) MmsNotificationAttachment(org.thoughtcrime.securesms.attachments.MmsNotificationAttachment) LinkedList(java.util.LinkedList)

Aggregations

MmsException (ws.com.google.android.mms.MmsException)15 IOException (java.io.IOException)5 Recipients (org.thoughtcrime.securesms.recipients.Recipients)5 ContentValues (android.content.ContentValues)3 File (java.io.File)3 LinkedList (java.util.LinkedList)3 Attachment (org.thoughtcrime.securesms.attachments.Attachment)3 DatabaseAttachment (org.thoughtcrime.securesms.attachments.DatabaseAttachment)3 AttachmentDatabase (org.thoughtcrime.securesms.database.AttachmentDatabase)3 MmsDatabase (org.thoughtcrime.securesms.database.MmsDatabase)3 InvalidMessageException (org.whispersystems.libsignal.InvalidMessageException)3 NonNull (android.support.annotation.NonNull)2 Nullable (android.support.annotation.Nullable)2 Pair (android.util.Pair)2 MmsNotificationAttachment (org.thoughtcrime.securesms.attachments.MmsNotificationAttachment)2 MasterSecretUnion (org.thoughtcrime.securesms.crypto.MasterSecretUnion)2 OutgoingGroupMediaMessage (org.thoughtcrime.securesms.mms.OutgoingGroupMediaMessage)2 OutgoingMediaMessage (org.thoughtcrime.securesms.mms.OutgoingMediaMessage)2 DuplicateMessageException (org.whispersystems.libsignal.DuplicateMessageException)2 LegacyMessageException (org.whispersystems.libsignal.LegacyMessageException)2