Browse Source

remove the JackSelfConnectMode enum type

It was introduced before the parameter was actually exposed.
The parameter is exposed through a char type in both jackd and
jackdbus, thus a mappnig was required.

This changeset removes the enum and makes the code simpler
at the expense of not allowing arbitrary chars as values.
As it is exposed and used in sessions, it is not arbitrary anyway.
tags/v1.9.10
Nedko Arnaudov 11 years ago
parent
commit
c8cac65cad
10 changed files with 40 additions and 94 deletions
  1. +1
    -1
      common/JackConstants.h
  2. +2
    -23
      common/JackControlAPI.cpp
  3. +30
    -53
      common/JackEngine.cpp
  4. +2
    -2
      common/JackEngine.h
  5. +1
    -1
      common/JackLockedEngine.h
  6. +1
    -1
      common/JackServer.cpp
  7. +1
    -1
      common/JackServer.h
  8. +1
    -1
      common/JackServerGlobals.cpp
  9. +1
    -1
      common/JackServerGlobals.h
  10. +0
    -10
      common/JackTypes.h

+ 1
- 1
common/JackConstants.h View File

@@ -84,6 +84,6 @@
#define EMPTY 0xFFFD
#define FREE 0xFFFC

#define JACK_DEFAULT_SELF_CONNECT_MODE JackSelfConnectAllow
#define JACK_DEFAULT_SELF_CONNECT_MODE ' ' /* allow all requests */

#endif

+ 2
- 23
common/JackControlAPI.cpp View File

@@ -47,6 +47,7 @@

using namespace Jack;

