Fix CAM permissions

This commit is contained in:
emanuel 2021-04-08 16:38:33 +01:00
parent 477206d065
commit c65f7ca77c
1 changed files with 7 additions and 4 deletions

View File

@ -35,7 +35,7 @@ const cid_ssp_bm_t CID_SSP_BM_MAP[] = {
{"dangerousGoods/dangerousGoodsContainer", CID_DANGEROUS_GOODS, 0x1000}, {"dangerousGoods/dangerousGoodsContainer", CID_DANGEROUS_GOODS, 0x1000},
{"roadwork/roadWorksContainerBasic", CID_ROADWORK, 0x0800}, {"roadwork/roadWorksContainerBasic", CID_ROADWORK, 0x0800},
{"rescue/rescueContainer", CID_RESCUE, 0x0400}, {"rescue/rescueContainer", CID_RESCUE, 0x0400},
{"emergency/emergencyContaine", CID_EMERGENCY, 0x0200}, {"emergency/emergencyContainer", CID_EMERGENCY, 0x0200},
{"safetyCar/safetyCarContainer", CID_SAFETY_CAR, 0x0100}, {"safetyCar/safetyCarContainer", CID_SAFETY_CAR, 0x0100},
{"closedLanes/RoadworksContainerBasic", CID_CLOSED_LANES, 0x0080}, {"closedLanes/RoadworksContainerBasic", CID_CLOSED_LANES, 0x0080},
{"requestForRightOfWay/EmergencyContainer: EmergencyPriority", CID_REQUEST_FOR_RIGHT_OF_WAY, 0x0040}, {"requestForRightOfWay/EmergencyContainer: EmergencyPriority", CID_REQUEST_FOR_RIGHT_OF_WAY, 0x0040},
@ -62,12 +62,14 @@ static int permissions_check(int cid, uint8_t* permissions, uint8_t permissions_
return 0; return 0;
} }
uint32_t perms_int = (*((uint32_t*) permissions)) >> 16; uint16_t perms_int = *(uint16_t*)(permissions+1);
uint32_t perm_val; uint16_t perm_val;
for (int i = 0; i < 16; ++i) { for (int i = 0; i < 16; ++i) {
if (cid == CID_SSP_BM_MAP[i].cid) { if (cid == CID_SSP_BM_MAP[i].cid) {
perm_val = CID_SSP_BM_MAP[i].bitmap_val; perm_val = CID_SSP_BM_MAP[i].bitmap_val;
perm_val = (perm_val>>8) | (perm_val<<8);
break;
} }
} }
@ -396,7 +398,8 @@ int check_cam(void* fc, BTPDataIndication_t *bdi, CAM_t* cam, uint8_t* ssp, uint
// Check permissions // Check permissions
if (ssp) { if (ssp) {
if (cam->cam.camParameters.highFrequencyContainer.choice.rsuContainerHighFrequency.protectedCommunicationZonesRSU) { if (cam->cam.camParameters.highFrequencyContainer.present == HighFrequencyContainer_PR_rsuContainerHighFrequency &&
cam->cam.camParameters.highFrequencyContainer.choice.rsuContainerHighFrequency.protectedCommunicationZonesRSU) {
if (!permissions_check(CID_PROTECTED_ZONES, ssp, ssp_len)) {rv = 1; return rv;} if (!permissions_check(CID_PROTECTED_ZONES, ssp, ssp_len)) {rv = 1; return rv;}
} }
if (cam->cam.camParameters.specialVehicleContainer) { if (cam->cam.camParameters.specialVehicleContainer) {