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

📄 agent.c

📁 asterisk 是一个很有知名度开源软件
💻 C
📖 第 1 页 / 共 2 页
字号:
			string_ret[sizeof(string_ret) - 1] = '\0';			*var_len = strlen(string_ret);			ret = (u_char *)string_ret;		}		break;	case ASTCHANCIDANI:		if (chan->cid.cid_ani) {			strncpy(string_ret, chan->cid.cid_ani, sizeof(string_ret));			string_ret[sizeof(string_ret) - 1] = '\0';			*var_len = strlen(string_ret);			ret = (u_char *)string_ret;		}		break;	case ASTCHANCIDRDNIS:		if (chan->cid.cid_rdnis) {			strncpy(string_ret, chan->cid.cid_rdnis, sizeof(string_ret));			string_ret[sizeof(string_ret) - 1] = '\0';			*var_len = strlen(string_ret);			ret = (u_char *)string_ret;		}		break;	case ASTCHANCIDPRES:		long_ret = chan->cid.cid_pres;		ret = (u_char *)&long_ret;		break;	case ASTCHANCIDANI2:		long_ret = chan->cid.cid_ani2;		ret = (u_char *)&long_ret;		break;	case ASTCHANCIDTON:		long_ret = chan->cid.cid_ton;		ret = (u_char *)&long_ret;		break;	case ASTCHANCIDTNS:		long_ret = chan->cid.cid_tns;		ret = (u_char *)&long_ret;		break;	case ASTCHANAMAFLAGS:		long_ret = chan->amaflags;		ret = (u_char *)&long_ret;		break;	case ASTCHANADSI:		long_ret = chan->adsicpe;		ret = (u_char *)&long_ret;		break;	case ASTCHANTONEZONE:		if (chan->zone) {			strncpy(string_ret, chan->zone->country, sizeof(string_ret));			string_ret[sizeof(string_ret) - 1] = '\0';			*var_len = strlen(string_ret);			ret = (u_char *)string_ret;		}		break;	case ASTCHANHANGUPCAUSE:		long_ret = chan->hangupcause;		ret = (u_char *)&long_ret;		break;	case ASTCHANVARIABLES:		if (pbx_builtin_serialize_variables(chan, &out)) {			*var_len = strlen(out->str);			ret = (u_char *)out->str;		}		break;	case ASTCHANFLAGS:		bits_ret[0] = 0;		for (bit = 0; bit < 8; bit++)			bits_ret[0] |= ((chan->flags & (1 << bit)) >> bit) << (7 - bit);		bits_ret[1] = 0;		for (bit = 0; bit < 8; bit++)			bits_ret[1] |= (((chan->flags >> 8) & (1 << bit)) >> bit) << (7 - bit);		*var_len = 2;		ret = bits_ret;		break;	case ASTCHANTRANSFERCAP:		long_ret = chan->transfercapability;		ret = (u_char *)&long_ret;	default:		break;	}	ast_channel_unlock(chan);	return ret;}static u_char *ast_var_channel_types(struct variable *vp, oid *name, size_t *length,								   int exact, size_t *var_len, WriteMethod **write_method){	static unsigned long long_ret;	struct ast_variable *channel_types, *next;	if (header_generic(vp, name, length, exact, var_len, write_method))		return NULL;	if (vp->magic != ASTCHANTYPECOUNT)		return NULL;	for (long_ret = 0, channel_types = next = ast_channeltype_list(); next; next = next->next)		long_ret++;	ast_variables_destroy(channel_types);	return (u_char *)&long_ret;}static u_char *ast_var_channel_types_table(struct variable *vp, oid *name, size_t *length,										int exact, size_t *var_len, WriteMethod **write_method){	const struct ast_channel_tech *tech = NULL;	struct ast_variable *channel_types, *next;	static unsigned long long_ret;	struct ast_channel *chan;	u_long i;	if (header_simple_table(vp, name, length, exact, var_len, write_method, -1))		return NULL;	channel_types = ast_channeltype_list();	for (i = 1, next = channel_types; next && i != name[*length - 1]; next = next->next, i++)		;	if (next != NULL)		tech = ast_get_channel_tech(next->name);	ast_variables_destroy(channel_types);	if (next == NULL || tech == NULL)		return NULL;		switch (vp->magic) {	case ASTCHANTYPEINDEX:		long_ret = name[*length - 1];		return (u_char *)&long_ret;	case ASTCHANTYPENAME:		*var_len = strlen(tech->type);		return (u_char *)tech->type;	case ASTCHANTYPEDESC:		*var_len = strlen(tech->description);		return (u_char *)tech->description;	case ASTCHANTYPEDEVSTATE:		long_ret = tech->devicestate ? 1 : 2;		return (u_char *)&long_ret;	case ASTCHANTYPEINDICATIONS:		long_ret = tech->indicate ? 1 : 2;		return (u_char *)&long_ret;	case ASTCHANTYPETRANSFER:		long_ret = tech->transfer ? 1 : 2;		return (u_char *)&long_ret;	case ASTCHANTYPECHANNELS:		long_ret = 0;		for (chan = ast_channel_walk_locked(NULL); chan; chan = ast_channel_walk_locked(chan)) {			if (chan->tech == tech)				long_ret++;			ast_channel_unlock(chan);		}		return (u_char *)&long_ret;	default:		break;	}	return NULL;}static u_char *ast_var_channel_bridge(struct variable *vp, oid *name, size_t *length,	int exact, size_t *var_len, WriteMethod **write_method){	static unsigned long long_ret;	struct ast_channel *chan = NULL;	long_ret = 0;	if (header_generic(vp, name, length, exact, var_len, write_method))		return NULL;	while ((chan = ast_channel_walk_locked(chan))) {		if (ast_bridged_channel(chan))			long_ret++;		ast_channel_unlock(chan);	}	*var_len = sizeof(long_ret);	return (vp->magic == ASTCHANBRIDGECOUNT) ? (u_char *) &long_ret : NULL;}static u_char *ast_var_Config(struct variable *vp, oid *name, size_t *length,							 int exact, size_t *var_len, WriteMethod **write_method){	static unsigned long long_ret;	struct timeval tval;	if (header_generic(vp, name, length, exact, var_len, write_method))		return NULL;	switch (vp->magic) {	case ASTCONFUPTIME:		gettimeofday(&tval, NULL);		long_ret = difftime(tval.tv_sec, ast_startuptime.tv_sec) * 100 + tval.tv_usec / 10000 - ast_startuptime.tv_usec / 10000;		return (u_char *)&long_ret;	case ASTCONFRELOADTIME:		gettimeofday(&tval, NULL);		if (ast_lastreloadtime.tv_sec)			long_ret = difftime(tval.tv_sec, ast_lastreloadtime.tv_sec) * 100 + tval.tv_usec / 10000 - ast_lastreloadtime.tv_usec / 10000;		else			long_ret = difftime(tval.tv_sec, ast_startuptime.tv_sec) * 100 + tval.tv_usec / 10000 - ast_startuptime.tv_usec / 10000;		return (u_char *)&long_ret;	case ASTCONFPID:		long_ret = getpid();		return (u_char *)&long_ret;	case ASTCONFSOCKET:		*var_len = strlen(ast_config_AST_SOCKET);		return (u_char *)ast_config_AST_SOCKET;	case ASTCONFACTIVECALLS:		long_ret = ast_active_calls();		return (u_char *)&long_ret;	case ASTCONFPROCESSEDCALLS:		long_ret = ast_processed_calls();		return (u_char *)&long_ret;	default:		break;	}	return NULL;}static u_char *ast_var_indications(struct variable *vp, oid *name, size_t *length,								  int exact, size_t *var_len, WriteMethod **write_method){	static unsigned long long_ret;	struct tone_zone *tz = NULL;	if (header_generic(vp, name, length, exact, var_len, write_method))		return NULL;	switch (vp->magic) {	case ASTINDCOUNT:		long_ret = 0;		while ( (tz = ast_walk_indications(tz)) )			long_ret++;		return (u_char *)&long_ret;	case ASTINDCURRENT:		tz = ast_get_indication_zone(NULL);		if (tz) {			*var_len = strlen(tz->country);			return (u_char *)tz->country;		}		*var_len = 0;		return NULL;	default:		break;	}	return NULL;}static u_char *ast_var_indications_table(struct variable *vp, oid *name, size_t *length,									   int exact, size_t *var_len, WriteMethod **write_method){	static unsigned long long_ret;	struct tone_zone *tz = NULL;	int i;	if (header_simple_table(vp, name, length, exact, var_len, write_method, -1))		return NULL;	i = name[*length - 1] - 1;	while ( (tz = ast_walk_indications(tz)) && i )	i--;	if (tz == NULL)		return NULL;	switch (vp->magic) {	case ASTINDINDEX:		long_ret = name[*length - 1];		return (u_char *)&long_ret;	case ASTINDCOUNTRY:		*var_len = strlen(tz->country);		return (u_char *)tz->country;	case ASTINDALIAS:		if (tz->alias) {			*var_len = strlen(tz->alias);			return (u_char *)tz->alias;		}		return NULL;	case ASTINDDESCRIPTION:		*var_len = strlen(tz->description);		return (u_char *)tz->description;	default:		break;	}	return NULL;}static int countmodule(const char *mod, const char *desc, int use, const char *like){	return 1;}static u_char *ast_var_Modules(struct variable *vp, oid *name, size_t *length,							  int exact, size_t *var_len, WriteMethod **write_method){	static unsigned long long_ret;	if (header_generic(vp, name, length, exact, var_len, write_method))		return NULL;	if (vp->magic != ASTMODCOUNT)		return NULL;	long_ret = ast_update_module_list(countmodule, NULL);	return (u_char *)&long_ret;}static u_char *ast_var_Version(struct variable *vp, oid *name, size_t *length,							  int exact, size_t *var_len, WriteMethod **write_method){	static unsigned long long_ret;	if (header_generic(vp, name, length, exact, var_len, write_method))		return NULL;	switch (vp->magic) {	case ASTVERSTRING:	{		const char *version = ast_get_version();		*var_len = strlen(version);		return (u_char *)version;	}	case ASTVERTAG:		sscanf(ast_get_version_num(), "%lu", &long_ret);		return (u_char *)&long_ret;	default:		break;	}	return NULL;}static int term_asterisk_mib(int majorID, int minorID, void *serverarg, void *clientarg){	unregister_sysORTable(asterisk_oid, OID_LENGTH(asterisk_oid));	return 0;}static void init_asterisk_mib(void){	static struct variable4 asterisk_vars[] = {		{ASTVERSTRING,           ASN_OCTET_STR, RONLY, ast_var_Version,             2, {ASTVERSION, ASTVERSTRING}},		{ASTVERTAG,              ASN_UNSIGNED,  RONLY, ast_var_Version,             2, {ASTVERSION, ASTVERTAG}},		{ASTCONFUPTIME,          ASN_TIMETICKS, RONLY, ast_var_Config,              2, {ASTCONFIGURATION, ASTCONFUPTIME}},		{ASTCONFRELOADTIME,      ASN_TIMETICKS, RONLY, ast_var_Config,              2, {ASTCONFIGURATION, ASTCONFRELOADTIME}},		{ASTCONFPID,             ASN_INTEGER,   RONLY, ast_var_Config,              2, {ASTCONFIGURATION, ASTCONFPID}},		{ASTCONFSOCKET,          ASN_OCTET_STR, RONLY, ast_var_Config,              2, {ASTCONFIGURATION, ASTCONFSOCKET}},		{ASTCONFACTIVECALLS,     ASN_GAUGE,   	RONLY, ast_var_Config,              2, {ASTCONFIGURATION, ASTCONFACTIVECALLS}},		{ASTCONFPROCESSEDCALLS,  ASN_COUNTER,   RONLY, ast_var_Config,              2, {ASTCONFIGURATION, ASTCONFPROCESSEDCALLS}},		{ASTMODCOUNT,            ASN_INTEGER,   RONLY, ast_var_Modules ,            2, {ASTMODULES, ASTMODCOUNT}},		{ASTINDCOUNT,            ASN_INTEGER,   RONLY, ast_var_indications,         2, {ASTINDICATIONS, ASTINDCOUNT}},		{ASTINDCURRENT,          ASN_OCTET_STR, RONLY, ast_var_indications,         2, {ASTINDICATIONS, ASTINDCURRENT}},		{ASTINDINDEX,            ASN_INTEGER,   RONLY, ast_var_indications_table,   4, {ASTINDICATIONS, ASTINDTABLE, 1, ASTINDINDEX}},		{ASTINDCOUNTRY,          ASN_OCTET_STR, RONLY, ast_var_indications_table,   4, {ASTINDICATIONS, ASTINDTABLE, 1, ASTINDCOUNTRY}},		{ASTINDALIAS,            ASN_OCTET_STR, RONLY, ast_var_indications_table,   4, {ASTINDICATIONS, ASTINDTABLE, 1, ASTINDALIAS}},		{ASTINDDESCRIPTION,      ASN_OCTET_STR, RONLY, ast_var_indications_table,   4, {ASTINDICATIONS, ASTINDTABLE, 1, ASTINDDESCRIPTION}},		{ASTCHANCOUNT,           ASN_GAUGE,     RONLY, ast_var_channels,            2, {ASTCHANNELS, ASTCHANCOUNT}},		{ASTCHANINDEX,           ASN_INTEGER,   RONLY, ast_var_channels_table,      4, {ASTCHANNELS, ASTCHANTABLE, 1, ASTCHANINDEX}},		{ASTCHANNAME,            ASN_OCTET_STR, RONLY, ast_var_channels_table,      4, {ASTCHANNELS, ASTCHANTABLE, 1, ASTCHANNAME}},		{ASTCHANLANGUAGE,        ASN_OCTET_STR, RONLY, ast_var_channels_table,      4, {ASTCHANNELS, ASTCHANTABLE, 1, ASTCHANLANGUAGE}},		{ASTCHANTYPE,            ASN_OCTET_STR, RONLY, ast_var_channels_table,      4, {ASTCHANNELS, ASTCHANTABLE, 1, ASTCHANTYPE}},		{ASTCHANMUSICCLASS,      ASN_OCTET_STR, RONLY, ast_var_channels_table,      4, {ASTCHANNELS, ASTCHANTABLE, 1, ASTCHANMUSICCLASS}},		{ASTCHANBRIDGE,          ASN_OCTET_STR, RONLY, ast_var_channels_table,      4, {ASTCHANNELS, ASTCHANTABLE, 1, ASTCHANBRIDGE}},		{ASTCHANMASQ,            ASN_OCTET_STR, RONLY, ast_var_channels_table,      4, {ASTCHANNELS, ASTCHANTABLE, 1, ASTCHANMASQ}},		{ASTCHANMASQR,           ASN_OCTET_STR, RONLY, ast_var_channels_table,      4, {ASTCHANNELS, ASTCHANTABLE, 1, ASTCHANMASQR}},		{ASTCHANWHENHANGUP,      ASN_TIMETICKS, RONLY, ast_var_channels_table,      4, {ASTCHANNELS, ASTCHANTABLE, 1, ASTCHANWHENHANGUP}},		{ASTCHANAPP,             ASN_OCTET_STR, RONLY, ast_var_channels_table,      4, {ASTCHANNELS, ASTCHANTABLE, 1, ASTCHANAPP}},		{ASTCHANDATA,            ASN_OCTET_STR, RONLY, ast_var_channels_table,      4, {ASTCHANNELS, ASTCHANTABLE, 1, ASTCHANDATA}},		{ASTCHANCONTEXT,         ASN_OCTET_STR, RONLY, ast_var_channels_table,      4, {ASTCHANNELS, ASTCHANTABLE, 1, ASTCHANCONTEXT}},		{ASTCHANMACROCONTEXT,    ASN_OCTET_STR, RONLY, ast_var_channels_table,      4, {ASTCHANNELS, ASTCHANTABLE, 1, ASTCHANMACROCONTEXT}},		{ASTCHANMACROEXTEN,      ASN_OCTET_STR, RONLY, ast_var_channels_table,      4, {ASTCHANNELS, ASTCHANTABLE, 1, ASTCHANMACROEXTEN}},		{ASTCHANMACROPRI,        ASN_INTEGER,   RONLY, ast_var_channels_table,      4, {ASTCHANNELS, ASTCHANTABLE, 1, ASTCHANMACROPRI}},		{ASTCHANEXTEN,           ASN_OCTET_STR, RONLY, ast_var_channels_table,      4, {ASTCHANNELS, ASTCHANTABLE, 1, ASTCHANEXTEN}},		{ASTCHANPRI,             ASN_INTEGER,   RONLY, ast_var_channels_table,      4, {ASTCHANNELS, ASTCHANTABLE, 1, ASTCHANPRI}},		{ASTCHANACCOUNTCODE,     ASN_OCTET_STR, RONLY, ast_var_channels_table,      4, {ASTCHANNELS, ASTCHANTABLE, 1, ASTCHANACCOUNTCODE}},		{ASTCHANFORWARDTO,       ASN_OCTET_STR, RONLY, ast_var_channels_table,      4, {ASTCHANNELS, ASTCHANTABLE, 1, ASTCHANFORWARDTO}},		{ASTCHANUNIQUEID,        ASN_OCTET_STR, RONLY, ast_var_channels_table,      4, {ASTCHANNELS, ASTCHANTABLE, 1, ASTCHANUNIQUEID}},		{ASTCHANCALLGROUP,       ASN_UNSIGNED,  RONLY, ast_var_channels_table,      4, {ASTCHANNELS, ASTCHANTABLE, 1, ASTCHANCALLGROUP}},		{ASTCHANPICKUPGROUP,     ASN_UNSIGNED,  RONLY, ast_var_channels_table,      4, {ASTCHANNELS, ASTCHANTABLE, 1, ASTCHANPICKUPGROUP}},		{ASTCHANSTATE,           ASN_INTEGER,   RONLY, ast_var_channels_table,      4, {ASTCHANNELS, ASTCHANTABLE, 1, ASTCHANSTATE}},		{ASTCHANMUTED,           ASN_INTEGER,   RONLY, ast_var_channels_table,      4, {ASTCHANNELS, ASTCHANTABLE, 1, ASTCHANMUTED}},		{ASTCHANRINGS,           ASN_INTEGER,   RONLY, ast_var_channels_table,      4, {ASTCHANNELS, ASTCHANTABLE, 1, ASTCHANRINGS}},		{ASTCHANCIDDNID,         ASN_OCTET_STR, RONLY, ast_var_channels_table,      4, {ASTCHANNELS, ASTCHANTABLE, 1, ASTCHANCIDDNID}},		{ASTCHANCIDNUM,          ASN_OCTET_STR, RONLY, ast_var_channels_table,      4, {ASTCHANNELS, ASTCHANTABLE, 1, ASTCHANCIDNUM}},		{ASTCHANCIDNAME,         ASN_OCTET_STR, RONLY, ast_var_channels_table,      4, {ASTCHANNELS, ASTCHANTABLE, 1, ASTCHANCIDNAME}},		{ASTCHANCIDANI,          ASN_OCTET_STR, RONLY, ast_var_channels_table,      4, {ASTCHANNELS, ASTCHANTABLE, 1, ASTCHANCIDANI}},		{ASTCHANCIDRDNIS,        ASN_OCTET_STR, RONLY, ast_var_channels_table,      4, {ASTCHANNELS, ASTCHANTABLE, 1, ASTCHANCIDRDNIS}},		{ASTCHANCIDPRES,         ASN_OCTET_STR, RONLY, ast_var_channels_table,      4, {ASTCHANNELS, ASTCHANTABLE, 1, ASTCHANCIDPRES}},		{ASTCHANCIDANI2,         ASN_INTEGER,   RONLY, ast_var_channels_table,      4, {ASTCHANNELS, ASTCHANTABLE, 1, ASTCHANCIDANI2}},		{ASTCHANCIDTON,          ASN_INTEGER,   RONLY, ast_var_channels_table,      4, {ASTCHANNELS, ASTCHANTABLE, 1, ASTCHANCIDTON}},		{ASTCHANCIDTNS,          ASN_INTEGER,   RONLY, ast_var_channels_table,      4, {ASTCHANNELS, ASTCHANTABLE, 1, ASTCHANCIDTNS}},		{ASTCHANAMAFLAGS,        ASN_INTEGER,   RONLY, ast_var_channels_table,      4, {ASTCHANNELS, ASTCHANTABLE, 1, ASTCHANAMAFLAGS}},		{ASTCHANADSI,            ASN_INTEGER,   RONLY, ast_var_channels_table,      4, {ASTCHANNELS, ASTCHANTABLE, 1, ASTCHANADSI}},		{ASTCHANTONEZONE,        ASN_OCTET_STR, RONLY, ast_var_channels_table,      4, {ASTCHANNELS, ASTCHANTABLE, 1, ASTCHANTONEZONE}},		{ASTCHANHANGUPCAUSE,     ASN_INTEGER,   RONLY, ast_var_channels_table,      4, {ASTCHANNELS, ASTCHANTABLE, 1, ASTCHANHANGUPCAUSE}},		{ASTCHANVARIABLES,       ASN_OCTET_STR, RONLY, ast_var_channels_table,      4, {ASTCHANNELS, ASTCHANTABLE, 1, ASTCHANVARIABLES}},		{ASTCHANFLAGS,           ASN_OCTET_STR, RONLY, ast_var_channels_table,      4, {ASTCHANNELS, ASTCHANTABLE, 1, ASTCHANFLAGS}},		{ASTCHANTRANSFERCAP,     ASN_INTEGER,   RONLY, ast_var_channels_table,      4, {ASTCHANNELS, ASTCHANTABLE, 1, ASTCHANTRANSFERCAP}},		{ASTCHANTYPECOUNT,       ASN_INTEGER,   RONLY, ast_var_channel_types,       2, {ASTCHANNELS, ASTCHANTYPECOUNT}},		{ASTCHANTYPEINDEX,       ASN_INTEGER,   RONLY, ast_var_channel_types_table, 4, {ASTCHANNELS, ASTCHANTYPETABLE, 1, ASTCHANTYPEINDEX}},		{ASTCHANTYPENAME,        ASN_OCTET_STR, RONLY, ast_var_channel_types_table, 4, {ASTCHANNELS, ASTCHANTYPETABLE, 1, ASTCHANTYPENAME}},		{ASTCHANTYPEDESC,        ASN_OCTET_STR, RONLY, ast_var_channel_types_table, 4, {ASTCHANNELS, ASTCHANTYPETABLE, 1, ASTCHANTYPEDESC}},		{ASTCHANTYPEDEVSTATE,    ASN_INTEGER,   RONLY, ast_var_channel_types_table, 4, {ASTCHANNELS, ASTCHANTYPETABLE, 1, ASTCHANTYPEDEVSTATE}},		{ASTCHANTYPEINDICATIONS, ASN_INTEGER,   RONLY, ast_var_channel_types_table, 4, {ASTCHANNELS, ASTCHANTYPETABLE, 1, ASTCHANTYPEINDICATIONS}},		{ASTCHANTYPETRANSFER,    ASN_INTEGER,   RONLY, ast_var_channel_types_table, 4, {ASTCHANNELS, ASTCHANTYPETABLE, 1, ASTCHANTYPETRANSFER}},		{ASTCHANTYPECHANNELS,    ASN_GAUGE,     RONLY, ast_var_channel_types_table, 4, {ASTCHANNELS, ASTCHANTYPETABLE, 1, ASTCHANTYPECHANNELS}},		{ASTCHANBRIDGECOUNT,     ASN_GAUGE,     RONLY, ast_var_channel_bridge,      3, {ASTCHANNELS, ASTCHANSCALARS, ASTCHANBRIDGECOUNT}},	};	register_sysORTable(asterisk_oid, OID_LENGTH(asterisk_oid),			"ASTERISK-MIB implementation for Asterisk.");	REGISTER_MIB("res_snmp", asterisk_vars, variable4, asterisk_oid);	snmp_register_callback(SNMP_CALLBACK_LIBRARY,			   SNMP_CALLBACK_SHUTDOWN,			   term_asterisk_mib, NULL);}/* * Local Variables: * c-basic-offset: 4 * c-file-offsets: ((case-label . 0)) * tab-width: 4 * indent-tabs-mode: t * End: */

⌨️ 快捷键说明

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