summaryrefslogtreecommitdiff
path: root/server/piztor/server.py
diff options
context:
space:
mode:
Diffstat (limited to 'server/piztor/server.py')
-rw-r--r--server/piztor/server.py46
1 files changed, 25 insertions, 21 deletions
diff --git a/server/piztor/server.py b/server/piztor/server.py
index ed4e0b9..3bd1a2c 100644
--- a/server/piztor/server.py
+++ b/server/piztor/server.py
@@ -19,10 +19,7 @@ from model import *
def get_hex(data):
return "".join([hex(ord(c))[2:].zfill(2) for c in data])
-def get_sec_id(comp_id, sec_no):
- return comp_id * 256 + sec_no
-
-db_path = "root:helloworld@localhost/piztor"
+db_path = "root:helloworld@localhost/piztor2"
#db_path = "piztor.sqlite"
FORMAT = "%(asctime)-15s %(message)s"
logging.basicConfig(format = FORMAT)
@@ -292,10 +289,22 @@ class LocationUpdateHandler(RequestHandler):
self.session.commit()
pt = RequestHandler.push_tunnels
- ulist = self.session.query(UserModel) \
- .filter(UserModel.sec_id == uauth.user.sec_id).all()
- pdata = PushLocationData(uauth.uid, lat, lng)
- for user in ulist:
+ u = uauth.user
+ comp = self.session.query(GroupInfo) \
+ .filter(GroupInfo.id == u.comp_id).one()
+ sec = self.session.query(GroupInfo) \
+ .filter(GroupInfo.id == u.sec_id).one()
+
+ pdata = PushLocationData(u.id, lat, lng)
+ for user in comp.subscribers:
+ uid = user.id
+ if uid == uauth.uid: continue
+ if pt.has_key(uid):
+ tunnel = pt[uid]
+ tunnel.add(pdata)
+ tunnel.push()
+
+ for user in sec.subscribers:
uid = user.id
if uid == uauth.uid: continue
if pt.has_key(uid):
@@ -327,13 +336,13 @@ class LocationInfoHandler(RequestHandler):
username, tail = RequestHandler.trunc_padding(tr_data[32:])
if username is None:
raise struct.error
- comp_id, sec_no = struct.unpack("!BB", tail)
+ comp_no, sec_no = struct.unpack("!BB", tail)
except struct.error:
raise BadReqError("Location request: Malformed request body")
logger.info("Trying to request locatin with " \
- "(token = {0}, comp_id = {1}, sec_no = {2})" \
- .format(get_hex(token), comp_id, sec_no))
+ "(token = {0}, comp_no = {1}, sec_no = {2})" \
+ .format(get_hex(token), comp_no, sec_no))
uauth = RequestHandler.get_uauth(token, username, self.session)
# Auth failure
@@ -343,13 +352,9 @@ class LocationInfoHandler(RequestHandler):
_OptCode.location_info,
_StatusCode.failure)
- if sec_no == 0xff: # All members in the company
- ulist = self.session.query(UserModel) \
- .filter(UserModel.comp_id == comp_id).all()
- else:
- sec_id = get_sec_id(comp_id, sec_no)
- ulist = self.session.query(UserModel) \
- .filter(UserModel.sec_id == sec_id).all()
+ ulist = self.session.query(UserModel) \
+ .filter(UserModel.sec_id ==
+ UserModel.to_gid(comp_no, sec_no)).all()
reply = struct.pack(
"!LBB",
self._response_size(len(ulist)),
@@ -363,7 +368,7 @@ class LocationInfoHandler(RequestHandler):
return reply
def pack_gid(user):
- return struct.pack("!BB", user.comp_id, user.sec_no)
+ return struct.pack("!H", user.sec_id)
def pack_sex(user):
return struct.pack("!B", 0x01 if user.sex else 0x00)
@@ -557,9 +562,8 @@ class SendTextMessageHandler(RequestHandler):
pt = RequestHandler.push_tunnels
u = uauth.user
- sec_id = get_sec_id(u.comp_id, u.sec_no)
ulist = self.session.query(UserModel) \
- .filter(UserModel.sec_id == sec_id).all()
+ .filter(UserModel.sec_id == u.sec_id).all()
for user in ulist:
uid = user.id