/* JackEngine::CheckPortsConnect() has some assumptions about values of these */
#define SELF_CONNECT_MODE_ALLOW_CHAR ' '
#define SELF_CONNECT_MODE_FAIL_EXTERNAL_ONLY_CHAR 'E'
#define SELF_CONNECT_MODE_IGNORE_EXTERNAL_ONLY_CHAR 'e'
@@ -1000,7 +1001,6 @@ jackctl_server_open(
jackctl_server *server_ptr,
jackctl_driver *driver_ptr)
{
JackSelfConnectMode self_connect_mode;
JSList * paramlist = NULL;

try {
@@ -1034,27 +1034,6 @@ jackctl_server_open(
server_ptr->client_timeout.i = 500; /* 0.5 sec; usable when non realtime. */
}

switch (server_ptr->self_connect_mode.c)
{
case SELF_CONNECT_MODE_ALLOW_CHAR:
self_connect_mode = JackSelfConnectAllow;
break;
case SELF_CONNECT_MODE_FAIL_EXTERNAL_ONLY_CHAR:
self_connect_mode = JackSelfConnectFailExternalOnly;
break;
case SELF_CONNECT_MODE_IGNORE_EXTERNAL_ONLY_CHAR:
self_connect_mode = JackSelfConnectIgnoreExternalOnly;
break;
case SELF_CONNECT_MODE_FAIL_ALL_CHAR:
self_connect_mode = JackSelfConnectFailAll;
break;
case SELF_CONNECT_MODE_IGNORE_ALL_CHAR:
self_connect_mode = JackSelfConnectIgnoreAll;
break;
default:
self_connect_mode = JACK_DEFAULT_SELF_CONNECT_MODE;
}

/* check port max value before allocating server */
if (server_ptr->port_max.ui > PORT_NUM_MAX) {
jack_error("Jack server started with too much ports %d (when port max can be %d)", server_ptr->port_max.ui, PORT_NUM_MAX);
@@ -1071,7 +1050,7 @@ jackctl_server_open(
server_ptr->port_max.ui,
server_ptr->verbose.b,
(jack_timer_type_t)server_ptr->clock_source.ui,
self_connect_mode,
server_ptr->self_connect_mode.c,
server_ptr->name.str);
if (server_ptr->engine == NULL)
{


+ 30
- 53
common/JackEngine.cpp View File

@@ -21,6 +21,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#include <fstream>
#include <set>
#include <assert.h>
#include <ctype.h>

#include "JackSystemDeps.h"
#include "JackLockedEngine.h"
@@ -39,7 +40,7 @@ namespace Jack
JackEngine::JackEngine(JackGraphManager* manager,
JackSynchro* table,
JackEngineControl* control,
JackSelfConnectMode self_connect_mode)
char self_connect_mode)
: JackLockAble(control->fServerName),
fSignal(control->fServerName)
{
@@ -892,66 +893,42 @@ int JackEngine::PortUnRegister(int refnum, jack_port_id_t port_index)
// TODO: make this work with multiple clients per app
int JackEngine::CheckPortsConnect(int refnum, jack_port_id_t src, jack_port_id_t dst)
{
if (fSelfConnectMode == ' ') return 1;

JackPort* src_port = fGraphManager->GetPort(src);
JackPort* dst_port = fGraphManager->GetPort(dst);

jack_log("JackEngine::CheckPortsConnect(ref = %d, src = %d, dst = %d)", refnum, src_port->GetRefNum(), dst_port->GetRefNum());

//jack_log("%s -> %s", src_port->GetName(), dst_port->GetName());
//jack_log("mode = '%c'", fSelfConnectMode);

int src_self = src_port->GetRefNum() == refnum ? 1 : 0;
int dst_self = dst_port->GetRefNum() == refnum ? 1 : 0;

jack_log("src_self is %s", src_self ? "true" : "false");
jack_log("dst_self is %s", dst_self ? "true" : "false");

// 0 means client is connecting other client ports (i.e. control app patchbay functionality)
// 1 means client is connecting its own port to port of other client (i.e. self hooking into system app)
// 2 means client is connecting its own ports (i.e. for app internal functionality)
// TODO: Make this check an engine option and more tweakable (return error or success)
// MAYBE: make the engine option changable on the fly and expose it through client or control API

switch (fSelfConnectMode)
{
case JackSelfConnectFailExternalOnly:
if (src_self + dst_self == 1)
{
jack_info("rejecting port self connect request to external port (%s -> %s)", src_port->GetName(), dst_port->GetName());
return -1;
}

return 1;

case JackSelfConnectIgnoreExternalOnly:
if (src_self + dst_self == 1)
{
jack_info("ignoring port self connect request to external port (%s -> %s)", src_port->GetName(), dst_port->GetName());
return 0;
}

return 1;

case JackSelfConnectFailAll:
if (src_self + dst_self != 0)
{
jack_info("rejecting port self connect request (%s -> %s)", src_port->GetName(), dst_port->GetName());
return -1;
}

return 1;

case JackSelfConnectIgnoreAll:
if (src_self + dst_self != 0)
{
jack_info("ignoring port self connect request (%s -> %s)", src_port->GetName(), dst_port->GetName());
return 0;
}

return 1;

case JackSelfConnectAllow: // fix warning
return 1;
}

return 1;
//jack_log("src_self is %s", src_self ? "true" : "false");
//jack_log("dst_self is %s", dst_self ? "true" : "false");

// 0 means client is connecting other client ports (control app patchbay functionality)
// 1 means client is connecting its own port to port of other client (e.g. self connecting into "system" client)
// 2 means client is connecting its own ports (for app internal functionality)
int sum = src_self + dst_self;
//jack_log("sum = %d", sum);
if (sum == 0) return 1;
char lmode = tolower(fSelfConnectMode);
//jack_log("lmode = '%c'", lmode);
if (sum == 2 && lmode == 'e') return 1;
bool fail = lmode != fSelfConnectMode; // fail modes are upper case
//jack_log("fail = %d", (int)fail);

jack_info(
"%s port self connect request%s (%s -> %s)",
fail ? "rejecting" : "ignoring",
sum == 1 ? " to external port" : "",
src_port->GetName(),
dst_port->GetName());

return fail ? -1 : 0;
}

int JackEngine::PortConnect(int refnum, const char* src, const char* dst)


+ 2
- 2
common/JackEngine.h View File

@@ -49,7 +49,7 @@ class SERVER_EXPORT JackEngine : public JackLockAble

JackGraphManager* fGraphManager;
JackEngineControl* fEngineControl;
JackSelfConnectMode fSelfConnectMode;
char fSelfConnectMode;
JackClientInterface* fClientTable[CLIENT_NUM];
JackSynchro* fSynchroTable;
JackServerNotifyChannel fChannel; /*! To communicate between the RT thread and server */
@@ -99,7 +99,7 @@ class SERVER_EXPORT JackEngine : public JackLockAble

public:

JackEngine(JackGraphManager* manager, JackSynchro* table, JackEngineControl* controler, JackSelfConnectMode self_connect_mode);
JackEngine(JackGraphManager* manager, JackSynchro* table, JackEngineControl* controler, char self_connect_mode);
~JackEngine();

int Open();


+ 1
- 1
common/JackLockedEngine.h View File

@@ -83,7 +83,7 @@ class SERVER_EXPORT JackLockedEngine

public:

JackLockedEngine(JackGraphManager* manager, JackSynchro* table, JackEngineControl* controler, JackSelfConnectMode self_connect_mode):
JackLockedEngine(JackGraphManager* manager, JackSynchro* table, JackEngineControl* controler, char self_connect_mode):
fEngine(manager, table, controler, self_connect_mode)
{}
~JackLockedEngine()


+ 1
- 1
common/JackServer.cpp View File

@@ -40,7 +40,7 @@ namespace Jack
//----------------
// Server control
//----------------
JackServer::JackServer(bool sync, bool temporary, int timeout, bool rt, int priority, int port_max, bool verbose, jack_timer_type_t clock, JackSelfConnectMode self_connect_mode, const char* server_name)
JackServer::JackServer(bool sync, bool temporary, int timeout, bool rt, int priority, int port_max, bool verbose, jack_timer_type_t clock, char self_connect_mode, const char* server_name)
{
if (rt) {
jack_info("JACK server starting in realtime mode with priority %ld", priority);


+ 1
- 1
common/JackServer.h View File

@@ -64,7 +64,7 @@ class SERVER_EXPORT JackServer

public:

JackServer(bool sync, bool temporary, int timeout, bool rt, int priority, int port_max, bool verbose, jack_timer_type_t clock, JackSelfConnectMode self_connect_mode, const char* server_name);
JackServer(bool sync, bool temporary, int timeout, bool rt, int priority, int port_max, bool verbose, jack_timer_type_t clock, char self_connect_mode, const char* server_name);
~JackServer();

// Server control


+ 1
- 1
common/JackServerGlobals.cpp View File

@@ -48,7 +48,7 @@ int JackServerGlobals::Start(const char* server_name,
int port_max,
int verbose,
jack_timer_type_t clock,
JackSelfConnectMode self_connect_mode)
char self_connect_mode)
{
jack_log("Jackdmp: sync = %ld timeout = %ld rt = %ld priority = %ld verbose = %ld ", sync, time_out_ms, rt, priority, verbose);
new JackServer(sync, temporary, time_out_ms, rt, priority, port_max, verbose, clock, self_connect_mode, server_name); // Will setup fInstance and fUserCount globals


+ 1
- 1
common/JackServerGlobals.h View File

@@ -61,7 +61,7 @@ struct SERVER_EXPORT JackServerGlobals
int port_max,
int verbose,
jack_timer_type_t clock,
JackSelfConnectMode self_connect_mode);
char self_connect_mode);
static void Stop();
static void Delete();
};


+ 0
- 10
common/JackTypes.h View File

@@ -50,14 +50,4 @@ typedef enum {
Finished,
} jack_client_state_t;


enum JackSelfConnectMode
{
JackSelfConnectAllow,
JackSelfConnectFailExternalOnly,
JackSelfConnectIgnoreExternalOnly,
JackSelfConnectFailAll,
JackSelfConnectIgnoreAll,
};

#endif

Loading…
Cancel
Save