Search in sources :

Example 6 with InvalidHeaderValueException

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

the class IncomingLollipopMmsConnection method sendRetrievedAcknowledgement.

private void sendRetrievedAcknowledgement(byte[] transactionId, int mmsVersion, int subscriptionId) {
    try {
        NotifyRespInd retrieveResponse = new NotifyRespInd(mmsVersion, transactionId, PduHeaders.STATUS_RETRIEVED);
        new OutgoingLollipopMmsConnection(getContext()).send(new PduComposer(getContext(), retrieveResponse).make(), subscriptionId);
    } catch (UndeliverableMessageException e) {
        Log.w(TAG, e);
    } catch (InvalidHeaderValueException e) {
        Log.w(TAG, e);
    }
}
Also used : NotifyRespInd(com.google.android.mms.pdu_alt.NotifyRespInd) UndeliverableMessageException(org.thoughtcrime.securesms.transport.UndeliverableMessageException) InvalidHeaderValueException(com.google.android.mms.InvalidHeaderValueException) PduComposer(com.google.android.mms.pdu_alt.PduComposer)

Example 7 with InvalidHeaderValueException

use of com.google.android.mms.InvalidHeaderValueException in project kdeconnect-android by KDE.

the class SmsMmsUtils method buildPdu.

/**
 * Copy of the same-name method from https://github.com/klinker41/android-smsmms
 */
private static SendReq buildPdu(Context context, String fromAddress, String[] recipients, String subject, List<MMSPart> parts, Settings settings) {
    final SendReq req = new SendReq();
    // From, per spec
    req.prepareFromAddress(context, fromAddress, settings.getSubscriptionId());
    // To
    for (String recipient : recipients) {
        req.addTo(new EncodedStringValue(recipient));
    }
    // Subject
    if (!TextUtils.isEmpty(subject)) {
        req.setSubject(new EncodedStringValue(subject));
    }
    // Date
    req.setDate(System.currentTimeMillis() / 1000);
    // Body
    PduBody body = new PduBody();
    // Add text part. Always add a smil part for compatibility, without it there
    // may be issues on some carriers/client apps
    int size = 0;
    for (int i = 0; i < parts.size(); i++) {
        MMSPart part = parts.get(i);
        size += addTextPart(body, part, i);
    }
    // add a SMIL document for compatibility
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    SmilXmlSerializer.serialize(SmilHelper.createSmilDocument(body), out);
    PduPart smilPart = new PduPart();
    smilPart.setContentId("smil".getBytes());
    smilPart.setContentLocation("smil.xml".getBytes());
    smilPart.setContentType(ContentType.APP_SMIL.getBytes());
    smilPart.setData(out.toByteArray());
    body.addPart(0, smilPart);
    req.setBody(body);
    // Message size
    req.setMessageSize(size);
    // Message class
    req.setMessageClass(PduHeaders.MESSAGE_CLASS_PERSONAL_STR.getBytes());
    // Expiry
    req.setExpiry(DEFAULT_EXPIRY_TIME);
    try {
        // Priority
        req.setPriority(DEFAULT_PRIORITY);
        // Delivery report
        req.setDeliveryReport(PduHeaders.VALUE_NO);
        // Read report
        req.setReadReport(PduHeaders.VALUE_NO);
    } catch (InvalidHeaderValueException e) {
    }
    return req;
}
Also used : EncodedStringValue(com.google.android.mms.pdu_alt.EncodedStringValue) PduBody(com.google.android.mms.pdu_alt.PduBody) InvalidHeaderValueException(com.google.android.mms.InvalidHeaderValueException) PduPart(com.google.android.mms.pdu_alt.PduPart) MMSPart(com.google.android.mms.MMSPart) ByteArrayOutputStream(java.io.ByteArrayOutputStream) SendReq(com.google.android.mms.pdu_alt.SendReq)

Example 8 with InvalidHeaderValueException

use of com.google.android.mms.InvalidHeaderValueException in project Signal-Android by signalapp.

the class IncomingLollipopMmsConnection method sendRetrievedAcknowledgement.

