author | spiralman <spiralman> | 2002-07-22 22:37:22 (UTC) |
---|---|---|
committer | spiralman <spiralman> | 2002-07-22 22:37:22 (UTC) |
commit | c19b6cccd243107eb774c5e0bdb269265f3b5abe (patch) (unidiff) | |
tree | 9c888fb5a6a09d102df3143b9458465c11e7380a /noncore/net/ubrowser/httpcomm.cpp | |
parent | 0433711d6f7190073c476a2f771dfce879ef87e5 (diff) | |
download | opie-c19b6cccd243107eb774c5e0bdb269265f3b5abe.zip opie-c19b6cccd243107eb774c5e0bdb269265f3b5abe.tar.gz opie-c19b6cccd243107eb774c5e0bdb269265f3b5abe.tar.bz2 |
fixed some bugs with chunked transfer encoding, still doesnt work though
Diffstat (limited to 'noncore/net/ubrowser/httpcomm.cpp') (more/less context) (show whitespace changes)
-rw-r--r-- | noncore/net/ubrowser/httpcomm.cpp | 47 |
1 files changed, 43 insertions, 4 deletions
diff --git a/noncore/net/ubrowser/httpcomm.cpp b/noncore/net/ubrowser/httpcomm.cpp index 51068db..54f7acf 100644 --- a/noncore/net/ubrowser/httpcomm.cpp +++ b/noncore/net/ubrowser/httpcomm.cpp | |||
@@ -136,7 +136,8 @@ void HttpComm::incoming() | |||
136 | //remove the http header, if one exists | 136 | //remove the http header, if one exists |
137 | if(j != 0) | 137 | if(j != 0) |
138 | { | 138 | { |
139 | tempQString.remove(0, j); | 139 | tempQString.remove(0, j+1); |
140 | printf("HttpComm::incoming: removing http header. Result: \n%s", tempQString.latin1()); | ||
140 | } | 141 | } |
141 | while(!done) | 142 | while(!done) |
142 | { | 143 | { |
@@ -149,23 +150,28 @@ void HttpComm::incoming() | |||
149 | sclength.truncate(j); | 150 | sclength.truncate(j); |
150 | clength = sclength.toUInt(0, 16); | 151 | clength = sclength.toUInt(0, 16); |
151 | printf("HttpComm::Incoming: chunk length: %d\n", clength); | 152 | printf("HttpComm::Incoming: chunk length: %d\n", clength); |
153 | //end of data | ||
152 | if(clength==0) | 154 | if(clength==0) |
153 | { | 155 | { |
154 | processBody(); | 156 | processBody(); |
155 | done=true; | 157 | done=true; |
156 | } | 158 | } |
159 | //still more, but it hasnt been recieved yet | ||
157 | if(ba <= j) | 160 | if(ba <= j) |
158 | { | 161 | { |
159 | status=1; | 162 | status=1; |
160 | done=true; | 163 | done=true; |
161 | // break; | 164 | break; |
162 | } | 165 | } |
166 | //still more data waiting | ||
163 | else | 167 | else |
164 | { | 168 | { |
165 | done=false; | 169 | done=false; |
170 | //remove the chunk length header | ||
171 | tempQString.remove(0,j+1); | ||
166 | } | 172 | } |
167 | bRead=0; | 173 | bRead=0; |
168 | break; | 174 | // break; |
169 | //if there is more fall through to: | 175 | //if there is more fall through to: |
170 | //chunk length just read, still more in tempQstring | 176 | //chunk length just read, still more in tempQstring |
171 | case 1: | 177 | case 1: |
@@ -174,6 +180,7 @@ void HttpComm::incoming() | |||
174 | { | 180 | { |
175 | QString newTQstring = tempQString; | 181 | QString newTQstring = tempQString; |
176 | newTQstring.truncate(clength-bRead); | 182 | newTQstring.truncate(clength-bRead); |
183 | bRead+=newTQstring.length(); | ||
177 | body+=newTQstring; | 184 | body+=newTQstring; |
178 | printf("HttpComm::incoming: start new body piece 1: \n"); | 185 | printf("HttpComm::incoming: start new body piece 1: \n"); |
179 | printf("%s", newTQstring.latin1() ); | 186 | printf("%s", newTQstring.latin1() ); |
@@ -181,7 +188,7 @@ void HttpComm::incoming() | |||
181 | status=0; | 188 | status=0; |
182 | j=clength-bRead; | 189 | j=clength-bRead; |
183 | done=false; | 190 | done=false; |
184 | break; | 191 | // break; |
185 | } | 192 | } |
186 | //the chunk extends beyond the current data; | 193 | //the chunk extends beyond the current data; |
187 | else | 194 | else |
@@ -192,10 +199,42 @@ void HttpComm::incoming() | |||
192 | printf("%s", tempQString.latin1() ); | 199 | printf("%s", tempQString.latin1() ); |
193 | printf("HttpComm::incoming: end new body piece 2.\n"); | 200 | printf("HttpComm::incoming: end new body piece 2.\n"); |
194 | done=true; | 201 | done=true; |
202 | status=2; | ||
203 | // break; | ||
204 | } | ||
195 | break; | 205 | break; |
206 | //just got data in, continue reading chunk | ||
207 | case 2: | ||
208 | //the current data extends beyond the end of the chunk | ||
209 | if(bRead + tempQString.length() > clength) | ||
210 | { | ||
211 | QString newTQstring = tempQString; | ||
212 | newTQstring.truncate(clength-bRead); | ||
213 | bRead+=newTQstring.length(); | ||
214 | body+=newTQstring; | ||
215 | printf("HttpComm::incoming: start new body piece 3: \n"); | ||
216 | printf("%s", newTQstring.latin1() ); | ||
217 | printf("HttpComm::incoming: end new body piece 3.\n"); | ||
218 | status=0; | ||
219 | j=clength-bRead; | ||
220 | done=false; | ||
221 | // break; | ||
222 | } | ||
223 | //the chunk extends beyond the current data; | ||
224 | else | ||
225 | { | ||
226 | body+=tempQString; | ||
227 | bRead+=ba; | ||
228 | printf("HttpComm::incoming: start new body piece 4: \n"); | ||
229 | printf("%s", tempQString.latin1() ); | ||
230 | printf("HttpComm::incoming: end new body piece 4.\n"); | ||
231 | done=true; | ||
232 | status=2; | ||
233 | // break; | ||
196 | } | 234 | } |
197 | break; | 235 | break; |
198 | } | 236 | } |
237 | printf("HttpComm::incoming: chunked encoding: bRead: %d\n", bRead); | ||
199 | } | 238 | } |
200 | } | 239 | } |
201 | } | 240 | } |