richter 01/12/13 07:13:56
Modified: . Tag: Embperl2c Cmd.xs Embperl.pm EmbperlObject.pm
embperl.h epcmd2.c epdat.h epmain.c test.pl
Embperl/Syntax Tag: Embperl2c EmbperlHTML.pm HTML.pm
test/conf Tag: Embperl2c startup.pl
Log:
app object & session management
Revision Changes Path
No revision
No revision
1.1.2.10 +21 -1 embperl/Cmd.xs
Index: Cmd.xs
===================================================================
RCS file: /home/cvs/embperl/Cmd.xs,v
retrieving revision 1.1.2.9
retrieving revision 1.1.2.10
diff -u -r1.1.2.9 -r1.1.2.10
--- Cmd.xs 2001/10/29 20:07:12 1.1.2.9
+++ Cmd.xs 2001/12/13 15:13:54 1.1.2.10
@@ -10,7 +10,7 @@
# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
# WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
#
-# $Id: Cmd.xs,v 1.1.2.9 2001/10/29 20:07:12 richter Exp $
+# $Id: Cmd.xs,v 1.1.2.10 2001/12/13 15:13:54 richter Exp $
#
###################################################################################
@@ -67,6 +67,26 @@
embperlCmd_Hidden (pCurrReq, DomTree_self (xDomTree), xNode, pCurrReq ->
nCurrRepeatLevel, sArg) ;
+void
+embperl_AddSessionIdToLink (xDomTree, xNode, nAddSess, ...)
+ int xDomTree
+ int xNode
+ int nAddSess
+PREINIT:
+ int i ;
+ STRLEN l ;
+CODE:
+ if (nAddSess == 2)
+ {
+ embperlCmd_AddSessionIdToHidden (pCurrReq, DomTree_self (xDomTree), xNode,
pCurrReq -> nCurrRepeatLevel) ;
+ }
+ else
+ {
+ for (i = 3; i < items; i++)
+ {
+ embperlCmd_AddSessionIdToLink (pCurrReq, DomTree_self (xDomTree),
xNode, pCurrReq -> nCurrRepeatLevel, (char *)SvPV(ST(i), l)) ;
+ }
+ }
void
embperl_SubStart (pDomTreeSV, xDomTree, pSaveAV)
1.118.4.68 +2 -1 embperl/Embperl.pm
Index: Embperl.pm
===================================================================
RCS file: /home/cvs/embperl/Embperl.pm,v
retrieving revision 1.118.4.67
retrieving revision 1.118.4.68
diff -u -r1.118.4.67 -r1.118.4.68
--- Embperl.pm 2001/12/11 09:03:50 1.118.4.67
+++ Embperl.pm 2001/12/13 15:13:54 1.118.4.68
@@ -10,7 +10,7 @@
# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
# WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
#
-# $Id: Embperl.pm,v 1.118.4.67 2001/12/11 09:03:50 richter Exp $
+# $Id: Embperl.pm,v 1.118.4.68 2001/12/13 15:13:54 richter Exp $
#
###################################################################################
@@ -715,6 +715,7 @@
$$req{'cookie_domain'} = $ENV{EMBPERL_COOKIE_DOMAIN} if (exists
($ENV{EMBPERL_COOKIE_DOMAIN})) ;
$$req{'cookie_path'} = $ENV{EMBPERL_COOKIE_PATH} if (exists
($ENV{EMBPERL_COOKIE_PATH})) ;
$$req{'cookie_expires'} = $ENV{EMBPERL_COOKIE_EXPIRES} if (exists
($ENV{EMBPERL_COOKIE_EXPIRES})) ;
+ $$req{'session_mode'} = $ENV{EMBPERL_SESSION_MODE} if (exists
($ENV{EMBPERL_COOKIE_EXPIRES})) ;
##ep2##
$$req{'ep1compat'} = $ENV{EMBPERL_EP1COMPAT}?1:0 ;
1.36.4.8 +19 -1 embperl/EmbperlObject.pm
Index: EmbperlObject.pm
===================================================================
RCS file: /home/cvs/embperl/EmbperlObject.pm,v
retrieving revision 1.36.4.7
retrieving revision 1.36.4.8
diff -u -r1.36.4.7 -r1.36.4.8
--- EmbperlObject.pm 2001/09/01 21:50:00 1.36.4.7
+++ EmbperlObject.pm 2001/12/13 15:13:54 1.36.4.8
@@ -10,7 +10,7 @@
# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
# WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
#
-# $Id: EmbperlObject.pm,v 1.36.4.7 2001/09/01 21:50:00 richter Exp $
+# $Id: EmbperlObject.pm,v 1.36.4.8 2001/12/13 15:13:54 richter Exp $
#
###################################################################################
@@ -110,6 +110,7 @@
HTML::Embperl::ScanEnvironment ($req, $req_rec) ;
$req -> {object_base} = $ENV{EMBPERL_OBJECT_BASE} || '_base.html' ;
+ $req -> {object_app} = $ENV{EMBPERL_OBJECT_APP} if (exists
($ENV{EMBPERL_OBJECT_APP})) ;
$req -> {object_addpath} = $ENV{EMBPERL_OBJECT_ADDPATH} if (exists
($ENV{EMBPERL_OBJECT_ADDPATH})) ;
$req -> {object_stopdir} = $ENV{EMBPERL_OBJECT_STOPDIR} if (exists
($ENV{EMBPERL_OBJECT_STOPDIR})) ;
$req -> {object_fallback} = $ENV{EMBPERL_OBJECT_FALLBACK} if (exists
($ENV{EMBPERL_OBJECT_FALLBACK})) ;
@@ -311,6 +312,23 @@
$req -> {'bless'} = $package ;
$req -> {'path'} = $searchpath ;
$req -> {'reqfilename'} = $filename if ($filename ne $fn) ;
+
+ if ($req -> {object_app})
+ {
+ my $app = HTML::Embperl::Execute ({'object' => $req ->
{object_app},
+ 'syntax' => 'Perl',
+ 'path' => $searchpath,
+ 'param' => [$req],
+ 'debug' => $req -> {debug},
+ }) ;
+
+ return 500 if (!$app) ;
+
+ my $status = $app -> new ($req) ;
+ return $status if ($status) ;
+ }
+
+
return HTML::Embperl::Execute ($req) ;
}
1.19.4.16 +15 -1 embperl/embperl.h
Index: embperl.h
===================================================================
RCS file: /home/cvs/embperl/embperl.h,v
retrieving revision 1.19.4.15
retrieving revision 1.19.4.16
diff -u -r1.19.4.15 -r1.19.4.16
--- embperl.h 2001/11/16 08:08:07 1.19.4.15
+++ embperl.h 2001/12/13 15:13:54 1.19.4.16
@@ -10,7 +10,7 @@
# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
# WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
#
-# $Id: embperl.h,v 1.19.4.15 2001/11/16 08:08:07 richter Exp $
+# $Id: embperl.h,v 1.19.4.16 2001/12/13 15:13:54 richter Exp $
#
###################################################################################*/
@@ -211,6 +211,20 @@
escXML = 8
} ;
+
+enum tSessionMode
+ {
+ smodeNone = 0,
+ smodeUDatCookie = 1,
+ smodeUDatParam = 2,
+ smodeUDatUrl = 4,
+
+ smodeSDatCookie = 0x11,
+ smodeSDatParam = 0x12,
+ smodeSDatUrl = 0x14,
+ } ;
+
+#define smodeStd smodeUDatCookie
#if !defined (pid_t) && defined (WIN32)
#define pid_t int
1.4.2.15 +96 -1 embperl/Attic/epcmd2.c
Index: epcmd2.c
===================================================================
RCS file: /home/cvs/embperl/Attic/epcmd2.c,v
retrieving revision 1.4.2.14
retrieving revision 1.4.2.15
diff -u -r1.4.2.14 -r1.4.2.15
--- epcmd2.c 2001/10/29 20:07:12 1.4.2.14
+++ epcmd2.c 2001/12/13 15:13:54 1.4.2.15
@@ -9,7 +9,7 @@
# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
# WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
#
-# $Id: epcmd2.c,v 1.4.2.14 2001/10/29 20:07:12 richter Exp $
+# $Id: epcmd2.c,v 1.4.2.15 2001/12/13 15:13:54 richter Exp $
#
###################################################################################*/
@@ -409,3 +409,98 @@
return sText ;
}
+
+
+
+/* ---------------------------------------------------------------------------- */
+/* */
+/* AddSessionIdToLink */
+/* */
+/* ---------------------------------------------------------------------------- */
+
+
+int embperlCmd_AddSessionIdToLink (/*i/o*/ register req * r,
+ /*in*/ tDomTree * pDomTree,
+ /*in*/ tNode xNode,
+ /*in*/ tRepeatLevel nRepeatLevel,
+ /*in*/ char * sAttrName)
+
+ {
+ tNodeData * pNode ;
+ tAttrData * pAttr ;
+ int nAttrLen ;
+ char * pAttrString = NULL ;
+ char * pAttrValue ;
+ int l ;
+ int sl ;
+
+ if (!r -> sSessionID)
+ return ok ;
+
+ pNode = Node_self(pDomTree,xNode) ;
+ nAttrLen = strlen (sAttrName) ;
+ pAttr = Element_selfGetAttribut (pDomTree, pNode, sAttrName, nAttrLen) ;
+
+ pAttrValue = Attr_selfValue (pDomTree, pAttr, nRepeatLevel, &pAttrString) ;
+
+ sl = strlen (r -> sSessionID) ;
+ if (!pAttrString)
+ {
+ l = strlen (pAttrValue) ;
+ StringNew (&pAttrString, l + 10 + sl) ;
+ StringAdd (&pAttrString, pAttrValue, l) ;
+
+ }
+
+ if (strchr(pAttrValue, '?'))
+ {
+ StringAdd (&pAttrString, "&", 1) ;
+ }
+ else
+ {
+ StringAdd (&pAttrString, "?", 1) ;
+ }
+ StringAdd (&pAttrString, r -> sSessionID, sl) ;
+
+ Element_selfSetAttribut (pDomTree, pNode, nRepeatLevel, sAttrName, nAttrLen,
pAttrString, ArrayGetSize (pAttrString)) ;
+
+ return ok ;
+ }
+
+
+/* ---------------------------------------------------------------------------- */
+/* */
+/* AddSessionIdToHidden */
+/* */
+/* ---------------------------------------------------------------------------- */
+
+
+int embperlCmd_AddSessionIdToHidden(/*i/o*/ register req * r,
+ /*in*/ tDomTree * pDomTree,
+ /*in*/ tNode xNode,
+ /*in*/ tRepeatLevel nRepeatLevel)
+
+ {
+ char * sid = r -> sSessionID ;
+ tNodeData * pNode ;
+
+ pNode = Node_self(pDomTree,xNode) ;
+ if (sid)
+ {
+ char * val = strchr (sid, '=') ;
+ if (val)
+ {
+ char * s ;
+ STRLEN l ;
+ tNode xInputNode = Node_appendChild (pDomTree, pNode -> xNdx,
nRepeatLevel, ntypTag, 0, "input", 5, 0, 0, NULL) ;
+ tNode xAttr = Node_appendChild (pDomTree, xInputNode,
nRepeatLevel, ntypAttr, 0, "type", 4, 0, 0, NULL) ;
+ Node_appendChild (pDomTree, xAttr, nRepeatLevel,
ntypAttrValue, 0, "hidden", 6, 0, 0, NULL) ;
+
+ xAttr = Node_appendChild (pDomTree, xInputNode,
nRepeatLevel, ntypAttr, 0, "name", 4, 0, 0, NULL) ;
+ Node_appendChild (pDomTree, xAttr, nRepeatLevel,
ntypAttrValue, 0, sid, val - sid, 0, 0, NULL) ;
+ xAttr = Node_appendChild (pDomTree, xInputNode,
nRepeatLevel, ntypAttr, 0, "value", 5, 0, 0, NULL) ;
+ Node_appendChild (pDomTree, xAttr, nRepeatLevel,
ntypAttrValue, 0, val+1, strlen(val+1), 0, 0, NULL) ;
+ }
+ }
+
+ }
1.20.4.37 +2 -1 embperl/epdat.h
Index: epdat.h
===================================================================
RCS file: /home/cvs/embperl/epdat.h,v
retrieving revision 1.20.4.36
retrieving revision 1.20.4.37
diff -u -r1.20.4.36 -r1.20.4.37
--- epdat.h 2001/11/29 07:32:39 1.20.4.36
+++ epdat.h 2001/12/13 15:13:54 1.20.4.37
@@ -10,7 +10,7 @@
# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
# WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
#
-# $Id: epdat.h,v 1.20.4.36 2001/11/29 07:32:39 richter Exp $
+# $Id: epdat.h,v 1.20.4.37 2001/12/13 15:13:54 richter Exp $
#
###################################################################################*/
@@ -190,6 +190,7 @@
#endif
char * sPath ; /* file search path */
char * sReqFilename ; /* filename of original request */
+ int nSessionMode ; /* session mode */
} tConf ;
/*-----------------------------------------------------------------*/
1.75.4.75 +4 -3 embperl/epmain.c
Index: epmain.c
===================================================================
RCS file: /home/cvs/embperl/epmain.c,v
retrieving revision 1.75.4.74
retrieving revision 1.75.4.75
diff -u -r1.75.4.74 -r1.75.4.75
--- epmain.c 2001/11/23 12:28:20 1.75.4.74
+++ epmain.c 2001/12/13 15:13:54 1.75.4.75
@@ -10,7 +10,7 @@
# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
# WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
#
-# $Id: epmain.c,v 1.75.4.74 2001/11/23 12:28:20 richter Exp $
+# $Id: epmain.c,v 1.75.4.75 2001/12/13 15:13:54 richter Exp $
#
###################################################################################*/
@@ -1843,6 +1843,7 @@
pConf -> sPath = sstrdup (GetHashValueStr (pReqInfo, "path", pCurrReq
-> pConf?pCurrReq -> pConf -> sPath:NULL)) ; /* file search path */
pConf -> sReqFilename = sstrdup (GetHashValueStr (pReqInfo, "reqfilename",
pCurrReq -> pConf?pCurrReq -> pConf -> sReqFilename:NULL)) ; /* filename of
original request */
pConf -> pReqParameter = pReqInfo ;
+ pConf -> nSessionMode = GetHashValueInt (pReqInfo, "session_mode",
pCurrReq -> pConf?pCurrReq -> pConf -> nSessionMode:smodeStd) ;
#ifdef EP2
pConf -> sRecipe = sstrdup (GetHashValueStr (pReqInfo, "recipe",
"Embperl")) ; /* Recipe name */
@@ -2816,7 +2817,7 @@
}
- if ((r -> bOptions & optAddStateSessionToLinks) && !r -> bSubReq)
+ if ((r -> pConf -> nSessionMode & smodeSDatParam) && !r -> bSubReq)
{
SV * pCookie = CreateSessionCookie (r, r -> pStateHash, 's', 0) ;
STRLEN l ;
@@ -2827,7 +2828,7 @@
}
}
- if ((r -> bOptions & optAddUserSessionToLinks) && !r -> bSubReq)
+ if ((r -> pConf -> nSessionMode & smodeUDatParam) && !r -> bSubReq)
{
SV * pCookie = CreateSessionCookie (r, r -> pUserHash, 'u', 0) ;
if (pCookie)
1.70.4.104 +9 -9 embperl/test.pl
Index: test.pl
===================================================================
RCS file: /home/cvs/embperl/test.pl,v
retrieving revision 1.70.4.103
retrieving revision 1.70.4.104
diff -u -r1.70.4.103 -r1.70.4.104
--- test.pl 2001/12/11 09:03:50 1.70.4.103
+++ test.pl 2001/12/13 15:13:55 1.70.4.104
@@ -11,7 +11,7 @@
# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
# WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
#
-# $Id: test.pl,v 1.70.4.103 2001/12/11 09:03:50 richter Exp $
+# $Id: test.pl,v 1.70.4.104 2001/12/13 15:13:55 richter Exp $
#
###################################################################################
@@ -531,53 +531,53 @@
'query_info' => 'a=1',
'cookie' => 'expectnew,url',
'aliasdir' => 1,
- 'version' => 1,
+ #'version' => 1,
},
'uidurl/getnourlsess.htm' => {
'modperl' => 1,
'query_info' => 'nocookie=2',
'cookie' => 'nocookie,nosave,url',
'aliasdir' => 1,
- 'version' => 1,
+ #'version' => 1,
},
'uidurl/geturlsess.htm' => {
'modperl' => 1,
'cookie' => 'expectsame,url',
'query_info' => 'foo=1',
'aliasdir' => 1,
- 'version' => 1,
+ #'version' => 1,
},
'suidurl/seturlsess.htm' => {
'modperl' => 1,
'query_info' => 'a=1',
'cookie' => 'expectnew,url,nocookie',
'aliasdir' => 1,
- 'version' => 1,
+ #'version' => 1,
},
'suidurl/getnourlsess.htm' => {
'modperl' => 1,
'query_info' => 'nocookie=2',
'cookie' => 'nocookie,nosave,url',
'aliasdir' => 1,
- 'version' => 1,
+ #'version' => 1,
},
'suidurl/geturlsess.htm' => {
'modperl' => 1,
'cookie' => 'url',
'query_info' => 'foo=1',
'aliasdir' => 1,
- 'version' => 1,
+ #'version' => 1,
},
'sidurl/setsdaturlsess.htm' => {
'modperl' => 1,
'query_info' => 'sdat=99',
'cookie' => 'expectnew,url,nocookie',
- 'version' => 1,
+ #'version' => 1,
},
'sidurl/getsdaturlsess.htm' => {
'modperl' => 1,
'cookie' => 'expectnew,url',
- 'version' => 1,
+ #'version' => 1,
},
'EmbperlObject/epopage1.htm' => {
'offline' => 0,
No revision
No revision
1.1.2.9 +5 -5 embperl/Embperl/Syntax/Attic/EmbperlHTML.pm
Index: EmbperlHTML.pm
===================================================================
RCS file: /home/cvs/embperl/Embperl/Syntax/Attic/EmbperlHTML.pm,v
retrieving revision 1.1.2.8
retrieving revision 1.1.2.9
diff -u -r1.1.2.8 -r1.1.2.9
--- EmbperlHTML.pm 2001/10/25 08:26:04 1.1.2.8
+++ EmbperlHTML.pm 2001/12/13 15:13:55 1.1.2.9
@@ -10,7 +10,7 @@
# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
# WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
#
-# $Id: EmbperlHTML.pm,v 1.1.2.8 2001/10/25 08:26:04 richter Exp $
+# $Id: EmbperlHTML.pm,v 1.1.2.9 2001/12/13 15:13:55 richter Exp $
#
###################################################################################
@@ -133,13 +133,13 @@
}) ;
$self -> AddTagWithStart ('/option', 'option') ;
- $self -> AddTag ('a', undef, ['href'], undef, undef) ;
- $self -> AddTag ('frame', undef, ['src'], undef, undef) ;
- $self -> AddTag ('iframe', undef, ['src'], undef, undef) ;
+ $self -> AddTag ('a', undef, ['href'], undef, undef, undef, 1) ;
+ $self -> AddTag ('frame', undef, ['src'], undef, undef, undef, 1) ;
+ $self -> AddTag ('iframe', undef, ['src'], undef, undef, undef, 1) ;
$self -> AddTag ('embed', undef, ['src'], undef, undef) ;
$self -> AddTag ('layer', undef, ['src'], undef, undef) ;
$self -> AddTag ('img', undef, ['src'], undef, undef) ;
- $self -> AddTag ('form', undef, ['action'], undef, undef) ;
+ $self -> AddTag ('form', undef, ['action'], undef, undef, undef, 2) ;
}
1.1.2.15 +15 -3 embperl/Embperl/Syntax/Attic/HTML.pm
Index: HTML.pm
===================================================================
RCS file: /home/cvs/embperl/Embperl/Syntax/Attic/HTML.pm,v
retrieving revision 1.1.2.14
retrieving revision 1.1.2.15
diff -u -r1.1.2.14 -r1.1.2.15
--- HTML.pm 2001/11/20 15:15:42 1.1.2.14
+++ HTML.pm 2001/12/13 15:13:55 1.1.2.15
@@ -10,7 +10,7 @@
# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
# WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
#
-# $Id: HTML.pm,v 1.1.2.14 2001/11/20 15:15:42 richter Exp $
+# $Id: HTML.pm,v 1.1.2.15 2001/12/13 15:13:55 richter Exp $
#
###################################################################################
@@ -67,7 +67,7 @@
sub AddElement
{
- my ($self, $tagtype, $tagname, $attrs, $attrsurl, $attrsnoval, $procinfo,
$taginfo) = @_ ;
+ my ($self, $tagtype, $tagname, $attrs, $attrsurl, $attrsnoval, $procinfo,
$taginfo, $addsess) = @_ ;
my $ttref ;
@@ -102,6 +102,9 @@
$inside {$_} = { 'text' => $_, 'nodename' => $_, 'follow' =>
$assignattr },
$addinside++ ;
}
+ $tag -> {'procinfo'}{$self->{-procinfotype}}{perlcode} .=
+ q[HTML::Embperl::Cmd::AddSessionIdToLink (%$n%, ] . $addsess . q[,'] .
join ("','", @$attrsurl) . "') ;"
+ if ($addsess) ;
}
if ($attrsnoval)
{
@@ -421,7 +424,7 @@
Create a new syntax class. This method should only be called inside a constructor
of a derived class.
-=head2 AddTag ($tagname, $attrs, $attrsurl, $attrsnoval, $procinfo)
+=head2 AddTag ($tagname, $attrs, $attrsurl, $attrsnoval, $procinfo, $taginfo,
$addsess)
Add a new HTML tag.
@@ -447,6 +450,15 @@
=item $procinfo
Processor info. See I<HTML::Embperl::Syntax> for a definition of procinfo.
+
+=item $taginfo
+
+Addtional tag definitions. See I<HTML::Embperl::Syntax> for more infos.
+
+=item $addsess
+
+If set to 1 session id will be added to attributes passed via $attrsurl.
+If set to 2 a hidden input tag with the session id will be added.
=back
No revision
No revision
1.9.6.6 +1 -1 embperl/test/conf/startup.pl
Index: startup.pl
===================================================================
RCS file: /home/cvs/embperl/test/conf/startup.pl,v
retrieving revision 1.9.6.5
retrieving revision 1.9.6.6
diff -u -r1.9.6.5 -r1.9.6.6
--- startup.pl 2001/12/11 09:03:52 1.9.6.5
+++ startup.pl 2001/12/13 15:13:56 1.9.6.6
@@ -33,6 +33,6 @@
$cp -> share ('$testshare') ;
-require "$ENV{EMBPERL_SRC}/eg/webutil/EmbperlWebRecipe.pm" ;
+###require "$ENV{EMBPERL_SRC}/eg/webutil/EmbperlWebRecipe.pm" ;
1 ;
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]