private void sendRetrievedAcknowledgement(byte[] transactionId, int mmsVersion, int subscriptionId) {
    try {
        NotifyRespInd retrieveResponse = new NotifyRespInd(mmsVersion, transactionId, PduHeaders.STATUS_RETRIEVED);
        new OutgoingLollipopMmsConnection(getContext()).send(new PduComposer(getContext(), retrieveResponse).make(), subscriptionId);
    } catch (UndeliverableMessageException e) {
        Log.w(TAG, e);
    } catch (InvalidHeaderValueException e) {
        Log.w(TAG, e);
    }
}
Also used : NotifyRespInd(com.google.android.mms.pdu_alt.NotifyRespInd) UndeliverableMessageException(org.thoughtcrime.securesms.transport.UndeliverableMessageException) InvalidHeaderValueException(com.google.android.mms.InvalidHeaderValueException) PduComposer(com.google.android.mms.pdu_alt.PduComposer)

Example 9 with InvalidHeaderValueException

use of com.google.android.mms.InvalidHeaderValueException in project Signal-Android by signalapp.

the class MmsSendJob method constructSendPdu.

private SendReq constructSendPdu(OutgoingMediaMessage message) throws UndeliverableMessageException {
    SendReq req = new SendReq();
    String lineNumber = getMyNumber(context);
    MediaConstraints mediaConstraints = MediaConstraints.getMmsMediaConstraints(message.getSubscriptionId());
    List<Attachment> scaledAttachments = message.getAttachments();
    if (!TextUtils.isEmpty(lineNumber)) {
        req.setFrom(new EncodedStringValue(lineNumber));
    } else {
        req.setFrom(new EncodedStringValue(SignalStore.account().getE164()));
    }
    if (message.getRecipient().isMmsGroup()) {
        List<Recipient> members = SignalDatabase.groups().getGroupMembers(message.getRecipient().requireGroupId(), GroupDatabase.MemberSet.FULL_MEMBERS_EXCLUDING_SELF);
        for (Recipient member : members) {
            if (!member.hasSmsAddress()) {
                throw new UndeliverableMessageException("One of the group recipients did not have an SMS address! " + member.getId());
            }
            if (message.getDistributionType() == ThreadDatabase.DistributionTypes.BROADCAST) {
                req.addBcc(new EncodedStringValue(member.requireSmsAddress()));
            } else {
                req.addTo(new EncodedStringValue(member.requireSmsAddress()));
            }
        }
    } else {
        if (!message.getRecipient().hasSmsAddress()) {
            throw new UndeliverableMessageException("Recipient did not have an SMS address! " + message.getRecipient().getId());
        }
        req.addTo(new EncodedStringValue(message.getRecipient().requireSmsAddress()));
    }
    req.setDate(System.currentTimeMillis() / 1000);
    PduBody body = new PduBody();
    int size = 0;
    if (!TextUtils.isEmpty(message.getBody())) {
        PduPart part = new PduPart();
        String name = String.valueOf(System.currentTimeMillis());
        part.setData(Util.toUtf8Bytes(message.getBody()));
        part.setCharset(CharacterSets.UTF_8);
        part.setContentType(ContentType.TEXT_PLAIN.getBytes());
        part.setContentId(name.getBytes());
        part.setContentLocation((name + ".txt").getBytes());
        part.setName((name + ".txt").getBytes());
        body.addPart(part);
        size += getPartSize(part);
    }
    for (Attachment attachment : scaledAttachments) {
        try {
            if (attachment.getUri() == null)
                throw new IOException("Assertion failed, attachment for outgoing MMS has no data!");
            String fileName = attachment.getFileName();
            PduPart part = new PduPart();
            if (fileName == null) {
                fileName = String.valueOf(Math.abs(new SecureRandom().nextLong()));
                String fileExtension = MimeTypeMap.getSingleton().getExtensionFromMimeType(attachment.getContentType());
                if (fileExtension != null)
                    fileName = fileName + "." + fileExtension;
            }
            if (attachment.getContentType().startsWith("text")) {
                part.setCharset(CharacterSets.UTF_8);
            }
            part.setContentType(attachment.getContentType().getBytes());
            part.setContentLocation(fileName.getBytes());
            part.setName(fileName.getBytes());
            int index = fileName.lastIndexOf(".");
            String contentId = (index == -1) ? fileName : fileName.substring(0, index);
            part.setContentId(contentId.getBytes());
            part.setData(StreamUtil.readFully(PartAuthority.getAttachmentStream(context, attachment.getUri())));
            body.addPart(part);
            size += getPartSize(part);
        } catch (IOException e) {
            Log.w(TAG, e);
        }
    }
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    SmilXmlSerializer.serialize(SmilHelper.createSmilDocument(body), out);
    PduPart smilPart = new PduPart();
    smilPart.setContentId("smil".getBytes());
    smilPart.setContentLocation("smil.xml".getBytes());
    smilPart.setContentType(ContentType.APP_SMIL.getBytes());
    smilPart.setData(out.toByteArray());
    body.addPart(0, smilPart);
    req.setBody(body);
    req.setMessageSize(size);
    req.setMessageClass(PduHeaders.MESSAGE_CLASS_PERSONAL_STR.getBytes());
    req.setExpiry(7 * 24 * 60 * 60);
    try {
        req.setPriority(PduHeaders.PRIORITY_NORMAL);
        req.setDeliveryReport(PduHeaders.VALUE_NO);
        req.setReadReport(PduHeaders.VALUE_NO);
    } catch (InvalidHeaderValueException e) {
    }
    return req;
}
Also used : EncodedStringValue(com.google.android.mms.pdu_alt.EncodedStringValue) PduBody(com.google.android.mms.pdu_alt.PduBody) SecureRandom(java.security.SecureRandom) Attachment(org.thoughtcrime.securesms.attachments.Attachment) DatabaseAttachment(org.thoughtcrime.securesms.attachments.DatabaseAttachment) Recipient(org.thoughtcrime.securesms.recipients.Recipient) IOException(java.io.IOException) ByteArrayOutputStream(java.io.ByteArrayOutputStream) SendReq(com.google.android.mms.pdu_alt.SendReq) NetworkConstraint(org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint) MediaConstraints(org.thoughtcrime.securesms.mms.MediaConstraints) UndeliverableMessageException(org.thoughtcrime.securesms.transport.UndeliverableMessageException) InvalidHeaderValueException(com.google.android.mms.InvalidHeaderValueException) PduPart(com.google.android.mms.pdu_alt.PduPart)

