Subskrypcje wiadomości NFP

Subskrypcja jest reprezentowana jako unikatowy otwarty uchwyt w obrębie sterownika. Subskrypcja jest aktywna przez otwarcie dojścia do przestrzeni nazw urządzenia "Subs\". Typ subskrypcji jest definiowany jako wszystko, co następuje po prefiksie "Subs\".

Wywołanie zwrotne po odebraniu wiadomości jest realizowane poprzez ukończoną operację IOCTL_NFP_GET_NEXT_SUBSCRIBED_MESSAGE.

Subskrypcję można tymczasowo wyłączyć za pośrednictwem IOCTL_NFP_DISABLE.

Subskrypcję można ponownie włączyć za pośrednictwem IOCTL_NFP_ENABLE.

Uchwyty

Klient, który chce zasubskrybować typ komunikatu, najpierw otworzy nowy dojście do sterownika. Nie można ponownie użyć identyfikatorów z poprzednich publikacji, subskrypcji i tym podobnych. Jeśli nie są już potrzebne, zostaną zamknięte przez klienta o dobrym zachowaniu.

Podczas otwierania dojścia klient ustawia typ subskrypcji komunikatów. Jest to taki sam mechanizm, jak używany w przypadku publikowania, z tą różnicą, że typ jest poprzedzony prefiksem "Subs\" zamiast "Pubs\".

Nie ma funkcjonalności odczytania typu.

Wymagane akcje

  • Sterownik MUSI przeanalizować składnik protokołu (przed pierwszym '.'). Każdy nierozpoznany protokół MUSI zakończyć się statusem STATUS_OBJECT_PATH_NOT_FOUND.
  • Jeśli ciąg nie jest zakończony wartością NULL w granicach długości bufora, sterownik MUSI zakończyć IOCTL przy użyciu STATUS_INVALID_PARAMETER.
  • Jeśli protokół wymaga podtypu, a składnik podtypu buforu ciągów jest mniejszy niż jeden znak (1) lub dłuższy niż 250 znaków, sterownik MUSI ukończyć IOCTL z STATUS_INVALID_PARAMETER.
  • Jeśli składnik protokołu bufora ciągu znaków jest dłuższy niż 250 znaków, sterownik MUSI zakończyć IOCTL z STATUS_INVALID_PARAMETER.
  • Sterownik MUSI interpretować pierwszą wartość NULL jako koniec ciągu.
  • Sterownik MOŻE rozpoznać typ subskrypcji „Pairing:Bluetooth”.
  • Sterownik MUSI rozpoznać typ "WindowsUri".
  • Sterownik musi rozpoznać typ "DeviceArrived" wyłącznie dla subskrypcji.
  • Sterownik MUSI rozpoznać typ "DeviceDeparted" tylko dla subskrypcji.
  • Sterownik MUSI rozpoznać typ "WindowsMime" tylko dla subskrypcji.
  • Sterownik MUSI rozpoznać typ "WindowsMime".
  • Jeśli protokół ma być rozpoznawany wyłącznie dla subskrypcji, a IOCTL określa "Pubs\", sterownik MUSI zakończyć operację IOCTL z kodem STATUS_OBJECT_PATH_NOT_FOUND.
  • Jeśli protokół powinien być rozpoznawany tylko dla publikacji, a IOCTL określa „Subs\”, sterownik MUSI zakończyć IOCTL z STATUS_OBJECT_PATH_NOT_FOUND.
  • Niektóre protokoły (przestrzenie nazw) są zarezerwowane. O ile nie określono jawnie w tym dokumencie, sterownik NIE MOŻE rozpoznać żadnych protokołów rozpoczynających się od:
    • "Windows"
    • "Urządzenie"
    • Parowanie
    • "NDEF"
  • Dwa otwarte uchwyty do tego samego typu MUSZĄ reprezentować dwa odrębne obiekty.
  • Jeśli CreateFile zakończy się powodzeniem, uchwyt jest teraz "uchwytem subskrypcji" i nie może być zmieniony na inny typ uchwytu.
  • Po pomyślnym zakończeniu operacji IOCTL i przed zamknięciem dojścia, za każdym razem, gdy komunikat zostanie odebrany przez technologię zbliżeniową zgodną z typem tej subskrypcji, dane tego komunikatu MUSZĄ być dołączone do dojścia do pliku w celu dostarczenia do klienta.

