Search in sources :

Example 6 with GetCallListException

use of de.janrufmonitor.fritzbox.firmware.exception.GetCallListException in project janrufmonitor by tbrandt77.

the class SynchronizerService method synchronize.

public void synchronize(IProgressMonitor progressMonitor) {
    if (m_activeSync)
        return;
    this.m_activeSync = true;
    long start = System.currentTimeMillis();
    if (m_logger.isLoggable(Level.INFO))
        m_logger.info("--> Start Synchronizing (" + (progressMonitor == null ? "w/o progress monitor" : "with progress monitor") + ")");
    if (this.m_tamMap == null)
        this.m_tamMap = new HashMap();
    this.m_tamMap.clear();
    if (progressMonitor != null) {
        progressMonitor.beginTask(getI18nManager().getString(getNamespace(), "refreshprogress", "label", getLanguage()), IProgressMonitor.UNKNOWN);
        progressMonitor.worked(1);
        progressMonitor.setTaskName(getI18nManager().getString(getNamespace(), "loginprogress", "label", getLanguage()));
    }
    try {
        Thread.sleep((progressMonitor != null ? 500 : 100));
    } catch (InterruptedException e1) {
        m_logger.log(Level.SEVERE, e1.getMessage(), e1);
    }
    FirmwareManager fwm = FirmwareManager.getInstance();
    // fwm.startup();
    try {
        if (!fwm.isLoggedIn())
            fwm.login();
        if (progressMonitor != null)
            progressMonitor.setTaskName(getI18nManager().getString(getNamespace(), "getprogress", "label", getLanguage()));
        try {
            Thread.sleep((progressMonitor != null ? 1500 : 100));
        } catch (InterruptedException e1) {
            m_logger.log(Level.SEVERE, e1.getMessage(), e1);
        }
        long synctime = Long.parseLong(SynchronizerService.this.m_configuration.getProperty(CFG_SYNCTIME, "-1"));
        long oldestCallTime = -1;
        // added: 2013/02/04: check sync all
        boolean syncall = SynchronizerService.this.m_configuration.getProperty(CFG_SYNCALL, "false").equalsIgnoreCase("true");
        if (syncall) {
            synctime = -1;
            if (m_logger.isLoggable(Level.INFO))
                m_logger.info("Sync all option enabled.");
        }
        // sub getSynctimeOffset from time
        if (synctime > 0) {
            if (m_logger.isLoggable(Level.INFO))
                m_logger.info("Sync timestamp before decrementing offset: " + synctime);
            synctime -= this.getSyncTimeOffset();
            if (m_logger.isLoggable(Level.INFO))
                m_logger.info("Sync timestamp after decrementing offset: " + synctime);
        }
        if (m_logger.isLoggable(Level.INFO))
            m_logger.info("Syncing call list from FRITZ!Box with timestamp: " + synctime);
        List result = fwm.getCallList(synctime);
        if (m_logger.isLoggable(Level.INFO))
            m_logger.info("Call list size from FRITZ!Box: " + result.size());
        if (result.size() > 0) {
            ICallList m_callList = PIMRuntime.getInstance().getCallFactory().createCallList(result.size());
            List m_prefilteredList = new ArrayList(result.size());
            FritzBoxCallCsv call = null;
            Properties conf = PIMRuntime.getInstance().getConfigManagerFactory().getConfigManager().getProperties(FritzBoxMonitor.NAMESPACE);
            ICall c = null;
            FritzBoxUUIDManager.getInstance().init();
            boolean skipOutgoing = !Boolean.parseBoolean(conf.getProperty(CFG_OUTGOING, "false"));
            for (int i = 0, j = result.size(); i < j; i++) {
                call = new FritzBoxCallCsv((String) result.get(i), conf);
                // added 2016/01/11: check if outgoing call applicable
                if (call != null) {
                    if (call.isOutgoingCall() && skipOutgoing) {
                        if (m_logger.isLoggable(Level.INFO))
                            m_logger.info("Call import skipped by call state (outgoing) from FRITZ!Box.");
                        continue;
                    }
                    Date calltime = call.getPrecalculatedDate();
                    if (calltime != null && calltime.getTime() < synctime && synctime > 0) {
                        if (m_logger.isLoggable(Level.INFO))
                            m_logger.info("Call import skipped by timestamp (last sync time: " + new Date(synctime).toString() + ", call time: " + calltime.toString() + ") from FRITZ!Box.");
                        continue;
                    }
                    if (calltime != null && synctime < 0) {
                        if (oldestCallTime == -1)
                            oldestCallTime = calltime.getTime();
                        if (oldestCallTime > calltime.getTime())
                            oldestCallTime = calltime.getTime();
                        if (m_logger.isLoggable(Level.INFO))
                            m_logger.info("Set oldest call time to: " + new Date(oldestCallTime).toString());
                    }
                    m_prefilteredList.add(call);
                }
            }
            if (m_prefilteredList.size() > 0) {
                if (progressMonitor != null)
                    progressMonitor.setTaskName(getI18nManager().getString(getNamespace(), "identifyprogress", "label", getLanguage()));
                try {
                    Thread.sleep((progressMonitor != null ? 1000 : 100));
                } catch (InterruptedException e1) {
                    m_logger.log(Level.SEVERE, e1.getMessage(), e1);
                }
                for (int i = 0, j = m_prefilteredList.size(); i < j; i++) {
                    c = ((FritzBoxCallCsv) m_prefilteredList.get(i)).toCall();
                    if (c != null) {
                        if (getRuntime().getMsnManager().isMsnMonitored(c.getMSN())) {
                            if (progressMonitor != null) {
                                progressMonitor.setTaskName(getI18nManager().getString(getNamespace(), "processing", "label", getLanguage()) + Formatter.getInstance(this.getRuntime()).parse(IJAMConst.GLOBAL_VARIABLE_CALLERNUMBER, c));
                                try {
                                    Thread.sleep(75);
                                } catch (InterruptedException e1) {
                                    m_logger.log(Level.SEVERE, e1.getMessage(), e1);
                                }
                            }
                            if (!m_callList.contains(c)) {
                                if (m_logger.isLoggable(Level.INFO))
                                    m_logger.info("Adding call imported from FRITZ!Box: " + c.toString());
                                m_callList.add(c);
                            } else {
                                if (m_logger.isLoggable(Level.WARNING))
                                    m_logger.warning("Adding duplicated call imported from FRITZ!Box: " + c.toString());
                                c.setUUID(c.getUUID() + "-1");
                                ICip cip = c.getCIP();
                                // just a dirty hack
                                cip.setCIP("4");
                                c.setCIP(cip);
                                if (!m_callList.contains(c))
                                    m_callList.add(c);
                                else {
                                    c.setUUID(c.getUUID() + "-1");
                                    if (!m_callList.contains(c))
                                        m_callList.add(c);
                                }
                            }
                        }
                    }
                }
            }
            if (m_callList != null && m_callList.size() > 0) {
                if (progressMonitor != null)
                    progressMonitor.setTaskName(getI18nManager().getString(getNamespace(), "geocodeprogress", "label", getLanguage()));
                try {
                    Thread.sleep((progressMonitor != null ? 1000 : 100));
                } catch (InterruptedException e1) {
                    m_logger.log(Level.SEVERE, e1.getMessage(), e1);
                }
                boolean synctam = SynchronizerService.this.m_configuration.getProperty(CFG_SYNCTAM, "false").equalsIgnoreCase("true");
                if (synctam) {
                    if (m_logger.isLoggable(Level.INFO))
                        m_logger.info("Sync TAM recordings: " + Boolean.toString(synctam));
                    if (progressMonitor != null)
                        progressMonitor.setTaskName(getI18nManager().getString(getNamespace(), "tamprogress", "label", getLanguage()));
                    this.m_tamMap.putAll(fwm.getTamMessages(synctime));
                    try {
                        Thread.sleep((progressMonitor != null ? 1000 : 100));
                    } catch (InterruptedException e1) {
                        m_logger.log(Level.SEVERE, e1.getMessage(), e1);
                    }
                }
                if (m_logger.isLoggable(Level.INFO))
                    m_logger.info("Processing modifier services on call list: " + getRuntime().getServiceFactory().getModifierServices());
                processModifierServices(m_callList, progressMonitor);
                if (progressMonitor != null)
                    progressMonitor.setTaskName(getI18nManager().getString(getNamespace(), "synchprogress", "label", getLanguage()));
                try {
                    Thread.sleep((progressMonitor != null ? 1000 : 100));
                } catch (InterruptedException e1) {
                    m_logger.log(Level.SEVERE, e1.getMessage(), e1);
                }
                String repository = getRuntime().getConfigManagerFactory().getConfigManager().getProperty(Journal.NAMESPACE, "repository");
                ICallManager cm = getRuntime().getCallManagerFactory().getCallManager(repository);
                if (cm != null && cm.isActive() && cm.isSupported(IWriteCallRepository.class)) {
                    ICall ca = null;
                    boolean syncclean = SynchronizerService.this.m_configuration.getProperty(CFG_SYNCCLEAN, "false").equalsIgnoreCase("true");
                    if (synctime < 0) {
                        if (m_logger.isLoggable(Level.INFO))
                            m_logger.info("Set syntime to oldest call time to eliminate duplicates.");
                        synctime = oldestCallTime;
                    }
                    if (syncclean && synctime > 0 && cm.isSupported(IReadCallRepository.class) && cm.isSupported(IWriteCallRepository.class)) {
                        if (m_logger.isLoggable(Level.INFO))
                            m_logger.info("Remove duplicated entries (sync clean) option enabled.");
                        if (progressMonitor != null)
                            progressMonitor.setTaskName(getI18nManager().getString(getNamespace(), "syncclean", "label", getLanguage()));
                        try {
                            Thread.sleep((progressMonitor != null ? 500 : 100));
                        } catch (InterruptedException e1) {
                            m_logger.log(Level.SEVERE, e1.getMessage(), e1);
                        }
                        IFilter syncFilter = new DateFilter(new Date(System.currentTimeMillis()), new Date(synctime));
                        ICallList cl = ((IReadCallRepository) cm).getCalls(syncFilter);
                        if (cl.size() > 0) {
                            // 2009/03/18: added backup of cleaned calls
                            IImExporter exp = ImExportFactory.getInstance().getExporter("DatFileCallExporter");
                            if (exp != null & exp instanceof ICallExporter) {
                                if (m_logger.isLoggable(Level.INFO))
                                    m_logger.info("Creating backup of cleaned call list...");
                                File backupdir = new File(PathResolver.getInstance(getRuntime()).getDataDirectory(), "fritzbox-sync-clean-backup");
                                if (!backupdir.exists()) {
                                    backupdir.mkdirs();
                                }
                                File backupfile = new File(backupdir, Long.toString(synctime) + ".dat");
                                ((ICallExporter) exp).setFilename(backupfile.getAbsolutePath());
                                ((ICallExporter) exp).setCallList(cl);
                                if (((ICallExporter) exp).doExport()) {
                                    if (m_logger.isLoggable(Level.INFO))
                                        m_logger.info("Backup of cleaned call list successfully finished: " + backupfile.getAbsolutePath());
                                } else {
                                    if (m_logger.isLoggable(Level.WARNING))
                                        m_logger.warning("Backup of cleaned call list failed: " + backupdir.getAbsolutePath());
                                }
                            }
                            ((IWriteCallRepository) cm).removeCalls(createRedundancyList(m_callList, synctime));
                            try {
                                Thread.sleep(500);
                            } catch (InterruptedException e) {
                            }
                        }
                    }
                    for (int i = 0, j = m_callList.size(); i < j; i++) {
                        ca = m_callList.get(i);
                        try {
                            ((IWriteCallRepository) cm).setCall(ca);
                            if (progressMonitor != null) {
                                progressMonitor.setTaskName(getI18nManager().getString(getNamespace(), "processing2", "label", getLanguage()) + Formatter.getInstance(this.getRuntime()).parse(IJAMConst.GLOBAL_VARIABLE_CALLERNAME, ca));
                                try {
                                    Thread.sleep(50);
                                } catch (InterruptedException e1) {
                                    m_logger.log(Level.SEVERE, e1.getMessage(), e1);
                                }
                            }
                            if (m_logger.isLoggable(Level.INFO))
                                m_logger.info("Call imported to repository: " + ca.toString());
                        } catch (Exception e) {
                            if (m_logger.isLoggable(Level.WARNING))
                                m_logger.warning("Call already in repository (skipped): " + ca.toString());
                        }
                    }
                    // added 2009/01/08: force refresh of journal, if opened
                    IEventBroker evtBroker = getRuntime().getEventBroker();
                    evtBroker.register(this);
                    evtBroker.send(this, evtBroker.createEvent(IEventConst.EVENT_TYPE_CALL_MANAGER_UPDATED));
                    evtBroker.unregister(this);
                    if (m_logger.isLoggable(Level.INFO))
                        m_logger.info("EventBroker notification sent: EVENT_TYPE_CALL_MANAGER_UPDATED");
                }
                boolean syncDelete = (m_configuration.getProperty(FritzBoxConst.CFG_SYNCDELETE, "false").equalsIgnoreCase("true") ? true : false);
                if (syncDelete) {
                    if (m_logger.isLoggable(Level.INFO))
                        m_logger.info("Delete after sync (sync delete) option enabled.");
                    if (progressMonitor != null)
                        progressMonitor.setTaskName(getI18nManager().getString(getNamespace(), "deleteprogress", "label", getLanguage()));
                    fwm.deleteCallList();
                }
                // added 2009/01/07: send mail notification after sync with fritzbox
                boolean syncNotify = (SynchronizerService.this.m_configuration.getProperty(FritzBoxConst.CFG_SYNC_NOTIFICATION, "false").equalsIgnoreCase("true") ? true : false);
                if (syncNotify) {
                    if (m_logger.isLoggable(Level.INFO))
                        m_logger.info("Send notification after sync (sync notification) option enabled.");
                    ICall ca = null;
                    if (progressMonitor != null)
                        progressMonitor.setTaskName(getI18nManager().getString(getNamespace(), "sendnotificationprogress", "label", getLanguage()));
                    for (int i = 0, j = m_callList.size(); i < j; i++) {
                        ca = m_callList.get(i);
                        sendMailNotification(ca);
                    }
                }
            }
            String text = getI18nManager().getString(getNamespace(), "finished", "label", getLanguage());
            if (m_callList.size() == 0)
                text = getI18nManager().getString(getNamespace(), "finished0", "label", getLanguage());
            if (m_callList.size() == 1)
                text = getI18nManager().getString(getNamespace(), "finished1", "label", getLanguage());
            if (progressMonitor != null)
                progressMonitor.setTaskName(StringUtils.replaceString(text, "{%1}", Integer.toString(m_callList.size())));
            if (m_callList.size() > 0)
                PropagationFactory.getInstance().fire(new Message(Message.INFO, getI18nManager().getString("monitor.FritzBoxMonitor", "title", "label", getLanguage()), new Exception(StringUtils.replaceString(text, "{%1}", Integer.toString(m_callList.size())))), "Tray");
            SynchronizerService.this.m_configuration.setProperty(CFG_SYNCTIME, Long.toString(System.currentTimeMillis()));
            getRuntime().getConfigManagerFactory().getConfigManager().setProperties(NAMESPACE, SynchronizerService.this.m_configuration);
            getRuntime().getConfigManagerFactory().getConfigManager().saveConfiguration();
            if (progressMonitor != null)
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e1) {
                    m_logger.log(Level.SEVERE, e1.getMessage(), e1);
                }
        } else {
            // no results from FB list
            if (progressMonitor != null)
                progressMonitor.setTaskName(getI18nManager().getString(getNamespace(), "noresults", "label", getLanguage()));
            try {
                Thread.sleep((progressMonitor != null ? 1500 : 100));
            } catch (InterruptedException e1) {
                m_logger.log(Level.SEVERE, e1.getMessage(), e1);
            }
        }
    } catch (IOException e) {
        m_logger.warning(e.toString());
        PropagationFactory.getInstance().fire(new Message(Message.ERROR, getNamespace(), "failedrefresh", e));
    } catch (FritzBoxLoginException e) {
        m_logger.warning(e.toString());
    } catch (GetCallListException e) {
        m_logger.warning(e.toString());
        PropagationFactory.getInstance().fire(new Message(Message.ERROR, getNamespace(), "failedrefresh", e));
    } catch (DeleteCallListException e) {
        m_logger.warning(e.toString());
        PropagationFactory.getInstance().fire(new Message(Message.ERROR, getNamespace(), "failedrefresh", e));
    } catch (CloneNotSupportedException e) {
        m_logger.warning(e.toString());
    } finally {
        if (progressMonitor != null)
            progressMonitor.done();
        this.m_activeSync = false;
    }
    if (m_logger.isLoggable(Level.INFO))
        m_logger.info("--> Finished Synchronizing (" + (progressMonitor == null ? "w/o progress monitor" : "with progress monitor") + ") in " + ((System.currentTimeMillis() - start) / 1000) + " sec.");
}
Also used : Message(de.janrufmonitor.exception.Message) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) Properties(java.util.Properties) ICallManager(de.janrufmonitor.repository.ICallManager) ICallList(de.janrufmonitor.framework.ICallList) IImExporter(de.janrufmonitor.repository.imexport.IImExporter) ICallList(de.janrufmonitor.framework.ICallList) List(java.util.List) ArrayList(java.util.ArrayList) DateFilter(de.janrufmonitor.repository.filter.DateFilter) IEventBroker(de.janrufmonitor.framework.event.IEventBroker) IReadCallRepository(de.janrufmonitor.repository.types.IReadCallRepository) ICallExporter(de.janrufmonitor.repository.imexport.ICallExporter) FritzBoxLoginException(de.janrufmonitor.fritzbox.firmware.exception.FritzBoxLoginException) ICall(de.janrufmonitor.framework.ICall) ICip(de.janrufmonitor.framework.ICip) GetCallListException(de.janrufmonitor.fritzbox.firmware.exception.GetCallListException) IOException(java.io.IOException) Date(java.util.Date) IWriteCallRepository(de.janrufmonitor.repository.types.IWriteCallRepository) InvocationTargetException(java.lang.reflect.InvocationTargetException) DeleteCallListException(de.janrufmonitor.fritzbox.firmware.exception.DeleteCallListException) GetCallListException(de.janrufmonitor.fritzbox.firmware.exception.GetCallListException) FritzBoxLoginException(de.janrufmonitor.fritzbox.firmware.exception.FritzBoxLoginException) IOException(java.io.IOException) FritzBoxCallCsv(de.janrufmonitor.fritzbox.FritzBoxCallCsv) FirmwareManager(de.janrufmonitor.fritzbox.firmware.FirmwareManager) IFilter(de.janrufmonitor.repository.filter.IFilter) File(java.io.File) DeleteCallListException(de.janrufmonitor.fritzbox.firmware.exception.DeleteCallListException)

