Browse Source

Introduce command line parameters to handle showing nmsd messages. Default is on. Remove any NDEBUG handling, because that was overidden by distributions default build options. We want the users to report meaningful bugs

tags/v1.5.0
Nils 4 years ago
parent
commit
992a044efa
7 changed files with 69 additions and 66 deletions
  1. +31
    -31
      src/Endpoint.cpp
  2. +1
    -1
      src/Endpoint.hpp
  3. +2
    -0
      src/debug.cpp
  4. +9
    -12
      src/debug.h
  5. +3
    -3
      src/nsm-legacy-gui.cpp
  6. +10
    -10
      src/nsm-proxy.cpp
  7. +13
    -9
      src/nsmd.cpp

+ 31
- 31
src/Endpoint.cpp View File

@@ -94,7 +94,7 @@ namespace OSC
char *new_path;
asprintf( &new_path, "%s%s", _endpoint->name() ? _endpoint->name() : "", path );

DMESSAGE( "Renaming signal %s to %s", this->path(), new_path );
MESSAGE( "Renaming signal %s to %s", this->path(), new_path );

/* if ( _direction == Signal::Input ) */
/* { */
@@ -138,12 +138,12 @@ namespace OSC
}
/* else if ( direction() == Input ) */
/* { */
/* DMESSAGE( "Sending value feedback for signal %s...", path() ); */
/* MESSAGE( "Sending value feedback for signal %s...", path() ); */
/* for ( std::list<Signal*>::iterator i = _incoming.begin(); */
/* i != _incoming.end(); */
/* ++i ) */
/* { */
/* DMESSAGE( "Sending value feedback to %s %s %f", lo_address_get_url( (*i)->_peer->addr), (*i)->path() , f); */
/* MESSAGE( "Sending value feedback to %s %s %f", lo_address_get_url( (*i)->_peer->addr), (*i)->path() , f); */
/* _endpoint->send( (*i)->_peer->addr, */
/* (*i)->path(), */
/* f ); */
@@ -202,7 +202,7 @@ namespace OSC
int
Endpoint::init ( int proto, const char *port )
{
DMESSAGE( "Creating OSC server" );
MESSAGE( "Creating OSC server" );

_server = lo_server_new_with_proto( port, proto, error_handler );

@@ -315,7 +315,7 @@ namespace OSC
void
Endpoint::handle_hello ( const char *peer_name, const char *peer_url )
{
DMESSAGE( "Got hello from %s", peer_name );
MESSAGE( "Got hello from %s", peer_name );

Peer *p = find_peer_by_name( peer_name );

@@ -344,7 +344,7 @@ namespace OSC
/* scan it while we're at it */
p->_scanning = true;

DMESSAGE( "Scanning peer %s", peer_name );
MESSAGE( "Scanning peer %s", peer_name );

send( p->addr, "/signal/list" );
}
@@ -355,7 +355,7 @@ namespace OSC
}
else
{
DMESSAGE( "Not sending hello because we don't have a name yet!" );
MESSAGE( "Not sending hello because we don't have a name yet!" );
}
}

@@ -387,7 +387,7 @@ namespace OSC

if ( s->_direction == Signal::Input )
{
DMESSAGE( "Peer %s has disconnected from signal %s", our_name, their_name );
MESSAGE( "Peer %s has disconnected from signal %s", our_name, their_name );

ep->del_translation( their_name );

@@ -422,7 +422,7 @@ namespace OSC
return 0;
}

DMESSAGE( "Has requested signal connection %s |> %s", src_path, dst_s->path() );
MESSAGE( "Has requested signal connection %s |> %s", src_path, dst_s->path() );

ep->add_translation( src_path, dst_s->path() );

@@ -455,7 +455,7 @@ namespace OSC
return 0;
}

DMESSAGE( "Signal %s:%s was removed", o->_peer->name, o->path() );
MESSAGE( "Signal %s:%s was removed", o->_peer->name, o->path() );


if ( ep->_peer_signal_notification_callback )
@@ -501,7 +501,7 @@ namespace OSC

p->_signals.push_back( s );

