libvideosite: Add special "environment" connector that will take proxy settings from...
[videosite.git] / videosite / Base.pm
index be0272e..1bd229f 100644 (file)
@@ -10,16 +10,16 @@ use Data::Dumper;
 
 sub new {
     my $class = shift;
-    my $self = {'_DEBUG' => 0,
-                '_CONNECTOR' => undef,
-                API => {
-                    io => sub { printf(@_) },
+    my $self = {'_CONNECTOR' => undef,
+                _API => {
+                    io => sub { print(@_) },
+                    io_debug => sub { print(@_) },
                     connectors => sub { return ({ 'name' => 'direct',
                                                   'schemas' => {} }) },
                 },
                 @_,
                };
-    
+
     # Add the 'enabled' property to all modules
     $self->{_PARAMS}->{enabled} = [1, 'Whether the module is enabled'];
     bless($self, $class);
@@ -40,8 +40,9 @@ sub debug {
     my $self = shift;
     my @data = @_;
 
-    $data[0] = "DEBUG: " . $data[0];
-    if ($self->{'_DEBUG'} != 0) {$self->error(@data)};
+    $data[0] = "("  . ref($self) . ") " . $data[0];
+
+    $self->{_API}->{io_debug}->(@data);
 }
 
 sub _getval {
@@ -84,7 +85,7 @@ sub getconfstr {
     my $p;
 
     foreach $k (keys(%{$self->{'_PARAMS'}})) {
-        $p = $self->{_API}->{config_get}->{$k};
+        $p = $self->_getval($k);
         $s .= sprintf("  %s: %s", $k, $p);
         if ($p eq $self->{'_PARAMS'}->{$k}->[0]) {
             $s .= " (default)\n";
@@ -148,12 +149,6 @@ sub gethelpstr {
     return $s;
 }
 
-sub setdebug {
-    my $self = shift;
-
-    $self->{'_DEBUG'} = shift;
-}
-
 sub ua {
     my $self = shift;
     my $ua;
@@ -161,6 +156,7 @@ sub ua {
     $ua = LWP::UserAgent->new(
             'agent' => 'Mozilla/5.0',
             'cookie_jar' => HTTP::Cookies->new,
+            'parse_head' => 0,
             'timeout' => 15,
             );
 
@@ -168,6 +164,15 @@ sub ua {
     delete($ENV{'HTTPS_PROXY'});
 
     if (defined($self->{'_CONNECTOR'})) {
+        #
+        # The "environment" connector is special, it loads proxies from
+        # the environment variables. It also does not define any schemas,
+        # so the code below will not reset this.
+        #
+        if ($self->{'_CONNECTOR'}->{'name'} eq 'environment') {
+            $self->debug("Using proxy settings from environment");
+            $ua->env_proxy;
+        }
         my $schemas = $self->{'_CONNECTOR'}->{'schemas'};
         foreach (keys(%{$schemas})) {
             $self->debug("Adding schema %s with proxy %s", $_, $schemas->{$_});
@@ -175,7 +180,7 @@ sub ua {
                 # OK, so here's the gist.
                 #
                 # The usual way of reqesting an HTTPS URL through a proxy is
-                # to connect to the proxy server, issue a CONNECT request to 
+                # to connect to the proxy server, issue a CONNECT request to
                 # create a channel to the web server and start an SSL session over
                 # this channel, so there is an end-to-end connection between
                 # the client and the server.
@@ -215,7 +220,10 @@ sub simple_get {
     my $ua = shift || $self->ua();
     my $r;
 
+    $self->debug("Getting %s", $url);
     $r = $ua->get($url);
+    $self->debug("Return code: %s", $r->status_line);
+    $self->debug("Content length: %d", length($r->decoded_content)) if $r->is_success();
     return $r->decoded_content() if $r->is_success();
     return undef;
 }
@@ -237,7 +245,7 @@ sub decode_querystring {
 
 sub connectors {
     my $self = shift;
-    
+
     return $self->{_API}->{connectors}->();
 }
 
@@ -248,13 +256,23 @@ sub selectconn {
 }
 
 #
+# This function was used in previous versions of videosite. If it's called
+# we are dealing with an old plugin which probably needs some minor modifications
+# to work properly.
+#
+# Generate a warning message.
+#
+sub _prepare_parameters {
+    my $self = shift;
+
+    $self->error("THIS MODULE IS CALLING _prepare_parameters(). THIS FUNCTION IS DEPRECATED. See readme.txt in the plugin directory.");
+}
+
+#
 # Register a callbacks into the core API to the plugin.
 # Example of those are config getter/setters and IO functions
 # The API is a hash reference containing subroutine references.
 #
-# After the API is registered an attempt is made to load the config
-# (or set defaults if config values are not found)
-#
 sub register_api {
     my $self = shift;
     my $api = shift;