Example 7 with GetCallListException

use of de.janrufmonitor.fritzbox.firmware.exception.GetCallListException in project janrufmonitor by tbrandt77.

the class AbstractFritzBoxFirmware method getCallListAsStream.

private InputStream getCallListAsStream() throws GetCallListException, IOException {
    long start = System.currentTimeMillis();
    this.m_logger.info("Starting retrieving call list...");
    this.refreshCallList();
    this.m_logger.info("Update list call took " + (System.currentTimeMillis() - start) + "ms");
    // The list should be updated now
    // Get the csv file for processing
    String urlstr = getProtocol() + this.m_address + ":" + this.m_port + getBaseURL();
    URL url;
    URLConnection urlConn;
    DataOutputStream printout;
    try {
        this.m_logger.info("Calling FritzBox URL: " + urlstr);
        url = new URL(urlstr);
    } catch (MalformedURLException e) {
        this.m_logger.log(Level.SEVERE, e.getMessage(), e);
        throw new GetCallListException("Invalid URL: " + urlstr);
    }
    urlConn = url.openConnection();
    urlConn.setDoInput(true);
    urlConn.setDoOutput(true);
    urlConn.setUseCaches(false);
    // urlConn.setRequestProperty("Accept-Charset", "ISO-8859-1,utf-8");
    // Sending postdata to the fritz box
    urlConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
    printout = new DataOutputStream(urlConn.getOutputStream());
    printout.writeBytes(getFetchCallListPOSTData().replaceAll("\\$LANG", this.m_language).replaceAll("\\$CSV_FILE", (this.m_language.equalsIgnoreCase("en") ? CSV_FILE_EN : CSV_FILE_DE)) + getFetchCallListURLAuthenticator().getAuthenticationToken());
    printout.flush();
    printout.close();
    try {
        Thread.sleep(1000);
    } catch (InterruptedException e2) {
        this.m_logger.log(Level.SEVERE, e2.getMessage(), e2);
    }
    try {
        // Get response data from the box
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        this.m_logger.info("Fetching call list from FritzBox took " + (System.currentTimeMillis() - start) + "ms");
        Stream.copy(urlConn.getInputStream(), bos);
        ByteArrayInputStream bin = new ByteArrayInputStream(bos.toString("iso-8859-1").getBytes("iso-8859-1"));
        // this.m_logger.info(bos.toString());
        this.m_logger.info("Finished retrieving call list took " + (System.currentTimeMillis() - start) + "ms");
        urlConn.getInputStream().close();
        return bin;
    } catch (IOException e1) {
        this.m_logger.log(Level.SEVERE, e1.getMessage(), e1);
        throw new GetCallListException(e1.getMessage());
    }
}
Also used : MalformedURLException(java.net.MalformedURLException) GetCallListException(de.janrufmonitor.fritzbox.firmware.exception.GetCallListException) ByteArrayInputStream(java.io.ByteArrayInputStream) DataOutputStream(java.io.DataOutputStream) ByteArrayOutputStream(java.io.ByteArrayOutputStream) IOException(java.io.IOException) URL(java.net.URL) URLConnection(java.net.URLConnection)

