Buchempfehlung
Windows System Programming
Windows System Programming
Das Kompendium liefert viele interessante Informationen zur Windows-Programmierung auf Englisch. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

fb:porticula NoPaste

Info
Info / Hilfe
Liste
Übersicht / Liste
Neu
Datei hochladen
Suche
Quellcode suchen
Download
Dateidownload

DynDNS_UpDate_Cient.bas

Uploader:MitgliedThePuppetMaster
Datum/Zeit:28.02.2009 16:37:38

'##############################################################################################################
'TEST-DynDNS-Client für TSNE_V3
'##############################################################################################################



'##############################################################################################################
#include once "TSNE_V3.bi"                          'Die TCP Netzwerkbibliotek integrieren



'##############################################################################################################
Dim G_Client as UInteger                            'Eine Variable für den Client-Handel erstellen
Dim Shared G_DataTX as String                       'Variable welche die HTML-Daten aufnimmt
Dim Shared G_DataRX as String                       'Variable welche die HTML-Daten aufnimmt



'##############################################################################################################
'   Deklarationen für die Empfänger Sub Routinen erstellen
'   Nur dann nötig, wenn die Sub's unterhalb des aufrufs stehen.
Declare Sub TSNE_Disconnected   (ByVal V_TSNEID as UInteger)
Declare Sub TSNE_Connected      (ByVal V_TSNEID as UInteger)
Declare Sub TSNE_NewData        (ByVal V_TSNEID as UInteger, ByRef V_Data as String)



'##############################################################################################################
Print "Init IPA Update..."                          'Programm beginnen
Dim BV as Integer                                   'Variable für Statusrückgabe erstellen

'=================
'Die folgenden Zeilen sind bei DynDNS nicht zwingend nötig, da bei fehlender IP-Adress angabe im Update-String
'DynDNS automatisch die IP des anfragenden Internet-Anschlusses nutzt.
Print "IPA erfragen..."

'Anfrage vorbereiten
G_DataTX = "GET / HTTP/1.0" & Chr(13, 10)
G_DataTX += "Host: checkip.dyndns.org" & Chr(13, 10)
G_DataTX += "User-Agent: TSNE_V3_DyndnsUpDateClient" & Chr(13, 10)
G_DataTX += "connection: close" & Chr(13, 10)
G_DataTX += Chr(13, 10)

'Client erstellen, und das DATA und Connected Callback angeben. Disconnect ist nicht nötig,
'da der HTTP Request ein Connection: Close verlangt
BV = TSNE_Create_Client(G_Client, "checkip.dyndns.org", 80, 0, @TSNE_Connected, @TSNE_NewData, 60)
'   Statusrückgabe auswerten
If BV <> TSNE_Const_NoError Then
    Print "[FEHLER] " & TSNE_GetGURUCode(BV)      'Fehler ausgeben
    End -1                                          'Programmbeenden
End If

'Solange warten, bis die Verbindung beendet wurde
TSNE_WaitClose(G_Client)

'Empfangene Daten (IP-Adresse) auslesen
Dim XPos as UInteger = InStr(1, G_DataRX, "IP Address:")
If XPos = 0 Then
    Print "[FEHLER] Konnte IP-Adresse nicht ermitteln!"
    End -1
End If
G_DataRX = Trim(Mid(G_DataRX, XPos + 11))
XPos = InStr(1, G_DataRX, "<")
If XPos = 0 Then
    Print "[FEHLER] Konnte IP-Adresse nicht ermitteln!"
    End -1
End If
Dim XIPA as String = Trim(Left(G_DataRX, XPos - 1))
Print "Neue IP-Adresse: "; XIPA
'hier endet die IPA Anfrage
'=================

'=================
'Dieser Teil aktualisiert einen DynDNS Account

'In diese Variable muss ein BASE64 kodierter Benutzername und Passwort String eingetragen werden
'Das Format für die Kodierung ist:
Dim TBasicUserPass as String = "" 'Base64_Encode("Benutzername:Passwort")

Print "IPA UpDate vorbereiten..."
G_DataRX = ""
'Die erste zeile muss mit den Hostnames gefüttert werden. z.B. FooBar.dyndns.org
'Dabei können die Hostnames mit "," voneinander getrennt werden, wenn es mehrere sind.
'...hostname=Bar.dyndns.org,FooBar.dyndns.org,Bar.dyndns.org
G_DataTX = "GET /nic/update?system=dyndns&hostname= HTTP/1.0" & Chr(13, 10)
G_DataTX += "Host: members.dyndns.org" & Chr(13, 10)
G_DataTX += "User-Agent: TSNE_V3_DyndnsUpDateClient" & Chr(13, 10)
G_DataTX += "Authorization: Basic " & TBasicUserPass & Chr(13, 10)
G_DataTX += "connection: close" & Chr(13, 10)
G_DataTX += Chr(13, 10)


'Client erstellen, und das DATA und Connected Callback angeben. Disconnect ist nicht nötig,
'da der HTTP Request ein Connection: Close verlangt
'Hier wird der eigentliche Update ausgeführt.
BV = TSNE_Create_Client(G_Client, "members.dyndns.org", 80, 0, @TSNE_Connected, @TSNE_NewData, 60)
'   Statusrückgabe auswerten
If BV <> TSNE_Const_NoError Then
    Print "[FEHLER] " & TSNE_GetGURUCode(BV)      'Fehler ausgeben
    End -1                                          'Programmbeenden
End If

'Solange warten, bis die Verbindung beendet wurde
TSNE_WaitClose(G_Client)

XPos = InStr(1, G_DataRX, Chr(13, 10, 13, 10))
If XPos = 0 Then
    Print "[FEHLER] Konnte Antwort nicht extrahieren!"
    End -1
End If
Dim XState as String = Mid(G_DataRX, XPos + 4)

Print "DynDNS-Antwort: "; XState
Print "Ready!"
End                                                 'Anschliessend beenden wir unser Programm



'##############################################################################################################
Sub TSNE_Connected(ByVal V_TSNEID as UInteger)      'Empfänger für das Connect Signal (Verbindung besteht)
'Anfrage and en Server senden
Dim BV as Integer = TSNE_Data_Send(V_TSNEID, G_DataTX)
If BV <> TSNE_Const_NoError Then
    Print "[FEHLER] " & TSNE_GetGURUCode(BV)      'Fehler ausgeben
    TSNE_Disconnect(V_TSNEID)
End If
End Sub



'##############################################################################################################
Sub TSNE_NewData (ByVal V_TSNEID as UInteger, ByRef V_Data as String)   'Empfänger für neue Daten
'Neue Daten an die bereits vorhandenen anhängen
G_DataRX += V_Data
End Sub