func()

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
}