int addressEqual (XdmcpNetaddr a1, int len1, XdmcpNetaddr a2, int len2) { int partlen1, partlen2; char *part1, *part2; if (len1 != len2) { return FALSE; } if (NetaddrFamily(a1) != NetaddrFamily(a2)) { return FALSE; } part1 = NetaddrPort(a1, &partlen1); part2 = NetaddrPort(a2, &partlen2); if (partlen1 != partlen2 || memcmp(part1, part2, partlen1) != 0) { return FALSE; } part1 = NetaddrAddress(a1, &partlen1); part2 = NetaddrAddress(a2, &partlen2); if (partlen1 != partlen2 || memcmp(part1, part2, partlen1) != 0) { return FALSE; } return TRUE; }
static FormatChooserArgument ( char *buf, int len) { unsigned char addr_buf[1024]; int addr_len = sizeof (addr_buf); unsigned char result_buf[1024]; int result_len = 0; int netfamily; if (GetChooserAddr (addr_buf, &addr_len) == -1) { LogError ((unsigned char *)"Cannot get return address for chooser socket\n"); Debug ("Cannot get chooser socket address\n"); return 0; } netfamily = NetaddrFamily((XdmcpNetaddr)addr_buf); switch (netfamily) { case AF_INET: { char *port; int portlen; ARRAY8Ptr localAddress, getLocalAddress (); port = NetaddrPort((XdmcpNetaddr)addr_buf, &portlen); result_buf[0] = netfamily >> 8; result_buf[1] = netfamily & 0xFF; result_buf[2] = port[0]; result_buf[3] = port[1]; localAddress = getLocalAddress (); bcopy ((char *)localAddress->data, (char *)result_buf+4, 4); result_len = 8; } break; #ifdef AF_DECnet case AF_DECnet: break; #endif default: Debug ("Chooser family %d isn't known\n", netfamily); return 0; } return FormatBytes (result_buf, result_len, buf, len); }
static void ClientAddress(struct sockaddr *from, ARRAY8Ptr addr, /* return */ ARRAY8Ptr port, /* return */ CARD16 *type) /* return */ { int length, family; char *data; data = NetaddrPort((XdmcpNetaddr)from, &length); XdmcpAllocARRAY8(port, length); memmove(port->data, data, length); port->length = length; family = ConvertAddr((XdmcpNetaddr)from, &length, &data); XdmcpAllocARRAY8(addr, length); memmove(addr->data, data, length); addr->length = length; *type = family; }