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

📄 cc.c

📁 bind 9.3结合mysql数据库
💻 C
📖 第 1 页 / 共 2 页
字号:
static isc_result_tlist_fromwire(isccc_region_t *source, isccc_sexpr_t **listp){	isccc_sexpr_t *list, *value;	isc_result_t result;	list = NULL;	while (!REGION_EMPTY(*source)) {		value = NULL;		result = value_fromwire(source, &value);		if (result != ISC_R_SUCCESS) {			isccc_sexpr_free(&list);			return (result);		}		if (isccc_sexpr_addtolist(&list, value) == NULL) {			isccc_sexpr_free(&value);			isccc_sexpr_free(&list);			return (result);		}	}	*listp = list;		return (ISC_R_SUCCESS);}isc_result_tisccc_cc_fromwire(isccc_region_t *source, isccc_sexpr_t **alistp,		isccc_region_t *secret){	unsigned int size;	isc_uint32_t version;	size = REGION_SIZE(*source);	if (size < 4)		return (ISC_R_UNEXPECTEDEND);	GET32(version, source->rstart);	if (version != 1)		return (ISCCC_R_UNKNOWNVERSION);			return (table_fromwire(source, secret, alistp));}static isc_result_tcreatemessage(isc_uint32_t version, const char *from, const char *to,	      isc_uint32_t serial, isccc_time_t now,	      isccc_time_t expires, isccc_sexpr_t **alistp,	      isc_boolean_t want_expires){	isccc_sexpr_t *alist, *_ctrl, *_data;	isc_result_t result;	REQUIRE(alistp != NULL && *alistp == NULL);	if (version != 1)		return (ISCCC_R_UNKNOWNVERSION);	alist = isccc_alist_create();	if (alist == NULL)		return (ISC_R_NOMEMORY);	result = ISC_R_NOMEMORY;	_ctrl = isccc_alist_create();	_data = isccc_alist_create();	if (_ctrl == NULL || _data == NULL)		goto bad;	if (isccc_alist_define(alist, "_ctrl", _ctrl) == NULL ||	    isccc_alist_define(alist, "_data", _data) == NULL)		goto bad;	if (isccc_cc_defineuint32(_ctrl, "_ser", serial) == NULL ||	    isccc_cc_defineuint32(_ctrl, "_tim", now) == NULL ||	    (want_expires &&	     isccc_cc_defineuint32(_ctrl, "_exp", expires) == NULL))		goto bad;	if (from != NULL &&	    isccc_cc_definestring(_ctrl, "_frm", from) == NULL)		goto bad;	if (to != NULL &&	    isccc_cc_definestring(_ctrl, "_to", to) == NULL)		goto bad;			*alistp = alist;	return (ISC_R_SUCCESS); bad:	isccc_sexpr_free(&alist);	return (result);}isc_result_tisccc_cc_createmessage(isc_uint32_t version, const char *from, const char *to,		     isc_uint32_t serial, isccc_time_t now,		     isccc_time_t expires, isccc_sexpr_t **alistp){	return (createmessage(version, from, to, serial, now, expires,			      alistp, ISC_TRUE));}isc_result_tisccc_cc_createack(isccc_sexpr_t *message, isc_boolean_t ok,		 isccc_sexpr_t **ackp){	char *_frm, *_to;	isc_uint32_t serial;	isccc_sexpr_t *ack, *_ctrl;	isc_result_t result;	isccc_time_t t;	REQUIRE(ackp != NULL && *ackp == NULL);	_ctrl = isccc_alist_lookup(message, "_ctrl");	if (_ctrl == NULL ||	    isccc_cc_lookupuint32(_ctrl, "_ser", &serial) != ISC_R_SUCCESS ||	    isccc_cc_lookupuint32(_ctrl, "_tim", &t) != ISC_R_SUCCESS)		return (ISC_R_FAILURE);	/*	 * _frm and _to are optional.	 */	_frm = NULL;	(void)isccc_cc_lookupstring(_ctrl, "_frm", &_frm);	_to = NULL;	(void)isccc_cc_lookupstring(_ctrl, "_to", &_to);	/*	 * Create the ack.	 */	ack = NULL;	result = createmessage(1, _to, _frm, serial, t, 0, &ack, ISC_FALSE);	if (result != ISC_R_SUCCESS)		return (result);	_ctrl = isccc_alist_lookup(ack, "_ctrl");	if (_ctrl == NULL)		return (ISC_R_FAILURE);	if (isccc_cc_definestring(ack, "_ack", (ok) ? "1" : "0") == NULL) {		result = ISC_R_NOMEMORY;		goto bad;	}	*ackp = ack;	return (ISC_R_SUCCESS); bad:	isccc_sexpr_free(&ack);	return (result);}isc_boolean_tisccc_cc_isack(isccc_sexpr_t *message){	isccc_sexpr_t *_ctrl;	_ctrl = isccc_alist_lookup(message, "_ctrl");	if (_ctrl == NULL)		return (ISC_FALSE);	if (isccc_cc_lookupstring(_ctrl, "_ack", NULL) == ISC_R_SUCCESS)		return (ISC_TRUE);	return (ISC_FALSE);}isc_boolean_tisccc_cc_isreply(isccc_sexpr_t *message){	isccc_sexpr_t *_ctrl;	_ctrl = isccc_alist_lookup(message, "_ctrl");	if (_ctrl == NULL)		return (ISC_FALSE);	if (isccc_cc_lookupstring(_ctrl, "_rpl", NULL) == ISC_R_SUCCESS)		return (ISC_TRUE);	return (ISC_FALSE);}isc_result_tisccc_cc_createresponse(isccc_sexpr_t *message, isccc_time_t now,		      isccc_time_t expires, isccc_sexpr_t **alistp){	char *_frm, *_to, *type;	isc_uint32_t serial;	isccc_sexpr_t *alist, *_ctrl, *_data;	isc_result_t result;	REQUIRE(alistp != NULL && *alistp == NULL);	_ctrl = isccc_alist_lookup(message, "_ctrl");	_data = isccc_alist_lookup(message, "_data");	if (_ctrl == NULL ||	    _data == NULL ||	    isccc_cc_lookupuint32(_ctrl, "_ser", &serial) != ISC_R_SUCCESS ||	    isccc_cc_lookupstring(_data, "type", &type) != ISC_R_SUCCESS)		return (ISC_R_FAILURE);	/*	 * _frm and _to are optional.	 */	_frm = NULL;	(void)isccc_cc_lookupstring(_ctrl, "_frm", &_frm);	_to = NULL;	(void)isccc_cc_lookupstring(_ctrl, "_to", &_to);	/*	 * Create the response.	 */	alist = NULL;	result = isccc_cc_createmessage(1, _to, _frm, serial, now, expires,					 &alist);	if (result != ISC_R_SUCCESS)		return (result);	_ctrl = isccc_alist_lookup(alist, "_ctrl");	if (_ctrl == NULL)		return (ISC_R_FAILURE);	_data = isccc_alist_lookup(alist, "_data");	if (_data == NULL)		return (ISC_R_FAILURE);	if (isccc_cc_definestring(_ctrl, "_rpl", "1") == NULL ||	    isccc_cc_definestring(_data, "type", type) == NULL) {		isccc_sexpr_free(&alist);		return (ISC_R_NOMEMORY);	}	*alistp = alist;	return (ISC_R_SUCCESS);}isccc_sexpr_t *isccc_cc_definestring(isccc_sexpr_t *alist, const char *key, const char *str){	size_t len;	isccc_region_t r;	len = strlen(str);	DE_CONST(str, r.rstart);	r.rend = r.rstart + len;	return (isccc_alist_definebinary(alist, key, &r));}isccc_sexpr_t *isccc_cc_defineuint32(isccc_sexpr_t *alist, const char *key, isc_uint32_t i){	char b[100];	size_t len;	isccc_region_t r;	snprintf(b, sizeof(b), "%u", i);	len = strlen(b);	r.rstart = (unsigned char *)b;	r.rend = (unsigned char *)b + len;	return (isccc_alist_definebinary(alist, key, &r));}isc_result_tisccc_cc_lookupstring(isccc_sexpr_t *alist, const char *key, char **strp){	isccc_sexpr_t *kv, *v;	kv = isccc_alist_assq(alist, key);	if (kv != NULL) {		v = ISCCC_SEXPR_CDR(kv);		if (isccc_sexpr_binaryp(v)) {			if (strp != NULL)				*strp = isccc_sexpr_tostring(v);			return (ISC_R_SUCCESS);		} else			return (ISC_R_EXISTS);	}	return (ISC_R_NOTFOUND);}isc_result_tisccc_cc_lookupuint32(isccc_sexpr_t *alist, const char *key,		       isc_uint32_t *uintp){	isccc_sexpr_t *kv, *v;	kv = isccc_alist_assq(alist, key);	if (kv != NULL) {		v = ISCCC_SEXPR_CDR(kv);		if (isccc_sexpr_binaryp(v)) {			if (uintp != NULL)				*uintp = (isc_uint32_t)					strtoul(isccc_sexpr_tostring(v),						NULL, 10);			return (ISC_R_SUCCESS);		} else			return (ISC_R_EXISTS);	}	return (ISC_R_NOTFOUND);}static voidsymtab_undefine(char *key, unsigned int type, isccc_symvalue_t value,		void *arg){	UNUSED(type);	UNUSED(value);	UNUSED(arg);	free(key);}static isc_boolean_tsymtab_clean(char *key, unsigned int type, isccc_symvalue_t value,	     void *arg){	isccc_time_t *now;	UNUSED(key);	UNUSED(type);	now = arg;	if (*now < value.as_uinteger)		return (ISC_FALSE);	if ((*now - value.as_uinteger) < DUP_LIFETIME)		return (ISC_FALSE);	return (ISC_TRUE);}isc_result_tisccc_cc_createsymtab(isccc_symtab_t **symtabp){	return (isccc_symtab_create(11897, symtab_undefine, NULL, ISC_FALSE,				  symtabp));}voidisccc_cc_cleansymtab(isccc_symtab_t *symtab, isccc_time_t now){	isccc_symtab_foreach(symtab, symtab_clean, &now);}static isc_boolean_thas_whitespace(const char *str){	char c;	if (str == NULL)		return (ISC_FALSE);	while ((c = *str++) != '\0') {		if (c == ' ' || c == '\t' || c == '\n')			return (ISC_TRUE);	}	return (ISC_FALSE);}isc_result_tisccc_cc_checkdup(isccc_symtab_t *symtab, isccc_sexpr_t *message,		isccc_time_t now){	const char *_frm;	const char *_to;	char *_ser, *_tim, *tmp;	isc_result_t result;	char *key;	size_t len;	isccc_symvalue_t value;	isccc_sexpr_t *_ctrl;	_ctrl = isccc_alist_lookup(message, "_ctrl");	if (_ctrl == NULL ||	    isccc_cc_lookupstring(_ctrl, "_ser", &_ser) != ISC_R_SUCCESS ||	    isccc_cc_lookupstring(_ctrl, "_tim", &_tim) != ISC_R_SUCCESS)		return (ISC_R_FAILURE);	/*	 * _frm and _to are optional.	 */	if (isccc_cc_lookupstring(_ctrl, "_frm", &tmp) != ISC_R_SUCCESS)		_frm = "";	else		_frm = tmp;	if (isccc_cc_lookupstring(_ctrl, "_to", &tmp) != ISC_R_SUCCESS)		_to = "";	else		_to = tmp;	/*	 * Ensure there is no newline in any of the strings.  This is so	 * we can write them to a file later.	 */	if (has_whitespace(_frm) || has_whitespace(_to) ||	    has_whitespace(_ser) || has_whitespace(_tim))		return (ISC_R_FAILURE);	len = strlen(_frm) + strlen(_to) + strlen(_ser) + strlen(_tim) + 4;	key = malloc(len);	if (key == NULL)		return (ISC_R_NOMEMORY);	snprintf(key, len, "%s;%s;%s;%s", _frm, _to, _ser, _tim);	value.as_uinteger = now;	result = isccc_symtab_define(symtab, key, ISCCC_SYMTYPE_CCDUP, value,				   isccc_symexists_reject);	if (result != ISC_R_SUCCESS) {		free(key);		return (result);	}	return (ISC_R_SUCCESS);}

⌨️ 快捷键说明

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