X-Git-Url: http://git.bitcoin.ninja/index.cgi?p=ldk-c-bindings;a=blobdiff_plain;f=ldk-net%2Fldk_net.c;h=f404ddd973d107477968011893a439e5c5c8e997;hp=fb349ae1368ccddba0da8b242bdbfcb5802d0236;hb=fee27c4b40d1d25609a38bb220dd64b297af929a;hpb=78bee4f7e0ea0a48dbf5bb1227ed96e6cb3a041a diff --git a/ldk-net/ldk_net.c b/ldk-net/ldk_net.c index fb349ae..f404ddd 100644 --- a/ldk-net/ldk_net.c +++ b/ldk-net/ldk_net.c @@ -38,7 +38,7 @@ #define MAX_CONNS 1024 struct SocketHandler { - const struct LDKPeerManager *ldk_peer_manager; + struct LDKPeerManager ldk_peer_manager; pthread_t socket_thread; bool should_exit; int pipefds[2]; @@ -111,10 +111,9 @@ static uintptr_t sock_send_data(void* desc, struct LDKu8slice data, bool resume_ for (int i = 0; i < descriptor->handler->sockcount; i++) { if (descriptor->handler->pollfds[i].fd == descriptor->fd) { if (pause_read) { - descriptor->handler->pollfds[i].events &= POLLIN; - descriptor->handler->pollfds[i].events |= POLLOUT; + descriptor->handler->pollfds[i].events = POLLOUT; } else { - descriptor->handler->pollfds[i].events |= POLLIN; + descriptor->handler->pollfds[i].events = POLLIN; } break; } @@ -142,12 +141,12 @@ static uint64_t sock_hash(const void* desc) { const struct Descriptor *descriptor = (const struct Descriptor*)desc; return (uint64_t)descriptor->fd; } -static void* sock_clone(const void* desc) { - const struct Descriptor *descriptor = (const struct Descriptor*)desc; +static void sock_cloned(LDKSocketDescriptor *NONNULL_PTR ldk_desc) { + const struct Descriptor *descriptor = (const struct Descriptor*)ldk_desc->this_arg; struct Descriptor *new_desc = malloc(sizeof(struct Descriptor)); new_desc->handler = descriptor->handler; new_desc->fd = descriptor->fd; - return new_desc; + ldk_desc->this_arg = (void*) new_desc; } static void sock_free(void* desc) { free(desc); @@ -163,7 +162,7 @@ static inline LDKSocketDescriptor get_descriptor(struct SocketHandler *handler, .disconnect_socket = sock_disconnect, .eq = sock_eq, .hash = sock_hash, - .clone = sock_clone, + .cloned = sock_cloned, .free = sock_free, }; return ret; @@ -215,7 +214,7 @@ static void *sock_thread_fn(void* arg) { if (newfd >= 0) { // Received a new connection, register it! LDKSocketDescriptor new_descriptor = get_descriptor(handler, newfd); - LDKCResult_NonePeerHandleErrorZ con_res = PeerManager_new_inbound_connection(handler->ldk_peer_manager, new_descriptor); + LDKCResult_NonePeerHandleErrorZ con_res = PeerManager_new_inbound_connection(&handler->ldk_peer_manager, new_descriptor); if (con_res.result_ok) { if (register_socket(handler, newfd, 0)) shutdown(newfd, SHUT_RDWR); @@ -237,14 +236,13 @@ static void *sock_thread_fn(void* arg) { .data = readbuf, .datalen = readlen, }; - LDKCResult_boolPeerHandleErrorZ res = PeerManager_read_event(handler->ldk_peer_manager, &descriptor, data); + LDKCResult_boolPeerHandleErrorZ res = PeerManager_read_event(&handler->ldk_peer_manager, &descriptor, data); if (res.result_ok) { if (*res.contents.result) { lockres = pthread_mutex_lock(&handler->sockets_mutex); assert(lockres == 0); assert(handler->pollfds[i - 1].fd == pollfds[i].fd); // Only we change fd order! - handler->pollfds[i - 1].events &= POLLIN; - handler->pollfds[i - 1].events |= POLLOUT; + handler->pollfds[i - 1].events = POLLOUT; lockres = pthread_mutex_unlock(&handler->sockets_mutex); assert(lockres == 0); } @@ -255,7 +253,7 @@ static void *sock_thread_fn(void* arg) { } } if (pollfds[i].revents & POLLOUT) { - LDKCResult_NonePeerHandleErrorZ res = PeerManager_write_buffer_space_avail(handler->ldk_peer_manager, &descriptor); + LDKCResult_NonePeerHandleErrorZ res = PeerManager_write_buffer_space_avail(&handler->ldk_peer_manager, &descriptor); if (!res.result_ok) { close_socks[close_socks_count++] = i; } @@ -274,7 +272,7 @@ static void *sock_thread_fn(void* arg) { // as we walk. for (int i = 0; i < close_socks_count; i++) { LDKSocketDescriptor descriptor = get_descriptor(handler, handler->pollfds[close_socks[i]].fd); - PeerManager_socket_disconnected(handler->ldk_peer_manager, &descriptor); + PeerManager_socket_disconnected(&handler->ldk_peer_manager, &descriptor); SocketDescriptor_free(descriptor); } @@ -294,14 +292,14 @@ static void *sock_thread_fn(void* arg) { lockres = pthread_mutex_unlock(&handler->sockets_mutex); assert(lockres == 0); - PeerManager_process_events(handler->ldk_peer_manager); + PeerManager_process_events(&handler->ldk_peer_manager); } lockres = pthread_mutex_lock(&handler->sockets_mutex); assert(lockres == 0); for (int i = 0; i < handler->sockcount; i++) { LDKSocketDescriptor descriptor = get_descriptor(handler, handler->pollfds[i].fd); - PeerManager_socket_disconnected(handler->ldk_peer_manager, &descriptor); + PeerManager_socket_disconnected(&handler->ldk_peer_manager, &descriptor); SocketDescriptor_free(descriptor); } @@ -326,7 +324,7 @@ void* init_socket_handling(const struct LDKPeerManager *NONNULL_PTR ldk_peer_man handler->pipefds[0] = -1; handler->pipefds[1] = -1; - handler->ldk_peer_manager = ldk_peer_manager; + handler->ldk_peer_manager = *ldk_peer_manager; handler->should_exit = false; if (pipe(handler->pipefds) != 0) goto err; @@ -380,7 +378,7 @@ int socket_connect(void* arg, LDKPublicKey pubkey, struct sockaddr *addr, size_t if (register_socket(handler, fd, 0)) return -4; LDKSocketDescriptor descriptor = get_descriptor(handler, fd); - LDKCResult_CVec_u8ZPeerHandleErrorZ con_res = PeerManager_new_outbound_connection(handler->ldk_peer_manager, pubkey, descriptor); + LDKCResult_CVec_u8ZPeerHandleErrorZ con_res = PeerManager_new_outbound_connection(&handler->ldk_peer_manager, pubkey, descriptor); if (con_res.result_ok) { ssize_t write_count = send(fd, con_res.contents.result->data, con_res.contents.result->datalen, MSG_NOSIGNAL); if (write_count != con_res.contents.result->datalen)