Changeset 53:cb3091e7a9ea in iovar


Ignore:
Timestamp:
Nov 21, 2016, 1:37:42 AM (2 years ago)
Author:
Shawn Wilson <shawn@…>
Branch:
default
Phase:
public
Message:

saw_112116_1 - Move win.iovar.web.proc.ShellSession?$Instance to win.iovar.web.lib.Session and

rename ShellSession? to Sessions.

Files:
1 added
31 edited
1 moved

Legend:

Unmodified
Added
Removed
  • CHANGELOG

    r52 r53  
    22Copyright (C) 2011-2015 Lannocc Technologies
    33@%@~LICENSE~@%@
     4
     5saw_112116_1 - Move win.iovar.web.proc.ShellSession$Instance to win.iovar.web.lib.Session and
     6               rename ShellSession to Sessions.
    47
    58saw_112016_4 - Moved win.iovar.web.proc.Job to win.iovar.web.lib package.
  • etc/sample.web.xml

    r51 r53  
    1515
    1616    <listener>
    17         <listener-class>win.iovar.web.proc.ShellSession$Listener</listener-class>
     17        <listener-class>win.iovar.web.proc.Sessions$Listener</listener-class>
    1818    </listener>
    1919
  • proc/shell

    r51 r53  
    1 ../WEB-INF/classes/win/iovar/web/proc/ShellSession.class
     1../WEB-INF/classes/win/iovar/web/proc/Sessions.class
  • src/win/iovar/web/bin/System.java

    r51 r53  
    1212import win.iovar.web.dev.trans.*;
    1313import win.iovar.web.dev.trans.File;
     14import win.iovar.web.lib.*;
    1415import win.iovar.web.proc.*;
    1516
     
    152153        // FIXME: we get a session here to avoid Shell.exit () from trying to
    153154        // create a user session after the response has already been committed.
    154         final ShellSession.Instance shell = ShellSession.get (req);
     155        final Session shell = Sessions.get (req);
    155156       
    156157        try
  • src/win/iovar/web/bin/shell/Export.java

    r51 r53  
    99import win.iovar.web.*;
    1010import win.iovar.web.dev.*;
     11import win.iovar.web.lib.*;
    1112import win.iovar.web.proc.*;
    1213
     
    8283        }
    8384       
    84         final ShellSession.Instance session = ShellSession.get (req);
     85        final Session session = Sessions.get (req);
    8586        if (session==null)
    8687        {
     
    113114       
    114115        // FIXME: is this necessary?
    115         //ShellSession.put (req, context, session);
     116        //Sessions.put (req, context, session);
    116117    }
    117118}
  • src/win/iovar/web/bin/shell/Interactive.java

    r51 r53  
    1010import win.iovar.web.bin.shell.task.*;
    1111import win.iovar.web.dev.*;
     12import win.iovar.web.lib.*;
    1213import win.iovar.web.proc.*;
    1314import win.iovar.web.usr.bin.*;
     
    99100            {
    100101                params.put (Shell.PARAM_CMD, params.remove (null));
    101                 final ShellSession.Instance session = ShellSession.get (req);
     102                final Session session = Sessions.get (req);
    102103                params.put (Shell.EXT_PARAM_SESSION, Arrays.asList (new String[] { session.getPath () }));
    103104                Shell.exec (getServletContext (), req.getRemoteUser (), params, req, resp);
     
    138139        Log.debug ("remote user: "+user);
    139140       
    140         final ShellSession.Instance shell = ShellSession.get (req);
     141        final Session shell = Sessions.get (req);
    141142        Log.info ("shell session: "+shell);
    142143       
    143144       
    144145        /*
    145         ShellSession.Instance session = ShellSession.get (context);
     146        Session session = Sessions.get (context);
    146147        if (session!=null) Log.debug ("found master session: "+session);
    147148        else
    148149        {
    149150            Log.debug ("creating session");
    150             session = ShellSession.newInstance (context);
     151            session = Sessions.newInstance (context);
    151152        }
    152153        Log.info ("session: "+session);
     
    259260        final InputStream in = req.getInputStream (); // for some reason we have to grab this before getSession ()
    260261       
    261         final ShellSession.Instance shell = ShellSession.get (req);
     262        final Session shell = Sessions.get (req);
    262263        Log.debug ("shell session for exec: "+shell);
    263264        Log.debug ("request data contentType: "+req.getContentType ());
  • src/win/iovar/web/bin/shell/Set.java

    r51 r53  
    99import win.iovar.web.*;
    1010import win.iovar.web.dev.*;
     11import win.iovar.web.lib.*;
    1112import win.iovar.web.proc.*;
    1213
     
    7374        }
    7475       
    75         final ShellSession.Instance shell = ShellSession.get (req);
     76        final Session shell = Sessions.get (req);
    7677        if (shell==null)
    7778        {
     
    113114    }
    114115   
    115     void environment (final ShellSession.Instance shell, final HttpServletResponse resp) throws IOException
     116    void environment (final Session shell, final HttpServletResponse resp) throws IOException
    116117    {
    117118        PrintWriter out = resp.getWriter ();
  • src/win/iovar/web/bin/shell/Shell.java

    r51 r53  
    1111//import win.iovar.web.bin.shell.task.legacy.*;
    1212import win.iovar.web.dev.*;
     13import win.iovar.web.lib.*;
    1314import win.iovar.web.proc.*;
    1415
     
    113114
    114115        //final PrintWriter out = resp.getWriter ();
    115         final ShellSession.Instance session;
     116        final Session session;
    116117
    117118        if (params.containsKey (PARAM_SESSION))
     
    125126                /*
    126127                Log.info ("create session");
    127                 session = ShellSession.newInstance (context);
     128                session = Sessions.newInstance (context);
    128129                */
    129130            }
    130131            else // load session(s) (merge multiple)
    131132            {
    132                 ShellSession.Instance s = null;
     133                Session s = null;
    133134
    134135                for (final String path : vals)
     
    138139                    final InputStream in = Transport.handler (path, context).get (); try
    139140                    {
    140                         if (s==null) s = (ShellSession.Instance) Utils.xstream.fromXML (in);
    141                         else s = s.merge ((ShellSession.Instance) Utils.xstream.fromXML (in));
     141                        if (s==null) s = (Session) Utils.xstream.fromXML (in);
     142                        else s = s.merge ((Session) Utils.xstream.fromXML (in));
    142143                       
    143144                        /*
    144145                        ObjectInputStream sin = new ObjectInputStream (in); try
    145146                        {
    146                             if (s==null) s = (ShellSession.Instance) sin.readObject ();
    147                             else s = s.merge ((ShellSession.Instance) sin.readObject ());
     147                            if (s==null) s = (Session) sin.readObject ();
     148                            else s = s.merge ((Session) sin.readObject ());
    148149                        }
    149150                        catch (final ClassNotFoundException e)
     
    177178        else if (params.containsKey (EXT_PARAM_SESSION))
    178179        {
    179             session = ShellSession.load (context);
     180            session = Sessions.load (context);
    180181        }
    181182        */
     
    251252                        // first fork and save child session
    252253                        // FIXME: figure out a way these don't need to be saved, or could be easily cleaned up
    253                         final ShellSession.Instance forked = session.fork (context);
     254                        final Session forked = session.fork (context);
    254255                        try
    255256                        {
     
    331332                    // first fork and save child session
    332333                    // FIXME: figure out a way these don't need to be saved, or could be easily cleaned up
    333                     final ShellSession.Instance forked = session.fork ();
     334                    final Session forked = session.fork ();
    334335                    String sessions = config.getInitParameter (INIT_PARAM_SESSIONS);
    335336                    // FIXME: hardcoded session path
     
    341342                   
    342343                    // prepare a localized session for the script
    343                     final ShellSession.Instance local = Call.valueOf (script, params).prepare (params, new TaskData (session, context, user));
     344                    final Session local = Call.valueOf (script, params).prepare (params, new TaskData (session, context, user));
    344345                    local.save (context);
    345346/*
     
    413414                        // first fork and save child session
    414415                        // FIXME: figure out a way these don't need to be saved, or could be easily cleaned up
    415                         final ShellSession.Instance forked = session.fork ();
     416                        final Session forked = session.fork ();
    416417                        String sessions = config.getInitParameter (INIT_PARAM_SESSIONS);
    417418                        // FIXME: hardcoded session path
     
    464465    public static void exit (final HttpServletRequest req, final ServletContext context, final int code) throws IOException
    465466    {
    466         ShellSession.Instance shell = ShellSession.get (req);
     467        Session shell = Sessions.get (req);
    467468        if (shell==null)
    468469        {
  • src/win/iovar/web/bin/shell/Which.java

    r51 r53  
    99import win.iovar.web.*;
    1010import win.iovar.web.dev.*;
     11import win.iovar.web.lib.*;
    1112import win.iovar.web.proc.*;
    1213
     
    7071        }
    7172       
    72         final ShellSession.Instance session = ShellSession.get (req);
     73        final Session session = Sessions.get (req);
    7374        if (session==null)
    7475        {
     
    101102    }
    102103   
    103     public static Transport reference (final ShellSession.Instance shell, final ServletContext context, final String user, final String cmd, Map<String,List<String>> params) throws IOException
     104    public static Transport reference (final Session shell, final ServletContext context, final String user, final String cmd, Map<String,List<String>> params) throws IOException
    104105    {
    105106        // FIXME: SECURITY
  • src/win/iovar/web/bin/shell/task/Call.java

    r51 r53  
    1111import win.iovar.web.dev.*;
    1212import win.iovar.web.dev.trans.*;
    13 import win.iovar.web.proc.*;
     13import win.iovar.web.lib.*;
    1414
    1515// java imports:
     
    8686     * FIXME: this should be improved (allow named parameters, too?)
    8787     */
    88     void normalize (ShellSession.Instance shell, final ServletContext context)
     88    void normalize (Session shell, final ServletContext context)
    8989    {
    9090        StringBuffer cmd = null;
     
    225225        }
    226226       
    227         ShellSession.Instance local = prepare (params, task); try
     227        Session local = prepare (params, task); try
    228228        {
    229229            // 8. invoke
     
    256256    }
    257257   
    258     public ShellSession.Instance prepare (final Map<String,List<String>> params, final TaskData task) throws IOException, ServletException
     258    public Session prepare (final Map<String,List<String>> params, final TaskData task) throws IOException, ServletException
    259259    {
    260260        // 3. clear previous exit value
     
    263263       
    264264        // 4. fork the session
    265         final ShellSession.Instance local = task.shell.fork (task.context);
     265        final Session local = task.shell.fork (task.context);
    266266        Log.info ("forked local session: "+local);
    267267
     
    302302
    303303        // 7. set user
    304         local.set (ShellSession.Instance.ENV_USER, task.user);
     304        local.set (Session.ENV_USER, task.user);
    305305
    306306        return local;
    307307    }
    308308   
    309     static Return invoke (final ShellSession.Instance shell, final Transport t, final ServletContext context, final InputStream in, final String contentType, final Map<String,List<String>> params) throws IOException
     309    static Return invoke (final Session shell, final Transport t, final ServletContext context, final InputStream in, final String contentType, final Map<String,List<String>> params) throws IOException
    310310    {
    311311        // re-set command name from more-specific transport path
  • src/win/iovar/web/bin/shell/task/CommandText.java

    r51 r53  
    77
    88// local imports:
    9 import win.iovar.web.proc.*;
     9import win.iovar.web.lib.*;
    1010
    1111// java imports:
     
    9494    }
    9595   
    96     public String value (final ShellSession.Instance shell, final ServletContext context)
     96    public String value (final Session shell, final ServletContext context)
    9797    {
    9898        final StringBuffer s = new StringBuffer ();
  • src/win/iovar/web/bin/shell/task/DoWhile.java

    r51 r53  
    99import win.iovar.web.*;
    1010import win.iovar.web.dev.*;
     11import win.iovar.web.lib.*;
    1112import win.iovar.web.proc.*;
    1213
     
    8990        Return r = null;
    9091       
    91         ShellSession.Instance shell = task.shell;
     92        Session shell = task.shell;
    9293       
    9394        // FIXME: does it really make sense to allow input piping here?
     
    111112            // FIXME: re-evaluate
    112113            Log.debug ("reloading session: "+shell);
    113             shell = ShellSession.load (task.context, shell.getPath ());
     114            shell = Sessions.load (task.context, shell.getPath ());
    114115           
    115116            in = null;
     
    128129            // FIXME: re-evaluate
    129130            Log.debug ("reloading session: "+shell);
    130             shell = ShellSession.load (task.context, shell.getPath ());
     131            shell = Sessions.load (task.context, shell.getPath ());
    131132           
    132133            //out2.write ("post-condition: "+shell.toString ()+'\n');
  • src/win/iovar/web/bin/shell/task/Escaped.java

    r51 r53  
    77
    88// local imports:
    9 import win.iovar.web.proc.*;
     9import win.iovar.web.lib.*;
    1010
    1111// java imports:
     
    5656    }
    5757   
    58     public String value (final ShellSession.Instance shell, final ServletContext context)
     58    public String value (final Session shell, final ServletContext context)
    5959    {
    6060        return String.valueOf(c);
  • src/win/iovar/web/bin/shell/task/Group.java

    r51 r53  
    99import win.iovar.web.*;
    1010import win.iovar.web.dev.*;
     11import win.iovar.web.lib.*;
    1112import win.iovar.web.proc.*;
    1213
     
    135136        Task task = null;
    136137       
    137         ShellSession.Instance shell = tdata.shell;
     138        Session shell = tdata.shell;
    138139        InputStream in = tdata.in;
    139140       
     
    160161                // FIXME: re-evaluate
    161162                Log.debug ("reloading session: "+shell);
    162                 shell = ShellSession.load (tdata.context, shell.getPath ());
     163                shell = Sessions.load (tdata.context, shell.getPath ());
    163164                // FIXME: hardcoded path to shell session storage
    164                 //shell = (ShellSession.Instance) Utils.xstream.fromXML (Transport.handler ("local:/proc/shell/"+shell.getId (), tdata.context).get ());
     165                //shell = (Session) Utils.xstream.fromXML (Transport.handler ("local:/proc/shell/"+shell.getId (), tdata.context).get ());
    165166                /*
    166167                final ObjectInputStream sin = new ObjectInputStream (Transport.handler ("local:/proc/shell/"+shell.getId (), context).get ()); try
    167168                {
    168                     shell = (ShellSession.Instance) sin.readObject ();
     169                    shell = (Session) sin.readObject ();
    169170                }
    170171                catch (final ClassNotFoundException e)
  • src/win/iovar/web/bin/shell/task/HardQuoted.java

    r51 r53  
    77
    88// local imports:
    9 import win.iovar.web.proc.*;
     9import win.iovar.web.lib.*;
    1010
    1111// java imports:
     
    5656    }
    5757   
    58     public String value (final ShellSession.Instance shell, final ServletContext context)
     58    public String value (final Session shell, final ServletContext context)
    5959    {
    6060        return str;
  • src/win/iovar/web/bin/shell/task/HotQuoted.java

    r51 r53  
    88// local imports:
    99import win.iovar.web.dev.*;
    10 import win.iovar.web.proc.*;
     10import win.iovar.web.lib.*;
    1111
    1212// java imports:
     
    8989    }
    9090   
    91     public String value (final ShellSession.Instance shell, final ServletContext context)
     91    public String value (final Session shell, final ServletContext context)
    9292    {
    9393        try
  • src/win/iovar/web/bin/shell/task/Input.java

    r51 r53  
    88// local imports:
    99import win.iovar.web.dev.*;
    10 import win.iovar.web.proc.*;
     10import win.iovar.web.lib.*;
    1111
    1212// java imports:
     
    3838    }
    3939   
    40     public InputStream read (final ShellSession.Instance shell, final ServletContext context) throws IOException
     40    public InputStream read (final Session shell, final ServletContext context) throws IOException
    4141    {
    4242        return Transport.handler (resource.value (shell, context), context).get ();
  • src/win/iovar/web/bin/shell/task/Literal.java

    r51 r53  
    77
    88// local imports:
    9 import win.iovar.web.proc.*;
     9import win.iovar.web.lib.*;
    1010
    1111// java imports:
     
    5151    }
    5252   
    53     public String value (final ShellSession.Instance shell, final ServletContext context)
     53    public String value (final Session shell, final ServletContext context)
    5454    {
    5555        return String.valueOf (c);
  • src/win/iovar/web/bin/shell/task/Operation.java

    r52 r53  
    150150        Return r = null;
    151151       
    152         ShellSession.Instance shell = task.shell;
     152        Session shell = task.shell;
    153153       
    154154        Call call = null;
     
    193193                // FIXME: re-evaluate
    194194                Log.debug ("reloading session: "+shell);
    195                 shell = ShellSession.load (task.context, shell.getPath ());
     195                shell = Sessions.load (task.context, shell.getPath ());
    196196                // FIXME: hardcoded path to shell session storage
    197                 //shell = (ShellSession.Instance) Utils.xstream.fromXML (Transport.handler ("local:/proc/shell/"+shell.getId (), task.context).get ());
     197                //shell = (Session) Utils.xstream.fromXML (Transport.handler ("local:/proc/shell/"+shell.getId (), task.context).get ());
    198198                /*
    199199                final ObjectInputStream sin = new ObjectInputStream (Transport.handler ("local:/proc/shell/"+shell.getId (), context).get ()); try
    200200                {
    201                     shell = (ShellSession.Instance) sin.readObject ();
     201                    shell = (Session) sin.readObject ();
    202202                }
    203203                catch (final ClassNotFoundException e)
  • src/win/iovar/web/bin/shell/task/Output.java

    r51 r53  
    88// local imports:
    99import win.iovar.web.dev.*;
    10 import win.iovar.web.proc.*;
     10import win.iovar.web.lib.*;
    1111
    1212// java imports:
     
    4646    }
    4747   
    48     public InputStream write (final ShellSession.Instance shell, final ServletContext context, final InputStream data, final String contentType) throws IOException
     48    public InputStream write (final Session shell, final ServletContext context, final InputStream data, final String contentType) throws IOException
    4949    {
    5050        final Transport trans = Transport.handler (resource.value (shell, context), context);
  • src/win/iovar/web/bin/shell/task/SoftQuoted.java

    r51 r53  
    77
    88// local imports:
    9 import win.iovar.web.proc.*;
     9import win.iovar.web.lib.*;
    1010
    1111// java imports:
     
    9494    }
    9595   
    96     public String value (final ShellSession.Instance shell, final ServletContext context)
     96    public String value (final Session shell, final ServletContext context)
    9797    {
    9898        final StringBuffer s = new StringBuffer ();
  • src/win/iovar/web/bin/shell/task/TaskData.java

    r51 r53  
    77
    88// local imports:
    9 import win.iovar.web.proc.*;
     9import win.iovar.web.lib.*;
    1010
    1111// java imports:
     
    2222public class TaskData
    2323{
    24     public final ShellSession.Instance shell;
     24    public final Session shell;
    2525    public final ServletContext context;
    2626    public final String user;
     
    3333     * Minimal constructor.
    3434     */
    35     public TaskData (final ShellSession.Instance shell, final ServletContext context, final String user)
     35    public TaskData (final Session shell, final ServletContext context, final String user)
    3636    {
    3737        this (shell, context, user, null, null, null, null);
     
    4141     * Maximal constructor.
    4242     */
    43     public TaskData (final ShellSession.Instance shell, final ServletContext context, final String user, final InputStream in, final String contentType, final String disposition, final String allowOrigin)
     43    public TaskData (final Session shell, final ServletContext context, final String user, final InputStream in, final String contentType, final String disposition, final String allowOrigin)
    4444    {
    4545        this.shell = shell;
  • src/win/iovar/web/bin/shell/task/Text.java

    r51 r53  
    77
    88// local imports:
    9 import win.iovar.web.proc.*;
     9import win.iovar.web.lib.*;
    1010
    1111// java imports:
     
    2020interface Text
    2121{
    22     public String value (final ShellSession.Instance shell, final ServletContext context);
     22    public String value (final Session shell, final ServletContext context);
    2323}
  • src/win/iovar/web/bin/shell/task/Variable.java

    r51 r53  
    77
    88// local imports:
    9 import win.iovar.web.proc.*;
     9import win.iovar.web.lib.*;
    1010
    1111// java imports:
     
    100100    }
    101101
    102     public String value (ShellSession.Instance shell, final ServletContext context)
     102    public String value (Session shell, final ServletContext context)
    103103    {
    104104        if (shell!=null) return shell.get (name);
  • src/win/iovar/web/dev/trans/File.java

    r51 r53  
    1010import win.iovar.web.bin.shell.task.*;
    1111import win.iovar.web.dev.*;
     12import win.iovar.web.lib.*;
    1213import win.iovar.web.proc.*;
    1314
     
    336337                anon.add (0, "file:"+path);
    337338               
    338                 final ShellSession.Instance shell = ShellSession.load (context, session);
     339                final Session shell = Sessions.load (context, session);
    339340                Log.debug ("shell session: "+shell);
    340341               
  • src/win/iovar/web/dev/trans/Resource.java

    r51 r53  
    1111import win.iovar.web.bin.shell.task.*;
    1212import win.iovar.web.dev.*;
    13 import win.iovar.web.proc.ShellSession;
     13import win.iovar.web.lib.*;
     14import win.iovar.web.proc.*;
    1415
    1516// java imports:
     
    315316                anon.add (0, "res:"+path);
    316317               
    317                 final ShellSession.Instance shell = ShellSession.load (context, session);
     318                final Session shell = Sessions.load (context, session);
    318319                Log.debug ("shell session: "+shell);
    319320               
  • src/win/iovar/web/proc/Sessions.java

    r51 r53  
    1111import win.iovar.web.dev.*;
    1212import win.iovar.web.dev.trans.*;
     13import win.iovar.web.lib.*;
    1314
    1415// java imports:
    1516import java.io.*;
    1617import java.util.*;
    17 import java.util.Set;
    1818import javax.servlet.*;
    1919import javax.servlet.http.*;
     
    2424 * Encapsulation of a shell session (instance variables, search path, history, etc.).
    2525 *
    26  * FIXME: this class (especially Instance) needs some serious re-work!
     26 * FIXME: this class (especially Session) needs some serious re-work!
    2727 *
    2828 * @author  shawn@lannocc.com
    2929 */
    30 public class ShellSession extends HttpServlet
     30public class Sessions extends HttpServlet
    3131{
    3232    static final String MASTER_SESSION = "_iodefault_";
     
    4646        {
    4747            final String id = getId (req);
    48             final Instance shell = get (context, id);
     48            final Session shell = get (context, id);
    4949
    5050            if (shell!=null)
     
    6767        final ServletContext context = getServletContext ();
    6868        final String id = getId (req);
    69         final Instance shell = (Instance) Utils.xstream.fromXML (req.getInputStream ());
     69        final Session shell = (Session) Utils.xstream.fromXML (req.getInputStream ());
    7070       
    7171        // FIXME: what about path/id mismatch?
     
    8686        final String id = getId (req);
    8787       
    88         final Instance shell = get (context, id);
     88        final Session shell = get (context, id);
    8989       
    9090        if (shell!=null)
     
    119119        final PrintWriter out = resp.getWriter ();
    120120       
    121         final Map<String,Instance> sessions = (Map<String,Instance>) context.getAttribute (Instance.class.getName ());
     121        final Map<String,Session> sessions = (Map<String,Session>) context.getAttribute (Session.class.getName ());
    122122       
    123123        if (sessions==null)
     
    135135     * Store a local instance
    136136     */
    137     static void put (final ServletContext context, final Instance shell) throws IOException
    138     {
    139         Map<String,Instance> shells = (Map<String,Instance>) context.getAttribute (Instance.class.getName ());
     137    public static void put (final ServletContext context, final Session shell) throws IOException
     138    {
     139        Map<String,Session> shells = (Map<String,Session>) context.getAttribute (Session.class.getName ());
    140140       
    141141        if (shells==null)
     
    143143            if (shell.isMaster ())
    144144            {
    145                 shells = new HashMap<String,Instance> ();
    146                 context.setAttribute (Instance.class.getName (), shells);
     145                shells = new HashMap<String,Session> ();
     146                context.setAttribute (Session.class.getName (), shells);
    147147            }
    148148            else
     
    160160     * Retrieve a local instance
    161161     */
    162     static Instance get (final ServletContext context, final String id) throws IOException
     162    static Session get (final ServletContext context, final String id) throws IOException
    163163    {
    164164        Log.debug ("request for shell: "+id);
    165         final Map<String,Instance> shells = (Map<String,Instance>) context.getAttribute (Instance.class.getName ());
     165        final Map<String,Session> shells = (Map<String,Session>) context.getAttribute (Session.class.getName ());
    166166        if (shells==null)
    167167        {
     
    179179     * The master session is created if it does not already exist.
    180180     */
    181     public static Instance master (final ServletContext context) throws IOException
     181    public static Session master (final ServletContext context) throws IOException
    182182    {
    183183        Log.debug ("getting shell master session");
    184184       
    185         Instance shell = (Instance) context.getAttribute (MASTER_SESSION);
     185        Session shell = (Session) context.getAttribute (MASTER_SESSION);
    186186       
    187187        if (shell==null)
    188188        {
    189189            Log.debug ("create master session");
    190             shell = new Instance (context);
     190            shell = new Session (context);
    191191            Log.info ("master session created: "+shell);
    192192            put (context, shell);
     
    208208     * An instance is created if it does not already exist.
    209209     */
    210     public static Instance get (final HttpServletRequest req) throws IOException
     210    public static Session get (final HttpServletRequest req) throws IOException
    211211    {
    212212        final HttpSession session = req.getSession ();
     
    223223        {
    224224            Log.debug ("request for shell from request, no path supplied");
    225             final String key = Instance.class.getName ()+":"+user;
    226             Instance shell = null; try
     225            final String key = Session.class.getName ()+":"+user;
     226            Session shell = null; try
    227227            {
    228228                final String id = (String) session.getAttribute (key);
     
    231231            catch (Exception e)
    232232            {
    233                 // Due to legacy/upgrade (Instance used to be stored in HttpSession... BAD IDEA)
     233                // Due to legacy/upgrade (Session used to be stored in HttpSession... BAD IDEA)
    234234                // we could get a ClassCastException because user sessions may
    235235                // be persisted across restarts. Just remove the bogus entry.
     
    242242            // Since any such shell would no longer be valid we check for its
    243243            // existence here.
    244             final Map<String,Instance> shells = (Map<String,Instance>) context.getAttribute (Instance.class.getName ());
     244            final Map<String,Session> shells = (Map<String,Session>) context.getAttribute (Session.class.getName ());
    245245            if (shell!=null && (shells==null || ! shells.containsKey (shell.getId ())))
    246246            {
     
    251251            if (shell==null)
    252252            {
    253                 shell = new Instance (context, master (context));
     253                shell = new Session (context, master (context));
    254254                put (context, shell);
    255255                session.setAttribute (key, shell.getId ());
     
    264264     * Load a local or remote shell instance.
    265265     */
    266     public static Instance load (final ServletContext context, final String path) throws IOException
     266    public static Session load (final ServletContext context, final String path) throws IOException
    267267    {
    268268        Log.debug ("request to load shell at: "+path);
     
    292292        else
    293293        {
    294             return (Instance) Utils.xstream.fromXML (handler.get ());
     294            return (Session) Utils.xstream.fromXML (handler.get ());
    295295        }
    296296    }
     
    299299     * Delete a local or remote shell instance.
    300300     */
    301     static void delete (final ServletContext context, final String path) throws IOException
     301    public static void delete (final ServletContext context, final String path) throws IOException
    302302    {
    303303        Log.debug ("request to delete shell at: "+path);
     
    317317                }
    318318               
    319                 final Map<String,Instance> shells = (Map<String,Instance>) context.getAttribute (Instance.class.getName ());
    320                 final Instance shell = shells.remove (id);
     319                final Map<String,Session> shells = (Map<String,Session>) context.getAttribute (Session.class.getName ());
     320                final Session shell = shells.remove (id);
    321321               
    322322                if (shell!=null)
     
    324324                    Log.debug ("shell instance removed: "+shell);
    325325                   
    326                     final Instance parent = shell.getParent (context);
     326                    final Session parent = shell.getParent (context);
    327327                    if (parent!=null)
    328328                    {
    329                         parent.children.remove (shell.getPath ());
     329                        parent.removeChild (shell.getPath ());
    330330                    }
    331331                }
     
    346346        }
    347347    }
    348    
    349    
    350    
    351     public static class Instance implements Serializable
    352     {
    353         public static final String ENV_INSTANCE = "INSTANCE"; // instance ID for the session
    354         public static final String ENV_VERSION = "IOVAR_VERSION"; // version of the IOVAR shell
    355         public static final String ENV_PATH = "PATH"; // user search path for executables
    356         public static final String ENV_USER = "USER"; // current username
    357        
    358         final String id;
    359         final String path;
    360        
    361         final String parentPath;
    362        
    363         final HashMap<String,String> env;
    364         final HashMap<String,String> locals; // locals do not propagate to children
    365         Object user;
    366         Integer exit;
    367        
    368         final Set<String> children;
    369        
    370         Instance (final ServletContext context)
    371         {
    372             this.id = String.valueOf (super.toString ().hashCode ());
    373             String sessions = context.getInitParameter (SESSIONS_PARAM);
    374             if (sessions==null) sessions = SESSIONS_DEFAULT;
    375             this.path = sessions+"/"+id;
    376        
    377             this.parentPath = null;
    378            
    379             this.env = new HashMap<String,String> ();
    380            
    381             env.put (ENV_INSTANCE, id);
    382             env.put (ENV_VERSION, Shell.VERSION);
    383             //env.put (ENV_ROOT, root);
    384             //env.put (ENV_WORKING_URI_BASE, pwu);
    385             //env.put (ENV_WORKING_DIRECTORY, pwd);
    386             //env.put (ENV_ROOT, "http://localhost:8080/iovar/");
    387             //env.put (ENV_HOME, "http://localhost:8080/iovar/");
    388             //env.put (ENV_PATH, "/usr/local/bin:/usr/bin:/bin:/opt/bin");
    389            
    390             this.locals = new HashMap<String,String> ();
    391             this.exit = null;
    392            
    393             this.children = new HashSet<String> ();
    394         }
    395        
    396         protected Instance (final ServletContext context, final Instance parent)
    397         {
    398             if (parent==null)
    399             {
    400                 Log.error ("null parent");
    401                 throw new NullPointerException ("null parent");
    402             }
    403            
    404             // FIXME: use a better id value
    405             this.id = String.valueOf (super.toString ().hashCode ());
    406             String root = context.getInitParameter (SESSIONS_PARAM);
    407             if (root==null) root = SESSIONS_DEFAULT;
    408             this.path = root+"/"+id;
    409            
    410             this.parentPath = parent.path;
    411            
    412             this.env = (HashMap<String,String>) parent.env.clone ();
    413             this.env.put (ENV_INSTANCE, id);
    414            
    415             this.locals = new HashMap<String,String> ();
    416             this.exit = parent.exit;
    417            
    418             this.children = new HashSet<String> ();
    419            
    420             // add to parent's children if parent is not master session
    421             parent.children.add (this.path);
    422            
    423             Log.debug ("new session ["+id+"] with parent: "+parent.id);
    424         }
    425        
    426         public String getId ()
    427         {
    428             return id;
    429         }
    430        
    431         public String getPath ()
    432         {
    433             return path;
    434         }
    435        
    436         public boolean isMaster ()
    437         {
    438             return parentPath==null;
    439         }
    440        
    441         public Instance getParent (final ServletContext context) throws IOException
    442         {
    443             if (this.parentPath==null) return null;
    444            
    445             return load (context, parentPath);
    446         }
    447        
    448         public String get (final String key)
    449         {
    450             Log.debug ("get ["+id+"]: "+key);
    451             if ("?".equals (key)) {
    452                 Log.debug ("returning exit value: "+exit);
    453                 return String.valueOf (exit);
    454             }
    455             else if (locals.containsKey (key)) return locals.get (key);
    456             else return env.get (key);
    457         }
    458        
    459         public String set (final String key, final String val)
    460         {
    461             Log.debug ("set ["+id+"]: "+key+"="+val);
    462             return env.put (key, val);
    463         }
    464        
    465         public String setLocal (final String key, final String val)
    466         {
    467             Log.debug ("set local ["+id+"]: "+key+"="+val);
    468             return locals.put (key, val);
    469         }
    470        
    471         public void setExit (final int exit)
    472         {
    473             Log.debug ("set exit ["+id+"]: "+exit);
    474             this.exit = new Integer (exit);
    475         }
    476        
    477         public Integer getExit ()
    478         {
    479             return exit;
    480         }
    481        
    482         public void clearExit ()
    483         {
    484             Log.debug ("clear exit ["+id+"]");
    485             this.exit = null;
    486         }
    487        
    488         /**
    489          * Non-local variables only.
    490          */
    491         public Map<String,String> getVariables ()
    492         {
    493             final Map<String,String> env =  (Map<String,String>) this.env.clone ();
    494             if (exit!=null) env.put ("?", exit.toString ());
    495             else env.remove ("?");
    496             return env;
    497         }
    498        
    499         /**
    500          * Local variables only.
    501          */
    502         public Map<String,String> getLocals ()
    503         {
    504             return (Map<String,String>) locals.clone ();
    505         }
    506        
    507         /**
    508          * All variables.
    509          */
    510         public Map<String,String> getEnvironment ()
    511         {
    512             final Map<String,String> env = getVariables ();
    513            
    514             for (final Map.Entry<String,String> local : locals.entrySet ())
    515             {
    516                 env.put (local.getKey (), local.getValue ());
    517             }
    518            
    519             return env;
    520         }
    521        
    522         public String export (final ServletContext context, final String key, final String val) throws IOException
    523         {
    524             return export (context, key, val, false);
    525         }
    526        
    527         public String export (final ServletContext context, final String key, final String val, final boolean master) throws IOException
    528         {
    529             if (master)
    530             {
    531                 return export (-2, context, key, val);
    532             }
    533             else
    534             {
    535                 // FIXME: this probably shouldn't go all the way up
    536                 return export (-1, context, key, val);
    537             }
    538         }
    539        
    540         /**
    541          * @param   count   How far up to go. Use -1 to go all the way to the user shell.
    542          *                  Use -2 to go up to the master session.
    543          */
    544         public String export (final int count, final ServletContext context, final String key, final String val) throws IOException
    545         {
    546             final Instance parent = getParent (context);
    547            
    548             if (count>0)
    549             {
    550                 if (parent!=null) parent.export (count-1, context, key, val);
    551             }
    552             else if (count<0)
    553             {
    554                 if (parent!=null) parent.export (count, context, key, val);
    555             }
    556            
    557             if (count==-2 || ! isMaster ())
    558             {
    559                 return set (key, val);
    560             }
    561             else
    562             {
    563                 return null;
    564             }
    565         }
    566        
    567         /*
    568          * Sets the given user object in the top user shell (one down from master session).
    569          */
    570         public void setUser (final ServletContext context, final Object user) throws IOException
    571         {
    572             final Instance parent = getParent (context);
    573            
    574             if (parent != null)
    575             {
    576                 if (parent.isMaster () && !isMaster ())
    577                 {
    578                     this.user = user;
    579                 }
    580                 else
    581                 {
    582                     parent.setUser (context, user);
    583                 }
    584             }
    585         }
    586        
    587         public Object getUser (final ServletContext context) throws IOException
    588         {
    589             final Instance parent = getParent (context);
    590            
    591             if (parent != null)
    592             {
    593                 if (parent.isMaster () && !isMaster ())
    594                 {
    595                     return this.user;
    596                 }
    597                 else
    598                 {
    599                     return parent.getUser (context);
    600                 }
    601             }
    602            
    603             return null;
    604         }
    605        
    606         public List<String> getPathList ()
    607         {
    608             final String path = get (ENV_PATH);
    609             if (path==null) return null;
    610            
    611             final List<String> list = new ArrayList<String> ();
    612            
    613             // using comma as separator because colon is so prevalent in URIs
    614             for (final StringTokenizer st = new StringTokenizer (path, ","); st.hasMoreTokens (); )
    615             {
    616                 list.add (st.nextToken ());
    617             }
    618            
    619             return list;
    620         }
    621        
    622         /*
    623         public void saveTo (final String path, final ServletContext context) throws IOException
    624         {
    625             Log.info ("put "+this+" at "+path+":");
    626            
    627             final ByteArrayOutputStream bytes = new ByteArrayOutputStream ();
    628             Utils.xstream.toXML (this, bytes);
    629             / *
    630             final ObjectOutputStream out = new ObjectOutputStream (bytes); try
    631             {
    632                 out.writeObject (this);
    633             }
    634             finally
    635             {
    636                 out.close ();
    637             }
    638             * /
    639            
    640             Transport.handler (path, context).put (new ByteArrayInputStream (bytes.toByteArray ()));
    641         }
    642         */
    643        
    644         public InputStream save (final ServletContext context) throws IOException
    645         {
    646             Transport handler = Transport.handler (path, context);
    647 
    648             if (handler instanceof Local || handler instanceof Resource)
    649             {
    650                 // FIXME... evaluate completeness
    651                 put (context, this);
    652                 /*
    653                 Map<String,Instance> sessions = (Map<String,Instance>) context.getAttribute (Instance.class.getName ());
    654                 if (sessions==null)
    655                 {
    656                     sessions = new HashMap<String,Instance> ();
    657                     context.setAttribute (Instance.class.getName (), sessions);
    658                 }
    659 
    660                 sessions.put (handler.getPath (), this);
    661                 */
    662                 return null;
    663             }
    664             else
    665             {
    666                 final ByteArrayOutputStream bytes = new ByteArrayOutputStream ();
    667                 Utils.xstream.toXML (this, bytes);
    668                 return handler.put (new ByteArrayInputStream (bytes.toByteArray ()));
    669             }
    670         }
    671        
    672         /**
    673          * FIXME: a quick hack; not sure this should even exist (SECURITY)
    674          */
    675         public void saveUp (final ServletContext context) throws IOException
    676         {
    677             saveUp (-1, context);
    678         }
    679        
    680        
    681         /**
    682          * FIXME: a quick hack; not sure this should even exist (SECURITY)
    683          * @param   count   How far up to go. Use -1 to go all the way.
    684          */
    685         public void saveUp (final int count, final ServletContext context) throws IOException
    686         {
    687             save (context);
    688            
    689             if (count!=0)
    690             {
    691                 final Instance parent = getParent (context);
    692                 if (parent!=null) parent.saveUp (count-1, context);
    693             }
    694         }
    695        
    696         /**
    697          * Create and store a child session containing the environment of this session.
    698          */
    699         public Instance fork (final ServletContext context) throws IOException
    700         {
    701             final Instance shell = new Instance (context, this);
    702             put (context, shell);
    703             return shell;
    704         }
    705        
    706         /**
    707          * FIXME (not implemented)
    708          */
    709         public Instance merge (Instance other)
    710         {
    711             // FIXME
    712             throw new RuntimeException ("merging not yet implemented");
    713         }
    714        
    715         /**
    716          * Delete this shell and its children.
    717          */
    718         public void delete (final ServletContext context) throws IOException
    719         {
    720             for (final String child : children)
    721             {
    722                 ShellSession.delete (context, child);
    723             }
    724            
    725             ShellSession.delete (context, path);
    726         }
    727        
    728         public String toString ()
    729         {
    730             return super.toString () + "{ "+id+" }";
    731         }
    732     }
     348
     349
     350
     351
     352
     353
     354
    733355   
    734356    public static class Listener implements HttpSessionListener
     
    743365            final HttpSession session = event.getSession ();
    744366            final ServletContext context = session.getServletContext ();
    745             //final Map<String,Instance> shells = (Map<String,Instance>) context.getAttribute (Instance.class.getName ());
     367            //final Map<String,Session> shells = (Map<String,Session>) context.getAttribute (Session.class.getName ());
    746368           
    747369            for (final Enumeration<String> keys = session.getAttributeNames (); keys.hasMoreElements (); )
    748370            {
    749371                final String key = keys.nextElement ();
    750                 if (key.startsWith (Instance.class.getName ()+":"))
     372                if (key.startsWith (Session.class.getName ()+":"))
    751373                {
    752374                    final String id = (String) session.getAttribute (key);
    753375                    try
    754376                    {
    755                         final Instance shell = get (context, id);
     377                        final Session shell = get (context, id);
    756378                        shell.delete (context);
    757379                    }
  • src/win/iovar/web/sbin/Init.java

    r51 r53  
    1111import win.iovar.web.bin.shell.task.TaskData;
    1212import win.iovar.web.dev.*;
     13import win.iovar.web.lib.*;
    1314import win.iovar.web.proc.*;
    1415
     
    100101                   
    101102                    Log.debug ("calling shell init for master environment");
    102                     final ShellSession.Instance shell = ShellSession.master (context);
     103                    final Session shell = Sessions.master (context);
    103104       
    104105                    final Transport config = Transport.handler (init, context);
  • src/win/iovar/web/usr/bin/FormFile.java

    r51 r53  
    1010import win.iovar.web.bin.shell.*;
    1111import win.iovar.web.dev.*;
     12import win.iovar.web.lib.*;
    1213import win.iovar.web.proc.*;
    1314
     
    325326                if (sets!=null)
    326327                {
    327                     final ShellSession.Instance session = ShellSession.get (req);
     328                    final Session session = Sessions.get (req);
    328329                    if (session==null)
    329330                    {
     
    343344       
    344345                    // FIXME: is this necessary?
    345                     //ShellSession.put (req, context, session);
     346                    //Sessions.put (req, context, session);
    346347                }
    347348               
  • src/win/iovar/web/usr/bin/XArgs.java

    r51 r53  
    1111import win.iovar.web.bin.shell.task.*;
    1212import win.iovar.web.dev.*;
     13import win.iovar.web.lib.*;
    1314import win.iovar.web.proc.*;
    1415
     
    8990        //Utils.pipe (in, resp.getOutputStream ());
    9091
    91         final ShellSession.Instance session = ShellSession.get (req);
     92        final Session session = Sessions.get (req);
    9293        /*
    9394        if (session==null)
  • src/win/iovar/web/usr/bin/XSLT.java

    r51 r53  
    1010import win.iovar.web.bin.shell.*;
    1111import win.iovar.web.dev.*;
     12import win.iovar.web.lib.*;
    1213import win.iovar.web.proc.*;
    1314
     
    131132            params.remove ("variables");
    132133       
    133             final ShellSession.Instance session = ShellSession.get (req);
     134            final Session session = Sessions.get (req);
    134135            if (session==null)
    135136            {
  • src/win/iovar/web/usr/sbin/Cron.java

    r51 r53  
    1212import win.iovar.web.bin.shell.task.TaskData;
    1313import win.iovar.web.dev.*;
     14import win.iovar.web.lib.*;
    1415import win.iovar.web.proc.*;
    1516
     
    8081        }
    8182       
    82         final ShellSession.Instance shell = ShellSession.get (req);
     83        final Session shell = Sessions.get (req);
    8384        if (shell==null)
    8485        {
Note: See TracChangeset for help on using the changeset viewer.