qtransportauthdefs_qws.h
上传用户:detong
上传日期:2022-06-22
资源大小:20675k
文件大小:4k
源码类别:

系统编程

开发平台:

Unix_Linux

  1. /****************************************************************************
  2. **
  3. ** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies).
  4. ** Contact: Qt Software Information (qt-info@nokia.com)
  5. **
  6. ** This file is part of the QtGui module of the Qt Toolkit.
  7. **
  8. ** Commercial Usage
  9. ** Licensees holding valid Qt Commercial licenses may use this file in
  10. ** accordance with the Qt Commercial License Agreement provided with the
  11. ** Software or, alternatively, in accordance with the terms contained in
  12. ** a written agreement between you and Nokia.
  13. **
  14. **
  15. ** GNU General Public License Usage
  16. ** Alternatively, this file may be used under the terms of the GNU
  17. ** General Public License versions 2.0 or 3.0 as published by the Free
  18. ** Software Foundation and appearing in the file LICENSE.GPL included in
  19. ** the packaging of this file.  Please review the following information
  20. ** to ensure GNU General Public Licensing requirements will be met:
  21. ** http://www.fsf.org/licensing/licenses/info/GPLv2.html and
  22. ** http://www.gnu.org/copyleft/gpl.html.
  23. **
  24. ** Qt for Windows(R) Licensees
  25. ** As a special exception, Nokia, as the sole copyright holder for Qt
  26. ** Designer, grants users of the Qt/Eclipse Integration plug-in the
  27. ** right for the Qt/Eclipse Integration to link to functionality
  28. ** provided by Qt Designer and its related libraries.
  29. **
  30. ** If you are unsure which license is appropriate for your use, please
  31. ** contact the sales department at qt-sales@nokia.com.
  32. **
  33. ****************************************************************************/
  34. #ifndef QTRANSPORTAUTHDEFS_QWS_H
  35. #define QTRANSPORTAUTHDEFS_QWS_H
  36. #include <sys/types.h>
  37. #include <string.h>
  38. #include <QtCore/qglobal.h>
  39. QT_BEGIN_HEADER
  40. QT_BEGIN_NAMESPACE
  41. QT_MODULE(Gui)
  42. #define QSXE_KEY_LEN 16
  43. #define QSXE_MAGIC_BYTES 4
  44. // Number of bytes of each message to authenticate.  Just need to ensure
  45. // that the command at the beginning hasn't been tampered with.  This value
  46. // does not matter for trusted transports.
  47. #define AMOUNT_TO_AUTHENTICATE 200
  48. #define AUTH_ID(k) ((unsigned char)(k[QSXE_KEY_LEN]))
  49. #define AUTH_KEY(k) ((unsigned char *)(k))
  50. // must be a largish -ve number under any endianess when cast as an int
  51. const unsigned char magic[QSXE_MAGIC_BYTES] = { 0xBA, 0xD4, 0xD4, 0xBA };
  52. const int magicInt = 0xBAD4D4BA;
  53. #define QSXE_KEYFILE "keyfile"
  54. /*
  55.   Header in above format, less the magic bytes.
  56.   Useful for reading off the socket
  57. */
  58. struct AuthHeader
  59. {
  60.     unsigned char len;
  61.     unsigned char pad;
  62.     unsigned char digest[QSXE_KEY_LEN];
  63.     unsigned char id;
  64.     unsigned char seq;
  65. };
  66. /*
  67.   Header in a form suitable for authentication routines
  68. */
  69. struct AuthMessage
  70. {
  71.     AuthMessage()
  72.     {
  73.         ::memset( authData, 0, sizeof(authData) );
  74.         ::memcpy( pad_magic, magic, QSXE_MAGIC_BYTES );
  75.     }
  76.     unsigned char pad_magic[QSXE_MAGIC_BYTES];
  77.     union {
  78.         AuthHeader hdr;
  79.         char authData[sizeof(AuthHeader)];
  80.     };
  81.     char payLoad[AMOUNT_TO_AUTHENTICATE];
  82. };
  83. /**
  84.   Auth data as stored in _key
  85. */
  86. struct AuthCookie
  87. {
  88.     unsigned char key[QSXE_KEY_LEN];
  89.     unsigned char pad;
  90.     unsigned char progId;
  91. };
  92. /*
  93.   Auth data as written to the key file - SUPERSEDED by usr_key_entry
  94.   This is still used internally for some functions, ie the socket
  95.   related calls.
  96. */
  97. struct AuthRecord
  98. {
  99.     union {
  100.         AuthCookie auth;
  101.         char data[sizeof(struct AuthCookie)];
  102.     };
  103.     time_t change_time;
  104. };
  105. /*!
  106.   class usr_key_entry
  107.   This comes from the SXE kernel patch file include/linux/lidsif.h
  108.   This is the (new) data record for the key file (version 2).
  109.   The key file is (now) either /proc/lids/keys (and the per-process
  110.   keys in /proc/<pid>/lids_key) OR for desktop/development ONLY (not
  111.   for production) it is $QPEDIR/etc/keyfile
  112.   The key file maps keys to files.
  113.   File are identified by inode and device numbers, not paths.
  114.   (See the "installs" file for path to inode/device mapping)
  115. */
  116. struct usr_key_entry
  117. {
  118.     char key[QSXE_KEY_LEN];
  119.     ino_t ino;
  120.     dev_t dev;
  121. };
  122. /*!
  123.   class IdBlock
  124.   brief Data record for the manifest file.
  125.   The manifest file maps program id's to files
  126. */
  127. struct IdBlock
  128. {
  129.     quint64 inode;
  130.     quint64 device;
  131.     unsigned char pad;
  132.     unsigned char progId;
  133.     unsigned short installId;
  134.     unsigned int keyOffset;
  135.     qint64 install_time;
  136. };
  137. QT_END_NAMESPACE
  138. QT_END_HEADER
  139. #endif // QTRANSPORTAUTHDEFS_QWS_H