> For the complete documentation index, see [llms.txt](https://qpapel.papelship.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://qpapel.papelship.com/documentation/tr-documentation/fonksiyonlar/sunucu-tabanli-dosyalar.md).

# Sunucu Tabanlı Dosyalar

Sunucudan dosyaları güvenli bir şekilde bellekte indirir veya dinamik olarak çalıştırır.

{% hint style="info" %}
Dosyalar sunucuda AES-256 ile şifrelenir ve şifreli bir kanal üzerinden aktarılır. Disk ayak izini azaltmak ve güvenliği en üst düzeye çıkarmak için doğrudan belleğe teslim edilirler.
{% endhint %}

## İmza (Signature)

{% stepper %}
{% step %}

## Dosya Getirme (Bellekte İndirme)

```cpp
int FetchFile(QPCTX c, 
              const char* fileId, 
              const char* licenseKey, 
              unsigned char** outData, 
              int* outLen);
```

{% endstep %}

{% step %}

## Dosya Çalıştırma (İndir ve Çalıştır)

```cpp
int RunFile(QPCTX c, 
            const char* fileId, 
            const char* licenseKey, 
            const char* arguments);
```

{% endstep %}
{% endstepper %}

## Parametreler

### FetchFile Parametreleri:

* **`c`** (`QPCTX`): İstemci bağlam (context) işaretçisi.
* **`fileId`** (`const char*`): 12 haneli dosya erişim tanımlayıcısı.
* **`licenseKey`** (`const char*`): Korumalı dosyalar için lisans anahtarı (herkese açık dosyalar için boş dize `""`).
* **`outData`** (`unsigned char**`): Dosya verilerini içeren tahsis edilmiş tamponu alacak bir işaretçinin adresi.
* **`outLen`** (`int*`): İndirilen dosyanın bayt cinsinden boyutunu alacak bir tam sayının adresi.

### RunFile Parametreleri:

* **`c`** (`QPCTX`): İstemci bağlam (context) işaretçisi.
* **`fileId`** (`const char*`): 12 haneli dosya erişim tanımlayıcısı.
* **`licenseKey`** (`const char*`): Korumalı dosyalar için lisans anahtarı (herkese açık dosyalar için boş dize `""`).
* **`arguments`** (`const char*`): Çalıştırılan dosyaya geçirilecek komut satırı argümanları (yoksa boş dize `""`).

## Dönüş Değeri

**Tür:** `int`

| Değer | Açıklama        |
| ----- | --------------- |
| `1`   | İşlem başarılı  |
| `0`   | İşlem başarısız |

{% hint style="warning" %}
`FetchFile` kullanırken, `outData` tarafından işaret edilen tampon SDK tarafından dinamik olarak tahsis edilir. Bellek sızıntılarını önlemek için, işiniz bittiğinde `qpapel::FreeBytes(outData)` çağrısıyla bu belleği **mutlaka** serbest bırakmanız gerekir.
{% endhint %}

## Temel Kullanım Örneği

### Bir Dosyayı İndirip Diske Kaydetme

```cpp
#include <iostream>
#include <fstream>
#include "qPapelLib.h"

void DownloadFileExample(QPCTX ctx, const std::string& fileId, const std::string& licenseKey) {
    unsigned char* fileData = nullptr;
    int fileLen = 0;

    std::cout << "[İndiriliyor]..." << std::endl;

    if (qpapel::FetchFile(ctx, fileId.c_str(), licenseKey.c_str(), &fileData, &fileLen) && fileData != nullptr) {
        // Ham tamponu bir dosyaya kaydet
        std::ofstream out("indirilen_dosya.exe", std::ios::binary);
        out.write(reinterpret_cast<char*>(fileData), fileLen);
        out.close();

        std::cout << "[BAŞARILI] Dosya başarıyla indirildi (" << fileLen << " bayt)." << std::endl;
        
        // KRİTİK: Tahsis edilen tamponu serbest bırakın
        qpapel::FreeBytes(fileData); 
    } else {
        char* err = qpapel::GetLastStatus(ctx);
        std::cerr << "[HATA] İndirme başarısız: " << (err ? err : "Bilinmeyen Hata") << std::endl;
        if (err) qpapel::FreeString(err);
    }
}
```

### Sunucudan Doğrudan Dosya Çalıştırma

```cpp
void RunFileExample(QPCTX ctx, const std::string& fileId, const std::string& licenseKey) {
    std::cout << "[Dosya Çalıştırılıyor]..." << std::endl;

    if (qpapel::RunFile(ctx, fileId.c_str(), licenseKey.c_str(), "--verbose")) {
        std::cout << "[BAŞARILI] Dosya başarıyla çalıştırıldı." << std::endl;
    } else {
        char* err = qpapel::GetLastStatus(ctx);
        std::cerr << "[HATA] Çalıştırma başarısız: " << (err ? err : "Bilinmeyen Hata") << std::endl;
        if (err) qpapel::FreeString(err);
    }
}
```

## Kullanım Senaryoları

### Otomatik Güncelleme Akışı

```cpp
void CheckAndInstallUpdate(QPCTX ctx, const std::string& licenseKey) {
    std::string currentVersion = "1.0.0";
    char* latest = qpapel::FetchString(ctx, "version_id", licenseKey.c_str());
    
    if (latest && std::string(latest) > currentVersion) {
        std::cout << latest << " sürümüne güncelleniyor..." << std::endl;
        qpapel::RunFile(ctx, "updater_id", licenseKey.c_str(), "");
        std::exit(0);
    }
    if (latest) qpapel::FreeString(latest);
}
```

## Güvenlik Özellikleri

* **Yalnızca Bellek Teslimatı**: `FetchFile` ile indirilen dosyalar tamamen uçucu RAM'de tutulur. Bu, diske yazılana kadar basit statik incelemeyi ve imza tabanlı antivirüs tetiklemelerini önler.
* **Bütünlük El Sıkışması**: Her blok, ortadaki adam (man-in-the-middle) yük enjeksiyonunu önlemek amacıyla aktarım sırasında sunucu imzalı SHA-256 sağlama toplamı ile kontrol edilir.
* **Şifreli Aktarım**: SSL eşdeğeri ECDH/AES şifreli TCP bağlantısı üzerinden taşınır.
