| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 | # Copyright 2016-2024 The OpenSSL Project Authors. All Rights Reserved.## Licensed under the Apache License 2.0 (the "License").  You may not use# this file except in compliance with the License.  You can obtain a copy# in the file LICENSE in the source distribution or at# https://www.openssl.org/source/license.htmluse strict;package TLSProxy::HelloVerifyRequest;use TLSProxy::Record;use vars '@ISA';push @ISA, 'TLSProxy::Message';sub new{    my $class = shift;    my ($isdtls,        $server,        $msgseq,        $msgfrag,        $msgfragoffs,        $data,        $records,        $startoffset,        $message_frag_lens) = @_;    my $self = $class->SUPER::new(        $isdtls,        $server,        TLSProxy::Message::MT_HELLO_VERIFY_REQUEST,        $msgseq,        $msgfrag,        $msgfragoffs,        $data,        $records,        $startoffset,        $message_frag_lens);    $self->{server_version} = 0;    $self->{cookie_len} = 0;    $self->{cookie} = "";    return $self;}sub parse{    my $self = shift;    my ($server_version) = unpack('n', $self->data);    my $ptr = 2;    my $cookie_len = unpack('C', substr($self->data, $ptr));    $ptr++;    my $cookie = substr($self->data, $ptr, $cookie_len);    $self->server_version($server_version);    $self->cookie_len($cookie_len);    $self->cookie($cookie);    $self->process_data();    print "    Server Version:".$TLSProxy::Record::tls_version{$server_version}."\n";    print "    Cookie Len:".$cookie_len."\n";}#Perform any actions necessary based on the data we've seensub process_data{    my $self = shift;    #Intentional no-op}#Reconstruct the on-the-wire message data following changessub set_message_contents{    my $self = shift;    my $data;    $data = pack('n', $self->server_version);    $data .= pack('C', $self->cookie_len);    $data .= $self->cookie;    $self->data($data);}#Read/write accessorssub server_version{    my $self = shift;    if (@_) {      $self->{server_version} = shift;    }    return $self->{server_version};}sub cookie_len{    my $self = shift;    if (@_) {      $self->{cookie_len} = shift;    }    return $self->{cookie_len};}sub cookie{    my $self = shift;    if (@_) {      $self->{cookie} = shift;    }    return $self->{cookie};}1;
 |