TreeCommunicatorLevel::TreeCommunicatorLevel(MPI_Comm comm, MPI_Datatype sample_mpi_type, MPI_Datatype policy_mpi_type) : m_comm(comm) , m_sample_mpi_type(sample_mpi_type) , m_policy_mpi_type(policy_mpi_type) { check_mpi(MPI_Comm_size(comm, &m_size)); check_mpi(MPI_Comm_rank(comm, &m_rank)); m_sample_mailbox.resize(m_size); m_sample_request.resize(m_size); m_policy = GEOPM_POLICY_UNKNOWN; open_recv(); }
int main(int argc, char **argv) { PaError err = Pa_Initialize(); if (err != paNoError) { printf("failed to initialize port audio, %s\n", Pa_GetErrorText(err)); return 1; } quiet_lwip_portaudio_driver_config *conf = calloc(1, sizeof(quiet_lwip_portaudio_driver_config)); const char *encoder_key = "audible-7k-channel-1"; const char *decoder_key = "audible-7k-channel-0"; const char *fname = "/usr/local/share/quiet/quiet-profiles.json"; conf->encoder_opt = quiet_encoder_profile_filename(fname, encoder_key); conf->decoder_opt = quiet_decoder_profile_filename(fname, decoder_key); conf->encoder_device = Pa_GetDefaultOutputDevice(); const PaDeviceInfo *device_info = Pa_GetDeviceInfo(conf->encoder_device); conf->encoder_sample_rate = device_info->defaultSampleRate; conf->encoder_latency = device_info->defaultLowOutputLatency; conf->decoder_device = Pa_GetDefaultInputDevice(); device_info = Pa_GetDeviceInfo(conf->decoder_device); conf->decoder_sample_rate = device_info->defaultSampleRate; conf->decoder_latency = device_info->defaultLowOutputLatency; conf->encoder_sample_size = 1 << 8; conf->decoder_sample_size = 1 << 8; memcpy(conf->hardware_addr, mac, 6); quiet_lwip_portaudio_interface *interface = quiet_lwip_portaudio_create(conf, htonl(ipaddr), htonl(netmask), htonl(gateway)); free(conf); quiet_lwip_portaudio_audio_threads *audio_threads = quiet_lwip_portaudio_start_audio_threads(interface); key_value_t *kv = key_value_init(); kv_t temp_kv; temp_kv.key = calloc(key_len, sizeof(uint8_t)); temp_kv.value = calloc(value_len, sizeof(uint8_t)); int recv_socket = open_recv(ipaddr_s); size_t buf_len = 4096; uint8_t *buf = calloc(buf_len, sizeof(uint8_t)); struct sockaddr_in recv_from; int conn_fd = recv_connection(recv_socket, &recv_from); printf("received connection from %s\n", inet_ntoa(recv_from.sin_addr.s_addr)); for (;;) { ssize_t recv_len = read(conn_fd, buf, buf_len); if (recv_len) { printf("received packet from %s: %.*s\n", inet_ntoa(recv_from.sin_addr.s_addr), (int)recv_len, buf); } else { close(conn_fd); conn_fd = recv_connection(recv_socket, &recv_from); printf("received connection from %s\n", inet_ntoa(recv_from.sin_addr.s_addr)); continue; } if (recv_len < 0) { printf("read from connection failed\n"); } if (memcmp(buf, recv_ping_str, strlen(recv_ping_str)) == 0) { printf("sending response to %s\n", inet_ntoa(recv_from.sin_addr.s_addr)); memset(buf, 0, buf_len); memcpy(buf, send_ping_str, strlen(send_ping_str)); write(conn_fd, buf, strlen(send_ping_str)); } else if (memcmp(buf, recv_add_str, strlen(recv_add_str)) == 0) { ptrdiff_t key_offset = strlen(recv_add_str); size_t remaining = recv_len - key_offset; ptrdiff_t value_offset = 0; for (size_t i = 0; i < (remaining - 1) && i < key_len; i++) { if (buf[key_offset + i] == add_delim) { value_offset = key_offset + i + 1; break; } } if (value_offset) { memset(temp_kv.key, 0, key_len * sizeof(uint8_t)); memset(temp_kv.value, 0, value_len * sizeof(uint8_t)); memcpy(temp_kv.key, buf + key_offset, value_offset - key_offset - 1); memcpy(temp_kv.value, buf + value_offset, recv_len - value_offset); key_value_add(kv, &temp_kv); key_value_print(kv); memset(buf, 0, buf_len); memcpy(buf, send_add_str, strlen(send_add_str)); write(conn_fd, buf, strlen(send_add_str)); } } else if (memcmp(buf, recv_get_str, strlen(recv_get_str)) == 0) { ptrdiff_t key_offset = strlen(recv_get_str); memset(temp_kv.key, 0, key_len * sizeof(uint8_t)); memcpy(temp_kv.key, buf + key_offset, recv_len - key_offset); const kv_t *found = key_value_find(kv, &temp_kv); if (found) { write(conn_fd, found->value, value_len); } else { write(conn_fd, get_notfound, strlen(get_notfound)); } } } quiet_lwip_portaudio_stop_audio_threads(audio_threads); key_value_destroy(kv); free(buf); quiet_lwip_portaudio_destroy(interface); Pa_Terminate(); return 0; }