示例#1
0
lagopus_result_t
cmd_dump_file_write(FILE *fp,
                    lagopus_dstring_t *result) {
  lagopus_result_t ret = LAGOPUS_RESULT_ANY_FAILURES;
  char *str = NULL;

  if (fp != NULL && result != NULL) {
    ret = lagopus_dstring_str_get(result, &str);
    if (ret == LAGOPUS_RESULT_OK) {
      if (fputs(str, fp) != EOF) {
        ret = LAGOPUS_RESULT_OK;
      } else {
        ret = LAGOPUS_RESULT_OUTPUT_FAILURE;
        lagopus_perror(ret);
      }
    } else {
      lagopus_perror(ret);
    }
  } else {
    ret = LAGOPUS_RESULT_INVALID_ARGS;
    lagopus_perror(ret);
  }

  free(str);

  return ret;
}
示例#2
0
void
test_lagopus_dstring_str_get_null(void) {
  lagopus_result_t ret = LAGOPUS_RESULT_ANY_FAILURES;
  lagopus_dstring_t ds_null = NULL;
  char *str = NULL;

  ret = lagopus_dstring_str_get(NULL, &str);
  TEST_ASSERT_EQUAL_MESSAGE(LAGOPUS_RESULT_INVALID_ARGS, ret,
                            "lagopus_dstring_str_get error.");

  ret = lagopus_dstring_str_get(&ds_null, &str);
  TEST_ASSERT_EQUAL_MESSAGE(LAGOPUS_RESULT_INVALID_ARGS, ret,
                            "lagopus_dstring_str_get error.");

  ret = lagopus_dstring_str_get(&ds, NULL);
  TEST_ASSERT_EQUAL_MESSAGE(LAGOPUS_RESULT_INVALID_ARGS, ret,
                            "lagopus_dstring_str_get error.");
}
示例#3
0
int
main(int argc, const char *const argv[]) {
  lagopus_result_t r = LAGOPUS_RESULT_ANY_FAILURES;
  const char *file = argv[1];

  (void)argc;

  if ((r = datastore_register_configurator(MY_CONF_NAME)) ==
      LAGOPUS_RESULT_OK) {

    lagopus_dstring_t ds;
    char *str = NULL;

    (void)lagopus_dstring_create(&ds);

    if (IS_VALID_STRING(file) == true) {
      r = datastore_interp_eval_file(&s_interp, MY_CONF_NAME, file, &ds);
    } else {
      while ((r = datastore_interp_eval_fd(&s_interp, MY_CONF_NAME,
                                           stdin, stdout, false, &ds)) ==
             LAGOPUS_RESULT_OK) {
        lagopus_dstring_clear(&ds);
      }
    }

    if (r != LAGOPUS_RESULT_OK) {
      lagopus_perror(r);
    }

    (void)lagopus_dstring_str_get(&ds, &str);
    if (IS_VALID_STRING(str) == true) {
      fprintf(stdout, "%s", str);
    }

    free((void *)str);

  } else {
    lagopus_perror(r);
  }

  datastore_unregister_configurator(MY_CONF_NAME);

  return (r == LAGOPUS_RESULT_OK) ? 0 : 1;
}
示例#4
0
static inline lagopus_result_t
s_parse_begin_show(lagopus_dstring_t *result) {
    lagopus_result_t ret = LAGOPUS_RESULT_ANY_FAILURES;
    lagopus_dstring_t show_result = NULL;
    char *str = NULL;

    /* show. */
    if ((ret = lagopus_dstring_create(&show_result)) ==
            LAGOPUS_RESULT_OK) {
        if ((ret = lagopus_dstring_appendf(&show_result, "{")) !=
                LAGOPUS_RESULT_OK) {
            lagopus_perror(ret);
            goto done;
        }
        if ((ret = datastore_json_string_append(
                       &show_result, ATTR_NAME_GET(opt_strs, OPT_TMP_DIR),
                       save_tmp_dir, false)) !=
                LAGOPUS_RESULT_OK) {
            lagopus_perror(ret);
            goto done;
        }
        if ((ret = lagopus_dstring_appendf(&show_result, "}")) !=
                LAGOPUS_RESULT_OK) {
            lagopus_perror(ret);
            goto done;
        }

        ret = lagopus_dstring_str_get(&show_result, &str);
        if (ret == LAGOPUS_RESULT_OK) {
            ret = datastore_json_result_set(result, LAGOPUS_RESULT_OK, str);
        }
    } else {
        lagopus_perror(ret);
    }

done:
    free(str);
    lagopus_dstring_destroy(&show_result);

    return  ret;
}
示例#5
0
lagopus_result_t
cmd_dump_error_send(void *stream_out,
                    datastore_printf_proc_t printf_proc,
                    lagopus_dstring_t *result) {
  lagopus_result_t ret = LAGOPUS_RESULT_ANY_FAILURES;
  char *str = NULL;

  if (stream_out != NULL && printf_proc != NULL &&
      result != NULL) {
    ret = lagopus_dstring_str_get(result, &str);
    if (ret == LAGOPUS_RESULT_OK) {
      printf_proc(stream_out,"%s\n", str);
    } else {
      lagopus_perror(ret);
    }
  } else {
    ret = LAGOPUS_RESULT_INVALID_ARGS;
    lagopus_perror(ret);
  }

  free(str);

  return ret;
}
示例#6
0
STATIC lagopus_result_t
flow_cmd_parse(datastore_interp_t *iptr,
               datastore_interp_state_t state,
               size_t argc, const char *const argv[],
               lagopus_hashmap_t *hptr,
               datastore_update_proc_t u_proc,
               datastore_enable_proc_t e_proc,
               datastore_serialize_proc_t s_proc,
               datastore_destroy_proc_t d_proc,
               lagopus_dstring_t *result) {
  lagopus_result_t ret = LAGOPUS_RESULT_ANY_FAILURES;
  lagopus_result_t ret_for_json = LAGOPUS_RESULT_ANY_FAILURES;
  size_t i;
  void *sub_cmd_proc;
  char *name = NULL;
  char *fullname = NULL;
  char *str = NULL;
  flow_conf_t conf = {NULL, OFPTT_ALL};
  configs_t out_configs = {false, false};
  lagopus_dstring_t conf_result = NULL;
  (void) u_proc;
  (void) e_proc;
  (void) s_proc;
  (void) d_proc;

  for (i = 0; i < argc; i++) {
    lagopus_msg_debug(1, "argv[" PFSZS(4, u) "]:\t'%s'\n", i, argv[i]);
  }

  if (iptr != NULL && argv != NULL && result != NULL) {
    if ((ret = lagopus_dstring_create(&conf_result)) == LAGOPUS_RESULT_OK) {
      argv++;

      if (IS_VALID_STRING(*argv) == true) {
        if ((ret = lagopus_hashmap_find(
                     &sub_cmd_not_name_table,
                     (void *)(*argv),
                     &sub_cmd_proc)) == LAGOPUS_RESULT_OK) {
          /* parse sub cmd. */
          if (sub_cmd_proc != NULL) {
            ret_for_json =
              ((sub_cmd_proc_t) sub_cmd_proc)(iptr, state,
                                              argc, argv,
                                              NULL, hptr,
                                              u_proc,
                                              (void *) &out_configs,
                                              result);
          }
        }

        if (ret == LAGOPUS_RESULT_NOT_FOUND &&
            ret_for_json != LAGOPUS_RESULT_OK) {
          if ((ret = lagopus_str_unescape(*argv, "\"'", &name)) < 0) {
            goto done;
          } else {
            argv++;

            if ((ret = namespace_get_fullname(name, &fullname))
                == LAGOPUS_RESULT_OK) {
              if (IS_VALID_STRING(*argv) == true) {
                if ((ret = lagopus_hashmap_find(
                             &sub_cmd_table,
                             (void *)(*argv),
                             &sub_cmd_proc)) == LAGOPUS_RESULT_OK) {
                  /* parse sub cmd. */
                  if (sub_cmd_proc != NULL) {
                    ret_for_json =
                      ((sub_cmd_proc_t) sub_cmd_proc)(iptr, state,
                                                      argc, argv,
                                                      fullname, hptr,
                                                      u_proc,
                                                      (void *) &out_configs,
                                                      result);
                  } else {
                    ret = LAGOPUS_RESULT_NOT_FOUND;
                    lagopus_perror(ret);
                    goto done;
                  }
                } else if (ret == LAGOPUS_RESULT_NOT_FOUND) {
                  /* parse dump cmd. */
                  ret_for_json = dump_sub_cmd_parse(iptr, argv, fullname, &conf,
                                                    &out_configs, result);
                } else {
                  ret_for_json = datastore_json_result_string_setf(
                                   result, LAGOPUS_RESULT_INVALID_ARGS,
                                   "sub_cmd = %s.", *argv);
                }
              } else {
                /* parse dump cmd. */
                ret_for_json = dump_sub_cmd_parse(iptr, argv, fullname, &conf,
                                                  &out_configs, result);
              }
            } else {
              ret_for_json = datastore_json_result_string_setf(
                               result, ret, "Can't get fullname %s.", name);
            }
          }
        }
      } else {
        /* parse dump all cmd. */
        ret_for_json = dump_sub_cmd_parse(iptr, argv, NULL, &conf,
                                          &out_configs, result);
      }

      /* create jsno for LAGOPUS_RESULT_OK. */
      if (ret_for_json == LAGOPUS_RESULT_OK &&
          out_configs.is_dump == false) {
        ret = lagopus_dstring_str_get(result, &str);
        if (ret != LAGOPUS_RESULT_OK) {
          goto done;
        }
        if (IS_VALID_STRING(str) == true) {
          ret = datastore_json_result_set(result, LAGOPUS_RESULT_OK, str);
        } else {
          ret = datastore_json_result_set(result, LAGOPUS_RESULT_OK, NULL);
        }
      } else {
        ret = ret_for_json;
      }
    }

  done:
    /* free. */
    free(name);
    free(fullname);
    free(str);
    lagopus_dstring_destroy(&conf_result);
  } else {
    ret = LAGOPUS_RESULT_INVALID_ARGS;
  }

  return ret;
}
示例#7
0
static bool
queue_conf_iterate(void *key, void *val, lagopus_hashentry_t he,
                   void *arg) {
  lagopus_result_t ret = LAGOPUS_RESULT_ANY_FAILURES;
  lagopus_dstring_t ds;
  char *prefix = NULL;
  size_t len = 0;
  bool result = false;

  char *fullname = (char *)key;
  queue_conf_iter_ctx_t *ctx =
    (queue_conf_iter_ctx_t *)arg;

  (void)he;
  if (((queue_conf_t *) val)->is_destroying == false) {
    if (ctx->m_namespace == NULL) {
      if (ctx->m_n_configs < ctx->m_max) {
        ctx->m_configs[ctx->m_n_configs++] =
          (queue_conf_t *)val;
        result = true;
      } else {
        result = false;
      }
    } else {
      ret = lagopus_dstring_create(&ds);
      if (ret == LAGOPUS_RESULT_OK) {
        if (ctx->m_namespace[0] == '\0') {
          ret = lagopus_dstring_appendf(&ds,
                                        "%s",
                                        NAMESPACE_DELIMITER);
        } else {
          ret = lagopus_dstring_appendf(&ds,
                                        "%s%s",
                                        ctx->m_namespace,
                                        NAMESPACE_DELIMITER);
        }

        if (ret == LAGOPUS_RESULT_OK) {
          ret = lagopus_dstring_str_get(&ds, &prefix);
          if (ret == LAGOPUS_RESULT_OK) {
            len = strlen(prefix);
            if (ctx->m_n_configs < ctx->m_max &&
                strncmp(fullname, prefix, len) == 0) {
              ctx->m_configs[ctx->m_n_configs++] =
                (queue_conf_t *)val;
            }
            result = true;
          } else {
            lagopus_msg_warning("dstring get failed.\n");
            result = false;
          }
        } else {
          lagopus_msg_warning("dstring append failed.\n");
          result = false;
        }
      } else {
        lagopus_msg_warning("dstring create failed.\n");
        result = false;
      }

      free((void *) prefix);

      (void)lagopus_dstring_clear(&ds);
      (void)lagopus_dstring_destroy(&ds);
    }
  } else {
    /* skip destroying conf.*/
    result = true;
  }

  return result;
}