Lines Matching refs:par
228 lws_mqtt_pconsume(lws_mqtt_parser_t *par, int consumed) in lws_mqtt_pconsume() argument
230 par->consumed += consumed; in lws_mqtt_pconsume()
232 if (par->consumed > par->props_len) in lws_mqtt_pconsume()
237 if (par->consumed < par->props_len) { in lws_mqtt_pconsume()
238 par->state = LMQCPP_PROP_ID_VBI; in lws_mqtt_pconsume()
244 if ((map_flags[ctl_pkt_type(par)] & LMQCP_LUT_FLAG_PAYLOAD) && in lws_mqtt_pconsume()
247 (ctl_pkt_type(par) != LMQCP_PUBLISH || in lws_mqtt_pconsume()
248 (par->packet_type_flags & 6))) { in lws_mqtt_pconsume()
249 par->state = LMQCPP_PAYLOAD; in lws_mqtt_pconsume()
253 par->state = LMQCPP_IDLE; in lws_mqtt_pconsume()
345 _lws_mqtt_rx_parser(struct lws *wsi, lws_mqtt_parser_t *par, in _lws_mqtt_rx_parser() argument
351 if (par->flag_pending_send_reason_close) in _lws_mqtt_rx_parser()
362 lwsl_debug("%s: %d, len = %d\n", __func__, par->state, (int)len); in _lws_mqtt_rx_parser()
363 switch (par->state) { in _lws_mqtt_rx_parser()
365 par->packet_type_flags = *buf++; in _lws_mqtt_rx_parser()
374 par->packet_type_flags >> 4 != LMQCP_STOC_CONNACK) { in _lws_mqtt_rx_parser()
381 n = map_flags[par->packet_type_flags >> 4]; in _lws_mqtt_rx_parser()
388 ((par->packet_type_flags & 0x0f) != (n & 0x0f))) { in _lws_mqtt_rx_parser()
390 __func__, wsi, par->packet_type_flags, n, (int)len + 1); in _lws_mqtt_rx_parser()
396 __func__, par->packet_type_flags >> 4, in _lws_mqtt_rx_parser()
397 par->packet_type_flags & 0xf); in _lws_mqtt_rx_parser()
401 memset(par->props_seen, 0, sizeof(par->props_seen)); in _lws_mqtt_rx_parser()
402 par->state = par->packet_type_flags & 0xf0; in _lws_mqtt_rx_parser()
407 par->state = LMQCPP_CONNECT_REMAINING_LEN_VBI; in _lws_mqtt_rx_parser()
408 lws_mqtt_vbi_init(&par->vbit); in _lws_mqtt_rx_parser()
412 switch (lws_mqtt_vbi_r(&par->vbit, &buf, &len)) { in _lws_mqtt_rx_parser()
416 par->cpkt_remlen = par->vbit.value; in _lws_mqtt_rx_parser()
417 n = map_flags[ctl_pkt_type(par)]; in _lws_mqtt_rx_parser()
418 lws_mqtt_str_init(&par->s_temp, par->temp, in _lws_mqtt_rx_parser()
419 sizeof(par->temp), 0); in _lws_mqtt_rx_parser()
420 par->state = LMQCPP_CONNECT_VH_PNAME; in _lws_mqtt_rx_parser()
429 switch (lws_mqtt_str_parse(&par->s_temp, &buf, &len)) { in _lws_mqtt_rx_parser()
433 if (par->s_temp.len != 4 || in _lws_mqtt_rx_parser()
434 memcmp(par->s_temp.buf, "MQTT", in _lws_mqtt_rx_parser()
435 par->s_temp.len)) { in _lws_mqtt_rx_parser()
437 __func__, par->s_temp.len, in _lws_mqtt_rx_parser()
438 par->s_temp.buf); in _lws_mqtt_rx_parser()
441 par->state = LMQCPP_CONNECT_VH_PVERSION; in _lws_mqtt_rx_parser()
450 par->conn_protocol_version = *buf++; in _lws_mqtt_rx_parser()
452 if (par->conn_protocol_version != 5) { in _lws_mqtt_rx_parser()
454 __func__, par->conn_protocol_version); in _lws_mqtt_rx_parser()
457 par->state = LMQCPP_CONNECT_VH_FLAGS; in _lws_mqtt_rx_parser()
461 par->cpkt_flags = *buf++; in _lws_mqtt_rx_parser()
463 if (par->cpkt_flags & 1) { in _lws_mqtt_rx_parser()
469 par->reason = LMQCP_REASON_MALFORMED_PACKET; in _lws_mqtt_rx_parser()
476 lws_mqtt_2byte_init(&par->vbit); in _lws_mqtt_rx_parser()
477 par->state = LMQCPP_CONNECT_VH_KEEPALIVE; in _lws_mqtt_rx_parser()
481 switch (lws_mqtt_vbi_r(&par->vbit, &buf, &len)) { in _lws_mqtt_rx_parser()
485 par->keepalive = (uint16_t)par->vbit.value; in _lws_mqtt_rx_parser()
486 lws_mqtt_vbi_init(&par->vbit); in _lws_mqtt_rx_parser()
487 par->state = LMQCPP_CONNECT_VH_PROPERTIES_VBI_LEN; in _lws_mqtt_rx_parser()
503 switch (lws_mqtt_vbi_r(&par->vbit, &buf, &len)) { in _lws_mqtt_rx_parser()
508 par->consumed = 0; in _lws_mqtt_rx_parser()
509 par->props_len = par->vbit.value; in _lws_mqtt_rx_parser()
510 lws_mqtt_vbi_init(&par->vbit); in _lws_mqtt_rx_parser()
511 par->state = LMQCPP_PROP_ID_VBI; in _lws_mqtt_rx_parser()
526 par->state = LMQCPP_PUBLISH_REMAINING_LEN_VBI; in _lws_mqtt_rx_parser()
527 lws_mqtt_vbi_init(&par->vbit); in _lws_mqtt_rx_parser()
530 switch (lws_mqtt_vbi_r(&par->vbit, &buf, &len)) { in _lws_mqtt_rx_parser()
534 par->cpkt_remlen = par->vbit.value; in _lws_mqtt_rx_parser()
536 __func__, (int)par->cpkt_remlen); in _lws_mqtt_rx_parser()
538 par->state = LMQCPP_PUBLISH_VH_TOPIC; in _lws_mqtt_rx_parser()
556 par->n = lws_ser_ru16be(buf); in _lws_mqtt_rx_parser()
560 if (len < par->n) {/* the way this is written... */ in _lws_mqtt_rx_parser()
566 if (par->n == 0) { in _lws_mqtt_rx_parser()
568 par->reason = LMQCP_REASON_MALFORMED_PACKET; in _lws_mqtt_rx_parser()
572 __func__, (int)par->n); in _lws_mqtt_rx_parser()
580 pub->topic_len = par->n; in _lws_mqtt_rx_parser()
594 ((par->packet_type_flags >> 1) & 0x3); in _lws_mqtt_rx_parser()
598 pub->payload_len = par->cpkt_remlen - in _lws_mqtt_rx_parser()
603 par->state = LMQCPP_PAYLOAD; in _lws_mqtt_rx_parser()
610 par->state = LMQCPP_PUBLISH_VH_PKT_ID; in _lws_mqtt_rx_parser()
613 par->reason = LMQCP_REASON_MALFORMED_PACKET; in _lws_mqtt_rx_parser()
630 par->cpkt_id = lws_ser_ru16be(buf); in _lws_mqtt_rx_parser()
633 wsi->mqtt->ack_pkt_id = par->cpkt_id; in _lws_mqtt_rx_parser()
635 __func__, (int)par->cpkt_id); in _lws_mqtt_rx_parser()
636 par->state = LMQCPP_PAYLOAD; in _lws_mqtt_rx_parser()
638 pub->payload_len = par->cpkt_remlen - in _lws_mqtt_rx_parser()
667 lws_mqtt_vbi_init(&par->vbit); in _lws_mqtt_rx_parser()
668 switch (lws_mqtt_vbi_r(&par->vbit, &buf, &len)) { in _lws_mqtt_rx_parser()
672 par->cpkt_remlen = par->vbit.value; in _lws_mqtt_rx_parser()
674 __func__, (int)par->cpkt_remlen); in _lws_mqtt_rx_parser()
675 if (par->cpkt_remlen != 2) in _lws_mqtt_rx_parser()
678 par->state = LMQCPP_CONNACK_VH_FLAGS; in _lws_mqtt_rx_parser()
689 par->cpkt_flags = *buf++; in _lws_mqtt_rx_parser()
692 if (par->cpkt_flags & ~LMQCFT_SESSION_PRESENT) { in _lws_mqtt_rx_parser()
698 par->reason = LMQCP_REASON_MALFORMED_PACKET; in _lws_mqtt_rx_parser()
721 (par->cpkt_flags & LMQCFT_SESSION_PRESENT)) in _lws_mqtt_rx_parser()
724 wsi->mqtt->session_resumed = (par->cpkt_flags & in _lws_mqtt_rx_parser()
728 par->state = LMQCPP_CONNACK_VH_RETURN_CODE; in _lws_mqtt_rx_parser()
732 par->conn_rc = *buf++; in _lws_mqtt_rx_parser()
739 switch (par->conn_rc) { in _lws_mqtt_rx_parser()
747 par->reason = LMQCP_REASON_UNSUPPORTED_PROTOCOL + in _lws_mqtt_rx_parser()
748 par->conn_rc - 1; in _lws_mqtt_rx_parser()
765 lws_mqtt_vbi_init(&par->vbit); in _lws_mqtt_rx_parser()
766 switch (lws_mqtt_vbi_r(&par->vbit, &buf, &len)) { in _lws_mqtt_rx_parser()
770 par->cpkt_remlen = par->vbit.value; in _lws_mqtt_rx_parser()
772 __func__, (int)par->cpkt_remlen); in _lws_mqtt_rx_parser()
773 if (par->cpkt_remlen <= 2) in _lws_mqtt_rx_parser()
775 par->state = LMQCPP_SUBACK_VH_PKT_ID; in _lws_mqtt_rx_parser()
790 par->cpkt_id = lws_ser_ru16be(buf); in _lws_mqtt_rx_parser()
791 wsi->mqtt->ack_pkt_id = par->cpkt_id; in _lws_mqtt_rx_parser()
794 par->cpkt_remlen -= 2; in _lws_mqtt_rx_parser()
795 par->n = 0; in _lws_mqtt_rx_parser()
796 par->state = LMQCPP_SUBACK_PAYLOAD; in _lws_mqtt_rx_parser()
797 *par->temp = 0; in _lws_mqtt_rx_parser()
814 par->reason = LMQCP_REASON_MALFORMED_PACKET; in _lws_mqtt_rx_parser()
818 if (++(par->n) == par->cpkt_remlen) { in _lws_mqtt_rx_parser()
819 par->n = 0; in _lws_mqtt_rx_parser()
835 lws_mqtt_vbi_init(&par->vbit); in _lws_mqtt_rx_parser()
836 switch (lws_mqtt_vbi_r(&par->vbit, &buf, &len)) { in _lws_mqtt_rx_parser()
840 par->cpkt_remlen = par->vbit.value; in _lws_mqtt_rx_parser()
842 __func__, (int)par->cpkt_remlen); in _lws_mqtt_rx_parser()
843 if (par->cpkt_remlen < 2) in _lws_mqtt_rx_parser()
845 par->state = LMQCPP_UNSUBACK_VH_PKT_ID; in _lws_mqtt_rx_parser()
860 par->cpkt_id = lws_ser_ru16be(buf); in _lws_mqtt_rx_parser()
861 wsi->mqtt->ack_pkt_id = par->cpkt_id; in _lws_mqtt_rx_parser()
864 par->cpkt_remlen -= 2; in _lws_mqtt_rx_parser()
865 par->n = 0; in _lws_mqtt_rx_parser()
870 lws_mqtt_vbi_init(&par->vbit); in _lws_mqtt_rx_parser()
871 switch (lws_mqtt_vbi_r(&par->vbit, &buf, &len)) { in _lws_mqtt_rx_parser()
875 par->cpkt_remlen = par->vbit.value; in _lws_mqtt_rx_parser()
877 (int)par->cpkt_remlen); in _lws_mqtt_rx_parser()
882 if (par->cpkt_remlen <= 1 || in _lws_mqtt_rx_parser()
883 par->cpkt_remlen == 3) in _lws_mqtt_rx_parser()
886 par->state = LMQCPP_PUBACK_VH_PKT_ID; in _lws_mqtt_rx_parser()
887 par->fixed_seen[2] = par->fixed_seen[3] = 0; in _lws_mqtt_rx_parser()
888 par->fixed = 0; in _lws_mqtt_rx_parser()
889 par->n = 0; in _lws_mqtt_rx_parser()
902 par->fixed_seen[par->fixed++] = *buf++; in _lws_mqtt_rx_parser()
903 if (len < par->cpkt_remlen - par->n) { in _lws_mqtt_rx_parser()
908 par->n++; in _lws_mqtt_rx_parser()
909 if (par->fixed == 2) in _lws_mqtt_rx_parser()
910 par->cpkt_id = lws_ser_ru16be(par->fixed_seen); in _lws_mqtt_rx_parser()
912 if (par->fixed == 3) { in _lws_mqtt_rx_parser()
913 lws_mqtt_vbi_init(&par->vbit); in _lws_mqtt_rx_parser()
914 par->props_consumed = 0; in _lws_mqtt_rx_parser()
915 par->state = LMQCPP_PUBACK_PROPERTIES_LEN_VBI; in _lws_mqtt_rx_parser()
918 if (par->cpkt_remlen == par->fixed) in _lws_mqtt_rx_parser()
923 switch (lws_mqtt_vbi_r(&par->vbit, &buf, &len)) { in _lws_mqtt_rx_parser()
927 par->props_len = par->vbit.value; in _lws_mqtt_rx_parser()
929 __func__, (int)par->cpkt_remlen); in _lws_mqtt_rx_parser()
934 if (!par->props_len) in _lws_mqtt_rx_parser()
941 lws_mqtt_vbi_init(&par->vbit); in _lws_mqtt_rx_parser()
942 par->state = LMQCPP_PUBACK_VH_PKT_ID; in _lws_mqtt_rx_parser()
954 par->props_consumed++; in _lws_mqtt_rx_parser()
957 if (par->props_len != par->props_consumed) in _lws_mqtt_rx_parser()
966 par->state = LMQCPP_IDLE; in _lws_mqtt_rx_parser()
968 switch (par->packet_type_flags >> 4) { in _lws_mqtt_rx_parser()
1095 w->mqtt->ack_pkt_id == par->cpkt_id) { in _lws_mqtt_rx_parser()
1165 w->mqtt->ack_pkt_id == par->cpkt_id) { in _lws_mqtt_rx_parser()
1207 w->mqtt->ack_pkt_id == par->cpkt_id) { in _lws_mqtt_rx_parser()
1303 par->state = LMQCPP_PAYLOAD; in _lws_mqtt_rx_parser()
1313 par->payload_consumed = 0; in _lws_mqtt_rx_parser()
1327 switch (lws_mqtt_vbi_r(&par->vbit, &buf, &len)) { in _lws_mqtt_rx_parser()
1331 par->consumed += par->vbit.consumed; in _lws_mqtt_rx_parser()
1332 if (par->vbit.value > in _lws_mqtt_rx_parser()
1335 __func__, (int)par->vbit.value); in _lws_mqtt_rx_parser()
1338 if (!(property_valid[par->vbit.value] & in _lws_mqtt_rx_parser()
1339 (1 << ctl_pkt_type(par)))) { in _lws_mqtt_rx_parser()
1342 (int)par->vbit.value, in _lws_mqtt_rx_parser()
1343 ctl_pkt_type(par)); in _lws_mqtt_rx_parser()
1346 par->prop_id = par->vbit.value; in _lws_mqtt_rx_parser()
1347 par->flag_prop_multi = in _lws_mqtt_rx_parser()
1348 par->props_seen[par->prop_id >> 3] & in _lws_mqtt_rx_parser()
1349 (1 << (par->prop_id & 7)); in _lws_mqtt_rx_parser()
1350 par->props_seen[par->prop_id >> 3] |= in _lws_mqtt_rx_parser()
1351 (1 << (par->prop_id & 7)); in _lws_mqtt_rx_parser()
1356 lws_mqtt_vbi_init(&par->vbit); in _lws_mqtt_rx_parser()
1364 lws_mqtt_str_init(&par->s_temp, NULL, 0, 0); in _lws_mqtt_rx_parser()
1367 par->state = 0x100 | par->vbit.value; in _lws_mqtt_rx_parser()
1389 if (par->flag_prop_multi) in _lws_mqtt_rx_parser()
1391 par->payload_format = *buf++; in _lws_mqtt_rx_parser()
1393 if (lws_mqtt_pconsume(par, 1)) in _lws_mqtt_rx_parser()
1401 if (par->flag_prop_multi) in _lws_mqtt_rx_parser()
1404 if (lws_mqtt_mb_first(&par->vbit)) in _lws_mqtt_rx_parser()
1405 lws_mqtt_4byte_init(&par->vbit); in _lws_mqtt_rx_parser()
1407 switch (lws_mqtt_mb_parse(&par->vbit, &buf, &len)) { in _lws_mqtt_rx_parser()
1411 if (lws_mqtt_pconsume(par, par->vbit.consumed)) in _lws_mqtt_rx_parser()
1423 if (par->flag_prop_multi) in _lws_mqtt_rx_parser()
1426 if (lws_mqtt_mb_first(&par->vbit)) in _lws_mqtt_rx_parser()
1427 lws_mqtt_2byte_init(&par->vbit); in _lws_mqtt_rx_parser()
1429 switch (lws_mqtt_mb_parse(&par->vbit, &buf, &len)) { in _lws_mqtt_rx_parser()
1433 if (lws_mqtt_pconsume(par, par->vbit.consumed)) in _lws_mqtt_rx_parser()
1450 if (par->flag_prop_multi) in _lws_mqtt_rx_parser()
1453 if (lws_mqtt_str_first(&par->s_temp)) in _lws_mqtt_rx_parser()
1454 lws_mqtt_str_init(&par->s_temp, par->temp, in _lws_mqtt_rx_parser()
1455 sizeof(par->temp), 0); in _lws_mqtt_rx_parser()
1457 switch (lws_mqtt_str_parse(&par->s_temp, &buf, &len)) { in _lws_mqtt_rx_parser()
1461 if (lws_mqtt_pconsume(par, par->s_temp.len)) in _lws_mqtt_rx_parser()
1478 __func__, par->state); in _lws_mqtt_rx_parser()
1494 par->reason = LMQCP_REASON_PROTOCOL_ERROR; in _lws_mqtt_rx_parser()
1498 par->flag_pending_send_reason_close = 1; in _lws_mqtt_rx_parser()
1503 par->reason = LMQCP_REASON_UNSUPPORTED_PROTOCOL; in _lws_mqtt_rx_parser()
1504 par->flag_pending_send_connack_close = 1; in _lws_mqtt_rx_parser()