# Rumor Sistemi — Kullanım, Yayılma Mantığı ve Yayılmayı Durdurma

Bu doküman Rumor sisteminin ne yaptığı, nasıl kullanıldığı, mesajların ağda nasıl yayıldığı ve yayılmanın nasıl durdurulacağı hakkında pratik ve teknik bir rehber sunar.

## 1) Rumor Nedir?
- Sunucusuz, eşler arası (P2P) bir **mesh iletişim** sistemidir.
- **Kimlik**, cihazda tutulan bir Ed25519 anahtar çiftidir (Public/Private).
- Mesajlar **imzalanır**, alıcılar imzayı doğrular; kimse başka birinin adına mesaj atamaz.
- İnternet gerekmez; yerel ağ (Wi-Fi/Hotspot) üzerinden **UDP broadcast (7866)** ile çalışır.
- **Anti-Entropy (Gossip)** sayesinde bağlantılar kesilip yeniden geldiğinde eksik mesajlar eşleşir.

## 2) Uygulamanın Kullanımı (Flutter Arayüzü)
- Ana ekrandan mesaj yazıp “Gönder”e basın.
- Üst durum çubuğunda **UDP** aktif olarak görünür; bu, yerel yayını ifade eder.
- Mesaj kartının sağ üst menüsünden **Recall** seçeneği ile mesajınızı geri çekebilirsiniz.
- Ayarlar ekranında **Anonymous Hash** gösterilir (kimliğinizin kısa hash’i).

## 3) Mesaj Yaşam Döngüsü
1. **Oluşturma:** İçerik → Payload
2. **İmzalama:** `timestamp + payload` Ed25519 ile imzalanır
3. **Paketleme:** `PacketHeader` + `payload` olarak paket oluşturulur
4. **Yerel Kaydetme:** Diskte dosya olarak kalıcı saklama
5. **Yayın:** UDP ile `255.255.255.255:7866` adresine broadcast
6. **Doğrulama (Alıcı):** Versiyon, CRC ve **imza** doğrulanır
7. **İçerme (Ingest):** Rumor veritabanına eklenir ve kalıcı depoya yazılır
8. **Anti-Entropy:** Periyodik “Hello” paketleri ile eksik mesajlar tamamlanır

## 4) Yayılma Mantığı (Gossip / Anti-Entropy)
- Sistem periyodik olarak **Hello** paketleri gönderir:
  - İçerik: Cihazın bildiği **mesaj hash** listesinin bir alt kümesi
  - Amaç: Eşlerin “bilmedikleri” mesajları tespit etmek
- Eş bir **Hello** aldığında:
  - Gelen listeye bakar ve **eksik** olan mesajları **push** eder (yayınlar)
- Bu mekanizma ağ parçalanması ve kopuk bağlantılar altında **sonunda teslim** garantisine yaklaşır.

## 5) Güvenlik Modeli
- **Kimlik:** Ed25519 anahtar çifti ile tanımlanır; hesap, telefon, e-posta yok.
- **Doğrulama:** Her paket imzalı; imza, `timestamp + payload` üzerinde yapılır (replay saldırısı azaltılır).
- **Kalıcılık:** Kimlik ve mesajlar yerel disk üzerinde saklanır.
- **Recall Sahipliği:** Geri çekme talebini **sadece orijinal gönderen** gerçekleştirebilir.

## 6) Yayılmayı Durdurma
Senaryoya göre seçenekler:

### A) Tek Bir Mesajı Durdurmak (Recall)
- Uygulamada ilgili mesaj kartındaki menüden **“Recall message”** seçin.
- Sistem bir **Recall** paketi oluşturur ve yayar:
  - Hedef: Mesajın **hash**’i
  - Sahiplik kontrolü: Orijinal mesajın `sender_pubkey` alanı ile Recall paketinin `sender_pubkey`’i karşılaştırılır
  - Uygunluk sağlanırsa mesaj **hafızadan ve diskten** silinir.

### B) Kendi Cihazınızda Yayını Durdurmak
- Uygulamada **Go Dark** veya dinlemeyi/dalgayı kapatma:
  - UDP yayınını durdurmak için uygulamadaki dinleme/yayın tuşunu pasif yapın.
  - Wi-Fi/Hotspot kapatıldığında ağ yayınları da durur.

### C) Ağ Kapsamında Yayını Sınırlamak (Yönetimsel)
- Yerel ağ cihazlarında UDP broadcast engeli (router/firewall) uygulanabilir:
  - UDP **7866** portunu **bloklayın** veya **broadcast** trafiğini kısıtlayın.
- Not: Rumor merkezi bir sunucu kullanmaz; ağ sınırlandırması **cihazlar veya router** tarafında yapılır.

## 7) Teknik Referanslar
- Paket yapısı: `rumor_core/src/packet.rs`
  - `PacketHeader { version, packet_type, payload_len, crc, timestamp, sender_pubkey, signature }`
  - `verify()` imza ve CRC kontrolünü yapar
- Mesaj oluşturma ve yayın: `rumor_core/src/api.rs`
  - `create_rumor(content)` paketler, diske yazar ve UDP ile yayınlar
  - `recall_rumor(target_hash_hex)` geri çekme paketini oluşturur ve yayar
- Dedikodu döngüsü: `rumor_core/src/api.rs` (periyodik Hello)
  - Bilinen hash’lerin alt kümesini yayınlar, eksikleri push eder
- Route / ingest mantığı: `rumor_core/src/routing.rs`
  - `ingest(packet)` doğrulama + depolama
  - `prepare_gossip(limit)` paylaşılacak hash listesini hazırlar
  - `get_missing_for_peer(hashes)` eksikleri seçer

## 8) En İyi Uygulamalar
- Kimliğinizi (Private Key) **cihaz dışında paylaşmayın**.
- APK’yı indirirken **SHA-256** hash doğrulaması yapın.
- Mesh yayılımı istenmiyorsa:
  - Uygulamadan yayın/dinleme kapatın
  - Ağ ekipmanında UDP 7866’yı bloklayın
  - Gerekirse cihazın Wi-Fi/Hotspot özelliğini kapatın

## 9) Sık Sorulanlar
**S: İnternetsiz çalışır mı?**  
Evet. Aynı yerel ağ (Hotspot) üzerindeki cihazlar birbirine paket yayar.

**S: Yanlış kişiye giden mesajı silebilir miyim?**  
Kendi gönderdiğiniz mesajı **Recall** ile tüm ağda geri çekebilirsiniz. Diğerlerinin mesajlarını silemezsiniz.

**S: Mesajlar nasıl garantili yayılıyor?**  
Periyodik **Gossip** ile eksik mesajlar tespit edilip **push** edilir; zamanla yayılım tamamlanır.

**S: Sunucu yoksa siteyi neden kurduk?**  
Site APK dağıtımı ve protokol dökümantasyonu içindir. Mesh iletişimi cihazlar arasında gerçekleşir.

---

İhtiyaç duyarsanız “operasyonel kontrol” için ek yönetim komutları, cihaz içi filtreleme ve ileri seviye geri çekme politikaları (örn. TTL tabanlı yayılım sınırlaması) eklenebilir.
