diff options
Diffstat (limited to 'src/httpget.cpp')
-rw-r--r-- | src/httpget.cpp | 76 |
1 files changed, 51 insertions, 25 deletions
diff --git a/src/httpget.cpp b/src/httpget.cpp index 529d814..ee1f29c 100644 --- a/src/httpget.cpp +++ b/src/httpget.cpp | |||
@@ -156,8 +156,8 @@ SBuffer *HttpGet::get() | |||
156 | //printf("Connection content:\n\n%s\n\n", sData.c_str() ); | 156 | //printf("Connection content:\n\n%s\n\n", sData.c_str() ); |
157 | 157 | ||
158 | Connection con; | 158 | Connection con; |
159 | //printf("Opening connection...\n"); | ||
159 | con.open( sHost.c_str(), nPort ); | 160 | con.open( sHost.c_str(), nPort ); |
160 | //printf("Connected, sending request.\n"); | ||
161 | { | 161 | { |
162 | int nSocket = con.getSocket(); | 162 | int nSocket = con.getSocket(); |
163 | fd_set rfds, wfds, efds; | 163 | fd_set rfds, wfds, efds; |
@@ -170,50 +170,74 @@ SBuffer *HttpGet::get() | |||
170 | FD_ZERO(&efds); | 170 | FD_ZERO(&efds); |
171 | FD_SET(nSocket, &efds); | 171 | FD_SET(nSocket, &efds); |
172 | 172 | ||
173 | retval = select( nSocket+1, &rfds, &wfds, &efds, NULL ); | 173 | struct timeval tv; |
174 | printf("About to write: sock=%d, r=%d, w=%d, e=%d, ret=%d\n", | 174 | tv.tv_sec = 4; |
175 | tv.tv_usec = 0; | ||
176 | |||
177 | //printf("Selecting on socket, can we read, write, etc?\n"); | ||
178 | retval = select( nSocket+1, &rfds, &wfds, &efds, &tv ); | ||
179 | /*printf("About to write: sock=%d, r=%d, w=%d, e=%d, ret=%d\n", | ||
175 | nSocket, | 180 | nSocket, |
176 | FD_ISSET( nSocket, &rfds ), | 181 | FD_ISSET( nSocket, &rfds ), |
177 | FD_ISSET( nSocket, &wfds ), | 182 | FD_ISSET( nSocket, &wfds ), |
178 | FD_ISSET( nSocket, &efds ), | 183 | FD_ISSET( nSocket, &efds ), |
179 | retval | 184 | retval |
180 | ); | 185 | );*/ |
186 | |||
187 | if( retval == 0 ) | ||
188 | { | ||
189 | //printf("Timeout on connection.\n"); | ||
190 | con.close(); | ||
191 | throw ExceptionBase("Connection Timeout on open.\n"); | ||
192 | } | ||
181 | 193 | ||
182 | } | 194 | } |
183 | con.appendOutput( sData.c_str(), sData.size() ); | 195 | con.appendOutput( sData.c_str(), sData.size() ); |
196 | //printf("Writing to socket...\n"); | ||
184 | con.writeOutput(); | 197 | con.writeOutput(); |
198 | //printf("Data written...\n"); | ||
185 | int nSec = 5; | 199 | int nSec = 5; |
186 | int nUSec = 0; | 200 | int nUSec = 0; |
187 | int nLastAmnt = con.getInputAmnt(); | 201 | int nLastAmnt = con.getInputAmnt(); |
188 | try | 202 | try |
189 | { | 203 | { |
190 | double dTotTime = 0.0; | 204 | double dTotTime = 0.0; |
191 | while( con.readInput( nSec, nUSec, &nSec, &nUSec ) ) | 205 | //printf("About to read input...\n"); |
192 | { | 206 | while( con.readInput( nSec, nUSec, &nSec, &nUSec ) ) |
193 | if( nLastAmnt == con.getInputAmnt() ) | ||
194 | { | ||
195 | if( nSec <= 0 && nUSec <= 0 ) | ||
196 | throw ExceptionBase("Connection Timeout.\n"); | ||
197 | if( nSec == 5 && nUSec == 0 ) | ||
198 | break; | ||
199 | } | ||
200 | else | ||
201 | { | 207 | { |
202 | dTotTime += (5.0-(nSec+nUSec/1000000.0)); | 208 | if( nLastAmnt == con.getInputAmnt() ) |
203 | printf("\rRead %db at %.2fkb/sec", | 209 | { |
204 | con.getInputAmnt(), | 210 | if( nSec <= 0 && nUSec <= 0 ) |
205 | ((double)(con.getInputAmnt())/1024.0) / dTotTime | 211 | { |
206 | ); | 212 | //printf("out of time, closing up.\n"); |
207 | fflush( stdout ); | 213 | con.close(); |
208 | nSec = 5; | 214 | throw ExceptionBase("Connection Timeout.\n"); |
209 | nUSec = 0; | 215 | } |
210 | nLastAmnt = con.getInputAmnt(); | 216 | if( nSec == 5 && nUSec == 0 ) |
217 | { | ||
218 | //printf("No new data, breaking.\n"); | ||
219 | break; | ||
220 | } | ||
221 | } | ||
222 | else | ||
223 | { | ||
224 | dTotTime += (5.0-(nSec+nUSec/1000000.0)); | ||
225 | printf("\rRead %db at %.2fkb/sec", | ||
226 | con.getInputAmnt(), | ||
227 | ((double)(con.getInputAmnt())/1024.0) / dTotTime | ||
228 | ); | ||
229 | fflush( stdout ); | ||
230 | nSec = 5; | ||
231 | nUSec = 0; | ||
232 | nLastAmnt = con.getInputAmnt(); | ||
233 | } | ||
211 | } | 234 | } |
212 | } | 235 | } |
213 | } | ||
214 | catch( ConnectionException &e ) | 236 | catch( ConnectionException &e ) |
215 | { | 237 | { |
216 | printf("ConnectionException: %s\n", e.what() ); | 238 | //con.close(); |
239 | if( strcmp( e.what(), "Connection closed" ) ) | ||
240 | printf("\nConnectionException: %s\n", e.what() ); | ||
217 | } | 241 | } |
218 | 242 | ||
219 | int total = con.getInputAmnt(); | 243 | int total = con.getInputAmnt(); |
@@ -232,6 +256,8 @@ SBuffer *HttpGet::get() | |||
232 | } | 256 | } |
233 | con.close(); | 257 | con.close(); |
234 | 258 | ||
259 | //printf("\n\n%s\n\n", dat ); | ||
260 | |||
235 | throw ExceptionBase("Something went wrong, incomplete response? fix this.\n"); | 261 | throw ExceptionBase("Something went wrong, incomplete response? fix this.\n"); |
236 | } | 262 | } |
237 | 263 | ||