netinterfaces.h 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286
  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 NotificationSink
  14. {
  15. public:
  16. virtual void emitError(const char *pszFormatStr, ...) const = 0;
  17. virtual void filterPropertyChanged(void) const = 0;
  18. };
  19. /////////////////////////////////////////////////////////////////////////////
  20. typedef bool (*PFN_ADDRESS_VALIDATOR)(const struct in_addr &addr);
  21. class IPv4Address : public QObject
  22. {
  23. Q_OBJECT
  24. Q_PROPERTY(QString address READ address WRITE setAddress NOTIFY addressChanged)
  25. Q_PROPERTY(int b0 READ b0 WRITE setB0 NOTIFY b0Changed)
  26. Q_PROPERTY(int b1 READ b1 WRITE setB1 NOTIFY b1Changed)
  27. Q_PROPERTY(int b2 READ b2 WRITE setB2 NOTIFY b2Changed)
  28. Q_PROPERTY(int b3 READ b3 WRITE setB3 NOTIFY b3Changed)
  29. public:
  30. explicit IPv4Address(struct in_addr &addr, const NotificationSink &notifyer, QObject *pParent = 0, PFN_ADDRESS_VALIDATOR pfnAddrValidator = NULL);
  31. virtual ~IPv4Address(void);
  32. private:
  33. QString address(void) const;
  34. int b0(void) const;
  35. int b1(void) const;
  36. int b2(void) const;
  37. int b3(void) const;
  38. void setAddress(const QString &addr);
  39. void setB0(int b);
  40. void setB1(int b);
  41. void setB2(int b);
  42. void setB3(int b);
  43. signals:
  44. void addressChanged(const QString&);
  45. void b0Changed(int);
  46. void b1Changed(int);
  47. void b2Changed(int);
  48. void b3Changed(int);
  49. private:
  50. struct in_addr &m_addr;
  51. PFN_ADDRESS_VALIDATOR m_pfnAddrValidator;
  52. const NotificationSink &m_rNotifyer;
  53. };
  54. /////////////////////////////////////////////////////////////////////////////
  55. class Static : public QObject
  56. {
  57. Q_OBJECT
  58. Q_PROPERTY(IPv4Address* ipAddress READ ipAddress CONSTANT)
  59. Q_PROPERTY(IPv4Address* netMask READ netMask CONSTANT)
  60. Q_PROPERTY(IPv4Address* gateway READ gateway CONSTANT)
  61. Q_PROPERTY(IPv4Address* bcastAddress READ bcastAddress CONSTANT)
  62. Q_PROPERTY(IPv4Address* ptpAddress READ ptpAddress CONSTANT)
  63. Q_PROPERTY(QQmlListProperty<IPv4Address> dnsServer READ dnsServer CONSTANT)
  64. Q_PROPERTY(int metric READ metric WRITE setMetric NOTIFY metricChanged)
  65. Q_PROPERTY(int mtu READ mtu WRITE setMtu NOTIFY mtuChanged)
  66. Q_PROPERTY(int netPrefix READ netPrefix WRITE setNetPrefix NOTIFY netPrefixChanged)
  67. public:
  68. explicit Static(IFACE_INET_STATIC &itfs, const NotificationSink &notifyer, QObject *pParent = 0);
  69. virtual ~Static(void);
  70. private:
  71. IPv4Address* ipAddress(void);
  72. IPv4Address* netMask(void);
  73. IPv4Address* gateway(void);
  74. IPv4Address* bcastAddress(void);
  75. IPv4Address* ptpAddress(void);
  76. QQmlListProperty<IPv4Address> dnsServer(void);
  77. int metric(void) const;
  78. void setMetric(int metric);
  79. int mtu(void) const;
  80. void setMtu(int mtu);
  81. int netPrefix(void) const;
  82. void setNetPrefix(int netprefix);
  83. private slots:
  84. void netmaskChanged(const QString&);
  85. signals:
  86. void metricChanged(int metric);
  87. void mtuChanged(int mtu);
  88. void netPrefixChanged(unsigned int netprefix);
  89. private:
  90. IFACE_INET_STATIC &m_itfs;
  91. const NotificationSink &m_rNotifyer;
  92. IPv4Address m_ipAddr;
  93. IPv4Address m_netmask;
  94. IPv4Address m_gateway;
  95. IPv4Address m_bcastAddr;
  96. IPv4Address m_ptpAddr;
  97. QList<IPv4Address*> m_dnsList;
  98. };
  99. /////////////////////////////////////////////////////////////////////////////
  100. class Dhcp : public QObject
  101. {
  102. Q_OBJECT
  103. public:
  104. explicit Dhcp(IFACE_INET_DHCP &itfd, const NotificationSink &notifyer, QObject *pParent = 0);
  105. virtual ~Dhcp(void);
  106. private:
  107. IFACE_INET_DHCP &m_itfd;
  108. const NotificationSink &m_rNotifyer;
  109. };
  110. /////////////////////////////////////////////////////////////////////////////
  111. class Inet : public QObject
  112. {
  113. Q_OBJECT
  114. Q_PROPERTY(Static* stat READ stat CONSTANT)
  115. Q_PROPERTY(Dhcp* dhcp READ dhcp CONSTANT)
  116. public:
  117. explicit Inet(ITF_IFACE_BLOCK &ifb, const NotificationSink &notifyer, QObject *pParent = 0);
  118. virtual ~Inet(void);
  119. private:
  120. Static* stat(void);
  121. Dhcp* dhcp(void);
  122. private:
  123. Static m_static;
  124. Dhcp m_dhcp;
  125. const NotificationSink &m_rNotifyer;
  126. };
  127. /////////////////////////////////////////////////////////////////////////////
  128. class Interface : public QObject
  129. {
  130. Q_OBJECT
  131. Q_PROPERTY(QString name READ name CONSTANT)
  132. Q_PROPERTY(QString afName READ afName NOTIFY afNameChanged)
  133. Q_PROPERTY(int af READ af WRITE setAf NOTIFY afChanged)
  134. Q_PROPERTY(QString methodName READ methodName NOTIFY methodNameChanged)
  135. Q_PROPERTY(int method READ method WRITE setMethod NOTIFY methodChanged)
  136. Q_PROPERTY(Inet* inet READ inet CONSTANT)
  137. public:
  138. explicit Interface(ITF_IFACE_BLOCK &ifb, const NotificationSink &notifyer, QObject *pParent = 0);
  139. virtual ~Interface(void);
  140. inline const ITF_IFACE_BLOCK & getIface(void) const {
  141. return m_ifb;}
  142. inline unsigned long getID(void) const {
  143. return m_ifb.id;}
  144. enum AddressFamily
  145. {
  146. AF_Unknown = 0,
  147. AF_Inet = 0x0001,
  148. AF_Inet6 = 0x0002,
  149. AF_Ipx = 0x0004,
  150. AF_Can = 0x0008,
  151. AF_Invalid = 0x0010
  152. };
  153. Q_ENUMS(AddressFamily)
  154. enum ItfMethod
  155. {
  156. IM_Unknown = 0,
  157. IM_Static = 0x0001,
  158. IM_Dhcp = 0x0002,
  159. IM_Manual = 0x0004,
  160. IM_BootP = 0x0008,
  161. IM_Tunnel = 0x0010,
  162. IM_Ppp = 0x0020,
  163. IM_WvDial = 0x0040,
  164. IM_IpV4ll = 0x0080,
  165. IM_Loopback = 0x0100,
  166. IM_Auto = 0x0200,
  167. IM_Invalid = 0x0400
  168. };
  169. Q_ENUMS(ItfMethod)
  170. private:
  171. QString name(void) const;
  172. QString afName(void) const;
  173. int af(void) const;
  174. void setAf(int af);
  175. QString methodName(void) const;
  176. int method(void) const;
  177. void setMethod(int method);
  178. Inet* inet(void);
  179. signals:
  180. void afNameChanged(void);
  181. void afChanged(int af);
  182. void methodNameChanged(void);
  183. void methodChanged(int method);
  184. private:
  185. ITF_IFACE_BLOCK &m_ifb;
  186. Inet m_inet;
  187. const NotificationSink &m_rNotifyer;
  188. };
  189. /////////////////////////////////////////////////////////////////////////////
  190. class NetInterfaces : public QObject, public QQmlParserStatus, public NotificationSink
  191. {
  192. Q_OBJECT
  193. Q_INTERFACES(QQmlParserStatus)
  194. Q_PROPERTY(QQmlListProperty<Interface> interfaces READ interfaces NOTIFY interfacesChanged)
  195. Q_PROPERTY(QQmlListProperty<Interface> filteredInterfaces READ filteredInterfaces NOTIFY filteredInterfacesChanged)
  196. Q_PROPERTY(QString itfFilterName READ itfFilterName WRITE setItfFilterName NOTIFY itfFilterNameChanged)
  197. Q_PROPERTY(int itfFilterAF READ itfFilterAF WRITE setItfFilterAF NOTIFY itfFilterAFChanged)
  198. Q_PROPERTY(int itfFilterMethod READ itfFilterMethod WRITE setItfFilterMethod NOTIFY itfFilterMethodChanged)
  199. public:
  200. explicit NetInterfaces(QObject *pParent = 0);
  201. virtual ~NetInterfaces(void);
  202. public:
  203. Q_INVOKABLE void reset(void);
  204. Q_INVOKABLE bool initialize(void);
  205. Q_INVOKABLE bool save(void);
  206. Q_INVOKABLE bool saveAs(const QString &path);
  207. Q_INVOKABLE Interface* newInterface(QString name, int af, int method);
  208. Q_INVOKABLE void removeInterface(Interface *pi);
  209. virtual void classBegin();
  210. virtual void componentComplete();
  211. virtual void emitError(const char *pszFormatStr, ...) const;
  212. virtual void filterPropertyChanged(void) const;
  213. signals:
  214. void interfacesChanged(void) const;
  215. void filteredInterfacesChanged(void) const;
  216. void itfFilterNameChanged(const QString &val) const;
  217. void itfFilterAFChanged(int af) const;
  218. void itfFilterMethodChanged(int method) const;
  219. void error(QString msg) const;
  220. private:
  221. QQmlListProperty<Interface> interfaces(void);
  222. QQmlListProperty<Interface> filteredInterfaces(void);
  223. const QString& itfFilterName(void) const;
  224. void setItfFilterName(const QString &val);
  225. int itfFilterAF(void) const;
  226. void setItfFilterAF(int nval);
  227. int itfFilterMethod(void) const;
  228. void setItfFilterMethod(int method);
  229. private:
  230. ETC_NETWORK_INTERFACES m_eni;
  231. QList<Interface*> m_interfaces;
  232. QList<Interface*> m_filteredInterfaces;
  233. QString m_itfFilterName;
  234. int m_itfFilterAF;
  235. int m_itfFilterMethod;
  236. };
  237. /////////////////////////////////////////////////////////////////////////////
  238. #endif // !defined(AGD_NETINTERFACES_H__54DE87BE_1F3C_4914_A062_9CCFCB496122__INCLUDED_)