/* Android IMSI-Catcher Detector | (c) AIMSICD Privacy Project * ----------------------------------------------------------- * LICENSE: http://git.io/vki47 | TERMS: http://git.io/vki4o * ----------------------------------------------------------- */ package com.secupwn.aimsicd.utils.atcmd; import android.os.Message; import java.io.File; import java.io.IOException; import io.freefair.android.util.logging.AndroidLogger; import io.freefair.android.util.logging.Logger; /** * Description: ... * * Issues: [ ] This probably won't work well with two clients! I don't know what happens * if your RIL currently uses the same AT interface. * [ ] TODO track down SIGPIPE (apparently in "cat /dev/smd7") on uncaught exception? * The stack barf in logcat is bugging me, but I spent some time trying * to figure it out and can't. * * Notes: * QCom: /dev/smd7, possibly other SMD devices. On 2 devices I've checked, * smd7 is owned by bluetooth:bluetooth, so that could be something to sniff for if * it's not always smd7. * * More common is that modem AT CoP is on: /dev/smd0 * while the Bluetooth modem (which also us AT CoP is on: /dev/smd7 */ public abstract class AtCommandTerminal { protected static Logger log = AndroidLogger.forClass(AtCommandTerminal.class); // message may be null if the response is not needed public abstract void send(String s, Message message); public abstract void dispose(); /** * @return * @throws UnsupportedOperationException if no instance can be made */ public static AtCommandTerminal factory() throws UnsupportedOperationException { AtCommandTerminal term = null; File smdFile = new File("/dev/smd7"); if (smdFile.exists()) { try { term = new TtyPrivFile(smdFile.getAbsolutePath()); } catch (IOException e) { log.error("IOException in constructor", e); // fall through } } if (term == null) { throw new UnsupportedOperationException("unable to find AT command terminal"); } return term; } }