Lines Matching refs:srv

53 static int32_t	server_accept (bthid_server_p srv, int32_t fd);
54 static int32_t server_process(bthid_server_p srv, int32_t fd);
61 server_init(bthid_server_p srv)
65 assert(srv != NULL);
67 srv->ctrl = srv->intr = -1;
68 FD_ZERO(&srv->rfdset);
69 FD_ZERO(&srv->wfdset);
70 LIST_INIT(&srv->sessions);
73 srv->cons = open("/dev/consolectl", O_RDWR);
74 if (srv->cons < 0) {
81 srv->ctrl = socket(PF_BLUETOOTH, SOCK_SEQPACKET, BLUETOOTH_PROTO_L2CAP);
82 if (srv->ctrl < 0) {
85 close(srv->cons);
91 memcpy(&l2addr.l2cap_bdaddr, &srv->bdaddr, sizeof(l2addr.l2cap_bdaddr));
94 if (bind(srv->ctrl, (struct sockaddr *) &l2addr, sizeof(l2addr)) < 0) {
97 close(srv->ctrl);
98 close(srv->cons);
102 if (listen(srv->ctrl, 10) < 0) {
105 close(srv->ctrl);
106 close(srv->cons);
111 srv->intr = socket(PF_BLUETOOTH, SOCK_SEQPACKET, BLUETOOTH_PROTO_L2CAP);
112 if (srv->intr < 0) {
115 close(srv->ctrl);
116 close(srv->cons);
122 if (bind(srv->intr, (struct sockaddr *) &l2addr, sizeof(l2addr)) < 0) {
125 close(srv->intr);
126 close(srv->ctrl);
127 close(srv->cons);
131 if (listen(srv->intr, 10) < 0) {
134 close(srv->intr);
135 close(srv->ctrl);
136 close(srv->cons);
140 FD_SET(srv->ctrl, &srv->rfdset);
141 FD_SET(srv->intr, &srv->rfdset);
142 srv->maxfd = max(srv->ctrl, srv->intr);
152 server_shutdown(bthid_server_p srv)
154 assert(srv != NULL);
156 close(srv->cons);
157 close(srv->ctrl);
158 close(srv->intr);
160 while (!LIST_EMPTY(&srv->sessions))
161 session_close(LIST_FIRST(&srv->sessions));
163 memset(srv, 0, sizeof(*srv));
171 server_do(bthid_server_p srv)
177 assert(srv != NULL);
183 memcpy(&rfdset, &srv->rfdset, sizeof(rfdset));
184 memcpy(&wfdset, &srv->wfdset, sizeof(wfdset));
186 n = select(srv->maxfd + 1, &rfdset, &wfdset, NULL, &tv);
192 srv->maxfd + 1, &rfdset, &wfdset, strerror(errno), errno);
198 for (fd = 0; fd < srv->maxfd + 1 && n > 0; fd ++) {
202 if (fd == srv->ctrl || fd == srv->intr)
203 server_accept(srv, fd);
205 server_process(srv, fd);
209 client_connect(srv, fd);
221 server_accept(bthid_server_p srv, int32_t fd)
232 (fd == srv->ctrl)? "control" : "interrupt",
241 (fd == srv->ctrl)? "control" : "interrupt",
248 if ((s = session_by_bdaddr(srv, &l2addr.l2cap_bdaddr)) == NULL) {
253 if ((s = session_open(srv, d)) == NULL) {
262 if (fd == srv->ctrl) {
272 FD_SET(new_fd, &srv->rfdset);
273 if (new_fd > srv->maxfd)
274 srv->maxfd = new_fd;
277 (fd == srv->ctrl)? "control" : "interrupt",
284 FD_SET(s->vkbd, &srv->rfdset);
285 if (s->vkbd > srv->maxfd)
286 srv->maxfd = s->vkbd;
297 server_process(bthid_server_p srv, int32_t fd)
299 bthid_session_p s = session_by_fd(srv, fd);