1/* 2 * Copyright 2008, Haiku, Inc. All Rights Reserved. 3 * Distributed under the terms of the MIT License. 4 */ 5 6/*! The notifications API uses the generic syscall interface of the 7 network's stack notification module. 8*/ 9 10#include <net_notifications.h> 11 12#include <MessengerPrivate.h> 13#include <generic_syscall_defs.h> 14#include <syscalls.h> 15 16 17static status_t 18check_for_notifications_syscall(void) 19{ 20 uint32 version = 0; 21 return _kern_generic_syscall(NET_NOTIFICATIONS_SYSCALLS, B_SYSCALL_INFO, 22 &version, sizeof(version)); 23} 24 25 26// #pragma mark - 27 28 29status_t 30start_watching_network(uint32 flags, const BMessenger& target) 31{ 32 if (check_for_notifications_syscall() != B_OK) 33 return B_NOT_SUPPORTED; 34 35 BMessenger::Private targetPrivate(const_cast<BMessenger&>(target)); 36 net_notifications_control control; 37 control.flags = flags; 38 control.port = targetPrivate.Port(); 39 control.token = targetPrivate.Token(); 40 41 return _kern_generic_syscall(NET_NOTIFICATIONS_SYSCALLS, 42 NET_NOTIFICATIONS_CONTROL_WATCHING, &control, 43 sizeof(net_notifications_control)); 44} 45 46 47status_t 48start_watching_network(uint32 flags, const BHandler* handler, 49 const BLooper* looper) 50{ 51 const BMessenger target(handler, looper); 52 return start_watching_network(flags, target); 53} 54 55status_t 56stop_watching_network(const BMessenger& target) 57{ 58 return start_watching_network(0, target); 59 // start_watching_network() without flags just stops everything 60} 61 62 63status_t 64stop_watching_network(const BHandler* handler, const BLooper* looper) 65{ 66 const BMessenger target(handler, looper); 67 return stop_watching_network(target); 68} 69