struct ff_arch_tcp *ff_arch_tcp_accept(struct ff_arch_tcp *tcp, struct ff_arch_net_addr *remote_addr) { int accepted_sd; socklen_t addrlen = sizeof(remote_addr->addr); struct ff_arch_tcp *accepted_tcp = NULL; again: accepted_sd = accept(tcp->sd_rd, (struct sockaddr *) &remote_addr->addr, &addrlen); if (accepted_sd == -1) { if (errno == EINTR) { goto again; } if (errno == EAGAIN || errno == EWOULDBLOCK) { ff_linux_net_wait_for_io(tcp->sd_rd, FF_LINUX_NET_IO_READ); goto again; } ff_log_debug(L"cannot accept connection to the sd_rd=%d, remote_addr=%p. errno=%d", tcp->sd_rd, remote_addr, errno); } else { ff_assert(addrlen == sizeof(remote_addr->addr)); accepted_tcp = create_tcp(accepted_sd); } return accepted_tcp; }
struct ff_arch_tcp *ff_arch_tcp_create() { struct ff_arch_tcp *tcp; int sd; sd = socket(PF_INET, SOCK_STREAM, 0); ff_linux_fatal_error_check(sd != -1, L"cannot create TCP socket"); tcp = create_tcp(sd); return tcp; }
static void powered_watch(struct ofono_modem *modem, gboolean powered, void *user) { if (powered == FALSE) { DBG("Removing modem %p from the list", modem); modems = g_list_remove(modems, modem); if (modems == NULL && server_watch > 0) { DBG("Removing server watch: %u", server_watch); g_source_remove(server_watch); server_watch = 0; } } else { DBG("Adding modem %p to the list", modem); modems = g_list_append(modems, modem); if (modems->next == NULL) { create_tcp(DUN_PORT, OFONO_EMULATOR_TYPE_DUN); create_tcp(HFP_PORT, OFONO_EMULATOR_TYPE_HFP); } } }
static void modem_watch(struct ofono_modem *modem, gboolean added, void *user) { DBG("modem: %p, added: %d", modem, added); if (added == FALSE) { DBG("Removing modem %p from the list", modem); modems = g_list_remove(modems, modem); return; } if (ofono_modem_get_powered(modem) == TRUE) { DBG("Adding modem %p to the list", modem); modems = g_list_append(modems, modem); if (modems->next == NULL) { create_tcp(DUN_PORT, OFONO_EMULATOR_TYPE_DUN); create_tcp(HFP_PORT, OFONO_EMULATOR_TYPE_HFP); } } __ofono_modem_add_powered_watch(modem, powered_watch, NULL, NULL); }
static void test_server(int type) { switch (type) { case 0: if (create_tty("/phonesim1") == FALSE) exit(1); add_handler(server); break; case 1: if (create_tcp("/phonesim1", DEFAULT_TCP_PORT) == FALSE) exit(1); break; case 2: if (create_unix("/phonesim1", DEFAULT_SOCK_PATH) == FALSE) exit(1); break; } }