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

📄 rvmegacoencode.c

📁 h.248协议源码
💻 C
📖 第 1 页 / 共 4 页
字号:
		break;
	case RV_MEGACOSERVICECHANGEMETHOD_OTHER:
		rvStrStreamWriteStr(os, rvMegacoServiceChangeDescriptorGetOtherMethod(x));
		break;
	default:
		rvStrStreamSetErrorStatus(os, RV_MEGACOENCODEERROR_CORRUPTOBJECT);
		break;
	}
	if(rvMegacoServiceChangeDescriptorGetReason(x) != RV_MEGACOSERVICECHANGEREASON_NOTSET)
	{
		rvStrStreamWriteStr(os, opt->format->comma);
		if(opt->compact)
		{
			rvStrStreamWriteStr(os, "RE=");
			rvStrStreamWriteUInt(os, rvMegacoServiceChangeDescriptorGetReason(x));
		}
		else
		{
			rvStrStreamWriteStr(os, "Reason=\"");
			rvStrStreamWriteUInt(os, rvMegacoServiceChangeDescriptorGetReason(x));
			switch(rvMegacoServiceChangeDescriptorGetReason(x))
			{
			case RV_MEGACOSERVICECHANGEREASON_SERVICERESTORED:
				rvStrStreamWriteStr(os, " Service Restored");
				break;
			case RV_MEGACOSERVICECHANGEREASON_COLDBOOT:
				rvStrStreamWriteStr(os, " Cold Boot");
				break;
			case RV_MEGACOSERVICECHANGEREASON_WARMBOOT:
				rvStrStreamWriteStr(os, " Warm Boot");
				break;
			case RV_MEGACOSERVICECHANGEREASON_MGCDIRECTEDCHANGE:
				rvStrStreamWriteStr(os, " MGC Directed Change");
				break;
			case RV_MEGACOSERVICECHANGEREASON_TERMMALFUNCTION:
				rvStrStreamWriteStr(os, " Termination malfunctioning");
				break;
			case RV_MEGACOSERVICECHANGEREASON_TERMOUTOFSVC:
				rvStrStreamWriteStr(os, " Termination taken out of service");
				break;
			case RV_MEGACOSERVICECHANGEREASON_LOSSLOWERLAYERCONN:
				rvStrStreamWriteStr(os, " Loss of lower layer connectivity");
				break;
			case RV_MEGACOSERVICECHANGEREASON_TRANSMISSIONFAILURE:
				rvStrStreamWriteStr(os, " Transmission Failure");
				break;
			case RV_MEGACOSERVICECHANGEREASON_MGFAILURE:
				rvStrStreamWriteStr(os, " MG Impending Failure");
				  break;
			case RV_MEGACOSERVICECHANGEREASON_MGCFAILURE:
				rvStrStreamWriteStr(os, " MGC Impending Failure");
				break;
			case RV_MEGACOSERVICECHANGEREASON_MEDIAFAILURE:
				rvStrStreamWriteStr(os, " Media Capability Failure");
				break;
			case RV_MEGACOSERVICECHANGEREASON_MODEMFAILURE:
				rvStrStreamWriteStr(os, " Modem Capability Failure");
				break;
			case RV_MEGACOSERVICECHANGEREASON_MUXFAILURE:
				rvStrStreamWriteStr(os, " Mux Capability Failure");
				break;
			case RV_MEGACOSERVICECHANGEREASON_SIGNALFAILURE:
				rvStrStreamWriteStr(os, " Signal Capability Failure");
				break;
			case RV_MEGACOSERVICECHANGEREASON_EVENTFAILURE:
				rvStrStreamWriteStr(os, " Event Capability Failure");
				break;
			case RV_MEGACOSERVICECHANGEREASON_STATELOSS:
				rvStrStreamWriteStr(os, " State Loss");
				break;
			}
			rvStrStreamPut(os, '\"');
		}
	}
	if(rvMegacoServiceChangeDescriptorGetDelay(x))
	{
		rvStrStreamWriteStr(os, opt->format->comma);
		rvStrStreamWriteStr(os, opt->compact ? "DL=" : "Delay=");
		rvStrStreamWriteUInt(os, rvMegacoServiceChangeDescriptorGetDelay(x));
	}
	if(*rvMegacoServiceChangeDescriptorGetAddress(x))
	{
		rvStrStreamWriteStr(os, opt->format->comma);
		rvStrStreamWriteStr(os, opt->compact ? "AD=" : "ServiceChangeAddress=");
		rvStrStreamWriteStr(os, rvMegacoServiceChangeDescriptorGetAddress(x));
	}
	if(*rvMegacoServiceChangeDescriptorGetProfile(x))
	{
		rvStrStreamWriteStr(os, opt->format->comma);
		rvStrStreamWriteStr(os, opt->compact ? "PF=" : "Profile=");
		rvStrStreamWriteStr(os, rvMegacoServiceChangeDescriptorGetProfile(x));
		rvStrStreamPut(os, '/');
		rvStrStreamWriteUInt(os, rvMegacoServiceChangeDescriptorGetProfileVersion(x));
	}
	if(rvTimeStampIsSet(rvMegacoServiceChangeDescriptorGetTimeStamp(x)))
	{
		rvStrStreamWriteStr(os, opt->format->comma);
		rvTimeStampEncode(rvMegacoServiceChangeDescriptorGetTimeStamp(x), os);
	}
	if(rvMegacoEntityAddressIsSet(rvMegacoServiceChangeDescriptorGetMgc(x)))
	{
		rvStrStreamWriteStr(os, opt->format->comma);
		rvStrStreamWriteStr(os, opt->compact ? "MG=" : "MgcIdToTry=");
		rvMegacoEntityAddressEncode(rvMegacoServiceChangeDescriptorGetMgc(x), os);
	}
	if(!rvMegacoParameterListIsEmpty(rvMegacoServiceChangeDescriptorGetParameterList(x)))
	{
		rvStrStreamWriteStr(os, opt->format->comma);
		rvMegacoParameterListEncode(rvMegacoServiceChangeDescriptorGetParameterList(x), os);
	}
	if(rvMegacoServiceChangeDescriptorGetVersion(x) != rvMegacoServiceChangeDescriptorNoVersion)
	{
		rvStrStreamWriteStr(os, opt->format->comma);
		rvStrStreamWriteStr(os, opt->compact ? "V=" : "Version=");
		rvStrStreamWriteUInt(os, rvMegacoServiceChangeDescriptorGetVersion(x));
	}
	rvStrStreamPut(os, '}');
}

