/* WARNING: Heritage AFTER dead removal. Example location: r0x0041f0b8 : 0x00407860 */
/* WARNING: Restarted to delay deadcode elimination for space: ram */
undefined4 smS_process_event(uint *param_1)
{
bool bVar1;
char cVar2;
short sVar3;
int iVar4;
undefined4 uVar5;
int *piVar6;
uint uVar7;
piVar6 = (int *)param_1[1];
if (piVar6 == (int *)0x0) {
return 0;
}
iVar4 = piVar6[1];
if (iVar4 == 1) {
uVar7 = *param_1;
if (uVar7 != 3) {
if (uVar7 < 4) {
if (uVar7 != 1) {
return 0;
}
iVar4 = FUN_00407540();
uVar5 = DAT_0042af5c;
sVar3 = g_sequencenum;
if (iVar4 != 0) {
bVar1 = g_sequencenum != 0;
param_1[3] = 1;
uVar5 = DAT_0042af5c;
if (((bVar1) && ((short)((int *)param_1[1])[3] != sVar3)) &&
(g_topo_session == (int *)param_1[1])) {
g_this_event = 3;
DAT_0042af5c = 1;
smT_process_event(&g_this_event);
g_topo_session = (int *)param_1[1];
DAT_0042af5c = uVar5;
*(short *)(g_topo_session + 3) = g_sequencenum;
g_this_event = 1;
}
cVar2 = *(char *)(param_1[1] + 0x20) //possible issue identified - semgrep
*(undefined4 *)(param_1[1] + 4) = 3;
goto LAB_004078b8;
}
if (((g_sequencenum != 0) && ((short)((int *)param_1[1])[3] != g_sequencenum)) &&
(g_topo_session == (int *)param_1[1])) {
g_this_event = 3;
DAT_0042af5c = 1;
smT_process_event(&g_this_event);
g_topo_session = (int *)param_1[1];
DAT_0042af5c = uVar5;
*(short *)(g_topo_session + 3) = g_sequencenum;
g_this_event = 1;
}
uVar5 = 15000;
goto LAB_00407cd8;
}
if (uVar7 == 7) {
iVar4 = piVar6[2];
piVar6[2] = iVar4 + -1;
if (iVar4 + -1 != 0) {
return 0;
}
piVar6[1] = 3;
return 0;
}
if (uVar7 != 8) {
return 0;
}
}
if ((piVar6 == g_topo_session) && (*piVar6 == 1)) {
piVar6 = &g_sessions;
do {
if ((*piVar6 != 0) && (piVar6[1] == 2)) {
piVar6[1] = 0;
if (piVar6[9] != 0) {
event_cancel();
piVar6[9] = 0;
}
*piVar6 = 0;
}
bVar1 = piVar6 != (int *)&DAT_0042ce30;
piVar6 = piVar6 + 10;
} while (bVar1);
}
LAB_00407b30:
uVar7 = param_1[1];
*(undefined4 *)(uVar7 + 4) = 0;
if (*(int *)(uVar7 + 0x24) != 0) {
event_cancel();
*(undefined4 *)(param_1[1] + 0x24) = 0;
}
*(undefined4 *)param_1[1] = 0;
packetio_invalidate_retxbuf();
}
else {
if (iVar4 == 0) {
if (*param_1 != 1) {
return 0;
}
if (((char)piVar6[8] == '\0') && ((g_topo_session == (int *)0x0 || (*g_topo_session == 0)))) {
g_topo_session = piVar6;
}
if (((((g_topo_session != (int *)0x0) && (*g_topo_session == 1)) && (piVar6 != g_topo_session)
) && ((char)piVar6[8] == '\0')) &&
(((piVar6[3] & 0xffff0000U) != (g_topo_session[3] & 0xffff0000U) ||
(piVar6[4] != g_topo_session[4])))) {
piVar6[1] = 2;
return 0;
}
iVar4 = FUN_00407540();
if (iVar4 == 0) {
*(undefined4 *)(param_1[1] + 4) = 1;
param_1[3] = 0;
LAB_00407ca0:
uVar5 = 15000;
}
else {
param_1[3] = 1;
cVar2 = *(char *)(param_1[1] + 0x20) //possible issue identified - semgrep
*(undefined4 *)(param_1[1] + 4) = 3;
LAB_004078b8:
uVar5 = 60000;
if (cVar2 != '\0') {
uVar5 = 30000;
}
}
}
else {
if (iVar4 == 2) {
if (8 < *param_1) {
return 0;
}
if ((1 << (*param_1 & 0x1f) & 0x188U) != 0) {
piVar6[1] = 0;
if (piVar6[9] != 0) {
event_cancel();
*(undefined4 *)(param_1[1] + 0x24) = 0;
}
*(undefined4 *)param_1[1] = 0;
return 0;
}
return 0;
}
if (iVar4 != 3) {
return 2;
}
switch(*param_1) {
case 0:
case 2:
cVar2 = (char)piVar6[8] //possible issue identified - semgrep
break;
case 1:
iVar4 = FUN_00407540();
uVar5 = DAT_0042af5c;
sVar3 = g_sequencenum;
if (iVar4 == 0) {
if (((g_sequencenum != 0) && ((short)((int *)param_1[1])[3] != g_sequencenum)) &&
(g_topo_session == (int *)param_1[1])) {
g_this_event = 3;
DAT_0042af5c = 1;
smT_process_event(&g_this_event);
sVar3 = g_sequencenum;
g_topo_session = (int *)param_1[1];
DAT_0042af5c = uVar5;
g_topo_session[1] = 1;
*(short *)(g_topo_session + 3) = sVar3;
g_this_event = 1;
goto LAB_00407ca0;
}
}
else {
bVar1 = g_sequencenum != 0;
param_1[3] = 1;
uVar5 = DAT_0042af5c;
if (((bVar1) && ((short)((int *)param_1[1])[3] != sVar3)) &&
(g_topo_session == (int *)param_1[1])) {
g_this_event = 3;
DAT_0042af5c = 1;
smT_process_event(&g_this_event);
g_topo_session = (int *)param_1[1];
DAT_0042af5c = uVar5;
*(short *)(g_topo_session + 3) = g_sequencenum;
g_this_event = 1;
}
}
cVar2 = *(char *)(param_1[1] + 0x20) //possible issue identified - semgrep
break;
case 3:
case 8:
if ((piVar6 == g_topo_session) && (*piVar6 == 1)) {
piVar6 = &g_sessions;
do {
if ((*piVar6 != 0) && (piVar6[1] == 2)) {
piVar6[1] = 0;
if (piVar6[9] != 0) {
event_cancel();
piVar6[9] = 0;
}
*piVar6 = 0;
}
bVar1 = piVar6 != (int *)&DAT_0042ce30;
piVar6 = piVar6 + 10;
} while (bVar1);
osl_set_promisc(g_osl,0);
}
goto LAB_00407b30;
default:
goto switchD_00407a88_caseD_4;
}
uVar5 = 60000;
if (cVar2 != '\0') {
uVar5 = 30000;
}
}
LAB_00407cd8:
restart_inactivity_timer(uVar5);
}
switchD_00407a88_caseD_4:
return 0;
}