⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 spdb.c

📁 This a good VPN source
💻 C
📖 第 1 页 / 共 3 页
字号:
static struct db_prop espnull_compress_pc[] = {    { PROTO_IPSEC_ESP, AD(espnull_trans) },    { PROTO_IPCOMP, AD(ipcomp_trans) },    };#endif /* SUPPORT_ESP_NULL */static struct db_prop esp_compress_pc[] = {    { PROTO_IPSEC_ESP, AD(espa_trans) },    { PROTO_IPCOMP, AD(ipcomp_trans) },    };static struct db_prop ah_esp_compress_pc[] = {    { PROTO_IPSEC_AH, AD(ah_trans) },    { PROTO_IPSEC_ESP, AD(esp_trans) },    { PROTO_IPCOMP, AD(ipcomp_trans) },    };/* arrays of proposal alternatives (each element is a conjunction) */static struct db_prop_conj ah_props[] = {    { AD(ah_pc) },#ifdef SUPPORT_ESP_NULL    { AD(espnull_pc) }#endif    };static struct db_prop_conj esp_props[] =    { { AD(esp_pc) } };static struct db_prop_conj ah_esp_props[] =    { { AD(ah_esp_pc) } };static struct db_prop_conj compress_props[] = {    { AD(compress_pc) },    };static struct db_prop_conj ah_compress_props[] = {    { AD(ah_compress_pc) },#ifdef SUPPORT_ESP_NULL    { AD(espnull_compress_pc) }#endif    };static struct db_prop_conj esp_compress_props[] =    { { AD(esp_compress_pc) } };static struct db_prop_conj ah_esp_compress_props[] =    { { AD(ah_esp_compress_pc) } };/* The IPsec sadb is subscripted by a bitset (subset of policy) * with members from { POLICY_ENCRYPT, POLICY_AUTHENTICATE, POLICY_COMPRESS } * shifted right by POLICY_IPSEC_SHIFT. */struct db_sa ipsec_sadb[1 << 3] = {    { AD_NULL },	/* none */    { AD(esp_props) },	/* POLICY_ENCRYPT */    { AD(ah_props) },	/* POLICY_AUTHENTICATE */    { AD(ah_esp_props) },	/* POLICY_ENCRYPT+POLICY_AUTHENTICATE */    { AD(compress_props) },	/* POLICY_COMPRESS */    { AD(esp_compress_props) },	/* POLICY_ENCRYPT+POLICY_COMPRESS */    { AD(ah_compress_props) },	/* POLICY_AUTHENTICATE+POLICY_COMPRESS */    { AD(ah_esp_compress_props) },	/* POLICY_ENCRYPT+POLICY_AUTHENTICATE+POLICY_COMPRESS */    };#undef AD#undef AD_NULLvoidfree_sa_trans(struct db_trans *tr){    if(tr->attrs) {	pfree(tr->attrs);    }}voidfree_sa_prop(struct db_prop *dp){    int i;    for(i=0; i<dp->trans_cnt; i++) {	free_sa_trans(&dp->trans[i]);    }    if(dp->trans) {	pfree(dp->trans);    }}voidfree_sa_prop_conj(struct db_prop_conj *pc){    int i;    for(i=0; i<pc->prop_cnt; i++) {	free_sa_prop(&pc->props[i]);    }    if(pc->props) {	pfree(pc->props);    }}voidfree_sa(struct db_sa *f){    int i;    for(i=0; i<f->prop_conj_cnt; i++) {	free_sa_prop_conj(&f->prop_conjs[i]);    }    if(f->prop_conjs) {	pfree(f->prop_conjs);    }    if(f) {	pfree(f);    }}void clone_trans(struct db_trans *tr){    tr->attrs = clone_bytes(tr->attrs			    , tr->attr_cnt*sizeof(tr->attrs[0])			    , "sa copy attrs array");}void clone_prop(struct db_prop *p, int extra){    int i;    p->trans = clone_bytes(p->trans			  , (p->trans_cnt+extra)*sizeof(p->trans[0])			  , "sa copy trans array");    for(i=0; i<p->trans_cnt; i++) {	clone_trans(&p->trans[i]);    }}void clone_propconj(struct db_prop_conj *pc, int extra){    int i;    pc->props = clone_bytes(pc->props			   , (pc->prop_cnt+extra)*sizeof(pc->props[0])			   , "sa copy prop array");    for(i=0; i<pc->prop_cnt; i++) {	clone_prop(&pc->props[i], 0);    }}struct db_sa *sa_copy_sa(struct db_sa *sa, int extra){    int i;    struct db_sa *nsa;    nsa = clone_thing(*sa, "sa copy prop_conj");    nsa->prop_conjs =	clone_bytes(nsa->prop_conjs		    , (nsa->prop_conj_cnt+extra)*sizeof(nsa->prop_conjs[0])		    , "sa copy prop conj array");    for(i=0; i<nsa->prop_conj_cnt; i++) {	clone_propconj(&nsa->prop_conjs[i], 0);    }        return nsa;}/* * clone the sa, but keep only the first proposal */struct db_sa *sa_copy_sa_first(struct db_sa *sa){    struct db_sa *nsa;    struct db_prop_conj *pc;    struct db_prop *p;    nsa = clone_thing(*sa, "sa copy prop_conj");    if(nsa->prop_conj_cnt == 0) {      return nsa;    }    nsa->prop_conj_cnt = 1;    nsa->prop_conjs = clone_bytes(nsa->prop_conjs				  , sizeof(nsa->prop_conjs[0])				  , "sa copy 1 prop conj array");    pc = &nsa->prop_conjs[0];    if(pc->prop_cnt == 0) {      return nsa;    }    pc->prop_cnt = 1;    pc->props = clone_bytes(pc->props			    , sizeof(pc->props[0])			    , "sa copy 1 prop array");    p = &pc->props[0];    if(p->trans_cnt == 0) {      return nsa;    }    p->trans_cnt = 1;    p->trans = clone_bytes(p->trans			   , sizeof(p->trans[0])			   , "sa copy 1 trans array");    clone_trans(&p->trans[0]);    return nsa;}/* * this routine takes two proposals and conjoins them (or) * *  */struct db_sa *sa_merge_proposals(struct db_sa *a, struct db_sa *b){    struct db_sa *n;    int i,j,k;    if(a == NULL || a->prop_conj_cnt == 0) {	return sa_copy_sa(b, 0);    }    if(b == NULL || b->prop_conj_cnt == 0) {	return sa_copy_sa(a, 0);    }    n = clone_thing(*a, "conjoin sa");    passert(a->prop_conj_cnt == b->prop_conj_cnt);    passert(a->prop_conj_cnt == 1);    n->prop_conjs =	clone_bytes(n->prop_conjs		    , n->prop_conj_cnt*sizeof(n->prop_conjs[0])		    , "sa copy prop conj array");    for(i=0; i<n->prop_conj_cnt; i++) {	struct db_prop_conj *pca= &n->prop_conjs[i];	struct db_prop_conj *pcb= &b->prop_conjs[i];	passert(pca->prop_cnt == pcb->prop_cnt);	passert(pca->prop_cnt == 1);	pca->props = clone_bytes(pca->props				, pca->prop_cnt*sizeof(pca->props[0])				, "sa copy prop array");	for(j=0; j<pca->prop_cnt; j++) {	    struct db_prop *pa = &pca->props[j];	    struct db_prop *pb = &pcb->props[j];	    struct db_trans *t;	    int t_cnt = (pa->trans_cnt+pb->trans_cnt);	    t = alloc_bytes(t_cnt*sizeof(pa->trans[0])			    , "sa copy trans array");	    memcpy(t, pa->trans, (pa->trans_cnt)*sizeof(pa->trans[0]));	    memcpy(t+(pa->trans_cnt)		   , pb->trans		   , (pb->trans_cnt)*sizeof(pa->trans[0]));	    pa->trans = t;	    pa->trans_cnt = t_cnt;	    for(k=0; k<pa->trans_cnt; k++) {		clone_trans(&pa->trans[k]);	    }	}    }    return n;}#ifdef PRINT_SA_DEBUGvoidprint_sa_attr(struct db_attr *at){    if(at->type == 0) {	return;    }        printf("        type: %u val: %d\n", at->type, at->val);}voidprint_sa_trans(struct db_trans *tr){    int i;    printf("      transform: %d cnt: %d\n",	   tr->transid, tr->attr_cnt);    for(i=0; i<tr->attr_cnt; i++) {	print_sa_attr(&tr->attrs[i]);    }}voidprint_sa_prop(struct db_prop *dp){    int i;    printf("    protoid: %d cnt: %d\n",	   dp->protoid, dp->trans_cnt);    for(i=0; i<dp->trans_cnt; i++) {	print_sa_trans(&dp->trans[i]);    }}voidprint_sa_prop_conj(struct db_prop_conj *pc){    int i;    printf("  conjunctions cnt: %d\n",	   pc->prop_cnt);    for(i=0; i<pc->prop_cnt; i++) {	print_sa_prop(&pc->props[i]);    }}voidsa_print(struct db_sa *f){    int i;    printf("sa disjunct cnt: %d\n",	   f->prop_conj_cnt);    for(i=0; i<f->prop_conj_cnt; i++) {	print_sa_prop_conj(&f->prop_conjs[i]);    }}#endif/* * Local Variables: * c-style: pluto * c-basic-offset: 4 * End: */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -