Packet repetition

This commit is contained in:
emanuel 2020-10-31 15:26:57 +00:00
parent 7caf37b3f3
commit e30a60c6b8
1 changed files with 29 additions and 0 deletions

View File

@ -151,6 +151,10 @@ static int facilities_request(facilities_t *facilities, void* responder, uint8_t
case FacilitiesDataRequest_PR_singleMessage: case FacilitiesDataRequest_PR_singleMessage:
; ;
bool fwd = true; bool fwd = true;
uint32_t transmission_duration = 0;
uint32_t transmission_interval = 0;
switch (fdreq->choice.singleMessage.itssMessageType) { switch (fdreq->choice.singleMessage.itssMessageType) {
case ItssMessageType_cam: case ItssMessageType_cam:
its_msg_def = &asn_DEF_CAM; its_msg_def = &asn_DEF_CAM;
@ -194,8 +198,21 @@ static int facilities_request(facilities_t *facilities, void* responder, uint8_t
if (event_manage(facilities->den, its_msg)) { if (event_manage(facilities->den, its_msg)) {
fwd = false; fwd = false;
} }
if ( ((DENM_t*)its_msg)->denm.management.transmissionInterval ) {
transmission_interval = *( (uint32_t*) ((DENM_t*)its_msg)->denm.management.transmissionInterval );
if ( ((DENM_t*)its_msg)->denm.management.validityDuration ) {
transmission_duration = *( (uint32_t*) ((DENM_t*)its_msg)->denm.management.validityDuration );
} else {
transmission_duration = 30000;
}
}
} }
transmission_interval = 1000;
transmission_duration = 60 * 1000;
// Respond to [itss] // Respond to [itss]
fdres->code = ResultCode_accepted; fdres->code = ResultCode_accepted;
fdres_oer = malloc(16); fdres_oer = malloc(16);
@ -210,13 +227,25 @@ static int facilities_request(facilities_t *facilities, void* responder, uint8_t
// Forward message to [transport] // Forward message to [transport]
if (fwd) { if (fwd) {
bdr->btpType = BTPType_btpB; bdr->btpType = BTPType_btpB;
bdr->data.buf = malloc(fdreq->choice.singleMessage.data.size); bdr->data.buf = malloc(fdreq->choice.singleMessage.data.size);
memcpy(bdr->data.buf, fdreq->choice.singleMessage.data.buf, fdreq->choice.singleMessage.data.size); memcpy(bdr->data.buf, fdreq->choice.singleMessage.data.buf, fdreq->choice.singleMessage.data.size);
bdr->data.size = fdreq->choice.singleMessage.data.size; bdr->data.size = fdreq->choice.singleMessage.data.size;
bdr->gnDestinationAddress.buf = malloc(6); bdr->gnDestinationAddress.buf = malloc(6);
for (int i = 0; i < 6; ++i) bdr->gnDestinationAddress.buf[i] = 0xff; for (int i = 0; i < 6; ++i) bdr->gnDestinationAddress.buf[i] = 0xff;
bdr->gnDestinationAddress.size = 6; bdr->gnDestinationAddress.size = 6;
if (transmission_interval) {
bdr->gnRepetitionInterval = malloc(sizeof(long));
*bdr->gnRepetitionInterval = transmission_interval;
}
if (transmission_duration) {
bdr->gnMaximumRepetitionTime = malloc(sizeof(long));
*bdr->gnMaximumRepetitionTime = transmission_duration;
}
// Encode ITS message into OER // Encode ITS message into OER
uint8_t bdr_oer[384]; uint8_t bdr_oer[384];
bdr_oer[0] = 4; // [facilities] service id bdr_oer[0] = 4; // [facilities] service id