fb:porticula NoPaste
DynDNS_UpDate_Cient.bas
Uploader: | ThePuppetMaster |
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