DMESSAGE( "Peer %s has created signal %s (%s %f %f %f)", p->name,
MESSAGE( "Peer %s has created signal %s (%s %f %f %f)", p->name,
name, direction, min, max, default_value );

if ( ep->_peer_signal_notification_callback )
@@ -513,7 +513,7 @@ namespace OSC
int
Endpoint::osc_sig_renamed ( const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data )
{
DMESSAGE( "Got renamed message." );
MESSAGE( "Got renamed message." );

const char *old_name = &argv[0]->s;
const char *new_name = &argv[1]->s;
@@ -536,7 +536,7 @@ namespace OSC
return 0;
}

DMESSAGE( "Signal %s was renamed to %s", o->_path, new_name );
MESSAGE( "Signal %s was renamed to %s", o->_path, new_name );

ep->rename_translation_source( o->_path, new_name );

@@ -685,7 +685,7 @@ namespace OSC
{
ep->add_translation( path, ep->_learning_path );

DMESSAGE( "Learned translation \"%s\" -> \"%s\"", path, ep->_learning_path );
MESSAGE( "Learned translation \"%s\" -> \"%s\"", path, ep->_learning_path );

free(ep->_learning_path);
ep->_learning_path = NULL;
@@ -700,11 +700,11 @@ namespace OSC
{
const char *dpath = i->second.path.c_str();

// DMESSAGE( "Translating message \"%s\" to \"%s\"", path, dpath );
// MESSAGE( "Translating message \"%s\" to \"%s\"", path, dpath );

if ( !strcmp(types, "f" ))
{
// DMESSAGE( "recording value %f", argv[0]->f );
// MESSAGE( "recording value %f", argv[0]->f );
i->second.current_value = argv[0]->f;
}

@@ -741,7 +741,7 @@ namespace OSC
{
// OSC_DMSG();

DMESSAGE( "Listing signals." );
MESSAGE( "Listing signals." );

const char *prefix = NULL;

@@ -906,7 +906,7 @@ namespace OSC
if ( argc == 1 )
{
p->_scanning = false;
DMESSAGE( "Done scanning %s", p->name );
MESSAGE( "Done scanning %s", p->name );

if ( ep->_peer_scan_complete_callback )
ep->_peer_scan_complete_callback(ep->_peer_scan_complete_userdata);
@@ -918,7 +918,7 @@ namespace OSC
if ( s )
return 0;

DMESSAGE( "Peer %s has signal %s (%s)", p->name, &argv[1]->s, &argv[2]->s );
MESSAGE( "Peer %s has signal %s (%s)", p->name, &argv[1]->s, &argv[2]->s );

int dir = 0;

@@ -951,7 +951,7 @@ namespace OSC
Method *
Endpoint::add_method ( const char *path, const char *typespec, lo_method_handler handler, void *user_data, const char *argument_description )
{
// DMESSAGE( "Added OSC method %s (%s)", path, typespec );
// MESSAGE( "Added OSC method %s (%s)", path, typespec );

lo_server_add_method( _server, path, typespec, handler, user_data );

@@ -1013,7 +1013,7 @@ namespace OSC
void
Endpoint::del_method ( const char *path, const char *typespec )
{
// DMESSAGE( "Deleted OSC method %s (%s)", path, typespec );
// MESSAGE( "Deleted OSC method %s (%s)", path, typespec );

lo_server_del_method( _server, path, typespec );

@@ -1036,7 +1036,7 @@ namespace OSC
void
Endpoint::del_method ( Method *meth )
{
// DMESSAGE( "Deleted OSC method %s (%s)", path, typespec );
// MESSAGE( "Deleted OSC method %s (%s)", path, typespec );

lo_server_del_method( _server, meth->path(), meth->typespec() );

@@ -1048,7 +1048,7 @@ namespace OSC
void
Endpoint::del_signal ( Signal *o )
{
// DMESSAGE( "Deleted OSC method %s (%s)", path, typespec );
// MESSAGE( "Deleted OSC method %s (%s)", path, typespec );

lo_server_del_method( _server, o->path(), NULL );

@@ -1095,7 +1095,7 @@ namespace OSC
{
const char *spath = i->first.c_str();

// DMESSAGE( "Sending feedback to \"%s\": %f", spath, v );
// MESSAGE( "Sending feedback to \"%s\": %f", spath, v );

/* send to all peers */
for ( std::list<Peer*>::iterator p = _peers.begin();
@@ -1121,7 +1121,7 @@ namespace OSC
{
Peer *p = new Peer;

DMESSAGE( "Adding peer %s @ %s...", name, url );
MESSAGE( "Adding peer %s @ %s...", name, url );

p->name = strdup( name );
p->addr = lo_address_new_from_url( url );
@@ -1138,7 +1138,7 @@ namespace OSC

p->_scanning = true;

DMESSAGE( "Scanning peer %s", name );
MESSAGE( "Scanning peer %s", name );

send( p->addr, "/signal/list" );
}
@@ -1156,7 +1156,7 @@ namespace OSC
{
_thread.name( "OSC" );

DMESSAGE( "OSC Thread running" );
MESSAGE( "OSC Thread running" );

run();
}
@@ -1231,15 +1231,15 @@ namespace OSC
switch ( ov->type() )
{
case 'f':
// DMESSAGE( "Adding float %f", ((OSC_Float*)ov)->value() );
// MESSAGE( "Adding float %f", ((OSC_Float*)ov)->value() );
lo_message_add_float( m, ((OSC_Float*)ov)->value() );
break;
case 'i':
// DMESSAGE( "Adding int %i", ((OSC_Int*)ov)->value() );
// MESSAGE( "Adding int %i", ((OSC_Int*)ov)->value() );
lo_message_add_int32( m, ((OSC_Int*)ov)->value() );
break;
case 's':
// DMESSAGE( "Adding string %s", ((OSC_String*)ov)->value() );
// MESSAGE( "Adding string %s", ((OSC_String*)ov)->value() );
lo_message_add_string( m, ((OSC_String*)ov)->value() );
break;
default:
@@ -1248,7 +1248,7 @@ namespace OSC
}
}

// DMESSAGE( "Path: %s", path );
// MESSAGE( "Path: %s", path );

lo_bundle b = lo_bundle_new( LO_TT_IMMEDIATE );



+ 1
- 1
src/Endpoint.hpp View File

@@ -419,7 +419,7 @@ namespace OSC

/* helper macros for defining OSC handlers */
/* #define OSC_NAME( name ) osc_ ## name */
#define OSC_DMSG() DMESSAGE( "Got OSC message: %s", path );
#define OSC_DMSG() MESSAGE( "Got OSC message: %s", path );
// #define OSC_HANDLER( name ) static int OSC_NAME( name ) ( const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data )




+ 2
- 0
src/debug.cpp View File

@@ -28,6 +28,8 @@

extern char * program_invocation_short_name;

bool quietMessages = false;

void
warnf ( warning_t level,
const char *module,


+ 9
- 12
src/debug.h View File

@@ -68,6 +68,8 @@
*/




#ifndef _DEBUG_H
#define _DEBUG_H

@@ -83,6 +85,8 @@
#define __FUNCTION__ NULL
#endif

extern bool quietMessages;

typedef enum {
W_MESSAGE = 0,
W_WARNING,
@@ -95,20 +99,13 @@ warnf ( warning_t level,
const char *file,
const char *function, int line, const char *fmt, ... );

//We do not use NDEBUG anymore. Messages are a command line switch.
//Warnings, asserts and errors are always important.

#ifndef NDEBUG
#define DMESSAGE( fmt, args... ) warnf( W_MESSAGE, __MODULE__, __FILE__, __FUNCTION__, __LINE__, fmt, ## args )
#define DWARNING( fmt, args... ) warnf( W_WARNING, __MODULE__, __FILE__, __FUNCTION__, __LINE__, fmt, ## args )
#define ASSERT( pred, fmt, args... ) do { if ( ! (pred) ) { warnf( W_FATAL, __MODULE__, __FILE__, __FUNCTION__, __LINE__, fmt, ## args ); abort(); } } while ( 0 )
#else
#define DMESSAGE( fmt, args... )
#define DWARNING( fmt, args... )
#define ASSERT( pred, fmt, args... ) (void)(pred)
#endif

/* these are always defined */
#define MESSAGE( fmt, args... ) warnf( W_MESSAGE, __MODULE__, __FILE__, __FUNCTION__, __LINE__, fmt, ## args )
// #define MESSAGE( fmt, args... ) warnf( W_MESSAGE, __MODULE__, __FILE__, __FUNCTION__, __LINE__, fmt, ## args )
#define MESSAGE( fmt, args... ) do { if ( ! (quietMessages) ) { warnf( W_MESSAGE, __MODULE__, __FILE__, __FUNCTION__, __LINE__, fmt, ## args ); } } while ( 0 )
#define WARNING( fmt, args... ) warnf( W_WARNING, __MODULE__, __FILE__, __FUNCTION__, __LINE__, fmt, ## args )
#define FATAL( fmt, args... ) ( warnf( W_FATAL, __MODULE__, __FILE__, __FUNCTION__, __LINE__, fmt, ## args ), abort() )
#define ASSERT( pred, fmt, args... ) do { if ( ! (pred) ) { warnf( W_FATAL, __MODULE__, __FILE__, __FUNCTION__, __LINE__, fmt, ## args ); abort(); } } while ( 0 )

#endif

+ 3
- 3
src/nsm-legacy-gui.cpp View File

@@ -1071,7 +1071,7 @@ private:
/* need at least one argument... */
return 0;

DMESSAGE( "Relaying broadcast" );
MESSAGE( "Relaying broadcast" );

foreach_daemon( d )
{
@@ -1337,7 +1337,7 @@ main (int argc, char **argv )
{
case 'n':
{
DMESSAGE( "Adding %s to daemon list", optarg );
MESSAGE( "Adding %s to daemon list", optarg );
Daemon *d = new Daemon;

d->url = optarg;
@@ -1412,7 +1412,7 @@ main (int argc, char **argv )

for ( ; optind < argc; i++, optind++ )
{
DMESSAGE( "Passing argument: %s", argv[optind] );
MESSAGE( "Passing argument: %s", argv[optind] );
args[i] = argv[optind];
}



+ 10
- 10
src/nsm-proxy.cpp View File

@@ -202,7 +202,7 @@ public:

void save ( void )
{
DMESSAGE( "Sending process save signal" );
MESSAGE( "Sending process save signal" );
if ( _pid )
::kill( _pid, _save_signal );
}
@@ -261,7 +261,7 @@ public:
while ( 2 == fscanf( fp, "%m[^\n]\n\t%m[^\n]\n", &name, &value ) )
{

DMESSAGE( "%s=%s", name, value );
MESSAGE( "%s=%s", name, value );

if ( !strcmp( name, "executable" ) )
_executable = value;
@@ -301,7 +301,7 @@ public:

void update ( lo_address to )
{
DMESSAGE( "Sending update" );
MESSAGE( "Sending update" );

lo_send_from( to, losrv, LO_TT_IMMEDIATE, "/nsm/proxy/save_signal", "i", _save_signal );
lo_send_from( to, losrv, LO_TT_IMMEDIATE, "/nsm/proxy/label", "s", _label ? _label : "" );
@@ -603,12 +603,12 @@ signal_handler ( int x )
void
set_traps ( void )
{
signal( SIGHUP, signal_handler );
signal( SIGINT, signal_handler );
// signal( SIGQUIT, signal_handler );
// signal( SIGSEGV, signal_handler );
// signal( SIGPIPE, signal_handler );
signal( SIGTERM, signal_handler );
signal( SIGHUP, signal_handler );
signal( SIGINT, signal_handler );
// signal( SIGQUIT, signal_handler );
// signal( SIGSEGV, signal_handler );
// signal( SIGPIPE, signal_handler );
signal( SIGTERM, signal_handler );
}


@@ -645,7 +645,7 @@ die ( void )
{
if ( gui_pid )
{
DMESSAGE( "Killing GUI" );
MESSAGE( "Killing GUI" );

kill( gui_pid, SIGTERM );
}


+ 13
- 9
src/nsmd.cpp View File

@@ -282,7 +282,6 @@ static std::list< Client* > client;

/* helper macros for defining OSC handlers */
#define OSC_NAME( name ) osc_ ## name
// #define OSCDMSG() DMESSAGE( "Got OSC message: %s", path );
#define OSC_HANDLER( name ) static int OSC_NAME( name ) ( const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data )

static char *session_path = NULL;
@@ -1467,7 +1466,7 @@ load_session_file ( const char * path )
{ //This is not the case when --load-session was used. GUI announce will come later.

//Send two parameters to signal that the session was loaded: simple session-name, relative session path below session root
DMESSAGE( "Informing GUI about running session name: %s with relative path %s", session_name, session_path + strlen( session_root ) );
MESSAGE( "Informing GUI about running session name: %s with relative path %s", session_name, session_path + strlen( session_root ) );
osc_server->send( gui_addr, "/nsm/gui/session/name", session_name, session_path + strlen( session_root ));
}

@@ -1663,7 +1662,7 @@ OSC_HANDLER( new )
osc_server->send( gui_addr, "/nsm/gui/session/session", &argv[0]->s );

//Send two parameters to signal that the session was loaded: simple session-name, relative session path below session root
DMESSAGE( "Informing GUI about running session name: %s with relative path %s", session_name, session_path + strlen( session_root ) );
MESSAGE( "Informing GUI about running session name: %s with relative path %s", session_name, session_path + strlen( session_root ) );
osc_server->send( gui_addr, "/nsm/gui/session/name", session_name, session_path + strlen( session_root ));
}

@@ -2306,7 +2305,7 @@ announce_gui( const char *url, bool is_reply )
//No session_path without session_name. We only need to test for session_name.
if ( !session_name || session_name[0] == '\0' )
{
DMESSAGE( "Informing GUI that no session is running by sending two empty strings" );
MESSAGE( "Informing GUI that no session is running by sending two empty strings" );
osc_server->send( gui_addr, "/nsm/gui/session/name", "", "" ); //Empty string = no current session
}
else
@@ -2331,11 +2330,11 @@ announce_gui( const char *url, bool is_reply )
osc_server->send( gui_addr, "/nsm/gui/client/new", c->client_id, c->name ); // upgrade to pretty-name
}

DMESSAGE( "Informing GUI about running session name: %s with relative path %s", session_name, session_path + strlen( session_root ) );
MESSAGE( "Informing GUI about running session name: %s with relative path %s", session_name, session_path + strlen( session_root ) );
osc_server->send( gui_addr, "/nsm/gui/session/name", session_name, session_path + strlen( session_root ));
}

DMESSAGE( "Registration with GUI complete\n" );
MESSAGE( "Registration with GUI complete\n" );
}


@@ -2410,6 +2409,7 @@ int main(int argc, char *argv[])
{ "help", no_argument, 0, 'h' },
{ "version", no_argument, 0, 'v' },
{ "load-session", required_argument, 0, 'l'},
{ "quiet", no_argument, 0, 'q'}, //supresses all normal MESSAGE except WARNING and FATAL
{ 0, 0, 0, 0 }
};

@@ -2436,21 +2436,24 @@ int main(int argc, char *argv[])
break;
}
case 'p':
DMESSAGE( "Using OSC port %s", optarg );
MESSAGE( "Using OSC port %s", optarg );
osc_port = optarg;
break;
case 'g':
DMESSAGE( "Going to connect to GUI at: %s", optarg );
MESSAGE( "Going to connect to GUI at: %s", optarg );
gui_url = optarg;
break;
case 'l':
DMESSAGE( "Loading existing session file %s", optarg);
MESSAGE( "Loading existing session file %s", optarg);
load_session = optarg;
break;
case 'v':
printf( "%s " VERSION_STRING "\n", argv[0] );
exit(0);
break;
case 'q':
quietMessages = true; //from debug.h
break;
case 'h':
//Print usage message according to POSIX.1-2017
const char *usage =
@@ -2468,6 +2471,7 @@ int main(int argc, char *argv[])
" --load-session name Load existing session [Example: \"My Song\"].\n"
" --gui-url url Connect to running legacy-gui [Example: osc.udp://mycomputer.localdomain:38356/].\n"
" --detach Detach from console.\n"
" --quiet Suppress messages except warnings and errors.\n"
"\n\n"
"nsmd can be run headless with existing sessions. To create new ones it is recommended to use a GUI\n"
"such as nsm-legacy-gui (included) or Agordejo (separate package)\n"


Loading…
Cancel
Save