data =& $data; if (preg_match('/pr\(UCBrowser/u', $header)) { if (!$this->data->isBrowser('UC Browser')) { $this->data->browser->name = 'UC Browser'; $this->data->browser->stock = false; $this->data->browser->version = null; if (preg_match('/pr\(UCBrowser(?:\/([0-9\.]+))/u', $header, $match)) { $this->data->browser->version = new Version([ 'value' => $match[1], 'details' => 2 ]); } } } /* Find os */ if (preg_match('/pf\(Java\)/u', $header)) { if (preg_match('/dv\(([^\)]*)\)/u', $header, $match)) { if ($this->identifyBasedOnModel($match[1])) { return; } } } if (preg_match('/pf\(Linux\)/u', $header) && preg_match('/ov\((?:Android )?([0-9\.]+)/u', $header, $match)) { $this->data->os->name = 'Android'; $this->data->os->version = new Version([ 'value' => $match[1] ]); } if (preg_match('/pf\(Symbian\)/u', $header) && preg_match('/ov\(S60V([0-9])/u', $header, $match)) { if (!$this->data->isOs('Series60')) { $this->data->os->name = 'Series60'; $this->data->os->version = new Version([ 'value' => $match[1] ]); } } if (preg_match('/pf\(Windows\)/u', $header) && preg_match('/ov\(wds ([0-9]+\.[0-9]+)/u', $header, $match)) { if (!$this->data->isOs('Windows Phone')) { $this->data->os->name = 'Windows Phone'; switch ($match[1]) { case '7.1': $this->data->os->version = new Version([ 'value' => '7.5' ]); break; case '8.0': $this->data->os->version = new Version([ 'value' => '8.0' ]); break; case '8.1': $this->data->os->version = new Version([ 'value' => '8.1' ]); break; case '10.0': $this->data->os->version = new Version([ 'value' => '10.0' ]); break; } } } if (preg_match('/pf\((?:42|44)\)/u', $header) && preg_match('/ov\((?:iPh OS )?(?:iOS )?([0-9\_]+)/u', $header, $match)) { if (!$this->data->isOs('iOS')) { $this->data->os->name = 'iOS'; $this->data->os->version = new Version([ 'value' => str_replace('_', '.', $match[1]) ]); } } /* Find engine */ if (preg_match('/re\(AppleWebKit\/([0-9\.]+)/u', $header, $match)) { $this->data->engine->name = 'Webkit'; $this->data->engine->version = new Version([ 'value' => $match[1] ]); } /* Find device */ if ($this->data->isOs('Android')) { if (preg_match('/dv\((.*)\)/uU', $header, $match)) { $match[1] = preg_replace("/\s+Build/u", '', $match[1]); $device = Data\DeviceModels::identify('android', $match[1]); if ($device) { $this->data->device = $device; } } } if ($this->data->isOs('Series60')) { if (preg_match('/dv\((?:Nokia)?([^\)]*)\)/iu', $header, $match)) { $device = Data\DeviceModels::identify('symbian', $match[1]); if ($device) { $this->data->device = $device; } } } if ($this->data->isOs('Windows Phone')) { if (preg_match('/dv\(([^\)]*)\)/u', $header, $match)) { $device = Data\DeviceModels::identify('wp', substr(strstr($match[1], ' '), 1)); if ($device) { $this->data->device = $device; } } } if ($this->data->isOs('iOS')) { if (preg_match('/dv\(([^\)]*)\)/u', $header, $match)) { $device = Data\DeviceModels::identify('ios', $match[1]); if ($device) { $this->data->device = $device; } } } } private function identifyBasedOnModel($model) { $model = preg_replace('/^Nokia/iu', '', $model); $device = Data\DeviceModels::identify('symbian', $model); if ($device->identified) { $device->identified |= $this->data->device->identified; $this->data->device = $device; if (!isset($this->data->os->name) || $this->data->os->name != 'Series60') { $this->data->os->name = 'Series60'; $this->data->os->version = null; $this->data->os->family = new Family([ 'name' => 'Symbian' ]); } return true; } $device = Data\DeviceModels::identify('s40', $model); if ($device->identified) { $device->identified |= $this->data->device->identified; $this->data->device = $device; if (!isset($this->data->os->name) || $this->data->os->name != 'Series40') { $this->data->os->name = 'Series40'; $this->data->os->version = null; } return true; } $device = Data\DeviceModels::identify('bada', $model); if ($device->identified) { $device->identified |= $this->data->device->identified; $this->data->device = $device; if (!isset($this->data->os->name) || $this->data->os->name != 'Bada') { $this->data->os->name = 'Bada'; $this->data->os->version = null; } return true; } $device = Data\DeviceModels::identify('touchwiz', $model); if ($device->identified) { $device->identified |= $this->data->device->identified; $this->data->device = $device; if (!isset($this->data->os->name) || $this->data->os->name != 'Touchwiz') { $this->data->os->name = 'Touchwiz'; $this->data->os->version = null; } return true; } } }