1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 package org.apache.commons.httpclient.server;
32
33 import java.io.IOException;
34 import java.net.Socket;
35 import java.util.HashMap;
36 import java.util.Iterator;
37 import java.util.Map;
38
39 /***
40 * A REALLY simple connection manager.
41 *
42 * @author Oleg Kalnichevski
43 */
44 public class SimpleConnManager {
45
46 private Map connsets = new HashMap();
47
48 public SimpleConnManager() {
49 super();
50 }
51
52 public synchronized SimpleHttpServerConnection openConnection(final SimpleHost host)
53 throws IOException {
54 if (host == null) {
55 throw new IllegalArgumentException("Host may not be null");
56 }
57 SimpleHttpServerConnection conn = null;
58 SimpleConnList connlist = (SimpleConnList)this.connsets.get(host);
59 if (connlist != null) {
60 conn = connlist.removeFirst();
61 if (conn != null && !conn.isOpen()) {
62 conn = null;
63 }
64 }
65 if (conn == null) {
66 Socket socket = new Socket(host.getHostName(), host.getPort());
67 conn = new SimpleHttpServerConnection(socket);
68 }
69 return conn;
70 }
71
72 public synchronized void releaseConnection(final SimpleHost host,
73 final SimpleHttpServerConnection conn) throws IOException {
74 if (host == null) {
75 throw new IllegalArgumentException("Host may not be null");
76 }
77 if (conn == null) {
78 return;
79 }
80 if (!conn.isKeepAlive()) {
81 conn.close();
82 }
83 if (conn.isOpen()) {
84 SimpleConnList connlist = (SimpleConnList)this.connsets.get(host);
85 if (connlist == null) {
86 connlist = new SimpleConnList();
87 this.connsets.put(host, connlist);
88 }
89 connlist.addConnection(conn);
90 }
91 }
92
93 public synchronized void shutdown() {
94 for (Iterator i = this.connsets.values().iterator(); i.hasNext();) {
95 SimpleConnList connlist = (SimpleConnList) i.next();
96 connlist.shutdown();
97 }
98 this.connsets.clear();
99 }
100
101 }