[Delphi/Indy] Runtime TCP Client + SSL Intercept *

Pagina: 1
Acties:
  • 202 views sinds 30-01-2008

  • Reptile209
  • Registratie: Juni 2001
  • Laatst online: 00:19
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:
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!


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Er is weinig verschil tussen runtime of designtime aanmaken. Weet je zeker dat je alle properties die je designtime instel ook runtime ingesteld hebt? Misschien is het een kwestie van creation order. Speel eens met de volgorde van het creeren van de componenten en het zetten van de properties. Een ander verschil dat ik zie is dat je als Owner niet het form meegegeven hebt, terwijl dit designtime wel gebeurd.

We adore chaos because we like to restore order - M.C. Escher


  • Reptile209
  • Registratie: Juni 2001
  • Laatst online: 00:19
Dat van die Owner zou haast het enige kunnen zijn. Alle properties die via de Object Inspector toegankelijk zijn, heb ik zo overgenomen.
Kom ik direct op een nieuw probleem uit: de reden waarom ik 'm graag run-time wil maken, is dat ik de verbinding vanuit een thread opzet. Ik heb dus geen form om de hele boel aan te kunnen koppelen (er is wel een form, maar dat hoort niet specifiek bij deze thread). En in een TThread-afgeleide mag je Self niet als owner meegeven in de Create() van beide componenten. Ik dacht toch dat alle Indy-componenten netjes thread-safe waren (en daar juist voor bedoeld zijn). Dus zou nil ook prima moeten kunnen, mits je zelf maar netjes voor het opruimen e.d. zorgt... :?
Ik heb ook al wat zitten rommelen aan de volgorde van beide Create's, ook al eens de koppeling tussen TCP en TCPIntercept pas na het toewijzen van alle andere properties gedaan. Helpt tot nogtoe geen klap. :)

Zo scherp als een voetbal!


  • martijn_brinkers
  • Registratie: November 2001
  • Laatst online: 31-10-2025
In het voorbeeld zie ik geen thread. Bedoel je dat je Button1Click vanuit een thread aan roept?

  • Reptile209
  • Registratie: Juni 2001
  • Laatst online: 00:19
TijnFLiP schreef op 28 September 2003 @ 23:12:
In het voorbeeld zie ik geen thread. Bedoel je dat je Button1Click vanuit een thread aan roept?
Nee, de uiteindelijke code moet in een thread komen. Daarom test ik 'm nu even apart (met een button...) onder min of meer dezelfde omstandigheden. Had echter geen zin om daar een hele thread voor te gebruiken.

Edit:
Als ik de TTCPClient.OnStatus afvang, krijg ik alleen de volgende twee meldingen:
code:
1
2
Resolving hostname nexus.passport.com.
Connecting to 65.54.231.248.

En dan blijft 'ie dus hangen totdat er een time-out optreedt:
code:
1
2
3
4
Disconnecting from 65.54.231.248.
Not connected.
Exception: Socket Error # 10060  <<-- exception die afgevangen wordt
Connection timed out.


Edit2:
En ook als ik het hele zwikkie in een thread gooi, maakt dat niks uit (en dat verbaast me op zich dan weer niks... :))

[ Voor 45% gewijzigd door Reptile209 op 29-09-2003 00:16 ]

Zo scherp als een voetbal!


  • Reptile209
  • Registratie: Juni 2001
  • Laatst online: 00:19
Waaaaaa!! Het hele probleem komt dus vanuit een typo: ik had in het eerste programma een typo gemaakt op het poortnummer. 433 (crap poort) had 443 (SSL) moeten zijn... Werkt nu als een tiet trein tierelier...
Ok, roep het maar: * Reptile209 *, je bent een eikel... kom maar, kommaar kommaar... |:( 8)7

offtopic:
TR aangemaakt om dit stukje schande op slot te doen... :+

Zo scherp als een voetbal!


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Reptile209:

En nee, dit is niet nuttig genoeg voor het nageslacht, die kunnen vast wel zelf een referenceboek openslaan :D

Professionele website nodig?

Pagina: 1

Dit topic is gesloten.