netinterfaces.h 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  1. // netinterfaces.h :
  2. //
  3. #if !defined(AGD_NETINTERFACES_H__54DE87BE_1F3C_4914_A062_9CCFCB496122__INCLUDED_)
  4. #define AGD_NETINTERFACES_H__54DE87BE_1F3C_4914_A062_9CCFCB496122__INCLUDED_
  5. #include <vector>
  6. #include <QObject>
  7. #include <QList>
  8. #include <QQmlListProperty>
  9. #include <qqmlparserstatus.h>
  10. #include <gfa/gfanet.h>
  11. /////////////////////////////////////////////////////////////////////////////
  12. // netinterfaces.h - Declarations:
  13. class Emitter
  14. {
  15. public:
  16. virtual void emitError(const char *pszFormatStr, ...) const = 0;
  17. };
  18. /////////////////////////////////////////////////////////////////////////////
  19. class IPv4Address : public QObject
  20. {
  21. Q_OBJECT
  22. Q_PROPERTY(QString address READ address WRITE set_address NOTIFY address_Changed)
  23. Q_PROPERTY(int b0 READ b0 WRITE set_b0 NOTIFY b0_Changed)
  24. Q_PROPERTY(int b1 READ b1 WRITE set_b1 NOTIFY b1_Changed)
  25. Q_PROPERTY(int b2 READ b2 WRITE set_b2 NOTIFY b2_Changed)
  26. Q_PROPERTY(int b3 READ b3 WRITE set_b3 NOTIFY b3_Changed)
  27. public:
  28. explicit IPv4Address(struct in_addr &addr, const Emitter &errHandler, QObject *pParent = 0);
  29. virtual ~IPv4Address(void);
  30. private:
  31. QString address(void) const;
  32. int b0(void) const;
  33. int b1(void) const;
  34. int b2(void) const;
  35. int b3(void) const;
  36. void set_address(const QString &addr);
  37. void set_b0(int b);
  38. void set_b1(int b);
  39. void set_b2(int b);
  40. void set_b3(int b);
  41. signals:
  42. void address_Changed(const QString&);
  43. void b0_Changed(int);
  44. void b1_Changed(int);
  45. void b2_Changed(int);
  46. void b3_Changed(int);
  47. private:
  48. struct in_addr &m_addr;
  49. const Emitter &m_errHandler;
  50. };
  51. /////////////////////////////////////////////////////////////////////////////
  52. class Interface : public QObject
  53. {
  54. Q_OBJECT
  55. Q_PROPERTY(QString name READ name CONSTANT)
  56. Q_PROPERTY(QString afName READ afName NOTIFY afName_Changed)
  57. Q_PROPERTY(int af READ af WRITE set_af NOTIFY af_Changed)
  58. Q_PROPERTY(QString method READ method)
  59. Q_PROPERTY(int itfMethod READ itfMethod)
  60. // static
  61. Q_PROPERTY(IPv4Address* ipAddress READ ipAddress CONSTANT)
  62. Q_PROPERTY(IPv4Address* netMask READ netMask CONSTANT)
  63. Q_PROPERTY(IPv4Address* gateway READ gateway CONSTANT)
  64. Q_PROPERTY(IPv4Address* bcastAddress READ bcastAddress CONSTANT)
  65. Q_PROPERTY(IPv4Address* ptpAddress READ ptpAddress CONSTANT)
  66. Q_PROPERTY(QQmlListProperty<IPv4Address> dnsServer READ dnsServer CONSTANT)
  67. // dhcp
  68. public:
  69. explicit Interface(ITF_IFACE_BLOCK &ifb, const Emitter &errHandler, QObject *pParent = 0);
  70. virtual ~Interface(void);
  71. inline const ITF_IFACE_BLOCK & getIface(void) const {
  72. return m_ifb;}
  73. enum AddressFamily
  74. {
  75. #if 0
  76. AF_Unknown = -1,
  77. AF_Inet,
  78. AF_Inet6,
  79. AF_Ipx,
  80. AF_Can,
  81. AF_Invalid
  82. #else
  83. AF_Unknown = 0,
  84. AF_Inet = 0x0001,
  85. AF_Inet6 = 0x0002,
  86. AF_Ipx = 0x0004,
  87. AF_Can = 0x0008,
  88. AF_Invalid = 0x0010
  89. #endif
  90. };
  91. Q_ENUMS(AddressFamily)
  92. enum ItfMethod
  93. {
  94. #if 0
  95. IM_Unknown = -1,
  96. IM_Static,
  97. IM_Dhcp,
  98. IM_Manual,
  99. IM_BootP,
  100. IM_Tunnel,
  101. IM_Ppp,
  102. IM_WvDial,
  103. IM_IpV4ll,
  104. IM_Loopback,
  105. IM_Auto,
  106. IM_Invalid
  107. #else
  108. IM_Unknown = 0,
  109. IM_Static = 0x0001,
  110. IM_Dhcp = 0x0002,
  111. IM_Manual = 0x0004,
  112. IM_BootP = 0x0008,
  113. IM_Tunnel = 0x0010,
  114. IM_Ppp = 0x0020,
  115. IM_WvDial = 0x0040,
  116. IM_IpV4ll = 0x0080,
  117. IM_Loopback = 0x0100,
  118. IM_Auto = 0x0200,
  119. IM_Invalid = 0x0400
  120. #endif
  121. };
  122. Q_ENUMS(ItfMethod)
  123. private:
  124. QString name(void) const;
  125. QString afName(void) const;
  126. int af(void) const;
  127. void set_af(int af);
  128. QString method(void) const;
  129. int itfMethod(void) const;
  130. IPv4Address* ipAddress(void);
  131. IPv4Address* netMask(void);
  132. IPv4Address* gateway(void);
  133. IPv4Address* bcastAddress(void);
  134. IPv4Address* ptpAddress(void);
  135. QQmlListProperty<IPv4Address> dnsServer(void);
  136. signals:
  137. void afName_Changed(void);
  138. void af_Changed(int af);
  139. private:
  140. ITF_IFACE_BLOCK &m_ifb;
  141. IPv4Address m_ipAddr;
  142. IPv4Address m_netmask;
  143. IPv4Address m_gateway;
  144. IPv4Address m_bcastAddr;
  145. IPv4Address m_ptpAddr;
  146. QList<IPv4Address*> m_dnsList;
  147. const Emitter &m_errHandler;
  148. };
  149. /////////////////////////////////////////////////////////////////////////////
  150. class NetInterfaces : public QObject, public QQmlParserStatus, public Emitter
  151. {
  152. Q_OBJECT
  153. Q_INTERFACES(QQmlParserStatus)
  154. Q_PROPERTY(QQmlListProperty<Interface> interfaces READ interfaces NOTIFY interfaces_Changed)
  155. Q_PROPERTY(QQmlListProperty<Interface> filteredInterfaces READ filteredInterfaces NOTIFY filteredInterfaces_Changed)
  156. Q_PROPERTY(QString itfFilterName READ itfFilterName WRITE set_itfFilterName NOTIFY itfFilterName_Changed)
  157. Q_PROPERTY(int itfFilterAF READ itfFilterAF WRITE set_itfFilterAF NOTIFY itfFilterAF_Changed)
  158. Q_PROPERTY(int itfFilterMethod READ itfFilterMethod WRITE set_itfFilterMethod NOTIFY itfFilterMethod_Changed)
  159. public:
  160. explicit NetInterfaces(QObject *pParent = 0);
  161. virtual ~NetInterfaces(void);
  162. public:
  163. Q_INVOKABLE void reset(void);
  164. Q_INVOKABLE bool initialize(void);
  165. Q_INVOKABLE bool save(void);
  166. Q_INVOKABLE bool saveAs(const QString &path);
  167. // Q_INVOKABLE QVariantList getInterface(const QString &itfName);
  168. Q_INVOKABLE QVariant newInterface(QString name, int af, int method);
  169. virtual void classBegin();
  170. virtual void componentComplete();
  171. virtual void emitError(const char *pszFormatStr, ...) const;
  172. signals:
  173. void interfaces_Changed(void);
  174. void filteredInterfaces_Changed(void);
  175. void itfFilterName_Changed(const QString &val);
  176. void itfFilterAF_Changed(int af);
  177. void itfFilterMethod_Changed(int method);
  178. private:
  179. QQmlListProperty<Interface> interfaces(void);
  180. QQmlListProperty<Interface> filteredInterfaces(void);
  181. const QString& itfFilterName(void) const;
  182. void set_itfFilterName(const QString &val);
  183. int itfFilterAF(void) const;
  184. void set_itfFilterAF(int nval);
  185. int itfFilterMethod(void) const;
  186. void set_itfFilterMethod(int method);
  187. signals:
  188. void sigError(QString msg) const;
  189. private:
  190. ETC_NETWORK_INTERFACES m_eni;
  191. QList<Interface*> m_interfaces;
  192. QList<Interface*> m_filteredInterfaces;
  193. QString m_itfFilterName;
  194. int m_itfFilterAF;
  195. int m_itfFilterMethod;
  196. };
  197. /////////////////////////////////////////////////////////////////////////////
  198. #endif // !defined(AGD_NETINTERFACES_H__54DE87BE_1F3C_4914_A062_9CCFCB496122__INCLUDED_)