/* * Copyright 2008, Haiku, Inc. All Rights Reserved. * Distributed under the terms of the MIT License. */ /*! The notifications API uses the generic syscall interface of the network's stack notification module. */ #include #include #include #include static status_t check_for_notifications_syscall(void) { uint32 version = 0; return _kern_generic_syscall(NET_NOTIFICATIONS_SYSCALLS, B_SYSCALL_INFO, &version, sizeof(version)); } // #pragma mark - status_t start_watching_network(uint32 flags, const BMessenger& target) { if (check_for_notifications_syscall() != B_OK) return B_NOT_SUPPORTED; BMessenger::Private targetPrivate(const_cast(target)); net_notifications_control control; control.flags = flags; control.port = targetPrivate.Port(); control.token = targetPrivate.Token(); return _kern_generic_syscall(NET_NOTIFICATIONS_SYSCALLS, NET_NOTIFICATIONS_CONTROL_WATCHING, &control, sizeof(net_notifications_control)); } status_t start_watching_network(uint32 flags, const BHandler* handler, const BLooper* looper) { const BMessenger target(handler, looper); return start_watching_network(flags, target); } status_t stop_watching_network(const BMessenger& target) { return start_watching_network(0, target); // start_watching_network() without flags just stops everything } status_t stop_watching_network(const BHandler* handler, const BLooper* looper) { const BMessenger target(handler, looper); return stop_watching_network(target); }