X-Git-Url: http://p2p-next.cs.pub.ro/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Flibswift%2Fswift.h;h=723cf150485739e65d98a7631b38a3314050d2bc;hb=da188550ca4b16d1f49b0e59938ff93612a6cdbb;hp=dfe85f13708d552ca5839b9367ac43462ef786da;hpb=7b901a75a2e19d8d518bb3015744a87020d0d109;p=swifty.git diff --git a/src/libswift/swift.h b/src/libswift/swift.h index dfe85f1..723cf15 100644 --- a/src/libswift/swift.h +++ b/src/libswift/swift.h @@ -103,10 +103,16 @@ namespace swift { //{ inet_aton(ipv4_str,&(addr.sin_addr)); } void clear () { addr = (struct sockaddr_mptp *)calloc(1, sizeof(struct sockaddr_mptp) + sizeof(struct mptp_dest)); + addr->count = 1; } Address() { clear(); } + Address(const Address &b) { + clear(); + addr->dests[0].addr = b.addr->dests[0].addr; + addr->dests[0].port = b.addr->dests[0].port; + } Address(const char* ip, uint16_t port) { clear(); set_ipv4(ip); @@ -124,6 +130,7 @@ namespace swift { set_port(port); } Address(const struct sockaddr_in& address) { + clear(); addr->dests[0].addr = address.sin_addr.s_addr; addr->dests[0].port = address.sin_port; } @@ -132,6 +139,15 @@ namespace swift { } uint32_t ipv4 () const { return ntohl(addr->dests[0].addr); } uint16_t port () const { return ntohs(addr->dests[0].port); } + Address& operator = (const Address& b) { + if (this != &b) { + free(addr); + clear(); + addr->dests[0].addr = b.addr->dests[0].addr; + addr->dests[0].port = b.addr->dests[0].port; + } + return *this; + } bool operator == (const Address& b) const { return addr->count == b.addr->count && addr->dests[0].port==b.addr->dests[0].port && @@ -478,8 +494,8 @@ namespace swift { static void LibeventSendCallback(int fd, short event, void *arg); static void LibeventReceiveCallback(int fd, short event, void *arg); static void RecvDatagram (evutil_socket_t socket); // Called by LibeventReceiveCallback - static int RecvFrom(evutil_socket_t sock, Address& addr, struct evbuffer *evb); // Called by RecvDatagram - static int SendTo(evutil_socket_t sock, const Address& addr, struct evbuffer *evb); // Called by Channel::Send() + static int RecvFrom(evutil_socket_t sock, Address& addr, struct evbuffer **evb); // Called by RecvDatagram + static int SendTo(evutil_socket_t sock, const Address& addr, struct evbuffer **evb); // Called by Channel::Send() static evutil_socket_t Bind(Address address, sckrwecb_t callbacks=sckrwecb_t()); static Address BoundAddress(evutil_socket_t sock); static evutil_socket_t default_socket()