void ApplyASN1DataCN(long packet, byte asn1data[], long asn1length)
{
C2xResizeToken(packet, "dsmp", "data", asn1length*8);
C2xSetTokenData(packet, "dsmp", "data", asn1length, asn1data);
C2xParsePacket(packet);
}
void ApplyASN1DataEU(long packet, byte asn1data[], long asn1length)
{
C2xResizeToken(packet, "btp", "data", asn1length*8);
C2xSetTokenData(packet, "btp", "data", asn1length, asn1data);
C2xParsePacket(packet);
}
void ApplyASN1DataUS(long packet, byte asn1data[], long asn1length)
{
C2xResizeToken(packet, "wsmp_t", "data", asn1length*8);
C2xSetTokenData(packet, "wsmp_t", "data", asn1length, asn1data);
C2xParsePacket(packet);
}
variables
{
long hBSM; // Handle to the new BasicSatetyMessage
byte asn1Payload[3000]; // Holds external data
long asn1Payload_length;
}
// Emulate the external ASN.1 data source ("asn1Payload" byte array) by copying the data from an existing packet
long OnPreTxBasicSafetyMessage(LONG packet)
{
C2xSetTokenInt(packet, "BasicSafetyMessage", "value.basicSafetyMessage.coreData.msgCnt", 2);
C2xCompletePacket(packet);
// Get external data, "asn1Payload" can be also set
// via gateway data, loaded from file, etc.
asn1Payload_length = C2xGetTokenData(packet, "wsmp_t", "data", elcount(asn1Payload), asn1Payload);
hBSM = C2xInitPacket("wsmp_t","");
// Paste external data on a new US BasicSafety message
ApplyASN1Data(hBSM, asn1Payload,asn1Payload_length);
write("msgCnt = %d", C2xGetTokenInt(hBSM, "BasicSafetyMessage", "value.basicSafetyMessage.coreData.msgCnt"));
C2xOutputPacket(hBSM);
return 0;
}