about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorKelly Rauchenberger <fefferburbia@gmail.com>2008-08-08 20:04:36 +0000
committerKelly Rauchenberger <fefferburbia@gmail.com>2008-08-08 20:04:36 +0000
commite34e14ea3a024862c9ffd557f322d7720882a515 (patch)
tree13d775e7c90bd432db4909ba71ff47d6d63c584c
parent0ec867ce5421402d4c3501697c9f0b0991cd8b86 (diff)
downloadinstadisc-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
-rw-r--r--client/trunk/src/com/fourisland/instadisc/InstaDiscThread.java59
-rw-r--r--client/trunk/src/com/fourisland/instadisc/Item/SubscriptionFile.java69
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 {
56class HandleItemThread implements Runnable { 62class 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 }