def get_smsc(self, cb, eb):
        """Get SMSC from preferences, networks DB or device, then callback"""

        # try to get from preferences
        if self.model.conf.get('preferences', 'use_alternate_smsc', False):
            alternate_smsc = self.model.conf.get('preferences',
                                                 'smsc_number', None)
        else:
            alternate_smsc = None

        # try to get from networks DB
        if self.model.imsi:
            provider = NetworkProvider()
            attrs = provider.get_network_by_id(self.model.imsi)
            if attrs:
                provider_smsc = attrs[0].smsc
            else:
                provider_smsc = None
            provider.close()
        else:
            provider_smsc = None

        # use the one from the best source
        if alternate_smsc is not None:
            logger.info("SMSC used from preferences")
            cb(alternate_smsc)
        elif provider_smsc is not None:
            logger.info("SMSC used from networks DB")
            cb(provider_smsc)
        else:
            logger.info("SMSC used from SIM")
            self.model.device.GetSmsc(dbus_interface=SMS_INTFACE,
                                      reply_handler=cb,
                                      error_handler=eb)
Example #2
0
    def get_smsc(self, cb, eb):
        """Get SMSC from preferences, networks DB or device, then callback"""

        # try to get from preferences
        if self.model.conf.get('preferences', 'use_alternate_smsc', False):
            alternate_smsc = self.model.conf.get('preferences', 'smsc_number',
                                                 None)
        else:
            alternate_smsc = None

        # try to get from networks DB
        if self.model.imsi:
            provider = NetworkProvider()
            attrs = provider.get_network_by_id(self.model.imsi)
            if attrs:
                provider_smsc = attrs[0].smsc
            else:
                provider_smsc = None
            provider.close()
        else:
            provider_smsc = None

        # use the one from the best source
        if alternate_smsc is not None:
            logger.info("SMSC used from preferences")
            cb(alternate_smsc)
        elif provider_smsc is not None:
            logger.info("SMSC used from networks DB")
            cb(provider_smsc)
        else:
            logger.info("SMSC used from SIM")
            self.model.device.GetSmsc(dbus_interface=SMS_INTFACE,
                                      reply_handler=cb,
                                      error_handler=eb)
Example #3
0
    def __init__(self, model, imsi, callback):
        super(APNSelectionController, self).__init__(model)

        self.callback = callback

        netdb = NetworkProvider()
        self.apns = netdb.get_network_by_id(imsi)
        netdb.close()
 def get_default_smsc(self, imsi):
     try:
         # create a NetworkProvider object to query our Network DB
         provider = NetworkProvider()
         # ask for our network attributes based on what our SIM is
         nets = provider.get_network_by_id(imsi)
         if not len(nets):
             raise ValueError
         return nets[0].smsc
     except (TypeError, ValueError):
         return None
     finally:
         provider.close()
 def set_network_country_info(self, imsi):
     try:
         provider = NetworkProvider()
         nets = provider.get_network_by_id(imsi)
         if not len(nets):
             raise ValueError
         self.view.set_network_info(nets[0].name)
         self.view.set_country_info(nets[0].country)
     except (TypeError, ValueError):
         self.view.set_network_info(None)
         self.view.set_country_info(None)
     finally:
         provider.close()
 def get_default_smsc(self, imsi):
     try:
         # create a NetworkProvider object to query our Network DB
         provider = NetworkProvider()
         # ask for our network attributes based on what our SIM is
         nets = provider.get_network_by_id(imsi)
         if not len(nets):
             raise ValueError
         return nets[0].smsc
     except (TypeError, ValueError):
         return None
     finally:
         provider.close()
 def set_network_country_info(self, imsi):
     try:
         provider = NetworkProvider()
         nets = provider.get_network_by_id(imsi)
         if not len(nets):
             raise ValueError
         self.view.set_network_info(nets[0].name)
         self.view.set_country_info(nets[0].country)
     except (TypeError, ValueError):
         self.view.set_network_info(None)
         self.view.set_country_info(None)
     finally:
         provider.close()
 def load_smsc(self, sim_data):
     print "preferences: smsc value in model", self.model.smsc_number
     if (self.model.smsc_number.capitalize() == _('Unknown')
             or not self.model.smsc_number):
         logger.warning("self.smsc_number is Unknown or None")
         #create a NetworProvider object to querry our NetworkProvider db
         sim_network = NetworkProvider()
         # ask for our network attributes based on what our sim value is
         networks_attributes = sim_network.get_network_by_id(sim_data)
         if networks_attributes:
             net_attrib = networks_attributes[0]
             print "model: preferences sms value:", net_attrib.smsc
             # tell the view to setup the smsc number. when the user clicks
             # save or changes him self it will be saved.
             self.view.setup_smsc_number(net_attrib.smsc)
 def load_smsc(self, sim_data):
     print "preferences: smsc value in model", self.model.smsc_number
     if (self.model.smsc_number.capitalize() == _('Unknown')
                                     or not self.model.smsc_number):
         logger.warning("self.smsc_number is Unknown or None")
         #create a NetworProvider object to querry our NetworkProvider db
         sim_network = NetworkProvider()
         # ask for our network attributes based on what our sim value is
         networks_attributes = sim_network.get_network_by_id(sim_data)
         if networks_attributes:
             net_attrib = networks_attributes[0]
             print "model: preferences sms value:", net_attrib.smsc
             # tell the view to setup the smsc number. when the user clicks
             # save or changes him self it will be saved.
             self.view.setup_smsc_number(net_attrib.smsc)
        def sim_imsi(imsi):
            logger.info("diagnostics sim_imsi - IMSI number is: " + str(imsi))
            self.view.set_imsi_info(imsi)

            # let's look up what we think this SIM's network is.
            # so we want to display the country and network operator
            provider = NetworkProvider()
            networks_attributes = provider.get_network_by_id(imsi)
            if networks_attributes:
                net_attrib = networks_attributes[0]
                logger.info("diagnostics sim_imsi - country: "
                            + str(net_attrib.country))
                logger.info("diagnostics sim_imsi - network operator: "
                            + str(net_attrib.name))
                self.view.set_network_info(network=net_attrib.name,
                                           country=net_attrib.country)
            provider.close()
