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 }