func()

in ptp/simpleclient/client.go [415:471]


func (c *Client) handleMsg(msg *inPacket) error {
	msgType, err := ptp.ProbeMsgType(msg.data)
	if err != nil {
		return err
	}
	switch msgType {
	case ptp.MessageSignaling:
		signaling := &ptp.Signaling{}
		if err := ptp.FromBytes(msg.data, signaling); err != nil {
			return fmt.Errorf("reading signaling msg: %w", err)
		}

		for _, tlv := range signaling.TLVs {
			switch v := tlv.(type) {
			case *ptp.GrantUnicastTransmissionTLV:
				if err := c.handleGrantUnicast(v); err != nil {
					return err
				}

			case *ptp.CancelUnicastTransmissionTLV:
				if err := c.handleCancelUnicast(v); err != nil {
					return err
				}
			default:
				return fmt.Errorf("got unsupported TLV type %s(%d)", tlv.Type(), tlv.Type())
			}
		}
		return nil
	case ptp.MessageAnnounce:
		announce := &ptp.Announce{}
		if err := ptp.FromBytes(msg.data, announce); err != nil {
			return fmt.Errorf("reading announce msg: %w", err)
		}
		return c.handleAnnounce(announce)
	case ptp.MessageSync:
		b := &ptp.SyncDelayReq{}
		if err := ptp.FromBytes(msg.data, b); err != nil {
			return fmt.Errorf("reading sync msg: %w", err)
		}
		return c.handleSync(b, msg.ts)
	case ptp.MessageDelayResp:
		b := &ptp.DelayResp{}
		if err := ptp.FromBytes(msg.data, b); err != nil {
			return fmt.Errorf("reading delay_resp msg: %w", err)
		}
		return c.handleDelay(b)
	case ptp.MessageFollowUp:
		b := &ptp.FollowUp{}
		if err := ptp.FromBytes(msg.data, b); err != nil {
			return fmt.Errorf("reading follow_up msg: %w", err)
		}
		return c.handleFollowUp(b)
	default:
		c.logReceive(msgType, "unsupported, ignoring")
		return nil
	}
}