View Javadoc

1   /*
2    * Copyright (c) 2005 The University of Reading
3    * All rights reserved.
4    *
5    * Redistribution and use in source and binary forms, with or without
6    * modification, are permitted provided that the following conditions
7    * are met:
8    * 1. Redistributions of source code must retain the above copyright
9    *    notice, this list of conditions and the following disclaimer.
10   * 2. Redistributions in binary form must reproduce the above copyright
11   *    notice, this list of conditions and the following disclaimer in the
12   *    documentation and/or other materials provided with the distribution.
13   * 3. Neither the name of the University of Reading, nor the names of the
14   *    authors or contributors may be used to endorse or promote products
15   *    derived from this software without specific prior written permission.
16   *
17   * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18   * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20   * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21   * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22   * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23   * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24   * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25   * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26   * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27   */
28  
29  package uk.ac.rdg.resc.jstyx.tutorial;
30  
31  import uk.ac.rdg.resc.jstyx.server.StyxFile;
32  import uk.ac.rdg.resc.jstyx.server.StyxDirectory;
33  import uk.ac.rdg.resc.jstyx.server.StyxServer;
34  import uk.ac.rdg.resc.jstyx.server.StyxFileClient;
35  
36  import uk.ac.rdg.resc.jstyx.StyxException;
37  import uk.ac.rdg.resc.jstyx.StyxUtils;
38  
39  /***
40   * Simple custom Styx file that, when read, returns the IP address and local 
41   * port of the client that is connected.
42   *
43   * @author Jon Blower
44   * $Revision: 391 $
45   * $Date: 2005-09-05 08:21:14 +0100 (Mon, 05 Sep 2005) $
46   * $Log$
47   * Revision 1.3  2005/09/05 07:21:14  jonblower
48   * Set permissions of file to 0444
49   *
50   * Revision 1.2  2005/08/30 16:27:49  jonblower
51   * Continued to develop website and tutorial
52   *
53   * Revision 1.1  2005/08/30 09:50:48  jonblower
54   * Renamed "WhoAmI" to "WhoAmIFile"
55   *
56   * Revision 1.1  2005/08/30 08:01:48  jonblower
57   * Continuing development of tutorial
58   *
59   */
60  public class WhoAmIFile extends StyxFile
61  {
62      
63      /*** Creates a new instance of WhoAmIFile */
64      public WhoAmIFile() throws StyxException
65      {
66          super("whoami");
67          // This will be a read-only file so set the permissions to 0444
68          // (i.e. r--r--r--)
69          this.setPermissions(0444);
70      }
71      
72      /***
73       * Reads data from this file.  Gets the IP address of the remote client and
74       * returns it.
75       *
76       * @param client The client that is performing the read
77       * @param offset The index of the first byte of data to return
78       * @param count The maximum number of bytes to read
79       * @param tag The tag of the incoming read message (this is needed when
80       * calling readReply())
81       */
82      public void read(StyxFileClient client, long offset, int count, int tag)
83          throws StyxException
84      {
85          // Get the IP address and port of the remote client
86          String clientAddr = client.getSession().getRemoteAddress().toString();
87          // Process the request and reply to the client
88          this.processAndReplyRead(clientAddr, client, offset, count, tag);
89      }
90      
91      /***
92       * Simple test function: sets up a StyxServer that serves up a WhoAmIFile
93       */
94      public static void main (String[] args) throws Exception
95      {
96          // Create the root directory
97          StyxDirectory root = new StyxDirectory("/");
98          // Create a WhoAmI file and add it to the root directory
99          root.addChild(new WhoAmIFile());
100         // Create and start a Styx server, listening on port 9876
101         new StyxServer(9876, root).start();
102     }
103     
104 }