Changeset 4716:617c3db2d14b in roaraudio for plugins/roard
- Timestamp:
- 01/09/11 18:44:03 (13 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
plugins/roard/protocol-gopher.c
r4715 r4716 41 41 static int scb_streams (int client, struct roar_vio_calls * vio, char * selector, char ** text, struct item * sitem); 42 42 static int scb_client_info(int client, struct roar_vio_calls * vio, char * selector, char ** text, struct item * sitem); 43 static int scb_stream_info(int client, struct roar_vio_calls * vio, char * selector, char ** text, struct item * sitem); 43 44 44 45 static struct roar_gopher_menu_item g_gopher_root_menu[] = { … … 73 74 {.selector = "/clients/", .type = _DIR, .cb = scb_clients}, 74 75 {.selector = "/streams/", .type = _DIR, .cb = scb_streams}, 75 {.selector = "/clients/*/", .type = _DIR, .cb = scb_client_info} 76 {.selector = "/clients/*/", .type = _DIR, .cb = scb_client_info}, 77 {.selector = "/streams/*/", .type = _DIR, .cb = scb_stream_info} 76 78 }; 77 79 … … 254 256 255 257 static int scb_client_info(int client, struct roar_vio_calls * vio, char * selector, char ** text, struct item * sitem) { 256 #define _MAX_ITEMS 8258 #define _MAX_ITEMS (16 + ROAR_CLIENTS_MAX_STREAMS_PER_CLIENT) 257 259 struct roar_gopher_menu_item items[_MAX_ITEMS]; 258 260 struct roar_gopher_menu menu = {.flags = 0, .items = items, .items_len = 0}; … … 315 317 } 316 318 } 319 320 ret = send_menu(client, &menu, vio); 321 322 for (i = 0; i < menu.items_len; i++) { 323 if ( items[i].name != NULL ) 324 roar_mm_free((void*)items[i].name); 325 if ( items[i].selector != NULL ) 326 roar_mm_free((void*)items[i].selector); 327 } 328 329 #undef _MAX_ITEMS 330 return ret; 331 } 332 333 static int scb_stream_info(int client, struct roar_vio_calls * vio, char * selector, char ** text, struct item * sitem) { 334 #define _MAX_ITEMS 12 335 struct roar_gopher_menu_item items[_MAX_ITEMS]; 336 struct roar_gopher_menu menu = {.flags = 0, .items = items, .items_len = 0}; 337 struct roar_gopher_menu_item * item; 338 struct roar_stream_server * ss; 339 struct roar_stream * s; 340 size_t i; 341 int ret; 342 ssize_t toks; 343 char * tok; 344 int id; 345 346 memset(items, 0, sizeof(items)); 347 348 toks = strseltok(sitem->selector, selector, &tok, 1); 349 if ( toks == -1 ) 350 return -1; 351 352 id = atoi(tok); 353 354 if ( streams_get(id, &ss) == -1 ) 355 return -1; 356 357 s = ROAR_STREAM(ss); 358 359 360 item = &(items[menu.items_len++]); 361 item->type = _INFO; 362 if ( ss->name != NULL && ss->name[0] != 0 ) { 363 item->name = _aprintf(64, "Stream %i: %s", id, ss->name); 364 } else { 365 item->name = _aprintf(64, "Stream %i", id); 366 } 367 368 item = &(items[menu.items_len++]); 369 item->type = _INFO; 370 item->name = _aprintf(64, "Stream state: %s", roar_streamstate2str(ss->state)); 371 372 item = &(items[menu.items_len++]); 373 item->type = _INFO; 374 item->name = _aprintf(64, "Stream direction: %s", roar_dir2str(s->dir)); 375 376 item = &(items[menu.items_len++]); 377 item->type = _INFO; 378 item->name = _aprintf(128, "Signal info: rate:%iHz bits:%i channels:%i codec:%s", 379 s->info.rate, s->info.bits, s->info.channels, roar_codec2str(s->info.codec)); 380 381 if ( ss->codec_orgi != -1 && ss->codec_orgi != s->info.codec ) { 382 item = &(items[menu.items_len++]); 383 item->type = _INFO; 384 item->name = _aprintf(64, "Streamed codec: %s", roar_codec2str(ss->codec_orgi)); 385 } 386 387 if ( ss->role != -1 ) { 388 item = &(items[menu.items_len++]); 389 item->type = _INFO; 390 item->name = _aprintf(64, "Stream role: %s", roar_role2str(ss->role)); 391 } 392 393 item = &(items[menu.items_len++]); 394 item->type = _DIR; 395 item->name = _aprintf(64, "Client: %i", ss->client); 396 item->selector = _aprintf(64, "/clients/%i/", ss->client); 317 397 318 398 ret = send_menu(client, &menu, vio);
Note: See TracChangeset
for help on using the changeset viewer.