/[cwmp]/google/branches/store-pluggable/lib/CWMP/Store.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /google/branches/store-pluggable/lib/CWMP/Store.pm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 85 by dpavlin, Fri Jun 22 18:36:09 2007 UTC revision 95 by dpavlin, Sat Jun 23 09:23:08 2007 UTC
# Line 48  sub new { Line 48  sub new {
48                  )                  )
49          );          );
50    
51            foreach my $init ( qw/ state session / ) {
52                    $self->db->put( $init => {} ) unless $self->db->get( $init );
53            }
54    
55          return $self;          return $self;
56  }  }
57    
# Line 65  sub update_state { Line 69  sub update_state {
69          confess "need ID" unless $ID;          confess "need ID" unless $ID;
70          confess "need state" unless $state;          confess "need state" unless $state;
71    
72          if ( my $o = $self->db->get( $ID ) ) {          if ( my $uid = $self->ID_to_uid( $ID, $state ) ) {
73                  warn "## update state of $ID\n" if $self->debug;                  if ( my $o = $self->db->get('state')->get( $uid ) ) {
74                  $o->import( $state );                          warn "## update state of $uid [$ID]\n" if $self->debug;
75                            $o->import( $state );
76                    } else {
77                            warn "## create new state for $uid [$ID]\n" if $self->debug;
78                            $self->db->get('state')->put( $uid => $state );
79                    }
80          } else {          } else {
81                  warn "## create new state for $ID\n" if $self->debug;                  warn "## no uid for $ID, first seen?\n" if $self->debug;
                 $self->db->put( $ID => $state );  
82          }          }
           
83  }  }
84    
85  =head2 state  =head2 state
# Line 87  sub state { Line 94  sub state {
94          my $self = shift;          my $self = shift;
95          my ( $ID ) = @_;          my ( $ID ) = @_;
96          confess "need ID" unless $ID;          confess "need ID" unless $ID;
97          return $self->db->get( $ID )->export;          if ( my $uid = $self->ID_to_uid( $ID ) ) {
98                    if ( my $state = $self->db->get('state')->get( $uid ) ) {
99                            return $state->export;
100                    } else {
101                            return;
102                    }
103            } else {
104                    warn "## no uid for $ID so no state!\n" if $self->debug;
105                    return;
106            }
107    }
108    
109    =head2 known_CPE
110    
111      my @cpe = $store->known_CPE;
112    
113    =cut
114    
115    sub known_CPE {
116            my $self = shift;
117            my @cpes = keys %{ $self->db->{state} };
118            warn "all CPE: ", dump( @cpes ), "\n" if $self->debug;
119            return @cpes;
120    }
121    
122    =head2 ID_to_uid
123    
124      my $CPE_uid = $store->ID_to_uid( $ID, $state );
125    
126    It uses C<< DeviceID.SerialNumber >> from C<Inform> message as unique ID
127    for each CPE.
128    
129    =cut
130    
131    sub ID_to_uid {
132            my $self = shift;
133            my ( $ID, $state ) = @_;
134    
135            confess "need ID" unless $ID;
136    
137            warn "ID_to_uid",dump( $ID, $state ) if $self->debug;
138    
139            $self->db->{session}->{ $ID }->{last_seen} = time();
140    
141            my $uid;
142    
143            if ( $uid = $self->db->{session}->{ $ID }->{ID_to_uid} ) {
144                    return $uid;
145            } elsif ( $uid = $state->{DeviceID}->{SerialNumber} ) {
146                    warn "## created new session for $uid session $ID\n" if $self->debug;
147                    $self->db->{session}->{ $ID } = {
148                            last_seen => time(),
149                            ID_to_uid => $uid,
150                    };
151                    return $uid;
152            } else {
153                    warn "## can't find uid for ID $ID, first seen?\n";
154                    return;
155            }
156    
157            # TODO: expire sessions longer than 30m
158    
159            return;
160  }  }
161    
162  1;  1;

Legend:
Removed from v.85  
changed lines
  Added in v.95

  ViewVC Help
Powered by ViewVC 1.1.26