diff --git a/msg.c b/msg.c index 9434d42..348b7b5 100644 --- a/msg.c +++ b/msg.c @@ -221,18 +221,14 @@ static int suffix_post_recv(struct ptp_message *msg, uint8_t *ptr, int len) return 0; } -static void suffix_pre_send(uint8_t *ptr, int cnt, struct tlv_extra *last) +static void suffix_pre_send(struct ptp_message *msg) { - int i; + struct tlv_extra *extra; struct TLV *tlv; - if (!ptr) - return; - - for (i = 0; i < cnt; i++) { - tlv = (struct TLV *) ptr; - tlv_pre_send(tlv, i == cnt - 1 ? last : NULL); - ptr += sizeof(struct TLV) + tlv->length; + TAILQ_FOREACH(extra, &msg->tlv_list, list) { + tlv = extra->tlv; + tlv_pre_send(tlv, extra); tlv->type = htons(tlv->type); tlv->length = htons(tlv->length); } @@ -406,7 +402,6 @@ int msg_post_recv(struct ptp_message *m, int cnt) int msg_pre_send(struct ptp_message *m) { int type; - uint8_t *suffix = NULL; if (hdr_pre_send(&m->header)) return -1; @@ -426,34 +421,28 @@ int msg_pre_send(struct ptp_message *m) break; case FOLLOW_UP: timestamp_pre_send(&m->follow_up.preciseOriginTimestamp); - suffix = m->follow_up.suffix; break; case DELAY_RESP: timestamp_pre_send(&m->delay_resp.receiveTimestamp); m->delay_resp.requestingPortIdentity.portNumber = htons(m->delay_resp.requestingPortIdentity.portNumber); - suffix = m->delay_resp.suffix; break; case PDELAY_RESP_FOLLOW_UP: timestamp_pre_send(&m->pdelay_resp_fup.responseOriginTimestamp); port_id_pre_send(&m->pdelay_resp_fup.requestingPortIdentity); - suffix = m->pdelay_resp_fup.suffix; break; case ANNOUNCE: announce_pre_send(&m->announce); - suffix = m->announce.suffix; break; case SIGNALING: - suffix = m->signaling.suffix; break; case MANAGEMENT: port_id_pre_send(&m->management.targetPortIdentity); - suffix = m->management.suffix; break; default: return -1; } - suffix_pre_send(suffix, m->tlv_count, m->last_tlv); + suffix_pre_send(m); return 0; }