Home | History | Annotate | Download | only in netbt

Lines Matching refs:rs

172 	struct rfcomm_session *rs;
176 rs = malloc(sizeof(*rs), M_BLUETOOTH, M_NOWAIT | M_ZERO);
177 if (rs == NULL)
180 rs->rs_state = RFCOMM_SESSION_CLOSED;
182 callout_init(&rs->rs_timeout, 0);
183 callout_setfunc(&rs->rs_timeout, rfcomm_session_timeout, rs);
185 SIMPLEQ_INIT(&rs->rs_credits);
186 LIST_INIT(&rs->rs_dlcs);
188 err = l2cap_attach_pcb(&rs->rs_l2cap, &rfcomm_session_proto, rs);
190 free(rs, M_BLUETOOTH);
195 (void)l2cap_getopt(rs->rs_l2cap, &sopt);
196 (void)sockopt_get(&sopt, &rs->rs_mtu, sizeof(rs->rs_mtu));
202 (void)l2cap_bind_pcb(rs->rs_l2cap, laddr);
204 LIST_INSERT_HEAD(list, rs, rs_next);
206 return rs;
215 rfcomm_session_free(struct rfcomm_session *rs)
219 KASSERT(rs != NULL);
220 KASSERT(LIST_EMPTY(&rs->rs_dlcs));
222 rs->rs_state = RFCOMM_SESSION_CLOSED;
229 callout_stop(&rs->rs_timeout);
230 if (callout_invoking(&rs->rs_timeout))
238 if (rs->rs_flags & RFCOMM_SESSION_FREE)
241 rs->rs_flags |= RFCOMM_SESSION_FREE;
244 while ((credit = SIMPLEQ_FIRST(&rs->rs_credits)) != NULL) {
245 SIMPLEQ_REMOVE_HEAD(&rs->rs_credits, rc_next);
249 KASSERT(SIMPLEQ_EMPTY(&rs->rs_credits));
252 LIST_REMOVE(rs, rs_next);
253 l2cap_detach_pcb(&rs->rs_l2cap);
254 callout_destroy(&rs->rs_timeout);
255 free(rs, M_BLUETOOTH);
267 struct rfcomm_session *rs;
270 LIST_FOREACH(rs, &rfcomm_session_active, rs_next) {
271 if (rs->rs_state == RFCOMM_SESSION_CLOSED)
274 l2cap_sockaddr_pcb(rs->rs_l2cap, &addr);
280 l2cap_peeraddr_pcb(rs->rs_l2cap, &addr);
289 return rs;
305 struct rfcomm_session *rs = arg;
308 KASSERT(rs != NULL);
311 callout_ack(&rs->rs_timeout);
313 if (rs->rs_state != RFCOMM_SESSION_OPEN) {
315 rs->rs_state = RFCOMM_SESSION_CLOSED;
317 while (!LIST_EMPTY(&rs->rs_dlcs)) {
318 dlc = LIST_FIRST(&rs->rs_dlcs);
324 if (LIST_EMPTY(&rs->rs_dlcs)) {
326 rfcomm_session_free(rs);
340 /* struct rfcomm_session *rs = arg; */
348 struct rfcomm_session *rs = arg;
363 (void)l2cap_getopt(rs->rs_l2cap, &sopt);
364 (void)sockopt_get(&sopt, &rs->rs_mtu, sizeof(rs->rs_mtu));
367 rs->rs_mtu -= 6; /* (RFCOMM overhead could be this big) */
368 if (rs->rs_mtu < RFCOMM_MTU_MIN) {
369 rfcomm_session_disconnected(rs, EINVAL);
373 if (IS_INITIATOR(rs)) {
376 err = rfcomm_session_send_frame(rs, RFCOMM_FRAME_SABM, 0);
378 rfcomm_session_disconnected(rs, err);
380 callout_schedule(&rs->rs_timeout, rfcomm_ack_timeout * hz);
387 struct rfcomm_session *rs = arg;
399 rs->rs_state = RFCOMM_SESSION_CLOSED;
401 while (!LIST_EMPTY(&rs->rs_dlcs)) {
402 dlc = LIST_FIRST(&rs->rs_dlcs);
407 rfcomm_session_free(rs);
414 struct rfcomm_session *new, *rs = arg;
432 new->rs_mtu = rs->rs_mtu;
447 struct rfcomm_session *rs = arg;
458 credit = SIMPLEQ_FIRST(&rs->rs_credits);
474 if ((rs->rs_flags & RFCOMM_SESSION_CFC) == 0
486 rfcomm_session_send_frame(rs, RFCOMM_FRAME_DISC,
493 SIMPLEQ_REMOVE_HEAD(&rs->rs_credits, rc_next);
500 if (rs->rs_state == RFCOMM_SESSION_CLOSED) {
501 if (SIMPLEQ_EMPTY(&rs->rs_credits))
502 l2cap_disconnect_pcb(rs->rs_l2cap, 0);
515 struct rfcomm_session *rs = arg;
533 next = LIST_FIRST(&rs->rs_dlcs);
542 err = rfcomm_session_send_frame(rs,
558 if (!LIST_EMPTY(&rs->rs_dlcs))
561 rs->rs_state = RFCOMM_SESSION_WAIT_DISCONNECT;
562 rfcomm_session_send_frame(rs, RFCOMM_FRAME_DISC, 0);
563 callout_schedule(&rs->rs_timeout, rfcomm_ack_timeout * hz);
568 rfcomm_session_send_frame(rs,
574 err = rfcomm_session_send_frame(rs,
577 rfcomm_session_send_frame(rs,
585 rfcomm_session_send_frame(rs,
611 struct rfcomm_session *rs = arg;
616 KASSERT(rs != NULL);
680 rfcomm_session_recv_sabm(rs, dlci);
685 rfcomm_session_recv_disc(rs, dlci);
690 rfcomm_session_recv_ua(rs, dlci);
694 rfcomm_session_recv_dm(rs, dlci);
698 rfcomm_session_recv_uih(rs, dlci, pf, m, len);
721 rfcomm_session_recv_sabm(struct rfcomm_session *rs, int dlci)
729 rs->rs_state = RFCOMM_SESSION_OPEN;
730 rfcomm_session_send_frame(rs, RFCOMM_FRAME_UA, 0);
731 LIST_FOREACH(dlc, &rs->rs_dlcs, rd_next) {
738 if (rs->rs_state != RFCOMM_SESSION_OPEN) {
744 if ((IS_INITIATOR(rs) && !RFCOMM_DIRECTION(dlci))
745 || (!IS_INITIATOR(rs) && RFCOMM_DIRECTION(dlci))) {
754 dlc = rfcomm_dlc_lookup(rs, dlci);
756 dlc = rfcomm_dlc_newconn(rs, dlci);
778 err = rfcomm_session_send_frame(rs, RFCOMM_FRAME_UA, dlci);
797 rfcomm_session_recv_disc(struct rfcomm_session *rs, int dlci)
814 rfcomm_session_send_frame(rs, RFCOMM_FRAME_UA, 0);
815 rs->rs_state = RFCOMM_SESSION_CLOSED;
819 dlc = rfcomm_dlc_lookup(rs, dlci);
821 rfcomm_session_send_frame(rs, RFCOMM_FRAME_DM, dlci);
826 rfcomm_session_send_frame(rs, RFCOMM_FRAME_UA, dlci);
836 rfcomm_session_recv_ua(struct rfcomm_session *rs, int dlci)
843 switch (rs->rs_state) {
845 callout_stop(&rs->rs_timeout);
846 rs->rs_state = RFCOMM_SESSION_OPEN;
847 LIST_FOREACH(dlc, &rs->rs_dlcs, rd_next) {
854 callout_stop(&rs->rs_timeout);
855 rs->rs_state = RFCOMM_SESSION_CLOSED;
856 l2cap_disconnect_pcb(rs->rs_l2cap, 0);
872 dlc = rfcomm_dlc_lookup(rs, dlci);
891 if (LIST_EMPTY(&rs->rs_dlcs)) {
892 rs->rs_state = RFCOMM_SESSION_WAIT_DISCONNECT;
893 rfcomm_session_send_frame(rs, RFCOMM_FRAME_DISC, 0);
894 callout_schedule(&rs->rs_timeout, rfcomm_ack_timeout * hz);
904 rfcomm_session_recv_dm(struct rfcomm_session *rs, int dlci)
910 dlc = rfcomm_dlc_lookup(rs, dlci);
924 rfcomm_session_recv_uih(struct rfcomm_session *rs, int dlci,
933 rfcomm_session_recv_mcc(rs, m);
944 dlc = rfcomm_dlc_lookup(rs, dlci);
947 rfcomm_session_send_frame(rs, RFCOMM_FRAME_DM, dlci);
958 if (rs->rs_flags & RFCOMM_SESSION_CFC) {
1002 rfcomm_session_recv_mcc(struct rfcomm_session *rs, struct mbuf *m)
1060 rfcomm_session_recv_mcc_test(rs, cr, m);
1064 rfcomm_session_recv_mcc_fcon(rs, cr);
1068 rfcomm_session_recv_mcc_fcoff(rs, cr);
1072 rfcomm_session_recv_mcc_msc(rs, cr, m);
1076 rfcomm_session_recv_mcc_rpn(rs, cr, m);
1080 rfcomm_session_recv_mcc_rls(rs, cr, m);
1084 rfcomm_session_recv_mcc_pn(rs, cr, m);
1088 rfcomm_session_recv_mcc_nsc(rs, cr, m);
1093 rfcomm_session_send_mcc(rs, 0, RFCOMM_MCC_NSC, &b, sizeof(b));
1104 rfcomm_session_recv_mcc_test(struct rfcomm_session *rs, int cr, struct mbuf *m)
1125 rfcomm_session_send_mcc(rs, 0, RFCOMM_MCC_TEST, data, len);
1133 rfcomm_session_recv_mcc_fcon(struct rfcomm_session *rs, int cr)
1139 rs->rs_flags |= RFCOMM_SESSION_RFC;
1140 rfcomm_session_send_mcc(rs, 0, RFCOMM_MCC_FCON, NULL, 0);
1147 rfcomm_session_recv_mcc_fcoff(struct rfcomm_session *rs, int cr)
1153 rs->rs_flags &= ~RFCOMM_SESSION_RFC;
1154 rfcomm_session_send_mcc(rs, 0, RFCOMM_MCC_FCOFF, NULL, 0);
1161 rfcomm_session_recv_mcc_msc(struct rfcomm_session *rs, int cr, struct mbuf *m)
1175 dlc = rfcomm_dlc_lookup(rs, RFCOMM_DLCI(msc.address));
1185 rfcomm_session_send_frame(rs, RFCOMM_FRAME_DM,
1212 rfcomm_session_send_mcc(rs, 0, RFCOMM_MCC_MSC, &msc, len);
1219 rfcomm_session_recv_mcc_rpn(struct rfcomm_session *rs, int cr, struct mbuf *m)
1278 rfcomm_session_send_mcc(rs, 0, RFCOMM_MCC_RPN, &rpn, sizeof(rpn));
1285 rfcomm_session_recv_mcc_rls(struct rfcomm_session *rs, int cr, struct mbuf *m)
1307 rfcomm_session_send_mcc(rs, 0, RFCOMM_MCC_RLS, &rls, sizeof(rls));
1314 rfcomm_session_recv_mcc_pn(struct rfcomm_session *rs, int cr, struct mbuf *m)
1330 dlc = rfcomm_dlc_lookup(rs, pn.dlci);
1337 dlc = rfcomm_dlc_newconn(rs, pn.dlci);
1344 pn.mtu = uimin(pn.mtu, rs->rs_mtu);
1352 rs->rs_flags |= RFCOMM_SESSION_CFC;
1371 err = rfcomm_session_send_mcc(rs, 0,
1386 err = rfcomm_session_send_frame(rs, RFCOMM_FRAME_DISC,
1403 rs->rs_flags |= RFCOMM_SESSION_CFC;
1420 err = rfcomm_session_send_frame(rs, RFCOMM_FRAME_SABM, pn.dlci);
1436 rfcomm_session_recv_mcc_nsc(struct rfcomm_session *rs,
1446 next = LIST_FIRST(&rs->rs_dlcs);
1452 rfcomm_session_free(rs);
1464 rfcomm_session_send_frame(struct rfcomm_session *rs, int type, int dlci)
1489 cr = IS_INITIATOR(rs) ? 0 : 1;
1491 cr = IS_INITIATOR(rs) ? 1 : 0;
1510 SIMPLEQ_INSERT_TAIL(&rs->rs_credits, credit, rc_next);
1515 return l2cap_send_pcb(rs->rs_l2cap, m);
1526 rfcomm_session_send_uih(struct rfcomm_session *rs, struct rfcomm_dlc *dlc,
1534 KASSERT(rs != NULL);
1573 *hdr = RFCOMM_MKADDRESS((IS_INITIATOR(rs) ? 1 : 0),
1615 err = l2cap_send_pcb(rs->rs_l2cap, m0);
1619 SIMPLEQ_INSERT_TAIL(&rs->rs_credits, credit, rc_next);
1640 rfcomm_session_send_mcc(struct rfcomm_session *rs, int cr,
1703 return rfcomm_session_send_uih(rs, NULL, 0, m);