int list_plugin_cmd(struct katcp_dispatch *d, int argc) { int i; void *module; char *plugin_name; char *plugin_vers; struct PLUGIN *plugin_info; /* Append each name/vers to the inform list */ for (i=0; i<N_LOADED_PLUGINS; i++) { module = LOADED_PLUGINS[i]; /* Get plugin info (no error checking needed)*/ plugin_info = dlsym(module, "KATCP_PLUGIN"); plugin_name = plugin_info->name; plugin_vers = plugin_info->version; /* Create inform for each loaded module */ prepend_inform_katcp(d); append_string_katcp(d, KATCP_FLAG_STRING, plugin_name); append_string_katcp(d, KATCP_FLAG_STRING | KATCP_FLAG_LAST, plugin_vers); } /* Initialize the response */ prepend_reply_katcp(d); append_string_katcp(d, KATCP_FLAG_STRING, KATCP_OK); /* Append total number of plugins */ append_double_katcp(d, KATCP_FLAG_DOUBLE | KATCP_FLAG_LAST, N_LOADED_PLUGINS); return KATCP_RESULT_OWN; }
void show_tree(struct katcp_dispatch *d, struct p_parser *p){ int i,j,k; struct p_label *cl=NULL; struct p_setting *cs=NULL; struct p_value *cv=NULL; //fprintf(stderr,"PARSER show tree\n"); #ifdef STANDALONE for (j=0;j<p->comcount;j++) fprintf(stderr,"%s\n",p->comments[j]->str); #endif for (i=0;i<p->lcount;i++){ cl = p->labels[i]; #ifdef STANDALONE for (j=0;j<cl->comcount;j++) fprintf(stderr,"%s\n",cl->comments[j]->str); fprintf(stderr,"%d[%s]\n",i,cl->str); #endif for (j=0;j<cl->scount;j++){ cs = cl->settings[j]; #ifdef STANDALONE for (k=0;k<cs->comcount;k++) fprintf(stderr,"%s\n",cs->comments[k]->str); fprintf(stderr," %d\t|__ %s\n",j,cs->str); #endif for (k=0;k<cs->vcount;k++){ cv = cs->values[k]; #ifdef STANDALONE fprintf(stderr,"\t%c\t%d = %s\n",(j==cl->scount-1)?' ':'|',k,cv->str); #endif #ifndef STANDALONE prepend_inform_katcp(d); append_string_katcp(d,KATCP_FLAG_STRING,"list"); append_string_katcp(d,KATCP_FLAG_STRING,cl->str); append_string_katcp(d,KATCP_FLAG_STRING,cs->str); append_string_katcp(d,KATCP_FLAG_STRING | KATCP_FLAG_LAST,cv->str); #endif } #ifdef STANDALONE fprintf(stderr,"\t%c\n",(j==cl->scount-1)?' ':'|'); #endif } } /* struct p_comment *cc; for (i=0;i<p->comcount;i++){ cc = p->comments[i]; fprintf(stderr,"%s",cc->str); } */ }
void print_types_katcp(struct katcp_dispatch *d) { struct katcp_shared *s; struct katcp_type **ts, *t; int size, i; sane_shared_katcp(d); s = d->d_shared; if (s == NULL) return; ts = s->s_type; size = s->s_type_count; if (ts == NULL) return; for (i=0; i<size; i++){ t = ts[i]; print_type_katcp(d, t, 0); if (i+1 < size) append_string_katcp(d, KATCP_FLAG_FIRST | KATCP_FLAG_STRING | KATCP_FLAG_LAST, "#"); } }
void print_type_katcp(struct katcp_dispatch *d, struct katcp_type *t, int flags) { if (t != NULL){ //log_message_katcp(d, KATCP_LEVEL_INFO, NULL, "katcp type: %s", t->t_name); //prepend_inform_katcp(d); append_string_katcp(d, KATCP_FLAG_STRING | KATCP_FLAG_FIRST, "#katcp type:"); append_string_katcp(d, KATCP_FLAG_STRING | KATCP_FLAG_LAST, t->t_name); #if DEBUG > 1 fprintf(stderr, "katcp_type: type <%s> (%p) with tree (%p) print:(%p) free:(%p) copy:(%p) compare:(%p) parse:(%p)\n", t->t_name, t, t->t_tree, t->t_print, t->t_free, t->t_copy, t->t_compare, t->t_parse); #endif if (t->t_tree != NULL){ // print_avltree(d, t->t_tree->t_root, 0, NULL); //check_balances_avltree(t->t_tree->t_root, 0); print_inorder_avltree(d, t->t_tree->t_root, t->t_print, (t->t_print)?flags:1); } } }
void print_config_setting_type_mod(struct katcp_dispatch *d, void *data) { struct config_setting *s; s = data; if (s == NULL) return; #ifdef DEBUG fprintf(stderr, "mod_config_parser: print_config_setting_type %s = %s\n", s->s_name, s->s_value); #endif //log_message_katcp(d, KATCP_LEVEL_INFO, NULL, "configsetting: %s = %s", s->s_name, s->s_value); //prepend_inform_katcp(d); append_string_katcp(d, KATCP_FLAG_FIRST | KATCP_FLAG_STRING, "#configsetting:"); append_string_katcp(d, KATCP_FLAG_STRING, s->s_name); append_string_katcp(d, KATCP_FLAG_STRING, "="); append_string_katcp(d, KATCP_FLAG_STRING | KATCP_FLAG_LAST, s->s_value); }
/*Statemachine Base********************************************************************************************/ void print_integer_type_kcs(struct katcp_dispatch *d, char *key, void *data) { int *o; o = data; if (o == NULL) return; #ifdef DEBUG fprintf(stderr, "statemachine: print_integer_type %d\n",*o); #endif append_string_katcp(d, KATCP_FLAG_STRING | KATCP_FLAG_FIRST, "#integer type:"); append_signed_long_katcp(d, KATCP_FLAG_SLONG | KATCP_FLAG_LAST, *o); }
int echo_cmd(struct katcp_dispatch *d, int argc) { int i; char *ptr, *tmp; int have, want, result; append_string_katcp(d, KATCP_FLAG_FIRST | ((argc <= 1) ? KATCP_FLAG_LAST : 0), "!echo"); have = 0; ptr = NULL; i = 1; while(i < argc){ want = arg_buffer_katcp(d, i, ptr, have); #ifdef DEBUG fprintf(stderr, "echo: length of arg %d is %d\n", i, want); #endif if(want > have){ tmp = realloc(ptr, want); if(tmp == NULL){ free(ptr); return KATCP_RESULT_OWN; /* problematic failure, broken reply */ } ptr = tmp; have = want; } else { i++; #ifdef DEBUG fprintf(stderr, "echo: appending %d\n", want); #endif result = append_buffer_katcp(d, ((argc == i) ? KATCP_FLAG_LAST : 0), ptr, want); if(result < 0){ #ifdef DEBUG fprintf(stderr, "echo: append failed (code=%d)\n", result); #endif free(ptr); return KATCP_RESULT_OWN; } } } if(ptr){ free(ptr); } return KATCP_RESULT_OWN; }