Alien-curl

 view release on metacpan or  search on metacpan

t/alien_curl.t  view on Meta::CPAN

          'ulong'    => 'ssl_version_num',
          'string'   => 'libz_version',
          'opaque'   => 'protocols',
        );
      }
      $ffi->function( curl_version_info => ['enum'] => 'record(Curl::Version)' );
    };
    if(my $error = $@)
    {
      note "error looking for curl_version_info";
      note $error;
    }
    else
    {
      my $version = $curl_version_info->call(0);
      note "age             = ", $version->age;
      note "version         = ", $version->version;
      note "version_num     = ", $version->version_num;
      note "host            = ", $version->host;
      note "features        = ", $version->features;
      note "ssl_version     = ", $version->ssl_version;
      note "ssl_version_num = ", $version->ssl_version_num;
      note "libz_version    = ", $version->libz_version;
      my @proto = @{ $ffi->cast('opaque', 'string[]', $version->protocols()) };
      note "proto   = $_" for @proto;
      my %proto = map { $_ => 1 } @proto;
      is(
        \%proto,
        $proto_check,
        'protocols supported incudes: http, https, and ftp',
      ) || diag "proto: @proto";
    }
  }
);

done_testing;

__DATA__
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
#include <curl/curl.h>

MODULE = Curl PACKAGE = Curl

const char *
curl_version()

AV*
curl_protocols()
  PREINIT:
    size_t i;
    curl_version_info_data *data;
  CODE:
    data = curl_version_info(CURLVERSION_NOW);
    RETVAL = (AV*) sv_2mortal((SV*)newAV());
    for(i=0; data->protocols[i] != NULL; i++)
    {
      av_push(RETVAL, newSVpv(data->protocols[i], strlen(data->protocols[i])));
    }
  OUTPUT:
    RETVAL



( run in 1.038 second using v1.01-cache-2.11-cpan-13bb782fe5a )