server.c (7718ced0ea98ea5d1ece76c36a955eec9d97dc52) | server.c (905033dc11714a0471d8fd790720304f6937613a) |
---|---|
1/* $NetBSD: server.c,v 1.1 2008/08/17 13:20:57 plunky Exp $ */ | 1/* $NetBSD: server.c,v 1.2 2009/01/24 17:29:28 plunky Exp $ */ |
2 3/*- 4 * Copyright (c) 2008 Iain Hibbert 5 * All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: --- 13 unchanged lines hidden (view full) --- 23 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 25 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 */ 27 28/* $FreeBSD$ */ 29 30#include <sys/cdefs.h> | 2 3/*- 4 * Copyright (c) 2008 Iain Hibbert 5 * All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: --- 13 unchanged lines hidden (view full) --- 23 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 25 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 */ 27 28/* $FreeBSD$ */ 29 30#include <sys/cdefs.h> |
31__RCSID("$NetBSD: server.c,v 1.1 2008/08/17 13:20:57 plunky Exp $"); | 31__RCSID("$NetBSD: server.c,v 1.2 2009/01/24 17:29:28 plunky Exp $"); |
32 33#include <sys/ioctl.h> 34 35#include <bluetooth.h> | 32 33#include <sys/ioctl.h> 34 35#include <bluetooth.h> |
36#include <inttypes.h> |
|
36#include <errno.h> 37#include <sdp.h> 38#include <unistd.h> 39 40#include "btpand.h" 41#include "bnep.h" 42 43static struct event server_ev; 44static int server_fd; | 37#include <errno.h> 38#include <sdp.h> 39#include <unistd.h> 40 41#include "btpand.h" 42#include "bnep.h" 43 44static struct event server_ev; 45static int server_fd; |
45static int server_load; | 46static int server_avail; |
46 47static void * server_ss; 48static uint32_t server_handle; 49 50static void server_open(void); 51static void server_close(void); 52static void server_read(int, short, void *); 53static void server_register(void); --- 14 unchanged lines hidden (view full) --- 68server_update(int count) 69{ 70 71 if (server_limit == 0) 72 return; 73 74 log_debug("count %d", count); 75 | 47 48static void * server_ss; 49static uint32_t server_handle; 50 51static void server_open(void); 52static void server_close(void); 53static void server_read(int, short, void *); 54static void server_register(void); --- 14 unchanged lines hidden (view full) --- 69server_update(int count) 70{ 71 72 if (server_limit == 0) 73 return; 74 75 log_debug("count %d", count); 76 |
76 server_load = (count - 1) * 100 / server_limit; 77 log_info("server_load: %d%%", server_load); | 77 server_avail = UINT8_MAX - (count - 1) * UINT8_MAX / server_limit; 78 log_info("Service Availability: %d/%d", server_avail, UINT8_MAX); |
78 | 79 |
79 if (server_load > 99 && server_fd != -1) | 80 if (server_avail == 0 && server_fd != -1) |
80 server_close(); 81 | 81 server_close(); 82 |
82 if (server_load < 100 && server_fd == -1) | 83 if (server_avail > 0 && server_fd == -1) |
83 server_open(); 84 85 if (service_name) 86 server_register(); 87} 88 89static void 90server_open(void) --- 161 unchanged lines hidden (view full) --- 252 server_ss = sdp_open_local(control_path); 253 if (server_ss == NULL || sdp_error(server_ss) != 0) { 254 log_err("failed to contact SDP server"); 255 return; 256 } 257 } 258 259 memset(&p, 0, sizeof(p)); | 84 server_open(); 85 86 if (service_name) 87 server_register(); 88} 89 90static void 91server_open(void) --- 161 unchanged lines hidden (view full) --- 253 server_ss = sdp_open_local(control_path); 254 if (server_ss == NULL || sdp_error(server_ss) != 0) { 255 log_err("failed to contact SDP server"); 256 return; 257 } 258 } 259 260 memset(&p, 0, sizeof(p)); |
260 | |
261 p.psm = l2cap_psm; | 261 p.psm = l2cap_psm; |
262 p.load_factor = server_avail; 263 p.security_description = (l2cap_mode == 0 ? 0x0000 : 0x0001); |
|
262 | 264 |
263 if (server_load < 1) p.load_factor = 0; 264 else if (server_load <= 17) p.load_factor = 1; 265 else if (server_load <= 33) p.load_factor = 2; 266 else if (server_load <= 50) p.load_factor = 3; 267 else if (server_load <= 67) p.load_factor = 4; 268 else if (server_load <= 83) p.load_factor = 5; 269 else if (server_load <= 99) p.load_factor = 6; 270 else p.load_factor = 7; 271 272 if (l2cap_mode != 0) p.security_description = 0x0001; 273 | |
274 if (server_handle) 275 rv = sdp_change_service(server_ss, server_handle, 276 (uint8_t *)&p, sizeof(p)); 277 else 278 rv = sdp_register_service(server_ss, service_class, 279 &local_bdaddr, (uint8_t *)&p, sizeof(p), &server_handle); 280 281 if (rv != 0) { 282 errno = sdp_error(server_ss); 283 log_err("%s: %m", service_name); 284 exit(EXIT_FAILURE); 285 } 286} | 265 if (server_handle) 266 rv = sdp_change_service(server_ss, server_handle, 267 (uint8_t *)&p, sizeof(p)); 268 else 269 rv = sdp_register_service(server_ss, service_class, 270 &local_bdaddr, (uint8_t *)&p, sizeof(p), &server_handle); 271 272 if (rv != 0) { 273 errno = sdp_error(server_ss); 274 log_err("%s: %m", service_name); 275 exit(EXIT_FAILURE); 276 } 277} |