diff --git a/lib/raZberry.pm b/lib/raZberry.pm index bcb1fc90d..b593bd4ef 100755 --- a/lib/raZberry.pm +++ b/lib/raZberry.pm @@ -431,7 +431,7 @@ sub process_check { #check if data comes back unauthenticated if (($self->{login_success} == 0) and ($self->{login_attempt})) { if ($main::Time > ($self->{login_attempt} + 30)) { #retry log in every 30 seconds - main::print_log( "[raZberry:" . $self->{host} . "] Attempting to re-authenticate" ); + main::print_log( "[raZerry:" . $self->{host} . "] Attempting to re-authenticate" ); $self->login; } } @@ -440,7 +440,7 @@ sub process_check { $com_status = "online"; $processed_data = 1; - main::print_log( "[raZberry:" . $self->{host} . "] Background poll " . $self->{poll_process_mode} . " process completed" ) if ( $self->{debug} ); + main::print_log( "[raZerry:" . $self->{host} . "] Background poll " . $self->{poll_process_mode} . " process completed" ) if ( $self->{debug} ); my $file_data = &main::file_read( $self->{poll_data_file} ); exit unless ($file_data); #if there is no data, then don't process @@ -460,10 +460,6 @@ sub process_check { main::print_log( "[raZberry:" . $self->{host} . "] ERROR! bad data returned by poll" ); main::print_log( "[raZberry:" . $self->{host} . "] ERROR! file data is [$file_data]. json data is [$json_data]" ); $com_status = "offline"; - if ($file_data =~ /.*Not logged in 401.*/i){ - $self->{cookie_jar}->clear(); - $self->login; - } } else { push @process_data, $json_data; } @@ -472,7 +468,7 @@ sub process_check { $com_status = "online"; $processed_data = 2; - main::print_log( "[raZberry:" . $self->{host} . "] Command " . $self->{cmd_process_mode} . " process completed" ) if ( $self->{debug} ); + main::print_log( "[raZerry:" . $self->{host} . "] Command " . $self->{cmd_process_mode} . " process completed" ) if ( $self->{debug} ); my $file_data = &main::file_read( $self->{cmd_data_file} ); exit unless ($file_data); #if there is no data, then don't process @@ -500,15 +496,11 @@ sub process_check { # print "debug: json_data=$json_data\n" if ( $self->{debug} > 2); unless ( ($file_data) and ($json_data) ) { - main::print_log( "[raZberry:" . $self->{host} . "] ERROR! bad data returned by command" ); + main::print_log( "[raZberry:" . $self->{host} . "] ERROR! bad data returned by poll" ); main::print_log( "[raZberry:" . $self->{host} . "] ERROR! file data is [$file_data]. json data is [$json_data]" ); $com_status = "offline"; #update the retry on the failed item. $ {$self->{cmd_queue}}[0][3]++; - if ($file_data =~ /.*Not logged in 401.*/i){ - $self->{cookie_jar}->clear(); - $self->login; - } } else { push @process_data, $json_data; shift @{ $self->{cmd_queue} }; #successfully processed to remove item from the queue @@ -519,21 +511,20 @@ sub process_check { #check for any queued data that needs to be processed $self->{command_timeout} if ((scalar @{ $self->{cmd_queue} }) and ($self->{cmd_process}->done() )) { - my ($mode, $url, $time, $retry) = @ { ${ $self->{cmd_queue} }[0] }; - #print "**** mode=$mode, url=$url\n"; + my ($mode, $get_cmd, $time, $retry) = @ { ${ $self->{cmd_queue} }[0] }; + #print "**** mode=$mode, get_cmd=$get_cmd\n"; #print "*** time=$time, time_diff=" . ($main::Time - $time) ." timeout=" .$self->{command_timeout} . " retry=$retry\n"; #if there is a retry, then execute at request time + (retry * 5 seconds) #discard the command if 60 seconds after the request time #if the item is queued then wait until at least a second after the request time #discard the item if it's been retried $self->{command_timeout_limit} times if ($retry > $self->{command_timeout_limit}) { - main::print_log( "[raZberry:" . $self->{host} . "] ERROR: Abandoning command $url due to $retry retry attempts" ); + main::print_log( "[raZberry:" . $self->{host} . "] ERROR: Abandoning command $get_cmd due to $retry retry attempts" ); shift @{ $self->{cmd_queue}}; } elsif (($main::Time - $time) > $self->{command_timeout}) { - main::print_log( "[raZberry:" . $self->{host} . "] ERROR: $url request older than " . $self->{command_timeout} . " seconds. Abandoning request" ); + main::print_log( "[raZberry:" . $self->{host} . "] ERROR: $get_cmd request older than " . $self->{command_timeout} . " seconds. Abandoning request" ); shift @{ $self->{cmd_queue}}; } elsif (($main::Time > ($time + 1 + ($retry * 5)) and ($self->{cmd_process}->done() ) )) {#the original time isn't a great base for deep queued commands - my $get_cmd = $self->get_cmd_string($url); if ($retry == 0) { main::print_log( "[raZberry:" . $self->{host} . "] Command Queue found, processing next item" ); } else { @@ -772,19 +763,11 @@ sub update_dev { } #------------------------------------------------------------------------------------ -sub get_cmd_string{ - my ( $self, $url ) = @_; - my $cookie = ""; - $cookie = $self->{cookie_string} if ( $self->{cookie_string} ); - my $get_params = "-ua "; - $get_params .= "-timeout " . $self->{timeout} . " "; - $get_params .= "-cookies " . "'" . $cookie . "' " if ($cookie ne ""); - return "get_url $get_params $url"; -} - sub _get_JSON_data { my ( $self, $mode, $cmd ) = @_; + my $cookie = ""; + $cookie = $self->{cookie_string} if ( $self->{cookie_string} ); my $host = $self->{host}; my $port = $self->{port}; my $params = ""; @@ -799,8 +782,10 @@ sub _get_JSON_data { or ( $mode eq "usercode_data" ) ); $method = "ZWaveAPI" if ( $mode eq "controller" ); &main::print_log("[raZberry:" . $self->{host} . "]: contacting http://$host:$port/$method/$rest{$mode}$params") if ( $self->{debug} ); - my $url = '"http://' . "$host:$port/$method/$rest{$mode}$params" . '"'; - my $get_cmd = $self->get_cmd_string($url); + my $get_params = "-ua "; + $get_params .= "-timeout " . $self->{timeout} . " "; + $get_params .= "-cookies " . "'" . $cookie . "' " if ($cookie ne ""); + my $get_cmd = "get_url $get_params " . '"http://' . "$host:$port/$method/$rest{$mode}$params" . '"'; if (( $cmd eq "") or ($cmd =~ m/^\?since=/)) { $self->{poll_process}->stop() unless ($self->{poll_process}->done() ); @@ -815,12 +800,12 @@ sub _get_JSON_data { $self->{cmd_process}->start(); $self->{cmd_process_pid}->{ $self->{cmd_process}->pid() } = $mode; #capture the type of information requested in order to parse; $self->{cmd_process_mode} = $mode; - push @{ $self->{cmd_queue} }, [$mode,$url,$main::Time,0]; + push @{ $self->{cmd_queue} }, [$mode,$get_cmd,$main::Time,0]; main::print_log( "[raZberry:" . $self->{host} . "] Backgrounding Command (" . $self->{cmd_process}->pid() . ") command $mode, $get_cmd" ) if ( $self->{debug} ); } else { main::print_log( "[raZberry:" . $self->{host} . "] Queing Command command $mode, $get_cmd, time " . $main::Time ) if ( $self->{debug} ); if (scalar @{ $self->{cmd_queue} } <= $self->{max_cmd_queue} ) { - push @{ $self->{cmd_queue} }, [$mode,$url,$main::Time,0]; + push @{ $self->{cmd_queue} }, [$mode,$get_cmd,$main::Time,0]; } else { main::print_log( "[raZberry:" . $self->{host} . "] Max Queue Length ($self->{max_cmd_queue}) reached! Discarding queued command" ); #@{ $self->{cmd_queue} } = ();