static void rvMegacoAuditDescriptorEncode(const RvMegacoAuditDescriptor *x, RvStrStream *os)
{
	RvMegacoEncodeOptions *opt = (RvMegacoEncodeOptions *)rvStrStreamGetUserData(os);
	const char *tokens[] = {"Mux", "Modem", "Media", "Signals", "EventBuffer",
		"DigitMap",	"Statistics", "Events", "ObservedEvents", "Packages"};
	const char *compactTokens[] = {"MX", "MD", "M", "SG", "EB", "DM", "SA", "E", "OE", "PG"};
	const char *sep = nullStr;
	size_t i;
	rvStrStreamWriteStr(os, opt->compact ? "AT{" : "Audit{");
	for(i=0; i<sizeof(tokens)/sizeof(tokens[0]); ++i)
	{
		if(rvMegacoAuditDescriptorGetRequestedInfo(x) & 1 << i)
		{
			rvStrStreamWriteStr(os, sep);
			rvStrStreamWriteStr(os, opt->compact ? compactTokens[i] : tokens[i]);
			sep = opt->format->comma;
		}
	}
	rvStrStreamPut(os, '}');
}

static void rvMegacoErrorDescriptorEncode(const RvMegacoErrorDescriptor *x, RvStrStream *os)
{
	if(rvMegacoErrorDescriptorIsSet(x))
	{
		RvMegacoEncodeOptions *opt = (RvMegacoEncodeOptions *)rvStrStreamGetUserData(os);
		const char *descr = rvMegacoErrorDescriptorGetDescription(x);
		rvStrStreamWriteStr(os, opt->compact ? "ER=" : "Error=");
		rvStrStreamWriteUInt(os, rvMegacoErrorDescriptorGetCode(x));
		rvStrStreamPut(os, '{');
		if(*descr)
		{
			rvStrStreamPut(os, '\"');
			rvStrStreamWriteStr(os, descr);
			rvStrStreamPut(os, '\"');
		}
		rvStrStreamPut(os, '}');
	}
}

