diff options
author | Evan Prodromou <evan@controlezvous.ca> | 2008-06-23 00:18:16 -0400 |
---|---|---|
committer | Evan Prodromou <evan@controlezvous.ca> | 2008-06-23 00:18:16 -0400 |
commit | e4f5893f7331325c37d7030b3895a94f23f80e33 (patch) | |
tree | 0cf794103944ac482935af12004c454b5bf3f17f | |
parent | 8b89e1cfb074d9255ab3eb66aa16ee0a01a0db7a (diff) |
normalize jids before comparison
darcs-hash:20080623041816-34904-9a55d96a3e76e27b399706f7247bb715f396366b.gz
-rw-r--r-- | xmppdaemon.php | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/xmppdaemon.php b/xmppdaemon.php index b42e33566..e055182c9 100644 --- a/xmppdaemon.php +++ b/xmppdaemon.php @@ -51,6 +51,14 @@ class XMPPDaemon { return !$this->conn->disconnected; } + function normalize_jid($jid) { + preg_match("/(?:([^\@]+)\@)?([^\/]+)(?:\/(.*))?$/", $jid, $matches); + $node = $matches[1]; + $server = $matches[2]; + $resource = $matches[3]; + return strtolower($node.'@'.$server); + } + function handle() { while(!$this->conn->disconnected) { $payloads = $this->conn->processUntil(array('message', 'presence', @@ -73,9 +81,10 @@ class XMPPDaemon { } function handle_message(&$pl) { - $user = User::staticGet('jabber', $pl['from']); + $from = $this->normalize_jid($pl['from']); + $user = User::staticGet('jabber', $from); if (!$user) { - $this->log(LOG_WARNING, 'Message from unknown user ' . $pl['from']); + $this->log(LOG_WARNING, 'Message from unknown user ' . $from); return; } if ($this->handle_command($user, $pl['body'])) { @@ -147,9 +156,10 @@ class XMPPDaemon { } function handle_presence(&$pl) { - $user = User::staticGet('jabber', $pl['from']); + $from = $this->normalize_jid($pl['from']); + $user = User::staticGet('jabber', $from); if (!$user) { - $this->log(LOG_WARNING, 'Message from unknown user ' . $pl['from']); + $this->log(LOG_WARNING, 'Message from unknown user ' . $from); return; } if ($user->updatefrompresence) { |