bool MultiPoint::read( int fd ) { RecordHeader rh; if( rh.read(fd) == false ) return false; SAFE_DELETE_ARRAY( points ); Integer shapeType; if( readVal<Integer>(fd, shapeType, LittleEndian ) == false ) return false; if( shapeType != ShapeTypeMultiPoint ) return false; if( bbox.read(fd) == false ) return false; if( readVal<Integer>(fd, numPoints, LittleEndian ) == false ) return false; points = new struct Point[numPoints]; for( Integer i = 0; i < numPoints; i++ ) { if( points[i].read(fd) == false ) return false; } return true; }
bool PointZ::read( int fd ) { RecordHeader rh; if( rh.read(fd) == false ) return false; Integer shapeType; if( readVal<Integer>(fd, shapeType, LittleEndian ) == false ) return false; if( shapeType != ShapeTypePointZ ) return false; if( readVal<Double>( fd, x, LittleEndian ) == false ) return false; if( readVal<Double>( fd, y, LittleEndian ) == false ) return false; if( readVal<Double>( fd, z, LittleEndian ) == false ) return false; // Sometimes, M field is not supplied if( rh.contentLength >= 18 ) if( readVal<Double>( fd, m, LittleEndian ) == false ) return false; return true; }
bool MultiPointZ::read( int fd ) { RecordHeader rh; if( rh.read(fd) == false ) return false; SAFE_DELETE_ARRAY( points ); SAFE_DELETE_ARRAY( zArray ); SAFE_DELETE_ARRAY( mArray ); Integer shapeType; if( readVal<Integer>(fd, shapeType, LittleEndian ) == false ) return false; if( shapeType != ShapeTypeMultiPointZ ) return false; if( bbox.read(fd) == false ) return false; if( readVal<Integer>(fd, numPoints, LittleEndian ) == false ) return false; points = new struct Point[numPoints]; Integer i; for( i = 0; i < numPoints; i++ ) { if( points[i].read(fd) == false ) return false; } if( zRange.read(fd) == false ) return false; zArray = new Double[numPoints]; for( i = 0; i < numPoints; i++ ) { if( readVal<Double>(fd, zArray[i], LittleEndian) == false ) return false; } int X = 40 + (16*numPoints); int Y = X + 16 + (8*numPoints); if( rh.contentLength > Y ) { if( mRange.read(fd) == false ) return false; mArray = new Double[numPoints]; for( i = 0; i < numPoints; i++ ) { if( readVal<Double>(fd, mArray[i], LittleEndian ) == false ) return false; } } return true; }
bool PolygonM::read( int fd ) { RecordHeader rh; if( rh.read(fd) == false ) return false; SAFE_DELETE_ARRAY( parts ); SAFE_DELETE_ARRAY( points ); SAFE_DELETE_ARRAY( mArray ); Integer shapeType; if( readVal<Integer>(fd, shapeType, LittleEndian ) == false ) return false; if( shapeType != ShapeTypePolygonM ) return false; if( bbox.read(fd) == false ) return false; if( readVal<Integer>(fd, numParts, LittleEndian ) == false ) return false; if( readVal<Integer>(fd, numPoints, LittleEndian ) == false ) return false; parts = new Integer[numParts]; int i; for( i = 0; i < numParts; i++ ) { if( readVal<Integer>(fd, parts[i], LittleEndian ) == false ) return false; } points = new struct Point[numPoints]; for( i = 0; i < numPoints; i++ ) { if( points[i].read(fd ) == false ) return false; } int X = 44 + (4 * numParts); int Y = X + (16 * numPoints); if( rh.contentLength > Y ) { if( mRange.read(fd) == false ) return false; mArray = new Double[numPoints]; for( i = 0; i < numPoints; i++ ) { if( readVal<Double>(fd, mArray[i], LittleEndian ) == false ) return false; } } return true; }
bool PointMRecord::read( int fd ) { RecordHeader rh; if( rh.read(fd) == false ) return false; Integer shapeType; if( readVal<Integer>(fd, shapeType, LittleEndian ) == false ) return false; if( shapeType != ShapeTypePointM ) return false; return pointM.read(fd); }
BeginRequestRecord::BeginRequestRecord(const RecordHeader& header, const FCGI_BeginRequestBody& body) { Q_ASSERT(header.type() == RecordHeader::BeginRequestRecord); int role = (body.roleB1 << 8) | body.roleB0; if(role < FirstRole || role >= UnknownRole) { qFatal("Unknown role '%d'", role); } m_role = static_cast<Role>(role); m_flags = static_cast<Flag>(body.flags); }
bool PolyLine::read( int fd ) { RecordHeader rh; if( rh.read(fd) == false ) return false; SAFE_DELETE_ARRAY( parts ); SAFE_DELETE_ARRAY( points ); Integer shapeType; if( readVal<Integer>(fd, shapeType, LittleEndian ) == false ) return false; if( shapeType != ShapeTypePolyLine ) return false; if( bbox.read(fd) == false ) return false; if( readVal<Integer>(fd, numParts, LittleEndian ) == false ) return false; if( readVal<Integer>(fd, numPoints, LittleEndian ) == false ) return false; parts = new Integer[numParts]; int i; for( i = 0; i < numParts; i++ ) { if( readVal<Integer>(fd, parts[i], LittleEndian ) == false ) return false; } points = new struct Point[numPoints]; for( i = 0; i < numPoints; i++ ) { if( points[i].read(fd ) == false ) return false; } return true; }
bool MultiPatch::read( int fd ) { RecordHeader rh; if( rh.read(fd) == false ) return false; SAFE_DELETE_ARRAY( parts ); SAFE_DELETE_ARRAY( partTypes ); SAFE_DELETE_ARRAY( points ); SAFE_DELETE_ARRAY( zArray ); SAFE_DELETE_ARRAY( mArray ); Integer shapeType; if( readVal<Integer>(fd, shapeType, LittleEndian ) == false ) return false; if( shapeType != ShapeTypeMultiPatch ) return false; if( bbox.read(fd) == false ) return false; if( readVal<Integer>(fd, numParts, LittleEndian ) == false ) return false; if( readVal<Integer>(fd, numPoints, LittleEndian ) == false ) return false; parts = new Integer[numParts]; int i; for( i = 0; i < numParts; i++ ) { if( readVal<Integer>(fd, parts[i], LittleEndian ) == false ) return false; } partTypes = new Integer[numParts]; for( i = 0; i < numParts; i++ ) { if( readVal<Integer>(fd, partTypes[i], LittleEndian ) == false ) return false; } points = new struct Point[numPoints]; for( i = 0; i < numPoints; i++ ) { if( points[i].read(fd ) == false ) return false; } if( zRange.read(fd) == false ) return false; zArray = new Double[numPoints]; for( i = 0; i < numPoints; i++ ) { if( readVal<Double>(fd, zArray[i], LittleEndian ) == false ) return false; } int W = 44 + (4*numParts); int X = W + (4 * numParts); int Y = X + (16 *numPoints); int Z = Y + 16 + (8 *numPoints); if( rh.contentLength*2 > Z ) { if( mRange.read(fd) == false ) return false; mArray = new Double[numPoints]; for( i = 0; i < numPoints; i++ ) { if( readVal<Double>(fd, mArray[i], LittleEndian ) == false ) return false; } } return true; }
ParametersRecord::ParametersRecord(const RecordHeader& header, const QByteArray& _data) { const UnsignedByteArray data(_data); Q_ASSERT(header.type() == RecordHeader::ParametersRecord); Q_ASSERT(data.length() >= header.contentLength()); quint16 i = 0; quint16 bytesToRead = header.contentLength(); const quint8 highBitMask = 1 << 7; while(i < bytesToRead) { quint32 nameLength; quint32 valueLength; // See "Name-Value pairs" in the spec // work out name length if(data[i] & highBitMask) { // Four bytes of name length nameLength = ((data[i] & ~highBitMask) << 24) + (data[i+1] << 16) + (data[i+2] << 8) + data[i+3] ; i+= 4; } else { // 1 byte of name length nameLength = data[i++]; } // ditto for value if(data[i] & highBitMask) { // Four bytes of value length valueLength = ((data[i] & ~highBitMask) << 24) + (data[i+1] << 16) + (data[i+2] << 8) + data[i+3] ; i+= 4; } else { // 1 byte of name length valueLength = data[i++]; } const QByteArray name = QByteArray(&data.constData()[i], nameLength); i += nameLength; const QByteArray value = QByteArray(&data.constData()[i], valueLength); i += valueLength; m_parameters.insert(name, value); } }
VError DB4DJournalParser::NextOperation( uLONG8 &outOperation, uLONG8 *outGlobalOperation, CDB4DJournalData **outJournalData ) { VError error = VE_OK; RecordHeader recHeader; if ( outJournalData ) *outJournalData = NULL; outOperation = fCurrentOperation; sLONG8 globaloperation = 0; if ( fFileStream ) { uLONG operationTag; error = fFileStream->GetLong(operationTag); if ( error == VE_OK ) { if ( operationTag == kTagLogDB4D ) { sLONG8 contextID; DB4D_LogAction logAction; sLONG len; sLONG8 curpos; error = fFileStream->GetLong8(globaloperation); if ( error == VE_OK ) { error = fFileStream->GetLong(len); } if ( !outJournalData ) { error = fFileStream->SetPosByOffset( len - 24 );//- 4 /*Tag*/ - 8 /*Operation#*/- 4 /*len*/ - 4 /*len at the end*/ - 4 /*tag at the end*/ } else { if ( error == VE_OK ) error = fFileStream->GetLong((uLONG&)logAction); if ( error == VE_OK ) error = fFileStream->GetLong8(contextID); uLONG8 timeStamp; if (error == VE_OK) error = fFileStream->GetLong8(timeStamp); if (error == VE_OK) { switch (logAction) { case DB4D_Log_OpenData: case DB4D_Log_CloseData: case DB4D_Log_StartBackup: case DB4D_Log_StartTrans: case DB4D_Log_Commit: case DB4D_Log_RollBack: { *outJournalData = new VDB4DJournalData(globaloperation, logAction,contextID, GetContextExtraData( contextID),timeStamp); } break; case DB4D_Log_CloseContext: { *outJournalData = new VDB4DJournalData(globaloperation, logAction,contextID, GetContextExtraData( contextID),timeStamp); fContextExtraByID.erase(contextID); } break; case DB4D_Log_CreateRecord: case DB4D_Log_ModifyRecord: { VUUID xTableID; if ( error == VE_OK ) error = recHeader.ReadFromStream(fFileStream); if ( error == VE_OK ) if ( !recHeader.Match(DBOH_Record) ) error = VE_DB4D_WRONGRECORDHEADER; if ( error == VE_OK ) error = xTableID.ReadFromStream(fFileStream); curpos = fFileStream->GetPos(); if ( error == VE_OK ) { sLONG dataSize = recHeader.GetLen() + sizeof(ChampHeader)*(recHeader.GetNbFields()); error = fFileStream->SetPosByOffset(dataSize); } if ( error == VE_OK ) *outJournalData = new VDB4DJournalData(globaloperation, logAction,contextID, GetContextExtraData( contextID),&recHeader,timeStamp, curpos, fFileStream, xTableID); } break; case DB4D_Log_DeleteBlob: { VString path; sLONG blobnumber; if ( error == VE_OK ) error = fFileStream->GetLong(blobnumber); if (blobnumber == -2) { sLONG lenpath = 0; error = fFileStream->GetLong(lenpath); if (lenpath > 0) { tempBuffer<256> buff(len); error = fFileStream->GetWords((sWORD*)buff.GetPtr(), &lenpath); path.FromBlock(buff.GetPtr(), lenpath * sizeof(UniChar), VTC_UTF_16); } } VUUID xTableID; if ( error == VE_OK ) error = xTableID.ReadFromStream(fFileStream); if ( error == VE_OK ) { VDB4DJournalData* jdata = new VDB4DJournalData(globaloperation, logAction,contextID, GetContextExtraData( contextID),timeStamp, blobnumber ,xTableID); *outJournalData = jdata; if (!path.IsEmpty()) { jdata->SetPath(path); } } } break; case DB4D_Log_DeleteRecord: case DB4D_Log_TruncateTable: { sLONG recordNumber; if ( error == VE_OK ) error = fFileStream->GetLong(recordNumber); /* sLONG tableIndex; if ( error == VE_OK ) error = fFileStream->GetLong(tableIndex); */ VUUID xTableID; if ( error == VE_OK ) error = xTableID.ReadFromStream(fFileStream); if ( error == VE_OK ) *outJournalData = new VDB4DJournalData(globaloperation, logAction,contextID, GetContextExtraData( contextID),timeStamp,recordNumber,xTableID); } break; case DB4D_Log_CreateContextWithUserUUID: { VUUID userID; error = userID.ReadFromStream(fFileStream); if (error == VE_OK) *outJournalData = new VDB4DJournalData(globaloperation, logAction,contextID, GetContextExtraData( contextID),timeStamp,userID); } break; case DB4D_Log_CreateContextWithExtra: { VValueBag *bag = new VValueBag; if (bag != NULL) { // the extra data is always stored in little endian Boolean oldNeedSwap = fFileStream->NeedSwap(); fFileStream->SetLittleEndian(); error = bag->ReadFromStream(fFileStream); fFileStream->SetNeedSwap( oldNeedSwap); if (error == VE_OK) { try { fContextExtraByID[contextID] = bag; } catch(...) { } *outJournalData = new VDB4DJournalData(globaloperation, logAction,contextID, GetContextExtraData( contextID),timeStamp); } } else { error = memfull; } ReleaseRefCountable( &bag); } break; case DB4D_Log_CreateBlob: case DB4D_Log_ModifyBlob: { VString path; sLONG lenblob = 0; sLONG blobNumber; if ( error == VE_OK ) error = fFileStream->GetLong(blobNumber); if (blobNumber == -2) { sLONG lenpath = 0; error = fFileStream->GetLong(lenpath); if (lenpath > 0) { tempBuffer<256> buff(len); error = fFileStream->GetWords((sWORD*)buff.GetPtr(), &lenpath); path.FromBlock(buff.GetPtr(), lenpath * sizeof(UniChar), VTC_UTF_16); } } VUUID xTableID; if ( error == VE_OK ) error = xTableID.ReadFromStream(fFileStream); curpos = fFileStream->GetPos(); if ( error == VE_OK ) { error = fFileStream->GetLong(lenblob); error = fFileStream->SetPosByOffset(lenblob); } if ( error == VE_OK ) { VDB4DJournalData* jdata = new VDB4DJournalData(globaloperation, logAction,contextID, GetContextExtraData( contextID),timeStamp, blobNumber, lenblob, xTableID, curpos, fFileStream); *outJournalData = jdata; if (!path.IsEmpty()) { jdata->SetPath(path); } } } break; case DB4D_Log_SaveSeqNum: { sLONG8 seqnum; if ( error == VE_OK ) error = fFileStream->GetLong8(seqnum); /* sLONG tableIndex; if ( error == VE_OK ) error = fFileStream->GetLong(tableIndex); */ VUUID xTableID; if ( error == VE_OK ) error = xTableID.ReadFromStream(fFileStream); if ( error == VE_OK ) *outJournalData = new VDB4DJournalData(globaloperation, logAction,contextID, GetContextExtraData( contextID), timeStamp, seqnum, xTableID, true); } break; default: assert(false); break; } } } sLONG lenEnd; if ( error == VE_OK ) { error = fFileStream->GetLong(lenEnd); if (len != lenEnd) error = VE_UNIMPLEMENTED; } uLONG operationTagEnd; if (error == VE_OK) { error = fFileStream->GetLong((uLONG&)operationTagEnd); if (operationTagEnd != kTagLogDB4DEnd) error = VE_UNIMPLEMENTED; } } else { error = VE_UNIMPLEMENTED; // bad file } if ( error != VE_OK ) { if ( outJournalData && *outJournalData ) { (*outJournalData)->Release(); *outJournalData = NULL; } } else { outOperation = ++fCurrentOperation; if ( outJournalData && *outJournalData ) { if ( fCurrentData ) fCurrentData->Release(); fCurrentData = *outJournalData; fCurrentData->Retain(); } } } } else { error = VE_UNIMPLEMENTED; // not initialized } if (outGlobalOperation != NULL) *outGlobalOperation = globaloperation; return error; }
StandardInputRecord::StandardInputRecord(const RecordHeader& header, const QByteArray& data) { Q_ASSERT(header.type() == RecordHeader::StandardInputRecord); m_streamData = QByteArray(data.constData(), header.contentLength()); }
void swf::SWF::continueWith(buf_type *& buf) { _buffer = &buf; //(*_buffer) += 4;//want to do this but outBuf is cropped at the moment header.continueWith(buf); RecordHeader * rh; std::vector<AbstractTag *> vt; AbstractTag * t; /* * Tag value from reverse index */ short tv; do { rh = new RecordHeader(); rh->fromSWF(buf); tv = rh->type(); switch (tv) { case 0: printf("%2i End\n", tv); buf += rh->length(); break; case 1: //printf("%2i ShowFrame\n", tv); //buf += rh->length(); t = new ShowFrame; t -> recordHeader = rh; t -> fromSWF(buf); break; case 2: printf("%2i DefineShape\n", tv); buf += rh->length(); break; case 4: printf("%2i PlaceObject\n", tv); buf += rh->length(); break; case 5: printf("%2i RemoveObject\n", tv); buf += rh->length(); break; case 6: printf("%2i DefineBits\n", tv); buf += rh->length(); break; case 7: printf("%2i DefineButton\n", tv); buf += rh->length(); break; case 8: printf("%2i JPEGTables\n", tv); buf += rh->length(); break; case 9: //printf("%2i SetBackgroundColor\n", tv); //buf += rh->length(); t = new SetBackgroundColor; t -> recordHeader = rh; t -> fromSWF(buf); break; case 10: printf("%i DefineFont\n", tv); buf += rh->length(); break; case 11: printf("%i DefineText\n", tv); buf += rh->length(); break; case 12: printf("%i DoAction\n", tv); buf += rh->length(); break; case 13: printf("%i DefineFontInfo\n", tv); buf += rh->length(); break; case 14: printf("%i DefineSound\n", tv); buf += rh->length(); break; case 15: printf("%i StartSound\n", tv); buf += rh->length(); break; case 17: printf("%i DefineButtonSound\n", tv); buf += rh->length(); break; case 18: printf("%i SoundbufHead\n", tv); buf += rh->length(); break; case 19: printf("%i SoundbufBlock\n", tv); buf += rh->length(); break; case 20: printf("%i DefineBitsLossless\n", tv); buf += rh->length(); break; case 21: printf("%i DefineBitsJPEG2\n", tv); buf += rh->length(); break; case 22: printf("%i DefineShape2\n", tv); buf += rh->length(); break; case 23: printf("%i DefineButtonCxform\n", tv); buf += rh->length(); break; case 24: printf("%i Protect\n", tv); buf += rh->length(); break; case 26: //printf("%i PlaceObject2\n", tv); //buf += rh->length(); t = new PlaceObject2(*header.versionPtr()); t -> recordHeader = rh; t -> fromSWF(buf); break; case 28: printf("%i RemoveObject2\n", tv); buf += rh->length(); break; case 32: printf("%i DefineShape3\n", tv); buf += rh->length(); break; case 33: printf("%i DefineText2\n", tv); buf += rh->length(); break; case 34: printf("%i DefineButton2\n", tv); buf += rh->length(); break; case 35: printf("%i DefineBitsJPEG3\n", tv); buf += rh->length(); break; case 36: printf("%i DefineBitsLossless2\n", tv); buf += rh->length(); break; case 37: printf("%i DefineEditText\n", tv); buf += rh->length(); break; case 39: printf("%i DefineSprite\n", tv); buf += rh->length(); break; case 43: printf("%i FrameLabel\n", tv); buf += rh->length(); break; case 45: printf("%i SoundbufHead2\n", tv); buf += rh->length(); break; case 46: printf("%i DefineMorphShape\n", tv); buf += rh->length(); break; case 48: printf("%i DefineFont2\n", tv); buf += rh->length(); break; case 56: //printf("%i ExportAssets\n", tv); //buf += rh->length(); t = new ExportAssets; t -> recordHeader = rh; t -> fromSWF(buf); break; case 57: //printf("%i ImportAssets\n", tv); //buf += rh->length(); t = new ImportAssets; t -> recordHeader = rh; t -> fromSWF(buf); break; case 58: printf("%i EnableDebugger\n", tv); buf += rh->length(); break; case 59: printf("%i DoInitAction\n", tv); buf += rh->length(); break; case 60: printf("%i DefineVideobuf\n", tv); buf += rh->length(); break; case 61: printf("%i VideoFrame\n", tv); buf += rh->length(); break; case 62: printf("%i DefineFontInfo2\n", tv); buf += rh->length(); break; case 64: printf("%i EnableDebugger2\n", tv); buf += rh->length(); break; case 65: printf("%i ScriptLimits\n", tv); buf += rh->length(); break; case 66: printf("%i SetTabIndex\n", tv); buf += rh->length(); break; case 69: //printf("%i FileAttributes\n", tv); //buf += rh->length(); t = new FileAttributes; t -> recordHeader = rh; t -> fromSWF(buf); break; case 70: //printf("%i PlaceObject3\n", tv); //buf += rh->length(); t = new PlaceObject3(*header.versionPtr()); t -> recordHeader = rh; t -> fromSWF(buf); break; case 71: //printf("%i ImportAssets2\n", tv); //buf += rh->length(); t = new ImportAssets2; t -> recordHeader = rh; t -> fromSWF(buf); break; case 73: printf("%i DefineFontAlignZones\n", tv); buf += rh->length(); break; case 74: printf("%i CSMTextSettings\n", tv); buf += rh->length(); break; case 75: printf("%i DefineFont3\n", tv); buf += rh->length(); break; case 76: //printf("%i SymbolClass\n", tv); //buf += rh->length(); t = new SymbolClass; t -> recordHeader = rh; t -> fromSWF(buf); break; case 77: printf("%i Metadata\n", tv); buf += rh->length(); break; case 78: //printf("%i DefineScalingGrid\n", tv); //buf += rh->length(); t = new DefineScalingGrid; t -> recordHeader = rh; t -> fromSWF(buf); break; case 82: printf("%i DoABC\n", tv); buf += rh->length(); break; case 83: printf("%i DefineShape4\n", tv); buf += rh->length(); break; case 84: printf("%i DefineMorphShape2\n", tv); buf += rh->length(); break; case 86: printf("%i DefineSceneAndFrameLabelData\n", tv); buf += rh->length(); break; case 87: printf("%i DefineBinaryData\n", tv); buf += rh->length(); break; case 88: printf("%i DefineFontName\n", tv); buf += rh->length(); break; case 89: printf("%i StartSound2\n", tv); buf += rh->length(); break; case 90: printf("%i DefineBitsJPEG4\n", tv); buf += rh->length(); break; case 91: printf("%i DefineFont4\n", tv); buf += rh->length(); break; default: printf("\nEncountered unknown tag\n"); buf += rh->length(); break; } //t -> recordHeader = rh; //t -> fromSWF(buf); //t -> set_version(<#unsigned char *version#>) //vrh.push_back( *rh ); vt.push_back( t ); } while ( rh->type() != 0 ); }