Beiträge von master_d

    Was das Problem mit der IP-Adresse angeht, so ist mir ein solches Verhalten durchaus geläufig.
    Provider, welche nur eine begrenzte Anzahl an "öffentlichen" IP-Adressen haben, nutzen eine Technologie, welche sich "Carrier-Grade-NAT" nennt. Dies bedeutet einfach, dass mehrere Benutzer hinter einer öffentlichen IP versteckt werden, und somit auch dort nochmals eine solche "Weiterleitung" eingerichtet werden müsste.
    Der Provider "Quix" ist mir unbekannt, anscheinend eher ein lokaler Provider. Technologisch aber normales DSL, und "Carrier-Grade-NAT" kenne ich eher im Bereich Kabel-Internet mit "DS-Lite".


    Verfügt der Anschluss auch über IPv6-Adressen?
    Diese könnten alternativ eingesetzt werden, und würden dann eine direkte Verbindung zum System ermöglichen, ohne NAT-Technologien einsetzen zu müssen.
    Ansonsten würde ich morgen, zwischen 14 und 17 Uhr, sowie Sonntag-Mittwoch ab ca. 17 Uhr auch mal für eine persönliche Problemanalyse zur Verfügung stehen.

    So sollte ein SRV-Record aussehen.
    Ob du das ganze allerdings in dem Interface deines Hosters eingeben kannst, kann ich nach deinen Aussagen nicht zu 100% sicherstellen.


    Code
    service | ttl | Internet | Type | Priority | Weight | Port | Destination (A-Record-Name)
    _ts3._udp.example.com. 3600  IN  SRV  10  0  9987  ts3.example.com.

    OK, Netzwerkkonfiguration sieht gut aus.


    Wenn jetzt noch die IP-Adresse aus dem Screenshot mit der aus der Ausgabe des ersten Befehls übereinstimmt, gehen mir wirklich langsam die Ideen aus.

    OK, Router scheint richtig zu sein, dann könnte es die Netzwerkkonfiguration des Servers selbst sein.
    Möglicherweise findet das System einfach kein Ziel für die entsprechenden Verbindungen. Probleme können hier durchaus entstehen, wenn man eine statische Netzwerkkonfiguration verwendet.


    Bitte einmal die Ausgaben des Servers zu folgenden Commands:


    Code
    ip addr
    Code
    ip route

    OK, dann kurze Nachfrage.
    Port 9987/TCP oder 9987/UDP?
    Richtig wäre 9987/UDP.


    Ansonsten bitte noch eine kurze Beschreibung, wie der Test von statten gegangen ist, bzw. wie die externe IP ermittelt worden ist.
    Danke.

    Es werden nur die "berechneten" Zwischenschritte gespeichert.


    D. h. wenn du eine Sicherheitsstufe von 42 berechnen möchtest, und bei 38 beginnst, wird jeweils beim erreichen von 39/40/41 der entsprechende Hash gespeichert. Weitere Zwischenschritte werden, meiner Kenntnis nach, nicht gespeichert.

    Da über den Server-Chat auch entsprechende Status-Meldungen sichtbar gemacht werden, bzw. globale Informationen gesendet werden, ist ein ausblenden dieses Bereichs nicht gewollt, bzw. machbar.


    Auch ein deaktivieren einzelner Meldungen ist nicht möglich.


    Genauere Informationen dazu müsste man von den Teamspeak-Leuten direkt erhalten können.

    Es gibt ein Feld "channel_order", nach welchem sortiert wird.


    Entsprechende Funktion:

    Code
    ts3Functions.getChannelVariableAsInt(connectionHandlerID, channelID, CHANNEL_ORDER, &flag) != ERROR_ok

    Teamspeak3-Client Menu -> Extras -> Optionen


    Dort den Reiter "Hotkeys" öffnen, und beim hinzufügen die "Erweiterten Aktionen" einblenden.
    Dann ist dort der Eintrag "Plugins" ersichtlich, unter welchem die Hotkeys mit der gesetzten Beschreibung vorhanden sind.

    You only define names for the functions you want to use with a hotkey.
    This names has to be registered with the hotkey-functions in your plugin.

    Code
    /* Helper function to create a hotkey */static struct PluginHotkey* createHotkey(const char* keyword, const char* description) {    struct PluginHotkey* hotkey = (struct PluginHotkey*)malloc(sizeof(struct PluginHotkey));    _strcpy(hotkey->keyword, PLUGIN_HOTKEY_BUFSZ, keyword);    _strcpy(hotkey->description, PLUGIN_HOTKEY_BUFSZ, description);    return hotkey;}/* Some makros to make the code to create hotkeys a bit more readable */#define BEGIN_CREATE_HOTKEYS(x) const size_t sz = x + 1; size_t n = 0; *hotkeys = (struct PluginHotkey**)malloc(sizeof(struct PluginHotkey*) * sz);#define CREATE_HOTKEY(a, b) (*hotkeys)[n++] = createHotkey(a, b);#define END_CREATE_HOTKEYS (*hotkeys)[n++] = NULL; assert(n == sz);/* * Initialize plugin hotkeys. If your plugin does not use this feature, this function can be omitted. * Hotkeys require ts3plugin_registerPluginID and ts3plugin_freeMemory to be implemented. * This function is automatically called by the client after ts3plugin_init. */void ts3plugin_initHotkeys(struct PluginHotkey*** hotkeys) {    QVariantHash hotkeyEntries = moduleLoader::instance()->getHotkeyEntries();    BEGIN_CREATE_HOTKEYS((hotkeyEntries.keys().count()));    foreach(QString keyword, hotkeyEntries.keys()) {        CREATE_HOTKEY('<keyword>', '<description>');    }    END_CREATE_HOTKEYS;}


    After that, you define the hotkeys in the configuration of your teamspeak-client.
    Then you get a notification with this callback when the hotkey is pressed:

    Code
    void ts3plugin_onHotkeyEvent(const char* keyword)void ts3plugin_onHotkeyEvent(const char* keyword)

    Für die Settings:

    Code
    int ts3plugin_offersConfigure() {    printf("PLUGIN: offersConfigure\n");    /*     * Return values:     * PLUGIN_OFFERS_NO_CONFIGURE         - Plugin does not implement ts3plugin_configure     * PLUGIN_OFFERS_CONFIGURE_NEW_THREAD - Plugin does implement ts3plugin_configure and requests to run this function in an own thread     * PLUGIN_OFFERS_CONFIGURE_QT_THREAD  - Plugin does implement ts3plugin_configure and requests to run this function in the Qt GUI thread     */    return PLUGIN_OFFERS_CONFIGURE_QT_THREAD;  /* In this case ts3plugin_configure does not need to be implemented */}/* Plugin might offer a configuration window. If ts3plugin_offersConfigure returns 0, this function does not need to be implemented. */void ts3plugin_configure(void* handle, void* qParentWidget) {    guiConfiguration* gConfig = new guiConfiguration();    gConfig->show();}


    Was Overlays angeht, so habe ich kein Wissen, was ich anbieten könnte. Was aber möglich wäre, wäre einmal im Code von Mumble nachzuschauen, denn dort wird auch Qt verwendet, und die haben ein Overlay eingebaut. GitHub - mumble-voip/mumble: Mumble VoIP Client/Server
    Vielleicht gibt dir das die entsprechenden Anregungen.


    Was die Channelliste angeht, so musst du einfach einen sortierbaren Datentyp benutzen. Je nach verwendetem Datentyp gibt es verschiedene Möglichkeiten zur Sortierung. Genaueres kann man zumeist einfach suchen "<datentyp> sort" sollten passende Suchbegriffe sein.


    Als Beispiel einmal eine Sortierung nach Channel-ID:

    Code
    QMap<int, QString> channels;
    QList<int> channelIds = channels.keys();
    qSort(channelIds);
    foreach(int channelId, channelIds) {
        qDebug() << channelId << ":" << channels.value(channelId);
    }

    Ansonsten muss hier weiterhin eines gesagt sein.


    "Wenn man selbst keine Ahnung von der Absicherung solcher Systeme hat, sollte man eine feste Person haben, die sich darum kümmert, sowie den Willen haben, diese 'Wissenslücke' schnellstmöglich zu schließen."


    Auch wenn ich hier etwas harsch klingen sollte, es gibt bereits genug "Server", welche als Bots verwendet werden. Daher bitte, ähnlich wie an verschiedenen anderen Stellen im eigenen Leben. Auch bei Servern gilt: Security FIRST!!

    Offline-Nachrichten sind Nachrichten, welche auf dem Server gespeichert werden, und dem Empfänger bei seinen nächsten Erscheinen zugestellt werden.


    Es existiert keine mir bekannte Möglichkeit, diese Nachrichten anderweitig zu signalisieren.
    Die Query-Schnittstelle bietet einen gewissen Zugang dazu, jedoch ist dieser Zugang auf die "eigenen" Nachrichten beschränkt, so dass hier jeder "Empfänger" einen Query-Zugang haben muss, und damit eine eigene Software betreiben muss.