int main ( int argc, const char **argv ) { int r = 1; if ( argc < 3 ) { fprintf ( stderr, "usage:\n\t%s multicast_address multicast_service (interface)\n", argv[0] ); fprintf ( stderr, "example:\n\t%s ff31::8000:1234 30001\n", argv[0] ); exit ( 1 ); } if ( us_testutil_start ( 4096, 4096, argc, argv ) ) { const char *multicast_address = argv[1]; const char *multicast_service = argv[2]; const char *interface = ""; if ( argc > 3 ) interface = argv[3]; #if US_ENABLE_LOGGING us_logger_printer_start ( us_testutil_printer_stdout, us_testutil_printer_stderr ); #endif us_log_set_level ( US_LOG_LEVEL_DEBUG ); us_log_info ( "Hello world from %s compiled on %s", __FILE__, __DATE__ ); if ( us_example_mudp_rx ( multicast_address, multicast_service, interface ) ) r = 0; us_log_info ( "Finishing %s", argv[0] ); us_logger_finish(); us_testutil_finish(); } return r; }
bool us_test_getopt( int US_UNUSED( argc ), const char **argv ) { bool r = false; us_allocator_t *allocator = us_testutil_sys_allocator; if ( us_getopt_init( &opt, allocator ) ) { r = true; r &= us_getopt_add_list( &opt, log_options, "log", "Logging options" ); r &= us_getopt_add_list( &opt, control_options, "control", "Control Options" ); r &= us_getopt_fill_defaults( &opt ); if ( r ) { if ( !us_getopt_parse_args( &opt, argv + 1 ) ) { us_getopt_print( &opt, us_testutil_printer_stdout ); } } us_log_info( "Log Level is %d", log_level ); us_log_info( "Greeting is %s", control_greeting ); us_log_info( "Name is %s", control_name ); us_log_info( "Mac addr is %02x:%02x:%02x:%02x:%02x:%02x", mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5] ); us_getopt_destroy( &opt ); } return r; }
static bool us_test_packet_queue(us_allocator_t *a) { bool r = false; us_packet_queue_t *q = us_packet_queue_create(a, 8, 512); if (q) { us_packet_t *p; const us_packet_t *p1; int k; for (k = 0; k < 10; ++k) { int i; FAIL_IF(!us_packet_queue_is_empty(q)); FAIL_IF(!us_packet_queue_can_write(q)); FAIL_IF(us_packet_queue_can_read(q)); for (i = 0; i < 6; ++i) { us_log_info("w%d in:%d out:%d", i, q->m_next_in, q->m_next_out); p = us_packet_queue_get_next_in(q); FAIL_IF(p == 0); p->m_data[0] = i; us_packet_queue_next_in(q); FAIL_IF(us_packet_queue_is_empty(q)); FAIL_IF(!us_packet_queue_can_write(q)); FAIL_IF(!us_packet_queue_can_read(q)); } us_log_info("w%d in:%d out:%d", 6, q->m_next_in, q->m_next_out); p = us_packet_queue_get_next_in(q); FAIL_IF(p == 0); p->m_data[0] = 6; us_packet_queue_next_in(q); FAIL_IF(us_packet_queue_is_empty(q)); FAIL_IF(us_packet_queue_can_write(q)); FAIL_IF(!us_packet_queue_can_read(q)); for (i = 0; i < 6; ++i) { us_log_info("r%d in:%d out:%d", i, q->m_next_in, q->m_next_out); p1 = us_packet_queue_get_next_out(q); FAIL_IF(p1 == 0); FAIL_IF(p1->m_data[0] != i); us_packet_queue_next_out(q); FAIL_IF(us_packet_queue_is_empty(q)); FAIL_IF(!us_packet_queue_can_write(q)); FAIL_IF(!us_packet_queue_can_read(q)); } us_log_info("r%d in:%d out:%d", 6, q->m_next_in, q->m_next_out); p1 = us_packet_queue_get_next_out(q); FAIL_IF(p1 == 0); FAIL_IF(p1->m_data[0] != 6); us_packet_queue_next_out(q); FAIL_IF(!us_packet_queue_is_empty(q)); FAIL_IF(!us_packet_queue_can_write(q)); FAIL_IF(us_packet_queue_can_read(q)); } r = true; } error: return r; }
static bool us_test_trie_schema_dispatch(us_trie_t *trie, const char *address, const char *types, void *value1, void *US_UNUSED(value2)) { bool r = false; us_trie_node_flags_t flags; int16_t match_len; us_trie_node_id_t match_item; if (us_trie_find(trie, (us_trie_node_value_t *)address, strlen(address), &flags, &match_len, &match_item, 0, 0)) { us_test_trie_schema_entry_t *entry = &us_test_trie_schema[flags]; if (types[0] == '\0') { us_test_trie_schema_value_t *param = entry->m_params[0]; if (entry->read_proc) { r = entry->read_proc(entry); } if (param && param->m_type == 's' && param->m_data != 0) { us_log_info("Read type s, value: %s", param->m_data); } } if (types[0] == 's') { us_test_trie_schema_value_t *param = entry->m_params[0]; if (param && param->m_rw == US_RW && param->m_type == 's' && param->m_data != 0) { if ((int)strlen((const char *)value1) < (int)(param->m_data_len - 1)) { strcpy((char *)param->m_data, (const char *)value1); if (entry->write_proc) { r = entry->write_proc(entry); } } } } } return r; }
static bool us_test_trie_2(void) { bool r = false; us_trie_dyn_t *trie; us_log_info("us_test_trie_2"); trie = us_trie_dyn_create(us_testutil_sys_allocator, 128, us_trie_basic_ignorer, us_trie_basic_ignorer, us_trie_basic_db_skip, us_trie_basic_comparator); if (trie) { int item = 0; us_test_trie_schema_entry_t *cur = &us_test_trie_schema[0]; while (cur && cur->m_address != 0) { us_trie_add( &trie->m_base, (us_trie_node_value_t *)cur->m_address, strlen(cur->m_address), (us_trie_node_flags_t)item); item++; cur++; } r = true; r &= us_test_trie_schema_dispatch(&trie->m_base, "/device/name", "", 0, 0); r &= us_test_trie_schema_dispatch(&trie->m_base, "/device/system", "s", (void *)"new system name", 0); r &= us_test_trie_schema_dispatch(&trie->m_base, "/device/name", "s", (void *)"new device name", 0); r &= us_test_trie_schema_dispatch(&trie->m_base, "/device/system", "", 0, 0); trie->destroy(trie); } return r; }
int us_test_packet_queue_main(int argc, const char **argv) { int r = 1; if (us_testutil_start(20480, 20480, argc, argv)) { #if US_ENABLE_LOGGING us_logger_printer_start(us_testutil_printer_stdout, us_testutil_printer_stderr); #endif us_log_set_level(US_LOG_LEVEL_DEBUG); us_log_info("Hello world from %s compiled on %s", __FILE__, __DATE__); if (us_test_packet_queue(us_testutil_sys_allocator)) r = 0; us_log_info("Finishing us_test_packet_queue"); us_logger_finish(); us_testutil_finish(); } return r; }
static bool us_test_osc_dispatch_test1_setup( us_allocator_t *allocator, us_osc_dispatch_t *osc_dispatch ) { bool r = false; if ( us_osc_dispatch_init( osc_dispatch, allocator, 1024, 8192 ) ) { char s[64]; int mt, ch; us_osc_dispatch_index_t index; us_osc_dispatch_index_init( &index ); r = true; for ( mt = 0; mt < 2 && r == true; ++mt ) { index.axis[0] = mt; for ( ch = 0; ch < 64 && r == true; ++ch ) { index.axis[1] = ch; sprintf( s, "/media/%s/%d", media_type[index.axis[0]], ch + 1 ); us_testutil_printer_stdout->printf( us_testutil_printer_stdout, "Adding address '%s'\n", s ); r &= us_osc_dispatch_add_table( osc_dispatch, s, us_test_osc_dispatch_media_table, &index ); } } us_log_info( "trie uses %d nodes", osc_dispatch->trie->m_base.m_num_nodes ); } if ( !r ) { osc_dispatch->destroy( osc_dispatch ); } return r; }
bool us_example_mudp_rx ( const char *multicast_address, const char *multicast_service, const char *interface ) { int fd; bool r = false; struct addrinfo *multicastgroup; multicastgroup = us_net_get_addrinfo ( multicast_address, multicast_service, SOCK_DGRAM, true ); { char multicastgroup_name[1024]; char multicastgroup_serv[256]; if ( us_net_get_nameinfo ( multicastgroup, multicastgroup_name, sizeof ( multicastgroup_name ) - 1, multicastgroup_serv, sizeof ( multicastgroup_serv ) - 1 ) ) { us_log_info ( "multicastgroup: %s port %s", multicastgroup_name, multicastgroup_serv ); } else { perror ( "getnameinfo:" ); } } fd = us_net_create_multicast_rx_udp_socket ( 0, multicastgroup, interface ); if ( fd > 0 ) { while ( 1 ) { struct sockaddr_storage remote_addr; socklen_t remote_addr_len = sizeof ( remote_addr ); char buf[2048]; int len; len = recvfrom ( fd, buf, sizeof ( buf ), 0, ( struct sockaddr * ) &remote_addr, &remote_addr_len ); if ( len > 0 ) { us_log_info ( "got packet %d bytes", len ); } else { perror ( "recvfrom:" ); break; } } } return r; }
int us_test_getopt_main( int argc, const char **argv ) { int r = 1; if ( us_testutil_start( 4096, 4096, argc, argv ) ) { #if US_ENABLE_LOGGING us_logger_printer_start( us_testutil_printer_stdout, us_testutil_printer_stderr ); #endif us_log_set_level( US_LOG_LEVEL_DEBUG ); us_log_info( "Hello world from %s compiled on %s", __FILE__, __DATE__ ); if ( us_test_getopt( argc, argv ) ) r = 0; us_log_info( "Finishing us_test_getopt" ); us_logger_finish(); us_testutil_finish(); } return r; }
int us_test_trie_main(int argc, const char **argv) { int r = 1; if (us_testutil_start(8192, 8192, argc, argv)) { #if US_ENABLE_LOGGING us_logger_printer_start(us_testutil_printer_stdout, us_testutil_printer_stderr); #endif us_log_set_level(US_LOG_LEVEL_DEBUG); us_log_info("Hello world from %s compiled on %s", __FILE__, __DATE__); if (us_test_trie_1() && us_test_trie_2()) r = 0; if (r != 0) us_log_error("Failed"); us_log_info("Finishing %s", argv[0]); us_logger_finish(); us_testutil_finish(); } return r; }
int us_test_allocator_main( int argc, const char **argv ) { int r = 1; if ( us_testutil_start( 2048, 2048, argc, argv ) ) { char *b; #if US_ENABLE_LOGGING us_logger_printer_start( us_testutil_printer_stdout, us_testutil_printer_stderr ); #endif us_log_set_level( US_LOG_LEVEL_DEBUG ); us_log_info( "Hello world from %s compiled on %s", __FILE__, __DATE__ ); b = (char *)us_testutil_sys_allocator->alloc( us_testutil_sys_allocator, 512, 1 ); us_log_debug( "result from alloc of 512 bytes: %p", b ); us_log_info( "Finishing us_test_allocator" ); us_logger_finish(); us_testutil_finish(); r = 0; } return r; }
static bool us_test_osc_dispatch_test1( void ) { bool r = false; us_osc_dispatch_t osc_dispatch; us_log_info( "us_test_osc_dispatch_test1 init" ); if ( us_test_osc_dispatch_test1_setup( us_testutil_sys_allocator, &osc_dispatch ) ) { r = us_test_osc_dispatch_test1_feed( us_testutil_session_allocator, &osc_dispatch ); osc_dispatch.destroy( &osc_dispatch ); } return r; }
static bool us_test_trie_1(void) { bool r = true; us_trie_dyn_t *trie; us_log_info("us_test_trie_1"); trie = us_trie_dyn_create(us_testutil_sys_allocator, 128, us_trie_basic_ignorer, us_trie_basic_ignorer, us_trie_basic_db_skip, us_trie_basic_comparator); if (trie) { const char *s; s = "/input/level/"; us_trie_add(&trie->m_base, (us_trie_node_value_t *)s, strlen(s), (us_trie_node_flags_t)1); s = "/output/level/"; us_trie_add(&trie->m_base, (us_trie_node_value_t *)s, strlen(s), (us_trie_node_flags_t)2); { us_trie_node_flags_t flags; int16_t match_len; us_trie_node_id_t match_item; s = "/output/level/"; if (us_trie_find(&trie->m_base, (us_trie_node_value_t *)s, strlen(s), &flags, &match_len, &match_item, 0, 0)) { us_log_info("found '%s' len %d flags %d", s, match_len, flags); } else { us_log_info("did not find '%s'", s); r = false; } s = "/input/level/"; if (us_trie_find(&trie->m_base, (us_trie_node_value_t *)s, strlen(s), &flags, &match_len, &match_item, 0, 0)) { us_log_info("found '%s' len %d flags %d", s, match_len, flags); } else { us_log_info("did not find '%s'", s); r = false; } } trie->destroy(trie); } return r; }
int us_test_osc_dispatch_main( int argc, const char **argv ) { bool r = true; r = us_testutil_start( 81920, 8192, argc, argv ); if ( r ) { #if US_ENABLE_LOGGING us_logger_printer_start( us_testutil_printer_stdout, us_testutil_printer_stderr ); #endif us_log_info( "Hello world from %s compiled on %s", __FILE__, __DATE__ ); r &= us_test_osc_dispatch_test1(); us_logger_finish(); us_testutil_finish(); } return r ? 0 : 1; }
void us_allocator_heap_report( us_allocator_heap_t *self ) { uint32_t free_chunks = 0; uint32_t used_chunks = 0; ssize_t largest_free = 0; ssize_t largest_used = 0; size_t free_mem = 0; size_t used_mem = 0; us_allocator_heap_block_t *cur = self->m_first; us_log_info( "us_allocator_heap_t dump" ); while ( cur != NULL ) { ssize_t sz = cur->m_size; us_log_info( "heap block %p : next=%p, prev=%p, size=%d", cur, cur->m_next, cur->m_prev, cur->m_size ); if ( sz < 0 ) { free_mem += -sz; ++free_chunks; if ( -sz > largest_free ) largest_free = -sz; } else { used_mem += sz; ++used_chunks; if ( sz > largest_used ) largest_used = sz; } cur = cur->m_next; } us_log_info( "size of largest free chunk: %d", largest_free ); us_log_info( "size of largest used chunk: %d ", largest_used ); us_log_info( "total free mem: %d ", free_mem ); us_log_info( "total used mem: %d", used_mem ); us_log_info( "free chunk count: %d", free_chunks ); us_log_info( "used chunk count: %d", used_chunks ); }
static bool us_tool_send_osc( const char *protocol, const char *src_host, const char *src_port, const char *dest_host, const char *dest_port, const char *osc_address, const char *osc_typetags, const char **osc_values ) { bool r=false; const char **v; const char *t=osc_typetags; us_allocator_t *allocator = us_testutil_sys_allocator; int sock_type=SOCK_DGRAM; struct addrinfo *src_addr; struct addrinfo *dest_addr; if ( strcmp( protocol, "udp" )==0 ) { sock_type = SOCK_DGRAM; } else if (strcmp( protocol, "tcp" )==0 || strcmp( protocol, "tcpslip" )==0 ) { sock_type = SOCK_STREAM; } else { us_stderr->printf( us_stderr, "unknown protocol '%s', use 'tcp', 'tcpslip' or 'udp'\n", protocol ); return false; } src_addr = us_net_get_addrinfo(src_host, src_port, sock_type, true); if ( !src_addr ) { us_stderr->printf( us_stderr, "unable to get src address for '[%s]:%s'\n", dest_host, dest_port ); return false; } dest_addr = us_net_get_addrinfo(dest_host, dest_port, sock_type, false); if ( !dest_addr ) { us_stderr->printf( us_stderr, "unable to get dest address for '[%s]:%s'\n", dest_host, dest_port ); freeaddrinfo(src_addr); return false; } us_buffer_t *buf = us_buffer_create(allocator, 4096); if ( buf ) { us_log_info( "Sending '%s' to '[%s]:%s' osc address '%s' types ',%s' ", protocol, dest_host, dest_port, osc_address, osc_typetags ); if ( osc_values ) { for ( v=osc_values; *v!=0 && t!=0; v++,t++ ) { us_log_info( "Type '%c' Value: '%s'", *t, *v ); } } r=us_tool_gen_flattened_osc( us_testutil_sys_allocator, buf, osc_address, osc_typetags, osc_values ); if ( r ) { us_buffer_print( buf, us_stdout ); if ( sock_type==SOCK_DGRAM ) { r=us_tool_send_osc_udp( src_addr, dest_addr, buf ); } else if ( sock_type == SOCK_STREAM ) { if ( strcmp(protocol, "tcpslip" )==0 ) { r=us_tool_send_osc_tcpslip( dest_addr, buf ); } else { r=us_tool_send_osc_tcp(dest_addr, buf); } } } buf->destroy( buf ); } freeaddrinfo(dest_addr); return r; }
static bool system_name_write(us_test_trie_schema_entry_t *US_UNUSED(self)) { us_log_debug("%s: ", __FUNCTION__); us_log_info("new system name: %s ", device_name); return true; }