Changeset 5741:edecee88ed39 in roaraudio
- Timestamp:
- 11/09/12 03:09:00 (11 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
plugins/roard/protocol-gopher.c
r5740 r5741 26 26 #include <roard/include/roard.h> 27 27 28 #ifndef DISTRIBUTION_VERSION_STRING29 #define DISTRIBUTION_VERSION_STRING ""30 #endif31 #ifndef PACKAGE_VERSION32 #define PACKAGE_VERSION ""33 #endif34 #ifndef DEVICE_VENDOR_STRING35 #define DEVICE_VENDOR_STRING ""36 #endif37 38 28 #ifndef ROAR_WITHOUT_DCOMP_EMUL_GOPHER 39 29 #include <roaraudio/proto_gopher.h> … … 46 36 struct item; 47 37 48 static int scb_status_txt (int client, struct roar_vio_calls * vio, char * selector, char ** text, struct item * sitem );49 static int scb_test (int client, struct roar_vio_calls * vio, char * selector, char ** text, struct item * sitem );50 static int scb_clients (int client, struct roar_vio_calls * vio, char * selector, char ** text, struct item * sitem );51 static int scb_streams (int client, struct roar_vio_calls * vio, char * selector, char ** text, struct item * sitem );52 static int scb_client_info(int client, struct roar_vio_calls * vio, char * selector, char ** text, struct item * sitem );53 static int scb_stream_info(int client, struct roar_vio_calls * vio, char * selector, char ** text, struct item * sitem );54 static int scb_listen_menu(int client, struct roar_vio_calls * vio, char * selector, char ** text, struct item * sitem );55 static int scb_listen (int client, struct roar_vio_calls * vio, char * selector, char ** text, struct item * sitem );38 static int scb_status_txt (int client, struct roar_vio_calls * vio, char * selector, char ** text, struct item * sitem, struct roar_buffer ** obuffer, struct roar_dl_librarypara * pluginpara); 39 static int scb_test (int client, struct roar_vio_calls * vio, char * selector, char ** text, struct item * sitem, struct roar_buffer ** obuffer, struct roar_dl_librarypara * pluginpara); 40 static int scb_clients (int client, struct roar_vio_calls * vio, char * selector, char ** text, struct item * sitem, struct roar_buffer ** obuffer, struct roar_dl_librarypara * pluginpara); 41 static int scb_streams (int client, struct roar_vio_calls * vio, char * selector, char ** text, struct item * sitem, struct roar_buffer ** obuffer, struct roar_dl_librarypara * pluginpara); 42 static int scb_client_info(int client, struct roar_vio_calls * vio, char * selector, char ** text, struct item * sitem, struct roar_buffer ** obuffer, struct roar_dl_librarypara * pluginpara); 43 static int scb_stream_info(int client, struct roar_vio_calls * vio, char * selector, char ** text, struct item * sitem, struct roar_buffer ** obuffer, struct roar_dl_librarypara * pluginpara); 44 static int scb_listen_menu(int client, struct roar_vio_calls * vio, char * selector, char ** text, struct item * sitem, struct roar_buffer ** obuffer, struct roar_dl_librarypara * pluginpara); 45 static int scb_listen (int client, struct roar_vio_calls * vio, char * selector, char ** text, struct item * sitem, struct roar_buffer ** obuffer, struct roar_dl_librarypara * pluginpara); 56 46 57 47 static struct roar_gopher_menu_item g_gopher_root_menu[] = { … … 78 68 int dir; 79 69 const char * text; 80 int (*cb)(int client, struct roar_vio_calls * vio, char * selector, char ** text, struct item * sitem );70 int (*cb)(int client, struct roar_vio_calls * vio, char * selector, char ** text, struct item * sitem, struct roar_buffer ** obuffer, struct roar_dl_librarypara * pluginpara); 81 71 } g_gopher_items[] = { 82 72 {.selector = "", .type = _DIR, … … 102 92 static char * _aprintf(size_t sizehint, const char * format, ...); 103 93 104 static int send_menu (int client, struct roar_gopher_menu * menu, struct roar_vio_calls * vio );94 static int send_menu (int client, struct roar_gopher_menu * menu, struct roar_vio_calls * vio, struct roar_buffer ** obuffer); 105 95 static int send_text (const char * text, struct roar_buffer ** obuffer); 106 96 107 97 108 98 // SCBs: 109 static int scb_status_txt (int client, struct roar_vio_calls * vio, char * selector, char ** text, struct item * sitem ) {99 static int scb_status_txt (int client, struct roar_vio_calls * vio, char * selector, char ** text, struct item * sitem, struct roar_buffer ** obuffer, struct roar_dl_librarypara * pluginpara) { 110 100 const size_t len = 1024; 111 const char * server_version = NULL; 112 113 (void)client, (void)vio, (void)selector, (void)text, (void)sitem; 114 115 if ( DISTRIBUTION_VERSION_STRING[0] == 0 ) { 116 server_version = "roard/" PACKAGE_VERSION " <" DEVICE_VENDOR_STRING ">"; 117 } else { 118 server_version = "roard/" PACKAGE_VERSION " <" DEVICE_VENDOR_STRING "> (" DISTRIBUTION_VERSION_STRING ")"; 119 } 101 102 (void)client, (void)vio, (void)selector, (void)text, (void)sitem, (void)obuffer; 120 103 121 104 *text = roar_mm_malloc(len); … … 126 109 127 110 snprintf(*text, len, 128 "Server version: %s\r\n" 111 "Host application: %s\r\n" 112 "Host ABI: %s\r\n" 129 113 "Server location: %s\r\n" 130 114 "Server description: %s\r\n" … … 132 116 "Counters current: %llu clients, %llu streams\r\n" 133 117 "Counters sum: %llu clients, %llu streams\r\n", 134 server_version, 118 pluginpara->appname == NULL ? "***unknown***" : pluginpara->appname, 119 pluginpara->abiversion == NULL ? "***unknown***" : pluginpara->abiversion, 135 120 g_config->location, 136 121 g_config->description, … … 145 130 } 146 131 147 static int scb_test(int client, struct roar_vio_calls * vio, char * selector, char ** text, struct item * sitem ) {132 static int scb_test(int client, struct roar_vio_calls * vio, char * selector, char ** text, struct item * sitem, struct roar_buffer ** obuffer, struct roar_dl_librarypara * pluginpara) { 148 133 ssize_t toks; 149 134 char * tok; 150 135 size_t len; 151 136 152 (void)client, (void)vio ;137 (void)client, (void)vio, (void)obuffer, (void)pluginpara; 153 138 154 139 toks = roar_mm_strseltok(sitem->selector, selector, &tok, 1); … … 160 145 len += 64; 161 146 162 *text = roar_mm_malloc( 1024);147 *text = roar_mm_malloc(len); 163 148 if ( *text == NULL ) 164 149 return -1; … … 173 158 } 174 159 175 static int scb_clients (int client, struct roar_vio_calls * vio, char * selector, char ** text, struct item * sitem ) {160 static int scb_clients (int client, struct roar_vio_calls * vio, char * selector, char ** text, struct item * sitem, struct roar_buffer ** obuffer, struct roar_dl_librarypara * pluginpara) { 176 161 struct roar_gopher_menu_item items[ROAR_CLIENTS_MAX]; 177 162 struct roar_gopher_menu menu = {.flags = 0, .items = items, .items_len = 0}; … … 184 169 int ret; 185 170 186 (void)selector, (void)text, (void)sitem ;171 (void)selector, (void)text, (void)sitem, (void)pluginpara; 187 172 188 173 memset(items, 0, sizeof(items)); … … 217 202 } 218 203 219 ret = send_menu(client, &menu, vio );204 ret = send_menu(client, &menu, vio, obuffer); 220 205 221 206 for (i = 0; i < menu.items_len; i++) { … … 229 214 } 230 215 231 static int scb_streams (int client, struct roar_vio_calls * vio, char * selector, char ** text, struct item * sitem ) {216 static int scb_streams (int client, struct roar_vio_calls * vio, char * selector, char ** text, struct item * sitem, struct roar_buffer ** obuffer, struct roar_dl_librarypara * pluginpara) { 232 217 struct roar_gopher_menu_item items[ROAR_STREAMS_MAX]; 233 218 struct roar_gopher_menu menu = {.flags = 0, .items = items, .items_len = 0}; … … 240 225 int ret; 241 226 242 (void)selector, (void)text, (void)sitem ;227 (void)selector, (void)text, (void)sitem, (void)pluginpara; 243 228 244 229 memset(items, 0, sizeof(items)); … … 273 258 } 274 259 275 ret = send_menu(client, &menu, vio );260 ret = send_menu(client, &menu, vio, obuffer); 276 261 277 262 for (i = 0; i < menu.items_len; i++) { … … 285 270 } 286 271 287 static int scb_client_info(int client, struct roar_vio_calls * vio, char * selector, char ** text, struct item * sitem ) {272 static int scb_client_info(int client, struct roar_vio_calls * vio, char * selector, char ** text, struct item * sitem, struct roar_buffer ** obuffer, struct roar_dl_librarypara * pluginpara) { 288 273 #define _MAX_ITEMS (16 + ROAR_CLIENTS_MAX_STREAMS_PER_CLIENT) 289 274 struct roar_gopher_menu_item items[_MAX_ITEMS]; … … 299 284 char tmp[80]; 300 285 301 (void)text ;286 (void)text, (void)pluginpara; 302 287 303 288 memset(items, 0, sizeof(items)); … … 350 335 } 351 336 352 ret = send_menu(client, &menu, vio );337 ret = send_menu(client, &menu, vio, obuffer); 353 338 354 339 for (i = 0; i < menu.items_len; i++) { … … 363 348 } 364 349 365 static int scb_stream_info(int client, struct roar_vio_calls * vio, char * selector, char ** text, struct item * sitem ) {350 static int scb_stream_info(int client, struct roar_vio_calls * vio, char * selector, char ** text, struct item * sitem, struct roar_buffer ** obuffer, struct roar_dl_librarypara * pluginpara) { 366 351 #define _MAX_ITEMS 12 367 352 struct roar_gopher_menu_item items[_MAX_ITEMS]; … … 376 361 int id; 377 362 378 (void)text ;363 (void)text, (void)pluginpara; 379 364 380 365 memset(items, 0, sizeof(items)); … … 430 415 item->selector = _aprintf(64, "/clients/%i/", ss->client); 431 416 432 ret = send_menu(client, &menu, vio );417 ret = send_menu(client, &menu, vio, obuffer); 433 418 434 419 for (i = 0; i < menu.items_len; i++) { … … 443 428 } 444 429 445 static int scb_listen_menu(int client, struct roar_vio_calls * vio, char * selector, char ** text, struct item * sitem ) {430 static int scb_listen_menu(int client, struct roar_vio_calls * vio, char * selector, char ** text, struct item * sitem, struct roar_buffer ** obuffer, struct roar_dl_librarypara * pluginpara) { 446 431 #define _MAX_ITEMS 12 447 432 struct roar_gopher_menu_item items[_MAX_ITEMS]; … … 453 438 size_t i; 454 439 455 (void)selector, (void)text, (void)sitem ;440 (void)selector, (void)text, (void)sitem, (void)pluginpara; 456 441 457 442 memset(items, 0, sizeof(items)); … … 474 459 } 475 460 476 ret = send_menu(client, &menu, vio );461 ret = send_menu(client, &menu, vio, obuffer); 477 462 478 463 for (i = 0; i < menu.items_len; i++) { … … 487 472 } 488 473 489 static int scb_listen (int client, struct roar_vio_calls * vio, char * selector, char ** text, struct item * sitem ) {474 static int scb_listen (int client, struct roar_vio_calls * vio, char * selector, char ** text, struct item * sitem, struct roar_buffer ** obuffer, struct roar_dl_librarypara * pluginpara) { 490 475 struct roar_stream_server * ss; 491 476 struct roar_stream * s; … … 496 481 int stream = -1; 497 482 498 (void)vio, (void)text ;483 (void)vio, (void)text, (void)obuffer, (void)pluginpara; 499 484 500 485 toks = roar_mm_strseltok(sitem->selector, selector, tok, 5); … … 589 574 } 590 575 591 static int send_menu (int client, struct roar_gopher_menu * menu, struct roar_vio_calls * vio ) {576 static int send_menu (int client, struct roar_gopher_menu * menu, struct roar_vio_calls * vio, struct roar_buffer ** obuffer) { 592 577 struct roar_buffer * buf; 593 578 struct roar_gopher_menu_item * item; … … 600 585 struct roar_sockname sockaddr; 601 586 587 (void)client; 588 602 589 if ( roar_vio_ctl(vio, ROAR_VIO_CTL_GET_SOCKNAME, &sockaddr) == -1 ) { 603 590 memset(&sockaddr, 0, sizeof(sockaddr)); … … 629 616 if ( roar_buffer_set_len(buf, strlen(data)) == -1 ) { 630 617 roar_buffer_free(buf); 618 if ( sockaddr.addr != NULL ) 619 roar_mm_free(sockaddr.addr); 631 620 return -1; 632 621 } 633 622 634 clients_add_output(client, &buf); 623 if ( roar_buffer_moveintoqueue(obuffer, &buf) == -1 ) { 624 roar_buffer_free(buf); 625 if ( sockaddr.addr != NULL ) 626 roar_mm_free(sockaddr.addr); 627 return -1; 628 } 635 629 } 636 630 … … 744 738 if ( c->cb != NULL ) { 745 739 text = NULL; 746 funcret = c->cb(client, vio, inbuf, &text, c );740 funcret = c->cb(client, vio, inbuf, &text, c, obuffer, pluginpara); 747 741 748 742 if ( funcret == 0 && text != NULL ) … … 754 748 switch (c->type) { 755 749 case _DIR: 756 funcret = send_menu(client, &(c->menu), vio );750 funcret = send_menu(client, &(c->menu), vio, obuffer); 757 751 break; 758 752 case _FILE:
Note: See TracChangeset
for help on using the changeset viewer.