Ticket #1654: 3G Support- Pin-Puk-Configuration.patch

File 3G Support- Pin-Puk-Configuration.patch, 10.4 KB (added by Dcastelo, 14 years ago)

3G Support- Pin-Puk-Configuration.patch V1

  • extensions/cpsection/modemconfiguration/model.py

    From efd38029996fd8103377568f8c7141606c0a6600 Mon Sep 17 00:00:00 2001
    From: root <root@localhost.localdomain>
    Date: Thu, 14 Jan 2010 16:04:10 -0200
    Subject: [PATCH 3/3] Pin-Puk Configuration 3G Support
    
    ---
     extensions/cpsection/modemconfiguration/model.py |   12 ++++++
     extensions/cpsection/modemconfiguration/view.py  |   44 +++++++++++++++++++++-
     extensions/deviceicon/network.py                 |   19 +++++++--
     src/jarabe/model/network.py                      |   29 ++++++++++++--
     4 files changed, 93 insertions(+), 11 deletions(-)
    
    diff --git a/extensions/cpsection/modemconfiguration/model.py b/extensions/cpsection/modemconfiguration/model.py
    index 0a6bcae..bf3c51f 100644
    a b def get_number(): 
    3030def get_apn():
    3131    return get_storage().get_apn()
    3232
     33def get_pin():
     34    return get_storage().get_pin()
     35
     36def get_puk():
     37    return get_storage().get_puk()
     38
    3339def set_username(username):
    3440    get_storage().set_username(username)
    3541
    def set_number(number): 
    4248def set_apn(apn):
    4349    get_storage().set_apn(apn)
    4450
     51def set_pin(pin):
     52    get_storage().set_pin(pin)
     53   
     54def set_puk(puk):
     55    get_storage().set_puk(puk)
     56   
    4557def get_storage():
    4658    global _storage
    4759
  • extensions/cpsection/modemconfiguration/view.py

    diff --git a/extensions/cpsection/modemconfiguration/view.py b/extensions/cpsection/modemconfiguration/view.py
    index 7b65321..c5911db 100644
    a b class ApnEntry(GsmEntry): 
    102102    def set_method(self, apn):
    103103        return self._model.set_apn(apn)
    104104
     105class PinEntry(GsmEntry):
     106    def __init__(self, model):
     107        GsmEntry.__init__(self)
     108        self._model = model
     109
     110    def get_method(self):
     111        return self._model.get_pin()
     112
     113    def set_method(self, pin):
     114        return self._model.set_pin(pin)
     115
     116class PukEntry(GsmEntry):
     117    def __init__(self, model):
     118        GsmEntry.__init__(self)
     119        self._model = model
     120
     121    def get_method(self):
     122        return self._model.get_puk()
     123
     124    def set_method(self, puk):
     125        return self._model.set_puk(puk)
     126
     127
    105128class ModemConfiguration(SectionView):
    106129    def __init__(self, model, alerts=None):
    107130        SectionView.__init__(self)
    class ModemConfiguration(SectionView): 
    129152        apn_field = self._create_field(self._apn_entry, _('APN:'))
    130153        self.pack_start(apn_field, False)
    131154
     155        self._pin_entry = PinEntry(model)
     156        pin_field = self._create_field(self._pin_entry, _('PIN:'))
     157        self.pack_start(pin_field, False)
     158       
     159        self._puk_entry = PukEntry(model)
     160        puk_field = self._create_field(self._puk_entry, _('PUK:'))
     161        self.pack_start(puk_field, False)       
     162
    132163        self.setup()
    133164
    134165    def _create_field(self, entry, label_text):
    class ModemConfiguration(SectionView): 
    148179        self._password_entry.set_text_from_model()
    149180        self._number_entry.set_text_from_model()
    150181        self._apn_entry.set_text_from_model()
     182        self._pin_entry.set_text_from_model()
     183        self._puk_entry.set_text_from_model()
    151184
    152185        self.needs_restart = False
    153186
    class ModemConfiguration(SectionView): 
    155188        self._password_entry.connect_changed(self.__changed_cb)
    156189        self._number_entry.connect_changed(self.__changed_cb)
    157190        self._apn_entry.connect_changed(self.__changed_cb)
     191        self._pin_entry.connect_changed(self.__changed_cb)
     192        self._puk_entry.connect_changed(self.__changed_cb)
     193
    158194
    159195    def undo(self):
    160196        self._username_entry.disconnect_changed()
    161197        self._password_entry.disconnect_changed()
    162198        self._number_entry.disconnect_changed()
    163199        self._apn_entry.disconnect_changed()
     200        self._pin_entry.disconnect_changed()
     201        self._puk_entry.disconnect_changed()
    164202
    165203        self._model.undo()
    166204
    class ModemConfiguration(SectionView): 
    168206        if self._username_entry.is_valid and \
    169207            self._password_entry.is_valid and \
    170208                self._number_entry.is_valid and \
    171                     self._apn_entry.is_valid:
    172                         self.props.is_valid = True
     209                    self._apn_entry.is_valid and \
     210                        self._pin_entry.is_valid and \
     211                            self._puk_entry.is_valid:
     212                            self.props.is_valid = True
    173213        else:
    174214            self.props.is_valid = False
    175215
  • extensions/deviceicon/network.py

    diff --git a/extensions/deviceicon/network.py b/extensions/deviceicon/network.py
    index 088fbd0..28051af 100644
    a b _GSM_STATE_NOT_READY = 0 
    7070_GSM_STATE_DISCONNECTED = 1
    7171_GSM_STATE_CONNECTING = 2
    7272_GSM_STATE_CONNECTED = 3
     73_GSM_STATE_NEED_AUTH = 4
    7374
    7475def frequency_to_channel(frequency):
    7576    ftoc = { 2412: 1, 2417: 2, 2422: 3, 2427: 4,
    class GsmPalette(Palette): 
    275276        elif self._current_state == _GSM_STATE_CONNECTED:
    276277            self._toggle_state_item.get_child().set_label(_('Disconnect'))
    277278            self.props.secondary_text = _('Connected')
     279           
     280        elif self._current_state == _GSM_STATE_NEED_AUTH:
     281            self._toggle_state_item.get_child().set_label(_('Sim requires Pin/Puk'))
     282            self.props.secondary_text = _('Authentication Error')
     283           
    278284        else:
    279285            logging.error('Invalid GSM state while updating label and text, %s', str(self._current_state))
    280286
    class GsmPalette(Palette): 
    290296
    291297        elif self._current_state == _GSM_STATE_CONNECTED:
    292298            self.emit('gsm-disconnect')
     299           
     300        elif self._current_state == _GSM_STATE_NEED_AUTH:
     301            self.emit('gsm-disconnect')
    293302        else:
    294303            logging.error('Invalid GSM state while emitting signal, %s', str(self._current_state))
    295 
     304           
    296305class WirelessDeviceView(ToolButton):
    297306
    298307    _ICON_NAME = 'network-wireless'
    class GsmDeviceView(TrayIcon): 
    626635            if connection is not None:
    627636                obj = self._bus.get_object(_NM_SERVICE, _NM_PATH)
    628637                netmgr = dbus.Interface(obj, _NM_IFACE)
    629 
    630638                netmgr.ActivateConnection(network.SETTINGS_SERVICE,
    631639                                          connection.path,
    632640                                          self._device.object_path,
    class GsmDeviceView(TrayIcon): 
    635643            logging.exception('Could not connect to gsm connection, %s', detail)
    636644
    637645    def __gsm_disconnect_cb(self, palette, data=None):
    638 
    639646        obj = self._bus.get_object(_NM_SERVICE, _NM_PATH)
    640647        netmgr = dbus.Interface(obj, _NM_IFACE)
    641648        netmgr_props = dbus.Interface(netmgr, 'org.freedesktop.DBus.Properties')
    class GsmDeviceView(TrayIcon): 
    653660        pass
    654661
    655662    def __state_changed_cb(self, new_state, old_state, reason):
     663        logging.debug('State: %s to %s, reason %s', old_state, new_state, reason)
    656664        self._update_state(int(new_state))
    657665
    658666    def __current_state_check_cb(self, properties):
    class GsmDeviceView(TrayIcon): 
    687695
    688696        elif state in [_NM_DEVICE_STATE_PREPARE, _NM_DEVICE_STATE_CONFIG, _NM_DEVICE_STATE_IP_CONFIG]:
    689697            gsm_state = _GSM_STATE_CONNECTING
    690 
     698           
     699        elif state in [_NM_DEVICE_STATE_NEED_AUTH]:
     700            gsm_state = _GSM_STATE_NEED_AUTH
     701           
    691702        if self._palette is not None:
    692703            self._palette.set_state(gsm_state)
    693704
  • src/jarabe/model/network.py

    diff --git a/src/jarabe/model/network.py b/src/jarabe/model/network.py
    index 18c15d0..e9dca5e 100644
    a b GSM_USERNAME_PATH = '/sugar/nm/gsm/username' 
    9191GSM_PASSWORD_PATH = '/sugar/nm/gsm/password'
    9292GSM_NUMBER_PATH = '/sugar/nm/gsm/number'
    9393GSM_APN_PATH = '/sugar/nm/gsm/apn'
     94GSM_PIN_PATH = '/sugar/nm/gsm/pin'
     95GSM_PUK_PATH = '/sugar/nm/gsm/puk'
    9496
    9597_nm_settings = None
    9698_conn_counter = 0
    class SettingsGsm(object): 
    261263class SecretsGsm(object):
    262264    def __init__(self):
    263265        self.password = None
    264 
     266        self.pin = None
     267        self.puk = None
     268       
    265269    def get_dict(self):
    266270        secrets = {}
    267271        if self.password is not None:
    268272            secrets['password'] = self.password
     273        if self.pin is not None:
     274            secrets['pin'] = self.pin
     275        if self.puk is not None:   
     276            secrets['puk'] = self.puk
    269277        return {'gsm': secrets}
    270278
    271279class NMSettings(dbus.service.Object):
    class NMSettingsConnection(dbus.service.Object): 
    409417    def GetSecrets(self, setting_name, hints, request_new, reply, error):
    410418        logging.debug('Secrets requested for connection %s request_new=%s',
    411419            self.path, request_new)
    412 
    413420        if request_new or self._secrets is None:
    414421            # request_new is for example the case when the pw on the AP changes
    415422            response = SecretsResponse(self, reply, error)
    class StorageGsm(object): 
    541548    def get_apn(self):
    542549        return self.verified(self._client.get_string(GSM_APN_PATH))
    543550
     551    def get_pin(self):
     552        return self.verified(self._client.get_string(GSM_PIN_PATH))
     553
     554    def get_puk(self):
     555        return self.verified(self._client.get_string(GSM_PUK_PATH))
     556
    544557    def set_username(self, username):
    545558        self._client.set_string(GSM_USERNAME_PATH, username)
    546559
    class StorageGsm(object): 
    553566    def set_apn(self, apn):
    554567        self._client.set_string(GSM_APN_PATH, apn)
    555568
     569    def set_pin(self, pin):
     570        self._client.set_string(GSM_PIN_PATH, pin)
     571       
     572    def set_puk(self, puk):
     573        self._client.set_string(GSM_PUK_PATH, puk)
     574
    556575    def verified(self, value):
    557576        if value is None:
    558577            return ''
    def load_gsm_connection(): 
    665684        settings.gsm.username = storage.get_username()
    666685        settings.gsm.number = storage.get_number()
    667686        settings.gsm.apn = storage.get_apn()
     687       
    668688        password = storage.get_password()
    669 
     689        secrets.pin = storage.get_pin()
     690        secrets.puk = storage.get_puk()
    670691    except ValueError, detail:
    671692        logging.exception('While reading gsm settings from storage, %s', detail)
    672 
    673693    else:
    674694        if password:
    675695            secrets.password = password
    676 
    677696        settings.connection.id = 'gsm'
    678697        settings.connection.type = NM_CONNECTION_TYPE_GSM
    679698        uuid = settings.connection.uuid = unique_id()