PROTOCOL
SDP is a packet-based protocol utilizing a request-response architecture. The SDP packet is referred to as a protocol data unit (PDU), which includes a header followed by a variable number of parameters. The length of the parameter field is specified in the header, as is the type (PDU ID), which may indicate a request or response for searches or attribute
queries. The header also includes a transaction ID that is used to match a request with a corresponding response. Every request must be acknowledged with a response. If for some reason the server cannot handle the request, it may send a response of type ErrorResponse
(PDU ID 0x01).
It is possible that the response may be too large to fit into a single PDU. To accommodate this, a continuation state parameter is supported by most PDUs. In a response, this parameter indicates the number of bytes that are outstanding. The client may then resend the original request, with a new transaction ID, but with the continuation state parameter set. This alerts the server to send the continuation of the response. At what point a response is split is determined by the server.
Three categories of transactions (PDU IDs) are supported: service search transactions, service attribute transactions, and service search attribute transactions. Service search transactions are used to request a list of service record handles for service records that have attributes containing all of the UUIDs in a service search pattern. There is no mechanism to request all the service records, although browsing is supported as already described. Service attribute transactions are used to request specific attribute values from a service record. Service search attribute transactions combine the service search and service attribute transactions, which allows getting specific attribute values for all service records that match a service search pattern.