示例#1
0
void NBS_pollDetach(NBS self) {
    if (self->pm == NULL) return;
    PollMgr_detach(self->pm, self->sockR, &NBS_pollCb, self);
    if (self->sockR != self->sockW) {
        PollMgr_detach(self->pm, self->sockW, &NBS_pollCb, self);
    }
    self->pm = NULL;
}
示例#2
0
文件: CcnClient.c 项目: ltr120/NDNFD
void CcnLAC_dtor(CcnLAC self) {
	if (self->pm != NULL) PollMgr_detach(self->pm, ccn_get_connection_fd(self->ccnh), &CcnLAC_initPollCb, self);
	if (self->nbs != NULL) NBS_pollDetach(self->nbs);
	ccn_destroy(&(self->ccnh));
	if (self->ccnbor != NULL) CcnbOR_dtor(self->ccnbor);
	free(self);
}
示例#3
0
文件: CcnClient.c 项目: ltr120/NDNFD
void CcnLAC_initPollCb(void* pself, PollMgrEvt evt, struct pollfd* fd) {
	CcnLAC self = (CcnLAC)pself;
	switch (evt) {
		case PollMgrEvt_prepare:
			CcnH_pollPrepare(self->ccnh, fd);
			break;
		case PollMgrEvt_result:
			CcnH_pollRun(self->ccnh, fd);
			break;
		case PollMgrEvt_error:
			self->error = true;
			PollMgr_detach(self->pm, ccn_get_connection_fd(self->ccnh), &CcnLAC_initPollCb, self);
			break;
	}
}
示例#4
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;
		}
	}
}
示例#5
0
文件: CcnClient.c 项目: ltr120/NDNFD
void CcnCC_pollDetach(CcnCC self, PollMgr pm) {
	PollMgr_detach(pm, ccn_get_connection_fd(self->ccnh), &CcnCC_pollCb, self);
}