Changeset 5741:edecee88ed39 in roaraudio


Ignore:
Timestamp:
11/09/12 03:09:00 (11 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

some general improvements to move away from roard a bit more

File:
1 edited

Legend:

Unmodified
Added
Removed
  • plugins/roard/protocol-gopher.c

    r5740 r5741  
    2626#include <roard/include/roard.h> 
    2727 
    28 #ifndef DISTRIBUTION_VERSION_STRING 
    29 #define DISTRIBUTION_VERSION_STRING "" 
    30 #endif 
    31 #ifndef PACKAGE_VERSION 
    32 #define PACKAGE_VERSION "" 
    33 #endif 
    34 #ifndef DEVICE_VENDOR_STRING 
    35 #define DEVICE_VENDOR_STRING "" 
    36 #endif 
    37  
    3828#ifndef ROAR_WITHOUT_DCOMP_EMUL_GOPHER 
    3929#include <roaraudio/proto_gopher.h> 
     
    4636struct item; 
    4737 
    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); 
     38static 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); 
     39static 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); 
     40static 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); 
     41static 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); 
     42static 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); 
     43static 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); 
     44static 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); 
     45static 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); 
    5646 
    5747static struct roar_gopher_menu_item g_gopher_root_menu[] = { 
     
    7868 int dir; 
    7969 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); 
    8171} g_gopher_items[] = { 
    8272 {.selector = "", .type = _DIR, 
     
    10292static char * _aprintf(size_t sizehint, const char * format, ...); 
    10393 
    104 static int send_menu (int client, struct roar_gopher_menu * menu, struct roar_vio_calls * vio); 
     94static int send_menu (int client, struct roar_gopher_menu * menu, struct roar_vio_calls * vio, struct roar_buffer ** obuffer); 
    10595static int send_text (const char * text, struct roar_buffer ** obuffer); 
    10696 
    10797 
    10898// SCBs: 
    109 static int scb_status_txt (int client, struct roar_vio_calls * vio, char * selector, char ** text, struct item * sitem) { 
     99static 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) { 
    110100 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; 
    120103 
    121104 *text = roar_mm_malloc(len); 
     
    126109 
    127110 snprintf(*text, len, 
    128           "Server version:     %s\r\n" 
     111          "Host application:   %s\r\n" 
     112          "Host ABI:           %s\r\n" 
    129113          "Server location:    %s\r\n" 
    130114          "Server description: %s\r\n" 
     
    132116          "Counters current:   %llu clients, %llu streams\r\n" 
    133117          "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, 
    135120          g_config->location, 
    136121          g_config->description, 
     
    145130} 
    146131 
    147 static int scb_test(int client, struct roar_vio_calls * vio, char * selector, char ** text, struct item * sitem) { 
     132static 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) { 
    148133 ssize_t toks; 
    149134 char * tok; 
    150135 size_t len; 
    151136 
    152  (void)client, (void)vio; 
     137 (void)client, (void)vio, (void)obuffer, (void)pluginpara; 
    153138 
    154139 toks = roar_mm_strseltok(sitem->selector, selector, &tok, 1); 
     
    160145 len += 64; 
    161146 
    162  *text = roar_mm_malloc(1024); 
     147 *text = roar_mm_malloc(len); 
    163148 if ( *text == NULL ) 
    164149  return -1; 
     
    173158} 
    174159 
    175 static int scb_clients    (int client, struct roar_vio_calls * vio, char * selector, char ** text, struct item * sitem) { 
     160static 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) { 
    176161 struct roar_gopher_menu_item items[ROAR_CLIENTS_MAX]; 
    177162 struct roar_gopher_menu menu = {.flags = 0, .items = items, .items_len = 0}; 
     
    184169 int ret; 
    185170 
    186  (void)selector, (void)text, (void)sitem; 
     171 (void)selector, (void)text, (void)sitem, (void)pluginpara; 
    187172 
    188173 memset(items, 0, sizeof(items)); 
     
    217202 } 
    218203 
    219  ret = send_menu(client, &menu, vio); 
     204 ret = send_menu(client, &menu, vio, obuffer); 
    220205 
    221206 for (i = 0; i < menu.items_len; i++) { 
     
    229214} 
    230215 
    231 static int scb_streams    (int client, struct roar_vio_calls * vio, char * selector, char ** text, struct item * sitem) { 
     216static 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) { 
    232217 struct roar_gopher_menu_item items[ROAR_STREAMS_MAX]; 
    233218 struct roar_gopher_menu menu = {.flags = 0, .items = items, .items_len = 0}; 
     
    240225 int ret; 
    241226 
    242  (void)selector, (void)text, (void)sitem; 
     227 (void)selector, (void)text, (void)sitem, (void)pluginpara; 
    243228 
    244229 memset(items, 0, sizeof(items)); 
     
    273258 } 
    274259 
    275  ret = send_menu(client, &menu, vio); 
     260 ret = send_menu(client, &menu, vio, obuffer); 
    276261 
    277262 for (i = 0; i < menu.items_len; i++) { 
     
    285270} 
    286271 
    287 static int scb_client_info(int client, struct roar_vio_calls * vio, char * selector, char ** text, struct item * sitem) { 
     272static 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) { 
    288273#define _MAX_ITEMS (16 + ROAR_CLIENTS_MAX_STREAMS_PER_CLIENT) 
    289274 struct roar_gopher_menu_item items[_MAX_ITEMS]; 
     
    299284 char tmp[80]; 
    300285 
    301  (void)text; 
     286 (void)text, (void)pluginpara; 
    302287 
    303288 memset(items, 0, sizeof(items)); 
     
    350335 } 
    351336 
    352  ret = send_menu(client, &menu, vio); 
     337 ret = send_menu(client, &menu, vio, obuffer); 
    353338 
    354339 for (i = 0; i < menu.items_len; i++) { 
     
    363348} 
    364349 
    365 static int scb_stream_info(int client, struct roar_vio_calls * vio, char * selector, char ** text, struct item * sitem) { 
     350static 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) { 
    366351#define _MAX_ITEMS 12 
    367352 struct roar_gopher_menu_item items[_MAX_ITEMS]; 
     
    376361 int id; 
    377362 
    378  (void)text; 
     363 (void)text, (void)pluginpara; 
    379364 
    380365 memset(items, 0, sizeof(items)); 
     
    430415 item->selector = _aprintf(64, "/clients/%i/", ss->client); 
    431416 
    432  ret = send_menu(client, &menu, vio); 
     417 ret = send_menu(client, &menu, vio, obuffer); 
    433418 
    434419 for (i = 0; i < menu.items_len; i++) { 
     
    443428} 
    444429 
    445 static int scb_listen_menu(int client, struct roar_vio_calls * vio, char * selector, char ** text, struct item * sitem) { 
     430static 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) { 
    446431#define _MAX_ITEMS 12 
    447432 struct roar_gopher_menu_item items[_MAX_ITEMS]; 
     
    453438 size_t i; 
    454439 
    455  (void)selector, (void)text, (void)sitem; 
     440 (void)selector, (void)text, (void)sitem, (void)pluginpara; 
    456441 
    457442 memset(items, 0, sizeof(items)); 
     
    474459 } 
    475460 
    476  ret = send_menu(client, &menu, vio); 
     461 ret = send_menu(client, &menu, vio, obuffer); 
    477462 
    478463 for (i = 0; i < menu.items_len; i++) { 
     
    487472} 
    488473 
    489 static int scb_listen     (int client, struct roar_vio_calls * vio, char * selector, char ** text, struct item * sitem) { 
     474static 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) { 
    490475 struct roar_stream_server * ss; 
    491476 struct roar_stream        * s; 
     
    496481 int stream = -1; 
    497482 
    498  (void)vio, (void)text; 
     483 (void)vio, (void)text, (void)obuffer, (void)pluginpara; 
    499484 
    500485 toks = roar_mm_strseltok(sitem->selector, selector, tok, 5); 
     
    589574} 
    590575 
    591 static int send_menu (int client, struct roar_gopher_menu * menu, struct roar_vio_calls * vio) { 
     576static int send_menu (int client, struct roar_gopher_menu * menu, struct roar_vio_calls * vio, struct roar_buffer ** obuffer) { 
    592577 struct roar_buffer * buf; 
    593578 struct roar_gopher_menu_item * item; 
     
    600585 struct roar_sockname sockaddr; 
    601586 
     587 (void)client; 
     588 
    602589 if ( roar_vio_ctl(vio, ROAR_VIO_CTL_GET_SOCKNAME, &sockaddr) == -1 ) { 
    603590  memset(&sockaddr, 0, sizeof(sockaddr)); 
     
    629616  if ( roar_buffer_set_len(buf, strlen(data)) == -1 ) { 
    630617   roar_buffer_free(buf); 
     618   if ( sockaddr.addr != NULL ) 
     619    roar_mm_free(sockaddr.addr); 
    631620   return -1; 
    632621  } 
    633622 
    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  } 
    635629 } 
    636630 
     
    744738 if ( c->cb != NULL ) { 
    745739  text = NULL; 
    746   funcret = c->cb(client, vio, inbuf, &text, c); 
     740  funcret = c->cb(client, vio, inbuf, &text, c, obuffer, pluginpara); 
    747741 
    748742  if ( funcret == 0 && text != NULL ) 
     
    754748  switch (c->type) { 
    755749   case _DIR: 
    756      funcret = send_menu(client, &(c->menu), vio); 
     750     funcret = send_menu(client, &(c->menu), vio, obuffer); 
    757751    break; 
    758752   case _FILE: 
Note: See TracChangeset for help on using the changeset viewer.