예제 #1
0
파일: CcnClient.c 프로젝트: ltr120/NDNFD
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;
}
예제 #2
0
파일: CcnClient.c 프로젝트: ltr120/NDNFD
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);
}
예제 #3
0
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);
}