Correct recv sdu length, fix SAEM SDU creation

This commit is contained in:
emanuel 2021-08-16 14:57:04 +01:00
parent 9e1896ef92
commit 1b0c31f9bb
3 changed files with 11 additions and 9 deletions

View File

@ -562,12 +562,14 @@ int main() {
uint8_t code; uint8_t code;
bool in_idchange; bool in_idchange;
int32_t rl;
while (!facilities.exit) { while (!facilities.exit) {
zmq_poll(facilities.zmq.responders, facilities.zmq.n_responders, -1); zmq_poll(facilities.zmq.responders, facilities.zmq.n_responders, -1);
for (int i = 0; i < facilities.zmq.n_responders; ++i) { for (int i = 0; i < facilities.zmq.n_responders; ++i) {
if (facilities.zmq.responders[i].revents) { if (facilities.zmq.responders[i].revents) {
zmq_recv(facilities.zmq.responders[i].socket, buffer, PACKET_MAX_LEN, 0); rl = zmq_recv(facilities.zmq.responders[i].socket, buffer, PACKET_MAX_LEN, 0);
switch (buffer[0]) { switch (buffer[0]) {
case 3: case 3:
@ -580,7 +582,7 @@ int main() {
pthread_mutex_unlock(&facilities.id.change.lock); pthread_mutex_unlock(&facilities.id.change.lock);
if (!in_idchange) { if (!in_idchange) {
transport_indication(&facilities, facilities.zmq.responders[i].socket, buffer+1, PACKET_MAX_LEN-1); transport_indication(&facilities, facilities.zmq.responders[i].socket, buffer+1, rl);
pthread_mutex_lock(&facilities.id.change.lock); pthread_mutex_lock(&facilities.id.change.lock);
facilities.id.change.stage = ID_CHANGE_INACTIVE; facilities.id.change.stage = ID_CHANGE_INACTIVE;
@ -601,7 +603,7 @@ int main() {
pthread_mutex_unlock(&facilities.id.change.lock); pthread_mutex_unlock(&facilities.id.change.lock);
if (!in_idchange) { if (!in_idchange) {
facilities_request(&facilities, facilities.zmq.responders[i].socket, buffer+1, PACKET_MAX_LEN-1); facilities_request(&facilities, facilities.zmq.responders[i].socket, buffer+1, rl);
pthread_mutex_lock(&facilities.id.change.lock); pthread_mutex_lock(&facilities.id.change.lock);
facilities.id.change.stage = ID_CHANGE_INACTIVE; facilities.id.change.stage = ID_CHANGE_INACTIVE;
@ -614,11 +616,11 @@ int main() {
break; break;
case 6: case 6:
management_indication(&facilities, facilities.zmq.responders[i].socket, buffer+1, PACKET_MAX_LEN-1); management_indication(&facilities, facilities.zmq.responders[i].socket, buffer+1, rl);
break; break;
case 7: case 7:
security_indication(&facilities, facilities.zmq.responders[i].socket, buffer+1, PACKET_MAX_LEN-1); security_indication(&facilities, facilities.zmq.responders[i].socket, buffer+1, rl);
break; break;
default: default:

View File

@ -105,7 +105,7 @@ int facilities_request_single_message(facilities_t* facilities, void* responder,
break; break;
default: default:
syslog_err("[facilities] unrecognized FDRequest message type (%ld)", fr->choice.message.itsMessageType); syslog_err("[facilities] unrecognized FR message type (%ld)", fr->choice.message.itsMessageType);
facilities_request_result_rejected(responder); facilities_request_result_rejected(responder);
rv = 1; rv = 1;
goto cleanup; goto cleanup;
@ -113,7 +113,7 @@ int facilities_request_single_message(facilities_t* facilities, void* responder,
asn_dec_rval_t dec = uper_decode_complete(NULL, its_msg_def, (void**) &its_msg, fr->choice.message.data.buf, fr->choice.message.data.size); asn_dec_rval_t dec = uper_decode_complete(NULL, its_msg_def, (void**) &its_msg, fr->choice.message.data.buf, fr->choice.message.data.size);
if (dec.code) { if (dec.code) {
syslog_debug("[facilities] invalid FDRequest %s received", its_msg_def->name); syslog_debug("[facilities] invalid FR %s received", its_msg_def->name);
facilities_request_result_rejected(responder); facilities_request_result_rejected(responder);
rv = 1; rv = 1;
goto cleanup; goto cleanup;
@ -416,7 +416,7 @@ int facilities_request_active_episodes(facilities_t* facilities, void* responder
frep_oer = malloc(32768); frep_oer = malloc(32768);
asn_enc_rval_t enc = oer_encode_to_buffer(&asn_DEF_FacilitiesReply, NULL, frep, frep_oer, 32768); asn_enc_rval_t enc = oer_encode_to_buffer(&asn_DEF_FacilitiesReply, NULL, frep, frep_oer, 32768);
if (enc.encoded == -1) { if (enc.encoded == -1) {
syslog_err("[facilities] failed encoding FDResult (%s)", enc.failed_type->name); syslog_err("[facilities] failed encoding FReply (%s)", enc.failed_type->name);
facilities_request_result_rejected(responder); facilities_request_result_rejected(responder);
rv = 1; rv = 1;

View File

@ -171,7 +171,7 @@ void *sa_service(void *fc) {
pthread_mutex_init(&facilities->bulletin.lock, NULL); pthread_mutex_init(&facilities->bulletin.lock, NULL);
TransportRequest_t *tr = calloc(1, sizeof(TransportRequest_t)); TransportRequest_t *tr = calloc(1, sizeof(TransportRequest_t));
tr->present = TransportRequest_PR_data; tr->present = TransportRequest_PR_packet;
TransportPacketRequest_t* tpr = &tr->choice.packet; TransportPacketRequest_t* tpr = &tr->choice.packet;
tpr->present = TransportPacketRequest_PR_btp; tpr->present = TransportPacketRequest_PR_btp;