in ptp/simpleclient/client.go [319:354]
func (c *Client) handleGrantUnicast(tlv *ptp.GrantUnicastTransmissionTLV) error {
msgType := tlv.MsgTypeAndReserved.MsgType()
c.logReceive(ptp.MessageSignaling, "unicast grant for %s", msgType)
switch msgType {
case ptp.MessageAnnounce:
// we received response, no need to request more grants for Announce
c.setState(stateInProgress)
if tlv.DurationField == 0 {
return fmt.Errorf("server denied us grant for %s", msgType)
}
// ask for sync messages
seq, err := c.sendGeneralMsg(reqUnicast(c.clockID, c.cfg.Duration, ptp.MessageSync))
if err != nil {
return err
}
c.logSent(ptp.MessageSignaling, "for %s, seq=%d", ptp.MessageSync, seq)
case ptp.MessageSync:
if tlv.DurationField == 0 {
return fmt.Errorf("server denied us grant for %s", msgType)
}
// ask for delay_resp messages
seq, err := c.sendGeneralMsg(reqUnicast(c.clockID, c.cfg.Duration, ptp.MessageDelayResp))
if err != nil {
return err
}
c.logSent(ptp.MessageSignaling, "for %s, seq=%d", ptp.MessageDelayResp, seq)
case ptp.MessageDelayResp:
if tlv.DurationField == 0 {
return fmt.Errorf("server denied us grant for %s", msgType)
}
log.Infof("unicast handshake complete")
default:
return fmt.Errorf("got unexpected grant for %s", msgType)
}
return nil
}