/* * setup peer dstadr field keeping it in sync with the interface * structures */ void set_peerdstadr( struct peer *peer, struct interface *interface ) { 00418510 push esi 00418511 mov esi,eax struct peer *unlinked; if (peer->dstadr != interface) { 00418513 mov eax,dword ptr [esi+90h] 00418519 cmp eax,edi 0041851B je set_peerdstadr+0E9h (4185F9h) if (interface != NULL && (peer->cast_flags & MDF_BCLNT) && (interface->flags & INT_MCASTIF) && peer->burst) { 00418521 test edi,edi 00418523 je set_peerdstadr+37h (418547h) 00418525 test byte ptr [esi+0A0h],20h 0041852C je set_peerdstadr+37h (418547h) 0041852E test dword ptr [edi+1B4h],100h 00418538 je set_peerdstadr+37h (418547h) 0041853A cmp dword ptr [esi+184h],0 00418541 jne set_peerdstadr+0E9h (4185F9h) /* * don't accept updates to a true multicast * reception interface while a BCLNT peer is * running it's unicast protocol */ return; } if (peer->dstadr != NULL) { 00418547 test eax,eax 00418549 je set_peerdstadr+0C4h (4185D4h) peer->dstadr->peercnt--; 0041854F dec dword ptr [eax+1E4h] UNLINK_SLIST(unlinked, peer->dstadr->peers, peer, ilink, struct peer); 00418555 mov eax,dword ptr [esi+90h] 0041855B mov ecx,dword ptr [eax+1E0h] 00418561 add eax,1E0h 00418566 cmp esi,ecx 00418568 je set_peerdstadr+6Fh (41857Fh) 0041856A lea ebx,[ebx] 00418570 cmp dword ptr [ecx+8],0 00418574 lea eax,[ecx+8] 00418577 je set_peerdstadr+7Dh (41858Dh) 00418579 mov ecx,dword ptr [eax] 0041857B cmp esi,ecx 0041857D jne set_peerdstadr+60h (418570h) 0041857F mov ecx,dword ptr [eax] 00418581 mov edx,dword ptr [ecx+8] 00418584 mov dword ptr [eax],edx 00418586 mov dword ptr [ecx+8],0 msyslog(LOG_INFO, "%s interface %s -> %s", stoa(&peer->srcadr), stoa(&peer->dstadr->sin), (interface != NULL) ? stoa(&interface->sin) : "(null)"); 0041858D test edi,edi 0041858F je set_peerdstadr+8Fh (41859Fh) 00418591 lea eax,[edi+10h] 00418594 push eax 00418595 call socktoa (43BD10h) 0041859A add esp,4 0041859D jmp set_peerdstadr+94h (4185A4h) 0041859F mov eax,offset string "(null)" (474FD0h) 004185A4 mov ecx,dword ptr [esi+90h] 004185AA push eax 004185AB add ecx,10h 004185AE push ecx 004185AF call socktoa (43BD10h) 004185B4 add esp,4 004185B7 push eax 004185B8 lea edx,[esi+10h] 004185BB push edx 004185BC call socktoa (43BD10h) 004185C1 add esp,4 004185C4 push eax 004185C5 push offset string "%s interface %s -> %s" (474FD8h) 004185CA push 6 004185CC call msyslog (4338F0h) 004185D1 add esp,14h } peer->dstadr = interface; 004185D4 mov dword ptr [esi+90h],edi if (peer->dstadr != NULL) { 004185DA test edi,edi 004185DC je set_peerdstadr+0E9h (4185F9h) LINK_SLIST(peer->dstadr->peers, peer, ilink); 004185DE mov eax,dword ptr [edi+1E0h] 004185E4 mov dword ptr [esi+8],eax 004185E7 mov dword ptr [edi+1E0h],esi peer->dstadr->peercnt++; 004185ED mov esi,dword ptr [esi+90h] 004185F3 inc dword ptr [esi+1E4h] 004185F9 pop esi } } } 004185FA ret total size with singly-linked is 4185fa - 418510 == 0xea == 234 octets