void* CcnbMsg_detachBuf(CcnbMsg self, size_t* size) { *size = self->length; void* buf = self->buf; self->length = self->limit = 0; self->buf = NULL; CcnbMsg_dtor(self); return buf; }
void CcnLAC_write(CcnLAC self, CcnbMsg msg) { if (!CcnbMsg_verifyIntegrity(msg)) { CcnbMsg_dtor(msg); return; } size_t size; void* buf = CcnbMsg_detachBuf(msg, &size); NBS_write(self->nbs, buf, 0, size, NULL); }
void NdnlpSvc_msg(NdnlpSvc self, CcnbMsg msg) { NdnlpPktA pkts = MsgSlicer_slice(self->msgSlicer, msg); for (int i = 0, len = NdnlpPktA_length(pkts); i < len; ++i) { NdnlpPkt pkt = NdnlpPktA_get(pkts, i); if (NdnlpSvc_RLAPolicy(self, msg, pkt)) { DataPkt_setFlags(pkt, DataPkt_getFlags(pkt) | DataPktFlag_RLA); SentPkts_insert(self->sentPkts, pkt); } printf("pkt: %s\n", ccn_charbuf_as_string(pkt)); Link_write(self->link, pkt); } NdnlpPktA_dtor(pkts, false); CcnbMsg_dtor(msg); }