-
Path: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!2.eu.feeder.erj
e.net!3.us.feeder.erje.net!feeder.erje.net!usenet.blueworldhosting.com!feed1.us
enet.blueworldhosting.com!peer01.iad!feed-me.highwinds-media.com!peer02.ams4!pe
er.am4.highwinds-media.com!news.highwinds-media.com!newsfeed.neostrada.pl!unt-e
xc-01.news.neostrada.pl!unt-spo-b-01.news.neostrada.pl!news.neostrada.pl.POSTED
!not-for-mail
Date: Mon, 8 Aug 2022 19:14:27 +0200
MIME-Version: 1.0
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101
Thunderbird/91.11.0
Newsgroups: pl.misc.elektronika
Content-Language: pl
From: Atlantis <m...@w...pl>
Subject: Biblioteka MQTT i dziwny kod w C
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
Lines: 49
Message-ID: <62f14473$0$544$65785112@news.neostrada.pl>
Organization: Telekomunikacja Polska
NNTP-Posting-Host: 83.27.21.205
X-Trace: 1659978867 unt-rea-b-01.news.neostrada.pl 544 83.27.21.205:58856
X-Complaints-To: a...@n...neostrada.pl
X-Received-Bytes: 3606
Xref: news-archive.icm.edu.pl pl.misc.elektronika:773695
[ ukryj nagłówki ]Wróciłem ostatnio do jednego ze swoich starych projektów, zrealizowanych
w oparciu o PIC32. Chciałem dodać do niego jedną dość ważną
funkcjonalność - możliwość wrzucania danych za pomocą MQTT.
Udało mi się znaleźć bibliotekę napisaną w oparciu o starzy stos
Microchipa (biblioteki MLA), który użyłem w swoim projekcie. Zależało mi
na tym, bo nie chciałem przenosić całego kodu na nowsze biblioteki Harmony.
https://github.com/dominicusplatus/mqttx
Potrzeba było trochę eksperymentów, jednak w końcu udało mi się
uruchomić bibliotekę. Dość szybko okazało się, że daleko jej do ideału.
Działa całkiem nieźle, jeśli serwer ma wyłączoną autoryzację, albo w
pakiecie CONNECT wysyłamy prawidłowy login i hasło.
Problemy zaczynają się w momencie, gdy próbujemy podać nieprawidłowe
dane do logowania. Sprawdziłem komunikację Wiresharkiem - serwer
odpowiada prawidłowo, jednak klient zupełnie to ignoruje, przystępując
do wysyłania komunikatu. Po paru podejściach powoduje to wykrzaczenie
programu i reset mikrokontrolera.
Przyjrzałem się bliżej kodowi i znalazłem przyczynę. Podczas parsowania
pakietu CONNACK wywoływana jest funkcja MQTTReadPacket(), która pobiera
dane z socketa do bufora MQTTBuffer. Potem jednak kod sprawdza stan stan
bajtu rxBF[1], gdzie spodziewa się znaleźć Return Code i na jego
podstawie podjąć decyzję do co dalszego działania.
Problem polega na tym, że w obecnej wersji kodu tablica rxBF nie jest
nigdzie wykorzystywana. Nie trafiają do niej żadne dane (a więc również
i pakiet CONNACK) i cały czas znajdują się w niej same zera. Program
interpretuje więc odczytaną wartość jako Connection Accepted i
przechodzi do dalszych czynności.
Chciałem się bliżej przyjrzeć funkcji MQTTReadPacket() i tutaj trafiłem
do króliczej nory. ;)
Okazuje się, że została ona zdefiniowana i zdeklarowana z pustą listą
parametrów (bez void), podobnie jak to się robi z bezparametrowymi
funkcjami w C++. Widzę jednak, że w paru miejscach w kodzie funkcja
przyjmuje parametr w postaci wskaźnika na BYTE, przykładowo:
BYTE llen;
WORD len= MQTTReadPacket(&llen);
Potem zawartość takiej zmiennej jest wykorzystywana w kodzie jako
element indeksu tablicy MQTTBuffer - również w tych częściach kodu,
które działały prawidłowo. Szybkie poszukiwania w internecie ujawniły,
że możliwość zdeklarowania pustej listy argumentów to historyczna
zaszłość. Wszyscy przestrzegają przed robieniem tego. Natomiast nigdzie
nie mogę znaleźć informacji o tym, w jaki sposób to działa i co
właściwie robią te kawałki kodu. Ktoś ma jakiś pomysł?
Następne wpisy z tego wątku
- 08.08.22 21:00 heby
- 08.08.22 22:00 jacek
- 08.08.22 23:43 Atlantis
- 09.08.22 07:13 JDX
- 09.08.22 08:36 Atlantis
- 09.08.22 09:47 Grzegorz Niemirowski
- 09.08.22 10:16 JDX
- 09.08.22 10:29 Atlantis
- 09.08.22 10:53 Atlantis
- 09.08.22 19:13 J.F
- 09.08.22 20:38 Atlantis
- 10.08.22 00:06 Atlantis
- 10.08.22 00:13 JDX
- 10.08.22 09:52 J.F
- 10.08.22 09:59 Grzegorz Niemirowski
Najnowsze wątki z tej grupy
- SEP 1 kV E
- Aku LiPo źródło dostaw - ktoś poleci ?
- starość nie radość
- Ataki hakerskie
- Akumulatorki Ni-MH AA i AAA Green Cell
- Dławik CM
- JDG i utylizacja sprzetu
- Identyfikacja układ SO8 w sterowniku migających światełek choinkowych
- DS1813-10 się psuje
- Taki tam szkolny problem...
- LIR2032 a ML2032
- SmartWatch Multimetr bezprzewodowy
- olej psuje?
- Internet w lesie - Starlink
- Opis produktu z Aliexpress
Najnowsze wątki
- 2024-12-12 Warszawa => Administrator Bezpieczeństwa IT <=
- 2024-12-12 Ostrów Wielkopolski => Trener zespołu sprzedaży Call Center <=
- 2024-12-12 Kraków => Key Account Manager <=
- 2024-12-11 SEP 1 kV E
- 2024-12-11 DNS restrictions are on
- 2024-12-11 wielkie bu
- 2024-12-11 Białystok => Inżynier bezpieczeństwa aplikacji <=
- 2024-12-11 Aku LiPo źródło dostaw - ktoś poleci ?
- 2024-12-11 Warszawa => Specjalista Bezpieczeństwa Informacji <=
- 2024-12-11 Wrocław => Application Security Engineer <=
- 2024-12-11 Warszawa => Analyst in the Trade Development department (experience wi
- 2024-12-11 Lublin => Programista Delphi <=
- 2024-12-11 Motodziennik #305 Nowy ELEKTRYK za 350 złotych miesięcznie? Kreatywne kredytowanie problemów
- 2024-12-11 Warszawa => Spedytor Międzynarodowy <=
- 2024-12-11 Katowice => Key Account Manager (ERP) <=