亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? cl_msg.c

?? linux集群服務器軟件代碼包
?? C
?? 第 1 頁 / 共 5 頁
字號:
/* $Id: cl_msg.c,v 1.55 2005/02/17 21:45:35 gshi Exp $ *//* * Heartbeat messaging object. * * Copyright (C) 2000 Alan Robertson <alanr@unix.sh> * * This software licensed under the GNU LGPL. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA * */#include <portability.h>#include <stdlib.h>#include <stdio.h>#include <string.h>#include <time.h>#include <errno.h>#include <sys/utsname.h>#include <ha_msg.h>#include <unistd.h>#include <clplumbing/cl_malloc.h>#include <clplumbing/cl_log.h>#include <clplumbing/ipc.h>#include <clplumbing/base64.h>#include <clplumbing/netstring.h>#include <glib.h>#include <uuid/uuid.h>#define		MAXMSGLINE	MAXMSG#define		MINFIELDS	30#define		CRNL		"\r\n"#define		MAX_AUTH_BYTES	64#define		NEEDAUTH	1#define		NOAUTH		0#define		MAX_INT_LEN 	10#define		MAX_NAME_LEN 	255#define		UUID_SLEN	64static enum cl_msgfmt msgfmt = MSGFMT_NVPAIR;const char*FT_strings[]={	"0",	"1",	"2",	"3",	"4",	"5",	"6",	"7",	"8",	"9"};#undef DOAUDITS#ifdef DOAUDITSvoid ha_msg_audit(const struct ha_msg* msg);#	define	AUDITMSG(msg)	ha_msg_audit(msg)#else#	define	AUDITMSG(msg)	/* Nothing */#endifstatic volatile hb_msg_stats_t*	msgstats = NULL;gboolean cl_msg_quiet_fmterr = FALSE;extern int		netstring_format;static struct ha_msg* wirefmt2msg_ll(const char* s, size_t length, int need_auth);struct ha_msg* string2msg_ll(const char * s, size_t length, int need_auth, int depth);extern int struct_stringlen(size_t namlen, size_t vallen, const void* value);extern int struct_netstringlen(size_t namlen, size_t vallen, const void* value);voidcl_msg_setstats(volatile hb_msg_stats_t* stats){	msgstats = stats;}/* Set default messaging format */voidcl_set_msg_format(enum cl_msgfmt mfmt){	msgfmt = mfmt;}voidlist_cleanup(GList* list){	int i;	for (i = 0; i < g_list_length(list); i++){		char* element = g_list_nth_data(list, i);		if (element == NULL){			cl_log(LOG_WARNING, "list_cleanup:"			       "element is NULL");			continue;		}		ha_free(element);	}	g_list_free(list);}/* Create a new (empty) message */struct ha_msg *ha_msg_new(nfields){	struct ha_msg *	ret;	int	nalloc;	ret = MALLOCT(struct ha_msg);	if (ret) {		ret->nfields = 0;		if (nfields > MINFIELDS) {			nalloc = nfields;		} else {			nalloc = MINFIELDS;		}		ret->nalloc    = nalloc;		ret->names     = (char **)ha_calloc(sizeof(char *), nalloc);		ret->nlens     = (int *)ha_calloc(sizeof(int), nalloc);		ret->values    = (void **)ha_calloc(sizeof(void *), nalloc);		ret->vlens     = (size_t *)ha_calloc(sizeof(size_t), nalloc);		ret->stringlen = sizeof(MSG_START)+sizeof(MSG_END)-1;		ret->netstringlen = sizeof(MSG_START_NETSTRING)		+	sizeof(MSG_END_NETSTRING) - 1 + MAX_AUTH_BYTES;		ret->types	= (int*)ha_calloc(sizeof(int), nalloc);		if (ret->names == NULL || ret->values == NULL		||	ret->nlens == NULL || ret->vlens == NULL		||	ret->types == NULL) {			cl_log(LOG_ERR, "%s"			,	"ha_msg_new: out of memory for ha_msg");			/* It is safe to give this to ha_msg_del() */			/* at this point.  It's well-enough-formed */			ha_msg_del(ret); /*violated property*/			ret = NULL;		}else if (msgstats) {			msgstats->allocmsgs++;			msgstats->totalmsgs++;			msgstats->lastmsg = time_longclock();		}	}	return(ret);}/* Delete (destroy) a message */voidha_msg_del(struct ha_msg *msg){	if (msg) {		int	j;		AUDITMSG(msg);		if (msgstats) {			msgstats->allocmsgs--;		}		if (msg->names) {			for (j=0; j < msg->nfields; ++j) {				if (msg->names[j]) {					ha_free(msg->names[j]);					msg->names[j] = NULL;				}			}			ha_free(msg->names);			msg->names = NULL;		}		if (msg->values) {			for (j=0; j < msg->nfields; ++j) {				if (msg->values[j] == NULL){					continue;				}								if(msg->types[j] < DIMOF(fieldtypefuncs)){										fieldtypefuncs[msg->types[j]].memfree(msg->values[j]);				}			}			ha_free(msg->values);			msg->values = NULL;		}		if (msg->nlens) {			ha_free(msg->nlens);			msg->nlens = NULL;		}		if (msg->vlens) {			ha_free(msg->vlens);			msg->vlens = NULL;		}		if (msg->types){			ha_free(msg->types);			msg->types = NULL;		}		msg->nfields = -1;		msg->nalloc = -1;		msg->stringlen = -1;		msg->netstringlen = -1;		ha_free(msg);	}}struct ha_msg*ha_msg_copy(const struct ha_msg *msg){	struct ha_msg*		ret;	int			j;		AUDITMSG(msg);	if (msg == NULL || (ret = ha_msg_new(msg->nalloc)) == NULL) {   		return NULL;   	} 	ret->nfields	= msg->nfields;	ret->stringlen	= msg->stringlen;	ret->netstringlen = msg->netstringlen;	memcpy(ret->nlens, msg->nlens, sizeof(msg->nlens[0])*msg->nfields);	memcpy(ret->vlens, msg->vlens, sizeof(msg->nlens[0])*msg->nfields);	memcpy(ret->types, msg->types, sizeof(msg->types[0])*msg->nfields);	for (j=0; j < msg->nfields; ++j) {		if ((ret->names[j] = ha_malloc(msg->nlens[j]+1)) == NULL) {			goto freeandleave;		}		memcpy(ret->names[j], msg->names[j], msg->nlens[j]+1);						if(msg->types[j] < DIMOF(fieldtypefuncs)){								ret->values[j] = fieldtypefuncs[msg->types[j]].dup(msg->values[j],									   msg->vlens[j]);			if (!ret->values[j]){				cl_log(LOG_ERR,"duplicating the message field failed");				goto freeandleave;			}		}	}	return ret;freeandleave:        /*   	 * ha_msg_del nicely handles partially constructed ha_msgs	 * so, there's not really a memory leak here at all, but BEAM   	 * thinks there is.   	 */   	ha_msg_del(ret);/* memory leak */       ret=NULL; 	return ret;}#ifdef DOAUDITSvoidha_msg_audit(const struct ha_msg* msg){	int	doabort = FALSE;	int	j;	if (!msg) {		return;	}	if (!ha_is_allocated(msg)) {		cl_log(LOG_CRIT, "Message @ 0x%x is not allocated"		,	(unsigned) msg);		abort();	}	if (msg->nfields < 0) {		cl_log(LOG_CRIT, "Message @ 0x%x has negative fields (%d)"		,	(unsigned) msg, msg->nfields);		doabort = TRUE;	}	if (msg->nalloc < 0) {		cl_log(LOG_CRIT, "Message @ 0x%x has negative nalloc (%d)"		,	(unsigned) msg, msg->nalloc);		doabort = TRUE;	}	if (msg->stringlen <=0 	    || msg->netstringlen <= 0) {		cl_log(LOG_CRIT,		       "Message @ 0x%x has non-negative net/stringlen field"		       "stringlen=(%d), netstringlen=(%d)",		       (unsigned) msg, msg->stringlen, msg->netstringlen);		doabort = TRUE;	}	if (!ha_is_allocated(msg->names)) {		cl_log(LOG_CRIT		,	"Message names @ 0x%x is not allocated"		,	(unsigned) msg->names);		doabort = TRUE;	}	if (!ha_is_allocated(msg->values)) {		cl_log(LOG_CRIT		,	"Message values @ 0x%x is not allocated"		,	(unsigned) msg->values);		doabort = TRUE;	}	if (!ha_is_allocated(msg->nlens)) {		cl_log(LOG_CRIT		,	"Message nlens @ 0x%x is not allocated"		,	(unsigned) msg->nlens);		doabort = TRUE;	}	if (!ha_is_allocated(msg->vlens)) {		cl_log(LOG_CRIT		,	"Message vlens @ 0x%x is not allocated"		,	(unsigned) msg->vlens);		doabort = TRUE;	}	if (doabort) {		abort();	}	for (j=0; j < msg->nfields; ++j) {		if (!ha_is_allocated(msg->names[j])) {			cl_log(LOG_CRIT, "Message name[%d] @ 0x%x"			" is not allocated."			,	j, (unsigned) msg->names[j]);		}		if (!ha_is_allocated(msg->values[j])) {			cl_log(LOG_CRIT, "Message value [%d] @ 0x%x"			" is not allocated."			,	j, (unsigned) msg->values[j]);		}	}}#endifstatic intha_msg_expand(struct ha_msg* msg ){		char **	names ;	int  *	nlens ;	void **	values ;	size_t*	vlens ;	int *	types ;	int	nalloc;       	if(!msg){		cl_log(LOG_ERR, "ha_msg_expand:"		       "input msg is null");		return HA_FAIL;	}	names = msg->names;	nlens = msg->nlens;	values = msg->values;	vlens = msg->vlens;	types = msg->types;		nalloc = msg->nalloc + MINFIELDS;	msg->names = 	(char **)ha_calloc(sizeof(char *), nalloc);	msg->nlens = 	(int *)ha_calloc(sizeof(int), nalloc);	msg->values = 	(void **)ha_calloc(sizeof(void *), nalloc);	msg->vlens = 	(size_t *)ha_calloc(sizeof(size_t), nalloc);	msg->types= 	(int*)ha_calloc(sizeof(int), nalloc);		if (msg->names == NULL || msg->values == NULL	    ||	msg->nlens == NULL || msg->vlens == NULL	    ||	msg->types == NULL) {				cl_log(LOG_ERR, "%s"		       ,	" out of memory for ha_msg");				return(HA_FAIL);	}		memcpy(msg->names, names, msg->nalloc*sizeof(char *));	memcpy(msg->nlens, nlens, msg->nalloc*sizeof(int));	memcpy(msg->values, values, msg->nalloc*sizeof(void *));	memcpy(msg->vlens, vlens, msg->nalloc*sizeof(size_t));	memcpy(msg->types, types, msg->nalloc*sizeof(int));		ha_free(names);	ha_free(nlens);	ha_free(values);	ha_free(vlens);	ha_free(types);		msg->nalloc = nalloc;		return HA_OK;}intcl_msg_remove_value(struct ha_msg* msg, const void* value){	int j;		if (msg == NULL || value == NULL){		cl_log(LOG_ERR, "cl_msg_remove: invalid argument");		return HA_FAIL;	}		for (j = 0; j < msg->nfields; ++j){		if (value == msg->values[j]){			break;					}	}	if (j == msg->nfields){				cl_log(LOG_ERR, "cl_msg_remove: field %p not found", value);		return HA_FAIL;	}	return cl_msg_remove_offset(msg, j);	}intcl_msg_remove(struct ha_msg* msg, const char* name){	int j;		if (msg == NULL || name == NULL){		cl_log(LOG_ERR, "cl_msg_remove: invalid argument");		return HA_FAIL;	}		for (j = 0; j < msg->nfields; ++j){		if (strcmp(name, msg->names[j]) == 0){			break;					}	}		if (j == msg->nfields){				cl_log(LOG_ERR, "cl_msg_remove: field %s not found", name);		return HA_FAIL;	}	return cl_msg_remove_offset(msg, j);}intcl_msg_remove_offset(struct ha_msg* msg, int offset){	int j = offset;	int i;	int tmplen;		if (j == msg->nfields){				cl_log(LOG_ERR, "cl_msg_remove: field %d not found", j);		return HA_FAIL;	}			if (msg->types[j] != FT_STRUCT){		tmplen = msg->stringlen;		msg->stringlen -=  fieldtypefuncs[msg->types[j]].stringlen(msg->nlens[j],									   msg->vlens[j],									   msg->values[j]);		if (msg->stringlen <=0){			cl_log(LOG_ERR, "cl_msg_remove: stringlen <= 0 after removing"			       "field %s. Return failure", msg->names[j]);			msg->stringlen =tmplen;			return HA_FAIL;		}				tmplen = msg->netstringlen;		msg->netstringlen -=  fieldtypefuncs[msg->types[j]].netstringlen(msg->nlens[j],										 msg->vlens[j],       										 msg->values[j]);			if (msg->netstringlen <=0){			cl_log(LOG_ERR, "cl_msg_remove: netstringlen <= 0 after removing"			       "field %s. return failure", msg->names[j]);			msg->netstringlen =tmplen;			return HA_FAIL;		}	}		ha_free(msg->names[j]);	fieldtypefuncs[msg->types[j]].memfree(msg->values[j]);		for (i= j + 1; i < msg->nfields ; i++){		msg->names[i -1] = msg->names[i];		msg->nlens[i -1] = msg->nlens[i];		msg->values[i -1] = msg->values[i];		msg->vlens[i-1] = msg->vlens[i];		msg->types[i-1] = msg->types[i];	}	msg->nfields--;		return HA_OK;}/* low level implementation for ha_msg_add   the caller is responsible to allocate/free memories   for @name and @value.*/static intha_msg_addraw_ll(struct ha_msg * msg, char * name, size_t namelen,		 void * value, size_t vallen, int type, int depth){

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
波多野结衣亚洲一区| 麻豆精品久久久| 99久久精品费精品国产一区二区| 久久久久亚洲综合| 国产v综合v亚洲欧| 1024成人网色www| 日本韩国欧美在线| 婷婷中文字幕一区三区| 91精品国产综合久久精品| 蜜臀精品一区二区三区在线观看| 日韩美女视频在线| 成人免费看的视频| 亚洲卡通欧美制服中文| 欧美久久一二区| 久久疯狂做爰流白浆xx| 亚洲国产精品国自产拍av| 色综合久久久久综合99| 天使萌一区二区三区免费观看| 欧美一区二区三区播放老司机| 久久99国产精品免费| 国产精品成人一区二区三区夜夜夜| 色婷婷亚洲一区二区三区| 偷拍日韩校园综合在线| 久久一区二区视频| 99视频一区二区| 日本不卡中文字幕| 国产精品美女久久久久久| 欧美日韩亚洲综合一区| 国产精品一二三四五| 亚洲女爱视频在线| 日韩精品一区二区三区在线观看 | 亚洲不卡在线观看| 欧美岛国在线观看| 99国产精品久久久| 青青草精品视频| 国产精品电影一区二区三区| 欧美日韩国产一二三| 成人免费视频播放| 热久久免费视频| 亚洲精品国久久99热| 26uuuu精品一区二区| 欧美在线小视频| 成人午夜激情片| 男女男精品网站| 亚洲国产视频一区| 中文字幕av一区二区三区高 | 无吗不卡中文字幕| 中文字幕中文字幕在线一区| 欧美一区二区三区视频| 91麻豆成人久久精品二区三区| 开心九九激情九九欧美日韩精美视频电影 | 亚洲妇熟xx妇色黄| 久久嫩草精品久久久精品| 欧美日韩国产中文| 91视频精品在这里| 国产精品资源网站| 青青国产91久久久久久| 亚洲韩国精品一区| 中文字幕五月欧美| 中文字幕高清不卡| 2020国产精品自拍| 精品人在线二区三区| 欧美日韩国产色站一区二区三区| 成人精品一区二区三区中文字幕| 韩国一区二区在线观看| 91丨porny丨最新| 久久一区二区视频| 一本一道综合狠狠老| 国产精品国产三级国产普通话99 | 亚洲电影一区二区| 欧美xxxx老人做受| 国产精品羞羞答答xxdd | 久久久亚洲午夜电影| 欧美日韩亚洲综合在线 欧美亚洲特黄一级 | 亚洲国产高清不卡| 欧美精品一区二区久久久| 欧美丰满高潮xxxx喷水动漫| 欧美色视频一区| 欧美日韩国产a| 欧美三级日韩三级| 欧美日韩精品一区二区在线播放| 在线观看三级视频欧美| 91久久精品一区二区三| 欧洲日韩一区二区三区| 在线观看亚洲精品| 欧美日韩一区二区三区高清 | 久久久不卡网国产精品二区| 欧美r级电影在线观看| 日韩免费电影一区| 久久一区二区三区四区| 国产亚洲综合色| 国产精品护士白丝一区av| 最新国产精品久久精品| 亚洲欧美日本在线| 午夜一区二区三区视频| 日本中文字幕一区二区有限公司| 美女视频一区二区三区| 国产一区二区三区在线观看免费视频 | 18涩涩午夜精品.www| 亚洲另类一区二区| 日韩av在线发布| 国产乱子伦视频一区二区三区 | 视频精品一区二区| 另类小说色综合网站| 国产河南妇女毛片精品久久久 | 久久一区二区三区国产精品| 国产精品久久久久久久久免费丝袜| 亚洲欧美日韩系列| 日本最新不卡在线| 成人网页在线观看| 欧美偷拍一区二区| 亚洲精品在线观| 亚洲精品国久久99热| 久久国产精品72免费观看| 成人av资源站| 欧美一区国产二区| 中文字幕+乱码+中文字幕一区| 一区二区在线观看免费| 91麻豆福利精品推荐| 91麻豆精品国产91久久久久久 | 日韩精品欧美精品| 国产 欧美在线| 欧美日韩国产综合久久| 日本一区二区三区电影| 午夜精品一区二区三区三上悠亚| 国产久卡久卡久卡久卡视频精品| 91福利区一区二区三区| 久久久久久日产精品| 天天操天天色综合| 成人夜色视频网站在线观看| 88在线观看91蜜桃国自产| 国产亚洲成年网址在线观看| 亚洲高清免费视频| av高清不卡在线| 精品国精品国产| 午夜精品福利视频网站| 99精品在线免费| 精品国产乱码久久久久久影片| 亚洲一区二区三区自拍| a级精品国产片在线观看| 日韩久久精品一区| 日日摸夜夜添夜夜添精品视频 | 91欧美激情一区二区三区成人| 日韩欧美中文字幕一区| 亚洲精品国产一区二区精华液 | 欧美精品久久99| 亚洲女与黑人做爰| 国产成人在线免费观看| 欧美一级爆毛片| 天堂va蜜桃一区二区三区漫画版| 色视频一区二区| 国产精品国产三级国产aⅴ入口 | 亚洲成av人片www| 91美女片黄在线| 国产精品久久久久一区二区三区| 久久se这里有精品| 欧美一二三四区在线| 亚洲v精品v日韩v欧美v专区| 色激情天天射综合网| 亚洲人精品一区| 91在线观看视频| 日韩美女视频一区| 99久久久精品| 国产精品久久久久久久久动漫 | 国产精品美女一区二区在线观看| 精品一二三四在线| 337p粉嫩大胆噜噜噜噜噜91av| 五月激情综合色| 欧美一区午夜精品| 日本美女一区二区三区| 91精品国产手机| 久久99精品久久久久久| 精品少妇一区二区三区 | 国产成人av电影在线观看| 久久久久久综合| 成人精品国产免费网站| 久久国产精品免费| 国产亚洲欧美在线| 成人午夜短视频| 亚洲日本乱码在线观看| 色综合色综合色综合| 亚洲国产日韩综合久久精品| 欧美精品 日韩| 精品一区二区精品| 中文字幕精品一区二区精品绿巨人| 国产69精品久久久久毛片| 亚洲欧洲美洲综合色网| 91成人在线精品| 蜜桃一区二区三区在线观看| 久久亚洲综合色一区二区三区| 国产成人精品1024| 亚洲欧美福利一区二区| 欧美午夜精品久久久久久孕妇| 日本美女一区二区| 久久久久久亚洲综合影院红桃| 97久久超碰国产精品| 午夜欧美电影在线观看| 久久这里只精品最新地址| jlzzjlzz欧美大全| 亚洲成在线观看|