📄 rvmegacoencode.c
字号:
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 + -