/* WARNING: Removing unreachable block (ram,0x00403eb0) */
/* WARNING: Removing unreachable block (ram,0x00403f10) */
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void FUN_00403250(uint param_1,int param_2,int param_3)
{
undefined2 uVar1;
int iVar2;
uint uVar3;
socklen_t *psVar4;
__fd_mask *p_Var5;
int iVar6;
ssize_t sVar7;
char *pcVar8;
uint uVar9;
tm *__src;
int iVar10;
uint uVar11;
uint uVar12;
uint uVar13;
char *__format;
uint uVar14;
uint uVar15;
uint uVar16;
int iVar17;
int iVar18;
uint uVar19;
uint uVar20;
int iVar21;
double dVar22;
double dVar23;
double dVar24;
double dVar25;
socklen_t local_460 [2];
timeval local_458;
timeval local_450;
timeval local_448;
undefined1 local_440 [8];
undefined1 auStack_438 [8];
char acStack_430 [40];
tm tStack_408;
undefined4 local_3dc;
undefined4 local_3d8;
undefined4 local_3d4;
uint local_3b4;
uint local_3b0;
__fd_mask local_3ac [32];
undefined4 local_32c [2];
int local_324;
char acStack_2ac [516];
uint local_a8;
uint local_a4;
uint local_a0;
uint local_9c;
uint local_98;
uint local_94;
uint local_90;
uint local_8c;
uint local_88;
uint local_84;
int local_80;
uint local_7c;
int local_78;
undefined1 *local_74;
undefined1 *local_70;
int local_6c;
uint local_68;
socklen_t *local_64;
socklen_t *local_60;
if (debug != 0) {
puts("Listening...");
}
local_64 = local_460;
local_460[0] = 0x10;
local_68 = 1 << (param_1 & 0x1f);
local_60 = local_64 + (param_1 >> 5);
local_70 = local_440;
local_74 = auStack_438;
local_458.tv_sec = 0;
local_6c = 0;
do {
local_458.tv_usec = 0;
do {
do {
while( true ) {
psVar4 = local_60;
uVar11 = local_68;
p_Var5 = local_3ac;
do {
*p_Var5 = 0;
p_Var5 = p_Var5 + 1;
} while (p_Var5 != local_32c);
local_60[0x2d] = local_60[0x2d] | local_68;
iVar6 = select(param_1 + 1,(fd_set *)local_3ac,(fd_set *)0x0,(fd_set *)0x0,&local_458);
if ((iVar6 != 1) || ((uVar11 & psVar4[0x2d]) == 0)) break;
sVar7 = recvfrom(param_1,&DAT_0041cea0,0x5dc,0,(sockaddr *)local_440,local_64) //possible issue identified - semgrep
if (sVar7 < 0) {
perror("recvfrom");
}
else if (sVar7 - 1U < 0x5db) {
gettimeofday(&local_450,(__timezone_ptr_t)0x0);
local_80 = local_450.tv_sec;
local_78 = local_450.tv_usec;
if (debug != 0) {
printf("packet of length %d received\n",sVar7);
printf("Source: Address family %d\n",(uint)(ushort)local_440._0_2_);
uVar1 = local_440._2_2_;
if (local_440._0_2_ == 2) {
uVar11 = (uint)(ushort)local_440._2_2_;
pcVar8 = inet_ntoa((in_addr)local_440._4_4_);
uVar11 = (uVar11 & 0xff) << 8 | (uint)((ushort)uVar1 >> 8);
__format = "Source: INET Port %d host %s\n";
}
else {
if (local_440._0_2_ != 10) {
printf("Source: Address family %d\n");
goto LAB_004036bc;
}
uVar11 = (uint)*(ushort *)(local_70 + 2);
pcVar8 = inet_ntop(10,local_74,acStack_2ac,0x200) //possible issue identified - semgrep
__format = "Source: INET6 Port %d host %s\n";
}
printf(__format,uVar11,pcVar8);
}
LAB_004036bc:
uVar20 = DAT_0041cec0;
uVar19 = DAT_0041cebc;
uVar13 = DAT_0041ceb8;
uVar11 = DAT_0041cea8;
uVar14 = DAT_0041cea0 << 0x18;
local_98 = DAT_0041cea0 >> 0x18;
uVar12 = DAT_0041cea0 >> 8;
uVar9 = DAT_0041cea0 & 0xff00;
if ((local_98 & 0x80) != 0) {
local_98 = local_98 | 0xffffff00;
}
local_a0 = DAT_0041cec8 << 0x18 | DAT_0041cec8 >> 0x18 | (DAT_0041cec8 & 0xff0000) >> 8
| (DAT_0041cec8 & 0xff00) << 8;
local_9c = DAT_0041cecc << 0x18 | DAT_0041cecc >> 0x18 | (DAT_0041cecc & 0xff0000) >> 8
| (DAT_0041cecc & 0xff00) << 8;
local_8c = DAT_0041ceb0;
local_88 = DAT_0041ceb4;
local_94 = DAT_0041cea4;
local_90 = DAT_0041ceac;
local_84 = DAT_0041cec4;
if (DAT_0041ce98 != 0) {
local_448.tv_sec = DAT_0041ce9c + 0x7c558180 + local_a0;
local_448.tv_usec = (local_9c >> 0xc) + ((local_9c >> 10) + 0x8000 >> 0x10) * -0x2f7;
iVar6 = settimeofday(&local_448,(timezone *)0x0);
if (iVar6 < 0) {
pcVar8 = "settimeofday";
goto LAB_00403cb0;
}
if (debug != 0) {
printf("set time to %lu.%.6lu\n",local_448.tv_sec,local_448.tv_usec);
}
time((time_t *)(local_460 + 1));
__src = localtime((time_t *)(local_460 + 1));
memcpy(&tStack_408,__src,0x2c) //possible issue identified - semgrep
strftime(acStack_430,0x27,"[%Y][%m][%d][%H][%M][%S]",&tStack_408);
syslog(0xc5,"Time synchronized");
}
uVar3 = local_90;
local_7c = local_80 + 0x83aa7e80;
uVar11 = uVar11 << 0x18 | uVar11 >> 0x18 | (uVar11 & 0xff0000) >> 8 |
(uVar11 & 0xff00) << 8;
local_a8 = uVar13 << 0x18 | uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 |
(uVar13 & 0xff00) << 8;
local_a4 = uVar20 << 0x18 | uVar20 >> 0x18 | (uVar20 & 0xff0000) >> 8 |
(uVar20 & 0xff00) << 8;
uVar20 = (local_78 * 0x7bd >> 0xb) + local_78 * 0x10c6;
uVar19 = uVar19 << 0x18 | uVar19 >> 0x18 | (uVar19 & 0xff0000) >> 8 |
(uVar19 & 0xff00) << 8;
uVar13 = local_84 << 0x18 | local_84 >> 0x18 | (local_84 & 0xff0000) >> 8 |
(local_84 & 0xff00) << 8;
if (debug != 0) {
uVar15 = local_90 >> 0x18;
uVar16 = local_90 << 0x18 | uVar15 | (local_90 & 0xff0000) >> 8 |
(local_90 & 0xff00) << 8;
printf("LI=%d VN=%d Mode=%d Stratum=%d Poll=%d Precision=%d\n",uVar14 >> 0x1e,
(uVar14 & 0x38000000) >> 0x1b,(uVar14 & 0x7000000) >> 0x18,(uVar9 << 8) >> 0x10
,(uVar12 & 0xff00) >> 8,local_98);
dVar24 = (double)(int)(local_94 << 0x18 | local_94 >> 0x18 |
(local_94 & 0xff0000) >> 8 | (local_94 & 0xff00) << 8) *
15.2587890625;
printf("Delay=%.1f Dispersion=%.1f Refid=%u.%u.%u.%u\n",local_94,SUB84(dVar24,0),
(int)((ulonglong)dVar24 >> 0x20),(double)(int)uVar11 * 15.2587890625,
uVar3 & 0xff,(int)uVar16 >> 0x10 & 0xff,(int)uVar16 >> 8 & 0xff,uVar15);
printf("Reference %u.%.10u\n",
local_8c << 0x18 | local_8c >> 0x18 | (local_8c & 0xff0000) >> 8 |
(local_8c & 0xff00) << 8,
local_88 << 0x18 | local_88 >> 0x18 | (local_88 & 0xff0000) >> 8 |
(local_88 & 0xff00) << 8);
printf("Originate %u.%.10u\n",local_a8,uVar19);
printf("Receive %u.%.10u\n",local_a4,uVar13);
printf("Transmit %u.%.10u\n",local_a0,local_9c);
printf("Our recv %u.%.10u\n",local_7c,uVar20);
}
iVar6 = local_7c - local_a8;
uVar9 = uVar20 - uVar19;
if (uVar20 < uVar19) {
uVar9 = ~(uVar19 - uVar20);
iVar6 = iVar6 + -1;
}
iVar21 = local_a0 - local_a4;
uVar12 = local_9c - uVar13;
if (local_9c < uVar13) {
iVar21 = iVar21 + -1;
uVar12 = ~(uVar13 - local_9c);
}
iVar17 = local_a4 - local_a8;
uVar14 = uVar13 - uVar19;
if (uVar13 < uVar19) {
uVar14 = ~(uVar19 - uVar13);
iVar17 = iVar17 + -1;
}
iVar18 = local_7c - local_a0;
uVar13 = uVar20 - local_9c;
if (uVar20 < local_9c) {
iVar18 = iVar18 + -1;
uVar13 = ~(local_9c - uVar20);
}
local_32c[0] = 0;
iVar10 = adjtimex(local_32c);
iVar2 = local_324;
if (iVar10 < 0) {
LAB_00403ca4:
pcVar8 = "adjtimex";
LAB_00403cb0:
perror(pcVar8);
/* WARNING: Subroutine does not return */
exit(1);
}
dVar24 = (double)(int)uVar9;
if ((int)uVar9 < 0) {
dVar24 = dVar24 + 4294967296.0;
}
dVar25 = (double)(int)uVar14;
dVar24 = (double)iVar6 * 1000000.0 + dVar24 * 0.00023283064365386963;
if ((int)uVar14 < 0) {
dVar25 = dVar25 + 4294967296.0;
}
dVar22 = (double)(int)uVar13;
if ((int)uVar13 < 0) {
dVar22 = dVar22 + 4294967296.0;
}
if (debug != 0) {
dVar23 = (double)(int)uVar12;
if ((int)uVar12 < 0) {
dVar23 = dVar23 + 4294967296.0;
}
dVar22 = ((double)iVar17 * 1000000.0 + dVar25 * 0.00023283064365386963) -
((double)iVar18 * 1000000.0 + dVar22 * 0.00023283064365386963);
dVar25 = (double)iVar21 * 1000000.0 + dVar23 * 0.00023283064365386963;
printf("Total elapsed: %9.2f\nServer stall: %9.2f\nSlop: %9.2f\n",
&DAT_00410000,SUB84(dVar24,0),(int)((ulonglong)dVar24 >> 0x20),dVar25,
dVar24 - dVar25);
dVar22 = dVar22 * 0.5;
printf(
"Skew: %9.2f\nFrequency: %9d\n day second elapsed stall skew dispersion freq\n"
);
printf("%d %5d.%.3d %8.1f %8.1f %8.1f %8.1f %9d\n",local_7c / 0x15180 + 0x3aac,
local_7c % 0x15180,uVar20 / 0x418937,SUB84(dVar24,0),
(int)((ulonglong)dVar24 >> 0x20),SUB84(dVar25,0),
(int)((ulonglong)dVar25 >> 0x20),SUB84(dVar22,0),
(int)((ulonglong)dVar22 >> 0x20),(double)(int)uVar11 * 15.2587890625,iVar2);
}
fflush(_stdout);
if (((DAT_0041ce94 != 0) && (iVar6 = contemplate_data(local_7c), debug == 0)) &&
(iVar6 != iVar2)) {
local_32c[0] = 2;
local_324 = iVar6;
iVar6 = adjtimex(local_32c);
if (iVar6 < 0) goto LAB_00403ca4;
}
DAT_0041cb80 = 0;
}
else {
printf("Ooops. pack_len=%d\n",sVar7);
fflush(_stdout);
}
if ((param_2 <= local_6c) && (param_2 != 0)) {
return;
}
}
} while (iVar6 == 4);
if (iVar6 < 0) {
perror("select");
}
} while (local_458.tv_sec != 0);
if ((param_2 <= local_6c) && (param_2 != 0)) {
return;
}
if (debug != 0) {
fputs("Sending ...\n",_stderr);
}
memset(&local_3dc,0,0x30) //possible issue identified - semgrep
local_3d4 = 0x100;
local_3d8 = 0x100;
local_3dc = 0xfa04001b;
gettimeofday(&local_450,(__timezone_ptr_t)0x0);
uVar11 = local_450.tv_sec + 0x83aa7e80;
uVar13 = (local_450.tv_usec * 0x7bd >> 0xb) + local_450.tv_usec * 0x10c6;
local_3b4 = uVar11 * 0x1000000 | uVar11 >> 0x18 | (uVar11 & 0xff0000) >> 8 |
(uVar11 & 0xff00) << 8;
local_3b0 = uVar13 * 0x1000000 | uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 |
(uVar13 & 0xff00) << 8;
send(param_1,&local_3dc,0x30,0);
DAT_0041d47c = local_450.tv_sec;
DAT_0041d480 = local_450.tv_usec;
local_6c = local_6c + 1;
local_458.tv_sec = param_3;
} while( true );
}