-printf("%15s ", inet_ntostring(rule.ip).c_str());
-printf("mask=%08X ", rule.mask);
-printf("port1=%5d ", rule.port1);
-printf("port2=%5d ", rule.port2);
-switch (rule.proto)
- {
- case 0:
- printf("TCP ");
- break;
- case 1:
- printf("UDP ");
- break;
- case 2:
- printf("ICMP ");
- break;
- case 3:
- printf("TCP_UDP ");
- break;
- case 4:
- printf("ALL ");
- break;
- }
-printf("dir=%u \n", static_cast<unsigned>(rule.dir));
+monitorDir = dir;
+monitoring = !monitorDir.empty();
+}
+//-----------------------------------------------------------------------------
+void TRF_IP_BEFORE::notify(const uint32_t & oldValue, const uint32_t &)
+{
+// User changes his address. Remove old IP
+if (!oldValue)
+ return;
+
+AsyncPoolST::enqueue([this, oldValue](){ traffCnt.DelUser(oldValue); });
+}
+//-----------------------------------------------------------------------------
+void TRF_IP_AFTER::notify(const uint32_t &, const uint32_t & newValue)
+{
+// User changes his address. Add new IP
+if (!newValue)
+ return;
+
+AsyncPoolST::enqueue([this](){ traffCnt.AddUser(user); });
+}
+//-----------------------------------------------------------------------------
+void ADD_USER_NONIFIER::notify(const UserImplPtr & user)
+{
+AsyncPoolST::enqueue([this, user](){ traffCnt.SetUserNotifiers(user); });