fix D-SETUP parser

This commit is contained in:
sq5bpf 2016-11-16 21:36:50 +01:00 committed by Harald Welte
parent 6b53e4d928
commit 6d38669f05
1 changed files with 35 additions and 20 deletions

View File

@ -291,6 +291,10 @@ uint parse_d_setup(struct tetra_mac_state *tms, struct msgb *msg, unsigned int l
char tmpstr2[1024];
struct tetra_resrc_decoded rsd;
int tmpdu_offset;
uint16_t notifindic=0;
uint32_t tempaddr=0;
uint16_t cpti=0;
memset(&rsd, 0, sizeof(rsd));
tmpdu_offset = macpdu_decode_resource(&rsd, msg->l1h);
@ -307,33 +311,44 @@ uint parse_d_setup(struct tetra_mac_state *tms, struct msgb *msg, unsigned int l
m=2; uint16_t txgrant=bits_to_uint(bits+n, m); n=n+m;
m=1; uint16_t txperm=bits_to_uint(bits+n, m); n=n+m;
m=4; uint16_t callprio=bits_to_uint(bits+n, m); n=n+m;
m=6; uint16_t notifindic=bits_to_uint(bits+n, m); n=n+m;
m=24; uint32_t tempaddr=bits_to_uint(bits+n, m); n=n+m;
m=2; uint16_t cpti=bits_to_uint(bits+n, m); n=n+m;
switch(cpti)
m=1; uint8_t obit=bits_to_uint(bits+n, m); n=n+m;
if (obit)
{
case 0: /* SNA */
m=8; callingssi=bits_to_uint(bits+n, m); n=n+m;
break;
case 1: /* SSI */
m=24; callingssi=bits_to_uint(bits+n, m); n=n+m;
break;
case 2: /* TETRA Subscriber Identity (TSI) */
m=24; callingssi=bits_to_uint(bits+n, m); n=n+m;
m=24; callingext=bits_to_uint(bits+n, m); n=n+m;
break;
case 3: /* reserved ? */
break;
m=1; uint8_t pbit_notifindic=bits_to_uint(bits+n, m); n=n+m;
if (pbit_notifindic) {
m=6; notifindic=bits_to_uint(bits+n, m); n=n+m;
}
m=1; uint8_t pbit_tempaddr=bits_to_uint(bits+n, m); n=n+m;
if (pbit_tempaddr) {
m=24; tempaddr=bits_to_uint(bits+n, m); n=n+m;
}
m=1; uint8_t pbit_cpti=bits_to_uint(bits+n, m); n=n+m;
if (pbit_cpti) {
m=2; cpti=bits_to_uint(bits+n, m); n=n+m;
switch(cpti)
{
case 0: /* SNA */
m=8; callingssi=bits_to_uint(bits+n, m); n=n+m;
break;
case 1: /* SSI */
m=24; callingssi=bits_to_uint(bits+n, m); n=n+m;
break;
case 2: /* TETRA Subscriber Identity (TSI) */
m=24; callingssi=bits_to_uint(bits+n, m); n=n+m;
m=24; callingext=bits_to_uint(bits+n, m); n=n+m;
break;
case 3: /* reserved ? */
break;
}
}
}
printf ("\nCall identifier:%i Call timeout:%i Hookmethod:%i Duplex:%i\n",callident,calltimeout,hookmethod,duplex);
printf("Basicinfo:0x%2.2X Txgrant:%i TXperm:%i Callprio:%i\n",basicinfo,txgrant,txperm,callprio);
printf("NotificationID:%i Tempaddr:%i CPTI:%i CallingSSI:%i CallingExt:%i\n",notifindic,tempaddr,cpti,callingssi,callingext);
sprintf(tmpstr2,"TETMON_begin FUNC:DSETUPDEC IDX:%i SSI:%i SSI2:%i CID:%i NID:%i RX:%i TETMON_end",rsd.addr.usage_marker,rsd.addr.ssi,tempaddr,callident,notifindic,tetra_hack_rxid);
sprintf(tmpstr2,"TETMON_begin FUNC:DSETUPDEC IDX:%i SSI:%i SSI2:%i CID:%i NID:%i RX:%i TETMON_end",rsd.addr.usage_marker,rsd.addr.ssi,callingssi,callident,notifindic,tetra_hack_rxid);
sendto(tetra_hack_live_socket, (char *)&tmpstr2, strlen((char *)&tmpstr2)+1, 0, (struct sockaddr *)&tetra_hack_live_sockaddr, tetra_hack_socklen);
}
/* decode 18.5.17 Neighbour cell information for CA */