2.2.3 TopologyServerReply

A TopologyServerReply packet MUST be prefixed with a TopologyPacketHeader.


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

TopologyPacketHeader

CorrelationID (16 bytes)

...

...

ConnectedNetworkCount

ConnectedNetworkMask

DirectoryServiceServerSize

ConnectedNetworkArray (variable)

...

RespondingSiteID (16 bytes, optional)

...

...

DirectoryServiceServerArray (variable)

...

TopologyPacketHeader (4 bytes):  As specified in section 2.2.1.

CorrelationID (16 bytes):  A GUID that MUST contain the value from the RequestID field from the TopologyClientRequest packet for which the TopologyServerReply is generated.

ConnectedNetworkCount (4 bytes):  A 32-bit integer value in little-endian order. The value specifies the number of connected network IDs that are present in the ConnectedNetworkArray. The value MUST be in the range 1 to 32, inclusive.

ConnectedNetworkMask (4 bytes):  This 32-bit field is treated as 32 Boolean values. This entire field MUST be set to all zeros if the networking protocol being used is IP. When the networking protocol used is IPX, the count of 1-valued bit positions MUST equal the value contained in the ConnectedNetworkCount field.

DirectoryServiceServerSize (4 bytes):  A 32-bit integer value in little-endian order. The value of this field MUST specify the number of bytes occupied by the DirectoryServiceServerArray. If the SiteID assigned to the responding server matches the SiteID contained in the TopologyClientRequest, this value MUST be zero, and the RespondingSiteID and DirectoryServiceServerArray fields MUST NOT be present.

ConnectedNetworkArray (variable):  An array of GUIDs that represents a list of directory service server ConnectedNetworkIDs. The number of ConnectedNetworkIDs contained in this array (and thus its size) is determined by the value contained in the ConnectedNetworkCount field. The entries consist of ConnectedNetworkIDs of MSMQ Directory Service servers.

RespondingSiteID (16 bytes): A GUID that identifies the MSMQ site to which the server belongs. This field MUST NOT be present if the value of the DirectoryServiceServerSize field is zero.

DirectoryServiceServerArray (variable): If the DirectoryServiceServerSize field is not zero, this field MUST contain an array of Unicode characters. The array MUST contain a comma (value 0x002C)–separated list of MSMQ Directory Service servers and an indication of the networking protocol or protocols used by the named MSMQ Directory Service server. The first character of each delimited entry MUST specify whether the following named MSMQ Directory Service server supports the IP networking protocol, where the character value 1 (0x0031) indicates support and the character value 0 (0x0030) indicates otherwise. The second character of each delimited entry MUST specify whether the following named MSMQ Directory Service server supports the IPX networking protocol, where the character value 1 (0x0031) indicates support and the character value 0 (0x0030) indicates otherwise. The third character of each entry is the first character of a variable-length character string containing the name of an MSMQ Directory Service server. Each entry is a machine name, and the comma (value 0x002C) or null (value 0x0000) character MUST NOT be allowed as part of the name; the end of an MSMQ Directory Service server name is delimited by a comma (value 0x002C) or a null character (value 0x0000), which is not part of the MSMQ Directory Service server name.

A DirectoryServiceServerArray MUST be formatted according to the following Augmented Backus-Naur Form (ABNF) rules.

 DirectoryServiceServerArray = Entry 0*ContinuedEntry Endlist
 Supported = %x31.00 ; A Unicode 1 indicates is supported
 NotSupported = %x30.00 ; A Unicode 0 indicates not supported
 IP = Supported / NotSupported ; IP networking
 IPX = Supported / NotSupported ; IPX networking
 R1 = %x01-2b ; Range 1
 R2 = %x2c-2c ; Range 2 is x2c only
 R3 = %x00-ff ; Range 3
 R4 = %x01-ff ; Range 4
 R5 = %x2d-ff ; Range 5
 R6 = %x00-00 ; Range 6 is x00 only
 X1 = R1 R3 ; Two hex digit range 1
 X2 = R2 R4 ; Two hex digit range 2
 X3 = R5 R3 ; Two hex digit range 3
 X4 = R6 R4 ; Two hex digit range 4
 NameChar = X1 / X2 / X3 / X4 ; Name character: no commas or nulls 
 Delim = %x2c.00 ; Use comma delimiter when more follow 
 EndList =  %x00.00 ; Use null for end of list 
 Entry = IP IPX 1*NameChar ; The layout for the final entry
 ContinuedEntry = Delim Entry ; The layout for one continued entry