Example 8 with GetCallListException

use of de.janrufmonitor.fritzbox.firmware.exception.GetCallListException in project janrufmonitor by tbrandt77.

the class AbstractFritzBoxFirmware method refreshCallList.

private void refreshCallList() throws IOException, GetCallListException {
    if (!isInitialized())
        throw new GetCallListException("Cannot get call list from FritzBox. Firmware not initialized.");
    URL url;
    URLConnection urlConn;
    DataOutputStream printout;
    // Attempting to fetch the html version of the call list
    String postdata = (this.m_language.equalsIgnoreCase("en") ? getAccessMethodPOSTData()[1] : getAccessMethodPOSTData()[0]) + getListPOSTData().replaceAll("\\$LANG", this.m_language) + URLEncoder.encode(getListURLAuthenticator().getAuthenticationToken(), "ISO-8859-1");
    String urlstr = getProtocol() + this.m_address + ":" + this.m_port + getBaseURL();
    try {
        this.m_logger.info("Calling FritzBox URL: " + urlstr);
        url = new URL(urlstr);
    } catch (MalformedURLException e) {
        throw new GetCallListException("Invalid URL: " + urlstr);
    }
    if (url != null) {
        urlConn = url.openConnection();
        urlConn.setDoInput(true);
        urlConn.setDoOutput(true);
        urlConn.setUseCaches(false);
        // Sending postdata
        if (postdata != null) {
            urlConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            printout = new DataOutputStream(urlConn.getOutputStream());
            printout.writeBytes(postdata);
            printout.flush();
            printout.close();
        }
        try {
            // Get response data from the box
            BufferedReader reader = new BufferedReader(new InputStreamReader(urlConn.getInputStream()));
            // read out the response data!
            while (reader.skip(Short.MAX_VALUE) > 0) {
            // kind of stupid, but it has to be
            // If you don't read the list, you may not get an
            // Updated list from the box
            }
            // close the streams
            reader.close();
            urlConn.getInputStream().close();
        } catch (IOException e1) {
            throw new IOException("Network unavailable");
        }
    }
}
Also used : MalformedURLException(java.net.MalformedURLException) GetCallListException(de.janrufmonitor.fritzbox.firmware.exception.GetCallListException) InputStreamReader(java.io.InputStreamReader) DataOutputStream(java.io.DataOutputStream) BufferedReader(java.io.BufferedReader) IOException(java.io.IOException) URL(java.net.URL) URLConnection(java.net.URLConnection)