Example #11
0
def create_skeleton_and_do_initial_setup():
    """I perform the operations needed for the initial user setup"""
    PLUGINS = join(consts.BASE_DIR, 'usr', 'share', consts.APP_SLUG_NAME,
                    'plugins')

    if os.path.exists(OLDLOCK):
        # old way to signal that the setup is complete
        os.unlink(OLDLOCK)

    # maybe create new networks DB
    provider = NetworkProvider()
    try:
        if provider.is_current():
            log.msg("Networks DB is current")
        else:
            log.msg("Networks DB creation started")
            provider.populate_networks()
            log.msg("Networks DB population complete")
    except Exception, e:
        log.err(str(e))
Example #12
0
 def setUp(self):
     self.provider = NetworkProvider(':memory:')
Example #13
0
class TestNetworkProvider(unittest.TestCase):
    """Tests for the network provider"""

    def setUp(self):
        self.provider = NetworkProvider(':memory:')

    def tearDown(self):
        self.provider.close()

    def create_test_mbpi(self):
        self.mbpi = 'mbpi'

        f = open(self.mbpi, 'w')
        xml = """<?xml version="1.0"?>
<!-- -*- Mode: XML; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- -->
<!DOCTYPE serviceproviders SYSTEM "serviceproviders.2.dtd">

<serviceproviders format="2.0">

<!-- United Arab Emirates -->
<country code="ae">
        <provider>
                <name>Etisalat</name>
                <gsm>
                        <network-id mcc="424" mnc="02"/>
                        <apn value="mnet">
                                <name>Etisalat</name>
                                <username>mnet</username>
                                <password>mnet</password>
                                <dns>194.170.1.6</dns>
                                <dns>194.170.1.7</dns>
                        </apn>
                        <apn value="etisalat.ae">
                                <name>Etisalat 3G</name>
                                <username>etisalat.ae</username>
                                <password>etisalat.ae</password>
                        </apn>
                </gsm>
        </provider>
</country>

<!-- Germany -->
<country code="de">
        <provider>
                <name>Vodafone (D2)</name>
                <gsm>
                        <network-id mcc="262" mnc="02"/>
                        <network-id mcc="262" mnc="04"/>
                        <network-id mcc="262" mnc="09"/>

                        <apn value="web.vodafone.de">
                                <username>vodafone</username>
                                <password>vodafone</password>
                                <dns>139.7.30.125</dns>
                                <dns>139.7.30.126</dns>
                        </apn>
                        <apn value="event.vodafone.de">
                                <name>WebSessions</name>
                                <username>vodafone</username>
                                <password>vodafone</password>
                                <dns>139.7.30.125</dns>
                                <dns>139.7.30.126</dns>
                        </apn>
                </gsm>
        </provider>
</country>

</serviceproviders>
"""
        f.write(xml)
        f.close

    def test_populate_db_from_objs(self):
        networks = [NetworkOperator(["21401"], "prepaid.vodafone.es",
                        "vodafone", "vodafone", "10.0.0.1", "10.0.0.2",
                        TYPE_PREPAID, '+23323232', '+23423232', "Spain",
                        "Vodafone"),
                    NetworkOperator(["21401"], "contract.vodafone.es",
                        "vodafone", "vodafone", "10.0.0.1", "10.0.0.2",
                        TYPE_CONTRACT, '+23123121', '+2132121', "Spain",
                        "Vodafone")]

        self.provider.populate_networks_from_objs(networks)
        # we should get just two objects
        response = self.provider.get_network_by_id("214013241213122")
        self.assertEqual(len(response), 2)
        # leave it as we found it
        c = self.provider.conn.cursor()
        c.execute("delete from network_info where id='21401'")
        response = self.provider.get_network_by_id("214013241213122")
        self.assertEqual(len(response), 0)

    def test_populate_db_from_mbpi_real(self):
        mbpi = '/usr/share/mobile-broadband-provider-info/serviceproviders.xml'
        if not os.path.exists(mbpi):
            raise unittest.SkipTest("No MBPI installed")

        try:
            self.provider.populate_networks_from_mbpi(mbpi)
        except TypeError:
            raise unittest.SkipTest("MBPI is unsupported version")

        c = self.provider.conn.cursor()
        c.execute("select * from network_info")
        response = c.fetchall()
        self.failUnless(len(response) >= 1)

        # leave it as we found it
        c.execute("delete from network_info")

    def test_populate_db_from_networks_py_real(self):
        extra = '../../resources/extra'
        if not os.path.exists(extra):
            raise unittest.SkipTest('Path to "networks.py" not valid')

        sys.path.insert(0, extra)
        import networks

        def is_valid(item):
            return not item.startswith(("__", "Base", "NetworkOperator"))

        self.provider.populate_networks_from_objs([getattr(networks, item)()
                          for item in dir(networks) if is_valid(item)])

        c = self.provider.conn.cursor()

        c.execute("select country from network_info where id = '23415'")
        self.assertEqual(c.fetchone()[0], 'United Kingdom')

        # leave it as we found it
        c.execute("delete from network_info")

    def test_populate_db_from_mbpi_merge_network_no_clash(self):
        networks = [NetworkOperator(["21401"], "Preloaded",
                        "Preloaded", "Preloaded", "10.0.0.1", "10.0.0.2",
                        TYPE_PREPAID, '+23323232', '+23423232', "Spain",
                        "Preloaded")]

        self.provider.populate_networks_from_objs(networks)

        self.create_test_mbpi()
        self.provider.populate_networks_from_mbpi(self.mbpi)

        c = self.provider.conn.cursor()
        c.execute("select * from network_info")
        response = c.fetchall()
        self.assertEqual(len(response), 5)

        # leave it as we found it
        c.execute("delete from network_info")

    def test_populate_db_from_mbpi_merge_network_conflict(self):
        networks = [NetworkOperator(["26202"], "Preloaded",
                        "Preloaded", "Preloaded", "10.0.0.1", "10.0.0.2",
                        TYPE_PREPAID, None, '+23323232', '+23423232', "Germany",
                        "Preloaded")]

        self.provider.populate_networks_from_objs(networks)

        self.create_test_mbpi()
        self.provider.populate_networks_from_mbpi(self.mbpi)

        c = self.provider.conn.cursor()

        # make sure we merged
        c.execute("select * from network_info")
        response = c.fetchall()
        self.assertEqual(len(response), 4)

        # make sure we didn't overwrite the original
        c.execute("select name from network_info where id = '26202'")
        self.assertEqual(c.fetchone()[0], 'Preloaded')

        # leave it as we found it
        c.execute("delete from network_info")

    def test_populate_db_from_mbpi_merge_apn_no_clash(self):
        networks = [NetworkOperator(["21401"], "Preloaded",
                        "Preloaded", "Preloaded", "10.0.0.1", "10.0.0.2",
                        TYPE_PREPAID, '+23323232', '+23423232', "Spain",
                        "Preloaded")]

        self.provider.populate_networks_from_objs(networks)

        self.create_test_mbpi()
        self.provider.populate_networks_from_mbpi(self.mbpi)

        c = self.provider.conn.cursor()

        c.execute("select * from apn")
        response = c.fetchall()
        self.assertEqual(len(response), 9)

        # make sure we prefixed the foreign entry
        c.execute("select type from apn where network_id = '26202'")
        self.assertEqual(c.fetchone()[0][:4], 'MBPI')

        # leave it as we found it
        c.execute("delete from network_info")

    def test_populate_db_from_mbpi_merge_apn_conflict(self):
        networks = [NetworkOperator(["26202"], "Preloaded",
                        "Preloaded", "Preloaded", "10.0.0.1", "10.0.0.2",
                        "Preloaded", '+23323232', '+23423232', "Germany",
                        "Preloaded")]

        self.provider.populate_networks_from_objs(networks)

        self.create_test_mbpi()
        self.provider.populate_networks_from_mbpi(self.mbpi)

        c = self.provider.conn.cursor()

        # make sure we merged and didn't load any apns for the existing nets
        c.execute("select * from apn")
        response = c.fetchall()
        self.assertEqual(len(response), 7)

        # make sure we didn't overwrite the original
        c.execute("select type from apn where network_id = '26202'")
        self.assertEqual(c.fetchone()[0], 'Preloaded')

        # leave it as we found it
        c.execute("delete from network_info")

    def test_assert_passing_netid_raises_exception(self):
        self.assertRaises(ValueError, self.provider.get_network_by_id, "21401")

    def test_get_network_by_id_five_digit_netid(self):
        networks = [NetworkOperator(["21401"], "prepaid.vodafone.es",
                        "vodafone", "vodafone", "10.0.0.1", "10.0.0.2",
                        TYPE_PREPAID, '+23323232', '+23423232', "Spain",
                        "Vodafone"),
                    NetworkOperator(["21401"], "contract.vodafone.es",
                        "vodafone", "vodafone", "10.0.0.1", "10.0.0.2",
                        TYPE_CONTRACT, '+23123121', '+2132121', "Spain",
                        "Vodafone")]

        self.provider.populate_networks_from_objs(networks)
        # we should get just two objects
        response = self.provider.get_network_by_id("2140153241213122")
        self.assertEqual(len(response), 2)
        # leave it as we found it
        c = self.provider.conn.cursor()
        c.execute("delete from network_info where 1=1")

    def test_get_network_by_id_six_digit_netid(self):
        networks = [NetworkOperator(["214016"], "prepaid.vodafone.es",
                        "vodafone", "vodafone", "10.0.0.1", "10.0.0.2",
                        TYPE_PREPAID, '+23323232', '+23423232', "Spain",
                        "Vodafone"),
                    NetworkOperator(["214015"], "contract.vodafone.es",
                        "vodafone", "vodafone", "10.0.0.1", "10.0.0.2",
                        TYPE_CONTRACT, '+23123121', '+2132121', "Spain",
                        "Vodafone")]

        self.provider.populate_networks_from_objs(networks)
        # we should get just two objects
        response = self.provider.get_network_by_id("2140153241213122")
        self.assertEqual(len(response), 1)
        self.assertEqual(response[0].apn, "contract.vodafone.es")
        # leave it as we found it
        c = self.provider.conn.cursor()
        c.execute("delete from network_info where 1=1")

    def test_get_network_by_id_seven_digit_netid(self):
        networks = [NetworkOperator(["2140161"], "prepaid.vodafone.es",
                        "vodafone", "vodafone", "10.0.0.1", "10.0.0.2",
                        TYPE_PREPAID, '+23323232', '+23423232', "Spain",
                        "Vodafone"),
                    NetworkOperator(["2140162"], "contract.vodafone.es",
                        "vodafone", "vodafone", "10.0.0.1", "10.0.0.2",
                        TYPE_CONTRACT, '+23123121', '+2132121', "Spain",
                        "Vodafone")]

        self.provider.populate_networks_from_objs(networks)
        # we should get just two objects
        response = self.provider.get_network_by_id("2140161213322323")
        self.assertEqual(response[0].apn, "prepaid.vodafone.es")
        self.assertEqual(len(response), 1)
        # leave it as we found it
        c = self.provider.conn.cursor()
        c.execute("delete from network_info where 1=1")
