Ok, zit een beetje te proggen aan het nieuwste MSN-Messenger-protocol in Delphi. Werkt op zich als een trein, tot op het punt waar ik een aantal SSL-verbindingen achter elkaar op moet zetten. De TIdTCPClient en bijbehorende TIdConnectionInterceptOpenSSL werken perfect als ik ze in de Object Inspector aan elkaar knoop.
Het punt is dat ik beide componenten graag run-time wil aanmaken, maar daar gaat het nu mis. Even wat code om over te praten:
Het gaat dus mis op regel 28 als ik ga connecten. De component blijft daar botweg hangen tot er een time-out van Indy optreedt. De waarden die in regel 9-23 aan de TCPClient en de Intercept worden toegekend zijn exact overgenomen uit de Object Inspector. Daarbij maakt het niet uit of ik dat hele schem zit over te tikken of deze minimale info gebruik.
Als ik tijdens het wachten op de time-out in Connect in een console-venstertje een netstat doe, krijg ik het volgende:
Er wordt dus wel een syn naar de juiste server gestuurd, maar die leidt niet tot een verbinding. Totdat ik de componenten weer design-time zet, dan werkt alles als een trein.
Iemand enige clue waar het 'm hier misgaat? Google en de Search alhier tot op heden helaas nog niet...
Edit: nog ff "for the record": Delphi 6.0 met Indy 8.0 (zoals standaard meegeleverd)
Het punt is dat ik beide componenten graag run-time wil aanmaken, maar daar gaat het nu mis. Even wat code om over te praten:
Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
| procedure TForm1.Button1Click(Sender: TObject); var TCP: TIdTCPClient; TCPIntercept: TIdConnectionInterceptOpenSSL; begin TCP := TIdTCPClient.Create(nil); TCPIntercept := TIdConnectionInterceptOpenSSL.Create(TCP); with TCP do begin Host := 'nexus.passport.com'; // SSL-passport server voor MSN Port := 433; Intercept := TCPIntercept; InterceptEnabled := true; end; with TCPIntercept.SSLOptions do begin Method := sslvSSLv2; Mode := sslmUnassigned; VerifyMode := []; VerifyDepth := 0; end; try with TCP do begin Connect; Memo1.Lines.Add('Connected'); WriteLn('GET /rdr/pprdr.asp HTTP/1.0'); [... knip de rest, daar kom ik toch niet...] end; except ... end; end; |
Het gaat dus mis op regel 28 als ik ga connecten. De component blijft daar botweg hangen tot er een time-out van Indy optreedt. De waarden die in regel 9-23 aan de TCPClient en de Intercept worden toegekend zijn exact overgenomen uit de Object Inspector. Daarbij maakt het niet uit of ik dat hele schem zit over te tikken of deze minimale info gebruik.
Als ik tijdens het wachten op de time-out in Connect in een console-venstertje een netstat doe, krijg ik het volgende:
code:
1
2
3
4
5
6
| C:\>netstat -p tcp -n Active Connections Proto Local Address Foreign Address State TCP 192.168.10.2:1978 65.54.230.248:433 SYN_SENT |
Er wordt dus wel een syn naar de juiste server gestuurd, maar die leidt niet tot een verbinding. Totdat ik de componenten weer design-time zet, dan werkt alles als een trein.
Iemand enige clue waar het 'm hier misgaat? Google en de Search alhier tot op heden helaas nog niet...
Edit: nog ff "for the record": Delphi 6.0 met Indy 8.0 (zoals standaard meegeleverd)
[ Voor 3% gewijzigd door Reptile209 op 28-09-2003 03:08 ]
Zo scherp als een voetbal!