126 lines
3.5 KiB
Python
Executable File
126 lines
3.5 KiB
Python
Executable File
#!/usr/bin/python2.5
|
|
|
|
from __future__ import with_statement
|
|
|
|
from pysqlite2 import dbapi2 as sqlite3
|
|
import sys
|
|
|
|
hlr = sqlite3.connect(sys.argv[1])
|
|
web = sqlite3.connect(sys.argv[2])
|
|
|
|
# switch to autocommit
|
|
hlr.isolation_level = None
|
|
web.isolation_level = None
|
|
|
|
hlr.row_factory = sqlite3.Row
|
|
web.row_factory = sqlite3.Row
|
|
|
|
with hlr:
|
|
hlr_subscrs = hlr.execute("""
|
|
SELECT * FROM Subscriber
|
|
""").fetchall()
|
|
hlr_tokens = hlr.execute("""
|
|
SELECT * FROM AuthToken
|
|
""").fetchall()
|
|
|
|
with web:
|
|
web_tokens = web.execute("""
|
|
SELECT * FROM reg_tokens
|
|
""").fetchall()
|
|
web_sms = web.execute("""
|
|
SELECT * FROM sms_queue
|
|
""").fetchall()
|
|
|
|
# index by subscr id
|
|
hlr_subscrs_by_id = {}
|
|
hlr_subscrs_by_ext = {}
|
|
hlr_tokens_by_subscr_id = {}
|
|
for x in hlr_subscrs:
|
|
hlr_subscrs_by_id[x['id']] = x
|
|
hlr_subscrs_by_ext[x['extension']] = x
|
|
del hlr_subscrs
|
|
for x in hlr_tokens:
|
|
hlr_tokens_by_subscr_id[x['subscriber_id']] = x
|
|
del hlr_tokens
|
|
|
|
web_tokens_by_subscr_id = {}
|
|
for x in web_tokens:
|
|
web_tokens_by_subscr_id[x['subscriber_id']] = x
|
|
del web_tokens
|
|
|
|
# remove leftover web_tokens and correct inconsistent fields
|
|
with web:
|
|
for x in web_tokens_by_subscr_id.values():
|
|
subscr = hlr_subscrs_by_id.get(x['subscriber_id'], None)
|
|
if subscr is None:
|
|
web.execute("""
|
|
DELETE FROM reg_tokens WHERE subscriber_id = ?
|
|
""", (x['subscriber_id'],))
|
|
del web_tokens_by_subscr_id[x['subscriber_id']]
|
|
continue
|
|
if str(x['imsi']) != str(subscr['imsi']) or \
|
|
x['extension'] != subscr['extension'] or \
|
|
x['tmsi'] != subscr['tmsi'] or \
|
|
x['lac'] != subscr['lac']:
|
|
web.execute("""
|
|
UPDATE reg_tokens
|
|
SET imsi = ?, extension = ?, tmsi = ?, lac = ?
|
|
WHERE subscriber_id = ?
|
|
""", (str(subscr['imsi']), subscr['extension'],
|
|
subscr['tmsi'], subscr['lac'], x['subscriber_id']))
|
|
|
|
# add missing web_tokens
|
|
with web:
|
|
for x in hlr_tokens_by_subscr_id.values():
|
|
subscr = hlr_subscrs_by_id.get(x['subscriber_id'], None)
|
|
if subscr is None:
|
|
hlr.execute("""
|
|
DELETE FROM AuthToken WHERE subscriber_id = ?
|
|
""", (x['subscriber_id'],))
|
|
del hlr_tokens_by_subscr_id[x['subscriber_id']]
|
|
continue
|
|
webtoken = web_tokens_by_subscr_id.get(x['subscriber_id'], None)
|
|
if webtoken is None:
|
|
web.execute("""
|
|
INSERT INTO reg_tokens
|
|
(subscriber_id, extension, reg_completed, name, email, lac, imsi, token, tmsi)
|
|
VALUES
|
|
(?, ?, 0, ?, '', ?, ?, ?, ?)
|
|
""", (x['subscriber_id'], subscr['extension'], subscr['name'],
|
|
subscr['lac'], str(subscr['imsi']), x['token'], subscr['tmsi']))
|
|
|
|
# authorize subscribers
|
|
with hlr:
|
|
for x in web_tokens_by_subscr_id.values():
|
|
subscr = hlr_subscrs_by_id.get(x['subscriber_id'], None)
|
|
if x['reg_completed'] and not subscr['authorized']:
|
|
hlr.execute("""
|
|
UPDATE Subscriber
|
|
SET authorized = 1
|
|
WHERE id = ?
|
|
""", (x['subscriber_id'],))
|
|
|
|
# Sync SMS from web to hlr
|
|
with hlr:
|
|
for sms in web_sms:
|
|
subscr = hlr_subscrs_by_ext.get(sms['receiver_ext'])
|
|
if subscr is None:
|
|
print '%s not found' % sms['receiver_ext']
|
|
continue
|
|
hlr.execute("""
|
|
INSERT INTO SMS
|
|
(created, sender_id, receiver_id, reply_path_req, status_rep_req, protocol_id, data_coding_scheme, ud_hdr_ind, text)
|
|
VALUES
|
|
(?, 1, ?, 0, 0, 0, 0, 0, ?)
|
|
""", (sms['created'], subscr['id'], sms['text']))
|
|
with web:
|
|
for sms in web_sms:
|
|
web.execute("""
|
|
DELETE FROM sms_queue WHERE id = ?
|
|
""", (sms['id'],))
|
|
|
|
|
|
hlr.close()
|
|
web.close()
|
|
|