Example #14
0
def create_skeleton_and_do_initial_setup():
    """I perform the operations needed for the initial user setup"""
    set_logger()

    if os.path.exists(OLDLOCK):
        # old way to signal that the setup is complete
        os.unlink(OLDLOCK)

    if os.path.exists(consts.NETWORKS_DB):
        # new way to signal that the setup is complete
        provider = NetworkProvider()
        log.msg("startup.py - create_skeleton_and_do_initial_setup - Network.db exists and provider is:" + repr(provider) + "\n")
        nick_debug("startup.py - create_skeleton_and_do_initial_setup - Network.db exists and provider is: " + repr(provider))

        if provider.is_current():
            provider.close()
            log.msg("Networks DB was built from current sources")
            nick_debug("Networks DB was built from current sources")
            return

        provider.close()
        log.msg("Networks DB requires rebuild")
        nick_debug("startup.py - create_skeleton_and_do_initial_setup: Networks DB requires rebuild")
        os.remove(consts.NETWORKS_DB)

    # regenerate plugin cache
    import wader.plugins
    list(getPlugins(IPlugin, package=wader.plugins))

    # create new DB
    provider = NetworkProvider()
    try:
        nick_debug("startup.py - create_skeleton_and_do_initial_setup - create new DB and provider is the object:" +  repr(provider))
        provider.populate_networks()
        nick_debug("startup.py - create_skeleton_and_do_initial_setup - populate_networks complete.")

    except:
        log.err()
    finally:
        provider.close()