/** * Copyright (C) 2011 Whisper Systems * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ package org.thoughtcrime.securesms.service; import android.content.Context; import android.content.Intent; import android.util.Log; import org.thoughtcrime.securesms.crypto.DecryptingQueue; import org.thoughtcrime.securesms.crypto.MasterSecret; import org.thoughtcrime.securesms.database.DatabaseFactory; import org.thoughtcrime.securesms.database.MmsDatabase; import org.thoughtcrime.securesms.mms.MmsDownloadHelper; import org.thoughtcrime.securesms.protocol.WirePrefix; import ws.com.google.android.mms.MmsException; import ws.com.google.android.mms.pdu.PduParser; import ws.com.google.android.mms.pdu.RetrieveConf; import java.io.IOException; import java.util.LinkedList; public class MmsDownloader extends MmscProcessor { private final LinkedList pendingMessages = new LinkedList(); private final SendReceiveService.ToastHandler toastHandler; public MmsDownloader(Context context, SendReceiveService.ToastHandler toastHandler) { super(context); this.toastHandler = toastHandler; } private void handleDownloadMms(DownloadItem item) { if (!isConnectivityPossible()) { DatabaseFactory.getMmsDatabase(context).markDownloadState(item.getMessageId(), MmsDatabase.Types.DOWNLOAD_NO_CONNECTIVITY); toastHandler.makeToast("No connectivity available for MMS download, try again later..."); Log.w("MmsDownloadService", "Unable to download MMS, please try again later."); } else { DatabaseFactory.getMmsDatabase(context).markDownloadState(item.getMessageId(), MmsDatabase.Types.DOWNLOAD_CONNECTING); pendingMessages.add(item); issueConnectivityRequest(); } } private void handleDownloadMmsContinued(DownloadItem item) { Log.w("MmsDownloadService", "Handling MMS download continuation..."); MmsDatabase mmsDatabase; if (item.getMasterSecret() == null) mmsDatabase = DatabaseFactory.getMmsDatabase(context); else mmsDatabase = DatabaseFactory.getEncryptingMmsDatabase(context, item.getMasterSecret()); try { byte[] pdu = MmsDownloadHelper.retrieveMms(context, item.getContentLocation(), getApnInformation()); RetrieveConf retrieved = (RetrieveConf)new PduParser(pdu).parse(); for (int i=0;i