2.2.4.1 SQM Header

Every SQM session uploaded in the HTTP POST body MUST begin with a SQM session header.

The SQM section header describes the SQM section data BLOB. The SQM section header is composed of two fields: a SectionType field and a SectionLength field.


0


1


2


3


4


5


6


7


8


9

1
0


1


2


3


4


5


6


7


8


9

2
0


1


2


3


4


5


6


7


8


9

3
0


1

Signature

HeaderLength

Flags

DataChecksum

SectionCount

DataLength

ApplicationIdentifier

ApplicationVersionHigh

ApplicationVersionLow

ManifestVersion

ClientUploadTime

...

Reserved

...

ClientSessionStartTime

...

ClientSessionEndTime

...

ClientUniqueIdentifier

UserUniqueIdentifier

StudyIdentifier

InternalFlags

RawDataLength

RawDataChecksum

Signature (4 bytes): A 32-bit unsigned integer.<2>

HeaderLength (4 bytes): A 32-bit unsigned integer that specifies the length of the SQM header, in bytes.

Flags (4 bytes): A 32-bit unsigned integer. Bit positions 0 through 10 are reserved.<3>

DataChecksum (4 bytes): A 32-bit unsigned integer value specifying the checksum result of the SQM section data (compressed or uncompressed). In the following figure, the checksum is computed over area A followed by area B. The SQM client and SQM server SHOULD use the same algorithm.<4>

Checksum byte area in a SQM Upload

Figure 4: Checksum byte area in a SQM Upload

SectionCount (4 bytes): A 32-bit unsigned integer specifying the number of SQM sections in the uploaded data. This value MUST be specified. A value of 0x0 indicates there are no SQM sections.

DataLength (4 bytes): A 32-bit unsigned integer specifying the length of the SQM section data (compressed or uncompressed), in bytes. This value MUST be specified. A value of 0x0 indicates there is no SQM section data.

ApplicationIdentifier (4 bytes: ): A 32-bit unsigned integer specifying an application-defined identifier value. This value MUST be specified.

ApplicationVersionHigh (4 bytes): A 32-bit unsigned integer specifying an application-defined high order version value. This value MUST be specified.

ApplicationVersionLow (4 bytes): A 32-bit unsigned integer specifying an application-defined low order version value. This value MUST be specified.

ManifestVersion (4 bytes: ): A 32-bit unsigned integer specifying the client version of the A-SQM manifest. This value MUST be specified. A value of 0x0 means there is no client A-SQM manifest.

ClientUploadTime (8 bytes): A 64-bit FILETIME value specifying the time the client uploaded the data. This value MUST be specified. FILETIME is defined in [MS-RPCE] section 6.

Reserved (8 bytes): A 64-bit value. A value of 0x0 MUST be specified.

ClientSessionStartTime (8 bytes): A 64-bit FILETIME value specifying the client SQM session start time. This value MUST be specified.

ClientSessionEndTime (8 bytes): A 64-bit FILETIME value specifying the client SQM session end time. This value MUST be specified.

ClientUniqueIdentifier (16 bytes): A 128-bit globally unique identifier (GUID) that uniquely identifies the sending computer. This value MUST be specified.

UserUniqueIdentifier (16 bytes): A 128-bit GUID that identifies the computer user. This value MUST be specified. The client MAY specify a value of {00000000-0000-0000-0000-000000000000} to represent that no user identifier is specified.

StudyIdentifier (4 bytes): A 32-bit unsigned integer specifying the SQM partner namespace-specific study identifier. The value allows the client to classify data. This value MUST be specified. A value of 0x0 specifies no study identifier.

InternalFlags (4 bytes): A 32-bit unsigned integer bit mask that specifies attributes of the upload. The following bit values MUST be specified.


0


1


2


3


4


5


6


7


8


9

1
0


1


2


3


4


5


6


7


8


9

2
0


1


2


3


4


5


6


7


8


9

3
0


1

A

B

C

Reserved

A - IsSessionDataCompressed (1 bit): A bit value that specifies if the binary data is compressed. A value of 0x0 specifies that the data is not compressed. A value of 0x1 specifies that the data is compressed.

B - Reserved (2 bits): Reserved.  Bits MUST be specified as 0x0.

C - RequestManifestVersion (1 bit): A bit value specifying if the A-SQM manifest version is requested to be returned in the response. A value of 0x0 specifies that the A-SQM version for the SQM partner namespace is not returned in the response.

Reserved (28 bits): Bits MUST be specified as 0x0.

RawDataLength (4 bytes): A 32-bit unsigned integer specifying the length of the SQM section data before data compression, in bytes. This value MUST be specified if bit zero of the InternalFlags field has a value of 0x1.

RawDataChecksum (4 bytes): A 32-bit unsigned integer value specifying the checksum result of the SQM section data before data compression. This value MUST be specified if bit zero of the InternalFlags field has a value of 0x1. The SQM client and SQM server SHOULD use the same algorithm as specified in the DataChecksum description.