static void rvMegacoEventBufferDescriptorEncode(const RvMegacoEventBufferDescriptor *x, RvStrStream *os)
{
	RvMegacoEncodeOptions *opt = (RvMegacoEncodeOptions *)rvStrStreamGetUserData(os);
	rvStrStreamWriteStr(os, opt->compact ? "EB" : "EventBuffer");
	if(rvMegacoEventBufferDescriptorIsSet(x))
	{
		size_t i;
		rvStrStreamPut(os, '{');
		for(i=0; i<rvMegacoEventBufferDescriptorGetNumEvents(x); ++i)
		{
			if(i) rvStrStreamWriteStr(os, opt->format->comma);
			rvMegacoEventEncode(rvMegacoEventBufferDescriptorGetEvent(x, i), os);
		}
		rvStrStreamPut(os, '}');
	}
}

static void rvMegacoTopologyDescriptorEncode(const RvMegacoTopologyDescriptor *x, RvStrStream *os)
{
	RvMegacoEncodeOptions *opt = (RvMegacoEncodeOptions *)rvStrStreamGetUserData(os);
	size_t i;
	rvStrStreamWriteStr(os, opt->compact ? "TP{" : "Topology{");
	for(i=0; i<rvMegacoTopologyDescriptorGetNumTriples(x); ++i)
	{
		if(i) rvStrStreamWriteStr(os, opt->format->comma);
		rvMegacoTerminationIdEncode(rvMegacoTopologyDescriptorGetFirstTerminationId(x, i), os);
		rvStrStreamWriteStr(os, opt->format->comma);
		rvMegacoTerminationIdEncode(rvMegacoTopologyDescriptorGetSecondTerminationId(x, i), os);
		rvStrStreamWriteStr(os, opt->format->comma);
		switch(rvMegacoTopologyDescriptorGetDirection(x, i))
		{
		case RV_DIRECTION_BOTHWAYS:
			rvStrStreamWriteStr(os, opt->compact ? "BW" : "Bothway");
			break;
		case RV_DIRECTION_ONEWAY:
			rvStrStreamWriteStr(os, opt->compact ? "OW" : "Oneway"); 
			break;
		case RV_DIRECTION_ISOLATE:
			rvStrStreamWriteStr(os, opt->compact ? "IS" : "Isolate"); 
			break;
		default:
			rvStrStreamSetErrorStatus(os, RV_MEGACOENCODEERROR_CORRUPTOBJECT);
			break;
		}
	}
	rvStrStreamPut(os, '}');
}

static void rvMegacoStatisticsDescriptorEncode(const RvMegacoStatisticsDescriptor *x, RvStrStream *os)
{
	RvMegacoEncodeOptions *opt = (RvMegacoEncodeOptions *)rvStrStreamGetUserData(os);
	rvStrStreamWriteStr(os, opt->compact ? "SA" : "Statistics");
	if(rvMegacoStatisticsDescriptorIsSet(x))
	{
		rvStrStreamPut(os, '{');
		rvMegacoParameterListEncode(rvMegacoStatisticsDescriptorGetStatistics(x), os);
		rvStrStreamPut(os, '}');
	}
}

