Lines Matching refs:srv

54 static int32_t	server_accept (bthid_server_p srv, int32_t fd);
55 static int32_t server_process(bthid_server_p srv, int32_t fd);
62 server_init(bthid_server_p srv)
66 assert(srv != NULL);
68 srv->ctrl = srv->intr = -1;
69 FD_ZERO(&srv->rfdset);
70 FD_ZERO(&srv->wfdset);
71 LIST_INIT(&srv->sessions);
74 srv->cons = open("/dev/consolectl", O_RDWR);
75 if (srv->cons < 0) {
82 srv->ctrl = socket(PF_BLUETOOTH, SOCK_SEQPACKET, BLUETOOTH_PROTO_L2CAP);
83 if (srv->ctrl < 0) {
86 close(srv->cons);
92 memcpy(&l2addr.l2cap_bdaddr, &srv->bdaddr, sizeof(l2addr.l2cap_bdaddr));
97 if (bind(srv->ctrl, (struct sockaddr *) &l2addr, sizeof(l2addr)) < 0) {
100 close(srv->ctrl);
101 close(srv->cons);
105 if (listen(srv->ctrl, 10) < 0) {
108 close(srv->ctrl);
109 close(srv->cons);
114 srv->intr = socket(PF_BLUETOOTH, SOCK_SEQPACKET, BLUETOOTH_PROTO_L2CAP);
115 if (srv->intr < 0) {
118 close(srv->ctrl);
119 close(srv->cons);
125 if (bind(srv->intr, (struct sockaddr *) &l2addr, sizeof(l2addr)) < 0) {
128 close(srv->intr);
129 close(srv->ctrl);
130 close(srv->cons);
134 if (listen(srv->intr, 10) < 0) {
137 close(srv->intr);
138 close(srv->ctrl);
139 close(srv->cons);
143 FD_SET(srv->ctrl, &srv->rfdset);
144 FD_SET(srv->intr, &srv->rfdset);
145 srv->maxfd = max(srv->ctrl, srv->intr);
155 server_shutdown(bthid_server_p srv)
157 assert(srv != NULL);
159 close(srv->cons);
160 close(srv->ctrl);
161 close(srv->intr);
163 while (!LIST_EMPTY(&srv->sessions))
164 session_close(LIST_FIRST(&srv->sessions));
166 memset(srv, 0, sizeof(*srv));
174 server_do(bthid_server_p srv)
180 assert(srv != NULL);
186 memcpy(&rfdset, &srv->rfdset, sizeof(rfdset));
187 memcpy(&wfdset, &srv->wfdset, sizeof(wfdset));
189 n = select(srv->maxfd + 1, &rfdset, &wfdset, NULL, &tv);
195 srv->maxfd + 1, &rfdset, &wfdset, strerror(errno), errno);
201 for (fd = 0; fd < srv->maxfd + 1 && n > 0; fd ++) {
205 if (fd == srv->ctrl || fd == srv->intr)
206 server_accept(srv, fd);
208 server_process(srv, fd);
212 client_connect(srv, fd);
224 server_accept(bthid_server_p srv, int32_t fd)
235 (fd == srv->ctrl)? "control" : "interrupt",
244 (fd == srv->ctrl)? "control" : "interrupt",
251 if ((s = session_by_bdaddr(srv, &l2addr.l2cap_bdaddr)) == NULL) {
256 if ((s = session_open(srv, d)) == NULL) {
265 if (fd == srv->ctrl) {
275 FD_SET(new_fd, &srv->rfdset);
276 if (new_fd > srv->maxfd)
277 srv->maxfd = new_fd;
280 (fd == srv->ctrl)? "control" : "interrupt",
287 FD_SET(s->vkbd, &srv->rfdset);
288 if (s->vkbd > srv->maxfd)
289 srv->maxfd = s->vkbd;
300 server_process(bthid_server_p srv, int32_t fd)
302 bthid_session_p s = session_by_fd(srv, fd);