Anulowanie subskrypcji

Klient zamknie uchwyt subskrypcji, aby przestać odbierać komunikaty. Jeśli proces klienta zakończy się, system zamknie wszystkie otwarte dojścia do plików w imieniu klienta.

Wymagane akcje

Po zamknięciu uchwytu sterownik MUSI odzyskać całą pamięć używaną przez subskrypcję.

  • Sterownik MUSI odzyskać dane w postaci ciągu znakowego.
  • Odebrana kolejka musi zostać oczyszczona i odzyskana.
  • Wszystkie pended IOCTL MUSZĄ zostać ukończone z STATUS_CANCELLED.

Złośliwi rówieśnicy

Jeśli złośliwe urządzenie równorzędne podejmie próbę ataku odmowy usługi (DOS) za pośrednictwem technologii zbliżeniowej, może się zdarzyć, że klient nie zdoła wystarczająco szybko opróżnić kolejki "Odebrane", aby zapobiec nadmiernemu użyciu pamięci przez sterownik.

Wymagane akcje

Sterownik NIE MOŻE kolejkować ani dostarczać klientowi danego komunikatu, jeśli ten komunikat jest odbierany, gdy 50 komunikatów znajduje się obecnie w kolejce "Odebrano" (najnowsze komunikaty są porzucane).

Brak odpowiedzi lub niewłaściwe zachowanie klientów

Jeśli klient przestanie opróżniać kolejkę "Odebrano", nie wysyłając wymaganego żądania IOCTL_NFP_GET_NEXT_SUBSCRIBED_MESSAGE przez okres od dziesięciu do dwudziestu sekund [10–20sec], sterownik powinien założyć, że klient zniknął. W normalnych okolicznościach klienci powinni odświeżyć swoje żądania w ciągu jednej sekundy [1s]. W takim przypadku sterownik musi ustawić licznik "CompleteEventImmediately" na zero i nie może zwiększać licznika, dopóki klient nie obudzi się i wyśle wymagany protokół IRP.

Wymagane akcje

Sterownik musi ustawić licznik "CompleteEventImmediately" na zero i nie może zwiększać licznika, jeśli klient nie wysłał zastępczej IOCTL_NFP_GET_NEXT_SUBSCRIBED_MESSAGE w ciągu 10-20 sekund od wcześniejszego zakończenia IOCTL.

Źle sformułowane wiadomości

Klient prawdopodobnie porzuci lub zignoruje wszystkie błędy (z wyjątkiem STATUS_BUFFER_OVERFLOW) zwracane przez IOCTL_NFP_GET_NEXT_SUBSCRIBED_MESSAGE. W związku z tym sterownik nie powinien wypełniać tych warunków błędu tylko dlatego, że odebrano źle sformułowany komunikat.

Wymagane akcje

  • Sterownik NIE MOŻE dostarczać komunikatów, które są większe niż maksymalny dozwolony rozmiar komunikatu do klienta.

  • Sterownik NIE POWINIEN dostarczać klientowi komunikatów o zerowej długości.

  • Sterownik NIE MOŻE dostarczać częściowych komunikatów subskrybentom.

  • Sterownik NIE MOŻE dostarczać klientowi komunikatów, które nie przeszły silnego testu CRC.

    Nuta Certyfikacja forum NFC gwarantuje to dla dostawców NFP obsługujących komunikację NFC.

  • Sterownik MUSI używać silnie niezawodnego transportu lub podejmować próby ponownego przesłania komunikatów, które nie przechodzą silnego procesu CRC.

    Uwaga Certyfikacja NFC Forum gwarantuje to dla dostawców usług NFP obsługujących NFC.

Zduplikowane subskrypcje

Sterownik powinien zakładać, że jeśli klient subskrybuje typ komunikatu dwa razy, jest to spowodowane tym, że klient chce otrzymywać komunikat dwa razy po odebraniu komunikatu.

Wymagane akcje

Sterownik MUSI akceptować i zgłaszać zduplikowane subskrypcje, nawet jeśli subskrybowane przez tego samego klienta.

Referencja API komunikacji zbliżeniowej (NFC)