static void rvMegacoPackagesDescriptorEncode(const RvMegacoPackagesDescriptor *x, RvStrStream *os)
{
	RvMegacoEncodeOptions *opt = (RvMegacoEncodeOptions *)rvStrStreamGetUserData(os);
	rvStrStreamWriteStr(os, opt->compact ? "PG" : "Packages");
	if(rvMegacoPackagesDescriptorIsSet(x))
	{
		size_t i;
		rvStrStreamPut(os, '{');
		for(i=0; i<rvMegacoPackagesDescriptorGetNumPackages(x); ++i)
		{
			if(i) rvStrStreamWriteStr(os, opt->format->comma);
			rvStrStreamWriteStr(os, rvMegacoPackagesDescriptorGetPackageName(x, i));
			rvStrStreamPut(os, '-');
			rvStrStreamWriteUInt(os, rvMegacoPackagesDescriptorGetPackageVersion(x, i));
		}
		rvStrStreamPut(os, '}');
	}
}

static void rvMegacoNotifyCommandEncode(const RvMegacoNotifyCommand *x, RvStrStream *os)
{
	const RvMegacoObservedEventsDescriptor *events = rvMegacoNotifyCommandGetObservedEvents(x);
	const RvMegacoErrorDescriptor *error = rvMegacoNotifyCommandGetError(x);
	RvMegacoEncodeOptions *opt = (RvMegacoEncodeOptions *)rvStrStreamGetUserData(os);

	if(!rvMegacoObservedEventsDescriptorIsSet(events))
	{
		rvStrStreamSetErrorStatus(os, RV_MEGACOENCODEERROR_MISSINGPARAMETER);
		return;
	}
	rvStrStreamWriteStr(os, opt->compact ? "N=" : "Notify=");
	rvMegacoTerminationIdEncode(rvMegacoCommandGetTerminationId(x), os);
	rvStrStreamPut(os, '{');
	rvMegacoObservedEventsDescriptorEncode(events, os);
	if(rvMegacoErrorDescriptorIsSet(error))
	{
		rvStrStreamWriteStr(os, opt->format->comma);
		rvMegacoErrorDescriptorEncode(error, os);
	}
	rvStrStreamPut(os, '}');
}

static void rvMegacoServiceChangeCommandEncode(const RvMegacoServiceChangeCommand *x, RvStrStream *os)
{
	RvMegacoEncodeOptions *opt = (RvMegacoEncodeOptions *)rvStrStreamGetUserData(os);
	rvStrStreamWriteStr(os, opt->compact ? "SC=" : "ServiceChange=");
	rvMegacoTerminationIdEncode(rvMegacoCommandGetTerminationId(x), os);
	rvStrStreamPut(os, '{');
	rvMegacoServiceChangeDescriptorEncode(rvMegacoServiceChangeCommandGetServiceChange(x), os);
	rvStrStreamPut(os, '}');
}

static void rvMegacoSubtractCommandEncode(const RvMegacoSubtractCommand *x, RvStrStream *os)
{
	RvMegacoEncodeOptions *opt = (RvMegacoEncodeOptions *)rvStrStreamGetUserData(os);
	const RvMegacoAuditDescriptor *audit = rvMegacoSubtractCommandGetAudit(x);
	rvStrStreamWriteStr(os, opt->compact ? "S=" : "Subtract=");
	rvMegacoTerminationIdEncode(rvMegacoCommandGetTerminationId(x), os);
	if(rvMegacoAuditDescriptorGetRequestedInfo(audit) != RV_MEGACOAUDITITEMS_STATS)
	{
		rvStrStreamPut(os, '{');
		rvMegacoAuditDescriptorEncode(audit, os);
		rvStrStreamPut(os, '}');
	}
}

static void rvMegacoAuditValCommandEncode(const RvMegacoAuditValCommand *x, RvStrStream *os)
{
	RvMegacoEncodeOptions *opt = (RvMegacoEncodeOptions *)rvStrStreamGetUserData(os);
	rvStrStreamWriteStr(os, opt->compact ? "AV=" : "AuditValue=");
	rvMegacoTerminationIdEncode(rvMegacoCommandGetTerminationId(x), os);
	rvStrStreamPut(os, '{');
	rvMegacoAuditDescriptorEncode(rvMegacoAuditValCommandGetAudit(x), os);
	rvStrStreamPut(os, '}');
}

