View Javadoc

1   package org.eclipse.jetty.websocket;
2   
3   import java.io.IOException;
4   import java.util.HashMap;
5   import java.util.Map;
6   
7   import org.eclipse.jetty.io.Buffer;
8   import org.eclipse.jetty.util.QuotedStringTokenizer;
9   import org.eclipse.jetty.websocket.WebSocketParser.FrameHandler;
10  
11  public class AbstractExtension implements Extension
12  {
13      private static final int[] __mask = { -1, 0x04, 0x02, 0x01};
14      private final String _name;
15      private final Map<String,String> _parameters=new HashMap<String, String>();
16      private FrameHandler _inbound;
17      private WebSocketGenerator _outbound;
18      private WebSocket.FrameConnection _connection;
19      
20      public AbstractExtension(String name)
21      {
22          _name = name;
23      }
24      
25      public WebSocket.FrameConnection getConnection()
26      {
27          return _connection;
28      }
29  
30      public boolean init(Map<String, String> parameters)
31      {
32          _parameters.putAll(parameters);
33          return true;
34      }
35      
36      public String getInitParameter(String name)
37      {
38          return _parameters.get(name);
39      }
40  
41      public String getInitParameter(String name,String dft)
42      {
43          if (!_parameters.containsKey(name))
44              return dft;
45          return _parameters.get(name);
46      }
47  
48      public int getInitParameter(String name, int dft)
49      {
50          String v=_parameters.get(name);
51          if (v==null)
52              return dft;
53          return Integer.valueOf(v);
54      }
55      
56      
57      public void bind(WebSocket.FrameConnection connection, FrameHandler incoming, WebSocketGenerator outgoing)
58      {
59          _connection=connection;
60          _inbound=incoming;
61          _outbound=outgoing;
62      }
63  
64      public String getName()
65      {
66          return _name;
67      }
68  
69      public String getParameterizedName()
70      {
71          StringBuilder name = new StringBuilder();
72          name.append(_name);
73          for (String param : _parameters.keySet())
74              name.append(';').append(param).append('=').append(QuotedStringTokenizer.quoteIfNeeded(_parameters.get(param),";="));
75          return name.toString();
76      }
77  
78      public void onFrame(byte flags, byte opcode, Buffer buffer)
79      {
80          // System.err.printf("onFrame %s %x %x %d\n",getExtensionName(),flags,opcode,buffer.length());
81          _inbound.onFrame(flags,opcode,buffer);
82      }
83  
84      public void close(int code, String message)
85      {
86          _inbound.close(code,message);
87      }
88  
89      public int flush() throws IOException
90      {
91          return _outbound.flush();
92      }
93  
94      public boolean isBufferEmpty()
95      {
96          return _outbound.isBufferEmpty();
97      }
98  
99      public void addFrame(byte flags, byte opcode, byte[] content, int offset, int length) throws IOException
100     {
101         // System.err.printf("addFrame %s %x %x %d\n",getExtensionName(),flags,opcode,length);
102         _outbound.addFrame(flags,opcode,content,offset,length);
103     }
104     
105     public byte setFlag(byte flags,int rsv)
106     {
107         if (rsv<1||rsv>3)
108             throw new IllegalArgumentException("rsv"+rsv);
109         byte b=(byte)(flags | __mask[rsv]);
110         return b;
111     }
112     
113     public byte clearFlag(byte flags,int rsv)
114     {
115         if (rsv<1||rsv>3)
116             throw new IllegalArgumentException("rsv"+rsv);
117         return (byte)(flags & ~__mask[rsv]);
118     }
119 
120     public boolean isFlag(byte flags,int rsv)
121     {
122         if (rsv<1||rsv>3)
123             throw new IllegalArgumentException("rsv"+rsv);
124         return (flags & __mask[rsv])!=0;
125     }
126     
127     public String toString()
128     {
129         return getParameterizedName();
130     }
131 }