Beispiel #1
0
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;
}
Beispiel #2
0
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);
  }
*/

}
Beispiel #3
0
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, "#"); 
  }
}
Beispiel #4
0
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);
    }
  }
}
Beispiel #5
0
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);
}
Beispiel #6
0
/*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);
}
Beispiel #7
0
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;
}