/* WARNING: Heritage AFTER dead removal. Example location: r0x0041f010 : 0x0040853c */
/* WARNING: Restarted to delay deadcode elimination for space: ram */
int smT_process_event(uint *param_1)
{
uint *puVar1;
int iVar2;
int iVar3;
uint uVar4;
uint *puVar5;
if (g_topo_session == 0) {
iVar3 = 2;
}
else if ((param_1[1] == 0) || (iVar3 = 2, param_1[1] == g_topo_session)) {
do {
if (g_smT_state != 1) {
if (g_smT_state == 0) {
uVar4 = *param_1;
if (uVar4 == 1) {
if (param_1[3] != 0) {
if (((param_1[4] == 0) &&
(uVar4 = (*g_discover_hdr & 0xff) << 8 | (uint)(*g_discover_hdr >> 8), uVar4 != 0)
) && (g_generation != uVar4)) {
g_generation = (ushort)uVar4;
}
g_smT_state = 1;
}
}
else {
if (uVar4 != 0) {
if ((uVar4 != 3) && (uVar4 != 8)) {
return 0;
}
if (param_1[1] != g_topo_session) {
return 0;
}
g_ctc_bytes = 0;
g_ctc_packets = 0;
if (g_charge_timer != 0) {
event_cancel();
g_charge_timer = 0;
}
g_topo_session = 0;
return 0;
}
if (0xc < g_opcode) {
warn("smT (Quiescent): Ignored packet w/ unknown opcode: %d\n");
return 2;
}
}
return 0;
}
if (g_smT_state != 2) {
return 2;
}
uVar4 = *param_1;
if (uVar4 == 3) {
LAB_004089b8:
iVar3 = 0;
if (param_1[1] == g_topo_session) {
g_emit_remaining = 0;
g_ctc_bytes = 0;
g_ctc_packets = 0;
if (g_charge_timer != 0) {
event_cancel();
g_charge_timer = 0;
}
if (g_emit_timer != 0) {
event_cancel();
g_emit_timer = 0;
}
goto LAB_00408a24;
}
}
else if (uVar4 < 4) {
iVar3 = 0;
if (uVar4 == 0) {
if (g_opcode < 0xd) {
uVar4 = 1 << (g_opcode & 0x1f);
if ((uVar4 & 0x1fef) != 0) goto switchD_004085a0_caseD_4;
if ((uVar4 & 0x10) != 0) goto switchD_004085e0_caseD_4;
}
iVar3 = 2;
}
}
else {
if (uVar4 == 6) {
packetio_tx_emitee(g_emitdesc);
g_emit_remaining = g_emit_remaining + -1;
g_emitdesc = g_emitdesc + 0xe;
if (g_emit_remaining == 0) {
g_smT_state = 1;
if (g_emit_timer != 0) {
event_cancel();
g_emit_timer = 0;
}
if (g_emit_seqnum != 0) {
packetio_tx_ack();
goto LAB_00408b6c;
}
}
else {
iVar2 = set_emit_timer();
iVar3 = 1;
if (iVar2 == 0) goto switchD_004085e0_default;
}
goto switchD_004085a0_caseD_4;
}
iVar3 = 0;
if (uVar4 == 8) goto LAB_004089b8;
}
goto switchD_004085e0_default;
}
switch(*param_1) {
case 0:
iVar3 = 2;
switch(g_opcode) {
case 0:
case 1:
case 2:
case 3:
case 5:
case 7:
case 8:
case 10:
case 0xc:
goto switchD_004085a0_caseD_4;
case 4:
switchD_004085e0_caseD_4:
seeslist_enqueue(0,g_base_hdr + 10);
break;
case 6:
packetio_tx_queryresp();
break;
case 9:
FUN_00408180(g_rcvd_pkt_len);
if (g_sequencenum != 0) {
LAB_00408b40:
packetio_tx_flat();
LAB_00408b50:
FUN_00408290(g_tx_len);
break;
}
goto switchD_004085a0_caseD_4;
case 0xb:
puVar1 = &Tlvs;
do {
puVar5 = puVar1;
if (*puVar5 == 0) {
iVar3 = 0;
goto switchD_004085e0_default;
}
puVar1 = puVar5 + 6;
} while (*puVar5 != (uint)*g_qltlv_hdr);
packetio_tx_qltlvResp
(g_sequencenum,puVar5,
(uint)CONCAT11(g_qltlv_hdr[2],g_qltlv_hdr[3]) + (uint)g_qltlv_hdr[1] * 0x10000)
;
break;
default:
goto switchD_004085e0_default;
}
LAB_00408b6c:
iVar3 = 0;
goto switchD_004085e0_default;
case 1:
if (((param_1[4] == 0) &&
(uVar4 = (*g_discover_hdr & 0xff) << 8 | (uint)(*g_discover_hdr >> 8), uVar4 != 0)) &&
(g_generation != uVar4)) {
g_generation = (ushort)uVar4;
}
break;
case 2:
if ((1 < CONCAT11(*(undefined1 *)(g_base_hdr + 0x12),*(undefined1 *)(g_base_hdr + 0x13))) &&
(iVar3 = 0, g_sequencenum == 0)) goto switchD_004085e0_default;
FUN_00408180(g_rcvd_pkt_len);
if ((g_ctc_packets < g_neededPackets) || (g_ctc_bytes < g_neededBytes)) goto LAB_00408b40;
g_ctc_bytes = 0;
g_ctc_packets = 0;
if (g_charge_timer != 0) {
event_cancel();
g_charge_timer = 0;
}
memcpy(g_emitbuf,&g_rxbuf,g_rcvd_pkt_len) //possible issue identified - semgrep
if (g_emit_remaining != 0) {
__assert("g_emit_remaining == 0","mapping.c",0x45);
}
g_emit_seqnum = g_sequencenum;
g_emit_remaining = (short)DAT_0042af60;
g_emitdesc = 0x42b166;
if ((DAT_0042af60 & 0xffff) == 0) {
if (g_sequencenum != 0) {
packetio_tx_ack();
goto LAB_00408b50;
}
}
else {
g_smT_state = 2;
iVar2 = set_emit_timer();
iVar3 = 1;
if (iVar2 != 1) {
g_this_event = 6;
goto switchD_004085e0_default;
}
}
break;
case 3:
case 8:
iVar3 = 0;
if (param_1[1] != g_topo_session) goto switchD_004085e0_default;
g_ctc_bytes = 0;
g_ctc_packets = 0;
if (g_charge_timer != 0) {
event_cancel();
g_charge_timer = 0;
}
LAB_00408a24:
seeslist_clear();
g_smT_state = 0;
g_topo_session = 0;
break;
case 5:
g_ctc_bytes = 0;
g_ctc_packets = 0;
if (g_charge_timer != 0) {
event_cancel();
g_charge_timer = 0;
}
}
switchD_004085a0_caseD_4:
iVar3 = 0;
switchD_004085e0_default:
} while (iVar3 == 1);
}
return iVar3;
}