summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/games/kpacman/score.cpp4
-rw-r--r--noncore/todayplugins/stockticker/libstocks/http.c95
2 files changed, 49 insertions, 50 deletions
diff --git a/noncore/games/kpacman/score.cpp b/noncore/games/kpacman/score.cpp
index 6878b81..737f03b 100644
--- a/noncore/games/kpacman/score.cpp
+++ b/noncore/games/kpacman/score.cpp
@@ -114,261 +114,261 @@ void Score::paintEvent( QPaintEvent *e)
114 if (rect(1, 6*1.25, tr(" YOU HAVE ARCHIEVED ")).intersects(e->rect())) { 114 if (rect(1, 6*1.25, tr(" YOU HAVE ARCHIEVED ")).intersects(e->rect())) {
115 QPixmap pix = bitfont->text(tr(" YOU HAVE ARCHIEVED "), CYAN, BLACK); 115 QPixmap pix = bitfont->text(tr(" YOU HAVE ARCHIEVED "), CYAN, BLACK);
116 bitBlt(this, x(1), y(6*1.25), &pix); 116 bitBlt(this, x(1), y(6*1.25), &pix);
117 } 117 }
118 if (rect(1, 7*1.25, tr(" A SCORE IN THE TOP 10. ")).intersects(e->rect())) { 118 if (rect(1, 7*1.25, tr(" A SCORE IN THE TOP 10. ")).intersects(e->rect())) {
119 QPixmap pix = bitfont->text(tr(" A SCORE IN THE TOP 10. "), CYAN, BLACK); 119 QPixmap pix = bitfont->text(tr(" A SCORE IN THE TOP 10. "), CYAN, BLACK);
120 bitBlt(this, x(1), y(7*1.25), &pix); 120 bitBlt(this, x(1), y(7*1.25), &pix);
121 } 121 }
122 if (rect(1, 8*1.25, tr(" ")).intersects(e->rect())) { 122 if (rect(1, 8*1.25, tr(" ")).intersects(e->rect())) {
123 QPixmap pix = bitfont->text(tr(" "), CYAN, BLACK); 123 QPixmap pix = bitfont->text(tr(" "), CYAN, BLACK);
124 bitBlt(this, x(1), y(8*1.25), &pix); 124 bitBlt(this, x(1), y(8*1.25), &pix);
125 } 125 }
126 } 126 }
127 127
128 if (rect(1, 9.5*1.25, tr("RNK SCORE NAME DATE")).intersects(e->rect())) { 128 if (rect(1, 9.5*1.25, tr("RNK SCORE NAME DATE")).intersects(e->rect())) {
129 QPixmap pix = bitfont->text(tr("RNK SCORE NAME DATE"), WHITE, BLACK); 129 QPixmap pix = bitfont->text(tr("RNK SCORE NAME DATE"), WHITE, BLACK);
130 bitBlt(this, x(1), y(9.5*1.25), &pix); 130 bitBlt(this, x(1), y(9.5*1.25), &pix);
131 } 131 }
132 132
133 for (int i = 0; i < 10; i++) { 133 for (int i = 0; i < 10; i++) {
134 s.sprintf("%2d%9d %-3.3s %-8.8s", 134 s.sprintf("%2d%9d %-3.3s %-8.8s",
135 i+1, hallOfFame[i].points, hallOfFame[i].name.utf8().data(), 135 i+1, hallOfFame[i].points, hallOfFame[i].name.utf8().data(),
136 formatDate(hallOfFame[i].moment.date()).data()); 136 formatDate(hallOfFame[i].moment.date()).data());
137 if (rect(1, (11+i)*1.25, s).intersects(e->rect())) { 137 if (rect(1, (11+i)*1.25, s).intersects(e->rect())) {
138 QPixmap pix = bitfont->text(s, (i == lastScore) ? YELLOW : WHITE, BLACK); 138 QPixmap pix = bitfont->text(s, (i == lastScore) ? YELLOW : WHITE, BLACK);
139 bitBlt(this, x(1), y((11+i)*1.25), &pix); 139 bitBlt(this, x(1), y((11+i)*1.25), &pix);
140 } 140 }
141 } 141 }
142 142
143 if (cursor.x != -1 && cursor.y != -1 && cursor.on) { 143 if (cursor.x != -1 && cursor.y != -1 && cursor.on) {
144 if (rect(cursor.x, (cursor.y*1.25), cursor.chr).intersects(e->rect())) { 144 if (rect(cursor.x, (cursor.y*1.25), cursor.chr).intersects(e->rect())) {
145 QPixmap pix = bitfont->text(cursor.chr, BLACK, YELLOW); 145 QPixmap pix = bitfont->text(cursor.chr, BLACK, YELLOW);
146 bitBlt(this, x(cursor.x), y(cursor.y*1.25), &pix); 146 bitBlt(this, x(cursor.x), y(cursor.y*1.25), &pix);
147 } 147 }
148 } 148 }
149 149
150 if (paused) { 150 if (paused) {
151 151
152 QPixmap pix = bitfont->text(tr("PAUSED"), RED, BLACK); 152 QPixmap pix = bitfont->text(tr("PAUSED"), RED, BLACK);
153 QRect r = bitfont->rect(tr("PAUSED")); 153 QRect r = bitfont->rect(tr("PAUSED"));
154 r.moveCenter(QPoint(this->width()/2, this->height()/2)); 154 r.moveCenter(QPoint(this->width()/2, this->height()/2));
155 155
156 bitBlt(this, r.x(), r.y(), &pix); 156 bitBlt(this, r.x(), r.y(), &pix);
157 } 157 }
158} 158}
159 159
160void Score::timerEvent(QTimerEvent*) 160void Score::timerEvent(QTimerEvent*)
161{ 161{
162 cursor.on = !cursor.on; 162 cursor.on = !cursor.on;
163 163
164 if (paused) 164 if (paused)
165 return; 165 return;
166 166
167 if (cursor.x != -1 && cursor.y != -1) 167 if (cursor.x != -1 && cursor.y != -1)
168 repaint(rect(cursor.x, cursor.y*1.25, cursor.chr), FALSE); 168 repaint(rect(cursor.x, cursor.y*1.25, cursor.chr), FALSE);
169 scrollRepeat = FALSE; 169 scrollRepeat = FALSE;
170 170
171 if (lastPlayer == 0) 171 if (lastPlayer == 0)
172 repaint(rect(1, 0, tr(" 1UP ")), FALSE); 172 repaint(rect(1, 0, tr(" 1UP ")), FALSE);
173 173
174 if (lastPlayer == 1) 174 if (lastPlayer == 1)
175 repaint(rect(21, 0, tr(" 2UP ")), FALSE); 175 repaint(rect(21, 0, tr(" 2UP ")), FALSE);
176} 176}
177 177
178void Score::keyPressEvent(QKeyEvent *k) 178void Score::keyPressEvent(QKeyEvent *k)
179{ 179{
180 if (lastScore < 0 || lastPlayer < 0 || lastPlayer >= maxPlayer || paused) { 180 if (lastScore < 0 || lastPlayer < 0 || lastPlayer >= maxPlayer || paused) {
181 k->ignore(); 181 k->ignore();
182 return; 182 return;
183 } 183 }
184 184
185 int x = cursor.x; 185 int x = cursor.x;
186 int y = cursor.y; 186 int y = cursor.y;
187 187
188 uint key = k->key(); 188 uint key = k->key();
189 189
190 if (scrollRepeat && (key == UpKey || key == Key_Up || key == DownKey || key == Key_Down)) { 190 if (scrollRepeat && (key == UpKey || key == Key_Up || key == DownKey || key == Key_Down)) {
191 k->ignore(); 191 k->ignore();
192 return; 192 return;
193 } 193 }
194 194
195 if (key != Key_Return) { 195 if (key != Key_Return) {
196 if (key == RightKey || key == Key_Right) 196 if (key == RightKey || key == Key_Right)
197 if (++cursor.x > 16) 197 if (++cursor.x > 16)
198 cursor.x = 14; 198 cursor.x = 14;
199 if (key == LeftKey || key == Key_Left) 199 if (key == LeftKey || key == Key_Left)
200 if (--cursor.x < 14) 200 if (--cursor.x < 14)
201 cursor.x = 16; 201 cursor.x = 16;
202 if (key == UpKey || key == Key_Up) 202 if (key == UpKey || key == Key_Up)
203 if (cursor.chr.unicode() < bitfont->lastChar()) 203 if (cursor.chr.unicode() < bitfont->lastChar())
204 cursor.chr = cursor.chr.unicode()+1; 204 cursor.chr = cursor.chr.unicode()+1;
205 else 205 else
206 cursor.chr = bitfont->firstChar(); 206 cursor.chr = bitfont->firstChar();
207 if (key == DownKey || key == Key_Down) 207 if (key == DownKey || key == Key_Down)
208 if (cursor.chr.unicode() > bitfont->firstChar()) 208 if (cursor.chr.unicode() > bitfont->firstChar())
209 cursor.chr = cursor.chr.unicode()-1; 209 cursor.chr = cursor.chr.unicode()-1;
210 else 210 else
211 cursor.chr = bitfont->lastChar(); 211 cursor.chr = bitfont->lastChar();
212 212
213 if (cursor.x == x && cursor.y == y && 213 if (cursor.x == x && cursor.y == y &&
214 cursor.chr == hallOfFame[lastScore].name.at(cursor.x-14)) { 214 cursor.chr == hallOfFame[lastScore].name.at(cursor.x-14)) {
215 uint ascii = k->ascii(); 215 uint ascii = k->ascii();
216 216
217 if (ascii < bitfont->firstChar() || ascii > bitfont->lastChar()) 217 if (ascii < bitfont->firstChar() || ascii > bitfont->lastChar())
218 ascii = toupper(ascii); 218 ascii = toupper(ascii);
219 219
220 if (ascii >= bitfont->firstChar() && ascii <= bitfont->lastChar()) { 220 if (ascii >= bitfont->firstChar() && ascii <= bitfont->lastChar()) {
221 cursor.chr = ascii; 221 cursor.chr = ascii;
222 hallOfFame[lastScore].name.at(cursor.x-14) = cursor.chr; 222 hallOfFame[lastScore].name.at(cursor.x-14) = cursor.chr;
223 if (++cursor.x > 16) 223 if (++cursor.x > 16)
224 cursor.x = 14; 224 cursor.x = 14;
225 } 225 }
226 } 226 }
227 } 227 }
228 228
229 if (key == Key_Return) { 229 if (key == Key_Return) {
230 playerName[lastPlayer] = hallOfFame[lastScore].name; 230 playerName[lastPlayer] = hallOfFame[lastScore].name;
231 write(); 231 write();
232 read(); 232 read();
233 lastScore = -1; 233 lastScore = -1;
234 cursor.x = -1; 234 cursor.x = -1;
235 cursor.y = -1; 235 cursor.y = -1;
236// killTimers(); 236// killTimers();
237 emit toggleNew(); 237 emit toggleNew();
238 end(); 238 end();
239 } 239 }
240 240
241 if (x != cursor.x || y != cursor.y) { 241 if (x != cursor.x || y != cursor.y) {
242 if (cursor.x != -1) 242 if (cursor.x != -1 && lastScore >= 0)
243 cursor.chr = hallOfFame[lastScore].name.at(cursor.x-14); 243 cursor.chr = hallOfFame[lastScore].name.at(cursor.x-14);
244 scrollRepeat = FALSE; 244 scrollRepeat = FALSE;
245 repaint(rect(x, y*1.25, cursor.chr), FALSE); 245 repaint(rect(x, y*1.25, cursor.chr), FALSE);
246 } else 246 } else if (lastScore >= 0)
247 hallOfFame[lastScore].name.at(cursor.x-14) = cursor.chr; 247 hallOfFame[lastScore].name.at(cursor.x-14) = cursor.chr;
248 248
249 if (key == UpKey || key == Key_Up || key == DownKey || key == Key_Down) 249 if (key == UpKey || key == Key_Up || key == DownKey || key == Key_Down)
250 scrollRepeat = TRUE; 250 scrollRepeat = TRUE;
251 else 251 else
252 repaint(rect(cursor.x, cursor.y*1.25, cursor.chr), FALSE); 252 repaint(rect(cursor.x, cursor.y*1.25, cursor.chr), FALSE);
253} 253}
254 254
255void Score::initKeys() 255void Score::initKeys()
256{ 256{
257 APP_CONFIG_BEGIN( cfg ); 257 APP_CONFIG_BEGIN( cfg );
258 QString up("Up"); 258 QString up("Up");
259 up = cfg->readEntry("upKey", (const char*) up); 259 up = cfg->readEntry("upKey", (const char*) up);
260 UpKey = KAccel::stringToKey(up); 260 UpKey = KAccel::stringToKey(up);
261 261
262 QString down("Down"); 262 QString down("Down");
263 down = cfg->readEntry("downKey", (const char*) down); 263 down = cfg->readEntry("downKey", (const char*) down);
264 DownKey = KAccel::stringToKey(down); 264 DownKey = KAccel::stringToKey(down);
265 265
266 QString left("Left"); 266 QString left("Left");
267 left = cfg->readEntry("leftKey", (const char*) left); 267 left = cfg->readEntry("leftKey", (const char*) left);
268 LeftKey = KAccel::stringToKey(left); 268 LeftKey = KAccel::stringToKey(left);
269 269
270 QString right("Right"); 270 QString right("Right");
271 right = cfg->readEntry("rightKey", (const char*) right); 271 right = cfg->readEntry("rightKey", (const char*) right);
272 RightKey = KAccel::stringToKey(right); 272 RightKey = KAccel::stringToKey(right);
273 APP_CONFIG_END( cfg ); 273 APP_CONFIG_END( cfg );
274} 274}
275 275
276void Score::confTiming(bool defGroup) 276void Score::confTiming(bool defGroup)
277{ 277{
278 APP_CONFIG_BEGIN( cfg ); 278 APP_CONFIG_BEGIN( cfg );
279 if (defGroup || cfg->hasKey("CursorBlinkMS")) 279 if (defGroup || cfg->hasKey("CursorBlinkMS"))
280 cursorBlinkMS = cfg->readNumEntry("CursorBlinkMS", 250); 280 cursorBlinkMS = cfg->readNumEntry("CursorBlinkMS", 250);
281 if (defGroup || cfg->hasKey("HallOfFameMS")) 281 if (defGroup || cfg->hasKey("HallOfFameMS"))
282 hallOfFameMS = cfg->readNumEntry("HallOfFameMS", 7000); 282 hallOfFameMS = cfg->readNumEntry("HallOfFameMS", 7000);
283 if (defGroup || cfg->hasKey("AfterPauseMS")) 283 if (defGroup || cfg->hasKey("AfterPauseMS"))
284 afterPauseMS = cfg->readNumEntry("AfterPauseMS", 1000); 284 afterPauseMS = cfg->readNumEntry("AfterPauseMS", 1000);
285 APP_CONFIG_END( cfg ); 285 APP_CONFIG_END( cfg );
286} 286}
287 287
288void Score::confScheme() 288void Score::confScheme()
289{ 289{
290 APP_CONFIG_BEGIN( cfg ); 290 APP_CONFIG_BEGIN( cfg );
291 SAVE_CONFIG_GROUP( cfg, oldgroup ); 291 SAVE_CONFIG_GROUP( cfg, oldgroup );
292 QString newgroup; 292 QString newgroup;
293 293
294 // if not set, read mode and scheme from the configfile 294 // if not set, read mode and scheme from the configfile
295 if (mode == -1 && scheme == -1) { 295 if (mode == -1 && scheme == -1) {
296 scheme = cfg->readNumEntry("Scheme", -1); 296 scheme = cfg->readNumEntry("Scheme", -1);
297 mode = cfg->readNumEntry("Mode", -1); 297 mode = cfg->readNumEntry("Mode", -1);
298 298
299 // if mode is not set in the defGroup-group, lookup the scheme group 299 // if mode is not set in the defGroup-group, lookup the scheme group
300 if (scheme != -1 || mode == -1) { 300 if (scheme != -1 || mode == -1) {
301 newgroup.sprintf("Scheme %d", scheme); 301 newgroup.sprintf("Scheme %d", scheme);
302 cfg->setGroup(newgroup); 302 cfg->setGroup(newgroup);
303 303
304 mode = cfg->readNumEntry("Mode", -1); 304 mode = cfg->readNumEntry("Mode", -1);
305 RESTORE_CONFIG_GROUP( cfg, oldgroup ); 305 RESTORE_CONFIG_GROUP( cfg, oldgroup );
306 } 306 }
307 } 307 }
308 308
309 int oldCursorBlinkMS = cursorBlinkMS; 309 int oldCursorBlinkMS = cursorBlinkMS;
310 310
311 confTiming(); 311 confTiming();
312 312
313 if (mode != -1) { 313 if (mode != -1) {
314 newgroup.sprintf("Mode %d", mode); 314 newgroup.sprintf("Mode %d", mode);
315 cfg->setGroup(newgroup); 315 cfg->setGroup(newgroup);
316 316
317 confTiming(FALSE); 317 confTiming(FALSE);
318 } 318 }
319 319
320 if (scheme != -1) { 320 if (scheme != -1) {
321 newgroup.sprintf("Scheme %d", scheme); 321 newgroup.sprintf("Scheme %d", scheme);
322 cfg->setGroup(newgroup); 322 cfg->setGroup(newgroup);
323 323
324 confTiming(FALSE); 324 confTiming(FALSE);
325 } 325 }
326 326
327 if (cursorBlinkMS != oldCursorBlinkMS) { 327 if (cursorBlinkMS != oldCursorBlinkMS) {
328 if (cursorBlinkTimer) 328 if (cursorBlinkTimer)
329 killTimer(cursorBlinkTimer); 329 killTimer(cursorBlinkTimer);
330 cursorBlinkTimer = startTimer(cursorBlinkMS); 330 cursorBlinkTimer = startTimer(cursorBlinkMS);
331 } 331 }
332 332
333 RESTORE_CONFIG_GROUP( cfg, oldgroup ); 333 RESTORE_CONFIG_GROUP( cfg, oldgroup );
334 APP_CONFIG_END( cfg ); 334 APP_CONFIG_END( cfg );
335} 335}
336 336
337void Score::setScheme(int Scheme, int Mode, Bitfont *font) 337void Score::setScheme(int Scheme, int Mode, Bitfont *font)
338{ 338{
339 mode = Mode; 339 mode = Mode;
340 scheme = Scheme; 340 scheme = Scheme;
341 341
342 confScheme(); 342 confScheme();
343 343
344 bitfont = font; 344 bitfont = font;
345 345
346 for (int p = 0; p < maxPlayer; p++) 346 for (int p = 0; p < maxPlayer; p++)
347 for (uint i = 0; i < playerName[p].length(); i++) 347 for (uint i = 0; i < playerName[p].length(); i++)
348 if (playerName[p].at(i) < bitfont->firstChar() || 348 if (playerName[p].at(i) < bitfont->firstChar() ||
349 playerName[p].at(i) > bitfont->lastChar()) 349 playerName[p].at(i) > bitfont->lastChar())
350 playerName[p].at(i) = playerName[p].at(i).upper(); 350 playerName[p].at(i) = playerName[p].at(i).upper();
351 351
352 for (int i = 0; i < 10; i++) 352 for (int i = 0; i < 10; i++)
353 for (uint j = 0; j < hallOfFame[i].name.length(); j++) 353 for (uint j = 0; j < hallOfFame[i].name.length(); j++)
354 if (hallOfFame[i].name.at(j) < bitfont->firstChar() || 354 if (hallOfFame[i].name.at(j) < bitfont->firstChar() ||
355 hallOfFame[i].name.at(j) > bitfont->lastChar()) 355 hallOfFame[i].name.at(j) > bitfont->lastChar())
356 hallOfFame[i].name.at(j) = hallOfFame[i].name.at(j).upper(); 356 hallOfFame[i].name.at(j) = hallOfFame[i].name.at(j).upper();
357 357
358 if (cursor.chr.unicode() < bitfont->firstChar() || 358 if (cursor.chr.unicode() < bitfont->firstChar() ||
359 cursor.chr.unicode() > bitfont->lastChar()) 359 cursor.chr.unicode() > bitfont->lastChar())
360 cursor.chr = cursor.chr.upper(); 360 cursor.chr = cursor.chr.upper();
361} 361}
362 362
363void Score::set(int score) 363void Score::set(int score)
364{ 364{
365 set(score, 0); 365 set(score, 0);
366} 366}
367 367
368void Score::set(int score, int player) 368void Score::set(int score, int player)
369{ 369{
370 if (player < 0 || player >= maxPlayer) 370 if (player < 0 || player >= maxPlayer)
371 return; 371 return;
372 372
373 lastPlayer = player; 373 lastPlayer = player;
374 playerScore[lastPlayer] = score; 374 playerScore[lastPlayer] = score;
diff --git a/noncore/todayplugins/stockticker/libstocks/http.c b/noncore/todayplugins/stockticker/libstocks/http.c
index cc78ab7..155ce4b 100644
--- a/noncore/todayplugins/stockticker/libstocks/http.c
+++ b/noncore/todayplugins/stockticker/libstocks/http.c
@@ -1,303 +1,302 @@
1/* libstocks - Library to get current stock quotes from Yahoo Finance 1/* libstocks - Library to get current stock quotes from Yahoo Finance
2 * 2 *
3 * Copyright (C) 2000 Eric Laeuffer 3 * Copyright (C) 2000 Eric Laeuffer
4 * 4 *
5 * This library is free software; you can redistribute it and/or 5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Library General Public 6 * modify it under the terms of the GNU Library General Public
7 * License as published by the Free Software Foundation; either 7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version. 8 * version 2 of the License, or (at your option) any later version.
9 * 9 *
10 * This library is distributed in the hope that it will be useful, 10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Library General Public License for more details. 13 * Library General Public License for more details.
14 * 14 *
15 * You should have received a copy of the GNU Library General Public 15 * You should have received a copy of the GNU Library General Public
16 * License along with this library; if not, write to the 16 * License along with this library; if not, write to the
17 * Free Software Foundation, Inc., 59 Temple Place - Suite 330, 17 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 * Boston, MA 02111-1307, USA. 18 * Boston, MA 02111-1307, USA.
19 */ 19 */
20 20
21#define __HTTP_C__ 21#define __HTTP_C__
22#ifndef __UNIX__ 22#ifndef __UNIX__
23#define __UNIX__ 23#define __UNIX__
24#endif 24#endif
25 25
26#ifdef __UNIX__ 26#ifdef __UNIX__
27#include <sys/socket.h> 27#include <sys/socket.h>
28#include <netinet/in.h> 28#include <netinet/in.h>
29#include <arpa/inet.h> 29#include <arpa/inet.h>
30#include <netdb.h> 30#include <netdb.h>
31#include <unistd.h> 31#include <unistd.h>
32#elif __WINDOWS__ 32#elif __WINDOWS__
33#include <winsock.h> 33#include <winsock.h>
34#include <mbstring.h> 34#include <mbstring.h>
35#endif 35#endif
36 36
37#include <sys/types.h> 37#include <sys/types.h>
38#include <ctype.h> 38#include <ctype.h>
39#include <string.h> 39#include <string.h>
40#include <stdlib.h> 40#include <stdlib.h>
41#include <stdio.h> 41#include <stdio.h>
42 42
43#include "http.h" 43#include "http.h"
44#include "stocks.h" 44#include "stocks.h"
45 45
46#define BUF_SIZE 1024 46#define BUF_SIZE 1024
47#define HEADER_MAXBUF 512 47#define HEADER_MAXBUF 512
48 48
49/* pointer to proxy server name or NULL */ 49/* pointer to proxy server name or NULL */
50char *http_proxy_server=NULL; 50char *http_proxy_server=NULL;
51/* proxy server port number or 0 */ 51/* proxy server port number or 0 */
52int http_proxy_port=0; 52int http_proxy_port=0;
53 53
54/*****************************************************************************/ 54/*****************************************************************************/
55/* Gets the file from http://http_server/http_file */ 55/* Gets the file from http://http_server/http_file */
56/* This function is used to get quotes csv file from yahoo. */ 56/* This function is used to get quotes csv file from yahoo. */
57/* It allocates memory for the file and defines *pdata (the pointer of datas)*/ 57/* It allocates memory for the file and defines *pdata (the pointer of datas)*/
58/*****************************************************************************/ 58/*****************************************************************************/
59libstocks_return_code http_get(char *http_file, char *http_server, char **pdata) 59libstocks_return_code http_get(char *http_file, char *http_server, char **pdata)
60{ 60{
61 struct hostent *host; /* structs needed by socket */ 61 struct hostent *host; /* structs needed by socket */
62 struct sockaddr_in server; 62 struct sockaddr_in server;
63 int s; /* socket descriptor */ 63 int s; /* socket descriptor */
64 char header[HEADER_MAXBUF]; /* request header */ 64 char header[HEADER_MAXBUF]; /* request header */
65 int hlg; /* header length */ 65 int hlg; /* header length */
66 char buf[BUF_SIZE+1]; /* tempory buffer from socket read */ 66 char buf[BUF_SIZE+1]; /* tempory buffer from socket read */
67 int r; /* number of bytes read by read function */ 67 int r; /* number of bytes read by read function */
68 char *data=NULL; /* http server response */ 68 char *data=NULL; /* http server response */
69 int data_lgr; /* http server response length */ 69 int data_lgr; /* http server response length */
70 char *temp; /* pointer used to split header and csv */ 70 char *temp; /* pointer used to split header and csv */
71 int error_code; /* error code returned by http server */ 71 int error_code; /* error code returned by http server */
72 char *csv_ptr; /* pointer to the csv content */ 72 char *csv_ptr; /* pointer to the csv content */
73 int header_founded; /* test if header is founded */ 73 int header_founded; /* test if header is founded */
74 74
75#ifdef DEBUG 75#ifdef DEBUG
76 printf("*http_get\n"); 76 printf("*http_get\n");
77#endif 77#endif
78 78
79 /* get host info by name :*/ 79 /* get host info by name :*/
80 if ((host = gethostbyname( http_proxy_server ? http_proxy_server : http_server))) 80 if ((host = gethostbyname( http_proxy_server ? http_proxy_server : http_server)))
81 { 81 {
82 memset((char *) &server,0, sizeof(server)); 82 memset((char *) &server,0, sizeof(server));
83 memmove((char *) &server.sin_addr, host->h_addr, host->h_length); 83 memmove((char *) &server.sin_addr, host->h_addr, host->h_length);
84 server.sin_family = host->h_addrtype; 84 server.sin_family = host->h_addrtype;
85 server.sin_port = (unsigned short) htons( http_proxy_server ? http_proxy_port : 80 ); 85 server.sin_port = (unsigned short) htons( http_proxy_server ? http_proxy_port : 80 );
86 86
87 } else 87 }
88 { 88 else
89 89 {
90#ifdef DEBUG 90#ifdef DEBUG
91 printf(" gethostbyname : NOK\n"); 91 printf(" gethostbyname : NOK\n");
92#endif 92#endif
93 return ERRHOST; 93 return ERRHOST;
94 } 94 }
95 95
96 /* create socket */ 96 /* create socket */
97 if ((s = socket(AF_INET, SOCK_STREAM, 0)) < 0) 97 if ((s = socket(AF_INET, SOCK_STREAM, 0)) < 0)
98 { 98 {
99
100#ifdef DEBUG 99#ifdef DEBUG
101 printf(" create socket : NOK\n"); 100 printf(" create socket : NOK\n");
102#endif 101#endif
103 return ERRSOCK; 102 return ERRSOCK;
104 } 103 }
105 104
106 setsockopt(s, SOL_SOCKET, SO_KEEPALIVE, 0, 0); 105 setsockopt(s, SOL_SOCKET, SO_KEEPALIVE, 0, 0);
107 106
108 /* connect to server */ 107 /* connect to server */
109 if (connect(s, &server, sizeof(server)) < 0) 108 if (connect(s, &server, sizeof(server)) < 0)
110 { 109 {
111#ifdef DEBUG 110#ifdef DEBUG
112 printf(" connect to server : NOK\n"); 111 printf(" connect to server : NOK\n");
113#endif 112#endif
114 113
115#ifdef __UNIX__ 114#ifdef __UNIX__
116 close(s); 115 close(s);
117#elif __WINDOWS__ 116#elif __WINDOWS__
118 closesocket(s); 117 closesocket(s);
119#endif 118#endif
120 return ERRCONN; 119 return ERRCONN;
121 } 120 }
122 121
123 /* create header */ 122 /* create header */
124 if (http_proxy_server) 123 if (http_proxy_server)
125 { 124 {
126 sprintf(header,"GET http://%.128s:80%.256s HTTP/1.0\015\012\015\012", 125 sprintf(header,"GET http://%.128s:80%.256s HTTP/1.0\015\012\015\012",
127 http_server, http_file); 126 http_server, http_file);
128 } 127 }
129 else 128 else
130 { 129 {
131 sprintf(header,"GET %s HTTP/1.0\015\012\015\012",http_file); 130 sprintf(header,"GET %s HTTP/1.0\015\012\015\012",http_file);
132 } 131 }
133 132
134 hlg=strlen(header); 133 hlg=strlen(header);
135 134
136 /* send header */ 135 /* send header */
137#ifdef __UNIX__ 136#ifdef __UNIX__
138 if (write(s,header,hlg)!=hlg) 137 if (write(s,header,hlg)!=hlg)
139#elif __WINDOWS__ 138#elif __WINDOWS__
140 if (send(s,header,hlg, 0)!=hlg) 139 if (send(s,header,hlg, 0)!=hlg)
141#endif 140#endif
142 { 141 {
143#ifdef DEBUG 142#ifdef DEBUG
144 printf(" send header : NOK\n"); 143 printf(" send header : NOK\n");
145#endif 144#endif
146 return ERRWHEA; 145 return ERRWHEA;
147 } 146 }
148 147
149 data_lgr = 0; 148 data_lgr = 0;
150 r=1; 149 r=1;
151 while(r) 150 while(r)
152 { 151 {
153 /* Clear Buffer */ 152 /* Clear Buffer */
154 memset(buf,0,BUF_SIZE+1); 153 memset(buf,0,BUF_SIZE+1);
155 154
156#ifdef __UNIX__ 155#ifdef __UNIX__
157 r=read(s,buf,BUF_SIZE); 156 r=read(s,buf,BUF_SIZE);
158#elif __WINDOWS__ 157#elif __WINDOWS__
159 r=recv(s,buf,BUF_SIZE,0); 158 r=recv(s,buf,BUF_SIZE,0);
160#endif 159#endif
161 160
162 if (r) 161 if (r > 0)
163 { 162 {
164 if(!data_lgr) 163 if(!data_lgr)
165 { 164 {
166 if((data = malloc(r+1))==NULL) 165 if((data = malloc(r+1))==NULL)
167 { 166 {
168 fprintf(stderr,"Memory allocating error (%s line %d)\n" 167 fprintf(stderr,"Memory allocating error (%s line %d)\n",
169 ,__FILE__, __LINE__); 168 __FILE__, __LINE__);
170 exit(1); 169 exit(1);
171 } 170 }
172 171
173 memcpy(data,buf,r); 172 memcpy(data,buf,r);
174 data_lgr = r; 173 data_lgr = r;
175 data[r]=0; 174 data[r]=0;
176 } 175 }
177 else 176 else
178 { 177 {
179 if((temp = malloc(r+data_lgr+1))==NULL) 178 if((temp = malloc(r+data_lgr+1))==NULL)
180 { 179 {
181 fprintf(stderr,"Memory allocating error (%s line %d)\n" 180 fprintf(stderr,"Memory allocating error (%s line %d)\n",
182 ,__FILE__, __LINE__); 181 __FILE__, __LINE__);
183 exit(1); 182 exit(1);
184 } 183 }
185 memcpy(temp, data, data_lgr); 184 memcpy(temp, data, data_lgr);
186 memcpy(temp+data_lgr, buf, r); 185 memcpy(temp+data_lgr, buf, r);
187 temp[r+data_lgr]=0; 186 temp[r+data_lgr]=0;
188 data_lgr += r; 187 data_lgr += r;
189 free(data); 188 free(data);
190 data = temp; 189 data = temp;
191 } 190 }
192 } 191 }
193 } 192 }
194 193
195 /* close socket */ 194 /* close socket */
196#ifdef __UNIX__ 195#ifdef __UNIX__
197 close(s); 196 close(s);
198#elif __WINDOWS__ 197#elif __WINDOWS__
199 closesocket(s); 198 closesocket(s);
200#endif 199#endif
201 200
202#ifdef DEBUG 201#ifdef DEBUG
203 printf("%s\n", data); 202 printf("%s\n", data);
204#endif 203#endif
205 204
206 /* get headers to test status line */ 205 /* get headers to test status line */
207 /* and to split headers and content */ 206 /* and to split headers and content */
208 207
209 temp = data; 208 temp = data;
210 header_founded = 0; 209 header_founded = 0;
211 while( !header_founded ) 210 while( !header_founded )
212 { 211 {
213 if (!temp || *temp==0) return ERRRHEA; 212 if (!temp || *temp==0) return ERRRHEA;
214 213
215 if( *temp==0x0A ) 214 if( *temp==0x0A )
216 { 215 {
217 /* test if it is the header end */ 216 /* test if it is the header end */
218 temp ++; 217 temp ++;
219 if (*temp == 0x0D) temp++; 218 if (*temp == 0x0D) temp++;
220 if (*temp == 0x0A) header_founded = 1; 219 if (*temp == 0x0A) header_founded = 1;
221 } 220 }
222 else 221 else
223 temp++; 222 temp++;
224 } 223 }
225 224
226 *temp = 0; 225 *temp = 0;
227 temp++; 226 temp++;
228 227
229 sscanf(data,"HTTP/1.%*d %03d",&error_code); 228 sscanf(data,"HTTP/1.%*d %03d",&error_code);
230 229
231 if (error_code != 200) 230 if (error_code != 200)
232 { 231 {
233#ifdef DEBUG 232#ifdef DEBUG
234 printf(" HTTP error code : %d\n", error_code); 233 printf(" HTTP error code : %d\n", error_code);
235#endif 234#endif
236 free(data); 235 free(data);
237 return ERRPAHD; 236 return ERRPAHD;
238 } 237 }
239 238
240 if ((csv_ptr = malloc(strlen(temp)+1))==NULL) 239 if ((csv_ptr = malloc(strlen(temp)+1))==NULL)
241 { 240 {
242 free(data); 241 free(data);
243 fprintf(stderr,"Memory allocating error (%s line %d)\n" 242 fprintf(stderr,"Memory allocating error (%s line %d)\n",
244 ,__FILE__, __LINE__); 243 __FILE__, __LINE__);
245 exit(1); 244 exit(1);
246 } 245 }
247 246
248 memcpy(csv_ptr, temp, strlen(temp)+1); 247 memcpy(csv_ptr, temp, strlen(temp)+1);
249 free(data); 248 free(data);
250 249
251#ifdef DEBUG 250#ifdef DEBUG
252 printf(" CSV\n"); 251 printf(" CSV\n");
253 printf("%s,\n", csv_ptr); 252 printf("%s,\n", csv_ptr);
254#endif 253#endif
255 254
256 *pdata = csv_ptr; 255 *pdata = csv_ptr;
257 256
258 return 0; 257 return 0;
259} 258}
260 259
261/******************************************************************************/ 260/******************************************************************************/
262/* Set the proxy server to use */ 261/* Set the proxy server to use */
263/******************************************************************************/ 262/******************************************************************************/
264libstocks_return_code set_proxy(char *proxy) 263libstocks_return_code set_proxy(char *proxy)
265{ 264{
266 char *ptr; 265 char *ptr;
267 char c; 266 char c;
268 267
269#ifdef DEBUG 268#ifdef DEBUG
270 printf("*set_proxy\n"); 269 printf("*set_proxy\n");
271#endif 270#endif
272 271
273 /* Parse the proxy URL - It must start with http:// */ 272 /* Parse the proxy URL - It must start with http:// */
274#ifdef __UNIX__ 273#ifdef __UNIX__
275 if (strncasecmp("http://",proxy,7)) return ERRPROX; 274 if (strncasecmp("http://",proxy,7)) return ERRPROX;
276#elif __WINDOWS__ 275#elif __WINDOWS__
277 if (_mbsnbicmp("http://",proxy,7)) return ERRPROX; 276 if (_mbsnbicmp("http://",proxy,7)) return ERRPROX;
278#endif 277#endif
279 278
280 proxy+=7; 279 proxy+=7;
281 280
282 /* find ":" in the proxy url */ 281 /* find ":" in the proxy url */
283 ptr = proxy; 282 ptr = proxy;
284 for (c=*ptr; (c && c!=':');) c=*ptr++; 283 for (c=*ptr; (c && c!=':');) c=*ptr++;
285 284
286 /* ptr points just after the ":" or at the end of proxy if : not founded */ 285 /* ptr points just after the ":" or at the end of proxy if : not founded */
287 *(ptr-1)=0; /* clear the ":" */ 286 *(ptr-1)=0; /* clear the ":" */
288 287
289 http_proxy_server=strdup(proxy); 288 http_proxy_server=strdup(proxy);
290 289
291#ifdef DEBUG 290#ifdef DEBUG
292 printf("http_proxy_server : %s\n", http_proxy_server); 291 printf("http_proxy_server : %s\n", http_proxy_server);
293#endif 292#endif
294 293
295 /* get the port number of the url */ 294 /* get the port number of the url */
296 if (sscanf(ptr,"%d",&http_proxy_port)!=1) return ERRPROX; 295 if (sscanf(ptr,"%d",&http_proxy_port)!=1) return ERRPROX;
297 296
298#ifdef DEBUG 297#ifdef DEBUG
299 printf("http_proxy_port : %d\n", http_proxy_port); 298 printf("http_proxy_port : %d\n", http_proxy_port);
300#endif 299#endif
301 300
302 return 0; 301 return 0;
303} 302}