modules/ims_qos: added patch for flow-description bug when request originates from...
[sip-router] / modules / app_perl / lib / perl / Kamailio / VDB.pm
1 #
2 # $Id: VDB.pm 757 2007-01-05 10:56:28Z bastian $
3 #
4 # Perl module for Kamailio
5 #
6 # Copyright (C) 2006 Collax GmbH
7 #                    (Bastian Friedrich <bastian.friedrich@collax.com>)
8 #
9 # This file is part of Kamailio, a free SIP server.
10 #
11 # Kamailio is free software; you can redistribute it and/or modify
12 # it under the terms of the GNU General Public License as published by
13 # the Free Software Foundation; either version 2 of the License, or
14 # (at your option) any later version
15 #
16 # Kamailio is distributed in the hope that it will be useful,
17 # but WITHOUT ANY WARRANTY; without even the implied warranty of
18 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19 # GNU General Public License for more details.
20 #
21 # You should have received a copy of the GNU General Public License
22 # along with this program; if not, write to the Free Software
23 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
24 #
25
26 =head1 Kamailio::VDB
27
28 This package is an (abstract) base class for all virtual databases. Derived
29 packages can be configured to be used by Kamailio as a database.
30
31 The base class itself should NOT be used in this context, as it does not
32 provide any functionality.
33
34 =cut
35
36 package Kamailio::VDB;
37
38 use Kamailio;
39 use Kamailio::Constants;
40
41 use Kamailio::VDB::Column;
42 use Kamailio::VDB::Pair;
43 use Kamailio::VDB::ReqCond;
44 use Kamailio::VDB::Result;
45 use Kamailio::VDB::Value;
46 use Kamailio::VDB::VTab;
47
48
49 our @ISA = qw ( Kamailio::Utils::Debug );
50
51 sub new {
52         my $class = shift;
53
54         my $self = {
55                 tablename => undef,
56                 vtabs => {}
57         };
58
59         bless $self, $class;
60
61         return $self;
62 }
63
64 sub use_table {
65         my $self = shift;
66         my $v = shift;
67         
68         $self->{tablename} = $v;
69
70         if ($v eq "version") {
71                 # "version" table is handled individually. Don't initialize VTabs.
72                 return 0;
73         }
74
75         if ($self->{vtabs}->{$v}) {
76                 return 0;
77         }
78
79         if ($v =~ m/^((.*)::)?([\w_][\d\w_]*)$/) {
80                 my $pkg;
81                 if (!$2) {
82                         $pkg = "main";
83                 } else {
84                         $pkg = $2;
85                 }
86
87                 Kamailio::log(L_DBG, "perlvdb:VDB: Setting VTab: v is $v (pkg is $pkg, func/method is $3)\n");
88
89                 if ($pkg->can($3)) {
90                         $self->{vtabs}->{$v} = new Kamailio::VDB::VTab( func => $pkg . "::" . $3);
91                 } elsif ($v->can("init")) {
92                         $v->init();
93                         $self->{vtabs}->{$v} = new Kamailio::VDB::VTab( obj => $v );
94                 } elsif ($v->can("new")) {
95                         my $obj = $v->new();
96                         $self->{vtabs}->{$v} = new Kamailio::VDB::VTab( obj => $obj );
97                 } else {
98                         Kamailio::log(L_ERR, "perlvdb:VDB: Invalid virtual table.\n");
99                         return -1;
100                 }
101         } else {
102                 Kamailio::log(L_ERR, "perlvdb:VDB: Invalid virtual table.\n");
103                 return -1;
104         }
105 }
106
107 sub _insert {
108         my $self = shift;
109         return $self->insert(@_);
110 }
111
112 sub _replace {
113         my $self = shift;
114         return $self->replace(@_);
115 }
116
117 sub _delete {
118         my $self = shift;
119         return $self->delete(@_);
120 }
121
122 sub _update {
123         my $self = shift;
124         return $self->update(@_);
125 }
126
127 sub _query {
128         my $self = shift;
129         return $self->query(@_);
130 }
131
132
133
134 sub insert {
135         Kamailio::log(L_INFO, "perlvdb:Insert not implemented in base class.\n");
136         return -1;
137 }
138
139 sub replace {
140         Kamailio::log(L_INFO, "perlvdb:Replace not implemented in base class.\n");
141         return -1;
142 }
143
144 sub delete {
145         Kamailio::log(L_INFO, "perlvdb:Delete not implemented in base class.\n");
146         return -1;
147 }
148
149 sub update {
150         Kamailio::log(L_INFO, "perlvdb:Update not implemented in base class.\n");
151         return -1;
152 }
153
154 sub query {
155         Kamailio::log(L_INFO, "perlvdb:Query not implemented in base class.\n");
156         return -1;
157 }
158
159 1;