-rw-r--r-- | noncore/todayplugins/stockticker/libstocks/csv.c | 2 | ||||
-rw-r--r-- | noncore/todayplugins/stockticker/libstocks/http.c | 2 |
2 files changed, 4 insertions, 0 deletions
diff --git a/noncore/todayplugins/stockticker/libstocks/csv.c b/noncore/todayplugins/stockticker/libstocks/csv.c index f45af52..6170bed 100644 --- a/noncore/todayplugins/stockticker/libstocks/csv.c +++ b/noncore/todayplugins/stockticker/libstocks/csv.c | |||
@@ -1,214 +1,216 @@ | |||
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 __CSV_C__ | 21 | #define __CSV_C__ |
22 | #ifndef __UNIX__ | ||
22 | #define __UNIX__ | 23 | #define __UNIX__ |
24 | #endif | ||
23 | 25 | ||
24 | #include <string.h> | 26 | #include <string.h> |
25 | #include <stdlib.h> | 27 | #include <stdlib.h> |
26 | #include <stdio.h> | 28 | #include <stdio.h> |
27 | 29 | ||
28 | #ifdef __WINDOWS__ | 30 | #ifdef __WINDOWS__ |
29 | #include <mbstring.h> | 31 | #include <mbstring.h> |
30 | #endif | 32 | #endif |
31 | 33 | ||
32 | #include "csv.h" | 34 | #include "csv.h" |
33 | #include "stocks.h" | 35 | #include "stocks.h" |
34 | #include "lists.h" | 36 | #include "lists.h" |
35 | 37 | ||
36 | #define DATE_LENGTH 7 /*YYMMDD*/ | 38 | #define DATE_LENGTH 7 /*YYMMDD*/ |
37 | 39 | ||
38 | const char *months[12]= | 40 | const char *months[12]= |
39 | { | 41 | { |
40 | "Jan", | 42 | "Jan", |
41 | "Feb", | 43 | "Feb", |
42 | "Mar", | 44 | "Mar", |
43 | "Apr", | 45 | "Apr", |
44 | "May", | 46 | "May", |
45 | "Jun", | 47 | "Jun", |
46 | "Jul", | 48 | "Jul", |
47 | "Aug", | 49 | "Aug", |
48 | "Sep", | 50 | "Sep", |
49 | "Oct", | 51 | "Oct", |
50 | "Nov", | 52 | "Nov", |
51 | "Dec" | 53 | "Dec" |
52 | }; | 54 | }; |
53 | 55 | ||
54 | /*****************************************************************************/ | 56 | /*****************************************************************************/ |
55 | /* Replacement of the strtok function. This one forgets "delim" when it is */ | 57 | /* Replacement of the strtok function. This one forgets "delim" when it is */ |
56 | /* between two commas. */ | 58 | /* between two commas. */ |
57 | /* Thanks to Julio Lucas who has told me the bug and has proposed me a patch */ | 59 | /* Thanks to Julio Lucas who has told me the bug and has proposed me a patch */ |
58 | /*****************************************************************************/ | 60 | /*****************************************************************************/ |
59 | char *csv_strtok(char *s, char *delim) | 61 | char *csv_strtok(char *s, char *delim) |
60 | { | 62 | { |
61 | static char *next=NULL; | 63 | static char *next=NULL; |
62 | char *temp, *first; | 64 | char *temp, *first; |
63 | int comma=0; | 65 | int comma=0; |
64 | 66 | ||
65 | if (s!=NULL) first=s; | 67 | if (s!=NULL) first=s; |
66 | else first=next; | 68 | else first=next; |
67 | 69 | ||
68 | temp=first; | 70 | temp=first; |
69 | if (*temp=='\0') return NULL; | 71 | if (*temp=='\0') return NULL; |
70 | 72 | ||
71 | while (*temp!='\0' && ((*temp!=*delim) || comma)) | 73 | while (*temp!='\0' && ((*temp!=*delim) || comma)) |
72 | { | 74 | { |
73 | if (*temp=='"') comma ^= 1; | 75 | if (*temp=='"') comma ^= 1; |
74 | temp++; | 76 | temp++; |
75 | } | 77 | } |
76 | 78 | ||
77 | if (*temp=='\0') next=temp; | 79 | if (*temp=='\0') next=temp; |
78 | else | 80 | else |
79 | { | 81 | { |
80 | *temp='\0'; | 82 | *temp='\0'; |
81 | next=temp+1; | 83 | next=temp+1; |
82 | } | 84 | } |
83 | 85 | ||
84 | return first; | 86 | return first; |
85 | } | 87 | } |
86 | 88 | ||
87 | /*****************************************************************************/ | 89 | /*****************************************************************************/ |
88 | /* Parses the csv file and return a list of stocks structure. */ | 90 | /* Parses the csv file and return a list of stocks structure. */ |
89 | /* *csv points on the csv file in memory */ | 91 | /* *csv points on the csv file in memory */ |
90 | /* count defines the country, because csv depends on the country */ | 92 | /* count defines the country, because csv depends on the country */ |
91 | /*****************************************************************************/ | 93 | /*****************************************************************************/ |
92 | stock *parse_csv_file(char *csv) | 94 | stock *parse_csv_file(char *csv) |
93 | { | 95 | { |
94 | char *line; | 96 | char *line; |
95 | char *end_line; | 97 | char *end_line; |
96 | 98 | ||
97 | char *ptr; | 99 | char *ptr; |
98 | 100 | ||
99 | char *date; | 101 | char *date; |
100 | char *time; | 102 | char *time; |
101 | char *name; | 103 | char *name; |
102 | char *symbol; | 104 | char *symbol; |
103 | 105 | ||
104 | stock *StockPtr=NULL; | 106 | stock *StockPtr=NULL; |
105 | stock *LastStockPtr=NULL; | 107 | stock *LastStockPtr=NULL; |
106 | 108 | ||
107 | /* Used to return the pointer to the list */ | 109 | /* Used to return the pointer to the list */ |
108 | stock *FirstStockPtr=NULL; | 110 | stock *FirstStockPtr=NULL; |
109 | 111 | ||
110 | /* used to see if symbol is valid */ | 112 | /* used to see if symbol is valid */ |
111 | int valid; | 113 | int valid; |
112 | char *test; | 114 | char *test; |
113 | 115 | ||
114 | line = csv; | 116 | line = csv; |
115 | end_line = csv; | 117 | end_line = csv; |
116 | 118 | ||
117 | while ((end_line = strstr(line, "\n"))) | 119 | while ((end_line = strstr(line, "\n"))) |
118 | { | 120 | { |
119 | *end_line = 0; | 121 | *end_line = 0; |
120 | 122 | ||
121 | /* Check if symbol valid */ | 123 | /* Check if symbol valid */ |
122 | /* if 1 "N/A" then ok because Indices have N/A for volume */ | 124 | /* if 1 "N/A" then ok because Indices have N/A for volume */ |
123 | /* if 4 "N/A" then ok because Mutual funds have */ | 125 | /* if 4 "N/A" then ok because Mutual funds have */ |
124 | /* if 5 "N/A" then ok because currencies have */ | 126 | /* if 5 "N/A" then ok because currencies have */ |
125 | /* So if >5 then stock not valid */ | 127 | /* So if >5 then stock not valid */ |
126 | 128 | ||
127 | test = line; | 129 | test = line; |
128 | valid = 0; | 130 | valid = 0; |
129 | while ( (test = strstr(test, "N/A")) ) | 131 | while ( (test = strstr(test, "N/A")) ) |
130 | { | 132 | { |
131 | valid ++; | 133 | valid ++; |
132 | test = test +3; | 134 | test = test +3; |
133 | } | 135 | } |
134 | 136 | ||
135 | if (valid < 6) | 137 | if (valid < 6) |
136 | { | 138 | { |
137 | /* This Symbol is valid */ | 139 | /* This Symbol is valid */ |
138 | 140 | ||
139 | StockPtr = malloc_stock(); | 141 | StockPtr = malloc_stock(); |
140 | 142 | ||
141 | ptr = csv_strtok(line, ","); | 143 | ptr = csv_strtok(line, ","); |
142 | if (!ptr) return 0; | 144 | if (!ptr) return 0; |
143 | 145 | ||
144 | symbol = (char *)malloc(strlen(ptr)+1); | 146 | symbol = (char *)malloc(strlen(ptr)+1); |
145 | if (symbol==NULL) | 147 | if (symbol==NULL) |
146 | { | 148 | { |
147 | fprintf(stderr,"Memory allocating error (%s line %d)\n" | 149 | fprintf(stderr,"Memory allocating error (%s line %d)\n" |
148 | ,__FILE__, __LINE__); | 150 | ,__FILE__, __LINE__); |
149 | exit(1); | 151 | exit(1); |
150 | } | 152 | } |
151 | strcpy((char *)(symbol), ptr); | 153 | strcpy((char *)(symbol), ptr); |
152 | StockPtr->Symbol = symbol; | 154 | StockPtr->Symbol = symbol; |
153 | 155 | ||
154 | ptr = csv_strtok(NULL, ","); | 156 | ptr = csv_strtok(NULL, ","); |
155 | if (!ptr) return 0; | 157 | if (!ptr) return 0; |
156 | 158 | ||
157 | name = (char *)malloc(strlen(ptr)+1); | 159 | name = (char *)malloc(strlen(ptr)+1); |
158 | if (name==NULL) | 160 | if (name==NULL) |
159 | { | 161 | { |
160 | fprintf(stderr,"Memory allocating error (%s line %d)\n" | 162 | fprintf(stderr,"Memory allocating error (%s line %d)\n" |
161 | ,__FILE__, __LINE__); | 163 | ,__FILE__, __LINE__); |
162 | exit(1); | 164 | exit(1); |
163 | } | 165 | } |
164 | strcpy((char *)(name), ptr); | 166 | strcpy((char *)(name), ptr); |
165 | StockPtr->Name = name; | 167 | StockPtr->Name = name; |
166 | 168 | ||
167 | ptr = csv_strtok(NULL, ","); | 169 | ptr = csv_strtok(NULL, ","); |
168 | if (!ptr) return 0; | 170 | if (!ptr) return 0; |
169 | sscanf(ptr,"%f",&(StockPtr->CurrentPrice)); | 171 | sscanf(ptr,"%f",&(StockPtr->CurrentPrice)); |
170 | 172 | ||
171 | ptr = csv_strtok(NULL, ","); | 173 | ptr = csv_strtok(NULL, ","); |
172 | if (!ptr) return 0; | 174 | if (!ptr) return 0; |
173 | 175 | ||
174 | date = (char *)malloc(strlen(ptr)+1); | 176 | date = (char *)malloc(strlen(ptr)+1); |
175 | if (date==NULL) | 177 | if (date==NULL) |
176 | { | 178 | { |
177 | fprintf(stderr,"Memory allocating error (%s line %d)\n" | 179 | fprintf(stderr,"Memory allocating error (%s line %d)\n" |
178 | ,__FILE__, __LINE__); | 180 | ,__FILE__, __LINE__); |
179 | exit(1); | 181 | exit(1); |
180 | } | 182 | } |
181 | strcpy((char *)(date), ptr); | 183 | strcpy((char *)(date), ptr); |
182 | StockPtr->Date = date; | 184 | StockPtr->Date = date; |
183 | 185 | ||
184 | ptr = csv_strtok(NULL, ","); | 186 | ptr = csv_strtok(NULL, ","); |
185 | if (!ptr) return 0; | 187 | if (!ptr) return 0; |
186 | 188 | ||
187 | time = (char *)malloc(strlen(ptr)+1); | 189 | time = (char *)malloc(strlen(ptr)+1); |
188 | if (time==NULL) | 190 | if (time==NULL) |
189 | { | 191 | { |
190 | fprintf(stderr,"Memory allocating error (%s line %d)\n" | 192 | fprintf(stderr,"Memory allocating error (%s line %d)\n" |
191 | ,__FILE__, __LINE__); | 193 | ,__FILE__, __LINE__); |
192 | exit(1); | 194 | exit(1); |
193 | } | 195 | } |
194 | strcpy((char *)(time), ptr); | 196 | strcpy((char *)(time), ptr); |
195 | StockPtr->Time = time; | 197 | StockPtr->Time = time; |
196 | 198 | ||
197 | ptr = csv_strtok(NULL, ","); | 199 | ptr = csv_strtok(NULL, ","); |
198 | if (!ptr) return 0; | 200 | if (!ptr) return 0; |
199 | sscanf(ptr,"%f",&(StockPtr->Variation)); | 201 | sscanf(ptr,"%f",&(StockPtr->Variation)); |
200 | 202 | ||
201 | StockPtr->Pourcentage = 100 * StockPtr->Variation / | 203 | StockPtr->Pourcentage = 100 * StockPtr->Variation / |
202 | (StockPtr->CurrentPrice - StockPtr->Variation); | 204 | (StockPtr->CurrentPrice - StockPtr->Variation); |
203 | 205 | ||
204 | StockPtr->LastPrice = StockPtr->CurrentPrice - StockPtr->Variation; | 206 | StockPtr->LastPrice = StockPtr->CurrentPrice - StockPtr->Variation; |
205 | 207 | ||
206 | ptr = csv_strtok(NULL, ","); | 208 | ptr = csv_strtok(NULL, ","); |
207 | if (!ptr) return 0; | 209 | if (!ptr) return 0; |
208 | sscanf(ptr,"%f",&(StockPtr->OpenPrice)); | 210 | sscanf(ptr,"%f",&(StockPtr->OpenPrice)); |
209 | 211 | ||
210 | ptr = csv_strtok(NULL, ","); | 212 | ptr = csv_strtok(NULL, ","); |
211 | if (!ptr) return 0; | 213 | if (!ptr) return 0; |
212 | sscanf(ptr,"%f",&(StockPtr->MaxPrice)); | 214 | sscanf(ptr,"%f",&(StockPtr->MaxPrice)); |
213 | 215 | ||
214 | ptr = csv_strtok(NULL, ","); | 216 | ptr = csv_strtok(NULL, ","); |
diff --git a/noncore/todayplugins/stockticker/libstocks/http.c b/noncore/todayplugins/stockticker/libstocks/http.c index 3078746..2f38f8a 100644 --- a/noncore/todayplugins/stockticker/libstocks/http.c +++ b/noncore/todayplugins/stockticker/libstocks/http.c | |||
@@ -1,214 +1,216 @@ | |||
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 | #define __UNIX__ | 23 | #define __UNIX__ |
24 | #endif | ||
23 | 25 | ||
24 | #ifdef __UNIX__ | 26 | #ifdef __UNIX__ |
25 | #include <sys/socket.h> | 27 | #include <sys/socket.h> |
26 | #include <netinet/in.h> | 28 | #include <netinet/in.h> |
27 | #include <arpa/inet.h> | 29 | #include <arpa/inet.h> |
28 | #include <netdb.h> | 30 | #include <netdb.h> |
29 | #include <unistd.h> | 31 | #include <unistd.h> |
30 | #elif __WINDOWS__ | 32 | #elif __WINDOWS__ |
31 | #include <winsock.h> | 33 | #include <winsock.h> |
32 | #include <mbstring.h> | 34 | #include <mbstring.h> |
33 | #endif | 35 | #endif |
34 | 36 | ||
35 | #include <sys/types.h> | 37 | #include <sys/types.h> |
36 | #include <ctype.h> | 38 | #include <ctype.h> |
37 | #include <string.h> | 39 | #include <string.h> |
38 | #include <stdlib.h> | 40 | #include <stdlib.h> |
39 | #include <stdio.h> | 41 | #include <stdio.h> |
40 | 42 | ||
41 | #include "http.h" | 43 | #include "http.h" |
42 | #include "stocks.h" | 44 | #include "stocks.h" |
43 | 45 | ||
44 | #define BUF_SIZE 1024 | 46 | #define BUF_SIZE 1024 |
45 | #define HEADER_MAXBUF 512 | 47 | #define HEADER_MAXBUF 512 |
46 | 48 | ||
47 | /* pointer to proxy server name or NULL */ | 49 | /* pointer to proxy server name or NULL */ |
48 | char *http_proxy_server=NULL; | 50 | char *http_proxy_server=NULL; |
49 | /* proxy server port number or 0 */ | 51 | /* proxy server port number or 0 */ |
50 | int http_proxy_port=0; | 52 | int http_proxy_port=0; |
51 | 53 | ||
52 | /*****************************************************************************/ | 54 | /*****************************************************************************/ |
53 | /* Gets the file from http://http_server/http_file */ | 55 | /* Gets the file from http://http_server/http_file */ |
54 | /* This function is used to get quotes csv file from yahoo. */ | 56 | /* This function is used to get quotes csv file from yahoo. */ |
55 | /* 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)*/ |
56 | /*****************************************************************************/ | 58 | /*****************************************************************************/ |
57 | libstocks_return_code http_get(char *http_file, char *http_server, char **pdata) | 59 | libstocks_return_code http_get(char *http_file, char *http_server, char **pdata) |
58 | { | 60 | { |
59 | struct hostent *host; /* structs needed by socket */ | 61 | struct hostent *host; /* structs needed by socket */ |
60 | struct sockaddr_in server; | 62 | struct sockaddr_in server; |
61 | int s; /* socket descriptor */ | 63 | int s; /* socket descriptor */ |
62 | char header[HEADER_MAXBUF]; /* request header */ | 64 | char header[HEADER_MAXBUF]; /* request header */ |
63 | int hlg; /* header length */ | 65 | int hlg; /* header length */ |
64 | char buf[BUF_SIZE+1]; /* tempory buffer from socket read */ | 66 | char buf[BUF_SIZE+1]; /* tempory buffer from socket read */ |
65 | int r; /* number of bytes read by read function */ | 67 | int r; /* number of bytes read by read function */ |
66 | char *data=NULL; /* http server response */ | 68 | char *data=NULL; /* http server response */ |
67 | int data_lgr; /* http server response length */ | 69 | int data_lgr; /* http server response length */ |
68 | char *temp; /* pointer used to split header and csv */ | 70 | char *temp; /* pointer used to split header and csv */ |
69 | int error_code; /* error code returned by http server */ | 71 | int error_code; /* error code returned by http server */ |
70 | char *csv_ptr; /* pointer to the csv content */ | 72 | char *csv_ptr; /* pointer to the csv content */ |
71 | int header_founded; /* test if header is founded */ | 73 | int header_founded; /* test if header is founded */ |
72 | 74 | ||
73 | #ifdef DEBUG | 75 | #ifdef DEBUG |
74 | printf("*http_get\n"); | 76 | printf("*http_get\n"); |
75 | #endif | 77 | #endif |
76 | 78 | ||
77 | /* get host info by name :*/ | 79 | /* get host info by name :*/ |
78 | if ((host = gethostbyname( http_proxy_server ? http_proxy_server : http_server))) | 80 | if ((host = gethostbyname( http_proxy_server ? http_proxy_server : http_server))) |
79 | { | 81 | { |
80 | memset((char *) &server,0, sizeof(server)); | 82 | memset((char *) &server,0, sizeof(server)); |
81 | memmove((char *) &server.sin_addr, host->h_addr, host->h_length); | 83 | memmove((char *) &server.sin_addr, host->h_addr, host->h_length); |
82 | server.sin_family = host->h_addrtype; | 84 | server.sin_family = host->h_addrtype; |
83 | 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 ); |
84 | 86 | ||
85 | } else | 87 | } else |
86 | { | 88 | { |
87 | 89 | ||
88 | #ifdef DEBUG | 90 | #ifdef DEBUG |
89 | printf(" gethostbyname : NOK\n"); | 91 | printf(" gethostbyname : NOK\n"); |
90 | #endif | 92 | #endif |
91 | return ERRHOST; | 93 | return ERRHOST; |
92 | } | 94 | } |
93 | 95 | ||
94 | /* create socket */ | 96 | /* create socket */ |
95 | if ((s = socket(AF_INET, SOCK_STREAM, 0)) < 0) | 97 | if ((s = socket(AF_INET, SOCK_STREAM, 0)) < 0) |
96 | { | 98 | { |
97 | 99 | ||
98 | #ifdef DEBUG | 100 | #ifdef DEBUG |
99 | printf(" create socket : NOK\n"); | 101 | printf(" create socket : NOK\n"); |
100 | #endif | 102 | #endif |
101 | return ERRSOCK; | 103 | return ERRSOCK; |
102 | } | 104 | } |
103 | 105 | ||
104 | setsockopt(s, SOL_SOCKET, SO_KEEPALIVE, 0, 0); | 106 | setsockopt(s, SOL_SOCKET, SO_KEEPALIVE, 0, 0); |
105 | 107 | ||
106 | /* connect to server */ | 108 | /* connect to server */ |
107 | if (connect(s, &server, sizeof(server)) < 0) | 109 | if (connect(s, &server, sizeof(server)) < 0) |
108 | { | 110 | { |
109 | #ifdef DEBUG | 111 | #ifdef DEBUG |
110 | printf(" connect to server : NOK\n"); | 112 | printf(" connect to server : NOK\n"); |
111 | #endif | 113 | #endif |
112 | 114 | ||
113 | #ifdef __UNIX__ | 115 | #ifdef __UNIX__ |
114 | close(s); | 116 | close(s); |
115 | #elif __WINDOWS__ | 117 | #elif __WINDOWS__ |
116 | closesocket(s); | 118 | closesocket(s); |
117 | #endif | 119 | #endif |
118 | return ERRCONN; | 120 | return ERRCONN; |
119 | } | 121 | } |
120 | 122 | ||
121 | /* create header */ | 123 | /* create header */ |
122 | if (http_proxy_server) | 124 | if (http_proxy_server) |
123 | { | 125 | { |
124 | sprintf(header,"GET http://%.128s:80%.256s HTTP/1.0\015\012\015\012", | 126 | sprintf(header,"GET http://%.128s:80%.256s HTTP/1.0\015\012\015\012", |
125 | http_server, http_file); | 127 | http_server, http_file); |
126 | } | 128 | } |
127 | else | 129 | else |
128 | { | 130 | { |
129 | sprintf(header,"GET %s HTTP/1.0\015\012\015\012",http_file); | 131 | sprintf(header,"GET %s HTTP/1.0\015\012\015\012",http_file); |
130 | } | 132 | } |
131 | 133 | ||
132 | hlg=strlen(header); | 134 | hlg=strlen(header); |
133 | 135 | ||
134 | /* send header */ | 136 | /* send header */ |
135 | #ifdef __UNIX__ | 137 | #ifdef __UNIX__ |
136 | if (write(s,header,hlg)!=hlg) | 138 | if (write(s,header,hlg)!=hlg) |
137 | #elif __WINDOWS__ | 139 | #elif __WINDOWS__ |
138 | if (send(s,header,hlg, 0)!=hlg) | 140 | if (send(s,header,hlg, 0)!=hlg) |
139 | #endif | 141 | #endif |
140 | { | 142 | { |
141 | #ifdef DEBUG | 143 | #ifdef DEBUG |
142 | printf(" send header : NOK\n"); | 144 | printf(" send header : NOK\n"); |
143 | #endif | 145 | #endif |
144 | return ERRWHEA; | 146 | return ERRWHEA; |
145 | } | 147 | } |
146 | 148 | ||
147 | data_lgr = 0; | 149 | data_lgr = 0; |
148 | r=1; | 150 | r=1; |
149 | while(r) | 151 | while(r) |
150 | { | 152 | { |
151 | /* Clear Buffer */ | 153 | /* Clear Buffer */ |
152 | memset(buf,0,BUF_SIZE+1); | 154 | memset(buf,0,BUF_SIZE+1); |
153 | 155 | ||
154 | #ifdef __UNIX__ | 156 | #ifdef __UNIX__ |
155 | r=read(s,buf,BUF_SIZE); | 157 | r=read(s,buf,BUF_SIZE); |
156 | #elif __WINDOWS__ | 158 | #elif __WINDOWS__ |
157 | r=recv(s,buf,BUF_SIZE,0); | 159 | r=recv(s,buf,BUF_SIZE,0); |
158 | #endif | 160 | #endif |
159 | 161 | ||
160 | if (r) | 162 | if (r) |
161 | { | 163 | { |
162 | if(!data_lgr) | 164 | if(!data_lgr) |
163 | { | 165 | { |
164 | if((data = malloc(r+1))==NULL) | 166 | if((data = malloc(r+1))==NULL) |
165 | { | 167 | { |
166 | fprintf(stderr,"Memory allocating error (%s line %d)\n" | 168 | fprintf(stderr,"Memory allocating error (%s line %d)\n" |
167 | ,__FILE__, __LINE__); | 169 | ,__FILE__, __LINE__); |
168 | exit(1); | 170 | exit(1); |
169 | } | 171 | } |
170 | 172 | ||
171 | memcpy(data,buf,r); | 173 | memcpy(data,buf,r); |
172 | data_lgr = r; | 174 | data_lgr = r; |
173 | data[r]=0; | 175 | data[r]=0; |
174 | } | 176 | } |
175 | else | 177 | else |
176 | { | 178 | { |
177 | if((temp = malloc(r+data_lgr+1))==NULL) | 179 | if((temp = malloc(r+data_lgr+1))==NULL) |
178 | { | 180 | { |
179 | fprintf(stderr,"Memory allocating error (%s line %d)\n" | 181 | fprintf(stderr,"Memory allocating error (%s line %d)\n" |
180 | ,__FILE__, __LINE__); | 182 | ,__FILE__, __LINE__); |
181 | exit(1); | 183 | exit(1); |
182 | } | 184 | } |
183 | memcpy(temp, data, data_lgr); | 185 | memcpy(temp, data, data_lgr); |
184 | memcpy(temp+data_lgr, buf, r); | 186 | memcpy(temp+data_lgr, buf, r); |
185 | temp[r+data_lgr]=0; | 187 | temp[r+data_lgr]=0; |
186 | data_lgr += r; | 188 | data_lgr += r; |
187 | free(data); | 189 | free(data); |
188 | data = temp; | 190 | data = temp; |
189 | } | 191 | } |
190 | } | 192 | } |
191 | } | 193 | } |
192 | 194 | ||
193 | /* close socket */ | 195 | /* close socket */ |
194 | #ifdef __UNIX__ | 196 | #ifdef __UNIX__ |
195 | close(s); | 197 | close(s); |
196 | #elif __WINDOWS__ | 198 | #elif __WINDOWS__ |
197 | closesocket(s); | 199 | closesocket(s); |
198 | #endif | 200 | #endif |
199 | 201 | ||
200 | #ifdef DEBUG | 202 | #ifdef DEBUG |
201 | printf("%s\n", data); | 203 | printf("%s\n", data); |
202 | #endif | 204 | #endif |
203 | 205 | ||
204 | /* get headers to test status line */ | 206 | /* get headers to test status line */ |
205 | /* and to split headers and content */ | 207 | /* and to split headers and content */ |
206 | 208 | ||
207 | temp = data; | 209 | temp = data; |
208 | header_founded = 0; | 210 | header_founded = 0; |
209 | while( !header_founded ) | 211 | while( !header_founded ) |
210 | { | 212 | { |
211 | if (*temp==0) return ERRRHEA; | 213 | if (*temp==0) return ERRRHEA; |
212 | 214 | ||
213 | if( *temp==0x0A ) | 215 | if( *temp==0x0A ) |
214 | { | 216 | { |