Author: tjansen Date: Thu Nov 26 14:50:58 2009 New Revision: 1805 Log: Merged the IPv4 and IPv6 versions of pisa_send_control_packet and pisa_send_control_packet_type. Most of it was duplicate code, the only difference was the size of the sockaddr. Modified: trunk/libpisa/packet.c trunk/libpisa/packet.h trunk/pisacd/cdderegister.c trunk/pisacd/cdheartbeat.c trunk/pisacd/cdregister.c trunk/pisasd/sdderegister.c trunk/pisasd/sdheartbeat.c trunk/pisasd/sdregister.c Modified: trunk/libpisa/packet.c ============================================================================== --- trunk/libpisa/packet.c Thu Nov 26 14:45:56 2009 (r1804) +++ trunk/libpisa/packet.c Thu Nov 26 14:50:58 2009 (r1805) @@ -21,53 +21,39 @@ * @param addr destination address * @param p packet */ -void pisa_send_control_packet_ipv4(int fd, struct sockaddr_in* addr, pisa_packet *p) +void pisa_send_control_packet(int fd, struct sockaddr* addr, pisa_packet *p) { - sendto(fd, p, pisa_get_packet_length(p), 0, (struct sockaddr*) addr, sizeof(struct sockaddr_in)); -} - -/** - * Send a control packet with no payload. - * @param fd file descriptor for the socket - * @param addr destination address - * @param type type of the packet - */ -void pisa_send_control_packet_ipv4_type(int fd, struct sockaddr_in* addr, pisa_tlv_type type) -{ - pisa_packet *packet = pisa_alloc_msg(); - - pisa_set_packet_type(packet, type); - pisa_set_packet_length(packet, sizeof(pisa_packet_common)); + socklen_t len = 0; - pisa_send_control_packet_ipv4(fd, addr, packet); - pisa_free_msg(packet); -} + switch(addr->sa_family) { + case AF_INET: + len = sizeof(struct sockaddr_in); + break; + case AF_INET6: + len = sizeof(struct sockaddr_in6); + break; + default: + PISA_ERROR("Invalid address family in pisa_send_control_packet"); + return; + } -/** - * Send a control packet. - * @param fd file descriptor for the socket - * @param addr destination address - * @param p packet - */ -void pisa_send_control_packet_ipv6(int fd, struct sockaddr_in6* addr, pisa_packet *p) -{ - sendto(fd, p, pisa_get_packet_length(p), 0, (struct sockaddr*) addr, sizeof(struct sockaddr_in6)); + sendto(fd, p, pisa_get_packet_length(p), 0, addr, len); } /** * Send a control packet with no payload. - * @param fd socket via the packet will be sent + * @param fd file descriptor for the socket * @param addr destination address * @param type type of the packet */ -void pisa_send_control_packet_ipv6_type(int fd, struct sockaddr_in6* addr, pisa_tlv_type type) +void pisa_send_control_packet_type(int fd, struct sockaddr* addr, pisa_tlv_type type) { pisa_packet *packet = pisa_alloc_msg(); pisa_set_packet_type(packet, type); pisa_set_packet_length(packet, sizeof(pisa_packet_common)); - pisa_send_control_packet_ipv6(fd, addr, packet); + pisa_send_control_packet(fd, addr, packet); pisa_free_msg(packet); } Modified: trunk/libpisa/packet.h ============================================================================== --- trunk/libpisa/packet.h Thu Nov 26 14:45:56 2009 (r1804) +++ trunk/libpisa/packet.h Thu Nov 26 14:50:58 2009 (r1805) @@ -123,10 +123,8 @@ } body; } __attribute__ ((packed)) pisa_packet; -void pisa_send_control_packet_ipv4(int fd, struct sockaddr_in* addr, pisa_packet *p); -void pisa_send_control_packet_ipv6(int fd, struct sockaddr_in6* addr, pisa_packet *p); -void pisa_send_control_packet_ipv4_type(int fd, struct sockaddr_in* addr, pisa_tlv_type type); -void pisa_send_control_packet_ipv6_type(int fd, struct sockaddr_in6* addr, pisa_tlv_type type); +void pisa_send_control_packet(int fd, struct sockaddr* addr, pisa_packet *p); +void pisa_send_control_packet_type(int fd, struct sockaddr* addr, pisa_tlv_type type); void pisa_init_msg(pisa_packet *pkt); pisa_packet *pisa_alloc_msg(void); Modified: trunk/pisacd/cdderegister.c ============================================================================== --- trunk/pisacd/cdderegister.c Thu Nov 26 14:45:56 2009 (r1804) +++ trunk/pisacd/cdderegister.c Thu Nov 26 14:50:58 2009 (r1805) @@ -69,7 +69,7 @@ } else { inet_ntop(AF_INET6, &pend->key.addr.sin6_addr, buffer, sizeof(buffer)); PISA_DEBUG(PL_DEREGISTER, "Sending DEREGISTER to %s, try %i\n", buffer, pend->count); - pisa_send_control_packet_ipv6_type(cd_ctx.fd_control, &pend->entry->saddr_control, PISA_PKTTYPE_TUN_DEREGISTER); + pisa_send_control_packet_type(cd_ctx.fd_control, (struct sockaddr *)&pend->entry->saddr_control, PISA_PKTTYPE_TUN_DEREGISTER); return PISA_PENDING_RESCHEDULE; } } Modified: trunk/pisacd/cdheartbeat.c ============================================================================== --- trunk/pisacd/cdheartbeat.c Thu Nov 26 14:45:56 2009 (r1804) +++ trunk/pisacd/cdheartbeat.c Thu Nov 26 14:50:58 2009 (r1805) @@ -56,7 +56,7 @@ inet_ntop(AF_INET6, &pend->key.addr.sin6_addr, buffer, sizeof(buffer)); if (pend->entry->status == PISA_CON_CONNECTED) { PISA_DEBUG(PL_HEARTBEAT, "Sending HEARTBEAT to %s, try %i\n", buffer, pend->count); - pisa_send_control_packet_ipv6_type(cd_ctx.fd_control, &pend->entry->saddr_control, PISA_PKTTYPE_TUN_HEARTBEAT); + pisa_send_control_packet_type(cd_ctx.fd_control, (struct sockaddr *)&pend->entry->saddr_control, PISA_PKTTYPE_TUN_HEARTBEAT); return PISA_PENDING_RESCHEDULE; } else { PISA_DEBUG(PL_HEARTBEAT, "Skipping HEARTBEAT to %s, wrong status\n", buffer); Modified: trunk/pisacd/cdregister.c ============================================================================== --- trunk/pisacd/cdregister.c Thu Nov 26 14:45:56 2009 (r1804) +++ trunk/pisacd/cdregister.c Thu Nov 26 14:50:58 2009 (r1805) @@ -49,7 +49,7 @@ pisa_set_packet_type(packet, PISA_PKTTYPE_TUN_REGISTER); pisa_set_packet_length(packet, sizeof(pisa_packet_common) + sizeof(pisa_payload_register)); - pisa_send_control_packet_ipv6(cd_ctx.fd_control, &pend->key.addr, packet); + pisa_send_control_packet(cd_ctx.fd_control, (struct sockaddr *)&pend->key.addr, packet); pisa_free_msg(packet); return PISA_PENDING_RESCHEDULE; } Modified: trunk/pisasd/sdderegister.c ============================================================================== --- trunk/pisasd/sdderegister.c Thu Nov 26 14:45:56 2009 (r1804) +++ trunk/pisasd/sdderegister.c Thu Nov 26 14:50:58 2009 (r1805) @@ -35,5 +35,5 @@ } else { PISA_DEBUG(PL_STATEMACHINE|PL_DEREGISTER, "Deregister from unconnected client %s\n", buffer); } - pisa_send_control_packet_ipv6_type(sd_ctx.fd_control, addr, PISA_PKTTYPE_TUN_DEREGISTER_ACK); + pisa_send_control_packet_type(sd_ctx.fd_control, (struct sockaddr *)addr, PISA_PKTTYPE_TUN_DEREGISTER_ACK); } Modified: trunk/pisasd/sdheartbeat.c ============================================================================== --- trunk/pisasd/sdheartbeat.c Thu Nov 26 14:45:56 2009 (r1804) +++ trunk/pisasd/sdheartbeat.c Thu Nov 26 14:50:58 2009 (r1805) @@ -56,7 +56,7 @@ if (e) { e->heartbeat_flag = true; - pisa_send_control_packet_ipv6_type(sd_ctx.fd_control, addr, PISA_PKTTYPE_TUN_HEARTBEAT_ACK); + pisa_send_control_packet_type(sd_ctx.fd_control, (struct sockaddr *)addr, PISA_PKTTYPE_TUN_HEARTBEAT_ACK); inet_ntop(AF_INET6, &addr->sin6_addr, buffer, sizeof(buffer)); PISA_INFO("Heartbeat from client %s\n", buffer); } Modified: trunk/pisasd/sdregister.c ============================================================================== --- trunk/pisasd/sdregister.c Thu Nov 26 14:45:56 2009 (r1804) +++ trunk/pisasd/sdregister.c Thu Nov 26 14:50:58 2009 (r1805) @@ -33,7 +33,7 @@ pisa_set_packet_type(packet, PISA_PKTTYPE_TUN_REGISTER_ACK); pisa_set_packet_length(packet, sizeof(pisa_packet_common) + sizeof(pisa_payload_registerack)); - pisa_send_control_packet_ipv6(sd_ctx.fd_control, &e->saddr_control, packet); + pisa_send_control_packet(sd_ctx.fd_control, (struct sockaddr *)&e->saddr_control, packet); pisa_free_msg(packet); }