diff options
author | Kelly Rauchenberger <fefferburbia@gmail.com> | 2008-08-08 20:04:36 +0000 |
---|---|---|
committer | Kelly Rauchenberger <fefferburbia@gmail.com> | 2008-08-08 20:04:36 +0000 |
commit | e34e14ea3a024862c9ffd557f322d7720882a515 (patch) | |
tree | 13d775e7c90bd432db4909ba71ff47d6d63c584c /client/trunk/src | |
parent | 0ec867ce5421402d4c3501697c9f0b0991cd8b86 (diff) | |
download | instadisc-e34e14ea3a024862c9ffd557f322d7720882a515.tar.gz instadisc-e34e14ea3a024862c9ffd557f322d7720882a515.tar.bz2 instadisc-e34e14ea3a024862c9ffd557f322d7720882a515.zip |
Client: Fixed connection reset problem
The problem with NMAP freaking out the Client was that NMAP didn't actually send any data to the socket and thus the connection reset and the Client wasn't actually programmed to handle that yet. Fixes #24
Diffstat (limited to 'client/trunk/src')
-rw-r--r-- | client/trunk/src/com/fourisland/instadisc/InstaDiscThread.java | 59 | ||||
-rw-r--r-- | client/trunk/src/com/fourisland/instadisc/Item/SubscriptionFile.java | 69 |
2 files changed, 87 insertions, 41 deletions
diff --git a/client/trunk/src/com/fourisland/instadisc/InstaDiscThread.java b/client/trunk/src/com/fourisland/instadisc/InstaDiscThread.java index 5895c10..07b5b28 100644 --- a/client/trunk/src/com/fourisland/instadisc/InstaDiscThread.java +++ b/client/trunk/src/com/fourisland/instadisc/InstaDiscThread.java | |||
@@ -27,26 +27,32 @@ public class InstaDiscThread implements Runnable { | |||
27 | } | 27 | } |
28 | 28 | ||
29 | public void run() { | 29 | public void run() { |
30 | try { | 30 | try |
31 | { | ||
31 | ServerSocket svr = new ServerSocket(); | 32 | ServerSocket svr = new ServerSocket(); |
32 | java.net.InetSocketAddress addr = new java.net.InetSocketAddress(4444); | 33 | java.net.InetSocketAddress addr = new java.net.InetSocketAddress(4444); |
33 | svr.bind(addr); | 34 | svr.bind(addr); |
34 | Runtime.getRuntime().addShutdownHook(new Thread(new CloseServerSocketThread(svr))); | 35 | Runtime.getRuntime().addShutdownHook(new Thread(new CloseServerSocketThread(svr))); |
35 | while (!cancelled) { | 36 | while (!cancelled) |
36 | try { | 37 | { |
38 | try | ||
39 | { | ||
37 | Socket s = svr.accept(); | 40 | Socket s = svr.accept(); |
38 | HandleItemThread hit = new HandleItemThread(s); | 41 | HandleItemThread hit = new HandleItemThread(s); |
39 | Thread hitt = new Thread(hit); | 42 | Thread hitt = new Thread(hit); |
40 | hitt.start(); | 43 | hitt.start(); |
41 | } catch (SocketException ex) { | 44 | } catch (SocketException ex) |
45 | { | ||
42 | cancel(); | 46 | cancel(); |
43 | } catch (Exception ex) { | 47 | } catch (Exception ex) |
48 | { | ||
44 | cancel(); | 49 | cancel(); |
45 | Logger.getLogger(InstaDiscThread.class.getName()).log(Level.SEVERE, null, ex); | 50 | Logger.getLogger(InstaDiscThread.class.getName()).log(Level.SEVERE, null, ex); |
46 | } | 51 | } |
47 | } | 52 | } |
48 | svr.close(); | 53 | svr.close(); |
49 | } catch (IOException ex) { | 54 | } catch (IOException ex) |
55 | { | ||
50 | Logger.getLogger(InstaDiscThread.class.getName()).log(Level.SEVERE, null, ex); | 56 | Logger.getLogger(InstaDiscThread.class.getName()).log(Level.SEVERE, null, ex); |
51 | } | 57 | } |
52 | 58 | ||
@@ -56,62 +62,77 @@ public class InstaDiscThread implements Runnable { | |||
56 | class HandleItemThread implements Runnable { | 62 | class HandleItemThread implements Runnable { |
57 | 63 | ||
58 | Socket s; | 64 | Socket s; |
59 | 65 | ||
60 | public HandleItemThread(Socket s) { | 66 | public HandleItemThread(Socket s) { |
61 | this.s = s; | 67 | this.s = s; |
62 | } | 68 | } |
63 | 69 | ||
64 | public void run() { | 70 | public void run() { |
65 | try { | 71 | try |
72 | { | ||
66 | InputStream is = s.getInputStream(); | 73 | InputStream is = s.getInputStream(); |
67 | int buffer[] = new int[1000]; | 74 | int buffer[] = new int[1000]; |
68 | int rs = 0; | 75 | int rs = 0; |
69 | int i = 0; | 76 | int i = 0; |
70 | 77 | ||
71 | while (rs != -1) { | 78 | while (rs != -1) |
72 | try { | 79 | { |
80 | try | ||
81 | { | ||
73 | rs = is.read(); | 82 | rs = is.read(); |
74 | 83 | ||
75 | if (rs != -1) { | 84 | if (rs != -1) |
85 | { | ||
76 | buffer[i] = rs; | 86 | buffer[i] = rs; |
77 | } | 87 | } |
78 | i++; | 88 | i++; |
79 | } catch (IOException ex) { | 89 | } catch (SocketException ex) |
90 | { | ||
91 | return; | ||
92 | } catch (IOException ex) | ||
93 | { | ||
80 | Logger.getLogger(HandleItemThread.class.getName()).log(Level.SEVERE, null, ex); | 94 | Logger.getLogger(HandleItemThread.class.getName()).log(Level.SEVERE, null, ex); |
81 | } | 95 | } |
82 | } | 96 | } |
83 | 97 | ||
84 | StringBuilder result = new StringBuilder(); | 98 | StringBuilder result = new StringBuilder(); |
85 | int j = 0; | 99 | int j = 0; |
86 | for (j = 0; j < i; j++) { | 100 | for (j = 0; j < i; j++) |
101 | { | ||
87 | result.append(Character.toString((char) buffer[j])); | 102 | result.append(Character.toString((char) buffer[j])); |
88 | } | 103 | } |
89 | 104 | ||
90 | String[] headers = result.toString().split("\n"); | 105 | String[] headers = result.toString().split("\n"); |
91 | HashMap<String, String> headerMap = new HashMap<String, String>(); | 106 | HashMap<String, String> headerMap = new HashMap<String, String>(); |
92 | i = 0; | 107 | i = 0; |
93 | while (1 == 1) { | 108 | while (1 == 1) |
94 | try { | 109 | { |
110 | try | ||
111 | { | ||
95 | String[] nameVal = headers[i].split(": "); | 112 | String[] nameVal = headers[i].split(": "); |
96 | String name = nameVal[0]; | 113 | String name = nameVal[0]; |
97 | String value = nameVal[1].trim().replace("__INSTADISC__", ": "); | 114 | String value = nameVal[1].trim().replace("__INSTADISC__", ": "); |
98 | headerMap.put(name, value); | 115 | headerMap.put(name, value); |
99 | } catch (Exception ex) { | 116 | } catch (Exception ex) |
117 | { | ||
100 | break; | 118 | break; |
101 | } | 119 | } |
102 | i++; | 120 | i++; |
103 | } | 121 | } |
104 | 122 | ||
105 | //Logger.getLogger(HandleItemThread.class.getName()).log(Level.INFO, headerMap.toString()); | 123 | //Logger.getLogger(HandleItemThread.class.getName()).log(Level.INFO, headerMap.toString()); |
106 | try { | 124 | try |
125 | { | ||
107 | s.close(); | 126 | s.close(); |
108 | } catch (IOException ex) { | 127 | } catch (IOException ex) |
128 | { | ||
109 | Logger.getLogger(HandleItemThread.class.getName()).log(Level.SEVERE, null, ex); | 129 | Logger.getLogger(HandleItemThread.class.getName()).log(Level.SEVERE, null, ex); |
110 | } | 130 | } |
111 | 131 | ||
112 | Item idI = new Item(headerMap); | 132 | Item idI = new Item(headerMap); |
113 | idI.start(); | 133 | idI.start(); |
114 | } catch (IOException ex) { | 134 | } catch (IOException ex) |
135 | { | ||
115 | Logger.getLogger(HandleItemThread.class.getName()).log(Level.SEVERE, null, ex); | 136 | Logger.getLogger(HandleItemThread.class.getName()).log(Level.SEVERE, null, ex); |
116 | } | 137 | } |
117 | } | 138 | } |
diff --git a/client/trunk/src/com/fourisland/instadisc/Item/SubscriptionFile.java b/client/trunk/src/com/fourisland/instadisc/Item/SubscriptionFile.java index fc91eaf..d9ed348 100644 --- a/client/trunk/src/com/fourisland/instadisc/Item/SubscriptionFile.java +++ b/client/trunk/src/com/fourisland/instadisc/Item/SubscriptionFile.java | |||
@@ -28,19 +28,23 @@ public class SubscriptionFile { | |||
28 | 28 | ||
29 | public SubscriptionFile(URL url, JLabel status) { | 29 | public SubscriptionFile(URL url, JLabel status) { |
30 | status.setText("Checking...."); | 30 | status.setText("Checking...."); |
31 | try { | 31 | try |
32 | { | ||
32 | HttpURLConnection urc = (HttpURLConnection) url.openConnection(); | 33 | HttpURLConnection urc = (HttpURLConnection) url.openConnection(); |
33 | Thread th = new Thread(new SubscriptionFileThread(urc, status)); | 34 | Thread th = new Thread(new SubscriptionFileThread(urc, status)); |
34 | th.start(); | 35 | th.start(); |
35 | } catch (FileNotFoundException ex) { | 36 | } catch (FileNotFoundException ex) |
37 | { | ||
36 | status.setText("Error: Subscription File doesn't exist"); | 38 | status.setText("Error: Subscription File doesn't exist"); |
37 | } catch (IOException ex) { | 39 | } catch (IOException ex) |
40 | { | ||
38 | Logger.getLogger(SubscriptionFile.class.getName()).log(Level.SEVERE, null, ex); | 41 | Logger.getLogger(SubscriptionFile.class.getName()).log(Level.SEVERE, null, ex); |
39 | } | 42 | } |
40 | } | 43 | } |
41 | 44 | ||
42 | public static void deleteSubscription(Subscription s, boolean deleteFromData) { | 45 | public static void deleteSubscription(Subscription s, boolean deleteFromData) { |
43 | if (deleteFromData) { | 46 | if (deleteFromData) |
47 | { | ||
44 | Wrapper.deleteSubscription(s.getURL()); | 48 | Wrapper.deleteSubscription(s.getURL()); |
45 | } | 49 | } |
46 | 50 | ||
@@ -50,8 +54,10 @@ public class SubscriptionFile { | |||
50 | 54 | ||
51 | int i = 0; | 55 | int i = 0; |
52 | Filter f[] = Wrapper.getAllFilter(); | 56 | Filter f[] = Wrapper.getAllFilter(); |
53 | for (i = 0; i < f.length; i++) { | 57 | for (i = 0; i < f.length; i++) |
54 | if (f[i].getSubscription().equals(s.getURL())) { | 58 | { |
59 | if (f[i].getSubscription().equals(s.getURL())) | ||
60 | { | ||
55 | Wrapper.deleteFilter(f[i].getID()); | 61 | Wrapper.deleteFilter(f[i].getID()); |
56 | } | 62 | } |
57 | } | 63 | } |
@@ -70,49 +76,61 @@ class SubscriptionFileThread implements Runnable { | |||
70 | 76 | ||
71 | public void run() { | 77 | public void run() { |
72 | InputStream is = null; | 78 | InputStream is = null; |
73 | try { | 79 | try |
80 | { | ||
74 | is = urc.getInputStream(); | 81 | is = urc.getInputStream(); |
75 | int[] buffer = new int[1000]; | 82 | int[] buffer = new int[1000]; |
76 | int rs = 0; | 83 | int rs = 0; |
77 | int i = 0; | 84 | int i = 0; |
78 | 85 | ||
79 | while (rs != -1) { | 86 | while (rs != -1) |
80 | try { | 87 | { |
88 | try | ||
89 | { | ||
81 | rs = is.read(); | 90 | rs = is.read(); |
82 | 91 | ||
83 | if (rs != -1) { | 92 | if (rs != -1) |
93 | { | ||
84 | buffer[i] = rs; | 94 | buffer[i] = rs; |
85 | } | 95 | } |
86 | i++; | 96 | i++; |
87 | } catch (IOException ex) { | 97 | } catch (IOException ex) |
98 | { | ||
88 | Logger.getLogger(SubscriptionFileThread.class.getName()).log(Level.SEVERE, null, ex); | 99 | Logger.getLogger(SubscriptionFileThread.class.getName()).log(Level.SEVERE, null, ex); |
89 | } | 100 | } |
90 | } | 101 | } |
91 | 102 | ||
92 | StringBuilder result = new StringBuilder(); | 103 | StringBuilder result = new StringBuilder(); |
93 | int j = 0; | 104 | int j = 0; |
94 | for (j = 0; j < i; j++) { | 105 | for (j = 0; j < i; j++) |
106 | { | ||
95 | result.append(Character.toString((char) buffer[j])); | 107 | result.append(Character.toString((char) buffer[j])); |
96 | } | 108 | } |
97 | 109 | ||
98 | String[] headers = result.toString().split("\n"); | 110 | String[] headers = result.toString().split("\n"); |
99 | HashMap<String, String> headerMap = new HashMap<String, String>(); | 111 | HashMap<String, String> headerMap = new HashMap<String, String>(); |
100 | i = 0; | 112 | i = 0; |
101 | while (1 == 1) { | 113 | while (1 == 1) |
102 | try { | 114 | { |
115 | try | ||
116 | { | ||
103 | String[] nameVal = headers[i].split(": "); | 117 | String[] nameVal = headers[i].split(": "); |
104 | String name = nameVal[0]; | 118 | String name = nameVal[0]; |
105 | String value = nameVal[1].trim(); | 119 | String value = nameVal[1].trim(); |
106 | headerMap.put(name, value); | 120 | headerMap.put(name, value); |
107 | } catch (Exception ex) { | 121 | } catch (Exception ex) |
122 | { | ||
108 | break; | 123 | break; |
109 | } | 124 | } |
110 | i++; | 125 | i++; |
111 | } | 126 | } |
112 | 127 | ||
113 | if (headerMap.containsKey("Subscription")) { | 128 | if (headerMap.containsKey("Subscription")) |
114 | if (headerMap.containsKey("Title")) { | 129 | { |
115 | if (headerMap.containsKey("Category")) { | 130 | if (headerMap.containsKey("Title")) |
131 | { | ||
132 | if (headerMap.containsKey("Category")) | ||
133 | { | ||
116 | Subscription s = new Subscription(); | 134 | Subscription s = new Subscription(); |
117 | s.setURL(headerMap.get("Subscription")); | 135 | s.setURL(headerMap.get("Subscription")); |
118 | s.setTitle(headerMap.get("Title")); | 136 | s.setTitle(headerMap.get("Title")); |
@@ -134,12 +152,19 @@ class SubscriptionFileThread implements Runnable { | |||
134 | } else { | 152 | } else { |
135 | status.setText("Error: Subscription file is not well-formed"); | 153 | status.setText("Error: Subscription file is not well-formed"); |
136 | } | 154 | } |
137 | } catch (IOException ex) { | 155 | } catch (FileNotFoundException ex) |
156 | { | ||
157 | status.setText("Error: Subscription File doesn't exist"); | ||
158 | } catch (IOException ex) | ||
159 | { | ||
138 | Logger.getLogger(SubscriptionFileThread.class.getName()).log(Level.SEVERE, null, ex); | 160 | Logger.getLogger(SubscriptionFileThread.class.getName()).log(Level.SEVERE, null, ex); |
139 | } finally { | 161 | } finally |
140 | try { | 162 | { |
163 | try | ||
164 | { | ||
141 | is.close(); | 165 | is.close(); |
142 | } catch (IOException ex) { | 166 | } catch (IOException ex) |
167 | { | ||
143 | Logger.getLogger(SubscriptionFileThread.class.getName()).log(Level.SEVERE, null, ex); | 168 | Logger.getLogger(SubscriptionFileThread.class.getName()).log(Level.SEVERE, null, ex); |
144 | } | 169 | } |
145 | } | 170 | } |