Aggregations

InvalidHeaderValueException (com.google.android.mms.InvalidHeaderValueException)9 EncodedStringValue (com.google.android.mms.pdu_alt.EncodedStringValue)4 NotifyRespInd (com.google.android.mms.pdu_alt.NotifyRespInd)4 PduComposer (com.google.android.mms.pdu_alt.PduComposer)4 IOException (java.io.IOException)4 UndeliverableMessageException (org.thoughtcrime.securesms.transport.UndeliverableMessageException)4 PduBody (com.google.android.mms.pdu_alt.PduBody)3 PduPart (com.google.android.mms.pdu_alt.PduPart)3 SendReq (com.google.android.mms.pdu_alt.SendReq)3 ByteArrayOutputStream (java.io.ByteArrayOutputStream)3 Intent (android.content.Intent)2 MmsException (com.google.android.mms.MmsException)2 SecureRandom (java.security.SecureRandom)2 Attachment (org.thoughtcrime.securesms.attachments.Attachment)2 DatabaseAttachment (org.thoughtcrime.securesms.attachments.DatabaseAttachment)2 NetworkConstraint (org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint)2 MediaConstraints (org.thoughtcrime.securesms.mms.MediaConstraints)2 Recipient (org.thoughtcrime.securesms.recipients.Recipient)2 MMSPart (com.google.android.mms.MMSPart)1 EncodedStringValue (com.google.android.mms.pdu.EncodedStringValue)1