static void rvMegacoAuditCapCommandEncode(const RvMegacoAuditCapCommand *x, RvStrStream *os)
{
	RvMegacoEncodeOptions *opt = (RvMegacoEncodeOptions *)rvStrStreamGetUserData(os);
	rvStrStreamWriteStr(os, opt->compact ? "AC=" : "AuditCapability=");
	rvMegacoTerminationIdEncode(rvMegacoCommandGetTerminationId(x), os);
	rvStrStreamPut(os, '{');
	rvMegacoAuditDescriptorEncode(rvMegacoAuditCapCommandGetAudit(x), os);
	rvStrStreamPut(os, '}');
}

#define rvMegacoAmmCommandGetMedia(x) (&(x)->command.audit.amm.media)
#define rvMegacoAmmCommandGetModem(x) (&(x)->command.audit.amm.modem)
#define rvMegacoAmmCommandGetMux(x) (&(x)->command.audit.amm.mux)
#define rvMegacoAmmCommandGetEvents(x) (&(x)->command.audit.amm.events)
#define rvMegacoAmmCommandGetSignals(x) (&(x)->command.audit.amm.signals)
#define rvMegacoAmmCommandGetDigitMap(x) (&(x)->command.audit.amm.digitMap)
#define rvMegacoAmmCommandGetEventBuffer(x) (&(x)->command.audit.amm.eventBuffer)
#define rvMegacoAmmCommandGetAudit(x) (&(x)->command.audit.auditDescriptor)

static void rvMegacoCommandEncodeAmmParameters(const RvMegacoCommand *x, RvStrStream *os)
{
	RvMegacoEncodeOptions *opt = (RvMegacoEncodeOptions *)rvStrStreamGetUserData(os);
	const RvMegacoMediaDescriptor *media = rvMegacoAmmCommandGetMedia(x);
	const RvMegacoModemDescriptor *modem = rvMegacoAmmCommandGetModem(x);
	const RvMegacoMuxDescriptor *mux = rvMegacoAmmCommandGetMux(x);
	const RvMegacoEventsDescriptor *events = rvMegacoAmmCommandGetEvents(x);
	const RvMegacoSignalsDescriptor *signals = rvMegacoAmmCommandGetSignals(x);
	const RvMegacoDigitMapDescriptor *digitMap = rvMegacoAmmCommandGetDigitMap(x);
	const RvMegacoEventBufferDescriptor *eventBuffer = rvMegacoAmmCommandGetEventBuffer(x);
	const RvMegacoAuditDescriptor *audit = rvMegacoAmmCommandGetAudit(x);
	const char *sep = opt->format->brace3;

	if(rvMegacoMediaDescriptorIsSet(media))
	{
		rvStrStreamWriteStr(os, sep);
		rvMegacoMediaDescriptorEncode(media, os);
		sep = opt->format->comma3;
	}
	if(rvMegacoModemDescriptorIsSet(modem))
	{
		rvStrStreamWriteStr(os, sep);
		rvMegacoModemDescriptorEncode(modem, os); 
		sep = opt->format->comma3;
	}
	if(rvMegacoMuxDescriptorIsSet(mux))
	{
		rvStrStreamWriteStr(os, sep);
		rvMegacoMuxDescriptorEncode(mux, os);
		sep = opt->format->comma3;
	}
	if(rvMegacoEventsDescriptorIsSet(events))
	{
		rvStrStreamWriteStr(os, sep);
		rvMegacoEventsDescriptorEncode(events, os);
		sep = opt->format->comma3;
	}
	if(rvMegacoSignalsDescriptorIsSet(signals))
	{
		rvStrStreamWriteStr(os, sep);
		rvMegacoSignalsDescriptorEncode(signals, os);
		sep = opt->format->comma3;
	}
	if(rvMegacoDigitMapDescriptorIsSet(digitMap))
	{
		rvStrStreamWriteStr(os, sep);
		rvMegacoDigitMapDescriptorEncode(digitMap, os);
		sep = opt->format->comma3;
	}
	if(rvMegacoEventBufferDescriptorIsSet(eventBuffer))
	{
		rvStrStreamWriteStr(os, sep);
		rvMegacoEventBufferDescriptorEncode(eventBuffer, os);
		sep = opt->format->comma3;
	}
	if(rvMegacoAuditDescriptorGetRequestedInfo(audit))
	{
		rvStrStreamWriteStr(os, sep);
		rvMegacoAuditDescriptorEncode(audit, os);
		sep = opt->format->comma3;
	}
	if(sep == opt->format->comma3)
	{
		rvStrStreamWriteStr(os, opt->format->indent2);
		rvStrStreamPut(os, '}');
	}
}

