A subscriber issues a SUBSCRIBE_UPDATE to a publisher to request a change to a prior subscription. Subscriptions can only become more narrower, not wider, because an attempt to widen a subscription could fail. If Objects before the start or after the end of the current subscription are needed, a separate subscription can be made. The start Object MUST NOT decrease and when it increases, there is no guarantee that a publisher will not have already sent Objects before the new start Object. The end Object MUST NOT increase and when it decreases, there is no guarantee that a publisher will not have already sent Objects after the new end Object. A publisher SHOULD close the Session as a 'Protocol Violation' if the SUBSCRIBE_UPDATE violates either rule or if the subscriber specifies a Subscribe ID that does not exist within the Session.
Unlike a new subscription, SUBSCRIBE_UPDATE can not cause an Object to be delivered multiple times. Like SUBSCRIBE, EndGroup and EndObject MUST specify the same or a later object than StartGroup and StartObject.
The format of SUBSCRIBE_UPDATE is as follows:
SUBSCRIBE_UPDATE Message {
Type (i) = 0x2,
Length (i),
Subscribe ID (i),
StartGroup (i),
StartObject (i),
EndGroup (i),
EndObject (i),
Subscriber Priority (8),
Number of Parameters (i),
Subscribe Parameters (..) ...
}
-
Subscribe ID: The subscription identifier that is unique within the session. This MUST match an existing Subscribe ID.
-
StartGroup: The start Group ID.
-
StartObject: The start Object ID.
-
EndGroup: The end Group ID, plus 1. A value of 0 means the subscription is open-ended.
-
EndObject: The end Object ID, plus 1. A value of 0 means the entire group is requested.
-
Subscriber Priority: Specifies the priority of a subscription relative to other subscriptions in the same session. Lower numbers get higher priority. See Section 4.
-
Subscribe Parameters: The parameters are defined in Section 6.1.1.