20 #if !defined(WIN32) || defined(__CYGWIN__)    22 #ifdef PTHREAD_WIN32        // Added by JE - 13-02-2010    23 #include <ptw32/pthread.h>      24 #endif                      // consistency - even though we won't need it !    26 #include "JackConstants.h"    27 #include "JackChannel.h"    28 #include "JackLibGlobals.h"    29 #include "JackServerLaunch.h"    30 #include "JackPlatformPlug.h"    36 #if defined(USE_LIBDBUS_AUTOLAUNCH)    38 #include <dbus/dbus.h>    40 static int start_server_dbus(
const char* server_name)
    47     dbus_error_init(&err);
    50     conn = dbus_bus_get(DBUS_BUS_SESSION, &err);
    51     if (dbus_error_is_set(&err)) {
    52         fprintf(stderr, 
"Connection Error (%s)\n", err.message);
    53         dbus_error_free(&err);
    59     msg = dbus_message_new_method_call(
    60         "org.jackaudio.service",     
    61         "/org/jackaudio/Controller", 
    62         "org.jackaudio.JackControl", 
    65         fprintf(stderr, 
"Message Null\n");
    70     if (!dbus_connection_send(conn, msg, NULL))
    72         fprintf(stderr, 
"Out Of Memory!\n");
    76     dbus_message_unref(msg);
    77     dbus_connection_flush(conn);
    78     dbus_error_free(&err);
    83 #elif defined(USE_CLASSIC_AUTOLAUNCH)    86 static void start_server_classic_aux(
const char* server_name)
   100     snprintf(filename, 255, 
"%s/.jackdrc", getenv(
"HOME"));
   101     fp = fopen(filename, 
"r");
   104         fp = fopen(
"/etc/jackdrc", 
"r");
   108         fp = fopen(
"/etc/jackd.conf", 
"r");
   113         res = fscanf(fp, 
"%s", buffer);
   114         while (res != 0 && res != EOF) {
   115             strcat(arguments, buffer);
   116             strcat(arguments, 
" ");
   117             res = fscanf(fp, 
"%s", buffer);
   119         if (strlen(arguments) > 0) {
   126         command = (
char*)(JACK_LOCATION 
"/jackd");
   127         strncpy(arguments, JACK_LOCATION 
"/jackd -T -d " JACK_DEFAULT_DRIVER, 255);
   129         result = strcspn(arguments, 
" ");
   130         command = (
char*)malloc(result + 1);
   131         strncpy(command, arguments, result);
   132         command[result] = 
'\0';
   135     argv = (
char**)malloc(255);
   140             argv[i] = (
char*)malloc(strlen (
"-T") + 1);
   141             strcpy (argv[i++], 
"-T");
   143                 size_t optlen = strlen(
"-n");
   144                 char* buf = (
char*)malloc(optlen + strlen(server_name) + 1);
   146                 strcpy(buf + optlen, server_name);
   152         while (pos < strlen(arguments) && arguments[pos] && arguments[pos] == 
' ') {
   156         if (pos >= strlen(arguments)) {
   160         if (arguments[pos] == 
'\"') {
   162             result = strcspn(arguments + pos, 
"\"");
   164             result = strcspn(arguments + pos, 
" ");
   171         argv[i] = (
char*)malloc(result + 1);
   172         strncpy(argv[i], arguments + pos, result);
   173         argv[i][result] = 
'\0';
   182     execv(command, argv);
   186     fprintf(stderr, 
"exec of JACK server (command = \"%s\") failed: %s\n", command, strerror(errno));
   189 static int start_server_classic(
const char* server_name)
   202     pid_t first_child_pid;
   204     first_child_pid = fork();
   205     switch (first_child_pid) {
   209                     start_server_classic_aux(server_name);
   219     waitpid(first_child_pid, &status, 0);
   227 static int start_server(
const char* server_name, jack_options_t options)
   229     if ((options & JackNoStartServer) || getenv(
"JACK_NO_START_SERVER")) {
   233 #if defined(USE_LIBDBUS_AUTOLAUNCH)   234     return start_server_dbus(server_name);
   235 #elif defined(USE_CLASSIC_AUTOLAUNCH)   236     return start_server_classic(server_name);
   238     fprintf(stderr, 
"Automatic start of JACK server is disabled at configure time\n");
   243 static int server_connect(
char* server_name)
   246     int res = channel.ServerCheck(server_name);
   253 int try_start_server(
jack_varargs_t* va, jack_options_t options, jack_status_t* status)
   255     if (server_connect(va->server_name) < 0) {
   257         if (start_server(va->server_name, options)) {
   258             int my_status1 = *status | JackFailure | JackServerFailed;
   259             *status = (jack_status_t)my_status1;
   266                 int my_status1 = *status | JackFailure | JackServerFailed;
   267                 *status = (jack_status_t)my_status1;
   270         } 
while (server_connect(va->server_name) < 0);
   271         int my_status1 = *status | JackServerStarted;
   272         *status = (jack_status_t)my_status1;
   278 #endif  // !defined(WIN32) || defined(__CYGWIN__) 
JackClientChannel using sockets.