1*4724848cSchristos# Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. 2*4724848cSchristos# 3*4724848cSchristos# Licensed under the OpenSSL license (the "License"). You may not use 4*4724848cSchristos# this file except in compliance with the License. You can obtain a copy 5*4724848cSchristos# in the file LICENSE in the source distribution or at 6*4724848cSchristos# https://www.openssl.org/source/license.html 7*4724848cSchristos 8*4724848cSchristosuse strict; 9*4724848cSchristos 10*4724848cSchristospackage TLSProxy::NewSessionTicket; 11*4724848cSchristos 12*4724848cSchristosuse vars '@ISA'; 13*4724848cSchristospush @ISA, 'TLSProxy::Message'; 14*4724848cSchristos 15*4724848cSchristossub new 16*4724848cSchristos{ 17*4724848cSchristos my $class = shift; 18*4724848cSchristos my ($server, 19*4724848cSchristos $data, 20*4724848cSchristos $records, 21*4724848cSchristos $startoffset, 22*4724848cSchristos $message_frag_lens) = @_; 23*4724848cSchristos 24*4724848cSchristos my $self = $class->SUPER::new( 25*4724848cSchristos $server, 26*4724848cSchristos TLSProxy::Message::MT_NEW_SESSION_TICKET, 27*4724848cSchristos $data, 28*4724848cSchristos $records, 29*4724848cSchristos $startoffset, 30*4724848cSchristos $message_frag_lens); 31*4724848cSchristos 32*4724848cSchristos $self->{ticket_lifetime_hint} = 0; 33*4724848cSchristos $self->{ticket} = ""; 34*4724848cSchristos 35*4724848cSchristos return $self; 36*4724848cSchristos} 37*4724848cSchristos 38*4724848cSchristossub parse 39*4724848cSchristos{ 40*4724848cSchristos my $self = shift; 41*4724848cSchristos 42*4724848cSchristos my $ticket_lifetime_hint = unpack('N', $self->data); 43*4724848cSchristos my $ticket_len = unpack('n', $self->data); 44*4724848cSchristos my $ticket = substr($self->data, 6, $ticket_len); 45*4724848cSchristos 46*4724848cSchristos $self->ticket_lifetime_hint($ticket_lifetime_hint); 47*4724848cSchristos $self->ticket($ticket); 48*4724848cSchristos} 49*4724848cSchristos 50*4724848cSchristos 51*4724848cSchristos#Reconstruct the on-the-wire message data following changes 52*4724848cSchristossub set_message_contents 53*4724848cSchristos{ 54*4724848cSchristos my $self = shift; 55*4724848cSchristos my $data; 56*4724848cSchristos 57*4724848cSchristos $data = pack('N', $self->ticket_lifetime_hint); 58*4724848cSchristos $data .= pack('n', length($self->ticket)); 59*4724848cSchristos $data .= $self->ticket; 60*4724848cSchristos 61*4724848cSchristos $self->data($data); 62*4724848cSchristos} 63*4724848cSchristos 64*4724848cSchristos#Read/write accessors 65*4724848cSchristossub ticket_lifetime_hint 66*4724848cSchristos{ 67*4724848cSchristos my $self = shift; 68*4724848cSchristos if (@_) { 69*4724848cSchristos $self->{ticket_lifetime_hint} = shift; 70*4724848cSchristos } 71*4724848cSchristos return $self->{ticket_lifetime_hint}; 72*4724848cSchristos} 73*4724848cSchristossub ticket 74*4724848cSchristos{ 75*4724848cSchristos my $self = shift; 76*4724848cSchristos if (@_) { 77*4724848cSchristos $self->{ticket} = shift; 78*4724848cSchristos } 79*4724848cSchristos return $self->{ticket}; 80*4724848cSchristos} 81*4724848cSchristos1; 82