#pragma once // -- Uzaktan Komut + Lisans Alma (musteri tarafi) ------------------------------- // Satici konsolundan gelen "FikoYT.sistem.io.cihaz.komut" mesajlarini alir, // guvenligi dogrular (imza + beyaz liste + lisans gate'i) ve UYGULAR. // // Bu modul Mevcut /isans kanalindan AYRI olarak genel /socket.io/ kanalina // baglanir: sunucudaki soketCihazMap ve goCihazlar kaydi O kanalda doldurulur // (/isans sunucusu yalniz RAM'de istemci tutar). // // Akis: // 1. Baglanir: GET /socket.io/?EIO=3&transport=polling (Cihaz_kimlik header) // 2. WebSocket'e yukseltir // 3. "FikoYT.sistem.io.cihaz.komut" dinler // 4. 3 katmanli kontrol: IMAZA -> BEYAZ LISTE -> LISANS GATE // 5. cekirdek.komutCalistir() ile merkezi akistan calistirir // 6. "FikoYT.sistem.io.cihaz.komut-cevap" gonderir // // MuHUR DIKKATI: lisans.komutlari calistirildiginda komutIzinVer() sonrasi // MUTLAKA muhurle() cagrilir. Aksi halde saglikKontrol() politika degisimini // kurcalma sayar ve TUM yetkileri 1.5 saniyede siler. #include #include #include namespace fiko { class Cekirdek; // Gelen/calistirilan uzaktan komutun kaydi (Komut Denetim panelinde gosterilir) struct UzaktanKomutKaydi { std::string komutId; std::string komutKodu; std::string mesaj; std::string zaman; bool basarili = false; std::string sonucMesaji; }; // Baglanti durumu (panelde gosterilir) enum class UzakKanalDurum { Kapali = 0, Baglanir, Bagli, Kopuk }; const char* uzakKanalDurumAdi(UzakKanalDurum d); UzakKanalDurum uzakKanalDurumu(); std::string uzakKanalOzet(); // Arka plan isle parcacigini baslat (lisans yukleme akisindan BIR KEZ cagrilir). void uzakKomutKanalBaslat(Cekirdek& cekirdek); // Kanali kapat (yeniden baglanma denemesi surer, sadece is parcacigi durur). void uzakKomutKanalDurdur(); // Son calisan komutlar (en yeni Once) - sinirli tutulur. const std::vector& uzakKomutKayitlari(); void uzakKomutKayitTemizle(); // Test/yardimci: tek bir komutu dogrudan uygula (soket gelmeden). // Donus: basarili mi. Yanlis ise sonucMesaji nedenini yazar. bool uzakKomutUygula(Cekirdek& cekirdek, const std::string& komutId, const std::string& komutKodu, const std::string& mesaj, std::string& sonucMesaji); // ── Lisans bileti cekme (kokDB .aggregate ile) ───────────────────────────────── // Sunucudan imzali bileti alir ve uygular. Kopma suresi de oradan gelir. // Donus: basarili mi. bool uzakLisansBiletiCekVeUygula(Cekirdek& cekirdek, std::string& hata); // Soketten gelen ham mesaji isle: komutu dogrular, uygular, JSON cevap dondurur. // Donus: komut basariyla calistirildi mi. cevapJson her zaman doldurulur. bool uzakKomutMesajiIsle(Cekirdek& cekirdek, const std::string& json, std::string& cevapJson); // TLS sertifika sabitleme (SHA-256 parmak izi). `istek` = WinHttp istek handle'i // (HINTERNET), WinHttpReceiveResponse SONRASI cagrilir. true = sunucu dogru/guvenli. // Hem uzak komut kanali hem canli lisans kanali AYNI dogrulamayi kullanir. bool lisansTlsSunucuDogrula(void* istek); } // namespace fiko