static void rvMegacoAddCommandEncode(const RvMegacoAddCommand *x, RvStrStream *os)
{
	RvMegacoEncodeOptions *opt = (RvMegacoEncodeOptions *)rvStrStreamGetUserData(os);
	rvStrStreamWriteStr(os, opt->compact ? "A=" : "Add=");
	rvMegacoTerminationIdEncode(rvMegacoCommandGetTerminationId(x), os);
	rvMegacoCommandEncodeAmmParameters(x, os);
}

static void rvMegacoMoveCommandEncode(const RvMegacoMoveCommand *x, RvStrStream *os)
{
	RvMegacoEncodeOptions *opt = (RvMegacoEncodeOptions *)rvStrStreamGetUserData(os);
	rvStrStreamWriteStr(os, opt->compact ? "MV=" : "Move=");
	rvMegacoTerminationIdEncode(rvMegacoCommandGetTerminationId(x), os);
	rvMegacoCommandEncodeAmmParameters(x, os);
}

static void rvMegacoModifyCommandEncode(const RvMegacoModifyCommand *x, RvStrStream *os)
{
	RvMegacoEncodeOptions *opt = (RvMegacoEncodeOptions *)rvStrStreamGetUserData(os);
	rvStrStreamWriteStr(os, opt->compact ? "MF=" : "Modify=");
	rvMegacoTerminationIdEncode(rvMegacoCommandGetTerminationId(x), os);
	rvMegacoCommandEncodeAmmParameters(x, os);
}

static void rvMegacoCommandEncode(const RvMegacoCommand *x, RvStrStream *os)
{
	if(rvMegacoCommandIsOptional(x))
		rvStrStreamWriteStr(os, "O-");
	if(rvMegacoCommandGetWildResponseFlag(x))
		rvStrStreamWriteStr(os, "W-");
	switch(rvMegacoCommandGetType(x))
	{
	case RV_MEGACOCOMMANDTYPE_ADD:
		rvMegacoAddCommandEncode(x, os);
		break;
	case RV_MEGACOCOMMANDTYPE_MODIFY:
		rvMegacoModifyCommandEncode(x, os);
		break;
	case RV_MEGACOCOMMANDTYPE_SUBTRACT:
		rvMegacoSubtractCommandEncode(x, os);
		break;
	case RV_MEGACOCOMMANDTYPE_MOVE:
		rvMegacoMoveCommandEncode(x, os);
		break;
	case RV_MEGACOCOMMANDTYPE_AUDITVAL:
		rvMegacoAuditValCommandEncode(x, os);
		break;
	case RV_MEGACOCOMMANDTYPE_AUDITCAP:
		rvMegacoAuditCapCommandEncode(x, os);
		break;
	case RV_MEGACOCOMMANDTYPE_NOTIFY:
		rvMegacoNotifyCommandEncode(x, os);
		break;
	case RV_MEGACOCOMMANDTYPE_SVCCHANGE:
		rvMegacoServiceChangeCommandEncode(x, os);
		break;
	default:
		rvStrStreamSetErrorStatus(os, RV_MEGACOENCODEERROR_CORRUPTOBJECT);
		break;
	}
}

static void rvMegacoContextPropertiesEncode(const RvMegacoContextProperties *x, RvStrStream *os)

⌨️ 快捷键说明

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