Example 9 with GetCallListException

use of de.janrufmonitor.fritzbox.firmware.exception.GetCallListException in project janrufmonitor by tbrandt77.

the class UnitymediaFirmware method getCallList.

public List getCallList() throws GetCallListException, IOException {
    if (!this.isInitialized())
        throw new GetCallListException("Could not get call list from FritzBox: FritzBox firmware not initialized.");
    InputStream in = null;
    try {
        in = this.getCallListAsStream();
    } catch (IOException e) {
        throw new GetCallListException(e.getMessage());
    }
    if (in == null)
        return new ArrayList(0);
    List result = new ArrayList();
    InputStreamReader inr = new InputStreamReader(in, "utf-8");
    BufferedReader bufReader = new BufferedReader(inr);
    // drop header
    String line = bufReader.readLine();
    if (// new fw version
    line.startsWith("sep="))
        // drop header of new fw
        bufReader.readLine();
    while (bufReader.ready()) {
        line = bufReader.readLine();
        if (this.m_logger.isLoggable(Level.FINE))
            this.m_logger.log(Level.FINE, line);
        result.add(line);
    }
    bufReader.close();
    in.close();
    if (this.m_logger.isLoggable(Level.INFO))
        this.m_logger.info("Callist from FritzBox succuessfully fetched. List size: " + result.size());
    return result;
}
Also used : GetCallListException(de.janrufmonitor.fritzbox.firmware.exception.GetCallListException) InputStreamReader(java.io.InputStreamReader) ByteArrayInputStream(java.io.ByteArrayInputStream) InputStream(java.io.InputStream) ArrayList(java.util.ArrayList) BufferedReader(java.io.BufferedReader) ArrayList(java.util.ArrayList) List(java.util.List) IOException(java.io.IOException)

