package io.evercam.connect.discover.upnp; import android.content.Context; import android.os.AsyncTask; import android.util.Log; import net.sbbi.upnp.messages.UPNPResponseException; import java.io.IOException; import io.evercam.connect.db.Camera; import io.evercam.connect.db.CameraOperation; import io.evercam.connect.net.NetInfo; import io.evercam.network.discovery.GatewayDevice; import io.evercam.network.discovery.NatMapEntry; /** * gatewayDeviceTask * <p/> * AsyncTask using gatewayDevice, along with database operations. */ public class IGDDiscoveryTask extends AsyncTask<Void, Void, Void> { private final String TAG = "evercamconnect-gatewayDeviceTask"; private GatewayDevice gatewayDevice; private NetInfo netInfo; private CameraOperation cameraOperation; public IGDDiscoveryTask(Context ctxt) { this.netInfo = new NetInfo(ctxt); cameraOperation = new CameraOperation(ctxt); } @Override protected Void doInBackground(Void... params) { try { gatewayDevice = new GatewayDevice(netInfo.getGatewayIp()); fillRouter(); fillAllEntries(); } catch(Exception e) { Log.e(TAG, e.toString()); } return null; } public void fillRouter() { if(gatewayDevice.isRouter()) { cameraOperation.updateAttributeInt(netInfo.getGatewayIp(), netInfo.getSsid(), "upnp", 1); } else { cameraOperation.updateAttributeInt(netInfo.getGatewayIp(), netInfo.getSsid(), "upnp", 0); } } public void fillAllEntries() { for(int sizeIndex = 0; sizeIndex < gatewayDevice.getTableSize(); sizeIndex++) { try { NatMapEntry mapEntry = new NatMapEntry(gatewayDevice.getIGD() .getGenericPortMappingEntry(sizeIndex)); String natIP = mapEntry.getIpAddress(); int natInternalPort = mapEntry.getInternalPort(); int natExternalPort = mapEntry.getExternalPort(); if(cameraOperation.isExisting(natIP, netInfo.getSsid())) { Camera camera = cameraOperation.getCamera(natIP, netInfo.getSsid()); if(natInternalPort == camera.getHttp()) { cameraOperation.updateAttributeInt(natIP, netInfo.getSsid(), "exthttp", natExternalPort); } else if(natInternalPort == camera.getRtsp()) { cameraOperation.updateAttributeInt(natIP, netInfo.getSsid(), "extrtsp", natExternalPort); } } } catch(IOException e) { e.printStackTrace(); } catch(UPNPResponseException e) { e.printStackTrace(); } } } }