Diff for /loncom/lond between versions 1.318.2.6 and 1.319

version 1.318.2.6, 2006/03/04 04:27:38 version 1.319, 2006/02/08 17:11:46
Line 2915  sub dump_profile_database { Line 2915  sub dump_profile_database {
  while (my ($key,$value) = each(%$hashref)) {   while (my ($key,$value) = each(%$hashref)) {
     my ($v,$symb,$param) = split(/:/,$key);      my ($v,$symb,$param) = split(/:/,$key);
     next if ($v eq 'version' || $symb eq 'keys');      next if ($v eq 'version' || $symb eq 'keys');
     # making old style store  entries '$ver:$symb:$key = $value'      next if (exists($data{$symb}) && 
     # look like new             '$ver:compressed:$symb = "$key=$value"'       exists($data{$symb}->{$param}) &&
     if ($symb eq 'compressed') {       $data{$symb}->{'v.'.$param} > $v);
  $symb = $param;      $data{$symb}->{$param}=$value;
     } else {      $data{$symb}->{'v.'.$param}=$v;
  $value = $param.'='.$value;  
     }  
     foreach my $pair (split(/\&/,$value)) {  
  my ($param,$value)=split(/=/,$pair);  
  next if (exists($data{$symb}) &&   
  exists($data{$symb}->{$param}) &&  
  $data{$symb}->{'v.'.$param} > $v);  
  $data{$symb}->{$param}=$value;  
  $data{$symb}->{'v.'.$param}=$v;  
     }  
  }   }
  if (&untie_user_hash($hashref)) {   if (&untie_user_hash($hashref)) {
     while (my ($symb,$param_hash) = each(%data)) {      while (my ($symb,$param_hash) = each(%data)) {
Line 3078  sub store_handler { Line 3068  sub store_handler {
     my $version=$hashref->{"version:$rid"};      my $version=$hashref->{"version:$rid"};
     my $allkeys='';       my $allkeys=''; 
     foreach my $pair (@pairs) {      foreach my $pair (@pairs) {
  my ($key)=split(/=/,$pair);   my ($key,$value)=split(/=/,$pair);
  $allkeys.=$key.':';   $allkeys.=$key.':';
    $hashref->{"$version:$rid:$key"}=$value;
     }      }
     $hashref->{"$version:compressed:$rid"}=$what."\&timestamp=$now";      $hashref->{"$version:$rid:timestamp"}=$now;
     $allkeys.='timestamp';      $allkeys.='timestamp';
     $hashref->{"$version:keys:$rid"}=$allkeys;      $hashref->{"$version:keys:$rid"}=$allkeys;
     if (&untie_user_hash($hashref)) {      if (&untie_user_hash($hashref)) {
Line 3102  sub store_handler { Line 3093  sub store_handler {
 }  }
 &register_handler("store", \&store_handler, 0, 1, 0);  &register_handler("store", \&store_handler, 0, 1, 0);
   
 sub putstore_handler {  
     my ($cmd, $tail, $client) = @_;  
    
     my $userinput = "$cmd:$tail";  
   
     my ($udom,$uname,$namespace,$rid,$v,$what) =split(/:/,$tail);  
     if ($namespace ne 'roles') {  
   
  chomp($what);  
  my $hashref  = &tie_user_hash($udom, $uname, $namespace,  
        &GDBM_WRCREAT(), "C",  
        "$rid:$what");  
  if ($hashref) {  
     my $now = time;  
     my %data = &hash_extract($what);  
     my @allkeys;  
     if (exists($hashref->{"$v:compressed:$rid"})) {  
  my %current = &hash_extract($hashref->{"$v:compressed:$rid"});  
  while (my($key,$value) = each(%data)) {  
     push(@allkeys,$key);  
     $current{$key} = $value;  
  }  
  $hashref->{"$v:compressed:$rid"}= &hash_to_str(\%current);  
     } else {  
  while (my($key,$value) = each(%data)) {  
     push(@allkeys,$key);  
     $hashref->{"$v:$rid:$key"} = $value;  
  }  
     }  
     my $allkeys = join(':',@allkeys);  
     $hashref->{"$v:keys:$rid"}=$allkeys;  
   
     if (&untie_user_hash($hashref)) {  
  &Reply($client, "ok\n", $userinput);  
     } else {  
  &Failure($client, "error: ".($!+0)." untie(GDBM) Failed ".  
  "while attempting store\n", $userinput);  
     }  
  } else {  
     &Failure( $client, "error: ".($!+0)." tie(GDBM) Failed ".  
      "while attempting store\n", $userinput);  
  }  
     } else {  
  &Failure($client, "refused\n", $userinput);  
     }  
   
     return 1;  
 }  
 &register_handler("putstore", \&putstore_handler, 0, 1, 0);  
   
 sub hash_extract {  
     my ($str)=@_;  
     my %hash;  
     foreach my $pair (split(/\&/,$str)) {  
  my ($key,$value)=split(/=/,$pair);  
  $hash{$key}=$value;  
     }  
     return (%hash);  
 }  
 sub hash_to_str {  
     my ($hash_ref)=@_;  
     my $str;  
     foreach my $key (keys(%$hash_ref)) {  
  $str.=$key.'='.$hash_ref->{$key}.'&';  
     }  
     $str=~s/\&$//;  
     return $str;  
 }  
   
 #  #
 #  Dump out all versions of a resource that has key=value pairs associated  #  Dump out all versions of a resource that has key=value pairs associated
 # with it for each version.  These resources are built up via the store  # with it for each version.  These resources are built up via the store
Line 3216  sub restore_handler { Line 3138  sub restore_handler {
     my @keys=split(/:/,$vkeys);      my @keys=split(/:/,$vkeys);
     my $key;      my $key;
     $qresult.="$scope:keys=$vkeys&";      $qresult.="$scope:keys=$vkeys&";
     if (exists($hashref->{"$scope:compressed:$rid"})) {      foreach $key (@keys) {
  foreach my $pair (split(/\&/,$hashref->{"$scope:compressed:$rid"})) {   $qresult.="$scope:$key=".$hashref->{"$scope:$rid:$key"}."&";
     my ($key,$value)=split(/=/,$pair);      }                                  
     $qresult.="$scope:".$pair."&";  
  }  
     } else {  
  foreach $key (@keys) {  
     $qresult.="$scope:$key=".$hashref->{"$scope:$rid:$key"}."&";  
  }  
     }  
  }   }
  if (&untie_user_hash($hashref)) {   if (&untie_user_hash($hashref)) {
     $qresult=~s/\&$//;      $qresult=~s/\&$//;
Line 5231  sub sub_sql_reply { Line 5146  sub sub_sql_reply {
                                       Type    => SOCK_STREAM,                                        Type    => SOCK_STREAM,
                                       Timeout => 10)                                        Timeout => 10)
        or return "con_lost";         or return "con_lost";
     print $sclient "$cmd\n";      print $sclient "$cmd:$currentdomainid\n";
     my $answer=<$sclient>;      my $answer=<$sclient>;
     chomp($answer);      chomp($answer);
     if (!$answer) { $answer="con_lost"; }      if (!$answer) { $answer="con_lost"; }

Removed from v.1.318.2.6  
changed lines
  Added in v.1.319


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>