Grüße!
Ich hätte eine Frage, und zwar bzgl. folgendem: Ich würde meinen AnGeL gerne prüfen lassen, ob ein User beim Join in einen Channel SSL Verschlüsselung verwendet (Server ist Undernet mit AES256). Diese Information ließe sich aus einem whois Reply auf den User gewinnen, hierbei kommt unter anderem der String "<nickname> is using a Secure Connection" zurück.
Nun meine Frage: Es gibt ja den Hook Join(), auf den hin man ggf. ein whois an den joinenden User absetzen könnte. Aber wie frage ich dann die Antwort darauf ab? Muß ich hier den Code auf mehrere Hooks aufteilen (Einer für den Join und einer für das whois reply)?
Möglicherweise bräuchte ich davon auch die Raw() Versionen, da ich es bisher am SSL Server nur per Raw() geschafft habe, irgendwas zu parsen (ich wickle mittels WinSSLWrap das SSL um den AnGeL herum), warum das so ist weiß ich noch ned.
Wäre toll, wenn mir dabei jemand helfen könnte. Also es geht wie gesagt darum:
- Whois bei Join eines Users in einen Channel absetzen
- Reply auf Whois auf bestimmten String prüfen, und ggf. reagieren
- Das ganze nach Möglichkeit auch in Raw
Vielen Dank!
Am besten du machst einen Whois auf den User beim Joinen (Join()) und dann reagierst du per Numerics drauf.
Sieht so aus:
Code:
Sub Init()
'...
Hook "Join"
Hook "Numerics"
End Sub
Sub Join(...)
SendLine "WHOIS " & Nick, 1
End Sub
Sub Numerics(Line)
If Param(Line, 1) = "XXX" Then
'User hat eine gesicherte Verbindung
End If
End Sub
Bei XXX tragste noch das Numeric ein, dass die Secure Message beinhaltet. 671 sollte die sein, die du suchst.
Ah, vielen Dank, das funktioniert schon Mal. Leider habe ich gerade einen Denkfehler bei mir bemerkt, lol.
Ich möchte nicht reagieren, wenn 671 detektiert wird, sondern dann wenn es NICHT detektiert wird (habe ich falsch formuliert, sorry). Soll heißen, wenn ein User mit SSL verbindet, passiert nichts.
Wenn ein User
ohne SSL verbindet, dann soll reagiert werden.
Nur sowas funktioniert logischerweise nicht wie gewünscht:
Code:
If Not Param(Line, 1) = "671" Then
'User hat eine ungesicherte Verbindung
End If
Da detected er ja alle Numerics außer 671 und agiert wo er gar nicht sollte. Zerbrech mir grade den Kopf drüber..
Edit: Ich könnte mir eine Lösung vorstellen, aber nur wenn ich Line-übergreifenden Code schreiben könnte. Aber ich weiß ned wie das geht, jeder Hook wird ja nur 1 Mal pro Line ausgeführt und dann "vergessen", bis zur nächsten Line. Strikt Line-by-Line. Ich kann mir irgendwie ned Mal mittels globaler Variable den User aus der Join() merken und für die Numerics() weiterverwenden?
Brauche also leider immer noch etwas Unterstützung, danke!
Dann würde ich eine globale Variable festlegen (z.b. SSLused) und diese auf true setzen, wenn die If-Bedingung true wird (er also SSL benutzt).
Dann fügst du noch eine zweite If-Bedingung ein, in der du überprüfst, ob das Whois zuende is (sollte Numeric 318 sein).
Hier überprüfst du, ob die SSLused-Varaible true ist. Wenn ja, benutzt der User SSL, wenn nicht: dann war keine Zeile dabei sprich er benutzt kein SSL.
EDIT: also so:
Code:
Dim SSLused
Sub Init()
'...
Hook "Join"
Hook "Numerics"
SSLused = false
End Sub
Sub Join(...)
SendLine "WHOIS " & Nick, 1
End Sub
Sub Numerics(Line)
If Param(Line, 1) = "671" Then
'User hat eine gesicherte Verbindung
SSLused = true
ElseIf Param(Line, 1) = "318" Then
'Whois zuende
If SSLused Then
'User benutzte SSL
Else
'User benutzte kein SSL
End If
End If
End Sub
Mann, ich habe versucht, "globale" Variablen in der Init() zu setzen, das war wohl ziemlich stümperhaft, kein Wunder daß es mir nicht gelungen ist, Werte von Sub zu Sub weiterzureichen, rofl.
Danke für deine Hilfe, das hat es mir ermöglicht, alles wie gewünscht zu lösen, der Vorab-Code:
Code:
Dim SSL, UserName, Channel
Sub Init()
Hook "Join"
Hook "Numerics"
SSL = false
End Sub
Sub Join(Chan, Nick, RegUser, Flags)
SendLine "WHOIS " & Nick, 1
UserName = Nick
Channel = Chan
End Sub
Sub Numerics(Line)
If Param(Line, 1) = "671" Then
SSL = true
ElseIf Param(Line, 1) = "318" Then
If Not SSL Then
SendLine "PRIVMSG " & Channel & " :04!WARNING!, user " & UserName & " is NOT using SSL! Channel security compromised!", 2
SendLine "PRIVMSG " & Channel & " :04Users beware what you are saying as long as unencrypted clients are on the channel!", 2
Else
SendLine "PRIVMSG " & Channel & " :03User " & UserName & " is using SSL, all ok.", 2
SSL = false
End If
End If
End Sub
Wichtig wars noch, das SSL Flag nach gematchtem 318er Numeric wieder auf false zu setzen, sonst ist das peristent bestehen geblieben! So funktionierts wunderbar!
