src/server/httprequest.c

changeset 8
f4d56bf9de40
parent 7
3c2ed7a7a5fd
child 9
30e51941a673
equal deleted inserted replaced
7:3c2ed7a7a5fd 8:f4d56bf9de40
145 } 145 }
146 i = 0; 146 i = 0;
147 hlen = ha->len; 147 hlen = ha->len;
148 } 148 }
149 149
150 if(ha->headers[i].name[0] < 90) {
151 ha->headers[i].name[0] += 32;
152 }
150 pblock_nvinsert(ha->headers[i].name, ha->headers[i].value, rq->rq.headers); 153 pblock_nvinsert(ha->headers[i].name, ha->headers[i].value, rq->rq.headers);
154 }
155
156 /* check for request body and prepare input buffer */
157 char *ctlen_str = pblock_findkeyval(pb_key_content_length, rq->rq.headers);
158 if(ctlen_str) {
159 int ctlen = atoi(ctlen_str);
160
161 printf("request body length: %d\n", ctlen);
162
163 netbuf *nb = request->netbuf;
164
165 /* create new netbuf */
166 NetIOStream *net_io = (NetIOStream*)net_stream_from_fd(
167 request->connection->fd);
168 net_io->max_read = ctlen;
169
170 sn->sn.inbuf = malloc(sizeof(netbuf));
171 sn->sn.inbuf->sd = net_io;
172 sn->sn.inbuf->pos = 0;
173
174 /* prepare buffer */
175 int cur_input_len = nb->cursize - nb->pos;
176 if(cur_input_len >= ctlen) {
177
178 /*
179 * all data is already in the primary input buffer
180 * just link the new netbuf to the primary buffer
181 */
182 sn->sn.inbuf->maxsize = ctlen;
183 sn->sn.inbuf->cursize = ctlen;
184 sn->sn.inbuf->inbuf = nb->inbuf + nb->pos;
185 } else {
186 sn->sn.inbuf->maxsize = (ctlen > 2048) ? (2048) : (ctlen);
187 sn->sn.inbuf->inbuf = malloc(sizeof(sn->sn.inbuf->maxsize));
188
189 if(cur_input_len > 0) {
190 /* we have read a part of the request body -> copy to netbuf */
191 memcpy(sn->sn.inbuf->inbuf, nb->inbuf+nb->pos, cur_input_len);
192 }
193
194 sn->sn.inbuf->cursize = cur_input_len;
195 }
196 } else {
197 sn->sn.inbuf = NULL;
151 } 198 }
152 199
153 200
154 // Send the request to the NSAPI system 201 // Send the request to the NSAPI system
155 nsapi_handle_request(sn, rq); 202 nsapi_handle_request(sn, rq);

mercurial