Fix TLSProxy end of test detection
[openssl.git] / util / TLSProxy / Proxy.pm
index b4ee671c66e3ab99d7144f5ab6c23a9ca24863a0..af6c8ddaaf545d3d1414173e49b39e980f5b499c 100644 (file)
@@ -61,6 +61,8 @@ use IO::Select;
 use TLSProxy::Record;
 use TLSProxy::Message;
 use TLSProxy::ClientHello;
+use TLSProxy::ServerHello;
+use TLSProxy::ServerKeyExchange;
 
 sub new
 {
@@ -82,6 +84,8 @@ sub new
         execute => $execute,
         cert => $cert,
         debug => $debug,
+        cipherc => "AES128-SHA",
+        ciphers => "",
         flight => 0,
         record_list => [],
         message_list => [],
@@ -97,6 +101,8 @@ sub clear
 {
     my $self = shift;
 
+    $self->{cipherc} = "AES128-SHA";
+    $self->{ciphers} = "";
     $self->{flight} = 0;
     $self->{record_list} = [];
     $self->{message_list} = [];
@@ -124,14 +130,20 @@ sub start
         open(STDOUT, ">", File::Spec->devnull())
             or die "Failed to redirect stdout";
         open(STDERR, ">&STDOUT");
-        exec($self->execute." s_server -testmode -accept ".($self->server_port)
-             ." -cert ".$self->cert." -naccept 1");
+        my $execcmd = $self->execute." s_server -rev -engine ossltest -accept "
+            .($self->server_port)
+            ." -cert ".$self->cert." -naccept 1";
+        if ($self->ciphers ne "") {
+            $execcmd .= " -cipher ".$self->ciphers;
+        }
+        exec($execcmd);
     }
 
     my $oldstdout;
 
     if(!$self->debug) {
-        $oldstdout = select(File::Spec->devnull());
+        open DEVNULL, ">", File::Spec->devnull();
+        $oldstdout = select(DEVNULL);
     }
 
     # Create the Proxy socket
@@ -155,9 +167,13 @@ sub start
             open(STDOUT, ">", File::Spec->devnull())
                 or die "Failed to redirect stdout";
             open(STDERR, ">&STDOUT");
-            exec($self->execute
-                 ." s_client -cipher AES128-SHA -testmode -connect "
-                 .($self->proxy_addr).":".($self->proxy_port));
+            my $execcmd = "echo test | ".$self->execute
+                 ." s_client -engine ossltest -connect "
+                 .($self->proxy_addr).":".($self->proxy_port);
+            if ($self->cipherc ne "") {
+                $execcmd .= " -cipher ".$self->cipherc;
+            }
+            exec($execcmd);
         }
     }
 
@@ -360,5 +376,20 @@ sub filter
     }
     return $self->{filter};
 }
-
+sub cipherc
+{
+    my $self = shift;
+    if (@_) {
+      $self->{cipherc} = shift;
+    }
+    return $self->{cipherc};
+}
+sub ciphers
+{
+    my $self = shift;
+    if (@_) {
+      $self->{ciphers} = shift;
+    }
+    return $self->{ciphers};
+}
 1;