Changeset 4948:29b5b41a1ca2 in roaraudio for roard/req.c


Ignore:
Timestamp:
05/10/11 01:41:14 (13 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

a first (not yet fully working) patch for non-stream execs (see #32)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • roard/req.c

    r4923 r4948  
    343343 
    344344int req_on_exec_stream (int client, struct roar_message * mes, char ** data, uint32_t flags[2]) { 
     345 struct roar_message    m; 
     346 struct roar_client   * c; 
     347 struct roar_connection con; 
     348 int16_t * d = (int16_t*)mes->data; 
     349 int sock; 
     350 int i; 
    345351 int r; 
    346352 
     
    348354 
    349355 
    350  if ( streams_is_ready(mes->stream) ) { 
    351   flags[1] |= COMMAND_FLAG_OUT_CLOSECON; 
    352  } else { 
    353   if ( (r = client_stream_exec(client, mes->stream)) == -1 ) 
    354    return -1; 
    355  } 
    356  
    357  ROAR_DBG("req_on_exec_stream(client=%i, mes={stream=%i,...},...): returning (OK)...", client, mes->stream); 
    358  mes->cmd     = ROAR_CMD_OK; 
    359  mes->datalen = 0; 
     356 if ( mes->stream != -1 ) { 
     357  if ( streams_is_ready(mes->stream) ) { 
     358   flags[1] |= COMMAND_FLAG_OUT_CLOSECON; 
     359  } else { 
     360   if ( (r = client_stream_exec(client, mes->stream)) == -1 ) 
     361    return -1; 
     362  } 
     363 
     364  ROAR_DBG("req_on_exec_stream(client=%i, mes={stream=%i,...},...): returning (OK)...", client, mes->stream); 
     365  mes->cmd     = ROAR_CMD_OK; 
     366  mes->datalen = 0; 
     367  return 0; 
     368 } 
     369 
     370 if ( mes->datalen < 4*2 ) 
     371  return -1; 
     372 
     373 for (i = 0; i < 4; i++) { 
     374  d[i] = ROAR_NET2HOST16(d[i]); 
     375 } 
     376 
     377 if ( d[0] != 0 ) // version 
     378  return -1; 
     379 
     380 if ( d[1] != 0 ) // flags 
     381  return -1; 
     382 
     383 memset(&m, 0, sizeof(m)); 
     384 
     385 m.cmd = ROAR_CMD_OK; 
     386 
     387 flags[1] |= COMMAND_FLAG_OUT_NOSEND; 
     388 
     389 c = ROAR_CLIENT(g_clients[client]); 
     390 
     391 sock = c->fh; 
     392 
     393 if ( sock == -1 ) 
     394  return -1; 
     395 
     396 roar_connect_fh(&con, sock); 
     397 
     398 roar_send_message(&con, &m, NULL); 
     399 
     400 clients_set_fh(client, -1); 
     401 clients_delete(client); 
     402 
     403 clients_new_from_fh(sock, d[2], d[3], 1); 
    360404 
    361405 return 0; 
Note: See TracChangeset for help on using the changeset viewer.