Example 10 with GetCallListException

use of de.janrufmonitor.fritzbox.firmware.exception.GetCallListException in project janrufmonitor by tbrandt77.

the class UnitymediaFirmware method getCallListAsStream.

private InputStream getCallListAsStream() throws GetCallListException, IOException {
    long start = System.currentTimeMillis();
    this.m_logger.info("Starting retrieving call list...");
    // The list should be updated now
    // Get the csv file for processing
    String urlstr = getProtocol() + this.m_address + ":" + this.m_port + "/fon_num/foncalls_list.lua?csv=&sid=" + this.m_sid;
    URL url;
    URLConnection urlConn;
    try {
        this.m_logger.info("Calling FritzBox URL: " + urlstr);
        url = new URL(urlstr);
    } catch (MalformedURLException e) {
        this.m_logger.log(Level.SEVERE, e.getMessage(), e);
        throw new GetCallListException("Invalid URL: " + urlstr);
    }
    urlConn = url.openConnection();
    urlConn.setDoInput(true);
    urlConn.setDoOutput(true);
    urlConn.setUseCaches(false);
    // urlConn.setRequestProperty("Accept-Charset", "ISO-8859-1,utf-8");
    // Sending postdata to the fritz box
    urlConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
    try {
        Thread.sleep(1000);
    } catch (InterruptedException e2) {
        this.m_logger.log(Level.SEVERE, e2.getMessage(), e2);
    }
    try {
        // Get response data from the box
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        this.m_logger.info("Fetching call list from FritzBox took " + (System.currentTimeMillis() - start) + "ms");
        Stream.copy(urlConn.getInputStream(), bos);
        ByteArrayInputStream bin = new ByteArrayInputStream(bos.toString("utf-8").getBytes("utf-8"));
        // this.m_logger.info(bos.toString());
        this.m_logger.info("Finished retrieving call list took " + (System.currentTimeMillis() - start) + "ms");
        urlConn.getInputStream().close();
        return bin;
    } catch (IOException e1) {
        this.m_logger.log(Level.SEVERE, e1.getMessage(), e1);
        throw new GetCallListException(e1.getMessage());
    }
}
Also used : MalformedURLException(java.net.MalformedURLException) GetCallListException(de.janrufmonitor.fritzbox.firmware.exception.GetCallListException) ByteArrayInputStream(java.io.ByteArrayInputStream) ByteArrayOutputStream(java.io.ByteArrayOutputStream) IOException(java.io.IOException) URL(java.net.URL) URLConnection(java.net.URLConnection)

Aggregations

GetCallListException (de.janrufmonitor.fritzbox.firmware.exception.GetCallListException)11 IOException (java.io.IOException)11 ByteArrayInputStream (java.io.ByteArrayInputStream)9 BufferedReader (java.io.BufferedReader)6 InputStreamReader (java.io.InputStreamReader)6 ArrayList (java.util.ArrayList)6 List (java.util.List)6 InputStream (java.io.InputStream)5 MalformedURLException (java.net.MalformedURLException)5 URL (java.net.URL)5 URLConnection (java.net.URLConnection)5 ByteArrayOutputStream (java.io.ByteArrayOutputStream)4 DataOutputStream (java.io.DataOutputStream)2 Message (de.janrufmonitor.exception.Message)1 ICall (de.janrufmonitor.framework.ICall)1 ICallList (de.janrufmonitor.framework.ICallList)1 ICip (de.janrufmonitor.framework.ICip)1 IEventBroker (de.janrufmonitor.framework.event.IEventBroker)1 FritzBoxCallCsv (de.janrufmonitor.fritzbox.FritzBoxCallCsv)1 FirmwareManager (de.janrufmonitor.fritzbox.firmware.FirmwareManager)1