MCPcopy Create free account
hub / github.com/KikoPlayProject/KikoPlay / parseMultiPartFile

Method parseMultiPartFile

LANServer/httpserver/httprequest.cpp:408–533  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

406
407
408void HttpRequest::parseMultiPartFile()
409{
410 Logger::logger()->log(Logger::LANServer, "HttpRequest: parsing multipart temp file");
411 tempFile->seek(0);
412 bool finished=false;
413 while (!tempFile->atEnd() && !finished && !tempFile->error())
414 {
415 #ifdef SUPERVERBOSE
416 Logger::logger()->log(Logger::LANServer, "HttpRequest: reading multpart headers");
417 #endif
418 QByteArray fieldName;
419 QByteArray fileName;
420 while (!tempFile->atEnd() && !finished && !tempFile->error())
421 {
422 QByteArray line=tempFile->readLine(65536).trimmed();
423 if (line.startsWith("Content-Disposition:"))
424 {
425 if (line.contains("form-data"))
426 {
427 int start=line.indexOf(" name=\"");
428 int end=line.indexOf("\"",start+7);
429 if (start>=0 && end>=start)
430 {
431 fieldName=line.mid(start+7,end-start-7);
432 }
433 start=line.indexOf(" filename=\"");
434 end=line.indexOf("\"",start+11);
435 if (start>=0 && end>=start)
436 {
437 fileName=line.mid(start+11,end-start-11);
438 }
439 #ifdef SUPERVERBOSE
440 Logger::logger()->log(Logger::LANServer, "HttpRequest: multipart field=%s, filename=%s",fieldName.data(),fileName.data());
441 #endif
442 }
443 else
444 {
445 Logger::logger()->log(Logger::LANServer, "HttpRequest: ignoring unsupported content part %s",line.data());
446 }
447 }
448 else if (line.isEmpty())
449 {
450 break;
451 }
452 }
453
454 #ifdef SUPERVERBOSE
455 Logger::logger()->log(Logger::LANServer, "HttpRequest: reading multpart data");
456 #endif
457 QTemporaryFile* uploadedFile=nullptr;
458 QByteArray fieldValue;
459 while (!tempFile->atEnd() && !finished && !tempFile->error())
460 {
461 QByteArray line=tempFile->readLine(65536);
462 if (line.startsWith("--"+boundary))
463 {
464 // Boundary found. Until now we have collected 2 bytes too much,
465 // so remove them from the last result

Callers

nothing calls this directly

Calls 15

logMethod · 0.80
atEndMethod · 0.80
errorMethod · 0.80
resizeMethod · 0.80
openMethod · 0.80
seekMethod · 0.45
containsMethod · 0.45
dataMethod · 0.45
isEmptyMethod · 0.45
removeMethod · 0.45
sizeMethod · 0.45
insertMethod · 0.45

Tested by

no test coverage detected