mirror of
				https://gitea.osmocom.org/cellular-infrastructure/osmo-mgw.git
				synced 2025-11-04 05:53:26 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			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()
 | 
						|
 |