2.2.2.6 Generic Service Request Payload

The purpose of the DSLR protocol is to allow DSLR consumers to define remote services and requests (or function calls) on those services. To that end, all DSLR service requests follow the same convention. The message tag and payload is a child of the DSLR Dispatch Request tag defined in section 2.2.2.1, and includes the input parameters for the specific function being called.

The format for a generic service request message payload (the function's input parameters) is as follows:


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

SerializedArgument_1 (variable)

...

SerializedArgument_N (variable)

...

SerializedArgument_1 (variable): Input parameter for a specific function being called on the remote service.  This parameter is defined by the service.

SerializedArgument_N (variable): Additional input parameters for a specific function being called on the remote service.  These parameters are defined by the service.

Any of the following data types are valid input and output parameters for DSLR functions:

BYTE (1 byte): One byte of data.

0

1

2

3

4

5

6

7

BYTE

WORD (2 bytes): An unsigned 16-bit integer.

0

1

2

3

4

5

6

7

8

9

1

0

1

2

3

4

5

WORD

DWORD (4 bytes): An unsigned 32-bit integer.


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

DWORD

DWORD64 (8 bytes): An unsigned 64-bit integer.


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

DWORD64

...

GUID (16 bytes): 16 byte GUID. Consists of DWORD (4 bytes, unsigned 32-bit integer), Data1 (Big-Endian byte order), WORD (2 bytes, unsigned 16-bit integer), Data2 (Big-Endian byte order), WORD (2 bytes, unsigned 16-bit integer), Data3 (Big-Endian byte order), and Data4 =8 bytes 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

Data1

Data2

Data3

Data4

...

Utf8Str (variable): Variable. Consists of a DWORD-length byte array of UTF-8 string data. The number of bytes in the Data field is equal to the value of the Length 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

Length

Data (variable)

...

...

Blob (variable): Variable. Consists of a DWORD-length (Big-Endian byte order) byte array of arbitrary data. The number of bytes in the Data field is equal to the value of the Length 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

Length

Data (variable)

...

...