NCBI C++ ToolKit
user_agent.hpp
Go to the documentation of this file.

Go to the SVN repository for this file.

1 #ifndef CGI___USER_AGENT__HPP
2 #define CGI___USER_AGENT__HPP
3 
4 /* $Id: user_agent.hpp 87394 2019-08-26 15:27:08Z vasilche $
5  * ===========================================================================
6  *
7  * PUBLIC DOMAIN NOTICE
8  * National Center for Biotechnology Information
9  *
10  * This software/database is a "United States Government Work" under the
11  * terms of the United States Copyright Act. It was written as part of
12  * the author's official duties as a United States Government employee and
13  * thus cannot be copyrighted. This software/database is freely available
14  * to the public for use. The National Library of Medicine and the U.S.
15  * Government have not placed any restriction on its use or reproduction.
16  *
17  * Although all reasonable efforts have been taken to ensure the accuracy
18  * and reliability of the software and data, the NLM and the U.S.
19  * Government do not and cannot warrant the performance or results that
20  * may be obtained by using this software or data. The NLM and the U.S.
21  * Government disclaim all warranties, express or implied, including
22  * warranties of performance, merchantability or fitness for any particular
23  * purpose.
24  *
25  * Please cite the author in any work or product based on this material.
26  *
27  * ===========================================================================
28  *
29  * Authors: Vladimir Ivanov
30  *
31  */
32 
33 /// @file user_agent.hpp
34 /// API to parse user agent strings.
35 ///
36 
37 #include <corelib/version_api.hpp>
38 
39 /** @addtogroup CGI
40  *
41  * @{
42  */
43 
45 
46 
47 /// User agent version info
49 
50 
51 /////////////////////////////////////////////////////////////////////////////
52 ///
53 /// CCgiUserAgent --
54 ///
55 /// Define class to parse user agent strings.
56 /// Basically, support only Mozilla 'compatible' format.
57 ///
59 {
60 public:
61  /// Comparison and parsing flags.
62  enum EFlags {
63  /// Case insensitive compare, by default it is case sensitive
64  fNoCase = (1 << 1),
65  /// Use external pattern list from registry/environment to check
66  /// on bots, off by default
67  fUseBotPatterns = (1 << 2),
68  /// Use external pattern lists from registry/environment to check
69  /// on phone/tablet/mobile device when parsing, off by default
70  fUseDevicePatterns = (1 << 3)
71  };
72  typedef unsigned int TFlags; ///< Binary OR of "EFlags"
73 
74  /// Default constructor.
75  /// Parse environment variable HTTP_USER_AGENT.
77 
78  /// Constructor.
79  /// Parse the user agent string passed into the constructor.
80  /// @note
81  /// Some registry/environment parameters can affect user agent parsing.
82  /// All such features are off by default for better performance, see EFlags.
83  /// But they will be used regardless of specified flags in
84  /// IsBot/IsMobileDevice/IsTabletDevice methods.
85  CCgiUserAgent(const string& user_agent, TFlags flags = 0);
86 
87  /// Parse new user agent string.
88  void Reset(const string& user_agent);
89 
90  /// Browser types.
91  enum EBrowser {
92  eUnknown = 0, ///< Unknown user agent
93 
94  eIE, ///< Microsoft Internet Explorer (www.microsoft.com/windows/ie)
95  eEdge, ///< Microsoft Edge (www.microsoft.com)
96  eiCab, ///< iCab (www.icab.de)
97  eLynx, ///< Lynx (lynx.browser.org)
98  eNetscape, ///< Netscape (Navigator), versions >=6 are Gecko-based (www.netscape.com)
99  eOpera, ///< Opera (www.opera.com)
100  eOregano, ///< Oregano (www.castle.org.uk/oregano)
101  ePapers, ///< Papers (papersapp.com)
102  eUCBrowser, ///< UC Browser (www.ucweb.com/ucbrowser)
103  eW3m, ///< w3m (www.w3m.org)
104  eNagios, ///< check_http/nagios-plugins (nagiosplugins.org)
105 
106  // Gecko-based browsers
107  eBeonex, ///< Beonex Communicator (www.beonex.com)
108  eCamino, ///< Camino (www.caminobrowser.org)
109  eChimera, ///< Chimera (chimera.mozdev.org)
110  eFirefox, ///< Firefox (www.mozilla.org/products/firefox)
111  eFlock, ///< Flock (www.flock.com)
112  eIceCat, ///< GNU IceCat (http://www.gnu.org/software/gnuzilla)
113  eIceweasel, ///< Debian Iceweasel (www.geticeweasel.org)
114  eGaleon, ///< Galeon (galeon.sourceforge.net)
115  eGranParadiso, ///< GranParadiso (www.mozilla.org)
116  eKazehakase, ///< Kazehakase (kazehakase.sourceforge.jp)
117  eKMeleon, ///< K-Meleon (kmeleon.sf.net)
118  eKNinja, ///< K-Ninja Samurai (k-ninja-samurai.en.softonic.com)
119  eMadfox, ///< Madfox (www.splyb.com/madfox)
120  eMultiZilla, ///< MultiZilla (multizilla.mozdev.org)
121  eSeaMonkey, ///< SeaMonkey (www.mozilla.org/projects/seamonkey)
122 
123  // IE-based
124  eAcooBrowser, ///< Acoo Browser (www.acoobrowser.com)
125  eAOL, ///< America Online Browser (www.aol.com)
126  eAvantBrowser, ///< Avant Browser (www.avantbrowser.com)
127  eCrazyBrowser, ///< Crazy Browser (www.crazybrowser.com)
128  eEnigmaBrowser, ///< Enigma Browser (www.suttondesigns.com)
129  eIRider, ///< iRider (www.irider.com)
130  eMaxthon, ///< Maxthon/MyIE2 (www.maxthon.com)
131  eNetCaptor, ///< NetCaptor (www.netcaptor.com)
132 
133  // Blink/WebKit/KHTML based
134  eChrome, ///< Google Chrome (www.google.com/chrome)
135  eFluid, ///< Fluid (fluidapp.com)
136  eKonqueror, ///< Konqueror (www.konqueror.org) (KHTML based since v3.2 ?)
137  eMidori, ///< Midori
138  eNetNewsWire, ///< NetNewsWire (www.apple.com)
139  eOmniWeb, ///< OmniWeb (www.omnigroup.com/applications/omniweb)
140  eQtWeb, ///< QtWeb (www.qtweb.net)
141  eSafari, ///< Safari (www.apple.com/safari)
142  eShiira, ///< Shiira (hmdt-web.net/shiira/en)
143  eStainless, ///< Stainless (www.stainlessapp.com)
144 
145  /// Search robots/bots/validators
146  eCrawler, ///< Class: crawlers / search robots
147  eOfflineBrowser, ///< Class: offline browsers
148  eScript, ///< Class: script tools (perl/php/...)
149  eLinkChecker, ///< Class: link checkers
150  eWebValidator, ///< Class: validators
151 
152  /// Mobile devices (browsers and services for: telephones, smartphones, tablets and etc)
153  /// Some mobile devices use standard browsers, like Opera or Safari -- see browser platform,
154  /// if you need a check on mobile device.
155 
156  // See: http://www.zytrax.com/tech/web/mobile_ids.html
157 
158  eAirEdge, ///< AIR-EDGE (www.willcom-inc.com/en/)
159  eAvantGo, ///< AvantGo (www.sybase.com/avantgo)
160  eBlackberry, ///< Blackberry (www.blackberry.com)
161  eDoCoMo, ///< DoCoMo (www.nttdocomo.com)
162  eEudoraWeb, ///< EudoraWeb (www.eudora.com)
163  eMinimo, ///< Minimo (www.mozilla.org/projects/minimo)
164  eNetFront, ///< NetFront (www.access-company.com)
165  eOperaMini, ///< Opera Mini (www.opera.com/mini)
166  eOperaMobile, ///< Opera Mobile (www.opera.com/mobile)
167  eOpenWave, ///< OpenWave/UP.Browser (www.openwave.com)
168  ePIE, ///< Pocket IE (www.reensoft.com/PIEPlus)
169  ePlucker, ///< Plucker (www.plkr.org)
170  ePocketLink, ///< PocketLink (www.mobilefan.net)
171  ePolaris, ///< Polaris Browser (www.infraware.co.kr)
172  eReqwireless, ///< Reqwireless Webviewer
173  eSafariMobile, ///< Mobile Safari (www.apple.com/safari)
174  eSEMCBrowser, ///< Sony Ericsson SEMC-Browser (www.sonyericsson.com)
175  eTelecaObigo, ///< Teleca/Obigo (www.teleca.com / www.obigo.com)
176  euZardWeb, ///< uZard Web (www.uzard.com)
177  eVodafone, ///< Ex J-Phone, now Vodafone Live! (www.vodafone.com)
178  eXiino, ///< Xiino (www.ilinx.co.jp/en/)
179 
180  /// Any other Gecko-based not from the list above,
181  /// Mozilla version >= 5.0
182  eMozilla, ///< Mozilla/other Gecko-based (www.mozilla.com)
183 
184  /// Any other not from list above.
185  /// User agent string starts with "Mozilla/x.x (compatible;*".
186  /// Not Gecko-based.
187  eMozillaCompatible ///< Mozilla-compatible
188  };
189 
190  /// Browser engine types.
192  eEngine_Unknown = eUnknown, ///< Unknown engine
193  eEngine_IE = eIE, ///< Microsoft Internet Explorer (Trident and etc)
194  eEngine_Edge = eEdge, ///< Microsoft Edge
195  eEngine_Gecko = eMozilla, ///< Gecko-based
196  eEngine_KHTML = eKonqueror, ///< KHTML-based
197  eEngine_WebKit = eSafari, ///< Apple WebKit (KHTML fork)
198  eEngine_Blink = eChrome, ///< Google Blink (WebKit/537.36 fork)
199  eEngine_Bot = eCrawler ///< Search robot/bot/checker/...
200  };
201 
202  /// Platform types
204  ePlatform_Unknown = eUnknown, ///< Unknown OS
205  ePlatform_Windows, ///< Microsoft Windows
206  ePlatform_Mac, ///< MacOS
207  ePlatform_Unix, ///< Unix
208 
209  // Mobile devices (telephones, smart phones, tablets and etc...)
210  ePlatform_Android, ///< Android
211  ePlatform_Palm, ///< PalmOS
212  ePlatform_Symbian, ///< SymbianOS
213  ePlatform_WindowsCE, ///< Microsoft Windows CE (+ Windows Mobile)
214  ePlatform_MobileDevice ///< Other mobile devices or services
215  };
216 
217  /// Get user agent string.
218  string GetUserAgentStr(void) const
219  { return m_UserAgent; }
220 
221  /// Get browser type.
222  EBrowser GetBrowser(void) const
223  { return m_Browser; }
224 
225  /// Get browser name.
226  ///
227  /// @return
228  /// Browser name or empty string for unknown browser
229  /// @sa GetBrowser
230  const string& GetBrowserName(void) const
231  { return m_BrowserName; }
232 
233  /// Get browser engine type and name.
234  /// @sa EBrowserEngine
236  { return m_Engine; }
237  string GetEngineName(void) const;
238 
239  /// Get platform (OS) type and name.
240  /// @sa EPlatform
242  { return m_Platform; }
243  string GetPlatformName(void) const;
244 
245  /// Get browser version information.
246  ///
247  /// If version field (major, minor, patch level) equal -1 that
248  /// it is not defined.
250  { return m_BrowserVersion; }
252  { return m_EngineVersion; }
254  { return m_MozillaVersion; }
255 
256 
257  /// Bots check flags (what consider to be a bot).
258  /// @sa EBrowser, EBrowserEngine
259  enum EBotFlags {
260  fBotCrawler = (1<<1),
261  fBotOfflineBrowser = (1<<2),
262  fBotScript = (1<<3),
263  fBotLinkChecker = (1<<4),
264  fBotWebValidator = (1<<5),
265  fBotAll = 0xFF
266  };
267  typedef unsigned int TBotFlags; ///< Binary OR of "EBotFlags"
268 
269  /// Check that this is known browser.
270  ///
271  /// @note
272  /// This method can return FALSE for old or unknown browsers,
273  /// or browsers for mobile devices. Use it with caution.
274  /// @sa GetBrowser, GetEngine
275  bool IsBrowser(void) const;
276 
277  /// Check that this is known search robot/bot.
278  ///
279  /// By default it use GetEngine() and GetBrowser() value to check on
280  /// known bots, and only here 'flags' parameter can be used.
281  /// @include_patterns
282  /// List of additional patterns that can treat current user agent
283  /// as bot. If standard check fails, this string and/or
284  /// registry/environment parameters (section 'CGI', name 'Bots')
285  /// will be used. String value should have patterns for search in
286  /// the user agent string, and should looks like:
287  /// "Googlebot Scooter WebCrawler Slurp"
288  /// You can use any delimiters from next list " ;|~\t".
289  /// If you want to use space or any other symbol from the delimiters list
290  /// as part of the pattern, then use multi-line pattern. In this case
291  /// each line contains a single pattern with any symbol inside it.
292  /// All patterns are case sensitive.
293  /// For details how to define registry/environment parameter see
294  /// CParam description.
295  /// @exclude_patterns
296  /// This parameter and string from (section 'CGI', name 'NotBots') can be
297  /// used to remove any user agent signature from list of bots, if you
298  /// don't agree with parser's decision. IsBot() will return FALSE if
299  /// the user agent string contains one of these patters.
300  /// @note
301  /// Registry file:
302  /// [CGI]
303  /// Bots = ...
304  /// NotBots = ...
305  /// Environment variables:
306  /// NCBI_CONFIG__CGI__Bots = ...
307  /// NCBI_CONFIG__CGI__NotBots = ...
308  /// @sa
309  /// GetBrowser, GetEngine, CParam
310  bool IsBot(TBotFlags flags = fBotAll,
311  const string& include_patterns = kEmptyStr,
312  const string& exclude_patterns = kEmptyStr) const;
313 
314  /// Flags to check device type.
315  /// Zero value mean unknown device type, usually considered as desktop.
316  /// @sa GetDeviceType, IsMobileDevice, IsTableDevice
318  fDevice_Phone = (1<<1), ///< Phone / not known tablet / mobile browser on desktop
319  fDevice_Tablet = (1<<2), ///< Known tablet
320  fDevice_Mobile = fDevice_Phone | fDevice_Tablet
321  };
322  typedef unsigned int TDeviceFlags; ///< Binary OR of "EDeviceFlags"
323 
324  /// Get device type.
325  ///
326  /// Use this method with caution, because it is impossible to detect
327  /// resolution or form-factor of the device based on user agent string only.
328  /// We can only make an assumptions here.
329  /// @return
330  /// Bit mask with categories of devices that can have such user agent string.
331  /// Zero value mean unknown device type, usually considered as desktop.
332  /// @note
333  /// Some registry/environment parameters can affect user agent parsing.
334  /// See IsPhoneDevice(), IsMobileDevice() and IsTabletDevice() for details.
335  /// @sa IsMobileDevice, IsTableDevice
337  { return m_DeviceFlags; }
338 
339 
340  /// Check that this is a known phone-size device.
341  ///
342  /// Use this method with caution, because it is impossible to detect
343  /// resolution and form-factor of the device based on user agent string only,
344  /// we can only make an assumptions here. Also, we cannot say can some
345  /// device make calls or not.
346  /// @include_patterns
347  /// List of additional patterns that can treat current user agent
348  /// as phone-size device if standard check fails, this string and/or
349  /// registry/environment parameter (section 'CGI', name 'PhoneDevices')
350  /// will be used. String value should have patterns for search in
351  /// the user agent string, and should looks like: "Name1 Name2 Name3".
352  /// You can use any delimiters from next list " ;|~\t".
353  /// If you want to use space or any other symbol from the delimiters list
354  /// as part of the pattern, then use multi-line pattern. In this case
355  /// each line contains a single pattern with any symbol inside it.
356  /// All patterns are case sensitive by default unless fNoCase flag is specified.
357  /// @exclude_patterns
358  /// This parameter and string from (section 'CGI', name 'NotPhoneDevices')
359  /// can be used to remove any user agent signature from list of phone-size
360  /// devices, if you don't agree with parser's decision. IsPhoneDevice()
361  /// will return FALSE if the user agent string contains one of these patters.
362  /// @return
363  /// Return TRUE for all user agent string that have known signatures of
364  /// phone-size devices. We can detect only limited number of such devices,
365  /// so be aware.
366  /// @note
367  /// Registry file:
368  /// [CGI]
369  /// PhoneDevices = ...
370  /// NotPhoneDevices = ...
371  /// Environment variables:
372  /// NCBI_CONFIG__CGI__PhoneDevices = ...
373  /// NCBI_CONFIG__CGI__NotPhoneDevices = ...
374  /// @sa
375  /// GetDeviceType, GetPlatform, EBrowserPlatform, CParam, IsTabletDevice, IsMobileDevice
376  bool IsPhoneDevice(const string& include_patterns = kEmptyStr,
377  const string& exclude_patterns = kEmptyStr) const;
378 
379  /// Check that this is a known tablet device.
380  ///
381  /// Use this method with caution, because it is impossible to detect
382  /// resolution or form-factor of the device based on user agent string only,
383  /// we can only make an assumptions here.
384  /// @include_patterns
385  /// List of additional patterns that can treat current user agent
386  /// as tablet device if standard check fails, this string and/or
387  /// registry/environment parameter (section 'CGI', name 'TabletDevices')
388  /// will be used. String value should have patterns for search in
389  /// the user agent string, and should looks like: "Name1 Name2 Name3".
390  /// You can use any delimiters from next list " ;|~\t".
391  /// If you want to use space or any other symbol from the delimiters list
392  /// as part of the pattern, then use multi-line pattern. In this case
393  /// each line contains a single pattern with any symbol inside it.
394  /// All patterns are case sensitive by default unless fNoCase flag is specified.
395  /// @exclude_patterns
396  /// This parameter and string from (section 'CGI', name 'NotTabletDevices')
397  /// can be used to remove any user agent signature from list of tablet
398  /// devices, if you don't agree with parser's decision. IsTabletDevice()
399  /// will return FALSE if the user agent string contains one of these patters.
400  /// @note
401  /// Registry file:
402  /// [CGI]
403  /// TabletDevices = ...
404  /// NotTabletDevices = ...
405  /// Environment variables:
406  /// NCBI_CONFIG__CGI__TabletDevices = ...
407  /// NCBI_CONFIG__CGI__TabletDevices = ...
408  /// @return
409  /// Return TRUE for devices that can be detected as tablets.
410  /// Usually, IsMobileDevice() also return TRUE for the same
411  /// user agent string. Not all devices can be detected as tablets,
412  /// only few combinations of new versions of browsers and OS provide
413  /// such informations in the UA-string, and limited number of device
414  /// names can be used for such detection.
415  /// @sa
416  /// GetDeviceType, CParam, IsMobileDevice, IsPhoneDevice
417  bool IsTabletDevice(const string& include_patterns = kEmptyStr,
418  const string& exclude_patterns = kEmptyStr) const;
419 
420  /// Check that this is a known mobile device.
421  ///
422  /// Use this method with caution, because it is impossible to detect
423  /// resolution or form-factor of the device based on user agent string only,
424  /// we can only make an assumptions here.
425  /// @include_patterns
426  /// List of additional patterns that can treat current user agent
427  /// as mobile device if standard check fails, this string and/or
428  /// registry/environment parameter (section 'CGI', name 'MobileDevices')
429  /// will be used. String value should have patterns for search in
430  /// the user agent string, and should looks like: "Name1 Name2 Name3".
431  /// You can use any delimiters from next list " ;|~\t".
432  /// If you want to use space or any other symbol from the delimiters list
433  /// as part of the pattern, then use multi-line pattern. In this case
434  /// each line contains a single pattern with any symbol inside it.
435  /// All patterns are case sensitive by default unless fNoCase flag is specified.
436  /// @exclude_patterns
437  /// This parameter and string from (section 'CGI', name 'NotMobileDevices')
438  /// can be used to remove any user agent signature from list of mobile
439  /// devices, if you don't agree with parser's decision. IsMobileDevice()
440  /// will return FALSE if the user agent string contains one of these patters.
441  /// @return
442  /// Return TRUE for all devices with user agent strings that use mobile
443  /// version of browser or have any known mobile platform signatures.
444  /// The device can be a phone or tablet, or any other device with
445  /// the same keywords in the UA-string.
446  /// @note
447  /// Registry file:
448  /// [CGI]
449  /// MobileDevices = ...
450  /// NotMobileDevices = ...
451  /// Environment variables:
452  /// NCBI_CONFIG__CGI__MobileDevices = ...
453  /// NCBI_CONFIG__CGI__NotMobileDevices = ...
454  /// @sa
455  /// GetDeviceType, GetPlatform, EBrowserPlatform, CParam, IsPhoneDevice, IsTabletDevice
456  bool IsMobileDevice(const string& include_patterns = kEmptyStr,
457  const string& exclude_patterns = kEmptyStr) const;
458 
459 protected:
460  /// Init class members.
461  void x_Init(void);
462  /// Parse user agent string.
463  void x_Parse(const string& user_agent);
464  /// Parse token with browser name and version.
465  /// 'where' flag specifies what part of the user agent to look at,
466  /// 'engine' allow to check a specific type of engine in the lookup table.
467  bool x_ParseToken(const string& token, int where, EBrowserEngine engine = eEngine_Unknown);
468  /// Helper method to check UA-string against external pattern lists.
469  bool x_CheckPattern(int what, bool current_status, bool use_patterns,
470  const string& include_patterns = kEmptyStr,
471  const string& exclude_patterns = kEmptyStr) const;
472 protected:
473  string m_UserAgent; ///< User-Agent string
474  TFlags m_Flags; ///< Comparison and parsing flags
475  EBrowser m_Browser; ///< Browser type
476  string m_BrowserName; ///< Browser name
477  TUserAgentVersion m_BrowserVersion; ///< Browser version info
478  EBrowserEngine m_Engine; ///< Browser engine type
479  TUserAgentVersion m_EngineVersion; ///< Browser engine version
480  TUserAgentVersion m_MozillaVersion; ///< Browser mozilla version
481  EBrowserPlatform m_Platform; ///< Platform type
482  TDeviceFlags m_DeviceFlags; ///< Device type flags
483 };
484 
485 
487 
488 #endif /* CGI___USER_AGENT__HPP */
CCgiUserAgent –.
Definition: user_agent.hpp:59
CVersionInfo –.
static uch flags
EBrowserPlatform m_Platform
Platform type.
Definition: user_agent.hpp:481
string GetUserAgentStr(void) const
Get user agent string.
Definition: user_agent.hpp:218
const TUserAgentVersion & GetEngineVersion(void) const
Definition: user_agent.hpp:251
TUserAgentVersion m_EngineVersion
Browser engine version.
Definition: user_agent.hpp:479
EFlags
Comparison and parsing flags.
Definition: user_agent.hpp:62
EBrowserEngine GetEngine(void) const
Get browser engine type and name.
Definition: user_agent.hpp:235
EBrowserEngine m_Engine
Browser engine type.
Definition: user_agent.hpp:478
TFlags m_Flags
Comparison and parsing flags.
Definition: user_agent.hpp:474
unsigned int TDeviceFlags
Binary OR of "EDeviceFlags".
Definition: user_agent.hpp:322
EBotFlags
Bots check flags (what consider to be a bot).
Definition: user_agent.hpp:259
EBrowserEngine
Browser engine types.
Definition: user_agent.hpp:191
EBrowser GetBrowser(void) const
Get browser type.
Definition: user_agent.hpp:222
TUserAgentVersion m_MozillaVersion
Browser mozilla version.
Definition: user_agent.hpp:480
CVersionInfo TUserAgentVersion
User agent version info.
Definition: user_agent.hpp:48
EBrowserPlatform GetPlatform(void) const
Get platform (OS) type and name.
Definition: user_agent.hpp:241
const string & GetBrowserName(void) const
Get browser name.
Definition: user_agent.hpp:230
EBrowser m_Browser
Browser type.
Definition: user_agent.hpp:475
unsigned int TFlags
Binary OR of "EFlags".
Definition: user_agent.hpp:72
TUserAgentVersion m_BrowserVersion
Browser version info.
Definition: user_agent.hpp:477
const TUserAgentVersion & GetMozillaVersion(void) const
Definition: user_agent.hpp:253
unsigned int TBotFlags
Binary OR of "EBotFlags".
Definition: user_agent.hpp:267
TDeviceFlags GetDeviceType(void) const
Get device type.
Definition: user_agent.hpp:336
string m_UserAgent
User-Agent string.
Definition: user_agent.hpp:473
EDeviceFlags
Flags to check device type.
Definition: user_agent.hpp:317
EBrowserPlatform
Platform types.
Definition: user_agent.hpp:203
TDeviceFlags m_DeviceFlags
Device type flags.
Definition: user_agent.hpp:482
EBrowser
Browser types.
Definition: user_agent.hpp:91
const TUserAgentVersion & GetBrowserVersion(void) const
Get browser version information.
Definition: user_agent.hpp:249
string m_BrowserName
Browser name.
Definition: user_agent.hpp:476
@ ePlatform_Android
Android.
Definition: user_agent.hpp:210
@ ePlatform_Palm
PalmOS.
Definition: user_agent.hpp:211
@ ePlatform_Symbian
SymbianOS.
Definition: user_agent.hpp:212
@ ePlatform_Mac
MacOS.
Definition: user_agent.hpp:206
@ ePlatform_Windows
Microsoft Windows.
Definition: user_agent.hpp:205
@ ePlatform_Unix
Unix.
Definition: user_agent.hpp:207
@ ePlatform_WindowsCE
Microsoft Windows CE (+ Windows Mobile)
Definition: user_agent.hpp:213
@ eMinimo
Minimo (www.mozilla.org/projects/minimo)
Definition: user_agent.hpp:163
@ eEnigmaBrowser
Enigma Browser (www.suttondesigns.com)
Definition: user_agent.hpp:128
@ eSafari
Safari (www.apple.com/safari)
Definition: user_agent.hpp:141
@ eChrome
Google Chrome (www.google.com/chrome)
Definition: user_agent.hpp:134
@ eQtWeb
QtWeb (www.qtweb.net)
Definition: user_agent.hpp:140
@ eKonqueror
Konqueror (www.konqueror.org) (KHTML based since v3.2 ?)
Definition: user_agent.hpp:136
@ eMadfox
Madfox (www.splyb.com/madfox)
Definition: user_agent.hpp:119
@ ePolaris
Polaris Browser (www.infraware.co.kr)
Definition: user_agent.hpp:171
@ eIceweasel
Debian Iceweasel (www.geticeweasel.org)
Definition: user_agent.hpp:113
@ ePIE
Pocket IE (www.reensoft.com/PIEPlus)
Definition: user_agent.hpp:168
@ eScript
Class: script tools (perl/php/...)
Definition: user_agent.hpp:148
@ eOperaMobile
Opera Mobile (www.opera.com/mobile)
Definition: user_agent.hpp:166
@ eEudoraWeb
EudoraWeb (www.eudora.com)
Definition: user_agent.hpp:162
@ eSEMCBrowser
Sony Ericsson SEMC-Browser (www.sonyericsson.com)
Definition: user_agent.hpp:174
@ eFirefox
Firefox (www.mozilla.org/products/firefox)
Definition: user_agent.hpp:110
@ eBeonex
Beonex Communicator (www.beonex.com)
Definition: user_agent.hpp:107
@ eNetCaptor
NetCaptor (www.netcaptor.com)
Definition: user_agent.hpp:131
@ ePocketLink
PocketLink (www.mobilefan.net)
Definition: user_agent.hpp:170
@ eKNinja
K-Ninja Samurai (k-ninja-samurai.en.softonic.com)
Definition: user_agent.hpp:118
@ eNetFront
NetFront (www.access-company.com)
Definition: user_agent.hpp:164
@ eOpera
Opera (www.opera.com)
Definition: user_agent.hpp:99
@ eNagios
check_http/nagios-plugins (nagiosplugins.org)
Definition: user_agent.hpp:104
@ eMultiZilla
MultiZilla (multizilla.mozdev.org)
Definition: user_agent.hpp:120
@ eOmniWeb
OmniWeb (www.omnigroup.com/applications/omniweb)
Definition: user_agent.hpp:139
@ eDoCoMo
DoCoMo (www.nttdocomo.com)
Definition: user_agent.hpp:161
@ eIceCat
GNU IceCat (http://www.gnu.org/software/gnuzilla)
Definition: user_agent.hpp:112
@ eTelecaObigo
Teleca/Obigo (www.teleca.com / www.obigo.com)
Definition: user_agent.hpp:175
@ eEdge
Microsoft Edge (www.microsoft.com)
Definition: user_agent.hpp:95
@ eBlackberry
Blackberry (www.blackberry.com)
Definition: user_agent.hpp:160
@ eSeaMonkey
SeaMonkey (www.mozilla.org/projects/seamonkey)
Definition: user_agent.hpp:121
@ eGranParadiso
GranParadiso (www.mozilla.org)
Definition: user_agent.hpp:115
@ eXiino
Xiino (www.ilinx.co.jp/en/)
Definition: user_agent.hpp:178
@ eChimera
Chimera (chimera.mozdev.org)
Definition: user_agent.hpp:109
@ eStainless
Stainless (www.stainlessapp.com)
Definition: user_agent.hpp:143
@ eiCab
iCab (www.icab.de)
Definition: user_agent.hpp:96
@ eCrazyBrowser
Crazy Browser (www.crazybrowser.com)
Definition: user_agent.hpp:127
@ eAirEdge
Mobile devices (browsers and services for: telephones, smartphones, tablets and etc) Some mobile devi...
Definition: user_agent.hpp:158
@ eOpenWave
OpenWave/UP.Browser (www.openwave.com)
Definition: user_agent.hpp:167
@ eLynx
Lynx (lynx.browser.org)
Definition: user_agent.hpp:97
@ eIE
Microsoft Internet Explorer (www.microsoft.com/windows/ie)
Definition: user_agent.hpp:94
@ eSafariMobile
Mobile Safari (www.apple.com/safari)
Definition: user_agent.hpp:173
@ eOfflineBrowser
Class: offline browsers.
Definition: user_agent.hpp:147
@ eMaxthon
Maxthon/MyIE2 (www.maxthon.com)
Definition: user_agent.hpp:130
@ eCamino
Camino (www.caminobrowser.org)
Definition: user_agent.hpp:108
@ eNetNewsWire
NetNewsWire (www.apple.com)
Definition: user_agent.hpp:138
@ eOperaMini
Opera Mini (www.opera.com/mini)
Definition: user_agent.hpp:165
@ ePapers
Papers (papersapp.com)
Definition: user_agent.hpp:101
@ eNetscape
Netscape (Navigator), versions >=6 are Gecko-based (www.netscape.com)
Definition: user_agent.hpp:98
@ eAvantGo
AvantGo (www.sybase.com/avantgo)
Definition: user_agent.hpp:159
@ eAvantBrowser
Avant Browser (www.avantbrowser.com)
Definition: user_agent.hpp:126
@ eIRider
iRider (www.irider.com)
Definition: user_agent.hpp:129
@ eReqwireless
Reqwireless Webviewer.
Definition: user_agent.hpp:172
@ euZardWeb
uZard Web (www.uzard.com)
Definition: user_agent.hpp:176
@ eFlock
Flock (www.flock.com)
Definition: user_agent.hpp:111
@ eW3m
w3m (www.w3m.org)
Definition: user_agent.hpp:103
@ eAOL
America Online Browser (www.aol.com)
Definition: user_agent.hpp:125
@ eUCBrowser
UC Browser (www.ucweb.com/ucbrowser)
Definition: user_agent.hpp:102
@ eKazehakase
Kazehakase (kazehakase.sourceforge.jp)
Definition: user_agent.hpp:116
@ eGaleon
Galeon (galeon.sourceforge.net)
Definition: user_agent.hpp:114
@ eMozilla
Any other Gecko-based not from the list above, Mozilla version >= 5.0.
Definition: user_agent.hpp:182
@ eFluid
Fluid (fluidapp.com)
Definition: user_agent.hpp:135
@ eWebValidator
Class: validators.
Definition: user_agent.hpp:150
@ eLinkChecker
Class: link checkers.
Definition: user_agent.hpp:149
@ eKMeleon
K-Meleon (kmeleon.sf.net)
Definition: user_agent.hpp:117
@ eShiira
Shiira (hmdt-web.net/shiira/en)
Definition: user_agent.hpp:142
@ eOregano
Oregano (www.castle.org.uk/oregano)
Definition: user_agent.hpp:100
@ eMidori
Midori.
Definition: user_agent.hpp:137
@ eCrawler
Search robots/bots/validators.
Definition: user_agent.hpp:146
@ eAcooBrowser
Acoo Browser (www.acoobrowser.com)
Definition: user_agent.hpp:124
@ eVodafone
Ex J-Phone, now Vodafone Live! (www.vodafone.com)
Definition: user_agent.hpp:177
@ ePlucker
Plucker (www.plkr.org)
Definition: user_agent.hpp:169
#define END_NCBI_SCOPE
End previously defined NCBI scope.
Definition: ncbistl.hpp:103
#define BEGIN_NCBI_SCOPE
Define ncbi namespace.
Definition: ncbistl.hpp:100
#define kEmptyStr
Definition: ncbistr.hpp:123
#define NCBI_XCGI_EXPORT
Definition: ncbi_export.h:1097
static patstr * include_patterns
Definition: pcregrep.c:261
static patstr * exclude_patterns
Definition: pcregrep.c:263
Modified on Fri Jan 05 07:23:56 2024 by modify_doxy.py rev. 669887