1package Crypt::SSLeay::MainContext;
2
3# maintains a single instance of the Crypt::SSLeay::CTX class
4
5use strict;
6use Carp ();
7
8require Crypt::SSLeay::CTX;
9
10my $ctx = &main_ctx();
11
12sub main_ctx {
13    my $ssl_version = shift || 23;
14
15    my $ctx = Crypt::SSLeay::CTX->new($ssl_version);
16    $ctx->set_cipher_list($ENV{CRYPT_SSLEAY_CIPHER})
17      if $ENV{CRYPT_SSLEAY_CIPHER};
18
19    $ctx;
20}
21
22my %sub_cache = ('main_ctx' => \&main_ctx );
23
24sub import {
25    my $pkg = shift;
26    my $callpkg = caller();
27    my @func = @_;
28    for (@func) {
29        s/^&//;
30        Carp::croak("Can't export $_ from $pkg") if /\W/;;
31        my $sub = $sub_cache{$_};
32        unless ($sub) {
33            my $method = $_;
34            $method =~ s/^main_ctx_//;  # optional prefix
35            $sub = $sub_cache{$_} = sub { $ctx->$method(@_) };
36        }
37        no strict 'refs';
38        *{"${callpkg}::$_"} = $sub;
39    }
40}
41
421;
43