コード例 #1
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);
}
コード例 #2
0
ファイル: Link.c プロジェクト: Emat12/NDNBlue-BlueZ
void Link_write(Link self, NdnlpPkt pkt) {
	if (self->lossy > 0 && rand() < self->lossy) {
		NdnlpPkt_dtor(pkt);
		return;
	}
	size_t len = NdnlpPkt_length(pkt);
	uint8_t* buf = NdnlpPkt_detachBuf(pkt);
	NBS_write(self->nbs, buf, 0, len, self->addr);
}
コード例 #3
0
ファイル: CcnClient.c プロジェクト: ltr120/NDNFD
enum ccn_upcall_res CcnLAC_fetchFaceidCb(struct ccn_closure* selfp, enum ccn_upcall_kind kind, struct ccn_upcall_info* info) {
	CcnLAC self = (CcnLAC)selfp->data;
	switch (kind) {
		case CCN_UPCALL_FINAL: {
			free(selfp);
			return CCN_UPCALL_RESULT_OK;
		}
		case CCN_UPCALL_INTEREST_TIMED_OUT: {
			return CCN_UPCALL_RESULT_REEXPRESS;
		}
		case CCN_UPCALL_CONTENT_UNVERIFIED:
		case CCN_UPCALL_CONTENT_KEYMISSING:
		case CCN_UPCALL_CONTENT_RAW:
		case CCN_UPCALL_CONTENT: {
			struct ccn_forwarding_entry* fe = NULL;
			const unsigned char* fe_ccnb = NULL;
			size_t fe_ccnb_size = 0;
			int res = ccn_content_get_value(info->content_ccnb, info->pco->offset[CCN_PCO_E], info->pco, &fe_ccnb, &fe_ccnb_size);
			if (res == 0) fe = ccn_forwarding_entry_parse(fe_ccnb, fe_ccnb_size);
			if (fe != NULL) {
				self->faceid = fe->faceid;
				ccn_forwarding_entry_destroy(&fe);
			} else {
				self->error = true;
			}
			PollMgr_detach(self->pm, ccn_get_connection_fd(self->ccnh), &CcnLAC_initPollCb, self);
			void* emptyPDU = malloc(CCN_EMPTY_PDU_LENGTH);
			memcpy(emptyPDU, CCN_EMPTY_PDU, CCN_EMPTY_PDU_LENGTH);
			NBS_write(self->nbs, emptyPDU, 0, CCN_EMPTY_PDU_LENGTH, NULL);
			NBS_pollAttach(self->nbs, self->pm);
			return CCN_UPCALL_RESULT_OK;
		}
		default: {
			return CCN_UPCALL_RESULT_ERR;
		}
	}
}