File Conn.c changed (mode: 100644) (index 60b95db..a8e3c53) |
... |
... |
struct Conn *Conn_connect(const int domain, const int type, const char *addr, |
714 |
714 |
static void Conn_accept(struct Conn *C) |
static void Conn_accept(struct Conn *C) |
715 |
715 |
{ |
{ |
716 |
716 |
int fd, err; |
int fd, err; |
717 |
|
struct sockaddr *pca; |
|
718 |
|
struct sockaddr_in ca4; |
|
719 |
|
struct sockaddr_in6 ca6; |
|
720 |
|
socklen_t cax_len; |
|
|
717 |
|
struct sockaddr *pca, *psa; |
|
718 |
|
struct sockaddr_in ca4, sa4; |
|
719 |
|
struct sockaddr_in6 ca6, sa6; |
|
720 |
|
socklen_t cax_len, sax_len; |
721 |
721 |
struct Conn *X; |
struct Conn *X; |
722 |
722 |
unsigned int Cslot; |
unsigned int Cslot; |
723 |
723 |
|
|
724 |
|
Log(10, "Accepting a connection via %s/%d, type %s, domain %s.\n", |
|
725 |
|
C->bind_addr, C->bind_port, Conn_type(C), Conn_domain(C)); |
|
|
724 |
|
Log(10, "Accepting a connection via %s/%d, type %s, domain %s" |
|
725 |
|
", protocol %s.\n", |
|
726 |
|
C->bind_addr, C->bind_port, Conn_type(C), Conn_domain(C), |
|
727 |
|
Conn_get_socket_protocol(C)); |
726 |
728 |
|
|
727 |
729 |
switch(C->sock_domain) { |
switch(C->sock_domain) { |
728 |
730 |
case PF_INET: |
case PF_INET: |
729 |
731 |
pca = (struct sockaddr *) &ca4; |
pca = (struct sockaddr *) &ca4; |
730 |
732 |
cax_len = sizeof(ca4); |
cax_len = sizeof(ca4); |
|
733 |
|
psa = (struct sockaddr *) &sa4; |
|
734 |
|
sax_len = sizeof(sa4); |
731 |
735 |
break; |
break; |
732 |
736 |
|
|
733 |
737 |
case PF_INET6: |
case PF_INET6: |
734 |
738 |
pca = (struct sockaddr *) &ca6; |
pca = (struct sockaddr *) &ca6; |
735 |
739 |
cax_len = sizeof(ca6); |
cax_len = sizeof(ca6); |
|
740 |
|
psa = (struct sockaddr *) &sa6; |
|
741 |
|
sax_len = sizeof(sa6); |
736 |
742 |
break; |
break; |
737 |
743 |
|
|
738 |
744 |
default: |
default: |
|
... |
... |
static void Conn_accept(struct Conn *C) |
765 |
771 |
return; |
return; |
766 |
772 |
} |
} |
767 |
773 |
|
|
|
774 |
|
err = getsockname(fd, psa, &sax_len); |
|
775 |
|
|
768 |
776 |
switch (C->sock_domain) { |
switch (C->sock_domain) { |
769 |
777 |
case PF_INET: |
case PF_INET: |
|
778 |
|
/* remote */ |
770 |
779 |
inet_ntop(C->sock_domain, &ca4.sin_addr, X->addr, sizeof(X->addr)); |
inet_ntop(C->sock_domain, &ca4.sin_addr, X->addr, sizeof(X->addr)); |
771 |
780 |
X->port = ntohs(ca4.sin_port); |
X->port = ntohs(ca4.sin_port); |
|
781 |
|
/* local */ |
|
782 |
|
if (err == 0) { |
|
783 |
|
inet_ntop(C->sock_domain, &sa4.sin_addr, X->bind_addr, sizeof(X->bind_addr)); |
|
784 |
|
X->bind_port = ntohs(sa4.sin_port); |
|
785 |
|
} |
772 |
786 |
break; |
break; |
773 |
787 |
|
|
774 |
788 |
case PF_INET6: |
case PF_INET6: |
|
789 |
|
/* remote */ |
775 |
790 |
inet_ntop(C->sock_domain, &ca6.sin6_addr, X->addr, sizeof(X->addr)); |
inet_ntop(C->sock_domain, &ca6.sin6_addr, X->addr, sizeof(X->addr)); |
776 |
791 |
X->port = ntohs(ca6.sin6_port); |
X->port = ntohs(ca6.sin6_port); |
|
792 |
|
/* local */ |
|
793 |
|
if (err == 0) { |
|
794 |
|
inet_ntop(C->sock_domain, &sa6.sin6_addr, X->addr, sizeof(X->addr)); |
|
795 |
|
X->port = ntohs(sa6.sin6_port); |
|
796 |
|
} |
777 |
797 |
break; |
break; |
778 |
798 |
} |
} |
779 |
799 |
|
|
File Conn_engine_core.c changed (mode: 100644) (index 77ef865..8f9b3db) |
... |
... |
char *Conn_status_slot(struct Conn *C) |
448 |
448 |
local_addr = C->bind_addr; |
local_addr = C->bind_addr; |
449 |
449 |
local_port = C->bind_port; |
local_port = C->bind_port; |
450 |
450 |
} else if (C->type == CONN_TYPE_P2P) { |
} else if (C->type == CONN_TYPE_P2P) { |
451 |
|
local_addr = C->bind_addr; |
|
452 |
|
local_port = C->bind_port; |
|
|
451 |
|
if (strlen(C->bind_addr) > 0) { |
|
452 |
|
local_addr = C->bind_addr; |
|
453 |
|
local_port = C->bind_port; |
|
454 |
|
} |
453 |
455 |
remote_addr = C->addr; |
remote_addr = C->addr; |
454 |
456 |
remote_port = C->port; |
remote_port = C->port; |
455 |
457 |
} |
} |